From 6c332260393eef23ec1e7c12de96b6514b7e2a7a Mon Sep 17 00:00:00 2001 From: SVN Migration Date: Wed, 28 Mar 2007 06:43:09 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create tag 'RELEASE_1_0_1'. --- .gdbinit | 462 - CODING_STANDARDS | 277 - CREDITS | 2 - ChangeLog | 39263 ---------------- ChangeLog.1999.gz | Bin 78772 -> 0 bytes ChangeLog.2000.gz | Bin 159518 -> 0 bytes ChangeLog.2001.gz | Bin 198003 -> 0 bytes ChangeLog.2002.gz | Bin 262369 -> 0 bytes ChangeLog.2003.gz | Bin 183857 -> 0 bytes ChangeLog.2004.gz | Bin 134689 -> 0 bytes ChangeLog.2005.gz | Bin 141345 -> 0 bytes EXTENSIONS | 532 - INSTALL | 1540 - LICENSE | 68 - Makefile.frag | 23 - Makefile.gcov | 76 - Makefile.global | 120 - NEWS | 62 - README.CVS-RULES | 123 - README.EXTENSIONS | 39 - README.EXT_SKEL | 194 - README.NEW-OUTPUT-API | 142 - README.PARAMETER_PARSING_API | 251 - README.PEAR | 11 - README.PHP4-TO-PHP5-THIN-CHANGES | 155 - README.QNX | 57 - README.SELF-CONTAINED-EXTENSIONS | 155 - README.STREAMS | 379 - README.SUBMITTING_PATCH | 126 - README.TESTING | 179 - README.TESTING2 | 137 - README.UNICODE | 649 - README.UNICODE-UPGRADES | 793 - README.UNIX-BUILD-SYSTEM | 123 - README.UPDATING_TO_PHP6 | 172 - README.WIN32-BUILD-SYSTEM | 174 - README.Zeus | 112 - README.input_filter | 193 - TODO | 152 - TODO-5.1 | 5 - TODO-PHP5 | 109 - TSRM/LICENSE | 26 - TSRM/Makefile.am | 6 - TSRM/TODO | 2 - TSRM/TSRM.c | 764 - TSRM/TSRM.dsp | 186 - TSRM/TSRM.h | 169 - TSRM/acconfig.h | 1 - TSRM/acinclude.m4 | 5 - TSRM/build.mk | 43 - TSRM/buildconf | 33 - TSRM/config.w32 | 10 - TSRM/configure.in | 31 - TSRM/readdir.h | 47 - TSRM/threads.m4 | 173 - TSRM/tsrm.m4 | 128 - TSRM/tsrm_config.w32.h | 20 - TSRM/tsrm_config_common.h | 62 - TSRM/tsrm_nw.c | 240 - TSRM/tsrm_nw.h | 29 - TSRM/tsrm_strtok_r.c | 63 - TSRM/tsrm_strtok_r.h | 6 - TSRM/tsrm_virtual_cwd.c | 1214 - TSRM/tsrm_virtual_cwd.h | 327 - TSRM/tsrm_win32.c | 397 - TSRM/tsrm_win32.h | 106 - Zend/ChangeLog | 29854 ------------ Zend/FlexLexer.h | 186 - Zend/LICENSE | 56 - Zend/Makefile.am | 54 - Zend/Makefile.frag | 1 - Zend/OBJECTS2_HOWTO | 195 - Zend/README.ZEND_MM | 13 - Zend/README.ZEND_VM | 108 - Zend/RFCs/001.txt | 136 - Zend/RFCs/002.txt | 169 - Zend/RFCs/003.txt | 72 - Zend/ZEND_CHANGES | 1166 - Zend/Zend.dsp | 602 - Zend/Zend.m4 | 376 - Zend/ZendCore.dep | 258 - Zend/ZendTS.dsp | 735 - Zend/acconfig.h | 121 - Zend/acinclude.m4 | 107 - Zend/bench.php | 419 - Zend/build.mk | 43 - Zend/buildconf | 33 - Zend/configure.in | 51 - Zend/flex.skl | 1636 - Zend/header | 19 - Zend/tests/001.phpt | 54 - Zend/tests/002.phpt | 108 - Zend/tests/003.phpt | 81 - Zend/tests/004.phpt | 25 - Zend/tests/005.phpt | 38 - Zend/tests/006.phpt | 45 - Zend/tests/007.phpt | 103 - Zend/tests/008.phpt | 53 - Zend/tests/009.phpt | 61 - Zend/tests/010.phpt | 75 - Zend/tests/011.phpt | 89 - Zend/tests/012.phpt | 34 - Zend/tests/013.phpt | 34 - Zend/tests/014.inc | 3 - Zend/tests/014.phpt | 82 - Zend/tests/015.phpt | 35 - Zend/tests/016.phpt | 12 - Zend/tests/017.phpt | 120 - Zend/tests/018.phpt | 49 - Zend/tests/abstract-static.phpt | 13 - Zend/tests/array_type_hint_001.phpt | 15 - Zend/tests/bug19859.phpt | 22 - Zend/tests/bug20240.phpt | 43 - Zend/tests/bug20242.phpt | 26 - Zend/tests/bug21478.phpt | 37 - Zend/tests/bug21888.phpt | 36 - Zend/tests/bug22725.phpt | 31 - Zend/tests/bug22836.phpt | 51 - Zend/tests/bug23104.phpt | 14 - Zend/tests/bug24436.phpt | 24 - Zend/tests/bug24635.phpt | 30 - Zend/tests/bug24699.phpt | 13 - Zend/tests/bug24773.phpt | 9 - Zend/tests/bug24884.phpt | 28 - Zend/tests/bug26010.phpt | 23 - Zend/tests/bug26077.phpt | 9 - Zend/tests/bug26166.phpt | 81 - Zend/tests/bug26229.phpt | 29 - Zend/tests/bug26281.phpt | 13 - Zend/tests/bug26696.phpt | 22 - Zend/tests/bug26697.phpt | 24 - Zend/tests/bug26698.phpt | 73 - Zend/tests/bug26801.phpt | 22 - Zend/tests/bug26802.phpt | 37 - Zend/tests/bug27268.phpt | 28 - Zend/tests/bug27304.phpt | 23 - Zend/tests/bug27598.phpt | 12 - Zend/tests/bug27641.phpt | 44 - Zend/tests/bug27669.phpt | 18 - Zend/tests/bug27731.phpt | 10 - Zend/tests/bug27798.phpt | 109 - Zend/tests/bug28072.phpt | 46 - Zend/tests/bug28377.phpt | 23 - Zend/tests/bug28442.phpt | 83 - Zend/tests/bug28444.phpt | 105 - Zend/tests/bug29015.phpt | 11 - Zend/tests/bug29104.phpt | 27 - Zend/tests/bug29210.phpt | 104 - Zend/tests/bug29368.phpt | 34 - Zend/tests/bug29505.phpt | 48 - Zend/tests/bug29674.phpt | 51 - Zend/tests/bug29689.phpt | 62 - Zend/tests/bug29883.phpt | 13 - Zend/tests/bug29890.phpt | 23 - Zend/tests/bug29896.phpt | 28 - Zend/tests/bug29944.phpt | 16 - Zend/tests/bug30080.phpt | 18 - Zend/tests/bug30140.phpt | 37 - Zend/tests/bug30161.phpt | 34 - Zend/tests/bug30162.phpt | 61 - Zend/tests/bug30346.phpt | 24 - Zend/tests/bug30394.phpt | 30 - Zend/tests/bug30407.phpt | 22 - Zend/tests/bug30451.phpt | 36 - Zend/tests/bug30519.phpt | 10 - Zend/tests/bug30702.phpt | 54 - Zend/tests/bug30707.phpt | 29 - Zend/tests/bug30725.phpt | 32 - Zend/tests/bug30791.phpt | 44 - Zend/tests/bug30820.phpt | 27 - Zend/tests/bug30828.phpt | 61 - Zend/tests/bug30889.phpt | 31 - Zend/tests/bug30922.phpt | 13 - Zend/tests/bug30998.phpt | 21 - Zend/tests/bug31098.phpt | 53 - Zend/tests/bug31102.phpt | 48 - Zend/tests/bug31177-2.phpt | 18 - Zend/tests/bug31177.phpt | 44 - Zend/tests/bug31341.phpt | 29 - Zend/tests/bug31525.phpt | 22 - Zend/tests/bug31683.phpt | 124 - Zend/tests/bug31720.phpt | 14 - Zend/tests/bug32226.phpt | 36 - Zend/tests/bug32252.phpt | 47 - Zend/tests/bug32290.phpt | 123 - Zend/tests/bug32296.phpt | 60 - Zend/tests/bug32322.phpt | 82 - Zend/tests/bug32427.phpt | 19 - Zend/tests/bug32428.phpt | 13 - Zend/tests/bug32429.phpt | 28 - Zend/tests/bug32596.phpt | 27 - Zend/tests/bug32660.phpt | 39 - Zend/tests/bug32674.phpt | 62 - Zend/tests/bug32799.phpt | 27 - Zend/tests/bug32833.phpt | 10 - Zend/tests/bug32993.phpt | 29 - Zend/tests/bug33116.phpt | 22 - Zend/tests/bug33171.phpt | 27 - Zend/tests/bug33257.phpt | 25 - Zend/tests/bug33277.phpt | 28 - Zend/tests/bug33282.phpt | 19 - Zend/tests/bug33318.phpt | 8 - Zend/tests/bug33512.phpt | 73 - Zend/tests/bug33558.phpt | 21 - Zend/tests/bug33710.phpt | 32 - Zend/tests/bug33732.phpt | 45 - Zend/tests/bug33771.phpt | 40 - Zend/tests/bug33802.phpt | 22 - Zend/tests/bug33996.phpt | 29 - Zend/tests/bug33999.phpt | 41 - Zend/tests/bug34045.phpt | 28 - Zend/tests/bug34062.phpt | 24 - Zend/tests/bug34064.phpt | 41 - Zend/tests/bug34065.phpt | 15 - Zend/tests/bug34137.phpt | 10 - Zend/tests/bug34199.phpt | 17 - Zend/tests/bug34260.phpt | 36 - Zend/tests/bug34310.phpt | 34 - Zend/tests/bug34358.phpt | 15 - Zend/tests/bug34467.phpt | 27 - Zend/tests/bug34518.phpt | 38 - Zend/tests/bug34617.phpt | 18 - Zend/tests/bug34678.phpt | 25 - Zend/tests/bug34786.phpt | 22 - Zend/tests/bug34873.phpt | 30 - Zend/tests/bug34879.phpt | 11 - Zend/tests/bug34893.phpt | 33 - Zend/tests/bug35017.phpt | 21 - Zend/tests/bug35106.phpt | 14 - Zend/tests/bug35239.phpt | 68 - Zend/tests/bug35393.phpt | 30 - Zend/tests/bug35411.phpt | 19 - Zend/tests/bug35437.phpt | 27 - Zend/tests/bug35470.phpt | 11 - Zend/tests/bug35509.phpt | 31 - Zend/tests/bug35634.phpt | 36 - Zend/tests/bug35655.phpt | 25 - Zend/tests/bug36006.phpt | 30 - Zend/tests/bug36037.phpt | 14 - Zend/tests/bug36071.phpt | 13 - Zend/tests/bug36214.phpt | 79 - Zend/tests/bug36268.phpt | 14 - Zend/tests/bug36303.phpt | 12 - Zend/tests/bug36513.phpt | 22 - Zend/tests/bug36568.phpt | 15 - Zend/tests/bug36759.phpt | 27 - Zend/tests/bug37046.phpt | 23 - Zend/tests/bug37138.phpt | 21 - Zend/tests/bug37144.phpt | 16 - Zend/tests/bug37212.phpt | 69 - Zend/tests/bug37251.phpt | 19 - Zend/tests/bug37632.phpt | 135 - Zend/tests/bug37667.phpt | 77 - Zend/tests/bug37707.phpt | 16 - Zend/tests/bug37811.phpt | 36 - Zend/tests/bug38047.phpt | 50 - Zend/tests/bug38146.phpt | 19 - Zend/tests/bug38211.phpt | 10 - Zend/tests/bug38220.phpt | 92 - Zend/tests/bug38234.phpt | 18 - Zend/tests/bug38287.phpt | 45 - Zend/tests/bug38461.phpt | 25 - Zend/tests/bug38623.phpt | 16 - Zend/tests/bug38624.phpt | 34 - Zend/tests/bug38772.phpt | 42 - Zend/tests/bug38779.phpt | 31 - Zend/tests/bug38779_1.phpt | 51 - Zend/tests/bug38808.phpt | 17 - Zend/tests/bug38942.phpt | 17 - Zend/tests/bug39003.phpt | 24 - Zend/tests/bug39017.phpt | 11 - Zend/tests/bug39036.phpt | 19 - Zend/tests/bug39297.phpt | 45 - Zend/tests/bug39304.phpt | 9 - Zend/tests/bug39438.phpt | 45 - Zend/tests/bug39445.phpt | 16 - Zend/tests/bug39449.phpt | 40 - Zend/tests/bug39602.phpt | 15 - Zend/tests/bug39721.phpt | 30 - Zend/tests/bug39775.phpt | 20 - Zend/tests/bug39825.phpt | 13 - Zend/tests/bug39944.phpt | 88 - Zend/tests/bug39990.phpt | 17 - Zend/tests/bug40236.inc | 10 - Zend/tests/bug40236.phpt | 14 - Zend/tests/bug40261.phpt | 25 - Zend/tests/bug40621.phpt | 20 - Zend/tests/bug40770.phpt | 15 - Zend/tests/bug40784.phpt | 24 - Zend/tests/bug40809.phpt | 33 - Zend/tests/bug40815.phpt | 18 - Zend/tests/bug40833.phpt | 72 - Zend/tests/bug_debug_backtrace.phpt | 28 - Zend/tests/catch.phpt | 23 - Zend/tests/catch_002.phpt | 33 - Zend/tests/catch_003.phpt | 38 - Zend/tests/catch_004.phpt | 43 - Zend/tests/dtor_scope.phpt | 34 - Zend/tests/errmsg_001.phpt | 16 - Zend/tests/errmsg_002.phpt | 14 - Zend/tests/errmsg_003.phpt | 19 - Zend/tests/errmsg_004.phpt | 15 - Zend/tests/errmsg_005.phpt | 18 - Zend/tests/errmsg_006.phpt | 12 - Zend/tests/errmsg_007.phpt | 12 - Zend/tests/errmsg_008.phpt | 12 - Zend/tests/errmsg_009.phpt | 13 - Zend/tests/errmsg_010.phpt | 13 - Zend/tests/errmsg_011.phpt | 16 - Zend/tests/errmsg_012.phpt | 11 - Zend/tests/errmsg_013.phpt | 14 - Zend/tests/errmsg_014.phpt | 17 - Zend/tests/errmsg_015.phpt | 14 - Zend/tests/errmsg_016.phpt | 14 - Zend/tests/errmsg_017.phpt | 14 - Zend/tests/errmsg_018.phpt | 13 - Zend/tests/errmsg_019.phpt | 14 - Zend/tests/errmsg_020.phpt | 14 - Zend/tests/errmsg_021.phpt | 16 - Zend/tests/errmsg_022.phpt | 14 - Zend/tests/errmsg_023.phpt | 17 - Zend/tests/errmsg_024.phpt | 17 - Zend/tests/errmsg_025.phpt | 20 - Zend/tests/errmsg_026.phpt | 12 - Zend/tests/errmsg_027.phpt | 16 - Zend/tests/errmsg_028.phpt | 12 - Zend/tests/errmsg_029.phpt | 12 - Zend/tests/errmsg_030.phpt | 12 - Zend/tests/errmsg_031.phpt | 12 - Zend/tests/errmsg_032.phpt | 15 - Zend/tests/errmsg_033.phpt | 15 - Zend/tests/errmsg_034.phpt | 15 - Zend/tests/errmsg_035.phpt | 12 - Zend/tests/errmsg_036.phpt | 12 - Zend/tests/errmsg_037.phpt | 13 - Zend/tests/errmsg_038.phpt | 13 - Zend/tests/errmsg_039.phpt | 14 - Zend/tests/errmsg_040.phpt | 13 - Zend/tests/errmsg_041.phpt | 11 - Zend/tests/errmsg_042.phpt | 13 - Zend/tests/errmsg_043.phpt | 12 - Zend/tests/error_reporting01.phpt | 26 - Zend/tests/error_reporting02.phpt | 27 - Zend/tests/error_reporting03.phpt | 37 - Zend/tests/error_reporting04.phpt | 23 - Zend/tests/error_reporting05.phpt | 34 - Zend/tests/error_reporting06.phpt | 30 - Zend/tests/error_reporting07.phpt | 30 - Zend/tests/error_reporting08.phpt | 32 - Zend/tests/error_reporting09.phpt | 31 - Zend/tests/error_reporting10.phpt | 35 - Zend/tests/foreach_undefined.phpt | 14 - Zend/tests/globals.inc | 15 - Zend/tests/globals_001.phpt | 47 - Zend/tests/globals_002.phpt | 50 - Zend/tests/globals_003.phpt | 56 - Zend/tests/globals_004.phpt | 41 - Zend/tests/halt01.phpt | 12 - Zend/tests/halt02.phpt | 13 - Zend/tests/halt03.phpt | 10 - Zend/tests/instanceof.phpt | 18 - Zend/tests/int_overflow_32bit.phpt | 29 - Zend/tests/int_overflow_64bit.phpt | 29 - Zend/tests/int_underflow_32bit.phpt | 29 - Zend/tests/int_underflow_64bit.phpt | 29 - Zend/tests/is_a.phpt | 51 - Zend/tests/jump01.phpt | 14 - Zend/tests/jump02.phpt | 16 - Zend/tests/jump03.phpt | 18 - Zend/tests/jump04.phpt | 24 - Zend/tests/jump05.phpt | 26 - Zend/tests/jump06.phpt | 8 - Zend/tests/jump07.phpt | 11 - Zend/tests/jump08.phpt | 11 - Zend/tests/jump09.phpt | 13 - Zend/tests/jump10.phpt | 13 - Zend/tests/method_exists.phpt | 11 - Zend/tests/object-null.phpt | 21 - Zend/tests/object_handlers.phpt | 171 - Zend/tests/objects_001.phpt | 60 - Zend/tests/objects_002.phpt | 23 - Zend/tests/objects_003.phpt | 23 - Zend/tests/objects_004.phpt | 23 - Zend/tests/objects_005.phpt | 23 - Zend/tests/objects_006.phpt | 23 - Zend/tests/objects_007.phpt | 23 - Zend/tests/objects_008.phpt | 23 - Zend/tests/objects_009.phpt | 23 - Zend/tests/objects_010.phpt | 19 - Zend/tests/objects_011.phpt | 19 - Zend/tests/objects_012.phpt | 15 - Zend/tests/objects_013.phpt | 15 - Zend/tests/objects_014.phpt | 15 - Zend/tests/objects_015.phpt | 26 - Zend/tests/offset_array.phpt | 47 - Zend/tests/offset_assign.phpt | 11 - Zend/tests/offset_bool.phpt | 37 - Zend/tests/offset_long.phpt | 37 - Zend/tests/offset_null.phpt | 37 - Zend/tests/offset_object.phpt | 11 - Zend/tests/offset_string.phpt | 64 - Zend/tests/strict_001.phpt | 19 - Zend/tests/strict_002.phpt | 34 - Zend/tests/unset.inc | 3 - Zend/tests/unset_cv01.phpt | 13 - Zend/tests/unset_cv02.phpt | 13 - Zend/tests/unset_cv03.phpt | 13 - Zend/tests/unset_cv04.phpt | 16 - Zend/tests/unset_cv05.phpt | 23 - Zend/tests/unset_cv07.phpt | 18 - Zend/tests/unset_cv08.phpt | 15 - Zend/tests/unset_cv09.phpt | 14 - Zend/tests/unset_cv10.phpt | 18 - Zend/tests/unset_cv11.phpt | 31 - Zend/tests/unset_cv12.phpt | 11 - Zend/tests/zend2.php.txt | 275 - Zend/tests/zend_operators.phpt | 12 - Zend/tests/zend_strtod.phpt | 19 - Zend/zend.c | 1720 - Zend/zend.h | 735 - Zend/zend.ico | Bin 1382 -> 0 bytes Zend/zend_API.c | 3729 -- Zend/zend_API.h | 2066 - Zend/zend_alloc.c | 2513 - Zend/zend_alloc.h | 236 - Zend/zend_arg_defs.c | 52 - Zend/zend_builtin_functions.c | 2337 - Zend/zend_builtin_functions.h | 39 - Zend/zend_compile.c | 4669 -- Zend/zend_compile.h | 752 - Zend/zend_config.nw.h | 89 - Zend/zend_config.w32.h | 98 - Zend/zend_constants.c | 434 - Zend/zend_constants.h | 80 - Zend/zend_default_classes.c | 43 - Zend/zend_dynamic_array.c | 72 - Zend/zend_dynamic_array.h | 47 - Zend/zend_errors.h | 50 - Zend/zend_exceptions.c | 824 - Zend/zend_exceptions.h | 64 - Zend/zend_execute.c | 1435 - Zend/zend_execute.h | 250 - Zend/zend_execute_API.c | 1764 - Zend/zend_extensions.c | 295 - Zend/zend_extensions.h | 132 - Zend/zend_fast_cache.h | 142 - Zend/zend_globals.h | 308 - Zend/zend_globals_macros.h | 118 - Zend/zend_hash.c | 2235 - Zend/zend_hash.h | 400 - Zend/zend_highlight.c | 240 - Zend/zend_highlight.h | 61 - Zend/zend_indent.c | 156 - Zend/zend_indent.h | 37 - Zend/zend_ini.c | 661 - Zend/zend_ini.h | 218 - Zend/zend_ini_parser.y | 316 - Zend/zend_ini_scanner.h | 42 - Zend/zend_ini_scanner.l | 256 - Zend/zend_interfaces.c | 574 - Zend/zend_interfaces.h | 79 - Zend/zend_istdiostream.h | 44 - Zend/zend_iterators.c | 107 - Zend/zend_iterators.h | 93 - Zend/zend_language_parser.y | 942 - Zend/zend_language_scanner.h | 58 - Zend/zend_language_scanner.l | 2518 - Zend/zend_list.c | 374 - Zend/zend_list.h | 120 - Zend/zend_llist.c | 319 - Zend/zend_llist.h | 86 - Zend/zend_modules.h | 142 - Zend/zend_multiply.h | 47 - Zend/zend_object_handlers.c | 1204 - Zend/zend_object_handlers.h | 173 - Zend/zend_objects.c | 190 - Zend/zend_objects.h | 46 - Zend/zend_objects_API.c | 401 - Zend/zend_objects_API.h | 95 - Zend/zend_opcode.c | 548 - Zend/zend_operators.c | 2773 -- Zend/zend_operators.h | 481 - Zend/zend_ptr_stack.c | 115 - Zend/zend_ptr_stack.h | 119 - Zend/zend_qsort.c | 127 - Zend/zend_qsort.h | 36 - Zend/zend_sprintf.c | 49 - Zend/zend_stack.c | 173 - Zend/zend_stack.h | 58 - Zend/zend_static_allocator.c | 84 - Zend/zend_static_allocator.h | 55 - Zend/zend_stream.c | 142 - Zend/zend_stream.h | 63 - Zend/zend_strtod.c | 2674 -- Zend/zend_strtod.h | 36 - Zend/zend_strtol.c | 244 - Zend/zend_ts_hash.c | 365 - Zend/zend_ts_hash.h | 134 - Zend/zend_types.h | 47 - Zend/zend_unicode.c | 844 - Zend/zend_unicode.h | 160 - Zend/zend_variables.c | 217 - Zend/zend_variables.h | 96 - Zend/zend_vm.h | 29 - Zend/zend_vm_def.h | 4045 -- Zend/zend_vm_execute.h | 31482 ------------- Zend/zend_vm_execute.skl | 77 - Zend/zend_vm_gen.php | 1302 - Zend/zend_vm_opcodes.h | 152 - acconfig.h.in | 1 - acinclude.m4 | 2744 -- build/build.mk | 73 - build/build2.mk | 60 - build/buildcheck.sh | 59 - build/config-stubs | 8 - build/genif.sh | 41 - build/libtool.m4 | 6246 --- build/mkdep.awk | 75 - build/order_by_dep.awk | 89 - build/print_include.awk | 6 - build/scan_makefile_in.awk | 32 - build/shtool | 1123 - buildconf | 69 - buildconf.bat | 2 - config.guess | 1466 - config.sub | 1579 - configure.in | 1434 - cvsclean | 3 - cvsclean.bat | 2 - ext/bcmath/CREDITS | 2 - ext/bcmath/bcmath.c | 573 - ext/bcmath/config.m4 | 17 - ext/bcmath/config.w32 | 14 - ext/bcmath/libbcmath/AUTHORS | 3 - ext/bcmath/libbcmath/COPYING.LIB | 515 - ext/bcmath/libbcmath/ChangeLog | 10 - ext/bcmath/libbcmath/FAQ | 21 - ext/bcmath/libbcmath/INSTALL | 9 - ext/bcmath/libbcmath/Makefile.am | 12 - ext/bcmath/libbcmath/NEWS | 3 - ext/bcmath/libbcmath/README | 9 - ext/bcmath/libbcmath/acconfig.h | 9 - ext/bcmath/libbcmath/aclocal.m4 | 127 - ext/bcmath/libbcmath/config.h.in | 41 - ext/bcmath/libbcmath/configure | 1859 - ext/bcmath/libbcmath/configure.in | 18 - ext/bcmath/libbcmath/install-sh | 238 - ext/bcmath/libbcmath/missing | 134 - ext/bcmath/libbcmath/mkinstalldirs | 36 - ext/bcmath/libbcmath/src/Makefile.am | 22 - ext/bcmath/libbcmath/src/add.c | 88 - ext/bcmath/libbcmath/src/bcmath.h | 162 - ext/bcmath/libbcmath/src/compare.c | 161 - ext/bcmath/libbcmath/src/config.h | 10 - ext/bcmath/libbcmath/src/debug.c | 69 - ext/bcmath/libbcmath/src/div.c | 274 - ext/bcmath/libbcmath/src/divmod.c | 87 - ext/bcmath/libbcmath/src/doaddsub.c | 232 - ext/bcmath/libbcmath/src/init.c | 131 - ext/bcmath/libbcmath/src/int2num.c | 84 - ext/bcmath/libbcmath/src/nearzero.c | 69 - ext/bcmath/libbcmath/src/neg.c | 49 - ext/bcmath/libbcmath/src/num2long.c | 70 - ext/bcmath/libbcmath/src/num2str.c | 79 - ext/bcmath/libbcmath/src/outofmem.c | 46 - ext/bcmath/libbcmath/src/output.c | 208 - ext/bcmath/libbcmath/src/private.h | 43 - ext/bcmath/libbcmath/src/raise.c | 124 - ext/bcmath/libbcmath/src/raisemod.c | 98 - ext/bcmath/libbcmath/src/recmul.c | 306 - ext/bcmath/libbcmath/src/rmzero.c | 55 - ext/bcmath/libbcmath/src/rt.c | 65 - ext/bcmath/libbcmath/src/sqrt.c | 129 - ext/bcmath/libbcmath/src/str2num.c | 109 - ext/bcmath/libbcmath/src/sub.c | 90 - ext/bcmath/libbcmath/src/zero.c | 64 - ext/bcmath/package.xml | 94 - ext/bcmath/php_bcmath.h | 67 - ext/bcmath/tests/bcadd.phpt | 16 - ext/bcmath/tests/bccomp.phpt | 18 - ext/bcmath/tests/bcdiv.phpt | 18 - ext/bcmath/tests/bcmod.phpt | 16 - ext/bcmath/tests/bcmul.phpt | 18 - ext/bcmath/tests/bcpow.phpt | 16 - ext/bcmath/tests/bcscale.phpt | 21 - ext/bcmath/tests/bcsqrt.phpt | 14 - ext/bcmath/tests/bcsub.phpt | 16 - ext/bz2/CREDITS | 2 - ext/bz2/bz2.c | 634 - ext/bz2/bz2.dsp | 112 - ext/bz2/bz2_filter.c | 409 - ext/bz2/config.m4 | 40 - ext/bz2/config.w32 | 18 - ext/bz2/package.xml | 38 - ext/bz2/php_bz2.def | 7 - ext/bz2/php_bz2.h | 72 - ext/bz2/tests/001.phpt | 43 - ext/bz2/tests/002.phpt | 129 - ext/bz2/tests/003.phpt | 40 - ext/bz2/tests/003.txt.bz2 | Bin 126 -> 0 bytes ext/bz2/tests/004.phpt | 177 - ext/bz2/tests/004_1.txt.bz2 | Bin 125 -> 0 bytes ext/bz2/tests/004_2.txt.bz2 | Bin 123 -> 0 bytes ext/bz2/tests/005.phpt | 104 - ext/bz2/tests/bz2_filter_compress.phpt | 17 - ext/bz2/tests/bz2_filter_decompress.phpt | 17 - ext/bz2/tests/with_files.phpt | 23 - ext/bz2/tests/with_strings.phpt | 27 - ext/calendar/CREDITS | 2 - ext/calendar/cal_unix.c | 81 - ext/calendar/calendar.c | 766 - ext/calendar/config.m4 | 11 - ext/calendar/config.w32 | 10 - ext/calendar/dow.c | 76 - ext/calendar/easter.c | 141 - ext/calendar/french.c | 160 - ext/calendar/gregor.c | 272 - ext/calendar/jewish.c | 763 - ext/calendar/julian.c | 249 - ext/calendar/package.xml | 73 - ext/calendar/php_calendar.h | 48 - ext/calendar/sdncal.h | 97 - ext/calendar/tests/cal_days_in_month.phpt | 20 - ext/calendar/tests/cal_from_jd.phpt | 60 - ext/calendar/tests/cal_info.phpt | 216 - ext/calendar/tests/cal_to_jd.phpt | 16 - ext/calendar/tests/easter_date.phpt | 20 - ext/calendar/tests/easter_days.phpt | 14 - ext/calendar/tests/frenchtojd.phpt | 16 - ext/calendar/tests/gregoriantojd.phpt | 18 - ext/calendar/tests/jddayofweek.phpt | 130 - ext/calendar/tests/jdmonthname.phpt | 314 - ext/calendar/tests/jdtofrench.phpt | 20 - ext/calendar/tests/jdtogregorian.phpt | 18 - ext/calendar/tests/jdtojewish.phpt | 30 - ext/calendar/tests/jdtojulian.phpt | 18 - ext/calendar/tests/jdtomonthname.phpt | 71 - ext/calendar/tests/jdtounix.phpt | 16 - ext/calendar/tests/jewishtojd.phpt | 16 - ext/calendar/tests/juliantojd.phpt | 18 - ext/calendar/tests/skipif.inc | 4 - ext/calendar/tests/unixtojd.phpt | 14 - ext/com_dotnet/CREDITS | 2 - ext/com_dotnet/README | 71 - ext/com_dotnet/com_com.c | 844 - ext/com_dotnet/com_dotnet.c | 319 - ext/com_dotnet/com_extension.c | 365 - ext/com_dotnet/com_handlers.c | 683 - ext/com_dotnet/com_iterator.c | 250 - ext/com_dotnet/com_misc.c | 144 - ext/com_dotnet/com_olechar.c | 103 - ext/com_dotnet/com_persist.c | 779 - ext/com_dotnet/com_saproxy.c | 588 - ext/com_dotnet/com_typeinfo.c | 603 - ext/com_dotnet/com_variant.c | 1077 - ext/com_dotnet/com_wrapper.c | 657 - ext/com_dotnet/config.w32 | 13 - ext/com_dotnet/package.xml | 52 - ext/com_dotnet/php_com_dotnet.h | 70 - ext/com_dotnet/php_com_dotnet_internal.h | 185 - ext/com_dotnet/tests/27974.phpt | 43 - ext/com_dotnet/tests/bug33386.phpt | 40 - ext/com_dotnet/tests/bug34272.phpt | 22 - ext/com_dotnet/tests/bug39596.phpt | 23 - ext/com_dotnet/tests/bug39606.phpt | 22 - ext/com_dotnet/tests/variants.phpt | 637 - ext/ctype/CREDITS | 2 - ext/ctype/README | 5 - ext/ctype/config.m4 | 11 - ext/ctype/config.w32 | 9 - ext/ctype/ctype.c | 298 - ext/ctype/ctype.dsp | 107 - ext/ctype/ctype.xml | 245 - ext/ctype/package.xml | 46 - ext/ctype/php_ctype.h | 47 - ext/ctype/tests/001.phpt | 52 - ext/ctype/tests/002.phpt | 64 - ext/ctype/tests/bug25745.phpt | 26 - ext/ctype/tests/bug34645.phpt | 13 - ext/curl/CREDITS | 2 - ext/curl/config.m4 | 124 - ext/curl/config.w32 | 22 - ext/curl/curl.dsp | 186 - ext/curl/interface.c | 2013 - ext/curl/multi.c | 342 - ext/curl/package.xml | 52 - ext/curl/php_curl.h | 179 - ext/curl/streams.c | 502 - ext/date/CREDITS | 2 - ext/date/TODO | 6 - ext/date/config.m4 | 25 - ext/date/config.w32 | 10 - ext/date/lib/README | 6 - ext/date/lib/astro.c | 303 - ext/date/lib/astro.h | 51 - ext/date/lib/dow.c | 147 - ext/date/lib/fallbackmap.h | 40 - ext/date/lib/parse_date.c | 21861 --------- ext/date/lib/parse_date.re | 1660 - ext/date/lib/parse_tz.c | 374 - ext/date/lib/timelib.c | 218 - ext/date/lib/timelib.h | 106 - ext/date/lib/timelib.m4 | 80 - ext/date/lib/timelib_structs.h | 208 - ext/date/lib/timezonedb.h | 17060 ------- ext/date/lib/timezonemap.h | 1698 - ext/date/lib/tm2unixtime.c | 331 - ext/date/lib/unixtime2tm.c | 251 - ext/date/php_date.c | 2630 -- ext/date/php_date.h | 117 - ext/date/tests/002.phpt | 93 - ext/date/tests/003.phpt | 81 - ext/date/tests/004.phpt | 119 - ext/date/tests/005.phpt | 45 - ext/date/tests/006.phpt | 33 - ext/date/tests/007.phpt | 185 - ext/date/tests/008.phpt | 119 - ext/date/tests/009.phpt | 65 - ext/date/tests/010.phpt | 644 - ext/date/tests/011.phpt | 23 - ext/date/tests/012.phpt | 53 - ext/date/tests/013.phpt | 55 - ext/date/tests/014.phpt | 33 - ext/date/tests/bug13142.phpt | 20 - ext/date/tests/bug14561.phpt | 11 - ext/date/tests/bug17988.phpt | 33 - ext/date/tests/bug20382-1.phpt | 16 - ext/date/tests/bug20382-2.phpt | 170 - ext/date/tests/bug21399.phpt | 9 - ext/date/tests/bug21966.phpt | 19 - ext/date/tests/bug26090.phpt | 14 - ext/date/tests/bug26198.phpt | 11 - ext/date/tests/bug26317.phpt | 17 - ext/date/tests/bug26320.phpt | 15 - ext/date/tests/bug26694.phpt | 9 - ext/date/tests/bug27719.phpt | 67 - ext/date/tests/bug27780.phpt | 113 - ext/date/tests/bug28024.phpt | 11 - ext/date/tests/bug28088.phpt | 17 - ext/date/tests/bug28599.phpt | 9 - ext/date/tests/bug29150.phpt | 9 - ext/date/tests/bug29585.phpt | 9 - ext/date/tests/bug29595.phpt | 11 - ext/date/tests/bug30096.phpt | 48 - ext/date/tests/bug30532.phpt | 23 - ext/date/tests/bug32086.phpt | 49 - ext/date/tests/bug32270.phpt | 25 - ext/date/tests/bug32555.phpt | 17 - ext/date/tests/bug32588.phpt | 13 - ext/date/tests/bug33056.phpt | 13 - ext/date/tests/bug33414-1.phpt | 320 - ext/date/tests/bug33414-2.phpt | 121 - ext/date/tests/bug33415-1.phpt | 33 - ext/date/tests/bug33415-2.phpt | 342 - ext/date/tests/bug33452.phpt | 11 - ext/date/tests/bug33532.phpt | 38 - ext/date/tests/bug33536.phpt | 13 - ext/date/tests/bug33562.phpt | 11 - ext/date/tests/bug33563.phpt | 12 - ext/date/tests/bug33578.phpt | 21 - ext/date/tests/bug33869.phpt | 26 - ext/date/tests/bug33957.phpt | 103 - ext/date/tests/bug34087.phpt | 20 - ext/date/tests/bug34304.phpt | 11 - ext/date/tests/bug34676.phpt | 19 - ext/date/tests/bug34771.phpt | 32 - ext/date/tests/bug35143.phpt | 33 - ext/date/tests/bug35218.phpt | 14 - ext/date/tests/bug35414.phpt | 16 - ext/date/tests/bug35422.phpt | 12 - ext/date/tests/bug35425.phpt | 30 - ext/date/tests/bug35456.phpt | 16 - ext/date/tests/bug35499.phpt | 16 - ext/date/tests/bug35624.phpt | 29 - ext/date/tests/bug35630.phpt | 11 - ext/date/tests/bug35699.phpt | 14 - ext/date/tests/bug35705.phpt | 11 - ext/date/tests/bug35885.phpt | 14 - ext/date/tests/bug35887.phpt | 11 - ext/date/tests/bug36224.phpt | 13 - ext/date/tests/bug36510.phpt | 14 - ext/date/tests/bug36599.phpt | 12 - ext/date/tests/bug36988.phpt | 12 - ext/date/tests/bug37017.phpt | 16 - ext/date/tests/bug37368.phpt | 10 - ext/date/tests/bug37514.phpt | 20 - ext/date/tests/bug37616.phpt | 11 - ext/date/tests/bug37747.phpt | 11 - ext/date/tests/bug38229.phpt | 13 - ext/date/tests/bug39782.phpt | 19 - ext/date/tests/date.phpt | 22 - ext/date/tests/date_constants.phpt | 110 - ext/date/tests/date_create-1.phpt | 48 - ext/date/tests/date_create-2.phpt | 12 - ext/date/tests/date_create-3.phpt | 13 - .../tests/date_default_timezone_get-1.phpt | 16 - .../tests/date_default_timezone_get-2.phpt | 12 - .../tests/date_default_timezone_get-3.phpt | 15 - .../tests/date_default_timezone_set-1.phpt | 28 - ext/date/tests/date_modify-1.phpt | 30 - ext/date/tests/date_modify-2.phpt | 15 - ext/date/tests/date_parse_001.phpt | 303 - ext/date/tests/date_sun_info_001.phpt | 32 - ext/date/tests/default-timezone-1.phpt | 11 - ext/date/tests/default-timezone-2.phpt | 11 - ext/date/tests/format-negative-timestamp.phpt | 24 - ext/date/tests/mktime-1.phpt | 44 - ext/date/tests/mktime-2.phpt | 51 - ext/date/tests/mktime-3.phpt | 54 - ext/date/tests/oo_001.phpt | 66 - ext/date/tests/oo_002.phpt | 35 - ext/date/tests/strtotime-mysql.phpt | 29 - ext/date/tests/strtotime.phpt | 16 - ext/date/tests/strtotime2.phpt | 40 - ext/date/tests/strtotime3.phpt | 94 - ext/date/tests/timezone-configuration.phpt | 19 - ext/date/tests/timezones.phpt | 26 - ext/dba/CREDITS | 2 - ext/dba/README | 54 - ext/dba/config.m4 | 552 - ext/dba/config.w32 | 18 - ext/dba/dba.c | 1215 - ext/dba/dba.dsp | 213 - ext/dba/dba_cdb.c | 350 - ext/dba/dba_db1.c | 197 - ext/dba/dba_db2.c | 209 - ext/dba/dba_db3.c | 238 - ext/dba/dba_db4.c | 267 - ext/dba/dba_dbm.c | 213 - ext/dba/dba_flatfile.c | 188 - ext/dba/dba_gdbm.c | 200 - ext/dba/dba_inifile.c | 194 - ext/dba/dba_ndbm.c | 171 - ext/dba/dba_qdbm.c | 194 - ext/dba/install_cdb.sh | 53 - ext/dba/libcdb/cdb.c | 194 - ext/dba/libcdb/cdb.h | 57 - ext/dba/libcdb/cdb_make.c | 244 - ext/dba/libcdb/cdb_make.h | 64 - ext/dba/libcdb/uint32.c | 49 - ext/dba/libcdb/uint32.h | 39 - ext/dba/libflatfile/flatfile.c | 322 - ext/dba/libflatfile/flatfile.h | 48 - ext/dba/libinifile/inifile.c | 591 - ext/dba/libinifile/inifile.h | 66 - ext/dba/php_cdb.h | 12 - ext/dba/php_db1.h | 12 - ext/dba/php_db2.h | 12 - ext/dba/php_db3.h | 12 - ext/dba/php_db4.h | 12 - ext/dba/php_dba.h | 153 - ext/dba/php_dbm.h | 12 - ext/dba/php_flatfile.h | 12 - ext/dba/php_gdbm.h | 12 - ext/dba/php_inifile.h | 12 - ext/dba/php_ndbm.h | 12 - ext/dba/php_qdbm.h | 12 - ext/dba/tests/bug36436.phpt | 34 - ext/dba/tests/bug38698.phpt | 26 - ext/dba/tests/dba001.phpt | 21 - ext/dba/tests/dba002.phpt | 22 - ext/dba/tests/dba003.phpt | 24 - ext/dba/tests/dba004.phpt | 28 - ext/dba/tests/dba005.phpt | 35 - ext/dba/tests/dba006.phpt | 37 - ext/dba/tests/dba007.phpt | 45 - ext/dba/tests/dba008.phpt | 33 - ext/dba/tests/dba009.phpt | 33 - ext/dba/tests/dba_cdb.phpt | 80 - ext/dba/tests/dba_cdb_make.phpt | 41 - ext/dba/tests/dba_cdb_read.phpt | 65 - ext/dba/tests/dba_db1.phpt | 46 - ext/dba/tests/dba_db2.phpt | 46 - ext/dba/tests/dba_db3.phpt | 46 - ext/dba/tests/dba_db4.phpt | 32 - ext/dba/tests/dba_dbm.phpt | 46 - ext/dba/tests/dba_flatfile.phpt | 79 - ext/dba/tests/dba_gdbm.phpt | 34 - ext/dba/tests/dba_handler.inc | 90 - ext/dba/tests/dba_inifile.phpt | 79 - ext/dba/tests/dba_ndbm.phpt | 46 - ext/dba/tests/dba_qdbm.phpt | 34 - ext/dba/tests/skipif.inc | 23 - ext/dba/tests/test.cdb | Bin 2230 -> 0 bytes ext/dba/tests/test.inc | 7 - ext/dbase/CREDITS | 2 - ext/dbase/config.m4 | 11 - ext/dbase/config.w32 | 10 - ext/dbase/dbase.c | 922 - ext/dbase/dbase.dsp | 151 - ext/dbase/dbf.h | 94 - ext/dbase/dbf_head.c | 293 - ext/dbase/dbf_head.h | 11 - ext/dbase/dbf_misc.c | 174 - ext/dbase/dbf_misc.h | 13 - ext/dbase/dbf_ndx.c | 191 - ext/dbase/dbf_ndx.h | 98 - ext/dbase/dbf_rec.c | 206 - ext/dbase/dbf_rec.h | 10 - ext/dbase/package.xml | 57 - ext/dbase/php_dbase.h | 45 - ext/dbase/tests/001.phpt | 66 - ext/dbase/tests/002.phpt | 54 - ext/dbase/tests/bug31754.phpt | 26 - ext/dom/CREDITS | 2 - ext/dom/TODO | 4 - ext/dom/attr.c | 280 - ext/dom/cdatasection.c | 78 - ext/dom/characterdata.c | 394 - ext/dom/comment.c | 77 - ext/dom/config.m4 | 38 - ext/dom/config.w32 | 22 - ext/dom/document.c | 2333 - ext/dom/documentfragment.c | 147 - ext/dom/documenttype.c | 234 - ext/dom/dom.dsp | 250 - ext/dom/dom_ce.h | 57 - ext/dom/dom_fe.h | 270 - ext/dom/dom_iterators.c | 332 - ext/dom/dom_properties.h | 162 - ext/dom/domconfiguration.c | 79 - ext/dom/domerror.c | 138 - ext/dom/domerrorhandler.c | 55 - ext/dom/domexception.c | 117 - ext/dom/domimplementation.c | 240 - ext/dom/domimplementationlist.c | 71 - ext/dom/domimplementationsource.c | 67 - ext/dom/domlocator.c | 123 - ext/dom/domstringlist.c | 71 - ext/dom/element.c | 1132 - ext/dom/entity.c | 196 - ext/dom/entityreference.c | 84 - ext/dom/examples/dom1.inc | 43 - ext/dom/examples/dom1.php | 94 - ext/dom/examples/note-invalid.xml | 9 - ext/dom/examples/note.dtd | 6 - ext/dom/examples/note.php | 19 - ext/dom/examples/note.xml | 8 - ext/dom/examples/relaxNG.php | 11 - ext/dom/examples/relaxNG.rng | 11 - ext/dom/examples/relaxNG.xml | 1 - ext/dom/examples/relaxNG2.rng | 23 - ext/dom/examples/relaxNG3.rng | 8 - ext/dom/examples/shipping.php | 11 - ext/dom/examples/shipping.xml | 21 - ext/dom/examples/shipping.xsd | 36 - ext/dom/namednodemap.c | 305 - ext/dom/namelist.c | 81 - ext/dom/node.c | 1962 - ext/dom/nodelist.c | 169 - ext/dom/notation.c | 102 - ext/dom/php_dom.c | 1534 - ext/dom/php_dom.h | 157 - ext/dom/processinginstruction.c | 172 - ext/dom/string_extend.c | 67 - ext/dom/tests/book.xml | 11 - ext/dom/tests/book.xml.gz | Bin 119 -> 0 bytes ext/dom/tests/bug28721.phpt | 485 - ext/dom/tests/bug28817.phpt | 50 - ext/dom/tests/bug32615.phpt | 84 - ext/dom/tests/bug34276.phpt | 51 - ext/dom/tests/bug35342.phpt | 17 - ext/dom/tests/bug36756.phpt | 35 - ext/dom/tests/bug37277.phpt | 25 - ext/dom/tests/bug37456.phpt | 22 - ext/dom/tests/bug38438.phpt | 13 - ext/dom/tests/bug38474.phpt | 41 - ext/dom/tests/bug38850.phpt | 22 - ext/dom/tests/bug38949.phpt | 27 - ext/dom/tests/bug40836.phpt | 29 - ext/dom/tests/canonicalization.phpt | 102 - ext/dom/tests/dom.ent | 8 - ext/dom/tests/dom.xml | 8 - ext/dom/tests/dom001.phpt | 275 - ext/dom/tests/dom002.phpt | 82 - ext/dom/tests/dom003.phpt | 107 - ext/dom/tests/dom004.phpt | 25 - ext/dom/tests/dom005.phpt | 36 - ext/dom/tests/dom006.phpt | 40 - ext/dom/tests/dom007.phpt | 99 - ext/dom/tests/dom_create_element.phpt | 394 - ext/dom/tests/dom_import_simplexml.phpt | 27 - ext/dom/tests/dom_set_attr_node.phpt | 102 - ext/dom/tests/dom_test.inc | 47 - ext/dom/tests/dom_xinclude.phpt | 38 - ext/dom/tests/domattributes.phpt | 56 - ext/dom/tests/domchardata.phpt | 76 - ext/dom/tests/domdocument.phpt | 99 - ext/dom/tests/domelement.phpt | 118 - ext/dom/tests/domfragment.phpt | 36 - ext/dom/tests/domimplementation.phpt | 27 - ext/dom/tests/dompi.phpt | 26 - ext/dom/tests/domxpath.phpt | 58 - ext/dom/tests/nsdoc.xml | 4 - ext/dom/tests/regsiter_node_class.phpt | 43 - ext/dom/tests/skipif.inc | 1 - ext/dom/tests/test.html | 9 - ext/dom/tests/xinclude.xml | 4 - ext/dom/text.c | 207 - ext/dom/typeinfo.c | 74 - ext/dom/userdatahandler.c | 55 - ext/dom/xml_common.h | 92 - ext/dom/xpath.c | 547 - ext/enchant/CREDITS | 2 - ext/enchant/config.m4 | 36 - ext/enchant/config.w32 | 13 - ext/enchant/docs/examples/example1.php | 25 - ext/enchant/enchant.c | 776 - ext/enchant/package.xml | 148 - ext/enchant/php_enchant.h | 81 - ext/enchant/tests/broker_describe.phpt | 28 - ext/enchant/tests/broker_free.phpt | 21 - ext/enchant/tests/broker_init.phpt | 15 - ext/enchant/tests/broker_request_dict.phpt | 31 - ext/enchant/tests/hindi_correct.txt | 1 - ext/enchant/tests/hindi_incorrect.txt | 1 - ext/ereg/ereg.c | 668 - ext/ereg/php_ereg.h | 50 - ext/ereg/php_regex.h | 65 - ext/ereg/regex/COPYRIGHT | 20 - ext/ereg/regex/README | 32 - ext/ereg/regex/WHATSNEW | 92 - ext/ereg/regex/cclass.h | 30 - ext/ereg/regex/cname.h | 102 - ext/ereg/regex/debug.c | 242 - ext/ereg/regex/debug.ih | 14 - ext/ereg/regex/engine.c | 1019 - ext/ereg/regex/engine.ih | 35 - ext/ereg/regex/main.c | 510 - ext/ereg/regex/main.ih | 19 - ext/ereg/regex/mkh | 76 - ext/ereg/regex/regcomp.c | 1613 - ext/ereg/regex/regcomp.ih | 53 - ext/ereg/regex/regerror.c | 126 - ext/ereg/regex/regerror.ih | 12 - ext/ereg/regex/regex.3 | 502 - ext/ereg/regex/regex.7 | 233 - ext/ereg/regex/regex.dsp | 106 - ext/ereg/regex/regex.dsw | 29 - ext/ereg/regex/regex.h | 83 - ext/ereg/regex/regex.mak | 304 - ext/ereg/regex/regex2.h | 140 - ext/ereg/regex/regex_extra.h | 23 - ext/ereg/regex/regexec.c | 138 - ext/ereg/regex/regfree.c | 37 - ext/ereg/regex/split.c | 316 - ext/ereg/regex/tests | 475 - ext/ereg/regex/utils.h | 25 - ext/ereg/tests/001.phpt | 7 - ext/ereg/tests/002.phpt | 7 - ext/ereg/tests/003.phpt | 8 - ext/ereg/tests/004.phpt | 14 - ext/ereg/tests/005.phpt | 18 - ext/ereg/tests/006.phpt | 8 - ext/ereg/tests/007.phpt | 10 - ext/ereg/tests/008.phpt | 8 - ext/ereg/tests/009.phpt | 17 - ext/ereg/tests/010.phpt | 7 - ext/ereg/tests/011.phpt | 7 - ext/ereg/tests/012.phpt | 7 - ext/ereg/tests/013.phpt | 7 - ext/ereg/tests/014.phpt | 7 - ext/ereg/tests/015.phpt | 6 - ext/ereg/tests/016.phpt | 6 - ext/exif/CREDITS | 2 - ext/exif/config.m4 | 11 - ext/exif/config.w32 | 10 - ext/exif/example.php | 23 - ext/exif/exif.c | 4170 -- ext/exif/exif.dsp | 113 - ext/exif/package.xml | 62 - ext/exif/php_exif.h | 30 - ext/exif/test.php | 3 - ext/exif/test.txt | 365 - ext/exif/tests/bug34704.jpg | Bin 9976 -> 0 bytes ext/exif/tests/bug34704.phpt | 71 - ext/exif/tests/exif000.phpt | 57 - ext/exif/tests/exif001.phpt | 152 - ext/exif/tests/exif002.phpt | 23 - ext/exif/tests/exif003.phpt | 91 - ext/exif/tests/exif004.phpt | 38 - ext/exif/tests/exif005.phpt | 29 - ext/exif/tests/exif006.phpt | 87 - ext/exif/tests/test1.jpg | Bin 523 -> 0 bytes ext/exif/tests/test2.jpg | Bin 1240 -> 0 bytes ext/exif/tests/test3.jpg | Bin 1240 -> 0 bytes ext/exif/tests/test4.jpg | Bin 713 -> 0 bytes ext/exif/tests/test5.jpg | Bin 603 -> 0 bytes ext/exif/tests/test6.jpg | Bin 1240 -> 0 bytes ext/ext_skel | 300 - ext/ext_skel_win32.php | 65 - ext/fbsql/CREDITS | 2 - ext/fbsql/Readme_w32.txt | 22 - ext/fbsql/config.m4 | 43 - ext/fbsql/config.w32 | 19 - ext/fbsql/fbsql.dsp | 171 - ext/fbsql/php_fbsql.c | 4150 -- ext/fbsql/php_fbsql.h | 148 - ext/fdf/CREDITS | 2 - ext/fdf/config.m4 | 73 - ext/fdf/config.w32 | 15 - ext/fdf/fdf.c | 1865 - ext/fdf/fdf.dsp | 114 - ext/fdf/package.xml | 58 - ext/fdf/php_fdf.h | 96 - ext/fdf/tests/01-general.phpt | 10 - ext/fdf/tests/02-values.phpt | 19 - ext/fdf/tests/03-read-file.phpt | 15 - ext/fdf/tests/04-POST.phpt | 40 - ext/fdf/tests/simple.fdf | 18 - ext/fileinfo/config.m4 | 17 +- ext/fileinfo/fileinfo.c | 26 +- ext/fileinfo/package.xml | 7 +- ext/filter/CREDITS | 2 - ext/filter/callback_filter.c | 63 - ext/filter/config.m4 | 47 - ext/filter/config.w32 | 8 - ext/filter/docs/filter.txt | 331 - ext/filter/docs/input_get_args.php | 41 - ext/filter/filter.c | 881 - ext/filter/filter_private.h | 133 - ext/filter/logical_filters.c | 668 - ext/filter/package.xml | 169 - ext/filter/php_filter.h | 106 - ext/filter/sanitizing_filters.c | 360 - ext/filter/tests/001.phpt | 8 - ext/filter/tests/002.phpt | 11 - ext/filter/tests/003.phpt | 22 - ext/filter/tests/004.phpt | 26 - ext/filter/tests/005.phpt | 21 - ext/filter/tests/006.phpt | 12 - ext/filter/tests/007.phpt | 64 - ext/filter/tests/008.phpt | 55 - ext/filter/tests/009.phpt | 46 - ext/filter/tests/010.phpt | 62 - ext/filter/tests/011.phpt | 52 - ext/filter/tests/012.phpt | 18 - ext/filter/tests/013.phpt | 74 - ext/filter/tests/014.phpt | 70 - ext/filter/tests/015.phpt | 81 - ext/filter/tests/016.phpt | 34 - ext/filter/tests/017.phpt | 26 - ext/filter/tests/018.phpt | 52 - ext/filter/tests/019.phpt | 22 - ext/filter/tests/020.phpt | 20 - ext/filter/tests/021.phpt | 46 - ext/filter/tests/022.phpt | 22 - ext/filter/tests/023.phpt | 22 - ext/filter/tests/024.phpt | 20 - ext/filter/tests/025.phpt | 26 - ext/filter/tests/026.phpt | 32 - ext/filter/tests/027.phpt | 32 - ext/filter/tests/028.phpt | 37 - ext/filter/tests/029.phpt | 105 - ext/filter/tests/030.phpt | 43 - ext/filter/tests/031.phpt | 56 - ext/filter/tests/032.phpt | 57 - ext/filter/tests/033.phpt | 27 - ext/filter/tests/033_run.inc | 40 - ext/filter/tests/034.phpt | 33 - ext/filter/tests/035.phpt | 38 - ext/filter/tests/036.phpt | 39 - ext/filter/tests/037.phpt | 41 - ext/filter/tests/038.phpt | 58 - ext/filter/tests/039.phpt | 117 - ext/filter/tests/040.phpt | 45 - ext/filter/tests/041.phpt | 34 - ext/filter/tests/042.phpt | 19 - ext/filter/tests/043.phpt | 269 - ext/filter/tests/044.phpt | 23 - ext/filter/tests/045.phpt | 30 - ext/filter/tests/046.phpt | 23 - ext/filter/tests/047.phpt | 37 - ext/filter/tests/048.phpt | 41 - ext/filter/tests/049.phpt | 34 - ext/filter/tests/050.phpt | 29 - ext/filter/tests/051.phpt | 11 - ext/filter/tests/bug39846.phpt | 12 - ext/filter/tests/bug7586.phpt | 55 - ext/filter/tests/bug7715.phpt | 31 - ext/filter/tests/bug7733.phpt | 29 - ext/filter/tests/bug8315.phpt | 15 - .../tests/callback_non_modified_var.phpt | 14 - ext/filter/tests/filter_data.phpt | 73 - ext/ftp/CREDITS | 2 - ext/ftp/config.m4 | 22 - ext/ftp/config.w32 | 9 - ext/ftp/ftp.c | 1923 - ext/ftp/ftp.h | 213 - ext/ftp/package.xml | 56 - ext/ftp/php_ftp.c | 1476 - ext/ftp/php_ftp.h | 79 - ext/ftp/tests/001.phpt | 36 - ext/ftp/tests/002.phpt | 38 - ext/ftp/tests/003.phpt | 43 - ext/ftp/tests/004.phpt | 79 - ext/ftp/tests/005.phpt | 86 - ext/ftp/tests/006.phpt | 100 - ext/ftp/tests/bug27809.phpt | 21 - ext/ftp/tests/bug37799.phpt | 22 - ext/ftp/tests/bug39458-2.phpt | 36 - ext/ftp/tests/bug39458.phpt | 35 - ext/ftp/tests/bug39583-2.phpt | 34 - ext/ftp/tests/bug39583.phpt | 35 - ext/ftp/tests/bug7216-2.phpt | 21 - ext/ftp/tests/bug7216.phpt | 21 - ext/ftp/tests/cert.pem | 48 - ext/ftp/tests/server.inc | 258 - ext/ftp/tests/skipif.inc | 5 - ext/gd/CREDITS | 2 - ext/gd/config.m4 | 383 - ext/gd/config.w32 | 54 - ext/gd/gd.c | 4603 -- ext/gd/gd.dsp | 600 - ext/gd/gd_ctx.c | 156 - ext/gd/gdcache.c | 203 - ext/gd/gdcache.h | 87 - ext/gd/libgd/README | 72 - ext/gd/libgd/gd.c | 3984 -- ext/gd/libgd/gd.h | 664 - ext/gd/libgd/gd2copypal.c | 65 - ext/gd/libgd/gd2time.c | 60 - ext/gd/libgd/gd2topng.c | 49 - ext/gd/libgd/gd_arc_f_buggy.c | 741 - ext/gd/libgd/gd_gd.c | 274 - ext/gd/libgd/gd_gd2.c | 829 - ext/gd/libgd/gd_gif_in.c | 604 - ext/gd/libgd/gd_gif_out.c | 761 - ext/gd/libgd/gd_io.c | 146 - ext/gd/libgd/gd_io.h | 43 - ext/gd/libgd/gd_io_dp.c | 360 - ext/gd/libgd/gd_io_file.c | 128 - ext/gd/libgd/gd_io_ss.c | 138 - ext/gd/libgd/gd_jpeg.c | 805 - ext/gd/libgd/gd_png.c | 729 - ext/gd/libgd/gd_security.c | 33 - ext/gd/libgd/gd_ss.c | 49 - ext/gd/libgd/gd_topal.c | 2125 - ext/gd/libgd/gd_wbmp.c | 210 - ext/gd/libgd/gdcache.c | 210 - ext/gd/libgd/gdcache.h | 86 - ext/gd/libgd/gddemo.c | 118 - ext/gd/libgd/gdfontg.c | 4389 -- ext/gd/libgd/gdfontg.h | 30 - ext/gd/libgd/gdfontl.c | 4646 -- ext/gd/libgd/gdfontl.h | 31 - ext/gd/libgd/gdfontmb.c | 3876 -- ext/gd/libgd/gdfontmb.h | 29 - ext/gd/libgd/gdfonts.c | 3876 -- ext/gd/libgd/gdfonts.h | 29 - ext/gd/libgd/gdfontt.c | 2597 - ext/gd/libgd/gdfontt.h | 30 - ext/gd/libgd/gdft.c | 1127 - ext/gd/libgd/gdhelpers.c | 76 - ext/gd/libgd/gdhelpers.h | 46 - ext/gd/libgd/gdkanji.c | 627 - ext/gd/libgd/gdparttopng.c | 59 - ext/gd/libgd/gdtables.c | 730 - ext/gd/libgd/gdtest.c | 409 - ext/gd/libgd/gdtestft.c | 108 - ext/gd/libgd/gdtopng.c | 44 - ext/gd/libgd/gdxpm.c | 139 - ext/gd/libgd/jisx0208.h | 1205 - ext/gd/libgd/mathmake.c | 52 - ext/gd/libgd/pngtogd.c | 45 - ext/gd/libgd/pngtogd2.c | 52 - ext/gd/libgd/testac.c | 129 - ext/gd/libgd/wbmp.c | 385 - ext/gd/libgd/wbmp.h | 48 - ext/gd/libgd/webpng.c | 289 - ext/gd/libgd/xbm.c | 239 - ext/gd/php_gd.h | 197 - ext/gd/tests/001.phpt | 25 - ext/gd/tests/bug19366.phpt | 53 - ext/gd/tests/bug22544.phpt | 26 - ext/gd/tests/bug24155.phpt | 32 - ext/gd/tests/bug24594.phpt | 85 - ext/gd/tests/bug27582_1.phpt | 28 - ext/gd/tests/bug28147.phpt | 27 - ext/gd/tests/bug36697.phpt | 31 - ext/gd/tests/bug37346.gif | 4 - ext/gd/tests/bug37346.phpt | 13 - ext/gd/tests/bug37360.gif | Bin 65646 -> 0 bytes ext/gd/tests/bug37360.phpt | 14 - ext/gd/tests/bug38112.gif | Bin 18276 -> 0 bytes ext/gd/tests/bug38112.phpt | 17 - ext/gd/tests/bug38179.phpt | 28 - ext/gd/tests/bug38212.phpt | 18 - ext/gd/tests/bug39082.phpt | 18 - ext/gd/tests/bug39273.phpt | 32 - ext/gd/tests/bug39286.phpt | 14 - ext/gd/tests/bug39366.phpt | 21 - ext/gd/tests/bug39508.phpt | 16 - ext/gd/tests/bug39780.phpt | 21 - ext/gd/tests/bug39780.png | Bin 393216 -> 0 bytes ext/gd/tests/bug40764.phpt | 31 - ext/gd/tests/colorat.phpt | 42 - ext/gd/tests/colorclosest.phpt | 127 - ext/gd/tests/colorexact.phpt | 40 - ext/gd/tests/colormatch.phpt | 21 - ext/gd/tests/colorresolve.phpt | 113 - ext/gd/tests/conv_test.gif | Bin 4998 -> 0 bytes ext/gd/tests/conv_test.jpeg | Bin 2317 -> 0 bytes ext/gd/tests/conv_test.png | Bin 4053 -> 0 bytes ext/gd/tests/conv_test.xbm | 4 - ext/gd/tests/conv_test.xpm | 1588 - ext/gd/tests/copy.phpt | 109 - ext/gd/tests/copypalette.phpt | 44 - ext/gd/tests/copyresized.phpt | 91 - ext/gd/tests/createfromgd2.phpt | 24 - ext/gd/tests/createfromstring.phpt | 63 - ext/gd/tests/createfromwbmp.phpt | 18 - ext/gd/tests/createfromwbmp2.phpt | 47 - ext/gd/tests/dashedlines.phpt | 79 - ext/gd/tests/gif.phpt | 146 - ext/gd/tests/gif2gd.phpt | 32 - ext/gd/tests/gif2jpg.phpt | 29 - ext/gd/tests/gif2png.phpt | 29 - ext/gd/tests/imagefill_1.phpt | 25 - ext/gd/tests/imagefilter.phpt | 89 - ext/gd/tests/imagefttext.phpt | 52 - ext/gd/tests/imagewbmp.phpt | 31 - ext/gd/tests/jpeg2png.phpt | 47 - ext/gd/tests/jpg2gd.phpt | 44 - ext/gd/tests/lines.phpt | 114 - ext/gd/tests/png2gd.phpt | 44 - ext/gd/tests/pngcomp.phpt | 34 - ext/gd/tests/src.gd2 | Bin 423 -> 0 bytes ext/gd/tests/src.png | Bin 9 -> 0 bytes ext/gd/tests/src.wbmp | Bin 9 -> 0 bytes ext/gd/tests/test.png | Bin 2711 -> 0 bytes ext/gd/tests/test8859.ttf | Bin 10576 -> 0 bytes ext/gd/tests/truecolor.phpt | 19 - ext/gd/tests/types.phpt | 33 - ext/gd/tests/xbm2png.phpt | 26 - ext/gd/tests/xpm2gd.phpt | 32 - ext/gd/tests/xpm2jpg.phpt | 29 - ext/gd/tests/xpm2png.phpt | 29 - ext/gettext/CREDITS | 2 - ext/gettext/config.m4 | 50 - ext/gettext/config.w32 | 12 - ext/gettext/gettext.c | 350 - ext/gettext/gettext.dsp | 113 - ext/gettext/php_gettext.h | 55 - ext/gettext/tests/dcngettext.phpt | 30 - ext/gettext/tests/gettext_basic.phpt | 27 - ext/gettext/tests/gettext_basic_de.phpt | 37 - .../tests/locale/de/LC_MESSAGES/messages.mo | Bin 203 -> 0 bytes .../tests/locale/de/LC_MESSAGES/messages.po | 15 - .../tests/locale/fi/LC_MESSAGES/messages.mo | Bin 199 -> 0 bytes .../tests/locale/fi/LC_MESSAGES/messages.po | 15 - ext/gmp/CREDITS | 2 - ext/gmp/README | 5 - ext/gmp/TODO | 22 - ext/gmp/config.m4 | 36 - ext/gmp/config.w32 | 14 - ext/gmp/gmp.c | 1614 - ext/gmp/php_gmp.h | 104 - ext/gmp/tests/001.phpt | 21 - ext/gmp/tests/002.phpt | 17 - ext/gmp/tests/003.phpt | 47 - ext/gmp/tests/004.phpt | 45 - ext/gmp/tests/005.phpt | 68 - ext/gmp/tests/006.phpt | 50 - ext/gmp/tests/007.phpt | 133 - ext/gmp/tests/008.phpt | 73 - ext/gmp/tests/009.phpt | 73 - ext/gmp/tests/010.phpt | 40 - ext/gmp/tests/bug32773.phpt | 22 - ext/gmp/tests/gmp_nextprime.phpt | 40 - ext/hash/CREDITS | 2 - ext/hash/EXPERIMENTAL | 0 ext/hash/README | 19 - ext/hash/bench.php | 92 - ext/hash/config.m4 | 28 - ext/hash/config.w32 | 12 - ext/hash/hash.c | 890 - ext/hash/hash_adler32.c | 68 - ext/hash/hash_crc32.c | 84 - ext/hash/hash_gost.c | 321 - ext/hash/hash_haval.c | 550 - ext/hash/hash_md.c | 335 - ext/hash/hash_ripemd.c | 771 - ext/hash/hash_salsa.c | 222 - ext/hash/hash_sha.c | 604 - ext/hash/hash_snefru.c | 212 - ext/hash/hash_tiger.c | 314 - ext/hash/hash_whirlpool.c | 452 - ext/hash/package.xml | 87 - ext/hash/package2.xml | 154 - ext/hash/php_hash.h | 147 - ext/hash/php_hash_adler32.h | 43 - ext/hash/php_hash_crc32.h | 44 - ext/hash/php_hash_crc32_tables.h | 149 - ext/hash/php_hash_gost.h | 47 - ext/hash/php_hash_gost_tables.h | 138 - ext/hash/php_hash_haval.h | 59 - ext/hash/php_hash_md.h | 50 - ext/hash/php_hash_ripemd.h | 66 - ext/hash/php_hash_salsa.h | 51 - ext/hash/php_hash_sha.h | 61 - ext/hash/php_hash_snefru.h | 51 - ext/hash/php_hash_snefru_tables.h | 942 - ext/hash/php_hash_tiger.h | 49 - ext/hash/php_hash_tiger_tables.h | 549 - ext/hash/php_hash_types.h | 71 - ext/hash/php_hash_whirlpool.h | 48 - ext/hash/php_hash_whirlpool_tables.h | 585 - ext/hash/tests/adler32.phpt | 22 - ext/hash/tests/crc32.phpt | 36 - ext/hash/tests/gost.phpt | 20 - ext/hash/tests/haval.phpt | 76 - ext/hash/tests/hmac-md5.phpt | 26 - ext/hash/tests/md2.phpt | 21 - ext/hash/tests/md4.phpt | 24 - ext/hash/tests/md5.phpt | 16 - ext/hash/tests/ripemd128.phpt | 25 - ext/hash/tests/ripemd160.phpt | 25 - ext/hash/tests/ripemd256.phpt | 25 - ext/hash/tests/ripemd320.phpt | 25 - ext/hash/tests/sha1.phpt | 21 - ext/hash/tests/sha256.phpt | 22 - ext/hash/tests/sha384.phpt | 21 - ext/hash/tests/sha512.phpt | 21 - ext/hash/tests/snefru.phpt | 18 - ext/hash/tests/tiger.phpt | 18 - ext/hash/tests/whirlpool.phpt | 14 - ext/iconv/CREDITS | 2 - ext/iconv/config.m4 | 159 - ext/iconv/config.w32 | 21 - ext/iconv/iconv.c | 2813 -- ext/iconv/iconv.dsp | 107 - ext/iconv/php_iconv.def | 6 - ext/iconv/php_iconv.h | 113 - ext/iconv/tests/Quotes.UTF-8 | 4 - ext/iconv/tests/bug16069.phpt | 21 - ext/iconv/tests/bug37176.phpt | 20 - ext/iconv/tests/bug37773.phpt | 18 - ext/iconv/tests/eucjp2iso2022jp.phpt | 28 - ext/iconv/tests/eucjp2sjis.phpt | 59 - ext/iconv/tests/eucjp2utf8.phpt | 59 - ext/iconv/tests/iconv001.phpt | 23 - ext/iconv/tests/iconv002.phpt | 29 - ext/iconv/tests/iconv003.phpt | 15 - ext/iconv/tests/iconv004.phpt | 12 - ext/iconv/tests/iconv_mime_decode.phpt | 90 - .../tests/iconv_mime_decode_headers.phpt | 91 - ext/iconv/tests/iconv_mime_encode.phpt | 428 - ext/iconv/tests/iconv_stream_filter.phpt | 41 - ext/iconv/tests/iconv_stream_filter.txt | 1 - ext/iconv/tests/iconv_strlen.phpt | 22 - ext/iconv/tests/iconv_strpos.phpt | 59 - ext/iconv/tests/iconv_strrpos.phpt | 63 - ext/iconv/tests/iconv_substr.phpt | 79 - ext/iconv/tests/ob_iconv_handler.phpt | 18 - ext/iconv/tests/skipif.inc | 5 - ext/iconv/tests/translit-failure.phpt | 30 - ext/iconv/tests/translit-utf8.phpt | 26 - ext/imap/CREDITS | 2 - ext/imap/IMAP_Win32_HOWTO.txt | 32 - ext/imap/config.m4 | 232 - ext/imap/config.w32 | 21 - ext/imap/imap.dsp | 176 - ext/imap/imap.h | 103 - ext/imap/php_imap.c | 4568 -- ext/imap/php_imap.h | 227 - ext/imap/tests/bug31142_1.phpt | 59 - ext/imap/tests/bug31142_2.phpt | 30 - ext/imap/tests/bug32589.phpt | 34 - ext/imap/tests/bug35669.phpt | 68 - ext/imap/tests/imap_utf8.phpt | 30 - ext/informix/config.m4 | 109 - ext/informix/config.w32 | 32 - ext/interbase/CREDITS | 2 - ext/interbase/config.m4 | 46 - ext/interbase/config.w32 | 17 - ext/interbase/ibase_blobs.c | 593 - ext/interbase/ibase_events.c | 385 - ext/interbase/ibase_query.c | 2110 - ext/interbase/ibase_service.c | 631 - ext/interbase/interbase.c | 1216 - ext/interbase/interbase.dsp | 135 - ext/interbase/interbase.rc | 81 - ext/interbase/php_ibase_includes.h | 200 - ext/interbase/php_ibase_udf.c | 405 - ext/interbase/php_interbase.h | 107 - ext/interbase/tests/002.phpt | 33 - ext/interbase/tests/003.phpt | 183 - ext/interbase/tests/004.phpt | 182 - ext/interbase/tests/005.phpt | 290 - ext/interbase/tests/006.phpt | 301 - ext/interbase/tests/007.phpt | 183 - ext/interbase/tests/008.phpt | 48 - ext/interbase/tests/interbase.inc | 117 - ext/interbase/tests/skipif.inc | 5 - ext/json/CREDITS | 2 - ext/json/JSON_parser.c | 757 - ext/json/JSON_parser.h | 6 - ext/json/README | 76 - ext/json/config.m4 | 16 - ext/json/config.w32 | 10 - ext/json/json.c | 539 - ext/json/json.dsp | 135 - ext/json/package.xml | 152 - ext/json/php_json.h | 53 - ext/json/tests/001.phpt | 115 - ext/json/tests/002.phpt | 28 - ext/json/tests/003.phpt | 33 - ext/json/tests/004.phpt | 39 - ext/json/tests/005.phpt | 39 - ext/json/tests/bug40503.phpt | 19 - ext/json/tests/fail001.phpt | 286 - ext/json/tests/pass001.1.phpt | 1687 - ext/json/tests/pass001.phpt | 1323 - ext/json/tests/pass002.phpt | 517 - ext/json/tests/pass003.phpt | 147 - ext/json/utf8_decode.c | 179 - ext/json/utf8_decode.h | 18 - ext/json/utf8_to_utf16.c | 56 - ext/json/utf8_to_utf16.h | 3 - ext/ldap/CREDITS | 2 - ext/ldap/LDAP_Win32_HOWTO.txt | 33 - ext/ldap/config.m4 | 195 - ext/ldap/config.w32 | 23 - ext/ldap/ldap.c | 2313 - ext/ldap/ldap.dsp | 288 - ext/ldap/ldap.mak | 173 - ext/ldap/php_ldap.h | 114 - ext/libxml/CREDITS | 2 - ext/libxml/config.w32 | 21 - ext/libxml/config0.m4 | 25 - ext/libxml/libxml.c | 1077 - ext/libxml/php_libxml.h | 139 - ext/libxml/php_libxml2.def | 1543 - ext/libxml/tests/001.phpt | 31 - ext/libxml/tests/002.phpt | 113 - ext/libxml/tests/003.phpt | 28 - ext/libxml/tests/004.phpt | 57 - ext/libxml/tests/test.xml | 8 - ext/mbstring/CREDITS | 2 - ext/mbstring/README | 17 - ext/mbstring/README.libmbfl | 16 - ext/mbstring/README_PHP3-i18n-ja | 774 - ext/mbstring/config.m4 | 289 - ext/mbstring/config.w32 | 68 - ext/mbstring/libmbfl/AUTHORS | 10 - ext/mbstring/libmbfl/DISCLAIMER | 69 - ext/mbstring/libmbfl/INSTALL | 12 - ext/mbstring/libmbfl/LICENSE | 458 - ext/mbstring/libmbfl/Makefile.am | 5 - ext/mbstring/libmbfl/Makefile.bcc32 | 33 - ext/mbstring/libmbfl/README | 8 - ext/mbstring/libmbfl/buildconf | 6 - ext/mbstring/libmbfl/config.h.bcc32 | 12 - ext/mbstring/libmbfl/config.h.in | 87 - ext/mbstring/libmbfl/config.h.vc6 | 12 - ext/mbstring/libmbfl/configure.in | 38 - ext/mbstring/libmbfl/cvsclean | 14 - ext/mbstring/libmbfl/filters/Makefile.am | 104 - ext/mbstring/libmbfl/filters/Makefile.bcc32 | 9 - ext/mbstring/libmbfl/filters/cp932_table.h | 95 - ext/mbstring/libmbfl/filters/html_entities.c | 298 - ext/mbstring/libmbfl/filters/html_entities.h | 41 - ext/mbstring/libmbfl/filters/mbfilter_7bit.c | 82 - ext/mbstring/libmbfl/filters/mbfilter_7bit.h | 43 - .../libmbfl/filters/mbfilter_armscii8.c | 149 - .../libmbfl/filters/mbfilter_armscii8.h | 45 - ext/mbstring/libmbfl/filters/mbfilter_ascii.c | 114 - ext/mbstring/libmbfl/filters/mbfilter_ascii.h | 46 - .../libmbfl/filters/mbfilter_base64.c | 214 - .../libmbfl/filters/mbfilter_base64.h | 45 - ext/mbstring/libmbfl/filters/mbfilter_big5.c | 227 - ext/mbstring/libmbfl/filters/mbfilter_big5.h | 43 - ext/mbstring/libmbfl/filters/mbfilter_byte2.c | 137 - ext/mbstring/libmbfl/filters/mbfilter_byte2.h | 48 - ext/mbstring/libmbfl/filters/mbfilter_byte4.c | 159 - ext/mbstring/libmbfl/filters/mbfilter_byte4.h | 46 - .../libmbfl/filters/mbfilter_cp1251.c | 152 - .../libmbfl/filters/mbfilter_cp1251.h | 44 - .../libmbfl/filters/mbfilter_cp1252.c | 147 - .../libmbfl/filters/mbfilter_cp1252.h | 43 - .../libmbfl/filters/mbfilter_cp51932.c | 360 - .../libmbfl/filters/mbfilter_cp51932.h | 43 - ext/mbstring/libmbfl/filters/mbfilter_cp866.c | 151 - ext/mbstring/libmbfl/filters/mbfilter_cp866.h | 41 - ext/mbstring/libmbfl/filters/mbfilter_cp932.c | 350 - ext/mbstring/libmbfl/filters/mbfilter_cp932.h | 43 - ext/mbstring/libmbfl/filters/mbfilter_cp936.c | 228 - ext/mbstring/libmbfl/filters/mbfilter_cp936.h | 43 - .../libmbfl/filters/mbfilter_euc_cn.c | 236 - .../libmbfl/filters/mbfilter_euc_cn.h | 43 - .../libmbfl/filters/mbfilter_euc_jp.c | 331 - .../libmbfl/filters/mbfilter_euc_jp.h | 43 - .../libmbfl/filters/mbfilter_euc_jp_win.c | 421 - .../libmbfl/filters/mbfilter_euc_jp_win.h | 43 - .../libmbfl/filters/mbfilter_euc_kr.c | 256 - .../libmbfl/filters/mbfilter_euc_kr.h | 43 - .../libmbfl/filters/mbfilter_euc_tw.c | 329 - .../libmbfl/filters/mbfilter_euc_tw.h | 43 - .../libmbfl/filters/mbfilter_htmlent.c | 260 - .../libmbfl/filters/mbfilter_htmlent.h | 48 - ext/mbstring/libmbfl/filters/mbfilter_hz.c | 276 - ext/mbstring/libmbfl/filters/mbfilter_hz.h | 44 - .../libmbfl/filters/mbfilter_iso2022_kr.c | 353 - .../libmbfl/filters/mbfilter_iso2022_kr.h | 44 - .../libmbfl/filters/mbfilter_iso8859_1.c | 100 - .../libmbfl/filters/mbfilter_iso8859_1.h | 43 - .../libmbfl/filters/mbfilter_iso8859_10.c | 138 - .../libmbfl/filters/mbfilter_iso8859_10.h | 43 - .../libmbfl/filters/mbfilter_iso8859_13.c | 138 - .../libmbfl/filters/mbfilter_iso8859_13.h | 43 - .../libmbfl/filters/mbfilter_iso8859_14.c | 138 - .../libmbfl/filters/mbfilter_iso8859_14.h | 26 - .../libmbfl/filters/mbfilter_iso8859_15.c | 136 - .../libmbfl/filters/mbfilter_iso8859_15.h | 26 - .../libmbfl/filters/mbfilter_iso8859_16.c | 136 - .../libmbfl/filters/mbfilter_iso8859_16.h | 23 - .../libmbfl/filters/mbfilter_iso8859_2.c | 139 - .../libmbfl/filters/mbfilter_iso8859_2.h | 43 - .../libmbfl/filters/mbfilter_iso8859_3.c | 139 - .../libmbfl/filters/mbfilter_iso8859_3.h | 43 - .../libmbfl/filters/mbfilter_iso8859_4.c | 137 - .../libmbfl/filters/mbfilter_iso8859_4.h | 41 - .../libmbfl/filters/mbfilter_iso8859_5.c | 139 - .../libmbfl/filters/mbfilter_iso8859_5.h | 43 - .../libmbfl/filters/mbfilter_iso8859_6.c | 139 - .../libmbfl/filters/mbfilter_iso8859_6.h | 43 - .../libmbfl/filters/mbfilter_iso8859_7.c | 139 - .../libmbfl/filters/mbfilter_iso8859_7.h | 43 - .../libmbfl/filters/mbfilter_iso8859_8.c | 137 - .../libmbfl/filters/mbfilter_iso8859_8.h | 43 - .../libmbfl/filters/mbfilter_iso8859_9.c | 138 - .../libmbfl/filters/mbfilter_iso8859_9.h | 43 - ext/mbstring/libmbfl/filters/mbfilter_jis.c | 796 - ext/mbstring/libmbfl/filters/mbfilter_jis.h | 53 - ext/mbstring/libmbfl/filters/mbfilter_koi8r.c | 149 - ext/mbstring/libmbfl/filters/mbfilter_koi8r.h | 50 - .../libmbfl/filters/mbfilter_qprint.c | 244 - .../libmbfl/filters/mbfilter_qprint.h | 44 - ext/mbstring/libmbfl/filters/mbfilter_sjis.c | 295 - ext/mbstring/libmbfl/filters/mbfilter_sjis.h | 47 - ext/mbstring/libmbfl/filters/mbfilter_ucs2.c | 238 - ext/mbstring/libmbfl/filters/mbfilter_ucs2.h | 51 - ext/mbstring/libmbfl/filters/mbfilter_ucs4.c | 275 - ext/mbstring/libmbfl/filters/mbfilter_ucs4.h | 49 - ext/mbstring/libmbfl/filters/mbfilter_uhc.c | 266 - ext/mbstring/libmbfl/filters/mbfilter_uhc.h | 43 - ext/mbstring/libmbfl/filters/mbfilter_utf16.c | 309 - ext/mbstring/libmbfl/filters/mbfilter_utf16.h | 49 - ext/mbstring/libmbfl/filters/mbfilter_utf32.c | 272 - ext/mbstring/libmbfl/filters/mbfilter_utf32.h | 50 - ext/mbstring/libmbfl/filters/mbfilter_utf7.c | 460 - ext/mbstring/libmbfl/filters/mbfilter_utf7.h | 44 - .../libmbfl/filters/mbfilter_utf7imap.c | 372 - .../libmbfl/filters/mbfilter_utf7imap.h | 43 - ext/mbstring/libmbfl/filters/mbfilter_utf8.c | 269 - ext/mbstring/libmbfl/filters/mbfilter_utf8.h | 41 - .../libmbfl/filters/mbfilter_uuencode.c | 152 - .../libmbfl/filters/mbfilter_uuencode.h | 39 - ext/mbstring/libmbfl/filters/mk_sb_tbl.awk | 65 - ext/mbstring/libmbfl/filters/unicode_prop.h | 167 - .../libmbfl/filters/unicode_table_armscii8.h | 54 - .../libmbfl/filters/unicode_table_big5.h | 5123 -- .../libmbfl/filters/unicode_table_cns11643.h | 6149 --- .../libmbfl/filters/unicode_table_cp1251.h | 51 - .../libmbfl/filters/unicode_table_cp1252.h | 40 - .../libmbfl/filters/unicode_table_cp866.h | 51 - .../libmbfl/filters/unicode_table_cp932_ext.h | 170 - .../libmbfl/filters/unicode_table_cp936.h | 6489 --- .../filters/unicode_table_iso8859_10.h | 17 - .../filters/unicode_table_iso8859_13.h | 17 - .../filters/unicode_table_iso8859_14.h | 17 - .../filters/unicode_table_iso8859_15.h | 17 - .../filters/unicode_table_iso8859_16.h | 17 - .../libmbfl/filters/unicode_table_iso8859_2.h | 17 - .../libmbfl/filters/unicode_table_iso8859_3.h | 17 - .../libmbfl/filters/unicode_table_iso8859_4.h | 17 - .../libmbfl/filters/unicode_table_iso8859_5.h | 17 - .../libmbfl/filters/unicode_table_iso8859_6.h | 17 - .../libmbfl/filters/unicode_table_iso8859_7.h | 17 - .../libmbfl/filters/unicode_table_iso8859_8.h | 17 - .../libmbfl/filters/unicode_table_iso8859_9.h | 17 - .../libmbfl/filters/unicode_table_jis.h | 5847 --- .../libmbfl/filters/unicode_table_koi8r.h | 53 - .../libmbfl/filters/unicode_table_uhc.h | 7186 --- ext/mbstring/libmbfl/libmbfl.dsp | 795 - ext/mbstring/libmbfl/libmbfl.dsw | 29 - ext/mbstring/libmbfl/libmbfl.sln | 21 - ext/mbstring/libmbfl/libmbfl.vcproj | 650 - ext/mbstring/libmbfl/mbfl.def | 80 - ext/mbstring/libmbfl/mbfl.rc | 24 - ext/mbstring/libmbfl/mbfl/Makefile.am | 23 - ext/mbstring/libmbfl/mbfl/Makefile.bcc32 | 7 - ext/mbstring/libmbfl/mbfl/eaw_table.h | 36 - ext/mbstring/libmbfl/mbfl/mbfilter.c | 2780 -- ext/mbstring/libmbfl/mbfl/mbfilter.h | 282 - ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c | 50 - ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h | 39 - ext/mbstring/libmbfl/mbfl/mbfilter_pass.c | 65 - ext/mbstring/libmbfl/mbfl/mbfilter_pass.h | 41 - ext/mbstring/libmbfl/mbfl/mbfilter_wchar.c | 48 - ext/mbstring/libmbfl/mbfl/mbfilter_wchar.h | 39 - ext/mbstring/libmbfl/mbfl/mbfl_allocators.c | 93 - ext/mbstring/libmbfl/mbfl/mbfl_allocators.h | 56 - ext/mbstring/libmbfl/mbfl/mbfl_consts.h | 87 - ext/mbstring/libmbfl/mbfl/mbfl_convert.c | 509 - ext/mbstring/libmbfl/mbfl/mbfl_convert.h | 90 - ext/mbstring/libmbfl/mbfl/mbfl_defs.h | 52 - ext/mbstring/libmbfl/mbfl/mbfl_encoding.c | 304 - ext/mbstring/libmbfl/mbfl/mbfl_encoding.h | 130 - .../libmbfl/mbfl/mbfl_filter_output.c | 49 - .../libmbfl/mbfl/mbfl_filter_output.h | 37 - ext/mbstring/libmbfl/mbfl/mbfl_ident.c | 248 - ext/mbstring/libmbfl/mbfl/mbfl_ident.h | 72 - ext/mbstring/libmbfl/mbfl/mbfl_language.c | 169 - ext/mbstring/libmbfl/mbfl/mbfl_language.h | 86 - .../libmbfl/mbfl/mbfl_memory_device.c | 350 - .../libmbfl/mbfl/mbfl_memory_device.h | 73 - ext/mbstring/libmbfl/mbfl/mbfl_string.c | 79 - ext/mbstring/libmbfl/mbfl/mbfl_string.h | 56 - ext/mbstring/libmbfl/mbfl/mk_eaw_tbl.awk | 80 - ext/mbstring/libmbfl/mksbcc32.bat | 5 - ext/mbstring/libmbfl/nls/Makefile.am | 5 - ext/mbstring/libmbfl/nls/Makefile.bcc32 | 8 - ext/mbstring/libmbfl/nls/nls_de.c | 23 - ext/mbstring/libmbfl/nls/nls_de.h | 8 - ext/mbstring/libmbfl/nls/nls_en.c | 21 - ext/mbstring/libmbfl/nls/nls_en.h | 8 - ext/mbstring/libmbfl/nls/nls_hy.c | 20 - ext/mbstring/libmbfl/nls/nls_hy.h | 9 - ext/mbstring/libmbfl/nls/nls_ja.c | 20 - ext/mbstring/libmbfl/nls/nls_ja.h | 8 - ext/mbstring/libmbfl/nls/nls_kr.c | 21 - ext/mbstring/libmbfl/nls/nls_kr.h | 8 - ext/mbstring/libmbfl/nls/nls_neutral.c | 21 - ext/mbstring/libmbfl/nls/nls_neutral.h | 8 - ext/mbstring/libmbfl/nls/nls_ru.c | 20 - ext/mbstring/libmbfl/nls/nls_ru.h | 9 - ext/mbstring/libmbfl/nls/nls_tr.c | 21 - ext/mbstring/libmbfl/nls/nls_tr.h | 8 - ext/mbstring/libmbfl/nls/nls_uni.c | 23 - ext/mbstring/libmbfl/nls/nls_uni.h | 8 - ext/mbstring/libmbfl/nls/nls_zh.c | 31 - ext/mbstring/libmbfl/nls/nls_zh.h | 9 - ext/mbstring/libmbfl/rules.mak.bcc32 | 7 - ext/mbstring/libmbfl/tests/sample.c | 38 - ext/mbstring/mb_gpc.c | 386 - ext/mbstring/mb_gpc.h | 61 - ext/mbstring/mbstring.c | 4571 -- ext/mbstring/mbstring.dsp | 1088 - ext/mbstring/mbstring.h | 244 - ext/mbstring/oniguruma/COPYING | 32 - ext/mbstring/oniguruma/HISTORY | 1373 - ext/mbstring/oniguruma/README | 181 - ext/mbstring/oniguruma/README.ja | 177 - ext/mbstring/oniguruma/config.h.in | 69 - ext/mbstring/oniguruma/enc/ascii.c | 67 - ext/mbstring/oniguruma/enc/big5.c | 168 - ext/mbstring/oniguruma/enc/euc_jp.c | 232 - ext/mbstring/oniguruma/enc/euc_kr.c | 173 - ext/mbstring/oniguruma/enc/euc_tw.c | 144 - ext/mbstring/oniguruma/enc/iso8859_1.c | 178 - ext/mbstring/oniguruma/enc/iso8859_10.c | 327 - ext/mbstring/oniguruma/enc/iso8859_11.c | 105 - ext/mbstring/oniguruma/enc/iso8859_13.c | 297 - ext/mbstring/oniguruma/enc/iso8859_14.c | 327 - ext/mbstring/oniguruma/enc/iso8859_15.c | 307 - ext/mbstring/oniguruma/enc/iso8859_16.c | 321 - ext/mbstring/oniguruma/enc/iso8859_2.c | 319 - ext/mbstring/oniguruma/enc/iso8859_3.c | 308 - ext/mbstring/oniguruma/enc/iso8859_4.c | 317 - ext/mbstring/oniguruma/enc/iso8859_5.c | 296 - ext/mbstring/oniguruma/enc/iso8859_6.c | 105 - ext/mbstring/oniguruma/enc/iso8859_7.c | 278 - ext/mbstring/oniguruma/enc/iso8859_8.c | 105 - ext/mbstring/oniguruma/enc/iso8859_9.c | 297 - ext/mbstring/oniguruma/enc/koi8.c | 264 - ext/mbstring/oniguruma/enc/koi8_r.c | 263 - ext/mbstring/oniguruma/enc/mktable.c | 1119 - ext/mbstring/oniguruma/enc/sjis.c | 243 - ext/mbstring/oniguruma/enc/unicode.c | 3400 -- ext/mbstring/oniguruma/enc/utf16_be.c | 253 - ext/mbstring/oniguruma/enc/utf16_le.c | 248 - ext/mbstring/oniguruma/enc/utf32_be.c | 208 - ext/mbstring/oniguruma/enc/utf32_le.c | 206 - ext/mbstring/oniguruma/enc/utf8.c | 3738 -- ext/mbstring/oniguruma/index.html | 178 - ext/mbstring/oniguruma/onigcmpt200.h | 304 - ext/mbstring/oniguruma/oniggnu.h | 85 - ext/mbstring/oniguruma/onigposix.h | 169 - ext/mbstring/oniguruma/oniguruma.h | 885 - ext/mbstring/oniguruma/php_onig_compat.h | 8 - ext/mbstring/oniguruma/regcomp.c | 5546 --- ext/mbstring/oniguruma/regenc.c | 1036 - ext/mbstring/oniguruma/regenc.h | 145 - ext/mbstring/oniguruma/regerror.c | 332 - ext/mbstring/oniguruma/regexec.c | 3550 -- ext/mbstring/oniguruma/regext.c | 213 - ext/mbstring/oniguruma/reggnu.c | 173 - ext/mbstring/oniguruma/regint.h | 793 - ext/mbstring/oniguruma/regparse.c | 5103 -- ext/mbstring/oniguruma/regparse.h | 316 - ext/mbstring/oniguruma/regposerr.c | 90 - ext/mbstring/oniguruma/regposix.c | 298 - ext/mbstring/oniguruma/regsyntax.c | 207 - ext/mbstring/oniguruma/regtrav.c | 76 - ext/mbstring/oniguruma/regversion.c | 55 - ext/mbstring/oniguruma/st.c | 717 - ext/mbstring/oniguruma/st.h | 77 - ext/mbstring/oniguruma/win32/config.h | 84 - ext/mbstring/php_mbregex.c | 1240 - ext/mbstring/php_mbregex.h | 119 - ext/mbstring/php_unicode.c | 345 - ext/mbstring/php_unicode.h | 201 - ext/mbstring/tests/bug20087.phpt | 20 - ext/mbstring/tests/bug25140.phpt | 10 - ext/mbstring/tests/bug26639.phpt | 123 - ext/mbstring/tests/bug28220.phpt | 25 - ext/mbstring/tests/bug30549.phpt | 31 - ext/mbstring/tests/bug31911.phpt | 13 - ext/mbstring/tests/casefold.phpt | 24 - ext/mbstring/tests/common.inc | 54 - ext/mbstring/tests/htmlent.phpt | 41 - ext/mbstring/tests/ini_language.phpt | 15 - ext/mbstring/tests/mb_convert_encoding.phpt | 138 - ext/mbstring/tests/mb_convert_variables.phpt | 164 - ext/mbstring/tests/mb_detect_encoding.phpt | 121 - ext/mbstring/tests/mb_detect_order.phpt | 61 - ext/mbstring/tests/mb_ereg-compat-01.phpt | 21 - ext/mbstring/tests/mb_ereg-compat-02.phpt | 25 - ext/mbstring/tests/mb_ereg.phpt | 47 - ext/mbstring/tests/mb_ereg1.phpt | 79 - ext/mbstring/tests/mb_ereg2.phpt | 41 - .../tests/mb_ereg_replace-compat-01.phpt | 15 - .../tests/mb_ereg_replace-compat-02.phpt | 15 - .../tests/mb_ereg_replace-compat-03.phpt | 15 - .../tests/mb_ereg_replace-compat-04.phpt | 15 - .../tests/mb_ereg_replace-compat-05.phpt | 16 - .../tests/mb_ereg_replace-compat-06.phpt | 14 - .../tests/mb_ereg_replace-compat-07.phpt | 15 - .../tests/mb_ereg_replace-compat-08.phpt | 15 - .../tests/mb_ereg_replace-compat-09.phpt | 15 - .../tests/mb_ereg_replace-compat-10.phpt | 15 - .../tests/mb_ereg_replace-compat-11.phpt | 15 - .../tests/mb_ereg_replace-compat-12.phpt | 14 - .../tests/mb_ereg_replace-compat-13.phpt | 14 - ext/mbstring/tests/mb_ereg_replace.phpt | 18 - ext/mbstring/tests/mb_ereg_search_xxx.phpt | 82 - ext/mbstring/tests/mb_http_input.phpt | 51 - ext/mbstring/tests/mb_http_output.phpt | 84 - ext/mbstring/tests/mb_internal_encoding.phpt | 68 - .../tests/mb_output_handler_euc_jp.phpt | 21 - .../tests/mb_output_handler_shift_jis.phpt | 16 - ext/mbstring/tests/mb_parse_str.phpt | 79 - ext/mbstring/tests/mb_parse_str02.phpt | 104 - .../tests/mb_preferred_mime_name.phpt | 61 - ext/mbstring/tests/mb_regex_set_options.phpt | 18 - ext/mbstring/tests/mb_send_mail01.phpt | 38 - ext/mbstring/tests/mb_send_mail02.phpt | 38 - ext/mbstring/tests/mb_send_mail03.phpt | 38 - ext/mbstring/tests/mb_send_mail04.phpt | 38 - ext/mbstring/tests/mb_send_mail05.phpt | 42 - ext/mbstring/tests/mb_send_mail06.phpt | 41 - ext/mbstring/tests/mb_send_mail07.phpt | 41 - ext/mbstring/tests/mb_split-compat-01.phpt | 23 - ext/mbstring/tests/mb_split.phpt | 48 - ext/mbstring/tests/mb_strcut.phpt | 34 - ext/mbstring/tests/mb_strimwidth.phpt | 43 - ext/mbstring/tests/mb_strlen.phpt | 102 - ext/mbstring/tests/mb_strpos.phpt | 175 - ext/mbstring/tests/mb_strwidth.phpt | 32 - .../tests/mb_substitute_character.phpt | 49 - ext/mbstring/tests/mb_substr.phpt | 35 - ext/mbstring/tests/mb_substr_count.phpt | 44 - ext/mbstring/tests/overload01.phpt | 25 - ext/mbstring/tests/overload02.phpt | 36 - ext/mbstring/tests/php_gr_jp_10830.phpt | 18 - ext/mbstring/tests/php_gr_jp_16242.phpt | 21 - ext/mbstring/tests/php_gr_jp_dev_884-1.phpt | 18 - ext/mbstring/tests/php_gr_jp_dev_884-2.phpt | 19 - ext/mbstring/tests/simpletest.phpt | 34 - ext/mbstring/tests/skipif.inc | 14 - ext/mbstring/tests/zend-multibyte.phpt | 23 - ext/mbstring/unicode_data.h | 2738 -- ext/mcrypt/CREDITS | 2 - ext/mcrypt/TODO | 6 - ext/mcrypt/config.m4 | 59 - ext/mcrypt/config.w32 | 17 - ext/mcrypt/mcrypt.c | 1155 - ext/mcrypt/mcrypt.dsp | 117 - ext/mcrypt/php_mcrypt.h | 108 - ext/mcrypt/tests/basic.phpt | 22 - ext/mcrypt/tests/blowfish.phpt | 89 - ext/mcrypt/tests/bug35496.phpt | 14 - ext/mcrypt/tests/bug37595.phpt | Bin 1054 -> 0 bytes ext/mcrypt/tests/bug8040.phpt | 24 - ext/mcrypt/tests/vectors.txt | 33 - ext/mhash/CREDITS | 2 - ext/mhash/config.m4 | 23 - ext/mhash/config.w32 | 16 - ext/mhash/mhash.c | 403 - ext/mhash/mhash.dsp | 115 - ext/mhash/php_mhash.h | 61 - ext/mhash/tests/001.phpt | 72 - ext/mhash/tests/002.phpt | 64 - ext/mhash/tests/003.phpt | 73 - ext/mhash/tests/skip.inc | 5 - ext/mime_magic/CREDITS | 2 - ext/mime_magic/DEPRECATED | 36 - ext/mime_magic/EXPERIMENTAL | 2 - ext/mime_magic/TODO | 3 - ext/mime_magic/config.m4 | 37 - ext/mime_magic/config.w32 | 9 - ext/mime_magic/mime_magic.c | 1990 - ext/mime_magic/mime_magic.dsp | 112 - ext/mime_magic/package.xml | 49 - ext/mime_magic/php_mime_magic.h | 49 - ext/mime_magic/phpmimemagic.h | 380 - ext/ming/CREDITS | 2 - ext/ming/EXPERIMENTAL | 5 - ext/ming/config.m4 | 91 - ext/ming/config.w32 | 45 - ext/ming/ming.c | 4358 -- ext/ming/ming.dsp | 107 - ext/ming/php_ming.h | 279 - ext/ming/tests/swfaction-new.phpt | 51 - ext/ming/tests/swfaction.phpt | 51 - ext/msql/CREDITS | 2 - ext/msql/config.m4 | 42 - ext/msql/config.w32 | 18 - ext/msql/msql.dsp | 107 - ext/msql/php_msql.c | 1311 - ext/msql/php_msql.h | 82 - ext/mssql/CREDITS | 2 - ext/mssql/config.m4 | 56 - ext/mssql/config.w32 | 28 - ext/mssql/mssql.dsp | 117 - ext/mssql/mssql_win32_howto.txt | 35 - ext/mssql/php_mssql.c | 2319 - ext/mssql/php_mssql.h | 212 - ext/mysql/CREDITS | 2 - ext/mysql/config.m4 | 145 - ext/mysql/config.w32 | 15 - ext/mysql/mysql.dsp | 171 - ext/mysql/mysql.mak | 169 - ext/mysql/package.xml | 63 - ext/mysql/php_mysql.c | 2389 - ext/mysql/php_mysql.h | 125 - ext/mysql/tests/001.phpt | 25 - ext/mysql/tests/002.phpt | 53 - ext/mysql/tests/003.phpt | 84 - ext/mysql/tests/connect.inc | 10 - ext/mysql/tests/mysql_affected_rows.phpt | 114 - ext/mysql/tests/mysql_client_encoding.phpt | 68 - ext/mysql/tests/mysql_close.phpt | 39 - ext/mysql/tests/mysql_connect.phpt | 72 - ext/mysql/tests/mysql_create_db.phpt | 44 - ext/mysql/tests/mysql_data_seek.phpt | 71 - ext/mysql/tests/mysql_db_name.phpt | 65 - ext/mysql/tests/mysql_db_query.phpt | 43 - ext/mysql/tests/mysql_drop_db.phpt | 43 - ext/mysql/tests/mysql_errno.phpt | 45 - ext/mysql/tests/mysql_error.phpt | 51 - ext/mysql/tests/mysql_escape_string.phpt | 44 - ext/mysql/tests/mysql_fetch_array.phpt | 419 - ext/mysql/tests/mysql_fetch_assoc.phpt | 100 - ext/mysql/tests/mysql_fetch_field.phpt | 158 - ext/mysql/tests/mysql_fetch_lengths.phpt | 46 - ext/mysql/tests/mysql_fetch_object.phpt | 200 - ext/mysql/tests/mysql_fetch_row.phpt | 78 - ext/mysql/tests/mysql_field_flags.phpt | 57 - ext/mysql/tests/mysql_field_len.phpt | 52 - ext/mysql/tests/mysql_field_name.phpt | 63 - ext/mysql/tests/mysql_field_seek.phpt | 233 - ext/mysql/tests/mysql_field_table.phpt | 63 - ext/mysql/tests/mysql_field_type.phpt | 63 - ext/mysql/tests/mysql_free_result.phpt | 35 - ext/mysql/tests/mysql_get_client_info.phpt | 20 - ext/mysql/tests/mysql_get_host_info.phpt | 33 - ext/mysql/tests/mysql_get_proto_info.phpt | 20 - ext/mysql/tests/mysql_get_server_info.phpt | 34 - ext/mysql/tests/mysql_info.phpt | 67 - ext/mysql/tests/mysql_insert_id.phpt | 56 - ext/mysql/tests/mysql_list_dbs.phpt | 38 - ext/mysql/tests/mysql_list_fields.phpt | 30 - ext/mysql/tests/mysql_list_processes.phpt | 35 - ext/mysql/tests/mysql_num_fields.phpt | 50 - ext/mysql/tests/mysql_num_rows.phpt | 65 - ext/mysql/tests/mysql_pconnect.phpt | 74 - ext/mysql/tests/mysql_ping.phpt | 40 - ext/mysql/tests/mysql_query.phpt | 101 - ext/mysql/tests/mysql_real_escape_string.phpt | 45 - ext/mysql/tests/mysql_result.phpt | 76 - ext/mysql/tests/mysql_select_db.phpt | 76 - ext/mysql/tests/mysql_stat.phpt | 39 - ext/mysql/tests/mysql_tablename.phpt | 63 - ext/mysql/tests/mysql_thread_id.phpt | 30 - ext/mysql/tests/mysql_unbuffered_query.phpt | 112 - ext/mysql/tests/skipif.inc | 11 - ext/mysql/tests/table.inc | 24 - ext/mysqli/CREDITS | 2 - ext/mysqli/TODO | 2 - ext/mysqli/config.m4 | 64 - ext/mysqli/config.w32 | 14 - ext/mysqli/mysqli.c | 1206 - ext/mysqli/mysqli.dsp | 120 - ext/mysqli/mysqli_api.c | 2160 - ext/mysqli/mysqli_driver.c | 170 - ext/mysqli/mysqli_embedded.c | 132 - ext/mysqli/mysqli_exception.c | 84 - ext/mysqli/mysqli_fe.c | 293 - ext/mysqli/mysqli_nonapi.c | 410 - ext/mysqli/mysqli_prop.c | 365 - ext/mysqli/mysqli_repl.c | 221 - ext/mysqli/mysqli_report.c | 75 - ext/mysqli/mysqli_report.h | 64 - ext/mysqli/mysqli_warning.c | 235 - ext/mysqli/package.xml | 118 - ext/mysqli/php_mysqli.h | 487 - ext/mysqli/tests/001.phpt | 47 - ext/mysqli/tests/002.phpt | 63 - ext/mysqli/tests/003.phpt | 58 - ext/mysqli/tests/004.phpt | 60 - ext/mysqli/tests/005.phpt | 40 - ext/mysqli/tests/006.phpt | 54 - ext/mysqli/tests/007.phpt | 54 - ext/mysqli/tests/008.phpt | 54 - ext/mysqli/tests/009.phpt | 79 - ext/mysqli/tests/010.phpt | 59 - ext/mysqli/tests/011.phpt | 57 - ext/mysqli/tests/012.phpt | 58 - ext/mysqli/tests/013.phpt | 52 - ext/mysqli/tests/014.phpt | 69 - ext/mysqli/tests/015.phpt | 69 - ext/mysqli/tests/016.phpt | 27 - ext/mysqli/tests/017.phpt | 35 - ext/mysqli/tests/018.phpt | 27 - ext/mysqli/tests/019.phpt | 71 - ext/mysqli/tests/020.phpt | 68 - ext/mysqli/tests/021.phpt | 42 - ext/mysqli/tests/022.phpt | 46 - ext/mysqli/tests/023.phpt | 65 - ext/mysqli/tests/024.phpt | 66 - ext/mysqli/tests/025.phpt | 70 - ext/mysqli/tests/026.phpt | 49 - ext/mysqli/tests/027.phpt | 20 - ext/mysqli/tests/028.phpt | 19 - ext/mysqli/tests/029.phpt | 25 - ext/mysqli/tests/030.phpt | 25 - ext/mysqli/tests/031.phpt | 25 - ext/mysqli/tests/032.phpt | 25 - ext/mysqli/tests/033.phpt | 20 - ext/mysqli/tests/034.phpt | 20 - ext/mysqli/tests/035.phpt | 19 - ext/mysqli/tests/036.phpt | 51 - ext/mysqli/tests/037.phpt | 36 - ext/mysqli/tests/038.phpt | 33 - ext/mysqli/tests/039.phpt | 26 - ext/mysqli/tests/040.phpt | 33 - ext/mysqli/tests/041.phpt | 22 - ext/mysqli/tests/042.phpt | 79 - ext/mysqli/tests/043.phpt | 42 - ext/mysqli/tests/044.phpt | 21 - ext/mysqli/tests/045.phpt | 46 - ext/mysqli/tests/046.phpt | 33 - ext/mysqli/tests/047.phpt | 350 - ext/mysqli/tests/048.phpt | 62 - ext/mysqli/tests/049.phpt | 26 - ext/mysqli/tests/050.phpt | 21 - ext/mysqli/tests/051.phpt | 22 - ext/mysqli/tests/052.phpt | 22 - ext/mysqli/tests/053.phpt | 20 - ext/mysqli/tests/054.phpt | 20 - ext/mysqli/tests/055.phpt | 19 - ext/mysqli/tests/056.phpt | 21 - ext/mysqli/tests/057.phpt | 54 - ext/mysqli/tests/058.phpt | 57 - ext/mysqli/tests/059.phpt | 43 - ext/mysqli/tests/060.phpt | 79 - ext/mysqli/tests/061.phpt | 43 - ext/mysqli/tests/062.phpt | 25 - ext/mysqli/tests/063.phpt | 23 - ext/mysqli/tests/064.phpt | 21 - ext/mysqli/tests/065.phpt | 44 - ext/mysqli/tests/066.phpt | 28 - ext/mysqli/tests/067.phpt | 51 - ext/mysqli/tests/068.phpt | 15 - ext/mysqli/tests/069.phpt | 34 - ext/mysqli/tests/070.phpt | 14 - ext/mysqli/tests/071.phpt | 36 - ext/mysqli/tests/072.phpt | 27 - ext/mysqli/tests/073.phpt | 23 - ext/mysqli/tests/074.phpt | 33 - ext/mysqli/tests/bug28817.phpt | 39 - ext/mysqli/tests/bug29311.phpt | 48 - ext/mysqli/tests/bug30967.phpt | 23 - ext/mysqli/tests/bug31141.phpt | 28 - ext/mysqli/tests/bug31668.phpt | 56 - ext/mysqli/tests/bug32405.phpt | 39 - ext/mysqli/tests/bug33090.phpt | 21 - ext/mysqli/tests/bug33263.phpt | 32 - ext/mysqli/tests/bug33491.phpt | 26 - ext/mysqli/tests/bug34785.phpt | 47 - ext/mysqli/tests/bug34810.phpt | 39 - ext/mysqli/tests/bug35103.phpt | 68 - ext/mysqli/tests/bug35517.phpt | 29 - ext/mysqli/tests/bug35759.phpt | 44 - ext/mysqli/tests/bug36420.phpt | 25 - ext/mysqli/tests/bug36745.phpt | 23 - ext/mysqli/tests/bug36802.phpt | 46 - ext/mysqli/tests/bug36949.phpt | 50 - ext/mysqli/tests/bug38003.phpt | 20 - ext/mysqli/tests/bug38710.phpt | 18 - ext/mysqli/tests/connect.inc | 14 - ext/mysqli/tests/skipif.inc | 9 - ext/mysqli/tests/skipifemb.inc | 5 - ext/mysqli/tests/skipifnotemb.inc | 5 - ext/oci8/CREDITS | 2 - ext/oci8/README | 61 - ext/oci8/config.m4 | 405 - ext/oci8/config.w32 | 28 - ext/oci8/oci8.c | 1897 - ext/oci8/oci8.dsp | 133 - ext/oci8/oci8_collection.c | 760 - ext/oci8/oci8_interface.c | 2210 - ext/oci8/oci8_lob.c | 914 - ext/oci8/oci8_statement.c | 1669 - ext/oci8/package.xml | 254 - ext/oci8/php_oci8.h | 68 - ext/oci8/php_oci8_int.h | 471 - ext/oci8/tests/array_bind_001.phpt | 78 - ext/oci8/tests/array_bind_002.phpt | 94 - ext/oci8/tests/array_bind_003.phpt | 86 - ext/oci8/tests/array_bind_004.phpt | 65 - ext/oci8/tests/array_bind_005.phpt | 88 - ext/oci8/tests/array_bind_006.phpt | 88 - ext/oci8/tests/array_bind_007.phpt | 77 - ext/oci8/tests/array_bind_008.phpt | 96 - ext/oci8/tests/array_bind_009.phpt | 17 - ext/oci8/tests/array_bind_010.phpt | 51 - ext/oci8/tests/array_bind_011.phpt | 67 - ext/oci8/tests/array_bind_012.phpt | 26 - ext/oci8/tests/array_bind_013.phpt | 39 - ext/oci8/tests/array_bind_014.phpt | 73 - ext/oci8/tests/array_bind_date.phpt | 88 - ext/oci8/tests/array_bind_date1.phpt | 88 - ext/oci8/tests/array_bind_float.phpt | 74 - ext/oci8/tests/array_bind_float1.phpt | 74 - ext/oci8/tests/array_bind_int.phpt | 74 - ext/oci8/tests/array_bind_int1.phpt | 74 - ext/oci8/tests/array_bind_str.phpt | 88 - ext/oci8/tests/array_bind_str1.phpt | 88 - ext/oci8/tests/bind_empty.phpt | 132 - ext/oci8/tests/bind_long.phpt | 42 - ext/oci8/tests/bind_long_raw.phpt | 42 - ext/oci8/tests/bind_raw.phpt | 43 - ext/oci8/tests/bug26133.phpt | 34 - ext/oci8/tests/bug27303.phpt | 453 - ext/oci8/tests/bug27303_2.phpt | 453 - ext/oci8/tests/bug27303_3.phpt | 252 - ext/oci8/tests/bug27303_4.phpt | 453 - ext/oci8/tests/bug32325.phpt | 39 - ext/oci8/tests/bug35973.phpt | 54 - ext/oci8/tests/bug36010.phpt | 26 - ext/oci8/tests/bug36096.phpt | 34 - ext/oci8/tests/bug37581.phpt | 95 - ext/oci8/tests/bug38161.phpt | 30 - ext/oci8/tests/bug38173.phpt | 79 - ext/oci8/tests/bug40078.phpt | 69 - ext/oci8/tests/bug40415.phpt | 307 - ext/oci8/tests/close.phpt | 17 - ext/oci8/tests/coll_001.phpt | 36 - ext/oci8/tests/coll_002.phpt | 40 - ext/oci8/tests/coll_002_func.phpt | 40 - ext/oci8/tests/coll_003.phpt | 34 - ext/oci8/tests/coll_003_func.phpt | 34 - ext/oci8/tests/coll_004.phpt | 29 - ext/oci8/tests/coll_004_func.phpt | 29 - ext/oci8/tests/coll_005.phpt | 36 - ext/oci8/tests/coll_006.phpt | 40 - ext/oci8/tests/coll_006_func.phpt | 40 - ext/oci8/tests/coll_007.phpt | 34 - ext/oci8/tests/coll_008.phpt | 29 - ext/oci8/tests/coll_009.phpt | 42 - ext/oci8/tests/coll_009_func.phpt | 42 - ext/oci8/tests/coll_010.phpt | 41 - ext/oci8/tests/coll_010_func.phpt | 41 - ext/oci8/tests/coll_011.phpt | 49 - ext/oci8/tests/coll_011_func.phpt | 49 - ext/oci8/tests/coll_012.phpt | 46 - ext/oci8/tests/coll_012_func.phpt | 46 - ext/oci8/tests/coll_013.phpt | 43 - ext/oci8/tests/coll_013_func.phpt | 43 - ext/oci8/tests/coll_014.phpt | 43 - ext/oci8/tests/coll_014_func.phpt | 43 - ext/oci8/tests/coll_015.phpt | 38 - ext/oci8/tests/coll_015_func.phpt | 38 - ext/oci8/tests/coll_016.phpt | 48 - ext/oci8/tests/coll_016_func.phpt | 48 - ext/oci8/tests/coll_017.phpt | 38 - ext/oci8/tests/coll_017_func.phpt | 38 - ext/oci8/tests/coll_018.phpt | 93 - ext/oci8/tests/coll_019.phpt | 104 - ext/oci8/tests/commit.phpt | 228 - ext/oci8/tests/commit_old.phpt | 226 - ext/oci8/tests/connect.inc | 30 - ext/oci8/tests/connect.phpt | 22 - ext/oci8/tests/connect_1.phpt | 35 - ext/oci8/tests/connect_1_old.phpt | 35 - ext/oci8/tests/connect_old.phpt | 22 - ext/oci8/tests/connect_with_charset_001.phpt | 40 - .../tests/connect_without_oracle_home.phpt | 30 - .../connect_without_oracle_home_old.phpt | 29 - ext/oci8/tests/create_table.inc | 19 - ext/oci8/tests/create_type.inc | 17 - ext/oci8/tests/cursor_bind.phpt | 120 - ext/oci8/tests/cursor_bind_err.phpt | 48 - ext/oci8/tests/cursors.phpt | 84 - ext/oci8/tests/cursors_old.phpt | 82 - ext/oci8/tests/debug.phpt | 31 - ext/oci8/tests/default_prefetch.phpt | 50 - ext/oci8/tests/default_prefetch1.phpt | 50 - ext/oci8/tests/default_prefetch2.phpt | 53 - ext/oci8/tests/define.phpt | 44 - ext/oci8/tests/define1.phpt | 63 - ext/oci8/tests/define2.phpt | 106 - ext/oci8/tests/define3.phpt | 136 - ext/oci8/tests/define4.phpt | 83 - ext/oci8/tests/define5.phpt | 77 - ext/oci8/tests/define_old.phpt | 44 - ext/oci8/tests/descriptors.phpt | 58 - ext/oci8/tests/details.inc | 16 - ext/oci8/tests/drop_table.inc | 12 - ext/oci8/tests/drop_type.inc | 12 - ext/oci8/tests/error.phpt | 57 - ext/oci8/tests/error1.phpt | 41 - ext/oci8/tests/error2.phpt | 24 - ext/oci8/tests/error_old.phpt | 57 - ext/oci8/tests/exec_fetch.phpt | 24 - ext/oci8/tests/execute_mode.phpt | 19 - ext/oci8/tests/fetch.phpt | 64 - ext/oci8/tests/fetch_all.phpt | 247 - ext/oci8/tests/fetch_all2.phpt | 432 - ext/oci8/tests/fetch_array.phpt | 538 - ext/oci8/tests/fetch_assoc.phpt | 120 - ext/oci8/tests/fetch_into.phpt | 114 - ext/oci8/tests/fetch_into1.phpt | 324 - ext/oci8/tests/fetch_into2.phpt | 92 - ext/oci8/tests/fetch_object.phpt | 120 - ext/oci8/tests/fetch_row.phpt | 120 - ext/oci8/tests/field_funcs.phpt | 154 - ext/oci8/tests/field_funcs1.phpt | 280 - ext/oci8/tests/field_funcs_old.phpt | 154 - ext/oci8/tests/function_aliases.phpt | 198 - ext/oci8/tests/lob_001.phpt | Bin 1570 -> 0 bytes ext/oci8/tests/lob_002.phpt | 84 - ext/oci8/tests/lob_003.phpt | Bin 2137 -> 0 bytes ext/oci8/tests/lob_004.phpt | 105 - ext/oci8/tests/lob_005.phpt | 67 - ext/oci8/tests/lob_006.phpt | Bin 2138 -> 0 bytes ext/oci8/tests/lob_007.phpt | 89 - ext/oci8/tests/lob_008.phpt | 85 - ext/oci8/tests/lob_009.phpt | 96 - ext/oci8/tests/lob_009.txt | 6 - ext/oci8/tests/lob_010.phpt | 46 - ext/oci8/tests/lob_011.phpt | 89 - ext/oci8/tests/lob_012.phpt | 50 - ext/oci8/tests/lob_013.phpt | 54 - ext/oci8/tests/lob_014.phpt | 58 - ext/oci8/tests/lob_015.phpt | 70 - ext/oci8/tests/lob_016.phpt | 83 - ext/oci8/tests/lob_017.phpt | 85 - ext/oci8/tests/lob_018.phpt | 73 - ext/oci8/tests/lob_019.phpt | Bin 1959 -> 0 bytes ext/oci8/tests/lob_020.phpt | Bin 4591 -> 0 bytes ext/oci8/tests/lob_021.phpt | 72 - ext/oci8/tests/lob_022.phpt | 93 - ext/oci8/tests/lob_023.phpt | 121 - ext/oci8/tests/lob_024.phpt | 104 - ext/oci8/tests/lob_025.phpt | 116 - ext/oci8/tests/lob_026.phpt | 140 - ext/oci8/tests/lob_027.phpt | 141 - ext/oci8/tests/lob_028.phpt | 122 - ext/oci8/tests/lob_029.phpt | 119 - ext/oci8/tests/lob_030.phpt | 75 - ext/oci8/tests/lob_031.phpt | 107 - ext/oci8/tests/lob_032.phpt | 33 - ext/oci8/tests/lob_033.phpt | 38 - ext/oci8/tests/lob_034.phpt | 50 - ext/oci8/tests/lob_035.phpt | 135 - ext/oci8/tests/lob_036.phpt | 45 - ext/oci8/tests/lob_037.phpt | Bin 1771 -> 0 bytes ext/oci8/tests/lob_038.phpt | Bin 5146 -> 0 bytes ext/oci8/tests/lob_039.phpt | 65 - ext/oci8/tests/lob_aliases.phpt | 99 - ext/oci8/tests/lob_temp.phpt | 46 - ext/oci8/tests/lob_temp1.phpt | 40 - ext/oci8/tests/num.phpt | 221 - ext/oci8/tests/oci_execute_segfault.phpt | 54 - ext/oci8/tests/old_oci_close.phpt | 23 - ext/oci8/tests/old_oci_close1.phpt | 25 - ext/oci8/tests/password.phpt | 30 - ext/oci8/tests/password_new.phpt | 30 - ext/oci8/tests/password_old.phpt | 30 - ext/oci8/tests/pecl_bug8816.phpt | 130 - ext/oci8/tests/persistent.phpt | 26 - ext/oci8/tests/prefetch.phpt | 51 - ext/oci8/tests/prefetch_old.phpt | 51 - ext/oci8/tests/privileged_connect.phpt | 34 - ext/oci8/tests/privileged_connect1.phpt | 36 - ext/oci8/tests/select_null.phpt | 33 - ext/oci8/tests/serverversion.phpt | 35 - ext/oci8/tests/skipif.inc | 10 - ext/oci8/tests/statement_cache.phpt | 49 - ext/oci8/tests/statement_type.phpt | 63 - ext/oci8/tests/statement_type_old.phpt | 72 - ext/oci8/tests/test.gif | Bin 2523 -> 0 bytes ext/oci8/tests/test.txt | 9 - ext/oci8/tests/uncommitted.phpt | 16 - ext/odbc/CREDITS | 2 - ext/odbc/birdstep.c | 652 - ext/odbc/config.m4 | 596 - ext/odbc/config.w32 | 12 - ext/odbc/php_birdstep.h | 92 - ext/odbc/php_odbc.c | 3687 -- ext/odbc/php_odbc.h | 117 - ext/odbc/php_odbc_includes.h | 300 - ext/openssl/CREDITS | 2 - ext/openssl/README | 322 - ext/openssl/config.w32 | 17 - ext/openssl/config0.m4 | 25 - ext/openssl/openssl.c | 3583 -- ext/openssl/openssl.dsp | 111 - ext/openssl/openssl.mak | 185 - ext/openssl/php_openssl.h | 85 - ext/openssl/tests/001.phpt | 74 - ext/openssl/tests/002.phpt | 45 - ext/openssl/tests/003.phpt | 59 - ext/openssl/tests/004.phpt | 34 - ext/openssl/tests/005.phpt | 34 - ext/openssl/tests/bug25614.phpt | 14 - ext/openssl/tests/bug28382.phpt | 38 - ext/openssl/tests/bug28382cert.txt | 27 - ext/openssl/tests/bug36732.phpt | 39 - ext/openssl/tests/bug37820.phpt | 36 - ext/openssl/tests/bug37820cert.pem | 14 - ext/openssl/tests/bug37820key.pem | 9 - ext/openssl/tests/bug38255.phpt | 55 - ext/openssl/tests/bug38261.phpt | 34 - ext/openssl/tests/bug39217.phpt | 19 - ext/openssl/tests/bug39217cert1.txt | 17 - ext/openssl/tests/bug39217cert2.txt | 18 - ext/openssl/xp_ssl.c | 814 - ext/pcntl/CREDITS | 2 - ext/pcntl/EXPERIMENTAL | 5 - ext/pcntl/README | 16 - ext/pcntl/config.m4 | 19 - ext/pcntl/package.xml | 46 - ext/pcntl/pcntl.c | 733 - ext/pcntl/php_pcntl.h | 87 - ext/pcntl/php_signal.c | 46 - ext/pcntl/php_signal.h | 28 - ext/pcntl/test-pcntl.php | 40 - ext/pcntl/tests/001.phpt | 82 - ext/pcre/CREDITS | 2 - ext/pcre/TODO | 35 - ext/pcre/config.w32 | 14 - ext/pcre/config0.m4 | 60 - ext/pcre/pcrelib/AUTHORS | 23 - ext/pcre/pcrelib/COPYING | 68 - ext/pcre/pcrelib/ChangeLog | 2552 - ext/pcre/pcrelib/LICENCE | 68 - ext/pcre/pcrelib/NEWS | 296 - ext/pcre/pcrelib/NON-UNIX-USE | 281 - ext/pcre/pcrelib/README | 529 - ext/pcre/pcrelib/dftables.c | 181 - ext/pcre/pcrelib/doc/Tech.Notes | 402 - ext/pcre/pcrelib/doc/pcre.txt | 5473 --- ext/pcre/pcrelib/libpcre.def | 20 - ext/pcre/pcrelib/libpcreposix.def | 25 - ext/pcre/pcrelib/pcre.def | 29 - ext/pcre/pcrelib/pcre.h | 296 - ext/pcre/pcrelib/pcre_chartables.c | 183 - ext/pcre/pcrelib/pcre_compile.c | 5434 --- ext/pcre/pcrelib/pcre_config.c | 116 - ext/pcre/pcrelib/pcre_exec.c | 4199 -- ext/pcre/pcrelib/pcre_fullinfo.c | 149 - ext/pcre/pcrelib/pcre_get.c | 461 - ext/pcre/pcrelib/pcre_globals.c | 82 - ext/pcre/pcrelib/pcre_info.c | 89 - ext/pcre/pcrelib/pcre_internal.h | 1047 - ext/pcre/pcrelib/pcre_maketables.c | 140 - ext/pcre/pcrelib/pcre_newline.c | 135 - ext/pcre/pcrelib/pcre_ord2utf8.c | 78 - ext/pcre/pcrelib/pcre_printint.src | 494 - ext/pcre/pcrelib/pcre_refcount.c | 77 - ext/pcre/pcrelib/pcre_scanner.cc | 194 - ext/pcre/pcrelib/pcre_scanner.h | 171 - ext/pcre/pcrelib/pcre_scanner_unittest.cc | 152 - ext/pcre/pcrelib/pcre_stringpiece.cc | 39 - ext/pcre/pcrelib/pcre_stringpiece.h | 172 - ext/pcre/pcrelib/pcre_stringpiece_unittest.cc | 145 - ext/pcre/pcrelib/pcre_study.c | 570 - ext/pcre/pcrelib/pcre_tables.c | 197 - ext/pcre/pcrelib/pcre_try_flipped.c | 132 - ext/pcre/pcrelib/pcre_ucp_searchfuncs.c | 175 - ext/pcre/pcrelib/pcre_valid_utf8.c | 130 - ext/pcre/pcrelib/pcre_version.c | 86 - ext/pcre/pcrelib/pcre_xclass.c | 144 - ext/pcre/pcrelib/pcrecpp.cc | 857 - ext/pcre/pcrelib/pcrecpp.h | 695 - ext/pcre/pcrelib/pcrecpp_unittest.cc | 1227 - ext/pcre/pcrelib/pcrecpparg.h | 171 - ext/pcre/pcrelib/pcredemo.c | 324 - ext/pcre/pcrelib/pcregrep.c | 1992 - ext/pcre/pcrelib/pcreposix.c | 321 - ext/pcre/pcrelib/pcreposix.h | 147 - ext/pcre/pcrelib/pcretest.c | 2305 - ext/pcre/pcrelib/testdata/grepinput | 609 - ext/pcre/pcrelib/testdata/grepinput8 | 12 - ext/pcre/pcrelib/testdata/grepinputx | 49 - ext/pcre/pcrelib/testdata/greplist | 7 - ext/pcre/pcrelib/testdata/grepoutput | 429 - ext/pcre/pcrelib/testdata/grepoutput8 | 11 - ext/pcre/pcrelib/testdata/testinput1 | 4021 -- ext/pcre/pcrelib/testdata/testinput2 | 2133 - ext/pcre/pcrelib/testdata/testinput3 | 91 - ext/pcre/pcrelib/testdata/testinput4 | 526 - ext/pcre/pcrelib/testdata/testinput5 | 358 - ext/pcre/pcrelib/testdata/testinput6 | 765 - ext/pcre/pcrelib/testdata/testinput7 | 4232 -- ext/pcre/pcrelib/testdata/testinput8 | 593 - ext/pcre/pcrelib/testdata/testinput9 | 816 - ext/pcre/pcrelib/testdata/testoutput1 | 6574 --- ext/pcre/pcrelib/testdata/testoutput2 | 8129 ---- ext/pcre/pcrelib/testdata/testoutput3 | 163 - ext/pcre/pcrelib/testdata/testoutput4 | 921 - ext/pcre/pcrelib/testdata/testoutput5 | 1403 - ext/pcre/pcrelib/testdata/testoutput6 | 1435 - ext/pcre/pcrelib/testdata/testoutput7 | 6955 --- ext/pcre/pcrelib/testdata/testoutput8 | 1141 - ext/pcre/pcrelib/testdata/testoutput9 | 1627 - ext/pcre/pcrelib/ucp.h | 133 - ext/pcre/pcrelib/ucpinternal.h | 92 - ext/pcre/pcrelib/ucptable.c | 3068 -- ext/pcre/php_pcre.c | 1968 - ext/pcre/php_pcre.def | 11 - ext/pcre/php_pcre.h | 99 - ext/pcre/tests/001.phpt | 157 - ext/pcre/tests/002.phpt | 63 - ext/pcre/tests/003.phpt | 263 - ext/pcre/tests/004.phpt | 280 - ext/pcre/tests/005.phpt | 476 - ext/pcre/tests/backtrack_limit.phpt | 25 - ext/pcre/tests/bug20528.phpt | 41 - ext/pcre/tests/bug21732.phpt | 29 - ext/pcre/tests/bug21758.phpt | 28 - ext/pcre/tests/bug26927.phpt | 14 - ext/pcre/tests/bug27011.phpt | 13 - ext/pcre/tests/bug27103.phpt | 43 - ext/pcre/tests/bug33200.phpt | 12 - ext/pcre/tests/bug34790.phpt | 34 - ext/pcre/tests/bug37800.phpt | 31 - ext/pcre/tests/bug38600.phpt | 14 - ext/pcre/tests/bug40195.phpt | 78 - ext/pcre/tests/cache_limit.phpt | 25 - ext/pcre/tests/delimiters.phpt | 37 - ext/pcre/tests/dollar_endonly.phpt | 63 - ext/pcre/tests/grep.phpt | 36 - ext/pcre/tests/grep2.phpt | 70 - ext/pcre/tests/invalid_utf8.phpt | 22 - ext/pcre/tests/locales.phpt | 27 - ext/pcre/tests/match_flags.phpt | 236 - ext/pcre/tests/match_flags2.phpt | 175 - ext/pcre/tests/match_flags3.phpt | 72 - ext/pcre/tests/multiline.phpt | 18 - ext/pcre/tests/pcre_anchored.phpt | 37 - ext/pcre/tests/pcre_count.phpt | 49 - ext/pcre/tests/pcre_extended.phpt | 43 - ext/pcre/tests/pcre_extra.phpt | 14 - ext/pcre/tests/preg_replace.phpt | 35 - ext/pcre/tests/preg_replace2.phpt | 73 - ext/pcre/tests/preg_replace_callback.phpt | 25 - ext/pcre/tests/preg_replace_callback2.phpt | 55 - ext/pcre/tests/preg_replace_callback3.phpt | 69 - ext/pcre/tests/recursion_limit.phpt | 25 - ext/pcre/tests/split.phpt | 154 - ext/pcre/tests/split2.phpt | 610 - ext/pcre/tests/study.phpt | 42 - ext/pcre/tests/ungreedy.phpt | 47 - ext/pdo/CREDITS | 3 +- ext/pdo/EXPERIMENTAL | 0 ext/pdo/TODO | 98 +- ext/pdo/config.m4 | 9 +- ext/pdo/package.xml | 59 +- ext/pdo/pdo.c | 77 +- ext/pdo/pdo_dbh.c | 309 +- ext/pdo/pdo_sql_parser.c | 449 +- ext/pdo/pdo_sql_parser.re | 61 +- ext/pdo/pdo_sqlstate.c | 6 +- ext/pdo/pdo_stmt.c | 354 +- ext/pdo/php_pdo.h | 21 +- ext/pdo/php_pdo_driver.h | 31 +- ext/pdo/php_pdo_int.h | 14 +- ext/pdo/php_pdo_phpvers_compat.h | 61 - ext/pdo/tests/bug_34630.phpt | 39 - ext/pdo/tests/bug_34687.phpt | 32 - ext/pdo/tests/bug_36428.phpt | 42 - ext/pdo/tests/bug_36798.phpt | 32 - ext/pdo/tests/bug_38253.phpt | 47 - ext/pdo/tests/bug_38394.phpt | 51 - ext/pdo/tests/bug_39398.phpt | 35 - ext/pdo/tests/bug_39656.phpt | 51 - ext/pdo/tests/pdo.inc | 11 - ext/pdo/tests/pdo_001.phpt | 74 - ext/pdo/tests/pdo_002.phpt | 74 - ext/pdo/tests/pdo_003.phpt | 98 - ext/pdo/tests/pdo_004.phpt | 74 - ext/pdo/tests/pdo_005.phpt | 257 - ext/pdo/tests/pdo_006.phpt | 124 - ext/pdo/tests/pdo_007.phpt | 100 - ext/pdo/tests/pdo_008.phpt | 53 - ext/pdo/tests/pdo_009.phpt | 203 - ext/pdo/tests/pdo_010.phpt | 178 - ext/pdo/tests/pdo_011.phpt | 517 - ext/pdo/tests/pdo_012.phpt | 151 - ext/pdo/tests/pdo_013.phpt | 137 - ext/pdo/tests/pdo_014.phpt | 133 - ext/pdo/tests/pdo_015.phpt | 158 - ext/pdo/tests/pdo_016.phpt | 298 - ext/pdo/tests/pdo_016a.phpt | 298 - ext/pdo/tests/pdo_017.phpt | 72 - ext/pdo/tests/pdo_018.phpt | 383 - ext/pdo/tests/pdo_019.phpt | 100 - ext/pdo/tests/pdo_020.phpt | 34 - ext/pdo/tests/pdo_021.phpt | 61 - ext/pdo/tests/pdo_022.phpt | 62 - ext/pdo/tests/pdo_023.phpt | 148 - ext/pdo/tests/pdo_024.phpt | 35 - ext/pdo/tests/pdo_025.phpt | 165 - ext/pdo/tests/pdo_026.phpt | 145 - ext/pdo/tests/pdo_027.phpt | 29 - ext/pdo/tests/pdo_028.phpt | 59 - ext/pdo/tests/pdo_029.phpt | 162 - ext/pdo/tests/pdo_030.phpt | 189 - ext/pdo/tests/pdo_031.phpt | 63 - ext/pdo/tests/pdo_032.phpt | 130 - ext/pdo/tests/pdo_033.phpt | 39 - ext/pdo/tests/pdo_test.inc | 88 - ext/pdo/tests/pecl_bug_5217.phpt | 29 - ext/pdo_dblib/CREDITS | 2 - ext/pdo_dblib/README | 25 - ext/pdo_dblib/config.m4 | 81 - ext/pdo_dblib/config.w32 | 69 - ext/pdo_dblib/db.php | 31 - ext/pdo_dblib/dblib_driver.c | 272 - ext/pdo_dblib/dblib_stmt.c | 265 - ext/pdo_dblib/package.xml | 50 - ext/pdo_dblib/pdo_dblib.c | 226 - ext/pdo_dblib/php_pdo_dblib.h | 45 - ext/pdo_dblib/php_pdo_dblib_int.h | 156 - ext/pdo_dblib/tests/common.phpt | 23 - ext/pdo_firebird/CREDITS | 2 - ext/pdo_firebird/EXPERIMENTAL | 0 ext/pdo_firebird/config.m4 | 53 - ext/pdo_firebird/config.w32 | 17 - ext/pdo_firebird/firebird_driver.c | 670 - ext/pdo_firebird/firebird_statement.c | 704 - ext/pdo_firebird/package.xml | 57 - ext/pdo_firebird/pdo_firebird.c | 87 - ext/pdo_firebird/php_pdo_firebird.h | 58 - ext/pdo_firebird/php_pdo_firebird_int.h | 127 - ext/pdo_firebird/tests/common.phpt | 27 - ext/pdo_firebird/tests/connect.phpt | 16 - ext/pdo_firebird/tests/ddl.phpt | 37 - ext/pdo_firebird/tests/execute.phpt | 65 - ext/pdo_firebird/tests/skipif.inc | 5 - ext/pdo_firebird/tests/testdb.inc | 34 - ext/pdo_mysql/CREDITS | 5 +- ext/pdo_mysql/config.m4 | 103 +- ext/pdo_mysql/config.w32 | 14 - ext/pdo_mysql/get_error_codes.php | 27 - ext/pdo_mysql/mysql_driver.c | 82 +- ext/pdo_mysql/mysql_statement.c | 90 +- ext/pdo_mysql/package.xml | 27 +- ext/pdo_mysql/pdo_mysql.c | 24 +- ext/pdo_mysql/php_pdo_mysql.h | 6 +- ext/pdo_mysql/php_pdo_mysql_int.h | 10 +- ext/pdo_mysql/tests/bug_33689.phpt | 50 - ext/pdo_mysql/tests/bug_37445.phpt | 21 - ext/pdo_mysql/tests/bug_39483.phpt | Bin 821 -> 0 bytes ext/pdo_mysql/tests/common.phpt | 28 - ext/pdo_mysql/tests/config.inc | 19 - ext/pdo_mysql/tests/last_insert_id.phpt | 35 - ext/pdo_mysql/tests/show_tables.phpt | 20 - ext/pdo_oci/EXPERIMENTAL | 0 ext/pdo_oci/config.m4 | 16 +- ext/pdo_oci/config.w32 | 2 + ext/pdo_oci/oci_driver.c | 6 +- ext/pdo_oci/oci_statement.c | 274 +- ext/pdo_oci/package.xml | 47 - ext/pdo_oci/package2.xml | 72 + ext/pdo_oci/pdo_oci.c | 4 +- ext/pdo_oci/php_pdo_oci.h | 2 +- ext/pdo_oci/php_pdo_oci_int.h | 7 +- ext/pdo_oci/tests/common.phpt | 26 - ext/pdo_odbc/EXPERIMENTAL | 2 - ext/pdo_odbc/config.m4 | 2 +- ext/pdo_odbc/odbc_driver.c | 72 +- ext/pdo_odbc/odbc_stmt.c | 12 +- ext/pdo_odbc/package.xml | 52 - ext/pdo_odbc/package2.xml | 71 + ext/pdo_odbc/pdo_odbc.c | 29 +- ext/pdo_odbc/php_pdo_odbc_int.h | 4 +- ext/pdo_odbc/tests/common.phpt | 48 - ext/pdo_odbc/tests/long_columns.phpt | 44 - ext/pdo_pgsql/config.m4 | 2 - ext/pdo_pgsql/config.w32 | 8 +- ext/pdo_pgsql/package.xml | 23 +- ext/pdo_pgsql/pdo_pgsql.c | 27 +- ext/pdo_pgsql/pgsql_driver.c | 302 +- ext/pdo_pgsql/pgsql_statement.c | 153 +- ext/pdo_pgsql/php_pdo_pgsql.h | 6 +- ext/pdo_pgsql/php_pdo_pgsql_int.h | 29 +- ext/pdo_pgsql/tests/bug36727.phpt | 23 - ext/pdo_pgsql/tests/bug_33876.phpt | 151 - ext/pdo_pgsql/tests/common.phpt | 23 - ext/pdo_pgsql/tests/large_objects.phpt | 61 - ext/pdo_sqlite/EXPERIMENTAL | 0 ext/pdo_sqlite/config.m4 | 16 +- ext/pdo_sqlite/config.w32 | 8 +- ext/pdo_sqlite/package.xml | 173 - ext/pdo_sqlite/package2.xml | 187 + ext/pdo_sqlite/pdo_sqlite.c | 2 +- ext/pdo_sqlite/php_pdo_sqlite.h | 2 +- ext/pdo_sqlite/php_pdo_sqlite_int.h | 11 +- ext/pdo_sqlite/post-bundle.sh | 10 - ext/pdo_sqlite/sqlite/Makefile.in | 78 +- ext/pdo_sqlite/sqlite/Makefile.linux-gcc | 18 - ext/pdo_sqlite/sqlite/VERSION | 2 +- ext/pdo_sqlite/sqlite/aclocal.m4 | 2 +- ext/pdo_sqlite/sqlite/configure | 444 +- ext/pdo_sqlite/sqlite/configure.ac | 101 +- ext/pdo_sqlite/sqlite/main.mk | 81 +- ext/pdo_sqlite/sqlite/mkdll.sh | 6 +- ext/pdo_sqlite/sqlite/mkopcodeh.awk | 25 +- ext/pdo_sqlite/sqlite/publish.sh | 2 - ext/pdo_sqlite/sqlite/sqlite3.def | 4 - ext/pdo_sqlite/sqlite/src/alter.c | 80 +- ext/pdo_sqlite/sqlite/src/analyze.c | 37 +- ext/pdo_sqlite/sqlite/src/attach.c | 396 +- ext/pdo_sqlite/sqlite/src/auth.c | 19 +- ext/pdo_sqlite/sqlite/src/btree.c | 1452 +- ext/pdo_sqlite/sqlite/src/btree.h | 9 +- ext/pdo_sqlite/sqlite/src/build.c | 868 +- ext/pdo_sqlite/sqlite/src/callback.c | 85 +- ext/pdo_sqlite/sqlite/src/complete.c | 263 - ext/pdo_sqlite/sqlite/src/date.c | 34 +- ext/pdo_sqlite/sqlite/src/delete.c | 91 +- ext/pdo_sqlite/sqlite/src/experimental.c | 37 + ext/pdo_sqlite/sqlite/src/expr.c | 310 +- ext/pdo_sqlite/sqlite/src/func.c | 179 +- ext/pdo_sqlite/sqlite/src/hash.c | 29 +- ext/pdo_sqlite/sqlite/src/hash.h | 2 - ext/pdo_sqlite/sqlite/src/insert.c | 155 +- ext/pdo_sqlite/sqlite/src/keywordhash.h | 87 +- ext/pdo_sqlite/sqlite/src/legacy.c | 13 +- ext/pdo_sqlite/sqlite/src/loadext.c | 355 - ext/pdo_sqlite/sqlite/src/main.c | 641 +- ext/pdo_sqlite/sqlite/src/opcodes.h | 296 +- ext/pdo_sqlite/sqlite/src/os.c | 92 - ext/pdo_sqlite/sqlite/src/os.h | 355 +- ext/pdo_sqlite/sqlite/src/os_common.h | 67 +- ext/pdo_sqlite/sqlite/src/os_mac.c | 738 + ext/pdo_sqlite/sqlite/src/os_mac.h | 41 + ext/pdo_sqlite/sqlite/src/os_unix.c | 1010 +- ext/pdo_sqlite/sqlite/src/os_win.c | 936 +- ext/pdo_sqlite/sqlite/src/pager.c | 1225 +- ext/pdo_sqlite/sqlite/src/pager.h | 11 +- ext/pdo_sqlite/sqlite/src/parse.c | 4083 +- ext/pdo_sqlite/sqlite/src/parse.h | 298 +- ext/pdo_sqlite/sqlite/src/parse.y | 229 +- ext/pdo_sqlite/sqlite/src/pragma.c | 160 +- ext/pdo_sqlite/sqlite/src/prepare.c | 233 +- ext/pdo_sqlite/sqlite/src/printf.c | 97 +- ext/pdo_sqlite/sqlite/src/select.c | 772 +- ext/pdo_sqlite/sqlite/src/shell.c | 110 +- ext/pdo_sqlite/sqlite/src/sqlite.h.in | 475 +- ext/pdo_sqlite/sqlite/src/sqlite3ext.h | 280 - ext/pdo_sqlite/sqlite/src/sqliteInt.h | 529 +- ext/pdo_sqlite/sqlite/src/sqlite_config.w32.h | 8 - ext/pdo_sqlite/sqlite/src/table.c | 27 +- ext/pdo_sqlite/sqlite/src/tclsqlite.c | 272 +- ext/pdo_sqlite/sqlite/src/test1.c | 880 +- ext/pdo_sqlite/sqlite/src/test2.c | 10 +- ext/pdo_sqlite/sqlite/src/test3.c | 23 +- ext/pdo_sqlite/sqlite/src/test4.c | 72 +- ext/pdo_sqlite/sqlite/src/test5.c | 8 +- ext/pdo_sqlite/sqlite/src/tokenize.c | 122 +- ext/pdo_sqlite/sqlite/src/trigger.c | 161 +- ext/pdo_sqlite/sqlite/src/update.c | 176 +- ext/pdo_sqlite/sqlite/src/utf.c | 44 +- ext/pdo_sqlite/sqlite/src/util.c | 968 +- ext/pdo_sqlite/sqlite/src/vacuum.c | 59 +- ext/pdo_sqlite/sqlite/src/vdbe.c | 1311 +- ext/pdo_sqlite/sqlite/src/vdbe.h | 17 +- ext/pdo_sqlite/sqlite/src/vdbeInt.h | 48 +- ext/pdo_sqlite/sqlite/src/vdbeapi.c | 170 +- ext/pdo_sqlite/sqlite/src/vdbeaux.c | 569 +- ext/pdo_sqlite/sqlite/src/vdbemem.c | 149 +- ext/pdo_sqlite/sqlite/src/vtab.c | 659 - ext/pdo_sqlite/sqlite/src/where.c | 681 +- ext/pdo_sqlite/sqlite/tool/lemon.c | 298 +- ext/pdo_sqlite/sqlite/tool/lempar.c | 52 +- ext/pdo_sqlite/sqlite/tool/memleak3.tcl | 1 - ext/pdo_sqlite/sqlite/tool/mkkeywordhash.c | 18 +- ext/pdo_sqlite/sqlite/tool/showdb.c | 7 +- ext/pdo_sqlite/sqlite/tool/spaceanal.tcl | 51 +- ext/pdo_sqlite/sqlite_driver.c | 60 +- ext/pdo_sqlite/sqlite_statement.c | 5 +- ext/pdo_sqlite/tests/bug33841.phpt | 28 - ext/pdo_sqlite/tests/bug35336.phpt | 26 - ext/pdo_sqlite/tests/common.phpt | 12 - ext/pgsql/CREDITS | 2 - ext/pgsql/README | 235 - ext/pgsql/config.m4 | 109 - ext/pgsql/config.w32 | 15 - ext/pgsql/mysql_users.php | 82 - ext/pgsql/pgsql.c | 5839 --- ext/pgsql/pgsql.dsp | 167 - ext/pgsql/pgsql.mak | 170 - ext/pgsql/php_pgsql.h | 303 - ext/pgsql/tests/01createdb.phpt | 29 - ext/pgsql/tests/02connection.phpt | 59 - ext/pgsql/tests/03sync_query.phpt | 73 - ext/pgsql/tests/04async_query.phpt | 65 - ext/pgsql/tests/05large_object.phpt | 82 - ext/pgsql/tests/06copy.phpt | 22 - ext/pgsql/tests/07optional.phpt | 24 - ext/pgsql/tests/08escape.phpt | 68 - ext/pgsql/tests/09notice.phpt | 29 - ext/pgsql/tests/10pg_convert.phpt | 26 - ext/pgsql/tests/11pg_meta_data.phpt | 64 - ext/pgsql/tests/12pg_insert.phpt | 21 - ext/pgsql/tests/13pg_select.phpt | 34 - ext/pgsql/tests/14pg_update.phpt | 22 - ext/pgsql/tests/15pg_delete.phpt | 23 - ext/pgsql/tests/16pg_result_status.phpt | 19 - ext/pgsql/tests/17result.phpt | 67 - ext/pgsql/tests/18pg_escape_bytea.phpt | 28 - ext/pgsql/tests/19pg_ping.phpt | 15 - ext/pgsql/tests/20pg_get_pid.phpt | 17 - ext/pgsql/tests/21pg_get_notify.phpt | 20 - ext/pgsql/tests/22pg_fetch_object.phpt | 37 - ext/pgsql/tests/23sync_query_params.phpt | 59 - ext/pgsql/tests/24sync_query_prepared.phpt | 65 - ext/pgsql/tests/25async_query_params.phpt | 70 - ext/pgsql/tests/26async_query_prepared.phpt | 106 - ext/pgsql/tests/80_bug14383.phpt | 37 - ext/pgsql/tests/80_bug24499.phpt | 66 - ext/pgsql/tests/80_bug27597.phpt | 60 - ext/pgsql/tests/80_bug32223.phpt | 55 - ext/pgsql/tests/80_bug32223b.phpt | 57 - ext/pgsql/tests/80_bug36625.phpt | 49 - ext/pgsql/tests/98old_api.phpt | 33 - ext/pgsql/tests/9999dropdb.phpt | 18 - ext/pgsql/tests/README | 16 - ext/pgsql/tests/config.inc | 12 - ext/pgsql/tests/php.gif | Bin 3872 -> 0 bytes ext/pgsql/tests/skipif.inc | 18 - ext/phar/package.php | 66 + ext/phar/package.xml | 263 +- ext/phar/phar.c | 60 +- ext/phar/phar.php | 21 - ext/phar/phar_internal.h | 3 +- ext/phar/tests/phar_offset_get_error.phpt | 37 - ext/phar/tests/phar_stub_error.phpt | 56 - ext/posix/CREDITS | 2 - ext/posix/config.m4 | 34 - ext/posix/package.xml | 49 - ext/posix/php_posix.h | 138 - ext/posix/posix.c | 1207 - ext/posix/tests/001.phpt | 12 - ext/pspell/CREDITS | 2 - ext/pspell/README | 51 - ext/pspell/config.m4 | 45 - ext/pspell/config.w32 | 16 - ext/pspell/php_pspell.h | 32 - ext/pspell/pspell.c | 911 - ext/pspell/pspell.dsp | 112 - ext/pspell/tests/001.phpt | 116 - ext/pspell/tests/002.phpt | 44 - ext/pspell/tests/003.phpt | 39 - ext/pspell/tests/004.phpt | 35 - ext/pspell/tests/005.phpt | 46 - ext/pspell/tests/wordlist.txt | 5 - ext/readline/CREDITS | 2 - ext/readline/README.libedit | 4 - ext/readline/config.m4 | 102 - ext/readline/php_readline.h | 39 - ext/readline/readline.c | 578 - ext/recode/CREDITS | 2 - ext/recode/config.m4 | 64 - ext/recode/config9.m4 | 13 - ext/recode/php_recode.h | 39 - ext/recode/recode.c | 230 - ext/reflection/CREDITS | 2 - ext/reflection/TODO | 3 - ext/reflection/config.m4 | 10 - ext/reflection/config.w32 | 10 - ext/reflection/php_reflection.c | 5015 -- ext/reflection/php_reflection.h | 56 - ext/reflection/tests/001.phpt | 102 - ext/reflection/tests/002.phpt | 78 - ext/reflection/tests/003.phpt | 33 - ext/reflection/tests/004.phpt | 44 - ext/reflection/tests/005.phpt | 63 - ext/reflection/tests/006.phpt | 122 - ext/reflection/tests/007.phpt | 232 - ext/reflection/tests/008.phpt | 73 - ext/reflection/tests/009.phpt | 50 - ext/reflection/tests/010.phpt | 19 - ext/reflection/tests/011.phpt | 10 - ext/reflection/tests/012.phpt | 14 - ext/reflection/tests/013.phpt | 11 - ext/reflection/tests/014.phpt | 11 - ext/reflection/tests/015.phpt | 15 - ext/reflection/tests/016.phpt | 24 - ext/reflection/tests/017.phpt | 51 - ext/reflection/tests/018.phpt | 20 - ext/reflection/tests/019.phpt | 11 - ext/reflection/tests/020.phpt | 32 - ext/reflection/tests/021.phpt | 14 - ext/reflection/tests/022.phpt | 14 - ext/reflection/tests/023.phpt | 43 - ext/reflection/tests/024.phpt | 38 - ext/reflection/tests/bug26640.phpt | 27 - ext/reflection/tests/bug26695.phpt | 30 - ext/reflection/tests/bug29268.phpt | 29 - ext/reflection/tests/bug29523.phpt | 40 - ext/reflection/tests/bug29828.phpt | 37 - ext/reflection/tests/bug29986.phpt | 65 - ext/reflection/tests/bug30146.phpt | 25 - ext/reflection/tests/bug30148.phpt | 37 - ext/reflection/tests/bug30209.phpt | 37 - ext/reflection/tests/bug30856.phpt | 28 - ext/reflection/tests/bug30961.phpt | 22 - ext/reflection/tests/bug31651.phpt | 26 - ext/reflection/tests/bug32981.phpt | 46 - ext/reflection/tests/bug33312.phpt | 22 - ext/reflection/tests/bug33389.phpt | 99 - ext/reflection/tests/bug36308.phpt | 22 - ext/reflection/tests/bug36337.phpt | 30 - ext/reflection/tests/bug36434.phpt | 33 - ext/reflection/tests/bug37816.phpt | 28 - ext/reflection/tests/bug38132.phpt | 50 - ext/reflection/tests/bug38194.phpt | 13 - ext/reflection/tests/bug38217.phpt | 54 - ext/reflection/tests/bug38465.phpt | 86 - ext/reflection/tests/bug38653.phpt | 34 - ext/reflection/tests/bug38942.phpt | 34 - ext/reflection/tests/bug39001.phpt | 31 - ext/reflection/tests/bug39067.phpt | 51 - ext/reflection/tests/bug39884.phpt | 28 - ext/reflection/tests/bug40431.phpt | 198 - ext/reflection/tests/bug40794.phpt | 48 - ext/reflection/tests/exception.inc | 16 - ext/reflection/tests/parameters_001.phpt | 47 - ext/reflection/tests/parameters_002.phpt | 369 - ext/reflection/tests/property_exists.phpt | 224 - .../tests/static_properties_002.phpt | 62 - ext/session/CREDITS | 2 - ext/session/config.m4 | 33 - ext/session/config.w32 | 11 - ext/session/mod_files.c | 475 - ext/session/mod_files.h | 29 - ext/session/mod_files.sh | 24 - ext/session/mod_mm.c | 452 - ext/session/mod_mm.h | 37 - ext/session/mod_user.c | 196 - ext/session/mod_user.h | 41 - ext/session/package.xml | 82 - ext/session/php_session.h | 246 - ext/session/session.c | 1941 - ext/session/tests/001.phpt | 35 - ext/session/tests/002.phpt | 11 - ext/session/tests/003.phpt | 66 - ext/session/tests/004.phpt | 159 - ext/session/tests/005.phpt | 220 - ext/session/tests/006.phpt | 96 - ext/session/tests/009.phpt | 70 - ext/session/tests/010.phpt | 16 - ext/session/tests/011.phpt | 17 - ext/session/tests/013.phpt | 24 - ext/session/tests/014.phpt | 39 - ext/session/tests/015.phpt | 25 - ext/session/tests/016.phpt | 29 - ext/session/tests/017.phpt | 26 - ext/session/tests/018.phpt | 25 - ext/session/tests/020.phpt | 26 - ext/session/tests/021.phpt | 62 - ext/session/tests/bug24592.phpt | 49 - ext/session/tests/bug26862.phpt | 22 - ext/session/tests/bug31454.phpt | 21 - ext/session/tests/bug36459.phpt | 41 - ext/session/tests/bug38377.phpt | 13 - ext/session/tests/skipif.inc | 25 - ext/shmop/CREDITS | 2 - ext/shmop/README | 69 - ext/shmop/config.m4 | 8 - ext/shmop/config.w32 | 9 - ext/shmop/package.xml | 47 - ext/shmop/php_shmop.h | 81 - ext/shmop/shmop.c | 353 - ext/shmop/shmop.dsp | 107 - ext/shmop/tests/001.phpt | 91 - ext/simplexml/CREDITS | 2 - ext/simplexml/README | 34 - ext/simplexml/config.m4 | 27 - ext/simplexml/config.w32 | 16 - ext/simplexml/examples/book.php | 8 - ext/simplexml/examples/book.xml | 10 - ext/simplexml/examples/interop.php | 27 - ext/simplexml/examples/security.php | 6 - ext/simplexml/examples/security.xml | 4 - ext/simplexml/examples/xpath.php | 9 - ext/simplexml/php_simplexml.h | 97 - ext/simplexml/php_simplexml_exports.h | 67 - ext/simplexml/simplexml.c | 2440 - ext/simplexml/simplexml.dsp | 111 - ext/simplexml/tests/000.phpt | 461 - ext/simplexml/tests/000.xml | 16 - ext/simplexml/tests/001.phpt | 75 - ext/simplexml/tests/002.phpt | 96 - ext/simplexml/tests/003.phpt | 106 - ext/simplexml/tests/004.phpt | 101 - ext/simplexml/tests/005.phpt | 45 - ext/simplexml/tests/006.phpt | 98 - ext/simplexml/tests/007.phpt | 146 - ext/simplexml/tests/008.phpt | 49 - ext/simplexml/tests/009.phpt | 53 - ext/simplexml/tests/009b.phpt | 48 - ext/simplexml/tests/010.phpt | 96 - ext/simplexml/tests/011.phpt | 47 - ext/simplexml/tests/012.phpt | 40 - ext/simplexml/tests/013.phpt | 26 - ext/simplexml/tests/014.phpt | 88 - ext/simplexml/tests/014a.phpt | 81 - ext/simplexml/tests/014b.phpt | 79 - ext/simplexml/tests/015.phpt | 74 - ext/simplexml/tests/016.phpt | 84 - ext/simplexml/tests/016a.phpt | 39 - ext/simplexml/tests/017.phpt | 86 - ext/simplexml/tests/018.phpt | 65 - ext/simplexml/tests/019.phpt | 97 - ext/simplexml/tests/020.phpt | 20 - ext/simplexml/tests/021.phpt | 25 - ext/simplexml/tests/022.phpt | 95 - ext/simplexml/tests/023.phpt | 49 - ext/simplexml/tests/024.phpt | 317 - ext/simplexml/tests/025.phpt | 134 - ext/simplexml/tests/026.phpt | 40 - ext/simplexml/tests/027.phpt | 74 - ext/simplexml/tests/028.phpt | 42 - ext/simplexml/tests/029.phpt | 51 - ext/simplexml/tests/030.phpt | 44 - ext/simplexml/tests/031.phpt | 68 - ext/simplexml/tests/032.phpt | 45 - ext/simplexml/tests/033.phpt | 236 - ext/simplexml/tests/book.xml | 10 - ext/simplexml/tests/bug24392.phpt | 22 - ext/simplexml/tests/bug24392.xml | 76 - ext/simplexml/tests/bug25756.xsd | 24 - ext/simplexml/tests/bug25756_1.xml | 13 - ext/simplexml/tests/bug25756_2.xml | 13 - ext/simplexml/tests/bug26976.phpt | 28 - ext/simplexml/tests/bug27010.phpt | 34 - ext/simplexml/tests/bug35785.phpt | 28 - ext/simplexml/tests/bug36611.phpt | 30 - ext/simplexml/tests/bug37565.phpt | 30 - ext/simplexml/tests/bug38347.phpt | 28 - ext/simplexml/tests/bug38354.phpt | 28 - ext/simplexml/tests/bug38406.phpt | 47 - ext/simplexml/tests/bug38424.phpt | 26 - ext/simplexml/tests/bug39662.phpt | 54 - ext/simplexml/tests/bug39760.phpt | 55 - ext/simplexml/tests/bug40451.phpt | 22 - ext/simplexml/tests/profile01.phpt | 18 - ext/simplexml/tests/profile02.phpt | 21 - ext/simplexml/tests/profile03.phpt | 18 - ext/simplexml/tests/profile04.phpt | 18 - ext/simplexml/tests/profile05.phpt | 18 - ext/simplexml/tests/profile06.phpt | 20 - ext/simplexml/tests/profile07.phpt | 23 - ext/simplexml/tests/profile08.phpt | 18 - ext/simplexml/tests/profile09.phpt | 19 - ext/simplexml/tests/profile10.phpt | 25 - ext/simplexml/tests/profile11.phpt | 49 - ext/simplexml/tests/profile12.phpt | 115 - ext/simplexml/tests/profile13.phpt | 117 - ext/simplexml/tests/simplexml_import_dom.phpt | 22 - ext/simplexml/tests/sxe.dtd | 34 - ext/simplexml/tests/sxe.ent | 1 - ext/simplexml/tests/sxe.xml | 17 - ext/skeleton/CREDITS | 1 - ext/skeleton/EXPERIMENTAL | 0 ext/skeleton/create_stubs | 289 - ext/skeleton/php_skeleton.h | 56 - ext/skeleton/skeleton.c | 166 - ext/skeleton/skeleton.dsp | 113 - ext/skeleton/skeleton.php | 21 - ext/skeleton/tests/001.phpt | 21 - ext/snmp/CREDITS | 2 - ext/snmp/config.m4 | 137 - ext/snmp/config.w32 | 18 - ext/snmp/php_snmp.h | 91 - ext/snmp/snmp.c | 1214 - ext/snmp/snmp.dsp | 109 - ext/snmp/winsnmp.c | 249 - ext/soap/CREDITS | 2 - ext/soap/TODO | 98 - ext/soap/TODO.old | 39 - ext/soap/config.m4 | 25 - ext/soap/config.w32 | 15 - ext/soap/interop/client_round2.php | 113 - ext/soap/interop/client_round2_interop.php | 785 - ext/soap/interop/client_round2_params.php | 622 - ext/soap/interop/client_round2_results.php | 75 - ext/soap/interop/client_round2_run.php | 53 - ext/soap/interop/config.php.dist | 5 - ext/soap/interop/database_round2.sql | 44 - ext/soap/interop/echoheadersvc.wsdl.php | 398 - ext/soap/interop/index.php | 59 - ext/soap/interop/interop.wsdl.php | 336 - ext/soap/interop/interopB.wsdl.php | 196 - ext/soap/interop/server_round2_base.php | 105 - ext/soap/interop/server_round2_groupB.php | 58 - ext/soap/interop/server_round2_groupC.php | 43 - ext/soap/interop/test.utility.php | 143 - ext/soap/package.xml | 64 - ext/soap/php_encoding.c | 3447 -- ext/soap/php_encoding.h | 215 - ext/soap/php_http.c | 1301 - ext/soap/php_http.h | 36 - ext/soap/php_packet_soap.c | 452 - ext/soap/php_packet_soap.h | 27 - ext/soap/php_schema.c | 2524 - ext/soap/php_schema.h | 40 - ext/soap/php_sdl.c | 3553 -- ext/soap/php_sdl.h | 267 - ext/soap/php_soap.dsp | 156 - ext/soap/php_soap.h | 267 - ext/soap/php_xml.c | 322 - ext/soap/php_xml.h | 79 - ext/soap/readme.html | 646 - ext/soap/soap.c | 5108 -- ext/soap/tests/any.phpt | 112 - ext/soap/tests/bugs/bug27722.phpt | 13 - ext/soap/tests/bugs/bug27722.wsdl | 92 - ext/soap/tests/bugs/bug27742.phpt | 13 - ext/soap/tests/bugs/bug27742.wsdl | 854 - ext/soap/tests/bugs/bug28751.phpt | 38 - ext/soap/tests/bugs/bug28969.phpt | 47 - ext/soap/tests/bugs/bug28985.phpt | 399 - ext/soap/tests/bugs/bug28985.wsdl | 683 - ext/soap/tests/bugs/bug29061.phpt | 12 - ext/soap/tests/bugs/bug29061.wsdl | 41 - ext/soap/tests/bugs/bug29109.phpt | 27 - ext/soap/tests/bugs/bug29109.wsdl | 121 - ext/soap/tests/bugs/bug29236.phpt | 31 - ext/soap/tests/bugs/bug29236.wsdl | 287 - ext/soap/tests/bugs/bug29795.phpt | 32 - ext/soap/tests/bugs/bug29795.wsdl | 40 - ext/soap/tests/bugs/bug29830.phpt | 25 - ext/soap/tests/bugs/bug29839.phpt | 41 - ext/soap/tests/bugs/bug29839.wsdl | 42 - ext/soap/tests/bugs/bug29844.phpt | 38 - ext/soap/tests/bugs/bug29844.wsdl | 66 - ext/soap/tests/bugs/bug30045.phpt | 171 - ext/soap/tests/bugs/bug30106.phpt | 106 - ext/soap/tests/bugs/bug30106.wsdl | 59 - ext/soap/tests/bugs/bug30175.phpt | 56 - ext/soap/tests/bugs/bug30175.wsdl | 126 - ext/soap/tests/bugs/bug30799.phpt | 25 - ext/soap/tests/bugs/bug30928.phpt | 81 - ext/soap/tests/bugs/bug30928.wsdl | 49 - ext/soap/tests/bugs/bug30994.phpt | 47 - ext/soap/tests/bugs/bug31422.phpt | 42 - ext/soap/tests/bugs/bug31695.phpt | 62 - ext/soap/tests/bugs/bug31695.wsdl | 47 - ext/soap/tests/bugs/bug31755.phpt | 17 - ext/soap/tests/bugs/bug32776.phpt | 55 - ext/soap/tests/bugs/bug32776.wsdl | 47 - ext/soap/tests/bugs/bug32941.phpt | 84 - ext/soap/tests/bugs/bug32941.wsdl | 141 - ext/soap/tests/bugs/bug34449.phpt | 20 - ext/soap/tests/bugs/bug34453.phpt | 41 - ext/soap/tests/bugs/bug34453.wsdl | 42 - ext/soap/tests/bugs/bug34643.phpt | 48 - ext/soap/tests/bugs/bug34643.wsdl | 42 - ext/soap/tests/bugs/bug35142.phpt | 181 - ext/soap/tests/bugs/bug35142.wsdl | 543 - ext/soap/tests/bugs/bug35273.phpt | 21 - ext/soap/tests/bugs/bug36226-2.phpt | 151 - ext/soap/tests/bugs/bug36226-2.wsdl | 543 - ext/soap/tests/bugs/bug36226.phpt | 188 - ext/soap/tests/bugs/bug36575.phpt | 52 - ext/soap/tests/bugs/bug36575.wsdl | 87 - ext/soap/tests/bugs/bug36614.phpt | 13 - ext/soap/tests/bugs/bug36614.wsdl | 204 - ext/soap/tests/bugs/bug36629.phpt | 53 - ext/soap/tests/bugs/bug36908.phpt | 46 - ext/soap/tests/bugs/bug36908.wsdl | 51 - ext/soap/tests/bugs/bug37083.phpt | 58 - ext/soap/tests/bugs/bug37083.wsdl | 99 - ext/soap/tests/bugs/bug37278.phpt | 24 - ext/soap/tests/bugs/bug38004.phpt | 40 - ext/soap/tests/bugs/bug38004.wsdl | 51 - ext/soap/tests/bugs/bug38005.phpt | 50 - ext/soap/tests/bugs/bug38055.phpt | 39 - ext/soap/tests/bugs/bug38055.wsdl | 49 - ext/soap/tests/bugs/bug38067.phpt | 43 - ext/soap/tests/bugs/bug38067.wsdl | 48 - ext/soap/tests/bugs/bug38536.phpt | 52 - ext/soap/tests/bugs/bug38536.wsdl | 57 - ext/soap/tests/bugs/bug39121.phpt | 73 - ext/soap/tests/bugs/bug39815.phpt | 47 - ext/soap/tests/bugs/bug39832.phpt | 29 - ext/soap/tests/bugs/bug39832.wsdl | 55 - ext/soap/tests/bugs/bug40609.phpt | 21 - ext/soap/tests/bugs/bug40609.wsdl | 26 - ext/soap/tests/bugs/skipif.inc | 3 - ext/soap/tests/bugs/xml.xsd | 34 - ext/soap/tests/bugs/xml2.xsd | 146 - ext/soap/tests/classmap.wsdl | 60 - ext/soap/tests/classmap001.phpt | 50 - ext/soap/tests/classmap002.phpt | 52 - ext/soap/tests/classmap003.phpt | 54 - ext/soap/tests/classmap003.wsdl | 51 - ext/soap/tests/cookie.phpt | 56 - .../interop/Round2/Base/r2_base_001p.phpt | 19 - .../interop/Round2/Base/r2_base_001s.phpt | 19 - .../interop/Round2/Base/r2_base_001w.phpt | 19 - .../interop/Round2/Base/r2_base_002p.phpt | 19 - .../interop/Round2/Base/r2_base_002s.phpt | 19 - .../interop/Round2/Base/r2_base_002w.phpt | 19 - .../interop/Round2/Base/r2_base_003p.phpt | 19 - .../interop/Round2/Base/r2_base_003s.phpt | 19 - .../interop/Round2/Base/r2_base_003w.phpt | 19 - .../interop/Round2/Base/r2_base_004p.phpt | 21 - .../interop/Round2/Base/r2_base_004s.phpt | 21 - .../interop/Round2/Base/r2_base_004w.phpt | 21 - .../interop/Round2/Base/r2_base_005p.phpt | 19 - .../interop/Round2/Base/r2_base_005s.phpt | 19 - .../interop/Round2/Base/r2_base_005w.phpt | 19 - .../interop/Round2/Base/r2_base_006p.phpt | 19 - .../interop/Round2/Base/r2_base_006s.phpt | 23 - .../interop/Round2/Base/r2_base_006w.phpt | 19 - .../interop/Round2/Base/r2_base_007p.phpt | 19 - .../interop/Round2/Base/r2_base_007s.phpt | 22 - .../interop/Round2/Base/r2_base_007w.phpt | 19 - .../interop/Round2/Base/r2_base_008p.phpt | 19 - .../interop/Round2/Base/r2_base_008s.phpt | 21 - .../interop/Round2/Base/r2_base_008w.phpt | 19 - .../interop/Round2/Base/r2_base_009p.phpt | 19 - .../interop/Round2/Base/r2_base_009s.phpt | 20 - .../interop/Round2/Base/r2_base_009w.phpt | 19 - .../interop/Round2/Base/r2_base_010p.phpt | 19 - .../interop/Round2/Base/r2_base_010s.phpt | 19 - .../interop/Round2/Base/r2_base_010w.phpt | 19 - .../interop/Round2/Base/r2_base_011p.phpt | 19 - .../interop/Round2/Base/r2_base_011s.phpt | 24 - .../interop/Round2/Base/r2_base_011w.phpt | 19 - .../interop/Round2/Base/r2_base_012p.phpt | 19 - .../interop/Round2/Base/r2_base_012s.phpt | 19 - .../interop/Round2/Base/r2_base_012w.phpt | 19 - .../interop/Round2/Base/r2_base_013p.phpt | 19 - .../interop/Round2/Base/r2_base_013s.phpt | 24 - .../interop/Round2/Base/r2_base_013w.phpt | 19 - .../interop/Round2/Base/r2_base_014p.phpt | 27 - .../interop/Round2/Base/r2_base_014s.phpt | 24 - .../interop/Round2/Base/r2_base_014w.phpt | 27 - .../interop/Round2/Base/r2_base_015p.phpt | 28 - .../interop/Round2/Base/r2_base_015s.phpt | 38 - .../interop/Round2/Base/r2_base_015w.phpt | 28 - .../interop/Round2/Base/r2_base_016p.phpt | 19 - .../interop/Round2/Base/r2_base_016s.phpt | 19 - .../interop/Round2/Base/r2_base_016w.phpt | 19 - .../interop/Round2/Base/r2_base_017p.phpt | 19 - .../interop/Round2/Base/r2_base_017s.phpt | 19 - .../interop/Round2/Base/r2_base_017w.phpt | 19 - .../interop/Round2/Base/r2_base_018p.phpt | 19 - .../interop/Round2/Base/r2_base_018s.phpt | 19 - .../interop/Round2/Base/r2_base_018w.phpt | 19 - .../interop/Round2/Base/r2_base_019p.phpt | 19 - .../interop/Round2/Base/r2_base_019s.phpt | 19 - .../interop/Round2/Base/r2_base_019w.phpt | 19 - .../interop/Round2/Base/r2_base_020p.phpt | 19 - .../interop/Round2/Base/r2_base_020s.phpt | 19 - .../interop/Round2/Base/r2_base_020w.phpt | 19 - .../interop/Round2/Base/r2_base_021p.phpt | 19 - .../interop/Round2/Base/r2_base_021s.phpt | 19 - .../interop/Round2/Base/r2_base_021w.phpt | 19 - .../interop/Round2/Base/r2_base_022p.phpt | 19 - .../interop/Round2/Base/r2_base_022s.phpt | 19 - .../interop/Round2/Base/r2_base_022w.phpt | 19 - .../interop/Round2/Base/r2_base_023p.phpt | 19 - .../interop/Round2/Base/r2_base_023s.phpt | 19 - .../interop/Round2/Base/r2_base_023w.phpt | 19 - .../interop/Round2/Base/r2_base_024p.phpt | 19 - .../interop/Round2/Base/r2_base_024s.phpt | 19 - .../interop/Round2/Base/r2_base_024w.phpt | 19 - .../tests/interop/Round2/Base/round2_base.inc | 80 - .../interop/Round2/Base/round2_base.wsdl | 332 - ext/soap/tests/interop/Round2/Base/skipif.inc | 3 - .../interop/Round2/GroupB/r2_groupB_001p.phpt | 19 - .../interop/Round2/GroupB/r2_groupB_001s.phpt | 24 - .../interop/Round2/GroupB/r2_groupB_001w.phpt | 19 - .../interop/Round2/GroupB/r2_groupB_002p.phpt | 19 - .../interop/Round2/GroupB/r2_groupB_002s.phpt | 22 - .../interop/Round2/GroupB/r2_groupB_002w.phpt | 19 - .../interop/Round2/GroupB/r2_groupB_003p.phpt | 22 - .../interop/Round2/GroupB/r2_groupB_003s.phpt | 31 - .../interop/Round2/GroupB/r2_groupB_003w.phpt | 22 - .../interop/Round2/GroupB/r2_groupB_004p.phpt | 29 - .../interop/Round2/GroupB/r2_groupB_004s.phpt | 29 - .../interop/Round2/GroupB/r2_groupB_004w.phpt | 29 - .../interop/Round2/GroupB/r2_groupB_005p.phpt | 24 - .../interop/Round2/GroupB/r2_groupB_005s.phpt | 29 - .../interop/Round2/GroupB/r2_groupB_005w.phpt | 24 - .../interop/Round2/GroupB/round2_groupB.inc | 37 - .../interop/Round2/GroupB/round2_groupB.wsdl | 192 - .../tests/interop/Round2/GroupB/skipif.inc | 3 - .../Round3/GroupD/imported/import1B.wsdl | 20 - .../Round3/GroupD/imported/import2B.wsdl | 22 - .../Round3/GroupD/imported/import2B.xsd | 12 - .../GroupD/r3_groupD_compound1_001w.phpt | 28 - .../GroupD/r3_groupD_compound1_002w.phpt | 19 - .../GroupD/r3_groupD_compound1_003w.phpt | 19 - .../GroupD/r3_groupD_compound2_001w.phpt | 37 - .../Round3/GroupD/r3_groupD_doclit_001w.phpt | 19 - .../Round3/GroupD/r3_groupD_doclit_002w.phpt | 19 - .../Round3/GroupD/r3_groupD_doclit_003w.phpt | 27 - .../Round3/GroupD/r3_groupD_doclit_004w.phpt | 19 - .../GroupD/r3_groupD_doclitparams_001w.phpt | 19 - .../GroupD/r3_groupD_doclitparams_002w.phpt | 19 - .../GroupD/r3_groupD_doclitparams_003w.phpt | 27 - .../GroupD/r3_groupD_doclitparams_004w.phpt | 19 - .../Round3/GroupD/r3_groupD_emptysa_001w.phpt | 19 - .../Round3/GroupD/r3_groupD_import1_001w.phpt | 19 - .../Round3/GroupD/r3_groupD_import2_001w.phpt | 27 - .../Round3/GroupD/r3_groupD_import3_001w.phpt | 27 - .../Round3/GroupD/r3_groupD_import3_002w.phpt | 27 - .../Round3/GroupD/r3_groupD_rpcenc_001w.phpt | 19 - .../Round3/GroupD/r3_groupD_rpcenc_002w.phpt | 19 - .../Round3/GroupD/r3_groupD_rpcenc_003w.phpt | 27 - .../Round3/GroupD/r3_groupD_rpcenc_004w.phpt | 19 - .../Round3/GroupD/round3_groupD_compound1.inc | 17 - .../GroupD/round3_groupD_compound1.wsdl | 85 - .../Round3/GroupD/round3_groupD_compound2.inc | 12 - .../GroupD/round3_groupD_compound2.wsdl | 65 - .../Round3/GroupD/round3_groupD_doclit.inc | 28 - .../Round3/GroupD/round3_groupD_doclit.wsdl | 135 - .../GroupD/round3_groupD_doclitparams.inc | 29 - .../GroupD/round3_groupD_doclitparams.wsdl | 175 - .../Round3/GroupD/round3_groupD_emptysa.inc | 14 - .../Round3/GroupD/round3_groupD_emptysa.wsdl | 37 - .../Round3/GroupD/round3_groupD_import1.inc | 14 - .../Round3/GroupD/round3_groupD_import1.wsdl | 26 - .../Round3/GroupD/round3_groupD_import2.inc | 14 - .../Round3/GroupD/round3_groupD_import2.wsdl | 26 - .../round3_groupD_import2_absolute.wsdl | 26 - .../Round3/GroupD/round3_groupD_import3.inc | 19 - .../Round3/GroupD/round3_groupD_import3.wsdl | 75 - .../Round3/GroupD/round3_groupD_rpcenc.inc | 28 - .../Round3/GroupD/round3_groupD_rpcenc.wsdl | 126 - .../tests/interop/Round3/GroupD/skipif.inc | 3 - .../Round3/GroupE/r3_groupE_list_001w.phpt | 49 - .../Round3/GroupE/r3_groupE_list_002w.phpt | 63 - .../Round3/GroupE/r3_groupE_list_003w.phpt | 77 - .../Round3/GroupE/r3_groupE_list_004w.phpt | 28 - .../Round3/GroupE/r3_groupE_list_005w.phpt | 78 - .../Round3/GroupE/r3_groupE_list_006w.phpt | 78 - .../Round3/GroupE/round3_groupE_list.inc | 17 - .../Round3/GroupE/round3_groupE_list.wsdl | 61 - .../tests/interop/Round3/GroupE/skipif.inc | 3 - .../Round3/GroupF/r3_groupF_ext_001w.phpt | 19 - .../Round3/GroupF/r3_groupF_extreq_001w.phpt | 15 - .../Round3/GroupF/r3_groupF_headers_001w.phpt | 19 - .../Round3/GroupF/r3_groupF_headers_002w.phpt | 20 - .../Round3/GroupF/r3_groupF_headers_003w.phpt | 20 - .../Round3/GroupF/r3_groupF_headers_004w.phpt | 23 - .../Round3/GroupF/round3_groupF_ext.inc | 14 - .../Round3/GroupF/round3_groupF_ext.wsdl | 72 - .../Round3/GroupF/round3_groupF_extreq.wsdl | 73 - .../Round3/GroupF/round3_groupF_headers.inc | 22 - .../Round3/GroupF/round3_groupF_headers.wsdl | 70 - .../tests/interop/Round3/GroupF/skipif.inc | 3 - .../Round4/GroupG/round4_groupG_dimedoc.inc | 33 - .../Round4/GroupG/round4_groupG_dimedoc.wsdl | 216 - .../Round4/GroupG/round4_groupG_dimerpc.inc | 33 - .../Round4/GroupG/round4_groupG_dimerpc.wsdl | 171 - .../Round4/GroupG/round4_groupG_mimedoc.inc | 25 - .../Round4/GroupG/round4_groupG_mimedoc.wsdl | 185 - .../Round4/GroupG/round4_groupG_mimerpc.inc | 25 - .../Round4/GroupG/round4_groupG_mimerpc.wsdl | 151 - .../tests/interop/Round4/GroupG/skipif.inc | 3 - .../GroupH/r4_groupH_complex_doclit_001w.phpt | 27 - .../GroupH/r4_groupH_complex_doclit_002w.phpt | 33 - .../GroupH/r4_groupH_complex_doclit_003w.phpt | 41 - .../GroupH/r4_groupH_complex_doclit_004w.phpt | 36 - .../GroupH/r4_groupH_complex_doclit_005w.phpt | 36 - .../GroupH/r4_groupH_complex_doclit_006w.phpt | 36 - .../GroupH/r4_groupH_complex_doclit_007w.phpt | 52 - .../GroupH/r4_groupH_complex_doclit_008w.phpt | 52 - .../GroupH/r4_groupH_complex_doclit_009w.phpt | 52 - .../GroupH/r4_groupH_complex_doclit_010w.phpt | 52 - .../GroupH/r4_groupH_complex_rpcenc_001w.phpt | 27 - .../GroupH/r4_groupH_complex_rpcenc_002w.phpt | 26 - .../GroupH/r4_groupH_complex_rpcenc_003w.phpt | 34 - .../GroupH/r4_groupH_complex_rpcenc_004w.phpt | 34 - .../GroupH/r4_groupH_complex_rpcenc_005w.phpt | 34 - .../GroupH/r4_groupH_complex_rpcenc_006w.phpt | 34 - .../GroupH/r4_groupH_complex_rpcenc_007w.phpt | 42 - .../GroupH/r4_groupH_complex_rpcenc_008w.phpt | 42 - .../GroupH/r4_groupH_complex_rpcenc_009w.phpt | 42 - .../GroupH/r4_groupH_complex_rpcenc_010w.phpt | 42 - .../GroupH/r4_groupH_simple_doclit_001w.phpt | 19 - .../GroupH/r4_groupH_simple_doclit_002w.phpt | 19 - .../GroupH/r4_groupH_simple_doclit_003w.phpt | 19 - .../GroupH/r4_groupH_simple_doclit_004w.phpt | 21 - .../GroupH/r4_groupH_simple_doclit_005w.phpt | 21 - .../GroupH/r4_groupH_simple_doclit_006w.phpt | 21 - .../GroupH/r4_groupH_simple_doclit_007w.phpt | 21 - .../GroupH/r4_groupH_simple_doclit_008w.phpt | 22 - .../GroupH/r4_groupH_simple_doclit_009w.phpt | 22 - .../GroupH/r4_groupH_simple_doclit_010w.phpt | 22 - .../GroupH/r4_groupH_simple_doclit_011w.phpt | 22 - .../GroupH/r4_groupH_simple_doclit_012w.phpt | 21 - .../GroupH/r4_groupH_simple_doclit_013w.phpt | 21 - .../GroupH/r4_groupH_simple_doclit_014w.phpt | 21 - .../GroupH/r4_groupH_simple_doclit_015w.phpt | 21 - .../GroupH/r4_groupH_simple_doclit_016w.phpt | 21 - .../GroupH/r4_groupH_simple_doclit_017w.phpt | 21 - .../GroupH/r4_groupH_simple_rpcenc_001w.phpt | 19 - .../GroupH/r4_groupH_simple_rpcenc_002w.phpt | 19 - .../GroupH/r4_groupH_simple_rpcenc_003w.phpt | 19 - .../GroupH/r4_groupH_simple_rpcenc_004w.phpt | 19 - .../GroupH/r4_groupH_simple_rpcenc_005w.phpt | 19 - .../GroupH/r4_groupH_simple_rpcenc_006w.phpt | 19 - .../GroupH/r4_groupH_simple_rpcenc_007w.phpt | 19 - .../GroupH/r4_groupH_simple_rpcenc_008w.phpt | 19 - .../GroupH/r4_groupH_simple_rpcenc_009w.phpt | 19 - .../GroupH/r4_groupH_simple_rpcenc_010w.phpt | 19 - .../GroupH/r4_groupH_simple_rpcenc_011w.phpt | 19 - .../GroupH/r4_groupH_simple_rpcenc_012w.phpt | 19 - .../GroupH/r4_groupH_simple_rpcenc_013w.phpt | 19 - .../GroupH/r4_groupH_simple_rpcenc_014w.phpt | 19 - .../GroupH/r4_groupH_simple_rpcenc_015w.phpt | 19 - .../GroupH/r4_groupH_simple_rpcenc_016w.phpt | 19 - .../GroupH/r4_groupH_simple_rpcenc_017w.phpt | 19 - .../GroupH/r4_groupH_soapfault_001w.phpt | 19 - .../GroupH/r4_groupH_soapfault_002w.phpt | 19 - .../GroupH/r4_groupH_soapfault_003w.phpt | 19 - .../GroupH/r4_groupH_soapfault_004w.phpt | 19 - .../GroupH/round4_groupH_complex_doclit.inc | 38 - .../GroupH/round4_groupH_complex_doclit.wsdl | 329 - .../GroupH/round4_groupH_complex_rpcenc.inc | 38 - .../GroupH/round4_groupH_complex_rpcenc.wsdl | 301 - .../GroupH/round4_groupH_simple_doclit.inc | 56 - .../GroupH/round4_groupH_simple_doclit.wsdl | 418 - .../GroupH/round4_groupH_simple_rpcenc.inc | 56 - .../GroupH/round4_groupH_simple_rpcenc.wsdl | 408 - .../Round4/GroupH/round4_groupH_soapfault.inc | 22 - .../GroupH/round4_groupH_soapfault.wsdl | 81 - .../tests/interop/Round4/GroupH/skipif.inc | 3 - .../Round4/GroupI/r4_groupI_xsd_001w.phpt | 19 - .../Round4/GroupI/r4_groupI_xsd_002w.phpt | 19 - .../Round4/GroupI/r4_groupI_xsd_003w.phpt | 19 - .../Round4/GroupI/r4_groupI_xsd_004w.phpt | 19 - .../Round4/GroupI/r4_groupI_xsd_005w.phpt | 19 - .../Round4/GroupI/r4_groupI_xsd_006w.phpt | Bin 1104 -> 0 bytes .../Round4/GroupI/r4_groupI_xsd_007w.phpt | 19 - .../Round4/GroupI/r4_groupI_xsd_008w.phpt | 27 - .../Round4/GroupI/r4_groupI_xsd_009w.phpt | 28 - .../Round4/GroupI/r4_groupI_xsd_010w.phpt | 19 - .../Round4/GroupI/r4_groupI_xsd_011w.phpt | 19 - .../Round4/GroupI/r4_groupI_xsd_012w.phpt | 19 - .../Round4/GroupI/r4_groupI_xsd_013w.phpt | 19 - .../Round4/GroupI/r4_groupI_xsd_014w.phpt | 27 - .../Round4/GroupI/r4_groupI_xsd_015w.phpt | 27 - .../Round4/GroupI/r4_groupI_xsd_016w.phpt | 19 - .../Round4/GroupI/r4_groupI_xsd_017w.phpt | 19 - .../Round4/GroupI/r4_groupI_xsd_018w.phpt | 19 - .../Round4/GroupI/r4_groupI_xsd_019w.phpt | 27 - .../Round4/GroupI/r4_groupI_xsd_020w.phpt | 28 - .../Round4/GroupI/r4_groupI_xsd_021w.phpt | 21 - .../Round4/GroupI/r4_groupI_xsd_022w.phpt | 20 - .../Round4/GroupI/r4_groupI_xsd_023w.phpt | 35 - .../Round4/GroupI/r4_groupI_xsd_024w.phpt | 29 - .../Round4/GroupI/r4_groupI_xsd_025w.phpt | 28 - .../Round4/GroupI/r4_groupI_xsd_026w.phpt | 19 - .../Round4/GroupI/r4_groupI_xsd_027w.phpt | 19 - .../Round4/GroupI/r4_groupI_xsd_028w.phpt | 27 - .../Round4/GroupI/r4_groupI_xsd_029w.phpt | 19 - .../Round4/GroupI/r4_groupI_xsd_030w.phpt | 20 - .../Round4/GroupI/r4_groupI_xsd_031w.phpt | 20 - .../Round4/GroupI/r4_groupI_xsd_032w.phpt | 20 - .../Round4/GroupI/r4_groupI_xsd_033w.phpt | 20 - .../Round4/GroupI/r4_groupI_xsd_034w.phpt | 20 - .../Round4/GroupI/r4_groupI_xsd_035w.phpt | 20 - .../Round4/GroupI/round4_groupI_xsd.inc | 198 - .../Round4/GroupI/round4_groupI_xsd.wsdl | 1113 - .../tests/interop/Round4/GroupI/skipif.inc | 3 - ext/soap/tests/schema/schema001.phpt | 20 - ext/soap/tests/schema/schema002.phpt | 23 - ext/soap/tests/schema/schema003.phpt | 23 - ext/soap/tests/schema/schema004.phpt | 25 - ext/soap/tests/schema/schema005.phpt | 24 - ext/soap/tests/schema/schema006.phpt | 25 - ext/soap/tests/schema/schema007.phpt | 25 - ext/soap/tests/schema/schema008.phpt | 27 - ext/soap/tests/schema/schema009.phpt | 25 - ext/soap/tests/schema/schema010.phpt | 25 - ext/soap/tests/schema/schema011.phpt | 29 - ext/soap/tests/schema/schema012.phpt | 29 - ext/soap/tests/schema/schema013.phpt | 25 - ext/soap/tests/schema/schema014.phpt | 25 - ext/soap/tests/schema/schema015.phpt | 35 - ext/soap/tests/schema/schema016.phpt | 35 - ext/soap/tests/schema/schema017.phpt | 32 - ext/soap/tests/schema/schema018.phpt | 32 - ext/soap/tests/schema/schema019.phpt | 32 - ext/soap/tests/schema/schema020.phpt | 32 - ext/soap/tests/schema/schema021.phpt | 29 - ext/soap/tests/schema/schema022.phpt | 29 - ext/soap/tests/schema/schema023.phpt | 29 - ext/soap/tests/schema/schema024.phpt | 31 - ext/soap/tests/schema/schema025.phpt | 30 - ext/soap/tests/schema/schema026.phpt | 31 - ext/soap/tests/schema/schema027.phpt | 35 - ext/soap/tests/schema/schema028.phpt | 36 - ext/soap/tests/schema/schema029.phpt | 38 - ext/soap/tests/schema/schema030.phpt | 38 - ext/soap/tests/schema/schema031.phpt | 38 - ext/soap/tests/schema/schema032.phpt | 35 - ext/soap/tests/schema/schema033.phpt | 49 - ext/soap/tests/schema/schema034.phpt | 50 - ext/soap/tests/schema/schema035.phpt | 51 - ext/soap/tests/schema/schema036.phpt | 50 - ext/soap/tests/schema/schema037.phpt | 38 - ext/soap/tests/schema/schema038.phpt | 39 - ext/soap/tests/schema/schema039.phpt | 41 - ext/soap/tests/schema/schema040.phpt | 42 - ext/soap/tests/schema/schema041.phpt | 41 - ext/soap/tests/schema/schema042.phpt | 39 - ext/soap/tests/schema/schema043.phpt | 50 - ext/soap/tests/schema/schema044.phpt | 39 - ext/soap/tests/schema/schema045.phpt | 46 - ext/soap/tests/schema/schema046.phpt | 50 - ext/soap/tests/schema/schema047.phpt | 44 - ext/soap/tests/schema/schema048.phpt | 46 - ext/soap/tests/schema/schema049.phpt | 43 - ext/soap/tests/schema/schema050.phpt | 38 - ext/soap/tests/schema/schema051.phpt | 48 - ext/soap/tests/schema/schema052.phpt | 38 - ext/soap/tests/schema/schema053.phpt | 34 - ext/soap/tests/schema/schema054.phpt | 31 - ext/soap/tests/schema/schema055.phpt | 38 - ext/soap/tests/schema/schema056.phpt | 29 - ext/soap/tests/schema/schema057.phpt | 31 - ext/soap/tests/schema/schema058.phpt | 30 - ext/soap/tests/schema/schema059.phpt | 31 - ext/soap/tests/schema/schema060.phpt | 36 - ext/soap/tests/schema/schema061.phpt | 38 - ext/soap/tests/schema/schema062.phpt | 39 - ext/soap/tests/schema/schema063.phpt | 16 - ext/soap/tests/schema/schema064.phpt | 79 - ext/soap/tests/schema/schema065.phpt | 36 - ext/soap/tests/schema/schema066.phpt | 36 - ext/soap/tests/schema/schema067.phpt | 36 - ext/soap/tests/schema/schema068.phpt | 18 - ext/soap/tests/schema/schema069.phpt | 37 - ext/soap/tests/schema/schema070.phpt | 39 - ext/soap/tests/schema/schema071.phpt | 23 - ext/soap/tests/schema/schema072.phpt | 25 - ext/soap/tests/schema/schema073.phpt | 24 - ext/soap/tests/schema/schema074.phpt | 39 - ext/soap/tests/schema/schema075.phpt | 42 - ext/soap/tests/schema/schema076.phpt | 42 - ext/soap/tests/schema/schema077.phpt | 42 - ext/soap/tests/schema/schema078.phpt | 44 - ext/soap/tests/schema/schema079.phpt | 44 - ext/soap/tests/schema/schema080.phpt | 44 - ext/soap/tests/schema/schema081.phpt | 29 - ext/soap/tests/schema/schema082.phpt | 31 - ext/soap/tests/schema/schema083.phpt | 30 - ext/soap/tests/schema/schema084.phpt | 31 - ext/soap/tests/schema/skipif.inc | 3 - ext/soap/tests/schema/test_schema.inc | 77 - ext/soap/tests/server001.phpt | 33 - ext/soap/tests/server002.phpt | 37 - ext/soap/tests/server003.phpt | 32 - ext/soap/tests/server004.phpt | 40 - ext/soap/tests/server005.phpt | 36 - ext/soap/tests/server006.phpt | 42 - ext/soap/tests/server007.phpt | 34 - ext/soap/tests/server008.phpt | 37 - ext/soap/tests/server009.phpt | 66 - ext/soap/tests/server010.phpt | 61 - ext/soap/tests/server011.phpt | 25 - ext/soap/tests/server012.phpt | 20 - ext/soap/tests/server013.phpt | 44 - ext/soap/tests/server014.phpt | 37 - ext/soap/tests/server015.phpt | 33 - ext/soap/tests/server016.phpt | 34 - ext/soap/tests/server017.phpt | 34 - ext/soap/tests/server018.phpt | 34 - ext/soap/tests/server019.phpt | 36 - ext/soap/tests/server020.phpt | 36 - ext/soap/tests/server021.phpt | 40 - ext/soap/tests/server022.phpt | 41 - ext/soap/tests/server023.phpt | 37 - ext/soap/tests/server024.phpt | 49 - ext/soap/tests/server025.phpt | 46 - ext/soap/tests/server025.wsdl | 55 - ext/soap/tests/server026.phpt | 37 - ext/soap/tests/server027.phpt | 38 - ext/soap/tests/server028.phpt | 41 - ext/soap/tests/setheaders.phpt | 38 - ext/soap/tests/skipif.inc | 3 - ext/soap/tests/soap12/T01.phpt | 23 - ext/soap/tests/soap12/T02.phpt | 23 - ext/soap/tests/soap12/T03.phpt | 22 - ext/soap/tests/soap12/T04.phpt | 23 - ext/soap/tests/soap12/T05.phpt | 23 - ext/soap/tests/soap12/T10.phpt | 23 - ext/soap/tests/soap12/T11.phpt | 24 - ext/soap/tests/soap12/T12.phpt | 23 - ext/soap/tests/soap12/T13.phpt | 23 - ext/soap/tests/soap12/T14.phpt | 23 - ext/soap/tests/soap12/T15.phpt | 24 - ext/soap/tests/soap12/T19.phpt | 24 - ext/soap/tests/soap12/T22.phpt | 24 - ext/soap/tests/soap12/T23.phpt | 24 - ext/soap/tests/soap12/T24.phpt | 21 - ext/soap/tests/soap12/T25.phpt | 22 - ext/soap/tests/soap12/T26.phpt | 21 - ext/soap/tests/soap12/T27.phpt | 29 - ext/soap/tests/soap12/T28.phpt | 22 - ext/soap/tests/soap12/T29.phpt | 23 - ext/soap/tests/soap12/T30.phpt | 20 - ext/soap/tests/soap12/T31.phpt | 22 - ext/soap/tests/soap12/T32.phpt | 25 - ext/soap/tests/soap12/T33.phpt | 20 - ext/soap/tests/soap12/T34.phpt | 24 - ext/soap/tests/soap12/T35.phpt | 24 - ext/soap/tests/soap12/T36.phpt | 23 - ext/soap/tests/soap12/T37.phpt | 23 - ext/soap/tests/soap12/T38_1.phpt | 27 - ext/soap/tests/soap12/T38_2.phpt | 27 - ext/soap/tests/soap12/T39.phpt | 22 - ext/soap/tests/soap12/T40.phpt | 26 - ext/soap/tests/soap12/T41.phpt | 30 - ext/soap/tests/soap12/T42.phpt | 39 - ext/soap/tests/soap12/T43.phpt | 30 - ext/soap/tests/soap12/T44.phpt | 27 - ext/soap/tests/soap12/T45.phpt | 35 - ext/soap/tests/soap12/T46.phpt | 36 - ext/soap/tests/soap12/T47.phpt | 29 - ext/soap/tests/soap12/T48.phpt | 29 - ext/soap/tests/soap12/T49.phpt | 29 - ext/soap/tests/soap12/T50.phpt | 29 - ext/soap/tests/soap12/T51.phpt | 27 - ext/soap/tests/soap12/T52.phpt | 25 - ext/soap/tests/soap12/T53.phpt | 25 - ext/soap/tests/soap12/T54.phpt | 25 - ext/soap/tests/soap12/T55.phpt | 25 - ext/soap/tests/soap12/T56.phpt | 34 - ext/soap/tests/soap12/T57.phpt | 32 - ext/soap/tests/soap12/T58.phpt | 28 - ext/soap/tests/soap12/T59.phpt | 28 - ext/soap/tests/soap12/T60.phpt | 29 - ext/soap/tests/soap12/T61.phpt | 28 - ext/soap/tests/soap12/T63.phpt | 25 - ext/soap/tests/soap12/T64.phpt | 24 - ext/soap/tests/soap12/T65.phpt | 26 - ext/soap/tests/soap12/T66.phpt | 23 - ext/soap/tests/soap12/T67.phpt | 23 - ext/soap/tests/soap12/T68.phpt | 32 - ext/soap/tests/soap12/T69.phpt | 19 - ext/soap/tests/soap12/T70.phpt | 23 - ext/soap/tests/soap12/T71.phpt | 24 - ext/soap/tests/soap12/T72.phpt | 22 - ext/soap/tests/soap12/T73.phpt | 26 - ext/soap/tests/soap12/T74.phpt | 28 - ext/soap/tests/soap12/T75.phpt | 28 - ext/soap/tests/soap12/T76_1.phpt | 25 - ext/soap/tests/soap12/T76_2.phpt | 32 - ext/soap/tests/soap12/T77_1.phpt | 25 - ext/soap/tests/soap12/T77_2.phpt | 24 - ext/soap/tests/soap12/T77_3.phpt | 27 - ext/soap/tests/soap12/T78.phpt | 23 - ext/soap/tests/soap12/T80.phpt | 19 - ext/soap/tests/soap12/skipif.inc | 3 - ext/soap/tests/soap12/soap12-test.inc | 130 - ext/soap/tests/soap12/soap12-test.wsdl | 771 - ext/soap/tests/test.wsdl | 55 - ext/soap/tests/transport001.phpt | 36 - ext/soap/tests/typemap001.phpt | 60 - ext/soap/tests/typemap002.phpt | 56 - ext/soap/tests/typemap003.phpt | 62 - ext/soap/tests/typemap004.phpt | 41 - ext/soap/tests/typemap005.phpt | 61 - ext/soap/tests/typemap006.phpt | 57 - ext/soap/tests/typemap007.phpt | 64 - ext/soap/tests/typemap008.phpt | 43 - ext/soap/tests/typemap009.phpt | 56 - ext/soap/tests/typemap010.phpt | 56 - ext/soap/tests/typemap011.phpt | 52 - ext/soap/tests/typemap012.phpt | 48 - ext/soap/tests/typemap013.phpt | 56 - ext/sockets/CREDITS | 2 - ext/sockets/config.m4 | 35 - ext/sockets/config.w32 | 15 - ext/sockets/package.xml | 67 - ext/sockets/php_sockets.h | 118 - ext/sockets/php_sockets_win.c | 109 - ext/sockets/php_sockets_win.h | 55 - ext/sockets/sockets.c | 1873 - ext/sockets/sockets.dsp | 117 - ext/sockets/sockets.php | 10 - ext/sockets/tests/ipv4loop.phpt | 49 - ext/sockets/tests/ipv6loop.phpt | 52 - ext/sockets/unix_socket_constants.h | 426 - ext/sockets/win32_socket_constants.h | 74 - ext/spl/CREDITS | 2 - ext/spl/README | 7 - ext/spl/TODO | 4 - ext/spl/config.m4 | 35 - ext/spl/config.w32 | 12 - ext/spl/doxygen.cfg | 217 - ext/spl/examples/autoload.inc | 50 - ext/spl/examples/cachingrecursiveiterator.inc | 28 - ext/spl/examples/callbackfilteriterator.inc | 122 - ext/spl/examples/class_tree.php | 96 - ext/spl/examples/dba_array.php | 52 - ext/spl/examples/dba_dump.php | 42 - ext/spl/examples/dbaarray.inc | 95 - ext/spl/examples/dbareader.inc | 96 - ext/spl/examples/directoryfilterdots.inc | 45 - ext/spl/examples/directorygraphiterator.inc | 34 - ext/spl/examples/directorytree.inc | 27 - ext/spl/examples/directorytree.php | 37 - ext/spl/examples/directorytree_size.php | 35 - ext/spl/examples/directorytreeiterator.inc | 54 - ext/spl/examples/dualiterator.inc | 213 - ext/spl/examples/findfile.inc | 65 - ext/spl/examples/findfile.php | 33 - ext/spl/examples/findregex.php | 36 - ext/spl/examples/ini_groups.php | 41 - ext/spl/examples/inigroups.inc | 54 - ext/spl/examples/keyfilter.inc | 64 - ext/spl/examples/nocvsdir.php | 55 - ext/spl/examples/phar_from_dir.php | 50 - .../examples/recursivecomparedualiterator.inc | 69 - ext/spl/examples/recursivedualiterator.inc | 72 - ext/spl/examples/recursivetreeiterator.inc | 113 - ext/spl/examples/regexfindfile.inc | 40 - ext/spl/examples/searchiterator.inc | 58 - ext/spl/examples/tests/dualiterator_001.phpt | 48 - ext/spl/examples/tests/examples.inc | 23 - ext/spl/examples/tree.php | 40 - ext/spl/examples/xml_tree.php | 94 - ext/spl/examples/xml_xpath_tree.php | 134 - ext/spl/internal/appenditerator.inc | 122 - ext/spl/internal/cachingiterator.inc | 157 - ext/spl/internal/emptyiterator.inc | 62 - ext/spl/internal/filteriterator.inc | 127 - ext/spl/internal/infiniteiterator.inc | 48 - ext/spl/internal/iteratoriterator.inc | 121 - ext/spl/internal/limititerator.inc | 134 - ext/spl/internal/norewinditerator.inc | 28 - ext/spl/internal/outeriterator.inc | 25 - ext/spl/internal/parentiterator.inc | 32 - ext/spl/internal/recursivearrayiterator.inc | 59 - ext/spl/internal/recursivecachingiterator.inc | 99 - ext/spl/internal/recursivefilteriterator.inc | 62 - ext/spl/internal/recursiveiterator.inc | 30 - .../internal/recursiveiteratoriterator.inc | 271 - ext/spl/internal/recursiveregexiterator.inc | 61 - ext/spl/internal/regexiterator.inc | 163 - ext/spl/internal/seekableiterator.inc | 48 - ext/spl/internal/splfileobject.inc | 377 - ext/spl/internal/splobjectstorage.inc | 118 - ext/spl/package.xml | 77 - ext/spl/php_spl.c | 787 - ext/spl/php_spl.h | 87 - ext/spl/spl.php | 1138 - ext/spl/spl_array.c | 1576 - ext/spl/spl_array.h | 46 - ext/spl/spl_directory.c | 2563 - ext/spl/spl_directory.h | 136 - ext/spl/spl_engine.c | 53 - ext/spl/spl_engine.h | 71 - ext/spl/spl_exceptions.c | 81 - ext/spl/spl_exceptions.h | 53 - ext/spl/spl_functions.c | 170 - ext/spl/spl_functions.h | 101 - ext/spl/spl_iterators.c | 2984 -- ext/spl/spl_iterators.h | 166 - ext/spl/spl_observer.c | 494 - ext/spl/spl_observer.h | 42 - ext/spl/spl_sxe.c | 209 - ext/spl/spl_sxe.h | 40 - ext/spl/tests/.htaccess | 3 - ext/spl/tests/array_001.phpt | 191 - ext/spl/tests/array_002.phpt | 63 - ext/spl/tests/array_003.phpt | 65 - ext/spl/tests/array_004.phpt | 143 - ext/spl/tests/array_005.phpt | 93 - ext/spl/tests/array_006.phpt | 32 - ext/spl/tests/array_007.phpt | 73 - ext/spl/tests/array_008.phpt | 62 - ext/spl/tests/array_009.phpt | 26 - ext/spl/tests/array_009a.phpt | 39 - ext/spl/tests/array_010.phpt | 225 - ext/spl/tests/array_011.phpt | 57 - ext/spl/tests/array_012.phpt | 65 - ext/spl/tests/array_013.phpt | 81 - ext/spl/tests/array_014.phpt | 61 - ext/spl/tests/array_015.phpt | 99 - ext/spl/tests/array_016.phpt | 34 - ext/spl/tests/array_017.phpt | 1504 - ext/spl/tests/array_018.phpt | 62 - ext/spl/tests/array_019.phpt | 32 - ext/spl/tests/array_020.phpt | 66 - ext/spl/tests/array_021.phpt | 33 - ext/spl/tests/array_022.phpt | 116 - ext/spl/tests/bug28822.phpt | 18 - ext/spl/tests/bug31185.phpt | 63 - ext/spl/tests/bug31346.phpt | 21 - ext/spl/tests/bug31348.phpt | 17 - ext/spl/tests/bug31926.phpt | 21 - ext/spl/tests/bug32134.phpt | 58 - ext/spl/tests/bug32394.phpt | 19 - ext/spl/tests/bug33136.phpt | 118 - ext/spl/tests/bug34548.phpt | 40 - ext/spl/tests/bug36258.phpt | 25 - ext/spl/tests/bug36287.phpt | 44 - ext/spl/tests/bug36825.phpt | 33 - ext/spl/tests/bug36941.phpt | 48 - ext/spl/tests/bug37457.phpt | 91 - ext/spl/tests/bug40036.phpt | 34 - ext/spl/tests/bug40872.phpt | 30 - ext/spl/tests/dit_001.phpt | 21 - ext/spl/tests/fileobject_001.phpt | 136 - ext/spl/tests/fileobject_001a.txt | 6 - ext/spl/tests/fileobject_001b.txt | 6 - ext/spl/tests/fileobject_002.phpt | 218 - ext/spl/tests/fileobject_003.phpt | 205 - ext/spl/tests/iterator_001.phpt | 173 - ext/spl/tests/iterator_002.phpt | 57 - ext/spl/tests/iterator_003.phpt | 97 - ext/spl/tests/iterator_004.phpt | 144 - ext/spl/tests/iterator_005.phpt | 54 - ext/spl/tests/iterator_006.phpt | 24 - ext/spl/tests/iterator_007.phpt | 168 - ext/spl/tests/iterator_008.phpt | 91 - ext/spl/tests/iterator_009.phpt | 47 - ext/spl/tests/iterator_010.phpt | 20 - ext/spl/tests/iterator_011.phpt | 53 - ext/spl/tests/iterator_012.phpt | 35 - ext/spl/tests/iterator_013.phpt | 68 - ext/spl/tests/iterator_014.phpt | 140 - ext/spl/tests/iterator_015.phpt | 64 - ext/spl/tests/iterator_016.phpt | 78 - ext/spl/tests/iterator_017.phpt | 20 - ext/spl/tests/iterator_018.phpt | 53 - ext/spl/tests/iterator_019.phpt | 35 - ext/spl/tests/iterator_020.phpt | 68 - ext/spl/tests/iterator_021.phpt | 182 - ext/spl/tests/iterator_022.phpt | 188 - ext/spl/tests/iterator_023.phpt | 195 - ext/spl/tests/iterator_024.phpt | 69 - ext/spl/tests/iterator_025.phpt | 94 - ext/spl/tests/iterator_026.phpt | 36 - ext/spl/tests/iterator_027.phpt | 113 - ext/spl/tests/iterator_028.phpt | 172 - ext/spl/tests/iterator_029.phpt | 40 - ext/spl/tests/iterator_030.phpt | 46 - ext/spl/tests/iterator_031.phpt | 118 - ext/spl/tests/iterator_032.phpt | 52 - ext/spl/tests/iterator_033.phpt | 46 - ext/spl/tests/iterator_034.phpt | 190 - ext/spl/tests/iterator_035.phpt | 17 - ext/spl/tests/iterator_036.phpt | 24 - ext/spl/tests/iterator_037.phpt | 173 - ext/spl/tests/iterator_038.phpt | 27 - ext/spl/tests/iterator_039.phpt | 123 - ext/spl/tests/iterator_040.phpt | 49 - ext/spl/tests/iterator_041.phpt | 119 - ext/spl/tests/iterator_041a.phpt | 109 - ext/spl/tests/iterator_041b.phpt | 107 - ext/spl/tests/iterator_042.phpt | 125 - ext/spl/tests/iterator_043.phpt | 20 - ext/spl/tests/iterator_044.phpt | 262 - ext/spl/tests/iterator_045.phpt | 244 - ext/spl/tests/iterator_046.phpt | 60 - ext/spl/tests/iterator_047.phpt | 119 - ext/spl/tests/iterator_048.phpt | 44 - ext/spl/tests/iterator_049.phpt | 40 - ext/spl/tests/iterator_049b.phpt | Bin 1106 -> 0 bytes ext/spl/tests/iterator_050.phpt | 96 - ext/spl/tests/iterator_051.phpt | 165 - ext/spl/tests/iterator_052.phpt | 586 - ext/spl/tests/iterator_053.phpt | 586 - ext/spl/tests/iterator_054.phpt | 145 - ext/spl/tests/iterator_055.phpt | 99 - ext/spl/tests/observer_001.phpt | 118 - ext/spl/tests/observer_002.phpt | 201 - ext/spl/tests/observer_003.phpt | 74 - ext/spl/tests/observer_004.phpt | 148 - ext/spl/tests/observer_005.phpt | 310 - ext/spl/tests/spl_001.phpt | 36 - ext/spl/tests/spl_002.phpt | 24 - ext/spl/tests/spl_003.phpt | 117 - ext/spl/tests/spl_004.phpt | 86 - ext/spl/tests/spl_005.phpt | 23 - ext/spl/tests/spl_006.phpt | 41 - ext/spl/tests/spl_autoload_001.phpt | 169 - ext/spl/tests/spl_autoload_002.phpt | 98 - ext/spl/tests/spl_autoload_003.phpt | 46 - ext/spl/tests/spl_autoload_004.phpt | 58 - ext/spl/tests/spl_autoload_005.phpt | 57 - ext/spl/tests/spl_autoload_006.phpt | 52 - ext/spl/tests/spl_autoload_007.phpt | 221 - ext/spl/tests/spl_autoload_008.phpt | 193 - ext/spl/tests/spl_autoload_009.phpt | 28 - ext/spl/tests/sxe_001.phpt | 96 - ext/spl/tests/sxe_002.phpt | 100 - ext/spl/tests/sxe_003.phpt | 96 - ext/spl/tests/sxe_004.phpt | 206 - ext/spl/tests/sxe_005.phpt | 46 - ext/spl/tests/testclass | 5 - ext/spl/tests/testclass.class.inc | 9 - ext/spl/tests/testclass.inc | 5 - ext/spl/tests/testclass.php.inc | 5 - ext/sqlite/CREDITS | 4 +- ext/sqlite/Makefile.frag | 31 +- ext/sqlite/TODO | 7 +- ext/sqlite/config.m4 | 151 +- ext/sqlite/config.w32 | 39 - ext/sqlite/libsqlite/VERSION | 2 +- ext/sqlite/libsqlite/src/attach.c | 39 +- ext/sqlite/libsqlite/src/auth.c | 30 +- ext/sqlite/libsqlite/src/btree.c | 86 +- ext/sqlite/libsqlite/src/btree.h | 4 +- ext/sqlite/libsqlite/src/btree_rb.c | 33 +- ext/sqlite/libsqlite/src/build.c | 327 +- ext/sqlite/libsqlite/src/config_static.w32.h | 1 - ext/sqlite/libsqlite/src/copy.c | 16 +- ext/sqlite/libsqlite/src/date.c | 249 +- ext/sqlite/libsqlite/src/delete.c | 15 +- ext/sqlite/libsqlite/src/encode.c | 72 +- ext/sqlite/libsqlite/src/expr.c | 688 +- ext/sqlite/libsqlite/src/func.c | 239 +- ext/sqlite/libsqlite/src/insert.c | 64 +- ext/sqlite/libsqlite/src/libsqlite.dsp | 353 - ext/sqlite/libsqlite/src/main.c | 529 +- ext/sqlite/libsqlite/src/opcodes.c | 8 +- ext/sqlite/libsqlite/src/opcodes.h | 186 +- ext/sqlite/libsqlite/src/os.c | 78 +- ext/sqlite/libsqlite/src/os.h | 7 +- ext/sqlite/libsqlite/src/pager.c | 218 +- ext/sqlite/libsqlite/src/pager.h | 32 +- ext/sqlite/libsqlite/src/parse.c | 4568 +- ext/sqlite/libsqlite/src/parse.h | 250 +- ext/sqlite/libsqlite/src/parse.y | 78 +- ext/sqlite/libsqlite/src/pragma.c | 245 +- ext/sqlite/libsqlite/src/printf.c | 443 +- ext/sqlite/libsqlite/src/random.c | 44 +- ext/sqlite/libsqlite/src/select.c | 328 +- ext/sqlite/libsqlite/src/sqlite.h.in | 141 +- ext/sqlite/libsqlite/src/sqlite.w32.h | 3 +- ext/sqlite/libsqlite/src/sqliteInt.h | 105 +- ext/sqlite/libsqlite/src/table.c | 2 +- ext/sqlite/libsqlite/src/tokenize.c | 2 +- ext/sqlite/libsqlite/src/trigger.c | 14 +- ext/sqlite/libsqlite/src/update.c | 29 +- ext/sqlite/libsqlite/src/util.c | 137 +- ext/sqlite/libsqlite/src/vacuum.c | 76 +- ext/sqlite/libsqlite/src/vdbe.c | 1970 +- ext/sqlite/libsqlite/src/vdbe.h | 20 +- ext/sqlite/libsqlite/src/vdbeInt.h | 89 +- ext/sqlite/libsqlite/src/vdbeaux.c | 251 +- ext/sqlite/libsqlite/src/where.c | 85 +- ext/sqlite/package.xml | 291 +- ext/sqlite/pdo_sqlite2.c | 643 - ext/sqlite/php_sqlite.def | 6 - ext/sqlite/php_sqlite.h | 25 +- ext/sqlite/sess_sqlite.c | 196 - ext/sqlite/sqlite.c | 2100 +- ext/sqlite/sqlite.dsp | 12 +- ext/sqlite/sqlite.php | 3 - ext/sqlite/tests/blankdb.inc | 10 +- ext/sqlite/tests/blankdb_oo.inc | 3 - ext/sqlite/tests/bug26911.phpt | 12 - ext/sqlite/tests/bug28112.phpt | 16 - ext/sqlite/tests/bug35248.phpt | 15 - ext/sqlite/tests/bug38759.phpt | 18 - ext/sqlite/tests/pdo/common.phpt | 12 - ext/sqlite/tests/sqlite_001.phpt | 1 + ext/sqlite/tests/sqlite_002.phpt | 16 - ext/sqlite/tests/sqlite_003.phpt | 32 - ext/sqlite/tests/sqlite_004.phpt | 5 +- ext/sqlite/tests/sqlite_005.phpt | 9 - ext/sqlite/tests/sqlite_006.phpt | 17 - ext/sqlite/tests/sqlite_007.phpt | 32 - ext/sqlite/tests/sqlite_008.phpt | 17 - ext/sqlite/tests/sqlite_009.phpt | 17 - ext/sqlite/tests/sqlite_010.phpt | 47 +- ext/sqlite/tests/sqlite_011.phpt | 16 - ext/sqlite/tests/sqlite_012.phpt | 13 - ext/sqlite/tests/sqlite_013.phpt | 39 +- ext/sqlite/tests/sqlite_014.phpt | 81 +- ext/sqlite/tests/sqlite_015.phpt | 21 - ext/sqlite/tests/sqlite_016.phpt | 15 +- ext/sqlite/tests/sqlite_018.phpt | 14 - ext/sqlite/tests/sqlite_019.phpt | 69 - ext/sqlite/tests/sqlite_022.phpt | 162 - ext/sqlite/tests/sqlite_023.phpt | 155 - ext/sqlite/tests/sqlite_024.phpt | 107 - ext/sqlite/tests/sqlite_025.phpt | 51 - ext/sqlite/tests/sqlite_026.phpt | 38 - ext/sqlite/tests/sqlite_027.phpt | 15 - ext/sqlite/tests/sqlite_oo_001.phpt | 17 - ext/sqlite/tests/sqlite_oo_002.phpt | 64 - ext/sqlite/tests/sqlite_oo_003.phpt | 82 - ext/sqlite/tests/sqlite_oo_008.phpt | 57 - ext/sqlite/tests/sqlite_oo_009.phpt | 57 - ext/sqlite/tests/sqlite_oo_010.phpt | 58 - ext/sqlite/tests/sqlite_oo_011.phpt | 48 - ext/sqlite/tests/sqlite_oo_012.phpt | 45 - ext/sqlite/tests/sqlite_oo_013.phpt | 107 - ext/sqlite/tests/sqlite_oo_014.phpt | 195 - ext/sqlite/tests/sqlite_oo_015.phpt | 66 - ext/sqlite/tests/sqlite_oo_016.phpt | 50 - ext/sqlite/tests/sqlite_oo_020.phpt | 82 - ext/sqlite/tests/sqlite_oo_021.phpt | 71 - ext/sqlite/tests/sqlite_oo_022.phpt | 159 - ext/sqlite/tests/sqlite_oo_024.phpt | 105 - ext/sqlite/tests/sqlite_oo_025.phpt | 157 - ext/sqlite/tests/sqlite_oo_026.phpt | 72 - ext/sqlite/tests/sqlite_oo_027.phpt | 42 - ext/sqlite/tests/sqlite_oo_028.phpt | 36 - ext/sqlite/tests/sqlite_oo_029.phpt | 53 - ext/sqlite/tests/sqlite_oo_030.phpt | 51 - ext/sqlite/tests/sqlite_spl_001.phpt | 125 - ext/sqlite/tests/sqlite_spl_002.phpt | 29 - ext/sqlite/tests/sqlite_spl_003.phpt | 28 - ext/standard/CREDITS | 3 - ext/standard/Makefile.frag | 10 - ext/standard/array.c | 4524 -- ext/standard/assert.c | 346 - ext/standard/base64.c | 256 - ext/standard/base64.h | 38 - ext/standard/basic_functions.c | 6437 --- ext/standard/basic_functions.h | 251 - ext/standard/browscap.c | 361 - ext/standard/config.m4 | 517 - ext/standard/config.w32 | 20 - ext/standard/crc32.c | 53 - ext/standard/crc32.h | 109 - ext/standard/credits.c | 144 - ext/standard/credits.h | 42 - ext/standard/credits_ext.h | 91 - ext/standard/credits_sapi.h | 30 - ext/standard/crypt.c | 178 - ext/standard/css.c | 58 - ext/standard/css.h | 26 - ext/standard/cyr_convert.c | 297 - ext/standard/cyr_convert.h | 29 - ext/standard/datetime.c | 161 - ext/standard/datetime.h | 31 - ext/standard/dir.c | 564 - ext/standard/dl.c | 263 - ext/standard/dl.h | 33 - ext/standard/dns.c | 904 - ext/standard/dns.h | 58 - ext/standard/exec.c | 504 - ext/standard/exec.h | 41 - ext/standard/file.c | 2894 -- ext/standard/file.h | 146 - ext/standard/filestat.c | 1161 - ext/standard/filters.c | 2029 - ext/standard/flock_compat.c | 234 - ext/standard/flock_compat.h | 55 - ext/standard/formatted_print.c | 1448 - ext/standard/fsock.c | 141 - ext/standard/fsock.h | 42 - ext/standard/ftok.c | 70 - ext/standard/ftp_fopen_wrapper.c | 1167 - ext/standard/head.c | 279 - ext/standard/head.h | 34 - ext/standard/html.c | 1465 - ext/standard/html.h | 43 - ext/standard/http.c | 272 - ext/standard/http_fopen_wrapper.c | 791 - ext/standard/image.c | 1403 - ext/standard/incomplete_class.c | 177 - ext/standard/info.c | 1116 - ext/standard/info.h | 91 - ext/standard/iptc.c | 376 - ext/standard/lcg.c | 132 - ext/standard/levenshtein.c | 164 - ext/standard/link.c | 229 - ext/standard/mail.c | 288 - ext/standard/math.c | 1077 - ext/standard/md5.c | 458 - ext/standard/md5.h | 65 - ext/standard/metaphone.c | 476 - ext/standard/microtime.c | 167 - ext/standard/microtime.h | 32 - ext/standard/pack.c | 919 - ext/standard/pack.h | 28 - ext/standard/pageinfo.c | 187 - ext/standard/pageinfo.h | 35 - ext/standard/php_array.h | 126 - ext/standard/php_assert.h | 32 - ext/standard/php_browscap.h | 29 - ext/standard/php_crypt.h | 39 - ext/standard/php_dir.h | 40 - ext/standard/php_ext_syslog.h | 40 - ext/standard/php_filestat.h | 113 - ext/standard/php_fopen_wrapper.c | 326 - ext/standard/php_fopen_wrappers.h | 33 - ext/standard/php_ftok.h | 28 - ext/standard/php_http.h | 46 - ext/standard/php_image.h | 63 - ext/standard/php_incomplete_class.h | 65 - ext/standard/php_iptc.h | 27 - ext/standard/php_lcg.h | 44 - ext/standard/php_link.h | 33 - ext/standard/php_mail.h | 34 - ext/standard/php_math.h | 160 - ext/standard/php_metaphone.h | 26 - ext/standard/php_rand.h | 60 - ext/standard/php_smart_str.h | 206 - ext/standard/php_smart_str_public.h | 32 - ext/standard/php_standard.h | 73 - ext/standard/php_string.h | 180 - ext/standard/php_type.h | 44 - ext/standard/php_uuencode.h | 37 - ext/standard/php_var.h | 71 - ext/standard/php_versioning.h | 30 - ext/standard/proc_open.c | 1015 - ext/standard/proc_open.h | 52 - ext/standard/quot_print.c | 218 - ext/standard/quot_print.h | 28 - ext/standard/rand.c | 385 - ext/standard/reg.c | 668 - ext/standard/reg.h | 50 - ext/standard/scanf.c | 2415 - ext/standard/scanf.h | 49 - ext/standard/sha1.c | 441 - ext/standard/sha1.h | 41 - ext/standard/soundex.c | 115 - ext/standard/streamsfuncs.c | 1686 - ext/standard/streamsfuncs.h | 69 - ext/standard/string.c | 7850 --- ext/standard/strnatcmp.c | 311 - ext/standard/syslog.c | 284 - ext/standard/tests/array/001.phpt | 269 - ext/standard/tests/array/002.phpt | 1257 - ext/standard/tests/array/003.phpt | 179 - ext/standard/tests/array/004.phpt | 96 - ext/standard/tests/array/005.phpt | 68 - ext/standard/tests/array/006.phpt | 73 - ext/standard/tests/array/007.phpt | 984 - ext/standard/tests/array/008.phpt | 537 - .../tests/array/array_change_key_case.phpt | 1486 - ext/standard/tests/array/array_chunk.phpt | 10599 ----- ext/standard/tests/array/array_chunk2.phpt | 278 - ext/standard/tests/array/array_combine.phpt | 122 - .../tests/array/array_count_values.phpt | 164 - .../tests/array/array_count_values2.phpt | 67 - ext/standard/tests/array/array_diff_1.phpt | 15 - .../tests/array/array_diff_assoc.phpt | 49 - ext/standard/tests/array/array_diff_key.phpt | 250 - ext/standard/tests/array/array_diff_key2.phpt | 73 - ext/standard/tests/array/array_fill.phpt | 710 - ext/standard/tests/array/array_fill_keys.phpt | 74 - ext/standard/tests/array/array_filter.phpt | 152 - ext/standard/tests/array/array_flip.phpt | 57 - .../tests/array/array_intersect_1.phpt | 664 - .../tests/array/array_intersect_key.phpt | 209 - .../tests/array/array_key_exists.phpt | 40 - ext/standard/tests/array/array_pad.phpt | 180 - ext/standard/tests/array/array_rand.phpt | 51 - ext/standard/tests/array/array_search.phpt | 23 - ext/standard/tests/array/array_search1.phpt | 50 - ext/standard/tests/array/array_slice.phpt | 1461 - ext/standard/tests/array/array_sum.phpt | 29 - ext/standard/tests/array/array_unshift.phpt | 64 - .../tests/array/array_user_key_compare.phpt | 19 - ext/standard/tests/array/array_values.phpt | 78 - ext/standard/tests/array/array_walk.phpt | 68 - .../tests/array/array_walk_objects.phpt | Bin 1100 -> 0 bytes .../tests/array/array_walk_rec_objects.phpt | Bin 1170 -> 0 bytes .../tests/array/array_walk_recursive.phpt | 26 - .../tests/array/array_walk_recursive1.phpt | 80 - ext/standard/tests/array/bug12776.phpt | 25 - ext/standard/tests/array/bug14580.phpt | 11 - ext/standard/tests/array/bug20381.phpt | 134 - ext/standard/tests/array/bug20865.phpt | 11 - ext/standard/tests/array/bug21182.phpt | 15 - ext/standard/tests/array/bug21918.phpt | 78 - ext/standard/tests/array/bug21998.phpt | 32 - ext/standard/tests/array/bug22088.phpt | 50 - ext/standard/tests/array/bug22463.phpt | 29 - ext/standard/tests/array/bug23581.phpt | 44 - ext/standard/tests/array/bug23788.phpt | 24 - ext/standard/tests/array/bug24198.phpt | 42 - ext/standard/tests/array/bug24220.phpt | 174 - ext/standard/tests/array/bug24766.phpt | 45 - ext/standard/tests/array/bug24897.phpt | 21 - ext/standard/tests/array/bug24980.phpt | 63 - ext/standard/tests/array/bug25359.phpt | 45 - ext/standard/tests/array/bug25708.phpt | 378 - ext/standard/tests/array/bug25758.phpt | 14 - ext/standard/tests/array/bug26458.phpt | Bin 651 -> 0 bytes ext/standard/tests/array/bug28739.phpt | 97 - ext/standard/tests/array/bug28974.phpt | 89 - ext/standard/tests/array/bug29253.phpt | 17 - ext/standard/tests/array/bug29493.phpt | 156 - ext/standard/tests/array/bug30074.phpt | 15 - ext/standard/tests/array/bug30266.phpt | 37 - ext/standard/tests/array/bug30833.phpt | 55 - ext/standard/tests/array/bug31158.phpt | 17 - ext/standard/tests/array/bug31213.phpt | 82 - ext/standard/tests/array/bug32021.phpt | 14 - ext/standard/tests/array/bug33382.phpt | 27 - ext/standard/tests/array/bug33940.phpt | 65 - ext/standard/tests/array/bug33989.phpt | 10 - ext/standard/tests/array/bug34066.phpt | 804 - ext/standard/tests/array/bug34066_1.phpt | 731 - ext/standard/tests/array/bug34227.phpt | 100 - ext/standard/tests/array/bug34982.phpt | 40 - ext/standard/tests/array/bug35014.phpt | 46 - ext/standard/tests/array/bug35014_64bit.phpt | 46 - ext/standard/tests/array/bug35022.phpt | 27 - ext/standard/tests/array/bug35821.phpt | 34 - ext/standard/tests/array/bug36975.phpt | 98 - ext/standard/tests/array/bug38464.phpt | 33 - ext/standard/tests/array/bug39576.phpt | 70 - ext/standard/tests/array/bug40191.phpt | 33 - ext/standard/tests/array/compact.phpt | 34 - ext/standard/tests/array/count_recursive.phpt | 52 - ext/standard/tests/array/data.inc | 13 - ext/standard/tests/array/locale_sort.phpt | 92 - ext/standard/tests/array/max.phpt | 59 - ext/standard/tests/array/min.phpt | 59 - ext/standard/tests/array/range.phpt | 2662 -- ext/standard/tests/array/var_export.phpt | 11 - ext/standard/tests/array/var_export2.phpt | Bin 204 -> 0 bytes ext/standard/tests/array/var_export3.phpt | 24 - ext/standard/tests/assert/assert.phpt | 39 - ext/standard/tests/assert/assert02.phpt | 58 - ext/standard/tests/assert/assert03.phpt | 33 - ext/standard/tests/assert/assert04.phpt | 41 - ext/standard/tests/file/001-win32.phpt | 125 - ext/standard/tests/file/001.phpt | 145 - ext/standard/tests/file/002.phpt | 52 - ext/standard/tests/file/003.phpt | 41 - ext/standard/tests/file/004.phpt | 61 - ext/standard/tests/file/bug12556.phpt | 86 - ext/standard/tests/file/bug20424.phpt | 10 - ext/standard/tests/file/bug22382.phpt | 25 - ext/standard/tests/file/bug22414.phpt | 32 - ext/standard/tests/file/bug24313.phpt | 10 - ext/standard/tests/file/bug24482.phpt | 37 - ext/standard/tests/file/bug26003.phpt | Bin 225 -> 0 bytes ext/standard/tests/file/bug26615.phpt | 16 - ext/standard/tests/file/bug26938.phpt | 24 - ext/standard/tests/file/bug27508.phpt | 73 - ext/standard/tests/file/bug27619.phpt | 18 - ext/standard/tests/file/bug30362.phpt | 26 - ext/standard/tests/file/bug30362.txt | 1 - ext/standard/tests/file/bug32160.phpt | 14 - ext/standard/tests/file/bug32160.txt | 1 - ext/standard/tests/file/bug35740.phpt | 14 - ext/standard/tests/file/bug35781.phpt | 24 - ext/standard/tests/file/bug37158.phpt | 43 - ext/standard/tests/file/bug37864.phpt | 12 - ext/standard/tests/file/bug38086.phpt | 46 - ext/standard/tests/file/bug38086.txt | 5 - ext/standard/tests/file/bug38450.phpt | 125 - ext/standard/tests/file/bug38450_1.phpt | 125 - ext/standard/tests/file/bug38450_2.phpt | 114 - ext/standard/tests/file/bug38450_3.phpt | 105 - ext/standard/tests/file/bug39367.phpt | 27 - ext/standard/tests/file/bug39538.phpt | 41 - ext/standard/tests/file/bug39551.phpt | 28 - ext/standard/tests/file/bug39673.phpt | 40 - ext/standard/tests/file/bug40374.phpt | 20 - ext/standard/tests/file/disk.phpt | 46 - ext/standard/tests/file/fgetcsv.phpt | 158 - ext/standard/tests/file/fgetss.phpt | 83 - ext/standard/tests/file/fgetss1.phpt | 69 - .../tests/file/file_put_contents.phpt | 40 - ext/standard/tests/file/filestat.phpt | 63 - ext/standard/tests/file/flock.phpt | 90 - ext/standard/tests/file/fopencookie.phpt | 86 - ext/standard/tests/file/fputcsv.phpt | 105 - ext/standard/tests/file/fscanf.phpt | 139 - ext/standard/tests/file/fstat.phpt | 133 - ext/standard/tests/file/ftruncate.phpt | Bin 1077 -> 0 bytes ext/standard/tests/file/fwrite.phpt | 54 - ext/standard/tests/file/get_current_user.phpt | 20 - ext/standard/tests/file/mkdir-001.phpt | 36 - ext/standard/tests/file/mkdir-002.phpt | 49 - ext/standard/tests/file/mkdir-003.phpt | 30 - ext/standard/tests/file/mkdir-004.phpt | 24 - ext/standard/tests/file/mkdir-005.phpt | 25 - ext/standard/tests/file/mkdir-006.phpt | 20 - ext/standard/tests/file/proc_open01.phpt | 69 - .../tests/file/statcache-corruption.phpt | 13 - ext/standard/tests/file/statpage.phpt | 20 - ext/standard/tests/file/stream_001.phpt | 24 - ext/standard/tests/file/stream_002.phpt | 84 - .../tests/file/stream_copy_to_stream.phpt | 129 - ext/standard/tests/file/stream_get_line.phpt | 18 - .../tests/file/stream_rfc2397_001.phpt | 20 - .../tests/file/stream_rfc2397_002.phpt | 352 - .../tests/file/stream_rfc2397_003.gif | Bin 273 -> 0 bytes .../tests/file/stream_rfc2397_003.phpt | 36 - .../tests/file/stream_rfc2397_004.phpt | 30 - .../tests/file/stream_rfc2397_005.phpt | 36 - .../tests/file/stream_rfc2397_006.phpt | 28 - .../tests/file/stream_rfc2397_007.phpt | 141 - ext/standard/tests/file/symlink.phpt | 110 - ext/standard/tests/file/test.csv | 17 - ext/standard/tests/file/test2.csv | 1 - ext/standard/tests/file/test3.csv | Bin 8 -> 0 bytes ext/standard/tests/file/touch.phpt | 49 - ext/standard/tests/file/userdirstream.phpt | 64 - ext/standard/tests/file/userfilters.phpt | 37 - ext/standard/tests/file/userstreams.phpt | 325 - ext/standard/tests/file/userwrapper.phpt | 83 - ext/standard/tests/filters/001.phpt | 48 - ext/standard/tests/filters/basic.phpt | 44 - ext/standard/tests/filters/bug22538.phpt | 49 - ext/standard/tests/filters/bug35916.phpt | 42 - .../tests/filters/php_user_filter_01.phpt | 17 - .../tests/filters/php_user_filter_02.phpt | 12 - .../tests/filters/php_user_filter_03.phpt | 12 - ext/standard/tests/general_functions/001.phpt | 67 - ext/standard/tests/general_functions/002.phpt | 11 - ext/standard/tests/general_functions/003.phpt | 58 - ext/standard/tests/general_functions/004.data | 4 - ext/standard/tests/general_functions/004.phpt | 16 - ext/standard/tests/general_functions/005.phpt | 24 - ext/standard/tests/general_functions/006.phpt | 11 - ext/standard/tests/general_functions/007.phpt | 24 - ext/standard/tests/general_functions/008.phpt | 71 - ext/standard/tests/general_functions/009.phpt | 24 - ext/standard/tests/general_functions/010.phpt | 25 - .../tests/general_functions/bug25038.phpt | 32 - .../tests/general_functions/bug27678.phpt | 14 - .../tests/general_functions/bug29038.phpt | 74 - .../tests/general_functions/bug31190.phpt | 26 - .../tests/general_functions/bug32647.phpt | 57 - .../tests/general_functions/bug34794.phpt | 34 - .../tests/general_functions/bug35229.phpt | 30 - .../tests/general_functions/bug36011.phpt | 46 - .../tests/general_functions/bug39322.phpt | 64 - .../tests/general_functions/bug40398.phpt | 100 - .../tests/general_functions/bug40752.phpt | 50 - .../call_user_func_return.phpt | 54 - .../general_functions/error_get_last.phpt | 71 - .../tests/general_functions/getopt.phpt | 43 - .../tests/general_functions/getrusage.phpt | 31 - .../tests/general_functions/head.phpt | 53 - .../general_functions/highlight_heredoc.phpt | 19 - .../general_functions/import_request.phpt | 121 - .../tests/general_functions/include_path.phpt | 107 - .../tests/general_functions/ini_get_all.phpt | 85 - .../tests/general_functions/is_resource.phpt | 10 - .../general_functions/parse_ini_file.phpt | 255 - .../tests/general_functions/phpcredits.phpt | 54 - .../tests/general_functions/phpcredits2.phpt | 32 - .../tests/general_functions/phpinfo.phpt | 75 - .../tests/general_functions/phpinfo2.phpt | 33 - .../tests/general_functions/proc_open.phpt | 28 - .../tests/general_functions/proc_open02.phpt | 112 - .../tests/general_functions/rand.phpt | 63 - .../tests/general_functions/sunfuncts.phpt | 44 - .../general_functions/sys_getloadavg.phpt | 32 - .../tests/general_functions/type.phpt | 646 - ext/standard/tests/image/246x247.png | Bin 360 -> 0 bytes ext/standard/tests/image/384x385.png | Bin 267 -> 0 bytes ext/standard/tests/image/bug13213.jpg | Bin 596 -> 0 bytes ext/standard/tests/image/bug13213.phpt | 40 - ext/standard/tests/image/getimagesize.phpt | 368 - .../tests/image/getimagesize_246x247.phpt | 60 - .../tests/image/getimagesize_384x385.phpt | 60 - .../tests/image/getimagesize_swc.phpt | 38 - .../tests/image/image_type_to_extension.phpt | 103 - .../tests/image/image_type_to_mime_type.phpt | 76 - ext/standard/tests/image/skipif_imagetype.inc | 15 - ext/standard/tests/image/test13pix.swf | Bin 589 -> 0 bytes ext/standard/tests/image/test1pix.bmp | Bin 58 -> 0 bytes ext/standard/tests/image/test1pix.jp2 | Bin 243 -> 0 bytes ext/standard/tests/image/test1pix.jpc | Bin 127 -> 0 bytes ext/standard/tests/image/test1pix.jpg | Bin 523 -> 0 bytes ext/standard/tests/image/test2pix.gif | Bin 35 -> 0 bytes ext/standard/tests/image/test4pix.gif | Bin 42 -> 0 bytes ext/standard/tests/image/test4pix.iff | Bin 114 -> 0 bytes ext/standard/tests/image/test4pix.png | Bin 148 -> 0 bytes ext/standard/tests/image/test4pix.psd | Bin 1247 -> 0 bytes ext/standard/tests/image/test4pix.swf | Bin 609 -> 0 bytes ext/standard/tests/image/test4pix.tif | Bin 312 -> 0 bytes ext/standard/tests/math/abs.phpt | 24 - ext/standard/tests/math/bug21523.phpt | 15 - ext/standard/tests/math/bug24142.phpt | 20 - ext/standard/tests/math/bug25665.phpt | 16 - ext/standard/tests/math/bug25694.phpt | 35 - ext/standard/tests/math/bug27646.phpt | 64 - ext/standard/tests/math/bug28228.phpt | 14 - ext/standard/tests/math/bug30069.phpt | 12 - ext/standard/tests/math/bug30695.phpt | 54 - ext/standard/tests/math/constants.phpt | 46 - ext/standard/tests/math/floorceil.phpt | 44 - ext/standard/tests/math/hexdec.phpt | 22 - ext/standard/tests/math/log.phpt | 42 - ext/standard/tests/math/pow.phpt | 149 - ext/standard/tests/math/round.phpt | 37 - ext/standard/tests/network/bug20134.phpt | 24 - ext/standard/tests/network/inet.phpt | 111 - ext/standard/tests/network/inet_ipv6.phpt | 64 - ext/standard/tests/network/ip.phpt | 99 - ext/standard/tests/network/shutdown.phpt | 65 - ext/standard/tests/network/tcp4loop.phpt | 34 - ext/standard/tests/network/tcp6loop.phpt | 42 - ext/standard/tests/network/udgloop.phpt | 37 - ext/standard/tests/network/udp4loop.phpt | 27 - ext/standard/tests/network/udp6loop.phpt | 41 - ext/standard/tests/network/unixloop.phpt | 44 - ext/standard/tests/reg/001.phpt | 7 - ext/standard/tests/reg/002.phpt | 7 - ext/standard/tests/reg/003.phpt | 8 - ext/standard/tests/reg/004.phpt | 14 - ext/standard/tests/reg/005.phpt | 18 - ext/standard/tests/reg/006.phpt | 8 - ext/standard/tests/reg/007.phpt | 10 - ext/standard/tests/reg/008.phpt | 8 - ext/standard/tests/reg/009.phpt | 17 - ext/standard/tests/reg/010.phpt | 7 - ext/standard/tests/reg/011.phpt | 7 - ext/standard/tests/reg/012.phpt | 7 - ext/standard/tests/reg/013.phpt | 7 - ext/standard/tests/reg/014.phpt | 7 - ext/standard/tests/reg/015.phpt | 6 - ext/standard/tests/reg/016.phpt | 6 - ext/standard/tests/serialize/001.phpt | 165 - ext/standard/tests/serialize/002.phpt | 73 - ext/standard/tests/serialize/003.phpt | 25 - ext/standard/tests/serialize/004.phpt | 33 - ext/standard/tests/serialize/005.phpt | 238 - ext/standard/tests/serialize/006.phpt | 43 - .../tests/serialize/autoload_implements.p5c | 10 - .../tests/serialize/autoload_interface.p5c | 7 - ext/standard/tests/serialize/bug14293.phpt | 47 - ext/standard/tests/serialize/bug21957.phpt | 68 - ext/standard/tests/serialize/bug23298.phpt | 13 - ext/standard/tests/serialize/bug24063.phpt | 23 - ext/standard/tests/serialize/bug25378.phpt | 59 - ext/standard/tests/serialize/bug26762.phpt | 29 - ext/standard/tests/serialize/bug27469.phpt | 42 - ext/standard/tests/serialize/bug28325.phpt | 59 - ext/standard/tests/serialize/bug30234.phpt | 40 - ext/standard/tests/serialize/bug31402.phpt | 139 - ext/standard/tests/serialize/bug31442.phpt | 8 - ext/standard/tests/serialize/bug37947.phpt | 21 - ext/standard/tests/strings/004.phpt | 84 - .../tests/strings/add-and-stripcslashes.phpt | 26 - .../tests/strings/add-and-stripslashes.phpt | 19 - ext/standard/tests/strings/basename.phpt | Bin 1457 -> 0 bytes ext/standard/tests/strings/bin2hex.phpt | 14 - ext/standard/tests/strings/bug20108.phpt | 14 - ext/standard/tests/strings/bug20169.phpt | 14 - ext/standard/tests/strings/bug20261.phpt | 26 - ext/standard/tests/strings/bug20927.phpt | 17 - ext/standard/tests/strings/bug20934.phpt | 20 - ext/standard/tests/strings/bug21338.phpt | 13 - ext/standard/tests/strings/bug21453.phpt | 24 - ext/standard/tests/strings/bug21730.phpt | 52 - ext/standard/tests/strings/bug21744.phpt | 15 - ext/standard/tests/strings/bug22008.phpt | 24 - ext/standard/tests/strings/bug22187.phpt | 13 - ext/standard/tests/strings/bug22207.phpt | 15 - ext/standard/tests/strings/bug22224.phpt | 41 - ext/standard/tests/strings/bug22227.phpt | 9 - ext/standard/tests/strings/bug22904.phpt | 30 - ext/standard/tests/strings/bug23650.phpt | 31 - ext/standard/tests/strings/bug23894.phpt | 20 - ext/standard/tests/strings/bug24098.phpt | 30 - ext/standard/tests/strings/bug24208.phpt | 16 - ext/standard/tests/strings/bug24281.phpt | 18 - ext/standard/tests/strings/bug24312.phpt | 27 - ext/standard/tests/strings/bug25671.phpt | 27 - ext/standard/tests/strings/bug25707.phpt | 16 - ext/standard/tests/strings/bug26817.phpt | 29 - ext/standard/tests/strings/bug26819.phpt | 9 - ext/standard/tests/strings/bug26878.phpt | 9 - ext/standard/tests/strings/bug26973.phpt | 34 - ext/standard/tests/strings/bug27276.phpt | 15 - ext/standard/tests/strings/bug27278.phpt | 25 - ext/standard/tests/strings/bug27295.phpt | 14 - ext/standard/tests/strings/bug27457.phpt | 21 - ext/standard/tests/strings/bug27675.phpt | 8 - ext/standard/tests/strings/bug28386.phpt | 13 - ext/standard/tests/strings/bug28633.phpt | 10 - ext/standard/tests/strings/bug29075.phpt | 14 - ext/standard/tests/strings/bug29119.phpt | 12 - ext/standard/tests/strings/bug29538.phpt | 10 - ext/standard/tests/strings/bug33076.phpt | 17 - ext/standard/tests/strings/bug33605.phpt | 11 - ext/standard/tests/strings/bug34214.phpt | 10 - ext/standard/tests/strings/bug35817.phpt | 29 - ext/standard/tests/strings/bug36148.phpt | 29 - ext/standard/tests/strings/bug36306.phpt | 15 - ext/standard/tests/strings/bug36392.phpt | 16 - ext/standard/tests/strings/bug36944.phpt | 26 - ext/standard/tests/strings/bug37244.phpt | 18 - ext/standard/tests/strings/bug37262.phpt | 9 - ext/standard/tests/strings/bug38322.phpt | 13 - ext/standard/tests/strings/bug38770.phpt | 25 - ext/standard/tests/strings/bug39032.phpt | 18 - ext/standard/tests/strings/bug39350.phpt | 13 - ext/standard/tests/strings/bug39621.phpt | Bin 984 -> 0 bytes ext/standard/tests/strings/bug39873.phpt | 20 - ext/standard/tests/strings/bug40637.phpt | 16 - ext/standard/tests/strings/chr_ord.phpt | 10 - ext/standard/tests/strings/chunk_split.phpt | 20 - .../tests/strings/convert_cyr_string.phpt | 77 - ext/standard/tests/strings/count_chars.phpt | 18 - ext/standard/tests/strings/crc32.phpt | 14 - ext/standard/tests/strings/crypt.phpt | 43 - ext/standard/tests/strings/explode.phpt | 279 - ext/standard/tests/strings/get_meta_tags.phpt | 133 - .../tests/strings/highlight_file.phpt | 68 - ext/standard/tests/strings/htmlentities.phpt | 27 - .../tests/strings/htmlentities01.phpt | 13 - .../tests/strings/htmlentities02.phpt | 21 - .../tests/strings/htmlentities03.phpt | 20 - .../tests/strings/htmlentities04.phpt | 20 - .../tests/strings/htmlentities05.phpt | 25 - .../tests/strings/htmlentities06.phpt | 22 - .../tests/strings/htmlentities07.phpt | 23 - .../tests/strings/htmlentities08.phpt | 23 - .../tests/strings/htmlentities09.phpt | 23 - .../tests/strings/htmlentities10.phpt | 16 - .../tests/strings/htmlentities11.phpt | 14 - .../tests/strings/htmlentities12.phpt | 14 - .../tests/strings/htmlentities13.phpt | 14 - .../tests/strings/htmlentities14.phpt | 14 - .../tests/strings/htmlentities15.phpt | 24 - .../tests/strings/htmlentities16.phpt | 21 - .../tests/strings/htmlentities17.phpt | 50 - .../tests/strings/http_build_query.phpt | 19 - ext/standard/tests/strings/implode.phpt | 23 - ext/standard/tests/strings/implode1.phpt | 99 - ext/standard/tests/strings/levenshtein.phpt | 86 - ext/standard/tests/strings/md5.phpt | 20 - ext/standard/tests/strings/md5raw.phpt | 20 - ext/standard/tests/strings/metaphone.phpt | 55 - ext/standard/tests/strings/nl2br.phpt | 103 - ext/standard/tests/strings/pack.phpt | 385 - ext/standard/tests/strings/pathinfo.phpt | 188 - .../tests/strings/php_strip_whitespace.phpt | 52 - ext/standard/tests/strings/sha1.phpt | 72 - ext/standard/tests/strings/sha1raw.phpt | 14 - ext/standard/tests/strings/soundex.phpt | 77 - ext/standard/tests/strings/sprintf_f.phpt | 57 - ext/standard/tests/strings/sprintf_f_2.phpt | 148 - ext/standard/tests/strings/sprintf_f_3.phpt | 31 - ext/standard/tests/strings/str_ireplace.phpt | 153 - ext/standard/tests/strings/str_repeat.phpt | 27 - ext/standard/tests/strings/str_replace.phpt | 162 - ext/standard/tests/strings/str_shuffle.phpt | 15 - .../tests/strings/str_word_count.phpt | 452 - .../tests/strings/str_word_count1.phpt | 26 - ext/standard/tests/strings/strcasecmp.phpt | Bin 22284 -> 0 bytes ext/standard/tests/strings/strcmp.phpt | Bin 20052 -> 0 bytes ext/standard/tests/strings/strcspn.phpt | 24 - ext/standard/tests/strings/strings001.phpt | 15 - ext/standard/tests/strings/strip_tags.phpt | 27 - ext/standard/tests/strings/stripos.phpt | 55 - ext/standard/tests/strings/stristr.phpt | 70 - ext/standard/tests/strings/strlen.phpt | Bin 7026 -> 0 bytes ext/standard/tests/strings/strpos.phpt | 30 - ext/standard/tests/strings/strrchr.phpt | 30 - ext/standard/tests/strings/strrev.phpt | 23 - ext/standard/tests/strings/strripos.phpt | 33 - ext/standard/tests/strings/strrpos.phpt | 32 - ext/standard/tests/strings/strspn.phpt | 24 - ext/standard/tests/strings/strstr.phpt | 49 - ext/standard/tests/strings/strtotitle.phpt | 39 - ext/standard/tests/strings/strtoupper.phpt | 26 - ext/standard/tests/strings/strtr.phpt | 12 - ext/standard/tests/strings/strtr2.phpt | 46 - ext/standard/tests/strings/strtr3.phpt | 14 - ext/standard/tests/strings/strval.phpt | 33 - .../tests/strings/substr_compare.phpt | 59 - ext/standard/tests/strings/substr_count.phpt | 29 - .../tests/strings/substr_replace.phpt | 1171 - ext/standard/tests/strings/trim.phpt | 27 - ext/standard/tests/strings/ucfirst.phpt | 12 - ext/standard/tests/strings/url_t.phpt | 1339 - ext/standard/tests/strings/uuencode.phpt | 61 - ext/standard/tests/strings/wordwrap.phpt | 35 - ext/standard/tests/time/001.phpt | 34 - ext/standard/tests/time/bug38524.phpt | 51 - ext/standard/tests/time/idate.phpt | 32 - .../tests/versioning/version_compare.phpt | 600 - ext/standard/type.c | 488 - ext/standard/uniqid.c | 114 - ext/standard/uniqid.h | 28 - ext/standard/url.c | 821 - ext/standard/url.h | 65 - ext/standard/url_scanner.c | 384 - ext/standard/url_scanner.h | 54 - ext/standard/url_scanner_ex.c | 1121 - ext/standard/url_scanner_ex.h | 67 - ext/standard/url_scanner_ex.re | 536 - ext/standard/user_filters.c | 642 - ext/standard/uuencode.c | 258 - ext/standard/var.c | 1231 - ext/standard/var_unserializer.c | 1252 - ext/standard/var_unserializer.re | 774 - ext/standard/versioning.c | 255 - ext/sybase/CREDITS | 2 - ext/sybase/config.m4 | 31 - ext/sybase/php_sybase_db.c | 1454 - ext/sybase/php_sybase_db.h | 89 - ext/sybase_ct/CREDITS | 2 - ext/sybase_ct/config.m4 | 56 - ext/sybase_ct/config.w32 | 18 - ext/sybase_ct/php_sybase_ct.c | 2257 - ext/sybase_ct/php_sybase_ct.h | 131 - ext/sybase_ct/sybase_ct.dsp | 114 - ext/sybase_ct/tests/bug22403.phpt | 88 - ext/sybase_ct/tests/bug26407.phpt | 91 - ext/sybase_ct/tests/bug27843.phpt | 54 - ext/sybase_ct/tests/bug28354.phpt | 46 - ext/sybase_ct/tests/bug29064.phpt | 143 - ext/sybase_ct/tests/bug30312.phpt | 27 - ext/sybase_ct/tests/bug6339.phpt | 24 - ext/sybase_ct/tests/index.php | 216 - ext/sybase_ct/tests/skipif.inc | 8 - ext/sybase_ct/tests/test.inc | 85 - ext/sybase_ct/tests/test_appname.phpt | 65 - ext/sybase_ct/tests/test_connect.phpt | 19 - .../test_connectionbased_msghandler.phpt | 27 - ext/sybase_ct/tests/test_fetch_object.phpt | 74 - ext/sybase_ct/tests/test_fields.phpt | 76 - ext/sybase_ct/tests/test_long.phpt | 80 - ext/sybase_ct/tests/test_msghandler.phpt | 43 - .../tests/test_msghandler_handled.phpt | 70 - ext/sybase_ct/tests/test_query_nostore.phpt | 98 - ext/sybase_ct/tests/test_types.phpt | 87 - .../tests/test_unbuffered_query.phpt | 57 - ext/sysvmsg/CREDITS | 2 - ext/sysvmsg/config.m4 | 14 - ext/sysvmsg/package.xml | 40 - ext/sysvmsg/php_sysvmsg.h | 73 - ext/sysvmsg/sysvmsg.c | 454 - ext/sysvmsg/tests/001.phpt | 22 - ext/sysvmsg/tests/002.phpt | 23 - ext/sysvsem/CREDITS | 2 - ext/sysvsem/config.m4 | 29 - ext/sysvsem/package.xml | 39 - ext/sysvsem/php_sysvsem.h | 59 - ext/sysvsem/sysvsem.c | 390 - ext/sysvsem/tests/sysv.phpt | 112 - ext/sysvshm/CREDITS | 2 - ext/sysvshm/config.m4 | 11 - ext/sysvshm/package.xml | 40 - ext/sysvshm/php_sysvshm.h | 80 - ext/sysvshm/sysvshm.c | 394 - ext/sysvshm/tests/001.phpt | 42 - ext/sysvshm/tests/002.phpt | 68 - ext/sysvshm/tests/003.phpt | 46 - ext/sysvshm/tests/004.phpt | 41 - ext/sysvshm/tests/005.phpt | 101 - ext/sysvshm/tests/006.phpt | 71 - ext/sysvshm/tests/007.phpt | 61 - ext/tidy/CREDITS | 2 - ext/tidy/README | 7 - ext/tidy/TODO | 3 - ext/tidy/config.m4 | 44 - ext/tidy/config.w32 | 22 - ext/tidy/examples/cleanhtml.php | 40 - ext/tidy/examples/cleanhtml5.php | 39 - ext/tidy/examples/dumpit5.php | 92 - ext/tidy/examples/urlgrab5.php | 39 - ext/tidy/package.xml | 65 - ext/tidy/php_tidy.def | 292 - ext/tidy/php_tidy.h | 56 - ext/tidy/tests/001.phpt | 10 - ext/tidy/tests/002.phpt | 18 - ext/tidy/tests/003.phpt | 21 - ext/tidy/tests/004.phpt | 16 - ext/tidy/tests/005.html | 1 - ext/tidy/tests/005.phpt | 18 - ext/tidy/tests/006.phpt | 16 - ext/tidy/tests/007.html | 1 - ext/tidy/tests/007.phpt | 40 - ext/tidy/tests/008.phpt | 15 - ext/tidy/tests/009.phpt | 19 - ext/tidy/tests/010.phpt | 621 - ext/tidy/tests/011.phpt | 31 - ext/tidy/tests/012.phpt | 914 - ext/tidy/tests/013.html | 1 - ext/tidy/tests/013.phpt | 13 - ext/tidy/tests/014.phpt | 14 - ext/tidy/tests/015.html | 1 - ext/tidy/tests/015.phpt | 13 - ext/tidy/tests/016.html | 1 - ext/tidy/tests/016.phpt | 24 - ext/tidy/tests/016.tcfg | 1 - ext/tidy/tests/017.phpt | 17 - ext/tidy/tests/017a.phpt | 12 - ext/tidy/tests/018.phpt | 16 - ext/tidy/tests/019.phpt | 55 - ext/tidy/tests/020.phpt | 37 - ext/tidy/tests/021.phpt | 23 - ext/tidy/tests/022.phpt | 55 - ext/tidy/tests/023.phpt | 67 - ext/tidy/tests/024.phpt | 53 - ext/tidy/tests/025.phpt | 65 - ext/tidy/tests/026.phpt | 24 - ext/tidy/tests/027.phpt | 61 - ext/tidy/tests/028.phpt | 19 - ext/tidy/tidy.c | 1999 - ext/tidy/tidy.dsp | 108 - ext/tokenizer/CREDITS | 2 - ext/tokenizer/Makefile.frag | 2 - ext/tokenizer/config.m4 | 12 - ext/tokenizer/config.w32 | 11 - ext/tokenizer/package.xml | 46 - ext/tokenizer/php_tokenizer.h | 59 - ext/tokenizer/tests/001.phpt | 392 - ext/tokenizer/tests/002.phpt | 786 - ext/tokenizer/tests/003.phpt | 69 - ext/tokenizer/tests/bug26463.phpt | 255 - ext/tokenizer/tokenizer.c | 491 - ext/tokenizer/tokenizer.dsp | 108 - ext/tokenizer/tokenizer.php | 35 - ext/unicode/CREDITS | 2 - ext/unicode/EXPERIMENTAL | 5 - ext/unicode/collator.c | 371 - ext/unicode/config.m4 | 7 - ext/unicode/config.w32 | 5 - ext/unicode/constants.c | 613 - ext/unicode/locale.c | 96 - ext/unicode/package.xml | 34 - ext/unicode/php_property.h | 99 - ext/unicode/php_transform.h | 34 - ext/unicode/php_unicode.h | 96 - ext/unicode/property.c | 977 - ext/unicode/tests/iterator_001.phpt | 27 - ext/unicode/tests/iterator_002.phpt | 35 - ext/unicode/transform.c | 95 - ext/unicode/unicode.c | 454 - ext/unicode/unicode.dsp | 112 - ext/unicode/unicode_iterators.c | 1454 - ext/wddx/CREDITS | 2 - ext/wddx/config.m4 | 60 - ext/wddx/config.w32 | 13 - ext/wddx/package.xml | 43 - ext/wddx/php_wddx.h | 44 - ext/wddx/php_wddx_api.h | 66 - ext/wddx/tests/001.phpt | 109 - ext/wddx/tests/bug27287.phpt | 20 - ext/wddx/tests/bug34306.phpt | 14 - ext/wddx/tests/bug35410.phpt | 76 - ext/wddx/tests/bug35410_64bit.phpt | 76 - ext/wddx/tests/bug37569.phpt | 778 - ext/wddx/tests/bug37587.phpt | 43 - ext/wddx/tests/wddx.xml | 60 - ext/wddx/wddx.c | 1358 - ext/xml/CREDITS | 2 - ext/xml/compat.c | 721 - ext/xml/config.m4 | 59 - ext/xml/config.w32 | 15 - ext/xml/expat_compat.h | 156 - ext/xml/package.xml | 74 - ext/xml/php_xml.h | 163 - ext/xml/tests/bug25666.phpt | 39 - ext/xml/tests/bug26528.phpt | 48 - ext/xml/tests/bug26614.phpt | 93 - ext/xml/tests/bug26614_libxml.phpt | 93 - ext/xml/tests/bug27908.phpt | 23 - ext/xml/tests/bug30266.phpt | 52 - ext/xml/tests/bug32001.phpt | 416 - ext/xml/tests/bug32001b.phpt | 184 - ext/xml/tests/bug35447.phpt | 70 - ext/xml/tests/inc.ent | 1 - ext/xml/tests/skipif.inc | 10 - ext/xml/tests/xml001.phpt | 97 - ext/xml/tests/xml002.phpt | 98 - ext/xml/tests/xml003.phpt | 96 - ext/xml/tests/xml004.phpt | 62 - ext/xml/tests/xml006.phpt | 15 - ext/xml/tests/xml007.phpt | 56 - ext/xml/tests/xml009.phpt | 39 - ext/xml/tests/xml010.phpt | 39 - ext/xml/tests/xml011.phpt | 71 - ext/xml/tests/xmltest.xml | 20 - ext/xml/xml.c | 1728 - ext/xml/xml.mak | 172 - ext/xmlreader/CREDITS | 2 - ext/xmlreader/README | 5 - ext/xmlreader/TODO | 8 - ext/xmlreader/config.m4 | 27 - ext/xmlreader/config.w32 | 14 - ext/xmlreader/examples/dtdexample.dtd | 8 - ext/xmlreader/examples/dtdexample.xml | 15 - ext/xmlreader/examples/relaxNG.rng | 11 - ext/xmlreader/examples/relaxNG.xml | 1 - ext/xmlreader/examples/relaxNG2.rng | 23 - ext/xmlreader/examples/relaxNG3.rng | 8 - ext/xmlreader/examples/xmlreader.xml | 10 - ext/xmlreader/examples/xmlreader_file.php | 20 - ext/xmlreader/examples/xmlreader_relaxNG.php | 25 - ext/xmlreader/examples/xmlreader_string.php | 31 - .../examples/xmlreader_validatedtd.php | 18 - ext/xmlreader/package.xml | 75 - ext/xmlreader/php_xmlreader.c | 1335 - ext/xmlreader/php_xmlreader.h | 72 - ext/xmlreader/tests/001.phpt | 29 - ext/xmlreader/tests/002.phpt | 41 - ext/xmlreader/tests/003.phpt | 84 - ext/xmlreader/tests/004.phpt | 44 - ext/xmlreader/tests/005.phpt | 37 - ext/xmlreader/tests/006.phpt | 36 - ext/xmlreader/tests/007.phpt | 60 - ext/xmlreader/tests/008.phpt | 71 - ext/xmlreader/tests/009.phpt | 28 - ext/xmlreader/tests/010.phpt | 27 - ext/xmlreader/tests/011.phpt | 34 - ext/xmlreader/tests/012.dtd | 2 - ext/xmlreader/tests/012.phpt | 80 - ext/xmlreader/tests/012.xml | 3 - ext/xmlreader/tests/013.phpt | 59 - ext/xmlreader/tests/013.xsd | 10 - ext/xmlreader/tests/bug36743.phpt | 27 - ext/xmlreader/tests/dtdexample.dtd | 8 - ext/xmlreader/tests/relaxNG.rng | 11 - ext/xmlreader/tests/relaxNG2.rng | 23 - ext/xmlreader/tests/relaxNG3.rng | 8 - ext/xmlreader/xmlreader.dsp | 114 - ext/xmlrpc/CREDITS | 2 - ext/xmlrpc/EXPERIMENTAL | 5 - ext/xmlrpc/config.m4 | 118 - ext/xmlrpc/config.w32 | 14 - ext/xmlrpc/libxmlrpc/README | 17 - ext/xmlrpc/libxmlrpc/acinclude.m4 | 32 - ext/xmlrpc/libxmlrpc/base64.c | 192 - ext/xmlrpc/libxmlrpc/base64.h | 38 - ext/xmlrpc/libxmlrpc/encodings.c | 118 - ext/xmlrpc/libxmlrpc/encodings.h | 46 - ext/xmlrpc/libxmlrpc/queue.c | 982 - ext/xmlrpc/libxmlrpc/queue.h | 89 - ext/xmlrpc/libxmlrpc/simplestring.c | 248 - ext/xmlrpc/libxmlrpc/simplestring.h | 76 - ext/xmlrpc/libxmlrpc/system_methods.c | 375 - ext/xmlrpc/libxmlrpc/system_methods_private.h | 91 - ext/xmlrpc/libxmlrpc/xml_element.c | 762 - ext/xmlrpc/libxmlrpc/xml_element.h | 202 - ext/xmlrpc/libxmlrpc/xml_to_dandarpc.c | 319 - ext/xmlrpc/libxmlrpc/xml_to_dandarpc.h | 44 - ext/xmlrpc/libxmlrpc/xml_to_soap.c | 670 - ext/xmlrpc/libxmlrpc/xml_to_soap.h | 44 - ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c | 414 - ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.h | 45 - ext/xmlrpc/libxmlrpc/xmlrpc.c | 2969 -- ext/xmlrpc/libxmlrpc/xmlrpc.h | 454 - ext/xmlrpc/libxmlrpc/xmlrpc.m4 | 12 - ext/xmlrpc/libxmlrpc/xmlrpc_introspection.c | 604 - ext/xmlrpc/libxmlrpc/xmlrpc_introspection.h | 101 - .../libxmlrpc/xmlrpc_introspection_private.h | 106 - ext/xmlrpc/libxmlrpc/xmlrpc_private.h | 178 - ext/xmlrpc/libxmlrpc/xmlrpc_win32.h | 11 - ext/xmlrpc/php_xmlrpc.h | 102 - ext/xmlrpc/tests/001.phpt | 66 - ext/xmlrpc/tests/002.phpt | 56 - ext/xmlrpc/tests/bug37057.phpt | 64 - ext/xmlrpc/tests/bug38431.phpt | 25 - ext/xmlrpc/tests/bug40576.phpt | 77 - ext/xmlrpc/tests/bug40576_64bit.phpt | 77 - ext/xmlrpc/xmlrpc-epi-php.c | 1492 - ext/xmlrpc/xmlrpc.dsp | 211 - ext/xmlwriter/CREDITS | 2 - ext/xmlwriter/TODO | 4 - ext/xmlwriter/config.m4 | 26 - ext/xmlwriter/config.w32 | 18 - ext/xmlwriter/examples/xmlwriter_file.php | 44 - ext/xmlwriter/examples/xmlwriter_mem.php | 39 - ext/xmlwriter/examples/xmlwriter_mem_ns.php | 30 - ext/xmlwriter/examples/xmlwriter_oo.php | 9 - ext/xmlwriter/package.xml | 131 - ext/xmlwriter/package2.xml | 131 - ext/xmlwriter/php_xmlwriter.c | 1678 - ext/xmlwriter/php_xmlwriter.h | 61 - ext/xmlwriter/tests/001.phpt | 25 - ext/xmlwriter/tests/002.phpt | 22 - ext/xmlwriter/tests/003.phpt | 35 - ext/xmlwriter/tests/004.phpt | 36 - ext/xmlwriter/tests/005.phpt | 33 - ext/xmlwriter/tests/006.phpt | 26 - ext/xmlwriter/tests/007.phpt | 38 - ext/xmlwriter/tests/008.phpt | 40 - ext/xmlwriter/tests/009.phpt | 45 - ext/xmlwriter/tests/010.phpt | 41 - ext/xmlwriter/tests/OO_001.phpt | 26 - ext/xmlwriter/tests/OO_002.phpt | 22 - ext/xmlwriter/tests/OO_003.phpt | 37 - ext/xmlwriter/tests/OO_004.phpt | 37 - ext/xmlwriter/tests/OO_005.phpt | 33 - ext/xmlwriter/tests/OO_006.phpt | 27 - ext/xmlwriter/tests/OO_007.phpt | 39 - ext/xmlwriter/tests/OO_008.phpt | 35 - ext/xmlwriter/tests/OO_009.phpt | 45 - ext/xmlwriter/tests/bug39504.phpt | 32 - ext/xmlwriter/xmlwriter.dsp | 113 - ext/xsl/CREDITS | 2 - ext/xsl/config.m4 | 67 - ext/xsl/config.w32 | 47 - ext/xsl/php_xsl.c | 317 - ext/xsl/php_xsl.h | 128 - ext/xsl/tests/area_list.xsl | 10 - ext/xsl/tests/area_name.xml | 12 - ext/xsl/tests/bug26384.phpt | 33 - ext/xsl/tests/bug33853.phpt | 36 - ext/xsl/tests/documentxpath.xsl | 10 - ext/xsl/tests/exslt.xml | 9 - ext/xsl/tests/exslt.xsl | 45 - ext/xsl/tests/prepare.inc | 20 - ext/xsl/tests/skipif.inc | 1 - ext/xsl/tests/streamsinclude.xsl | 6 - ext/xsl/tests/xslt.xml | 28 - ext/xsl/tests/xslt.xsl | 26 - ext/xsl/tests/xslt.xsl.gz | Bin 395 -> 0 bytes ext/xsl/tests/xslt001.phpt | 22 - ext/xsl/tests/xslt002.phpt | 29 - ext/xsl/tests/xslt003.phpt | 23 - ext/xsl/tests/xslt004.phpt | 29 - ext/xsl/tests/xslt005.phpt | 31 - ext/xsl/tests/xslt006.phpt | 23 - ext/xsl/tests/xslt007.phpt | 24 - ext/xsl/tests/xslt008.phpt | 31 - ext/xsl/tests/xslt009.phpt | 28 - ext/xsl/tests/xslt010.phpt | 115 - ext/xsl/tests/xslt011.phpt | 59 - ext/xsl/tests/xslt011.xml | 1 - ext/xsl/tests/xslt011.xsl | 25 - ext/xsl/tests/xslt012.phpt | 52 - ext/xsl/tests/xslt012.xsl | 29 - ext/xsl/xsl.dsp | 120 - ext/xsl/xsl_fe.h | 36 - ext/xsl/xsltprocessor.c | 789 - ext/zip/CREDITS | 2 - ext/zip/TODO | 4 - ext/zip/config.m4 | 69 - ext/zip/config.w32 | 38 - ext/zip/examples/comment.php | 6 - ext/zip/examples/create.php | 21 - ext/zip/examples/dir.php | 17 - ext/zip/examples/extract.php | 24 - ext/zip/examples/extractAll.php | 24 - ext/zip/examples/fopen.php | 31 - ext/zip/examples/get_set_comments.php | 38 - ext/zip/examples/im.php | 11 - ext/zip/examples/odt.php | 20 - ext/zip/examples/oldapi.php | 17 - ext/zip/examples/test.odt | Bin 6162 -> 0 bytes ext/zip/examples/test.zip | Bin 541 -> 0 bytes ext/zip/examples/test1.zip | Bin 681 -> 0 bytes ext/zip/examples/test_im.zip | Bin 1086 -> 0 bytes ext/zip/examples/test_with_comment.zip | Bin 560 -> 0 bytes ext/zip/examples/too.php | 2 - ext/zip/lib/mkstemp.c | 136 - ext/zip/lib/unistd.h | 3 - ext/zip/lib/zip.h | 210 - ext/zip/lib/zip_add.c | 51 - ext/zip/lib/zip_add_dir.c | 83 - ext/zip/lib/zip_close.c | 559 - ext/zip/lib/zip_delete.c | 61 - ext/zip/lib/zip_dirent.c | 531 - ext/zip/lib/zip_entry_free.c | 55 - ext/zip/lib/zip_entry_new.c | 81 - ext/zip/lib/zip_err_str.c | 72 - ext/zip/lib/zip_error.c | 104 - ext/zip/lib/zip_error_clear.c | 47 - ext/zip/lib/zip_error_get.c | 47 - ext/zip/lib/zip_error_get_sys_type.c | 50 - ext/zip/lib/zip_error_strerror.c | 93 - ext/zip/lib/zip_error_to_str.c | 73 - ext/zip/lib/zip_fclose.c | 76 - ext/zip/lib/zip_file_error_clear.c | 47 - ext/zip/lib/zip_file_error_get.c | 47 - ext/zip/lib/zip_file_get_offset.c | 80 - ext/zip/lib/zip_file_strerror.c | 47 - ext/zip/lib/zip_fopen.c | 52 - ext/zip/lib/zip_fopen_index.c | 219 - ext/zip/lib/zip_fread.c | 125 - ext/zip/lib/zip_free.c | 86 - ext/zip/lib/zip_get_archive_comment.c | 58 - ext/zip/lib/zip_get_file_comment.c | 61 - ext/zip/lib/zip_get_name.c | 74 - ext/zip/lib/zip_get_num_files.c | 50 - ext/zip/lib/zip_memdup.c | 58 - ext/zip/lib/zip_name_locate.c | 91 - ext/zip/lib/zip_new.c | 71 - ext/zip/lib/zip_open.c | 468 - ext/zip/lib/zip_rename.c | 52 - ext/zip/lib/zip_replace.c | 82 - ext/zip/lib/zip_set_archive_comment.c | 68 - ext/zip/lib/zip_set_file_comment.c | 69 - ext/zip/lib/zip_set_name.c | 77 - ext/zip/lib/zip_source_buffer.c | 160 - ext/zip/lib/zip_source_file.c | 75 - ext/zip/lib/zip_source_filep.c | 176 - ext/zip/lib/zip_source_free.c | 54 - ext/zip/lib/zip_source_function.c | 62 - ext/zip/lib/zip_source_zip.c | 189 - ext/zip/lib/zip_stat.c | 52 - ext/zip/lib/zip_stat_index.c | 93 - ext/zip/lib/zip_stat_init.c | 53 - ext/zip/lib/zip_strerror.c | 47 - ext/zip/lib/zip_unchange.c | 84 - ext/zip/lib/zip_unchange_all.c | 56 - ext/zip/lib/zip_unchange_archive.c | 52 - ext/zip/lib/zip_unchange_data.c | 53 - ext/zip/lib/zip_win32.h | 29 - ext/zip/lib/zipint.h | 226 - ext/zip/php_zip.c | 2130 - ext/zip/php_zip.h | 84 - ext/zip/tests/001.phpt | 12 - ext/zip/tests/binarynull.zip | Bin 656 -> 0 bytes ext/zip/tests/bug38943.phpt | 76 - ext/zip/tests/bug38944.phpt | 59 - ext/zip/tests/bug40228.phpt | 23 - ext/zip/tests/bug40228.zip | Bin 274 -> 0 bytes ext/zip/tests/bug7214.phpt | 23 - ext/zip/tests/bug7658.odt | Bin 8873 -> 0 bytes ext/zip/tests/bug7658.phpt | 60 - ext/zip/tests/bug7658.xml | 2 - ext/zip/tests/bug8009.phpt | 27 - ext/zip/tests/bug8009.zip | Bin 112 -> 0 bytes ext/zip/tests/bug8700.phpt | 30 - ext/zip/tests/oo_addemptydir.phpt | 36 - ext/zip/tests/oo_addfile.phpt | 37 - ext/zip/tests/oo_close.phpt | 25 - ext/zip/tests/oo_delete.phpt | 76 - ext/zip/tests/oo_ext_zip.phpt | 27 - ext/zip/tests/oo_extract.phpt | 95 - ext/zip/tests/oo_getcomment.phpt | 36 - ext/zip/tests/oo_getnameindex.phpt | 47 - ext/zip/tests/oo_namelocate.phpt | 45 - ext/zip/tests/oo_open.phpt | 46 - ext/zip/tests/oo_rename.phpt | 58 - ext/zip/tests/oo_setcomment.phpt | 71 - ext/zip/tests/oo_stream.phpt | 50 - ext/zip/tests/test.zip | Bin 526 -> 0 bytes ext/zip/tests/test_procedural.zip | Bin 541 -> 0 bytes ext/zip/tests/test_with_comment.zip | Bin 571 -> 0 bytes ext/zip/tests/utils.inc | 25 - ext/zip/tests/zip_close.phpt | 17 - ext/zip/tests/zip_entry_compressedsize.phpt | 23 - .../tests/zip_entry_compressionmethod.phpt | 24 - ext/zip/tests/zip_entry_filesize.phpt | 23 - ext/zip/tests/zip_entry_name.phpt | 23 - ext/zip/tests/zip_entry_open.phpt | 17 - ext/zip/tests/zip_entry_read.phpt | 19 - ext/zip/tests/zip_open.phpt | 16 - ext/zip/tests/zip_read.phpt | 21 - ext/zip/zip_stream.c | 251 - ext/zlib/CREDITS | 2 - ext/zlib/config.w32 | 17 - ext/zlib/config0.m4 | 65 - ext/zlib/package.xml | 70 - ext/zlib/php_zlib.def | 17 - ext/zlib/php_zlib.h | 110 - ext/zlib/tests/001.phpt | 32 - ext/zlib/tests/002.phpt | 24 - ext/zlib/tests/003.phpt | 14 - ext/zlib/tests/004.phpt | 87 - ext/zlib/tests/004.txt.gz | Bin 150 -> 0 bytes ext/zlib/tests/005.phpt | 72 - ext/zlib/tests/006.phpt | 71 - ext/zlib/tests/007.phpt | 51 - ext/zlib/tests/bug_34821.phpt | 41 - ext/zlib/tests/compress_zlib_wrapper.phpt | 21 - ext/zlib/tests/gzfilegzreadfile.phpt | 82 - ext/zlib/tests/gzreadgzwrite.phpt | 36 - ext/zlib/tests/gzreadgzwriteplain.phpt | 54 - ext/zlib/tests/ob_001.phpt | 22 - ext/zlib/tests/ob_002.phpt | 17 - ext/zlib/tests/ob_003.phpt | 23 - ext/zlib/tests/ob_004.phpt | 23 - ext/zlib/tests/ob_005.phpt | 19 - ext/zlib/tests/zlib_filter_deflate.phpt | 17 - ext/zlib/tests/zlib_filter_inflate.phpt | 17 - ext/zlib/zlib.c | 788 - ext/zlib/zlib.dsp | 121 - ext/zlib/zlib_filter.c | 443 - ext/zlib/zlib_fopen_wrapper.c | 188 - ext/zlib/zlib_win32_howto.txt | 16 - footer | 9 - genfiles | 20 - header | 19 - ltmain.sh | 6530 --- main/SAPI.c | 919 - main/SAPI.h | 310 - main/alloca.c | 501 - main/build-defs.h.in | 90 - main/config.w32.h | 203 - main/fopen_wrappers.c | 547 - main/fopen_wrappers.h | 49 - main/internal_functions.c.in | 49 - main/internal_functions_nw.c | 101 - main/internal_functions_win32.c | 173 - main/logos.h | 876 - main/main.c | 2102 - main/mergesort.c | 358 - main/network.c | 1152 - main/output.c | 1590 - main/php.h | 446 - main/php_compat.h | 377 - main/php_content_types.c | 101 - main/php_content_types.h | 31 - main/php_globals.h | 155 - main/php_ini.c | 641 - main/php_ini.h | 78 - main/php_logos.c | 99 - main/php_logos.h | 34 - main/php_main.h | 61 - main/php_memory_streams.h | 68 - main/php_network.h | 317 - main/php_open_temporary_file.c | 271 - main/php_open_temporary_file.h | 31 - main/php_output.h | 317 - main/php_realpath.c | 285 - main/php_reentrancy.h | 133 - main/php_regex.h | 65 - main/php_scandir.c | 136 - main/php_scandir.h | 54 - main/php_sprintf.c | 52 - main/php_streams.h | 693 - main/php_syslog.h | 52 - main/php_ticks.c | 81 - main/php_ticks.h | 40 - main/php_variables.c | 1038 - main/php_variables.h | 52 - main/php_version.h | 8 - main/reentrancy.c | 450 - main/rfc1867.c | 1963 - main/rfc1867.h | 33 - main/snprintf.c | 1287 - main/snprintf.h | 158 - main/spprintf.c | 916 - main/spprintf.h | 58 - main/streams/cast.c | 355 - main/streams/filter.c | 857 - main/streams/glob_wrapper.c | 294 - main/streams/memory.c | 758 - main/streams/mmap.c | 61 - main/streams/php_stream_context.h | 139 - main/streams/php_stream_filter_api.h | 202 - main/streams/php_stream_glob_wrapper.h | 44 - main/streams/php_stream_mmap.h | 83 - main/streams/php_stream_plain_wrapper.h | 66 - main/streams/php_stream_transport.h | 207 - main/streams/php_stream_userspace.h | 35 - main/streams/php_streams_int.h | 61 - main/streams/plain_wrapper.c | 1358 - main/streams/streams.c | 3127 -- main/streams/transports.c | 519 - main/streams/unicode_filter.c | 370 - main/streams/userspace.c | 1367 - main/streams/xp_socket.c | 823 - main/strlcat.c | 106 - main/strlcpy.c | 103 - main/win95nt.h | 82 - makedist | 151 - makerpm | 201 - netware/sendmail_nw.h | 19 - netware/start.c | 119 - pear/OS/Guess.php | 216 + pear/PEAR.php | 945 + pear/PEAR/Autoloader.php | 186 + pear/PEAR/Builder.php | 379 + pear/PEAR/Command.php | 322 + pear/PEAR/Command/Auth.php | 155 + pear/PEAR/Command/Build.php | 89 + pear/PEAR/Command/Common.php | 249 + pear/PEAR/Command/Config.php | 225 + pear/PEAR/Command/Install.php | 302 + pear/PEAR/Command/Package.php | 667 + pear/PEAR/Command/Registry.php | 319 + pear/PEAR/Command/Remote.php | 407 + pear/PEAR/Common.php | 1552 + pear/PEAR/Config.php | 1139 + pear/PEAR/Dependency.php | 327 + pear/PEAR/Frontend/CLI.php | 486 + pear/PEAR/Installer.php | 872 + pear/PEAR/Packager.php | 161 + pear/PEAR/Registry.php | 692 + pear/PEAR/Remote.php | 367 + pear/System.php | 449 + pear/package-PEAR.xml | 287 + pear/package.dtd | 108 + pear/scripts/pear.bat | 29 + pear/scripts/pear.in | 320 + pear/template.spec | 44 + php.gif | Bin 2523 -> 0 bytes php.ini-dist | 1174 - php.ini-recommended | 1208 - php5.spec.in | 48 - regex/COPYRIGHT | 20 - regex/README | 32 - regex/WHATSNEW | 92 - regex/cclass.h | 30 - regex/cname.h | 102 - regex/debug.c | 242 - regex/debug.ih | 14 - regex/engine.c | 1019 - regex/engine.ih | 35 - regex/main.c | 510 - regex/main.ih | 19 - regex/mkh | 76 - regex/regcomp.c | 1613 - regex/regcomp.ih | 53 - regex/regerror.c | 126 - regex/regerror.ih | 12 - regex/regex.3 | 502 - regex/regex.7 | 233 - regex/regex.dsp | 106 - regex/regex.dsw | 29 - regex/regex.h | 83 - regex/regex.mak | 304 - regex/regex2.h | 140 - regex/regex_extra.h | 23 - regex/regexec.c | 138 - regex/regfree.c | 37 - regex/split.c | 316 - regex/tests | 475 - regex/utils.h | 25 - run-tests.php | 1994 - sapi/aolserver/CREDITS | 2 - sapi/aolserver/README | 69 - sapi/aolserver/aolserver.c | 619 - sapi/aolserver/config.m4 | 33 - sapi/aolserver/config.w32 | 16 - sapi/aolserver/php.sym | 2 - sapi/aolserver/php5aolserver.dsp | 135 - sapi/apache/CREDITS | 3 - sapi/apache/apMakefile.libdir | 4 - sapi/apache/apMakefile.tmpl | 77 - sapi/apache/config.m4 | 265 - sapi/apache/config.w32 | 24 - sapi/apache/libphp6.module.in | 11 - sapi/apache/libpre.c | 55 - sapi/apache/mod_php.c | 1009 - sapi/apache/mod_php.exp | 1 - sapi/apache/mod_php.h | 54 - sapi/apache/php.sym | 1 - sapi/apache/php5apache.dsp | 151 - sapi/apache/php_apache.c | 556 - sapi/apache/php_apache_http.h | 70 - sapi/apache/sapi_apache.c | 73 - sapi/apache2filter/CREDITS | 2 - sapi/apache2filter/EXPERIMENTAL | 5 - sapi/apache2filter/README | 71 - sapi/apache2filter/apache_config.c | 233 - sapi/apache2filter/config.m4 | 130 - sapi/apache2filter/config.w32 | 35 - sapi/apache2filter/php.sym | 1 - sapi/apache2filter/php_apache.h | 68 - sapi/apache2filter/php_functions.c | 396 - sapi/apache2filter/sapi_apache2.c | 721 - sapi/apache2handler/CREDITS | 2 - sapi/apache2handler/README | 76 - sapi/apache2handler/apache_config.c | 216 - sapi/apache2handler/config.m4 | 129 - sapi/apache2handler/config.w32 | 35 - sapi/apache2handler/mod_php.c | 52 - sapi/apache2handler/php.sym | 1 - sapi/apache2handler/php5apache2.dsp | 146 - sapi/apache2handler/php_apache.h | 86 - sapi/apache2handler/php_functions.c | 536 - sapi/apache2handler/sapi_apache2.c | 663 - sapi/apache_hooks/CREDITS | 2 - sapi/apache_hooks/README | 206 - sapi/apache_hooks/apMakefile.libdir | 4 - sapi/apache_hooks/apMakefile.tmpl | 77 - sapi/apache_hooks/config.m4 | 266 - sapi/apache_hooks/config.w32 | 21 - sapi/apache_hooks/libphp5.module.in | 11 - sapi/apache_hooks/mod_php5.c | 1471 - sapi/apache_hooks/mod_php5.exp | 1 - sapi/apache_hooks/mod_php5.h | 81 - sapi/apache_hooks/php.sym | 1 - sapi/apache_hooks/php5apache_hooks.dsp | 151 - sapi/apache_hooks/php_apache.c | 1952 - sapi/apache_hooks/php_apache_http.h | 44 - sapi/apache_hooks/sapi_apache.c | 131 - sapi/caudium/CREDITS | 2 - sapi/caudium/README | 16 - sapi/caudium/TODO | 30 - sapi/caudium/caudium.c | 792 - sapi/caudium/config.m4 | 98 - sapi/cgi/CHANGES | 34 - sapi/cgi/CREDITS | 2 - sapi/cgi/Makefile.frag | 2 - sapi/cgi/README.FastCGI | 151 - sapi/cgi/cgi_main.c | 1795 - sapi/cgi/config.w32 | 9 - sapi/cgi/config9.m4 | 79 - sapi/cgi/fastcgi.c | 1042 - sapi/cgi/fastcgi.h | 137 - sapi/cgi/getopt.c | 154 - sapi/cgi/php.sym | 0 sapi/cgi/php_getopt.h | 30 - sapi/cli/CREDITS | 2 - sapi/cli/Makefile.frag | 11 - sapi/cli/README | 20 - sapi/cli/TODO | 2 - sapi/cli/cli_win32.c | 2 - sapi/cli/config.m4 | 42 - sapi/cli/config.w32 | 18 - sapi/cli/getopt.c | 156 - sapi/cli/php.1.in | 416 - sapi/cli/php_cli.c | 1344 - sapi/cli/php_cli_readline.c | 508 - sapi/cli/php_cli_readline.h | 25 - sapi/cli/php_getopt.h | 39 - sapi/cli/tests/001.phpt | 19 - sapi/cli/tests/002-win32.phpt | 22 - sapi/cli/tests/002.phpt | 22 - sapi/cli/tests/003.phpt | 32 - sapi/cli/tests/004.phpt | 34 - sapi/cli/tests/005.phpt | 99 - sapi/cli/tests/006.phpt | 330 - sapi/cli/tests/007.phpt | 52 - sapi/cli/tests/008.phpt | 43 - sapi/cli/tests/009.phpt | 23 - sapi/cli/tests/010-2.phpt | 35 - sapi/cli/tests/010.phpt | 47 - sapi/cli/tests/011.phpt | 58 - sapi/cli/tests/012.phpt | 38 - sapi/cli/tests/013.phpt | 34 - sapi/cli/tests/014.phpt | 44 - sapi/cli/tests/skipif.inc | 7 - sapi/continuity/CREDITS | 2 - sapi/continuity/capi.c | 508 - sapi/continuity/config.m4 | 36 - sapi/embed/CREDITS | 2 - sapi/embed/EXPERIMENTAL | 5 - sapi/embed/config.m4 | 33 - sapi/embed/config.w32 | 8 - sapi/embed/php5embed.dsp | 100 - sapi/embed/php_embed.c | 240 - sapi/embed/php_embed.h | 68 - sapi/isapi/CREDITS | 2 - sapi/isapi/config.m4 | 27 - sapi/isapi/config.w32 | 13 - sapi/isapi/php.sym | 5 - sapi/isapi/php5isapi.c | 971 - sapi/isapi/php5isapi.def | 5 - sapi/isapi/php5isapi.dsp | 165 - sapi/isapi/stresstest/getopt.c | 175 - sapi/isapi/stresstest/getopt.h | 12 - sapi/isapi/stresstest/notes.txt | 56 - sapi/isapi/stresstest/stresstest.cpp | 936 - sapi/isapi/stresstest/stresstest.dsp | 108 - sapi/litespeed/Makefile.frag | 3 - sapi/litespeed/README | 118 - sapi/litespeed/config.m4 | 36 - sapi/litespeed/lsapi_main.c | 781 - sapi/litespeed/lsapidef.h | 181 - sapi/litespeed/lsapilib.c | 1127 - sapi/litespeed/lsapilib.h | 287 - sapi/milter/CREDITS | 2 - sapi/milter/EXPERIMENTAL | 5 - sapi/milter/Makefile.frag | 2 - sapi/milter/TODO | 5 - sapi/milter/config.m4 | 39 - sapi/milter/getopt.c | 173 - sapi/milter/milter.php | 132 - sapi/milter/php_getopt.h | 7 - sapi/milter/php_milter.c | 1138 - sapi/milter/php_milter.h | 31 - sapi/nsapi/CREDITS | 2 - sapi/nsapi/config.m4 | 45 - sapi/nsapi/config.w32 | 19 - sapi/nsapi/nsapi-readme.txt | 154 - sapi/nsapi/nsapi.c | 1021 - sapi/nsapi/php5nsapi.dsp | 135 - sapi/phttpd/CREDITS | 2 - sapi/phttpd/README | 5 - sapi/phttpd/config.m4 | 25 - sapi/phttpd/php.sym | 4 - sapi/phttpd/php_phttpd.h | 24 - sapi/phttpd/phttpd.c | 306 - sapi/pi3web/CREDITS | 2 - sapi/pi3web/README | 50 - sapi/pi3web/config.m4 | 35 - sapi/pi3web/config.w32 | 16 - sapi/pi3web/php.sym | 0 sapi/pi3web/php5pi3web.dsp | 136 - sapi/pi3web/pi3web_sapi.c | 438 - sapi/pi3web/pi3web_sapi.h | 98 - sapi/roxen/README | 18 - sapi/roxen/TODO | 33 - sapi/roxen/config.m4 | 60 - sapi/roxen/roxen.c | 726 - sapi/tests/test001.phpt | 16 - sapi/tests/test002.phpt | 22 - sapi/tests/test003.phpt | 21 - sapi/tests/test004.phpt | 26 - sapi/tests/test005.phpt | 27 - sapi/tests/test006.phpt | 73 - sapi/tests/test007.phpt | 46 - sapi/thttpd/CREDITS | 2 - sapi/thttpd/README | 85 - sapi/thttpd/config.m4 | 39 - sapi/thttpd/php.sym | 3 - sapi/thttpd/php_thttpd.h | 35 - sapi/thttpd/stub.c | 0 sapi/thttpd/thttpd.c | 771 - sapi/thttpd/thttpd_patch | 2377 - sapi/tux/CREDITS | 2 - sapi/tux/README | 86 - sapi/tux/config.m4 | 18 - sapi/tux/php.sym | 2 - sapi/tux/php_tux.c | 456 - sapi/webjames/CREDITS | 2 - sapi/webjames/README | 28 - sapi/webjames/config.m4 | 20 - sapi/webjames/php_webjames.h | 28 - sapi/webjames/webjames.c | 329 - scripts/Makefile.frag | 51 - scripts/apache/apconf-conv.sh | 24 - scripts/apache/aphtaccess-conv.sh | 24 - scripts/apache/conffix.awk | 23 - scripts/apache/htaccessfix.awk | 23 - scripts/dev/check_parameters.php | 373 - scripts/dev/conv_proto | 30 - scripts/dev/conv_z_macros | 61 - scripts/dev/credits | 26 - scripts/dev/extern_c.php | 45 - scripts/dev/phpextdist | 27 - scripts/dev/search_underscores.php | 97 - scripts/man1/php-config.1.in | 70 - scripts/man1/phpize.1.in | 49 - scripts/php-config.in | 41 - scripts/phpize.in | 189 - scripts/phpize.m4 | 128 - server-tests-config.php | 74 - server-tests.php | 1564 - snapshot | 7 - stamp-h.in | 1 - stub.c | 1 - tests/basic/001.phpt | 6 - tests/basic/002.phpt | 11 - tests/basic/003.phpt | 14 - tests/basic/004.phpt | 12 - tests/basic/005.phpt | 12 - tests/basic/006.phpt | 6 - tests/basic/007.phpt | 6 - tests/basic/008.phpt | 6 - tests/basic/009.phpt | 6 - tests/basic/010.phpt | 6 - tests/basic/011.phpt | 20 - tests/basic/012.phpt | 26 - tests/basic/013.phpt | 20 - tests/basic/014.phpt | 24 - tests/basic/015.phpt | 20 - tests/basic/016.phpt | 24 - tests/basic/017.phpt | 28 - tests/basic/018.phpt | 61 - tests/basic/019.phpt | 28 - tests/basic/020.phpt | 24 - tests/basic/022.phpt | 54 - tests/basic/023.phpt | 26 - tests/basic/bug20539.phpt | 11 - tests/basic/bug29971.phpt | 22 - tests/bin-info.inc | 21 - tests/classes/__call_001.phpt | 62 - tests/classes/__call_002.phpt | 15 - tests/classes/__set__get_001.phpt | 96 - tests/classes/__set__get_002.phpt | 14 - tests/classes/__set__get_003.phpt | 14 - tests/classes/__set__get_004.phpt | 43 - tests/classes/__set__get_005.phpt | 83 - tests/classes/__set_data_corrupt.phpt | 29 - tests/classes/abstract.phpt | 30 - tests/classes/abstract_by_interface_001.phpt | 33 - tests/classes/abstract_by_interface_002.phpt | 33 - tests/classes/abstract_class.phpt | 29 - tests/classes/abstract_derived.phpt | 20 - tests/classes/abstract_final.phpt | 16 - tests/classes/abstract_inherit.phpt | 22 - tests/classes/abstract_not_declared.phpt | 15 - tests/classes/abstract_redeclare.phpt | 22 - tests/classes/abstract_static.phpt | 34 - tests/classes/abstract_user_call.phpt | 30 - tests/classes/array_access_001.phpt | 311 - tests/classes/array_access_002.phpt | 311 - tests/classes/array_access_003.phpt | 70 - tests/classes/array_access_004.phpt | 68 - tests/classes/array_access_005.phpt | 99 - tests/classes/array_access_006.phpt | 37 - tests/classes/array_access_007.phpt | 57 - tests/classes/array_access_008.phpt | 83 - tests/classes/array_access_009.phpt | 255 - tests/classes/array_access_010.phpt | 237 - tests/classes/array_access_011.phpt | 266 - tests/classes/array_access_012.phpt | 36 - tests/classes/array_access_013.phpt | 58 - tests/classes/assign_op_property_001.phpt | 31 - tests/classes/autoload_001.phpt | 24 - tests/classes/autoload_002.phpt | 34 - tests/classes/autoload_003.phpt | 25 - tests/classes/autoload_004.phpt | 28 - tests/classes/autoload_005.phpt | 45 - tests/classes/autoload_006.phpt | 40 - tests/classes/autoload_derived.p5c | 6 - tests/classes/autoload_implements.p5c | 10 - tests/classes/autoload_interface.p5c | 7 - tests/classes/autoload_root.p5c | 10 - tests/classes/bug23951.phpt | 44 - tests/classes/bug24399.phpt | 12 - tests/classes/bug24445.phpt | 12 - tests/classes/bug26737.phpt | 25 - tests/classes/bug27468.phpt | 17 - tests/classes/bug27504.phpt | 25 - tests/classes/bug29446.phpt | 19 - tests/classes/class_abstract.phpt | 28 - tests/classes/class_example.phpt | 85 - tests/classes/class_final.phpt | 22 - tests/classes/class_stdclass.phpt | 14 - tests/classes/clone_001.phpt | 63 - tests/classes/clone_002.phpt | 65 - tests/classes/clone_003.phpt | 58 - tests/classes/clone_004.phpt | 125 - tests/classes/clone_005.phpt | 19 - tests/classes/clone_006.phpt | 41 - tests/classes/constants_scope_001.phpt | 38 - tests/classes/ctor_dtor.phpt | 40 - tests/classes/ctor_dtor_inheritance.phpt | 99 - tests/classes/ctor_failure.phpt | 33 - tests/classes/ctor_in_interface_01.phpt | 19 - tests/classes/ctor_in_interface_02.phpt | 35 - tests/classes/ctor_in_interface_03.phpt | 23 - tests/classes/ctor_in_interface_04.phpt | 26 - tests/classes/ctor_name_clash.phpt | 22 - tests/classes/ctor_visibility.phpt | 69 - tests/classes/dereferencing_001.phpt | 35 - tests/classes/destructor_and_echo.phpt | 24 - tests/classes/destructor_and_exceptions.phpt | 60 - tests/classes/destructor_and_globals.phpt | 56 - tests/classes/destructor_and_references.phpt | 26 - tests/classes/destructor_inheritance.phpt | 29 - tests/classes/destructor_visibility_001.phpt | 24 - tests/classes/destructor_visibility_002.phpt | 24 - tests/classes/destructor_visibility_003.phpt | 28 - tests/classes/factory_001.phpt | 35 - tests/classes/factory_and_singleton_001.phpt | 101 - tests/classes/factory_and_singleton_002.phpt | 100 - tests/classes/factory_and_singleton_003.phpt | 18 - tests/classes/factory_and_singleton_004.phpt | 18 - tests/classes/factory_and_singleton_005.phpt | 19 - tests/classes/factory_and_singleton_006.phpt | 20 - tests/classes/factory_and_singleton_007.phpt | 20 - tests/classes/factory_and_singleton_008.phpt | 20 - tests/classes/factory_and_singleton_009.phpt | 21 - tests/classes/factory_and_singleton_010.phpt | 21 - tests/classes/final.phpt | 31 - tests/classes/final_abstract.phpt | 16 - tests/classes/final_ctor1.phpt | 29 - tests/classes/final_ctor2.phpt | 29 - tests/classes/final_redeclare.phpt | 25 - tests/classes/incdec_property_001.phpt | 31 - tests/classes/incdec_property_002.phpt | 31 - tests/classes/incdec_property_003.phpt | 31 - tests/classes/incdec_property_004.phpt | 31 - tests/classes/inheritance.phpt | 56 - tests/classes/inheritance_002.phpt | 84 - tests/classes/inheritance_003.phpt | 20 - tests/classes/inheritance_004.phpt | 20 - tests/classes/interface_and_extends.phpt | 26 - tests/classes/interface_class.phpt | 14 - tests/classes/interface_doubled.phpt | 201 - tests/classes/interface_implemented.phpt | 103 - tests/classes/interface_instantiate.phpt | 16 - tests/classes/interface_member.phpt | 13 - tests/classes/interface_method.phpt | 15 - tests/classes/interface_method_final.phpt | 15 - tests/classes/interface_method_private.phpt | 15 - .../interface_must_be_implemented.phpt | 17 - tests/classes/interface_optional_arg.phpt | 27 - tests/classes/interfaces_001.phpt | 26 - tests/classes/interfaces_002.phpt | 29 - tests/classes/interfaces_003.phpt | 26 - tests/classes/iterators_001.phpt | 200 - tests/classes/iterators_002.phpt | 113 - tests/classes/iterators_003.phpt | 115 - tests/classes/iterators_004.phpt | 61 - tests/classes/iterators_005.phpt | 19 - tests/classes/iterators_006.phpt | 87 - tests/classes/iterators_007.phpt | 43 - tests/classes/object_reference_001.phpt | 27 - tests/classes/private_001.phpt | 26 - tests/classes/private_002.phpt | 35 - tests/classes/private_003.phpt | 35 - tests/classes/private_003b.phpt | 37 - tests/classes/private_004.phpt | 32 - tests/classes/private_004b.phpt | 35 - tests/classes/private_005.phpt | 32 - tests/classes/private_005b.phpt | 35 - tests/classes/private_006.phpt | 41 - tests/classes/private_006b.phpt | 41 - tests/classes/private_007.phpt | 30 - tests/classes/private_007b.phpt | 31 - tests/classes/private_members.phpt | 103 - tests/classes/private_redeclare.phpt | 38 - tests/classes/protected_001.phpt | 26 - tests/classes/protected_001b.phpt | 27 - tests/classes/protected_002.phpt | 35 - tests/classes/serialize_001.phpt | 139 - tests/classes/singleton_001.phpt | 37 - tests/classes/static_mix_1.phpt | 26 - tests/classes/static_mix_2.phpt | 27 - tests/classes/static_properties_001.phpt | 27 - tests/classes/static_this.phpt | 39 - tests/classes/this.phpt | 54 - tests/classes/tostring_001.phpt | 186 - tests/classes/tostring_002.phpt | 31 - tests/classes/tostring_003.phpt | 33 - tests/classes/type_hinting_001.phpt | 38 - tests/classes/type_hinting_002.phpt | 16 - tests/classes/type_hinting_003.phpt | 60 - tests/classes/visibility_000a.phpt | 33 - tests/classes/visibility_000b.phpt | 33 - tests/classes/visibility_000c.phpt | 33 - tests/classes/visibility_001a.phpt | 33 - tests/classes/visibility_001b.phpt | 33 - tests/classes/visibility_001c.phpt | 33 - tests/classes/visibility_002a.phpt | 33 - tests/classes/visibility_002b.phpt | 33 - tests/classes/visibility_002c.phpt | 33 - tests/classes/visibility_003a.phpt | 33 - tests/classes/visibility_003b.phpt | 33 - tests/classes/visibility_003c.phpt | 33 - tests/classes/visibility_004a.phpt | 33 - tests/classes/visibility_004b.phpt | 33 - tests/classes/visibility_004c.phpt | 33 - tests/classes/visibility_005.phpt | 58 - tests/foo | 5 - tests/foo2 | 3 - tests/foo3 | 43 - tests/foo4 | 41 - tests/func/001.phpt | 6 - tests/func/002.phpt | 21 - tests/func/003.phpt | 291 - tests/func/004.phpt | 65 - tests/func/005.phpt | 19 - tests/func/005a.phpt | 28 - tests/func/006.phpt | 29 - tests/func/007.phpt | 22 - tests/func/008.phpt | 16 - tests/func/009.phpt | 16 - tests/lang/001.phpt | 6 - tests/lang/002.phpt | 12 - tests/lang/003.phpt | 19 - tests/lang/004.phpt | 13 - tests/lang/005.phpt | 16 - tests/lang/006.phpt | 23 - tests/lang/007.phpt | 27 - tests/lang/008.phpt | 18 - tests/lang/009.phpt | 11 - tests/lang/010.phpt | 13 - tests/lang/011.phpt | 23 - tests/lang/012.phpt | 18 - tests/lang/013.phpt | 10 - tests/lang/014.phpt | 13 - tests/lang/015.inc | 3 - tests/lang/015.phpt | 8 - tests/lang/016.inc | 5 - tests/lang/016.phpt | 9 - tests/lang/017.phpt | 18 - tests/lang/018.phpt | 34 - tests/lang/019.phpt | 36 - tests/lang/020.phpt | 76 - tests/lang/021.phpt | 42 - tests/lang/022.phpt | 63 - tests/lang/023-1.inc | 356 - tests/lang/023-2.inc | 6 - tests/lang/023.phpt | 256 - tests/lang/024.phpt | 11623 ----- tests/lang/025.phpt | 531 - tests/lang/026.phpt | 6 - tests/lang/027.phpt | 12 - tests/lang/028.phpt | 1058 - tests/lang/030.phpt | 36 - tests/lang/031.phpt | 70 - tests/lang/032.phpt | 36 - tests/lang/033.phpt | 53 - tests/lang/034.phpt | 20 - tests/lang/035.phpt | 38 - tests/lang/036.phpt | 27 - tests/lang/037.phpt | 30 - tests/lang/038.phpt | 45 - tests/lang/039.phpt | 45 - tests/lang/040.phpt | 15 - tests/lang/bison1.phpt | 9 - tests/lang/bug17115.phpt | 16 - tests/lang/bug18872.phpt | 18 - tests/lang/bug19566.phpt | 10 - tests/lang/bug19943.phpt | 41 - tests/lang/bug20175.phpt | 168 - tests/lang/bug21094.phpt | 17 - tests/lang/bug21600.phpt | 51 - tests/lang/bug21669.phpt | 23 - tests/lang/bug21820.phpt | 13 - tests/lang/bug21849.phpt | 16 - tests/lang/bug21961.phpt | 60 - tests/lang/bug22231.phpt | 56 - tests/lang/bug22510.phpt | 126 - tests/lang/bug22592.phpt | 70 - tests/lang/bug22690.phpt | 12 - tests/lang/bug23279.phpt | 16 - tests/lang/bug23384.phpt | 33 - tests/lang/bug23489.phpt | 23 - tests/lang/bug23524.phpt | 29 - tests/lang/bug23584.phpt | 13 - tests/lang/bug23624.phpt | 15 - tests/lang/bug23922.phpt | 20 - tests/lang/bug24054.phpt | 24 - tests/lang/bug24396.phpt | 19 - tests/lang/bug24403.phpt | 20 - tests/lang/bug24436.phpt | 15 - tests/lang/bug24499.phpt | 24 - tests/lang/bug24573.phpt | 24 - tests/lang/bug24640.phpt | 129 - tests/lang/bug24652.phpt | 31 - tests/lang/bug24658.phpt | 56 - tests/lang/bug24783.phpt | 13 - tests/lang/bug24908.phpt | 18 - tests/lang/bug24926.phpt | 28 - tests/lang/bug24951.phpt | 42 - tests/lang/bug25145.phpt | 32 - tests/lang/bug25547.phpt | 30 - tests/lang/bug25652.phpt | 22 - tests/lang/bug25922.phpt | 23 - tests/lang/bug26182.phpt | 25 - tests/lang/bug26696.phpt | 28 - tests/lang/bug26866.phpt | 25 - tests/lang/bug26869.phpt | 15 - tests/lang/bug27354.phpt | 14 - tests/lang/bug27439.phpt | 76 - tests/lang/bug27443.phpt | 8 - tests/lang/bug27535.phpt | 28 - tests/lang/bug28213.phpt | 10 - tests/lang/bug28800.phpt | 17 - tests/lang/bug29566.phpt | 16 - tests/lang/bug29893.phpt | 11 - tests/lang/bug29944.phpt | 20 - tests/lang/bug30578.phpt | 31 - tests/lang/bug30638.phpt | 26 - tests/lang/bug30726.phpt | 8 - tests/lang/bug30862.phpt | 30 - tests/lang/bug32828.phpt | 21 - tests/lang/bug32924.phpt | 14 - tests/lang/bug35176.phpt | 14 - tests/lang/bug35382.phpt | 9 - tests/lang/bug38579.inc | 3 - tests/lang/bug38579.phpt | 16 - tests/lang/bug7515.phpt | 36 - tests/lang/catchable_error_001.phpt | 22 - tests/lang/catchable_error_002.phpt | 52 - tests/lang/each_binary_safety.phpt | 13 - tests/lang/error_2_exception_001.phpt | 45 - tests/lang/foreach_with_object_001.phpt | 25 - tests/lang/foreach_with_references_001.phpt | 32 - tests/lang/inc.inc | 3 - tests/lang/type_hints_001.phpt | 26 - tests/lang/type_hints_002.phpt | 28 - tests/lang/type_hints_003.phpt | 14 - tests/odbc-display.php | 19 - tests/odbc-t1.php | 38 - tests/odbc-t2.php | 82 - tests/odbc-t3.php | 95 - tests/odbc-t4.php | 91 - tests/odbc-t5.php | 137 - tests/output/ob_001.phpt | 8 - tests/output/ob_002.phpt | 9 - tests/output/ob_003.phpt | 13 - tests/output/ob_004.phpt | 11 - tests/output/ob_005.phpt | 14 - tests/output/ob_006.phpt | 12 - tests/output/ob_007.phpt | 11 - tests/output/ob_008.phpt | 11 - tests/output/ob_009.phpt | 12 - tests/output/ob_010.phpt | 13 - tests/output/ob_011.phpt | 13 - tests/output/ob_012.phpt | 22 - tests/output/ob_013.phpt | 105 - tests/output/ob_014.phpt | 14 - tests/output/ob_015.phpt | 11 - tests/output/ob_016.phpt | 20 - tests/output/ob_017.phpt | 34 - tests/output/ob_018.phpt | Bin 295 -> 0 bytes tests/output/ob_019.phpt | 51 - tests/output/ob_020.phpt | 38 - tests/quicktester.inc | 75 - tests/recurse | 21 - tests/run-test/test001.phpt | 6 - tests/run-test/test002.phpt | 18 - tests/run-test/test003.phpt | 6 - tests/run-test/test004.phpt | 12 - tests/run-test/test005.phpt | 40 - tests/run-test/test006.phpt | 9 - tests/run-test/test007.phpt | Bin 1191 -> 0 bytes tests/run-test/test008.phpt | 42 - tests/run-test/test008a.phpt | 40 - tests/run-test/test009.phpt | 12 - tests/run-test/test010.phpt | 17 - tests/run.html | 11 - tests/run.php | 17 - tests/scan_cases | 28 - tests/strings/001.phpt | 210 - tests/strings/002.phpt | 86 - tests/strings/004.phpt | 22 - tests/strings/bug22592.phpt | 32 - tests/strings/bug26703.phpt | 18 - tests/test.pl | 34 - tests/test_class_inheritance | 29 - tests/testarray | 21 - tests/testarray.pl | 5 - tests/testarray2 | 5 - tests/testarray2.pl | 3 - tests/testclassfunc | 9 - tests/testcom | 11 - tests/testcpdf | 97 - tests/testcpdfclock | 87 - tests/testdom | 73 - tests/testfe | 18 - tests/testfunc | 33 - tests/testfunc.pl | 20 - tests/testfunc2 | 19 - tests/testfunc2.pl | 22 - tests/testfuncref | 10 - tests/testhyperwave | 235 - tests/testinclude | 5 - tests/testobj | 29 - tests/testpfpro.php | 39 - tests/tests.dsp | 61 - tests/tests.mak | 27 - tests/testscanf.php | 113 - tests/testswf | 120 - tests/unicode/autodetect-SCSU.inc | 7 - tests/unicode/autodetect-SCSU.phpt | 11 - tests/unicode/autodetect-UTF16BE.inc | Bin 122 -> 0 bytes tests/unicode/autodetect-UTF16BE.phpt | 11 - tests/unicode/autodetect-UTF16LE.inc | Bin 122 -> 0 bytes tests/unicode/autodetect-UTF16LE.phpt | 11 - tests/unicode/autodetect-UTF32BE.inc | Bin 264 -> 0 bytes tests/unicode/autodetect-UTF32BE.phpt | 11 - tests/unicode/autodetect-UTF32LE.inc | Bin 264 -> 0 bytes tests/unicode/autodetect-UTF32LE.phpt | 11 - tests/unicode/autodetect-UTF7.inc | 7 - tests/unicode/autodetect-UTF7.phpt | 11 - tests/unicode/autodetect-UTF8.inc | 7 - tests/unicode/autodetect-UTF8.phpt | 11 - tests/unicode/enc-HZ.inc | 7 - tests/unicode/enc-HZ.phpt | 12 - tests/unicode/enc-ISO-2022-KR.inc | 7 - tests/unicode/enc-ISO-2022-KR.phpt | 12 - tests/unicode/enc-JIS.inc | 7 - tests/unicode/enc-JIS.phpt | 12 - tests/unicode/enc-SJIS.inc | 7 - tests/unicode/enc-SJIS.phpt | 12 - tests/unicode/encrt-HZ.phpt | 17 - tests/unicode/encrt-ISO-2022-KR.phpt | 17 - tests/unicode/encrt-JIS.phpt | 17 - tests/unicode/encrt-SJIS.phpt | 17 - tests/unicode/func/strpos.phpt | 42 - tests/unicode/func/strstr.phpt | 39 - tests/unicode/normalize_001.phpt | 11 - tests/unicode/normalize_002.phpt | 13 - tests/unicode/normalize_003.phpt | 20 - tests/unicode/normalize_004.phpt | 11 - unicode-gotchas.txt | 6 - unicode-issues.txt | 6 - unicode-progress.txt | 976 - unicode-todo.txt | 42 - win32/EngineSelect.bat | 5 - win32/EngineSelect.dsp | 85 - win32/build/Makefile | 162 - win32/build/buildconf.js | 263 - win32/build/config.w32 | 331 - win32/build/config.w32.h.in | 155 - win32/build/configure.tail | 6 - win32/build/confutils.js | 1553 - win32/build/cvsclean.js | 120 - win32/build/deplister.c | 60 - win32/build/mkdist.php | 420 - win32/build/php.ico | Bin 1718 -> 0 bytes win32/build/registersyslog.php | 45 - win32/build/template.rc | 69 - win32/build/wsyslog.mc | 28 - win32/builddef.bat | 7 - win32/crypt_win32.c | 562 - win32/crypt_win32.h | 33 - win32/flock.c | 84 - win32/flock.h | 11 - win32/glob.c | 926 - win32/glob.h | 101 - win32/globals.c | 73 - win32/grp.h | 26 - win32/install.txt | 1621 - win32/md5crypt.c | 163 - win32/md5crypt.h | 37 - win32/param.h | 16 - win32/php5.dsp | 134 - win32/php5.dsw | 107 - win32/php5dll.dsp | 1659 - win32/php5dllts.dsp | 2371 - win32/php5dllts.rc | 126 - win32/php5dllts.rc2 | 61 - win32/php5ts.dsp | 187 - win32/php5ts.dsw | 227 - win32/php5ts.rc | 126 - win32/php5ts.rc2 | 61 - win32/php5ts_cli.dsp | 175 - win32/php5ts_cli.rc | 126 - win32/php5ts_cli.rc2 | 61 - win32/php_modules.dsw | 473 - win32/php_registry.h | 8 - win32/php_win32_globals.h | 55 - win32/pws-php5cgi.reg | 6 - win32/pws-php5isapi.reg | 5 - win32/readdir.c | 148 - win32/readdir.h | 49 - win32/registry.c | 280 - win32/resource.h | 15 - win32/select.c | 176 - win32/select.h | 22 - win32/sendmail.c | 924 - win32/sendmail.h | 50 - win32/signal.h | 16 - win32/syslog.h | 78 - win32/syslog.reg | 5 - win32/testsuite.dsp | 150 - win32/time.c | 228 - win32/time.h | 43 - win32/unistd.h | 4 - win32/wfile.c | 17 - win32/wfile.h | 16 - win32/winutil.c | 33 - win32/winutil.h | 21 - win32/wsyslog.c | 136 - 5880 files changed, 27873 insertions(+), 1135411 deletions(-) delete mode 100644 .gdbinit delete mode 100644 CODING_STANDARDS delete mode 100644 CREDITS delete mode 100644 ChangeLog delete mode 100644 ChangeLog.1999.gz delete mode 100644 ChangeLog.2000.gz delete mode 100644 ChangeLog.2001.gz delete mode 100644 ChangeLog.2002.gz delete mode 100644 ChangeLog.2003.gz delete mode 100644 ChangeLog.2004.gz delete mode 100644 ChangeLog.2005.gz delete mode 100644 EXTENSIONS delete mode 100644 INSTALL delete mode 100644 LICENSE delete mode 100644 Makefile.frag delete mode 100644 Makefile.gcov delete mode 100644 Makefile.global delete mode 100644 NEWS delete mode 100644 README.CVS-RULES delete mode 100644 README.EXTENSIONS delete mode 100644 README.EXT_SKEL delete mode 100644 README.NEW-OUTPUT-API delete mode 100644 README.PARAMETER_PARSING_API delete mode 100644 README.PEAR delete mode 100644 README.PHP4-TO-PHP5-THIN-CHANGES delete mode 100644 README.QNX delete mode 100644 README.SELF-CONTAINED-EXTENSIONS delete mode 100644 README.STREAMS delete mode 100644 README.SUBMITTING_PATCH delete mode 100644 README.TESTING delete mode 100644 README.TESTING2 delete mode 100644 README.UNICODE delete mode 100644 README.UNICODE-UPGRADES delete mode 100644 README.UNIX-BUILD-SYSTEM delete mode 100644 README.UPDATING_TO_PHP6 delete mode 100644 README.WIN32-BUILD-SYSTEM delete mode 100644 README.Zeus delete mode 100644 README.input_filter delete mode 100644 TODO delete mode 100644 TODO-5.1 delete mode 100644 TODO-PHP5 delete mode 100644 TSRM/LICENSE delete mode 100644 TSRM/Makefile.am delete mode 100644 TSRM/TODO delete mode 100644 TSRM/TSRM.c delete mode 100644 TSRM/TSRM.dsp delete mode 100644 TSRM/TSRM.h delete mode 100644 TSRM/acconfig.h delete mode 100644 TSRM/acinclude.m4 delete mode 100644 TSRM/build.mk delete mode 100755 TSRM/buildconf delete mode 100644 TSRM/config.w32 delete mode 100644 TSRM/configure.in delete mode 100644 TSRM/readdir.h delete mode 100644 TSRM/threads.m4 delete mode 100644 TSRM/tsrm.m4 delete mode 100644 TSRM/tsrm_config.w32.h delete mode 100644 TSRM/tsrm_config_common.h delete mode 100644 TSRM/tsrm_nw.c delete mode 100644 TSRM/tsrm_nw.h delete mode 100644 TSRM/tsrm_strtok_r.c delete mode 100644 TSRM/tsrm_strtok_r.h delete mode 100644 TSRM/tsrm_virtual_cwd.c delete mode 100644 TSRM/tsrm_virtual_cwd.h delete mode 100644 TSRM/tsrm_win32.c delete mode 100644 TSRM/tsrm_win32.h delete mode 100644 Zend/ChangeLog delete mode 100644 Zend/FlexLexer.h delete mode 100644 Zend/LICENSE delete mode 100644 Zend/Makefile.am delete mode 100755 Zend/Makefile.frag delete mode 100644 Zend/OBJECTS2_HOWTO delete mode 100644 Zend/README.ZEND_MM delete mode 100644 Zend/README.ZEND_VM delete mode 100644 Zend/RFCs/001.txt delete mode 100644 Zend/RFCs/002.txt delete mode 100644 Zend/RFCs/003.txt delete mode 100644 Zend/ZEND_CHANGES delete mode 100644 Zend/Zend.dsp delete mode 100644 Zend/Zend.m4 delete mode 100644 Zend/ZendCore.dep delete mode 100644 Zend/ZendTS.dsp delete mode 100644 Zend/acconfig.h delete mode 100644 Zend/acinclude.m4 delete mode 100644 Zend/bench.php delete mode 100644 Zend/build.mk delete mode 100755 Zend/buildconf delete mode 100644 Zend/configure.in delete mode 100644 Zend/flex.skl delete mode 100644 Zend/header delete mode 100644 Zend/tests/001.phpt delete mode 100644 Zend/tests/002.phpt delete mode 100644 Zend/tests/003.phpt delete mode 100644 Zend/tests/004.phpt delete mode 100644 Zend/tests/005.phpt delete mode 100644 Zend/tests/006.phpt delete mode 100644 Zend/tests/007.phpt delete mode 100644 Zend/tests/008.phpt delete mode 100644 Zend/tests/009.phpt delete mode 100644 Zend/tests/010.phpt delete mode 100644 Zend/tests/011.phpt delete mode 100644 Zend/tests/012.phpt delete mode 100644 Zend/tests/013.phpt delete mode 100644 Zend/tests/014.inc delete mode 100644 Zend/tests/014.phpt delete mode 100644 Zend/tests/015.phpt delete mode 100644 Zend/tests/016.phpt delete mode 100644 Zend/tests/017.phpt delete mode 100644 Zend/tests/018.phpt delete mode 100644 Zend/tests/abstract-static.phpt delete mode 100755 Zend/tests/array_type_hint_001.phpt delete mode 100644 Zend/tests/bug19859.phpt delete mode 100755 Zend/tests/bug20240.phpt delete mode 100755 Zend/tests/bug20242.phpt delete mode 100755 Zend/tests/bug21478.phpt delete mode 100755 Zend/tests/bug21888.phpt delete mode 100755 Zend/tests/bug22725.phpt delete mode 100644 Zend/tests/bug22836.phpt delete mode 100644 Zend/tests/bug23104.phpt delete mode 100755 Zend/tests/bug24436.phpt delete mode 100644 Zend/tests/bug24635.phpt delete mode 100644 Zend/tests/bug24699.phpt delete mode 100644 Zend/tests/bug24773.phpt delete mode 100755 Zend/tests/bug24884.phpt delete mode 100644 Zend/tests/bug26010.phpt delete mode 100755 Zend/tests/bug26077.phpt delete mode 100755 Zend/tests/bug26166.phpt delete mode 100755 Zend/tests/bug26229.phpt delete mode 100755 Zend/tests/bug26281.phpt delete mode 100755 Zend/tests/bug26696.phpt delete mode 100755 Zend/tests/bug26697.phpt delete mode 100755 Zend/tests/bug26698.phpt delete mode 100755 Zend/tests/bug26801.phpt delete mode 100755 Zend/tests/bug26802.phpt delete mode 100755 Zend/tests/bug27268.phpt delete mode 100755 Zend/tests/bug27304.phpt delete mode 100755 Zend/tests/bug27598.phpt delete mode 100644 Zend/tests/bug27641.phpt delete mode 100755 Zend/tests/bug27669.phpt delete mode 100644 Zend/tests/bug27731.phpt delete mode 100755 Zend/tests/bug27798.phpt delete mode 100755 Zend/tests/bug28072.phpt delete mode 100755 Zend/tests/bug28377.phpt delete mode 100755 Zend/tests/bug28442.phpt delete mode 100755 Zend/tests/bug28444.phpt delete mode 100644 Zend/tests/bug29015.phpt delete mode 100644 Zend/tests/bug29104.phpt delete mode 100644 Zend/tests/bug29210.phpt delete mode 100755 Zend/tests/bug29368.phpt delete mode 100755 Zend/tests/bug29505.phpt delete mode 100755 Zend/tests/bug29674.phpt delete mode 100644 Zend/tests/bug29689.phpt delete mode 100644 Zend/tests/bug29883.phpt delete mode 100644 Zend/tests/bug29890.phpt delete mode 100755 Zend/tests/bug29896.phpt delete mode 100644 Zend/tests/bug29944.phpt delete mode 100755 Zend/tests/bug30080.phpt delete mode 100755 Zend/tests/bug30140.phpt delete mode 100755 Zend/tests/bug30161.phpt delete mode 100755 Zend/tests/bug30162.phpt delete mode 100755 Zend/tests/bug30346.phpt delete mode 100755 Zend/tests/bug30394.phpt delete mode 100644 Zend/tests/bug30407.phpt delete mode 100644 Zend/tests/bug30451.phpt delete mode 100755 Zend/tests/bug30519.phpt delete mode 100644 Zend/tests/bug30702.phpt delete mode 100755 Zend/tests/bug30707.phpt delete mode 100755 Zend/tests/bug30725.phpt delete mode 100755 Zend/tests/bug30791.phpt delete mode 100755 Zend/tests/bug30820.phpt delete mode 100755 Zend/tests/bug30828.phpt delete mode 100644 Zend/tests/bug30889.phpt delete mode 100644 Zend/tests/bug30922.phpt delete mode 100755 Zend/tests/bug30998.phpt delete mode 100644 Zend/tests/bug31098.phpt delete mode 100755 Zend/tests/bug31102.phpt delete mode 100755 Zend/tests/bug31177-2.phpt delete mode 100755 Zend/tests/bug31177.phpt delete mode 100755 Zend/tests/bug31341.phpt delete mode 100755 Zend/tests/bug31525.phpt delete mode 100644 Zend/tests/bug31683.phpt delete mode 100644 Zend/tests/bug31720.phpt delete mode 100755 Zend/tests/bug32226.phpt delete mode 100755 Zend/tests/bug32252.phpt delete mode 100755 Zend/tests/bug32290.phpt delete mode 100755 Zend/tests/bug32296.phpt delete mode 100755 Zend/tests/bug32322.phpt delete mode 100644 Zend/tests/bug32427.phpt delete mode 100755 Zend/tests/bug32428.phpt delete mode 100644 Zend/tests/bug32429.phpt delete mode 100755 Zend/tests/bug32596.phpt delete mode 100755 Zend/tests/bug32660.phpt delete mode 100644 Zend/tests/bug32674.phpt delete mode 100755 Zend/tests/bug32799.phpt delete mode 100644 Zend/tests/bug32833.phpt delete mode 100755 Zend/tests/bug32993.phpt delete mode 100755 Zend/tests/bug33116.phpt delete mode 100755 Zend/tests/bug33171.phpt delete mode 100755 Zend/tests/bug33257.phpt delete mode 100644 Zend/tests/bug33277.phpt delete mode 100644 Zend/tests/bug33282.phpt delete mode 100755 Zend/tests/bug33318.phpt delete mode 100755 Zend/tests/bug33512.phpt delete mode 100755 Zend/tests/bug33558.phpt delete mode 100755 Zend/tests/bug33710.phpt delete mode 100755 Zend/tests/bug33732.phpt delete mode 100644 Zend/tests/bug33771.phpt delete mode 100755 Zend/tests/bug33802.phpt delete mode 100755 Zend/tests/bug33996.phpt delete mode 100755 Zend/tests/bug33999.phpt delete mode 100755 Zend/tests/bug34045.phpt delete mode 100755 Zend/tests/bug34062.phpt delete mode 100755 Zend/tests/bug34064.phpt delete mode 100755 Zend/tests/bug34065.phpt delete mode 100755 Zend/tests/bug34137.phpt delete mode 100755 Zend/tests/bug34199.phpt delete mode 100755 Zend/tests/bug34260.phpt delete mode 100644 Zend/tests/bug34310.phpt delete mode 100755 Zend/tests/bug34358.phpt delete mode 100755 Zend/tests/bug34467.phpt delete mode 100755 Zend/tests/bug34518.phpt delete mode 100755 Zend/tests/bug34617.phpt delete mode 100755 Zend/tests/bug34678.phpt delete mode 100755 Zend/tests/bug34786.phpt delete mode 100644 Zend/tests/bug34873.phpt delete mode 100755 Zend/tests/bug34879.phpt delete mode 100755 Zend/tests/bug34893.phpt delete mode 100755 Zend/tests/bug35017.phpt delete mode 100755 Zend/tests/bug35106.phpt delete mode 100755 Zend/tests/bug35239.phpt delete mode 100755 Zend/tests/bug35393.phpt delete mode 100755 Zend/tests/bug35411.phpt delete mode 100755 Zend/tests/bug35437.phpt delete mode 100755 Zend/tests/bug35470.phpt delete mode 100755 Zend/tests/bug35509.phpt delete mode 100755 Zend/tests/bug35634.phpt delete mode 100755 Zend/tests/bug35655.phpt delete mode 100755 Zend/tests/bug36006.phpt delete mode 100755 Zend/tests/bug36037.phpt delete mode 100755 Zend/tests/bug36071.phpt delete mode 100755 Zend/tests/bug36214.phpt delete mode 100755 Zend/tests/bug36268.phpt delete mode 100755 Zend/tests/bug36303.phpt delete mode 100755 Zend/tests/bug36513.phpt delete mode 100755 Zend/tests/bug36568.phpt delete mode 100755 Zend/tests/bug36759.phpt delete mode 100755 Zend/tests/bug37046.phpt delete mode 100755 Zend/tests/bug37138.phpt delete mode 100755 Zend/tests/bug37144.phpt delete mode 100755 Zend/tests/bug37212.phpt delete mode 100644 Zend/tests/bug37251.phpt delete mode 100755 Zend/tests/bug37632.phpt delete mode 100755 Zend/tests/bug37667.phpt delete mode 100755 Zend/tests/bug37707.phpt delete mode 100755 Zend/tests/bug37811.phpt delete mode 100755 Zend/tests/bug38047.phpt delete mode 100755 Zend/tests/bug38146.phpt delete mode 100755 Zend/tests/bug38211.phpt delete mode 100755 Zend/tests/bug38220.phpt delete mode 100755 Zend/tests/bug38234.phpt delete mode 100755 Zend/tests/bug38287.phpt delete mode 100644 Zend/tests/bug38461.phpt delete mode 100755 Zend/tests/bug38623.phpt delete mode 100644 Zend/tests/bug38624.phpt delete mode 100755 Zend/tests/bug38772.phpt delete mode 100644 Zend/tests/bug38779.phpt delete mode 100644 Zend/tests/bug38779_1.phpt delete mode 100755 Zend/tests/bug38808.phpt delete mode 100755 Zend/tests/bug38942.phpt delete mode 100644 Zend/tests/bug39003.phpt delete mode 100755 Zend/tests/bug39017.phpt delete mode 100644 Zend/tests/bug39036.phpt delete mode 100755 Zend/tests/bug39297.phpt delete mode 100755 Zend/tests/bug39304.phpt delete mode 100755 Zend/tests/bug39438.phpt delete mode 100755 Zend/tests/bug39445.phpt delete mode 100755 Zend/tests/bug39449.phpt delete mode 100755 Zend/tests/bug39602.phpt delete mode 100755 Zend/tests/bug39721.phpt delete mode 100755 Zend/tests/bug39775.phpt delete mode 100755 Zend/tests/bug39825.phpt delete mode 100755 Zend/tests/bug39944.phpt delete mode 100755 Zend/tests/bug39990.phpt delete mode 100755 Zend/tests/bug40236.inc delete mode 100755 Zend/tests/bug40236.phpt delete mode 100755 Zend/tests/bug40261.phpt delete mode 100644 Zend/tests/bug40621.phpt delete mode 100755 Zend/tests/bug40770.phpt delete mode 100644 Zend/tests/bug40784.phpt delete mode 100755 Zend/tests/bug40809.phpt delete mode 100644 Zend/tests/bug40815.phpt delete mode 100755 Zend/tests/bug40833.phpt delete mode 100755 Zend/tests/bug_debug_backtrace.phpt delete mode 100755 Zend/tests/catch.phpt delete mode 100755 Zend/tests/catch_002.phpt delete mode 100755 Zend/tests/catch_003.phpt delete mode 100755 Zend/tests/catch_004.phpt delete mode 100755 Zend/tests/dtor_scope.phpt delete mode 100644 Zend/tests/errmsg_001.phpt delete mode 100644 Zend/tests/errmsg_002.phpt delete mode 100644 Zend/tests/errmsg_003.phpt delete mode 100644 Zend/tests/errmsg_004.phpt delete mode 100644 Zend/tests/errmsg_005.phpt delete mode 100644 Zend/tests/errmsg_006.phpt delete mode 100644 Zend/tests/errmsg_007.phpt delete mode 100644 Zend/tests/errmsg_008.phpt delete mode 100644 Zend/tests/errmsg_009.phpt delete mode 100644 Zend/tests/errmsg_010.phpt delete mode 100644 Zend/tests/errmsg_011.phpt delete mode 100644 Zend/tests/errmsg_012.phpt delete mode 100644 Zend/tests/errmsg_013.phpt delete mode 100644 Zend/tests/errmsg_014.phpt delete mode 100644 Zend/tests/errmsg_015.phpt delete mode 100644 Zend/tests/errmsg_016.phpt delete mode 100644 Zend/tests/errmsg_017.phpt delete mode 100644 Zend/tests/errmsg_018.phpt delete mode 100644 Zend/tests/errmsg_019.phpt delete mode 100644 Zend/tests/errmsg_020.phpt delete mode 100644 Zend/tests/errmsg_021.phpt delete mode 100644 Zend/tests/errmsg_022.phpt delete mode 100644 Zend/tests/errmsg_023.phpt delete mode 100644 Zend/tests/errmsg_024.phpt delete mode 100644 Zend/tests/errmsg_025.phpt delete mode 100644 Zend/tests/errmsg_026.phpt delete mode 100644 Zend/tests/errmsg_027.phpt delete mode 100644 Zend/tests/errmsg_028.phpt delete mode 100644 Zend/tests/errmsg_029.phpt delete mode 100644 Zend/tests/errmsg_030.phpt delete mode 100644 Zend/tests/errmsg_031.phpt delete mode 100644 Zend/tests/errmsg_032.phpt delete mode 100644 Zend/tests/errmsg_033.phpt delete mode 100644 Zend/tests/errmsg_034.phpt delete mode 100644 Zend/tests/errmsg_035.phpt delete mode 100644 Zend/tests/errmsg_036.phpt delete mode 100644 Zend/tests/errmsg_037.phpt delete mode 100644 Zend/tests/errmsg_038.phpt delete mode 100644 Zend/tests/errmsg_039.phpt delete mode 100644 Zend/tests/errmsg_040.phpt delete mode 100644 Zend/tests/errmsg_041.phpt delete mode 100644 Zend/tests/errmsg_042.phpt delete mode 100644 Zend/tests/errmsg_043.phpt delete mode 100644 Zend/tests/error_reporting01.phpt delete mode 100644 Zend/tests/error_reporting02.phpt delete mode 100644 Zend/tests/error_reporting03.phpt delete mode 100644 Zend/tests/error_reporting04.phpt delete mode 100644 Zend/tests/error_reporting05.phpt delete mode 100644 Zend/tests/error_reporting06.phpt delete mode 100644 Zend/tests/error_reporting07.phpt delete mode 100644 Zend/tests/error_reporting08.phpt delete mode 100644 Zend/tests/error_reporting09.phpt delete mode 100644 Zend/tests/error_reporting10.phpt delete mode 100644 Zend/tests/foreach_undefined.phpt delete mode 100644 Zend/tests/globals.inc delete mode 100644 Zend/tests/globals_001.phpt delete mode 100644 Zend/tests/globals_002.phpt delete mode 100644 Zend/tests/globals_003.phpt delete mode 100644 Zend/tests/globals_004.phpt delete mode 100644 Zend/tests/halt01.phpt delete mode 100644 Zend/tests/halt02.phpt delete mode 100644 Zend/tests/halt03.phpt delete mode 100755 Zend/tests/instanceof.phpt delete mode 100644 Zend/tests/int_overflow_32bit.phpt delete mode 100644 Zend/tests/int_overflow_64bit.phpt delete mode 100644 Zend/tests/int_underflow_32bit.phpt delete mode 100644 Zend/tests/int_underflow_64bit.phpt delete mode 100755 Zend/tests/is_a.phpt delete mode 100755 Zend/tests/jump01.phpt delete mode 100755 Zend/tests/jump02.phpt delete mode 100755 Zend/tests/jump03.phpt delete mode 100755 Zend/tests/jump04.phpt delete mode 100755 Zend/tests/jump05.phpt delete mode 100755 Zend/tests/jump06.phpt delete mode 100755 Zend/tests/jump07.phpt delete mode 100755 Zend/tests/jump08.phpt delete mode 100755 Zend/tests/jump09.phpt delete mode 100755 Zend/tests/jump10.phpt delete mode 100644 Zend/tests/method_exists.phpt delete mode 100644 Zend/tests/object-null.phpt delete mode 100755 Zend/tests/object_handlers.phpt delete mode 100644 Zend/tests/objects_001.phpt delete mode 100644 Zend/tests/objects_002.phpt delete mode 100644 Zend/tests/objects_003.phpt delete mode 100644 Zend/tests/objects_004.phpt delete mode 100644 Zend/tests/objects_005.phpt delete mode 100644 Zend/tests/objects_006.phpt delete mode 100644 Zend/tests/objects_007.phpt delete mode 100644 Zend/tests/objects_008.phpt delete mode 100644 Zend/tests/objects_009.phpt delete mode 100644 Zend/tests/objects_010.phpt delete mode 100644 Zend/tests/objects_011.phpt delete mode 100644 Zend/tests/objects_012.phpt delete mode 100644 Zend/tests/objects_013.phpt delete mode 100644 Zend/tests/objects_014.phpt delete mode 100755 Zend/tests/objects_015.phpt delete mode 100644 Zend/tests/offset_array.phpt delete mode 100644 Zend/tests/offset_assign.phpt delete mode 100644 Zend/tests/offset_bool.phpt delete mode 100644 Zend/tests/offset_long.phpt delete mode 100644 Zend/tests/offset_null.phpt delete mode 100644 Zend/tests/offset_object.phpt delete mode 100644 Zend/tests/offset_string.phpt delete mode 100644 Zend/tests/strict_001.phpt delete mode 100644 Zend/tests/strict_002.phpt delete mode 100644 Zend/tests/unset.inc delete mode 100644 Zend/tests/unset_cv01.phpt delete mode 100644 Zend/tests/unset_cv02.phpt delete mode 100644 Zend/tests/unset_cv03.phpt delete mode 100644 Zend/tests/unset_cv04.phpt delete mode 100644 Zend/tests/unset_cv05.phpt delete mode 100644 Zend/tests/unset_cv07.phpt delete mode 100644 Zend/tests/unset_cv08.phpt delete mode 100644 Zend/tests/unset_cv09.phpt delete mode 100644 Zend/tests/unset_cv10.phpt delete mode 100644 Zend/tests/unset_cv11.phpt delete mode 100755 Zend/tests/unset_cv12.phpt delete mode 100644 Zend/tests/zend2.php.txt delete mode 100644 Zend/tests/zend_operators.phpt delete mode 100644 Zend/tests/zend_strtod.phpt delete mode 100644 Zend/zend.c delete mode 100644 Zend/zend.h delete mode 100644 Zend/zend.ico delete mode 100644 Zend/zend_API.c delete mode 100644 Zend/zend_API.h delete mode 100644 Zend/zend_alloc.c delete mode 100644 Zend/zend_alloc.h delete mode 100644 Zend/zend_arg_defs.c delete mode 100644 Zend/zend_builtin_functions.c delete mode 100644 Zend/zend_builtin_functions.h delete mode 100644 Zend/zend_compile.c delete mode 100644 Zend/zend_compile.h delete mode 100644 Zend/zend_config.nw.h delete mode 100644 Zend/zend_config.w32.h delete mode 100644 Zend/zend_constants.c delete mode 100644 Zend/zend_constants.h delete mode 100644 Zend/zend_default_classes.c delete mode 100644 Zend/zend_dynamic_array.c delete mode 100644 Zend/zend_dynamic_array.h delete mode 100644 Zend/zend_errors.h delete mode 100644 Zend/zend_exceptions.c delete mode 100644 Zend/zend_exceptions.h delete mode 100644 Zend/zend_execute.c delete mode 100644 Zend/zend_execute.h delete mode 100644 Zend/zend_execute_API.c delete mode 100644 Zend/zend_extensions.c delete mode 100644 Zend/zend_extensions.h delete mode 100644 Zend/zend_fast_cache.h delete mode 100644 Zend/zend_globals.h delete mode 100644 Zend/zend_globals_macros.h delete mode 100644 Zend/zend_hash.c delete mode 100644 Zend/zend_hash.h delete mode 100644 Zend/zend_highlight.c delete mode 100644 Zend/zend_highlight.h delete mode 100644 Zend/zend_indent.c delete mode 100644 Zend/zend_indent.h delete mode 100644 Zend/zend_ini.c delete mode 100644 Zend/zend_ini.h delete mode 100644 Zend/zend_ini_parser.y delete mode 100644 Zend/zend_ini_scanner.h delete mode 100644 Zend/zend_ini_scanner.l delete mode 100755 Zend/zend_interfaces.c delete mode 100755 Zend/zend_interfaces.h delete mode 100644 Zend/zend_istdiostream.h delete mode 100755 Zend/zend_iterators.c delete mode 100755 Zend/zend_iterators.h delete mode 100644 Zend/zend_language_parser.y delete mode 100644 Zend/zend_language_scanner.h delete mode 100644 Zend/zend_language_scanner.l delete mode 100644 Zend/zend_list.c delete mode 100644 Zend/zend_list.h delete mode 100644 Zend/zend_llist.c delete mode 100644 Zend/zend_llist.h delete mode 100644 Zend/zend_modules.h delete mode 100644 Zend/zend_multiply.h delete mode 100644 Zend/zend_object_handlers.c delete mode 100644 Zend/zend_object_handlers.h delete mode 100644 Zend/zend_objects.c delete mode 100644 Zend/zend_objects.h delete mode 100644 Zend/zend_objects_API.c delete mode 100644 Zend/zend_objects_API.h delete mode 100644 Zend/zend_opcode.c delete mode 100644 Zend/zend_operators.c delete mode 100644 Zend/zend_operators.h delete mode 100644 Zend/zend_ptr_stack.c delete mode 100644 Zend/zend_ptr_stack.h delete mode 100644 Zend/zend_qsort.c delete mode 100644 Zend/zend_qsort.h delete mode 100644 Zend/zend_sprintf.c delete mode 100644 Zend/zend_stack.c delete mode 100644 Zend/zend_stack.h delete mode 100644 Zend/zend_static_allocator.c delete mode 100644 Zend/zend_static_allocator.h delete mode 100644 Zend/zend_stream.c delete mode 100644 Zend/zend_stream.h delete mode 100644 Zend/zend_strtod.c delete mode 100644 Zend/zend_strtod.h delete mode 100644 Zend/zend_strtol.c delete mode 100644 Zend/zend_ts_hash.c delete mode 100644 Zend/zend_ts_hash.h delete mode 100644 Zend/zend_types.h delete mode 100644 Zend/zend_unicode.c delete mode 100644 Zend/zend_unicode.h delete mode 100644 Zend/zend_variables.c delete mode 100644 Zend/zend_variables.h delete mode 100644 Zend/zend_vm.h delete mode 100644 Zend/zend_vm_def.h delete mode 100644 Zend/zend_vm_execute.h delete mode 100644 Zend/zend_vm_execute.skl delete mode 100644 Zend/zend_vm_gen.php delete mode 100644 Zend/zend_vm_opcodes.h delete mode 100644 acconfig.h.in delete mode 100644 acinclude.m4 delete mode 100644 build/build.mk delete mode 100644 build/build2.mk delete mode 100755 build/buildcheck.sh delete mode 100755 build/config-stubs delete mode 100644 build/genif.sh delete mode 100644 build/libtool.m4 delete mode 100644 build/mkdep.awk delete mode 100644 build/order_by_dep.awk delete mode 100644 build/print_include.awk delete mode 100644 build/scan_makefile_in.awk delete mode 100755 build/shtool delete mode 100755 buildconf delete mode 100644 buildconf.bat delete mode 100644 config.guess delete mode 100644 config.sub delete mode 100644 configure.in delete mode 100755 cvsclean delete mode 100755 cvsclean.bat delete mode 100644 ext/bcmath/CREDITS delete mode 100644 ext/bcmath/bcmath.c delete mode 100644 ext/bcmath/config.m4 delete mode 100644 ext/bcmath/config.w32 delete mode 100644 ext/bcmath/libbcmath/AUTHORS delete mode 100644 ext/bcmath/libbcmath/COPYING.LIB delete mode 100644 ext/bcmath/libbcmath/ChangeLog delete mode 100644 ext/bcmath/libbcmath/FAQ delete mode 100644 ext/bcmath/libbcmath/INSTALL delete mode 100644 ext/bcmath/libbcmath/Makefile.am delete mode 100644 ext/bcmath/libbcmath/NEWS delete mode 100644 ext/bcmath/libbcmath/README delete mode 100644 ext/bcmath/libbcmath/acconfig.h delete mode 100644 ext/bcmath/libbcmath/aclocal.m4 delete mode 100644 ext/bcmath/libbcmath/config.h.in delete mode 100644 ext/bcmath/libbcmath/configure delete mode 100644 ext/bcmath/libbcmath/configure.in delete mode 100644 ext/bcmath/libbcmath/install-sh delete mode 100644 ext/bcmath/libbcmath/missing delete mode 100644 ext/bcmath/libbcmath/mkinstalldirs delete mode 100644 ext/bcmath/libbcmath/src/Makefile.am delete mode 100644 ext/bcmath/libbcmath/src/add.c delete mode 100644 ext/bcmath/libbcmath/src/bcmath.h delete mode 100644 ext/bcmath/libbcmath/src/compare.c delete mode 100644 ext/bcmath/libbcmath/src/config.h delete mode 100644 ext/bcmath/libbcmath/src/debug.c delete mode 100644 ext/bcmath/libbcmath/src/div.c delete mode 100644 ext/bcmath/libbcmath/src/divmod.c delete mode 100644 ext/bcmath/libbcmath/src/doaddsub.c delete mode 100644 ext/bcmath/libbcmath/src/init.c delete mode 100644 ext/bcmath/libbcmath/src/int2num.c delete mode 100644 ext/bcmath/libbcmath/src/nearzero.c delete mode 100644 ext/bcmath/libbcmath/src/neg.c delete mode 100644 ext/bcmath/libbcmath/src/num2long.c delete mode 100644 ext/bcmath/libbcmath/src/num2str.c delete mode 100644 ext/bcmath/libbcmath/src/outofmem.c delete mode 100644 ext/bcmath/libbcmath/src/output.c delete mode 100644 ext/bcmath/libbcmath/src/private.h delete mode 100644 ext/bcmath/libbcmath/src/raise.c delete mode 100644 ext/bcmath/libbcmath/src/raisemod.c delete mode 100644 ext/bcmath/libbcmath/src/recmul.c delete mode 100644 ext/bcmath/libbcmath/src/rmzero.c delete mode 100644 ext/bcmath/libbcmath/src/rt.c delete mode 100644 ext/bcmath/libbcmath/src/sqrt.c delete mode 100644 ext/bcmath/libbcmath/src/str2num.c delete mode 100644 ext/bcmath/libbcmath/src/sub.c delete mode 100644 ext/bcmath/libbcmath/src/zero.c delete mode 100644 ext/bcmath/package.xml delete mode 100644 ext/bcmath/php_bcmath.h delete mode 100644 ext/bcmath/tests/bcadd.phpt delete mode 100644 ext/bcmath/tests/bccomp.phpt delete mode 100644 ext/bcmath/tests/bcdiv.phpt delete mode 100644 ext/bcmath/tests/bcmod.phpt delete mode 100644 ext/bcmath/tests/bcmul.phpt delete mode 100644 ext/bcmath/tests/bcpow.phpt delete mode 100644 ext/bcmath/tests/bcscale.phpt delete mode 100644 ext/bcmath/tests/bcsqrt.phpt delete mode 100644 ext/bcmath/tests/bcsub.phpt delete mode 100644 ext/bz2/CREDITS delete mode 100644 ext/bz2/bz2.c delete mode 100644 ext/bz2/bz2.dsp delete mode 100644 ext/bz2/bz2_filter.c delete mode 100644 ext/bz2/config.m4 delete mode 100644 ext/bz2/config.w32 delete mode 100644 ext/bz2/package.xml delete mode 100644 ext/bz2/php_bz2.def delete mode 100644 ext/bz2/php_bz2.h delete mode 100644 ext/bz2/tests/001.phpt delete mode 100644 ext/bz2/tests/002.phpt delete mode 100644 ext/bz2/tests/003.phpt delete mode 100644 ext/bz2/tests/003.txt.bz2 delete mode 100644 ext/bz2/tests/004.phpt delete mode 100644 ext/bz2/tests/004_1.txt.bz2 delete mode 100644 ext/bz2/tests/004_2.txt.bz2 delete mode 100644 ext/bz2/tests/005.phpt delete mode 100644 ext/bz2/tests/bz2_filter_compress.phpt delete mode 100644 ext/bz2/tests/bz2_filter_decompress.phpt delete mode 100644 ext/bz2/tests/with_files.phpt delete mode 100644 ext/bz2/tests/with_strings.phpt delete mode 100644 ext/calendar/CREDITS delete mode 100644 ext/calendar/cal_unix.c delete mode 100644 ext/calendar/calendar.c delete mode 100644 ext/calendar/config.m4 delete mode 100644 ext/calendar/config.w32 delete mode 100644 ext/calendar/dow.c delete mode 100644 ext/calendar/easter.c delete mode 100644 ext/calendar/french.c delete mode 100644 ext/calendar/gregor.c delete mode 100644 ext/calendar/jewish.c delete mode 100644 ext/calendar/julian.c delete mode 100644 ext/calendar/package.xml delete mode 100644 ext/calendar/php_calendar.h delete mode 100644 ext/calendar/sdncal.h delete mode 100644 ext/calendar/tests/cal_days_in_month.phpt delete mode 100644 ext/calendar/tests/cal_from_jd.phpt delete mode 100644 ext/calendar/tests/cal_info.phpt delete mode 100644 ext/calendar/tests/cal_to_jd.phpt delete mode 100644 ext/calendar/tests/easter_date.phpt delete mode 100644 ext/calendar/tests/easter_days.phpt delete mode 100644 ext/calendar/tests/frenchtojd.phpt delete mode 100644 ext/calendar/tests/gregoriantojd.phpt delete mode 100644 ext/calendar/tests/jddayofweek.phpt delete mode 100644 ext/calendar/tests/jdmonthname.phpt delete mode 100644 ext/calendar/tests/jdtofrench.phpt delete mode 100644 ext/calendar/tests/jdtogregorian.phpt delete mode 100644 ext/calendar/tests/jdtojewish.phpt delete mode 100644 ext/calendar/tests/jdtojulian.phpt delete mode 100644 ext/calendar/tests/jdtomonthname.phpt delete mode 100644 ext/calendar/tests/jdtounix.phpt delete mode 100644 ext/calendar/tests/jewishtojd.phpt delete mode 100644 ext/calendar/tests/juliantojd.phpt delete mode 100644 ext/calendar/tests/skipif.inc delete mode 100644 ext/calendar/tests/unixtojd.phpt delete mode 100644 ext/com_dotnet/CREDITS delete mode 100644 ext/com_dotnet/README delete mode 100644 ext/com_dotnet/com_com.c delete mode 100644 ext/com_dotnet/com_dotnet.c delete mode 100644 ext/com_dotnet/com_extension.c delete mode 100644 ext/com_dotnet/com_handlers.c delete mode 100644 ext/com_dotnet/com_iterator.c delete mode 100644 ext/com_dotnet/com_misc.c delete mode 100644 ext/com_dotnet/com_olechar.c delete mode 100755 ext/com_dotnet/com_persist.c delete mode 100644 ext/com_dotnet/com_saproxy.c delete mode 100644 ext/com_dotnet/com_typeinfo.c delete mode 100644 ext/com_dotnet/com_variant.c delete mode 100644 ext/com_dotnet/com_wrapper.c delete mode 100644 ext/com_dotnet/config.w32 delete mode 100644 ext/com_dotnet/package.xml delete mode 100644 ext/com_dotnet/php_com_dotnet.h delete mode 100644 ext/com_dotnet/php_com_dotnet_internal.h delete mode 100755 ext/com_dotnet/tests/27974.phpt delete mode 100644 ext/com_dotnet/tests/bug33386.phpt delete mode 100644 ext/com_dotnet/tests/bug34272.phpt delete mode 100644 ext/com_dotnet/tests/bug39596.phpt delete mode 100644 ext/com_dotnet/tests/bug39606.phpt delete mode 100644 ext/com_dotnet/tests/variants.phpt delete mode 100644 ext/ctype/CREDITS delete mode 100644 ext/ctype/README delete mode 100644 ext/ctype/config.m4 delete mode 100644 ext/ctype/config.w32 delete mode 100644 ext/ctype/ctype.c delete mode 100644 ext/ctype/ctype.dsp delete mode 100644 ext/ctype/ctype.xml delete mode 100644 ext/ctype/package.xml delete mode 100644 ext/ctype/php_ctype.h delete mode 100644 ext/ctype/tests/001.phpt delete mode 100644 ext/ctype/tests/002.phpt delete mode 100644 ext/ctype/tests/bug25745.phpt delete mode 100644 ext/ctype/tests/bug34645.phpt delete mode 100644 ext/curl/CREDITS delete mode 100644 ext/curl/config.m4 delete mode 100644 ext/curl/config.w32 delete mode 100644 ext/curl/curl.dsp delete mode 100644 ext/curl/interface.c delete mode 100644 ext/curl/multi.c delete mode 100644 ext/curl/package.xml delete mode 100644 ext/curl/php_curl.h delete mode 100644 ext/curl/streams.c delete mode 100644 ext/date/CREDITS delete mode 100644 ext/date/TODO delete mode 100644 ext/date/config.m4 delete mode 100755 ext/date/config.w32 delete mode 100644 ext/date/lib/README delete mode 100644 ext/date/lib/astro.c delete mode 100644 ext/date/lib/astro.h delete mode 100644 ext/date/lib/dow.c delete mode 100644 ext/date/lib/fallbackmap.h delete mode 100644 ext/date/lib/parse_date.c delete mode 100644 ext/date/lib/parse_date.re delete mode 100644 ext/date/lib/parse_tz.c delete mode 100644 ext/date/lib/timelib.c delete mode 100644 ext/date/lib/timelib.h delete mode 100644 ext/date/lib/timelib.m4 delete mode 100644 ext/date/lib/timelib_structs.h delete mode 100644 ext/date/lib/timezonedb.h delete mode 100644 ext/date/lib/timezonemap.h delete mode 100644 ext/date/lib/tm2unixtime.c delete mode 100644 ext/date/lib/unixtime2tm.c delete mode 100644 ext/date/php_date.c delete mode 100644 ext/date/php_date.h delete mode 100644 ext/date/tests/002.phpt delete mode 100644 ext/date/tests/003.phpt delete mode 100644 ext/date/tests/004.phpt delete mode 100644 ext/date/tests/005.phpt delete mode 100644 ext/date/tests/006.phpt delete mode 100644 ext/date/tests/007.phpt delete mode 100644 ext/date/tests/008.phpt delete mode 100644 ext/date/tests/009.phpt delete mode 100644 ext/date/tests/010.phpt delete mode 100644 ext/date/tests/011.phpt delete mode 100644 ext/date/tests/012.phpt delete mode 100644 ext/date/tests/013.phpt delete mode 100644 ext/date/tests/014.phpt delete mode 100644 ext/date/tests/bug13142.phpt delete mode 100644 ext/date/tests/bug14561.phpt delete mode 100644 ext/date/tests/bug17988.phpt delete mode 100644 ext/date/tests/bug20382-1.phpt delete mode 100644 ext/date/tests/bug20382-2.phpt delete mode 100644 ext/date/tests/bug21399.phpt delete mode 100644 ext/date/tests/bug21966.phpt delete mode 100644 ext/date/tests/bug26090.phpt delete mode 100644 ext/date/tests/bug26198.phpt delete mode 100644 ext/date/tests/bug26317.phpt delete mode 100644 ext/date/tests/bug26320.phpt delete mode 100644 ext/date/tests/bug26694.phpt delete mode 100644 ext/date/tests/bug27719.phpt delete mode 100644 ext/date/tests/bug27780.phpt delete mode 100644 ext/date/tests/bug28024.phpt delete mode 100644 ext/date/tests/bug28088.phpt delete mode 100644 ext/date/tests/bug28599.phpt delete mode 100644 ext/date/tests/bug29150.phpt delete mode 100644 ext/date/tests/bug29585.phpt delete mode 100644 ext/date/tests/bug29595.phpt delete mode 100644 ext/date/tests/bug30096.phpt delete mode 100644 ext/date/tests/bug30532.phpt delete mode 100644 ext/date/tests/bug32086.phpt delete mode 100644 ext/date/tests/bug32270.phpt delete mode 100644 ext/date/tests/bug32555.phpt delete mode 100644 ext/date/tests/bug32588.phpt delete mode 100644 ext/date/tests/bug33056.phpt delete mode 100644 ext/date/tests/bug33414-1.phpt delete mode 100644 ext/date/tests/bug33414-2.phpt delete mode 100644 ext/date/tests/bug33415-1.phpt delete mode 100644 ext/date/tests/bug33415-2.phpt delete mode 100644 ext/date/tests/bug33452.phpt delete mode 100644 ext/date/tests/bug33532.phpt delete mode 100644 ext/date/tests/bug33536.phpt delete mode 100644 ext/date/tests/bug33562.phpt delete mode 100644 ext/date/tests/bug33563.phpt delete mode 100644 ext/date/tests/bug33578.phpt delete mode 100644 ext/date/tests/bug33869.phpt delete mode 100644 ext/date/tests/bug33957.phpt delete mode 100644 ext/date/tests/bug34087.phpt delete mode 100644 ext/date/tests/bug34304.phpt delete mode 100644 ext/date/tests/bug34676.phpt delete mode 100644 ext/date/tests/bug34771.phpt delete mode 100644 ext/date/tests/bug35143.phpt delete mode 100644 ext/date/tests/bug35218.phpt delete mode 100644 ext/date/tests/bug35414.phpt delete mode 100644 ext/date/tests/bug35422.phpt delete mode 100644 ext/date/tests/bug35425.phpt delete mode 100644 ext/date/tests/bug35456.phpt delete mode 100644 ext/date/tests/bug35499.phpt delete mode 100644 ext/date/tests/bug35624.phpt delete mode 100644 ext/date/tests/bug35630.phpt delete mode 100644 ext/date/tests/bug35699.phpt delete mode 100644 ext/date/tests/bug35705.phpt delete mode 100644 ext/date/tests/bug35885.phpt delete mode 100644 ext/date/tests/bug35887.phpt delete mode 100644 ext/date/tests/bug36224.phpt delete mode 100644 ext/date/tests/bug36510.phpt delete mode 100644 ext/date/tests/bug36599.phpt delete mode 100644 ext/date/tests/bug36988.phpt delete mode 100644 ext/date/tests/bug37017.phpt delete mode 100644 ext/date/tests/bug37368.phpt delete mode 100644 ext/date/tests/bug37514.phpt delete mode 100644 ext/date/tests/bug37616.phpt delete mode 100644 ext/date/tests/bug37747.phpt delete mode 100644 ext/date/tests/bug38229.phpt delete mode 100644 ext/date/tests/bug39782.phpt delete mode 100644 ext/date/tests/date.phpt delete mode 100644 ext/date/tests/date_constants.phpt delete mode 100644 ext/date/tests/date_create-1.phpt delete mode 100644 ext/date/tests/date_create-2.phpt delete mode 100644 ext/date/tests/date_create-3.phpt delete mode 100644 ext/date/tests/date_default_timezone_get-1.phpt delete mode 100644 ext/date/tests/date_default_timezone_get-2.phpt delete mode 100644 ext/date/tests/date_default_timezone_get-3.phpt delete mode 100644 ext/date/tests/date_default_timezone_set-1.phpt delete mode 100644 ext/date/tests/date_modify-1.phpt delete mode 100644 ext/date/tests/date_modify-2.phpt delete mode 100644 ext/date/tests/date_parse_001.phpt delete mode 100644 ext/date/tests/date_sun_info_001.phpt delete mode 100644 ext/date/tests/default-timezone-1.phpt delete mode 100644 ext/date/tests/default-timezone-2.phpt delete mode 100644 ext/date/tests/format-negative-timestamp.phpt delete mode 100644 ext/date/tests/mktime-1.phpt delete mode 100644 ext/date/tests/mktime-2.phpt delete mode 100644 ext/date/tests/mktime-3.phpt delete mode 100644 ext/date/tests/oo_001.phpt delete mode 100644 ext/date/tests/oo_002.phpt delete mode 100755 ext/date/tests/strtotime-mysql.phpt delete mode 100644 ext/date/tests/strtotime.phpt delete mode 100644 ext/date/tests/strtotime2.phpt delete mode 100644 ext/date/tests/strtotime3.phpt delete mode 100644 ext/date/tests/timezone-configuration.phpt delete mode 100644 ext/date/tests/timezones.phpt delete mode 100644 ext/dba/CREDITS delete mode 100755 ext/dba/README delete mode 100644 ext/dba/config.m4 delete mode 100644 ext/dba/config.w32 delete mode 100644 ext/dba/dba.c delete mode 100644 ext/dba/dba.dsp delete mode 100644 ext/dba/dba_cdb.c delete mode 100755 ext/dba/dba_db1.c delete mode 100644 ext/dba/dba_db2.c delete mode 100644 ext/dba/dba_db3.c delete mode 100644 ext/dba/dba_db4.c delete mode 100644 ext/dba/dba_dbm.c delete mode 100644 ext/dba/dba_flatfile.c delete mode 100644 ext/dba/dba_gdbm.c delete mode 100644 ext/dba/dba_inifile.c delete mode 100644 ext/dba/dba_ndbm.c delete mode 100755 ext/dba/dba_qdbm.c delete mode 100755 ext/dba/install_cdb.sh delete mode 100644 ext/dba/libcdb/cdb.c delete mode 100644 ext/dba/libcdb/cdb.h delete mode 100644 ext/dba/libcdb/cdb_make.c delete mode 100644 ext/dba/libcdb/cdb_make.h delete mode 100644 ext/dba/libcdb/uint32.c delete mode 100644 ext/dba/libcdb/uint32.h delete mode 100644 ext/dba/libflatfile/flatfile.c delete mode 100644 ext/dba/libflatfile/flatfile.h delete mode 100644 ext/dba/libinifile/inifile.c delete mode 100644 ext/dba/libinifile/inifile.h delete mode 100644 ext/dba/php_cdb.h delete mode 100755 ext/dba/php_db1.h delete mode 100644 ext/dba/php_db2.h delete mode 100644 ext/dba/php_db3.h delete mode 100644 ext/dba/php_db4.h delete mode 100644 ext/dba/php_dba.h delete mode 100644 ext/dba/php_dbm.h delete mode 100644 ext/dba/php_flatfile.h delete mode 100644 ext/dba/php_gdbm.h delete mode 100644 ext/dba/php_inifile.h delete mode 100644 ext/dba/php_ndbm.h delete mode 100644 ext/dba/php_qdbm.h delete mode 100755 ext/dba/tests/bug36436.phpt delete mode 100755 ext/dba/tests/bug38698.phpt delete mode 100644 ext/dba/tests/dba001.phpt delete mode 100644 ext/dba/tests/dba002.phpt delete mode 100644 ext/dba/tests/dba003.phpt delete mode 100644 ext/dba/tests/dba004.phpt delete mode 100644 ext/dba/tests/dba005.phpt delete mode 100644 ext/dba/tests/dba006.phpt delete mode 100644 ext/dba/tests/dba007.phpt delete mode 100644 ext/dba/tests/dba008.phpt delete mode 100755 ext/dba/tests/dba009.phpt delete mode 100644 ext/dba/tests/dba_cdb.phpt delete mode 100644 ext/dba/tests/dba_cdb_make.phpt delete mode 100644 ext/dba/tests/dba_cdb_read.phpt delete mode 100755 ext/dba/tests/dba_db1.phpt delete mode 100644 ext/dba/tests/dba_db2.phpt delete mode 100644 ext/dba/tests/dba_db3.phpt delete mode 100644 ext/dba/tests/dba_db4.phpt delete mode 100644 ext/dba/tests/dba_dbm.phpt delete mode 100644 ext/dba/tests/dba_flatfile.phpt delete mode 100644 ext/dba/tests/dba_gdbm.phpt delete mode 100644 ext/dba/tests/dba_handler.inc delete mode 100644 ext/dba/tests/dba_inifile.phpt delete mode 100644 ext/dba/tests/dba_ndbm.phpt delete mode 100755 ext/dba/tests/dba_qdbm.phpt delete mode 100644 ext/dba/tests/skipif.inc delete mode 100644 ext/dba/tests/test.cdb delete mode 100644 ext/dba/tests/test.inc delete mode 100644 ext/dbase/CREDITS delete mode 100644 ext/dbase/config.m4 delete mode 100644 ext/dbase/config.w32 delete mode 100644 ext/dbase/dbase.c delete mode 100644 ext/dbase/dbase.dsp delete mode 100644 ext/dbase/dbf.h delete mode 100644 ext/dbase/dbf_head.c delete mode 100644 ext/dbase/dbf_head.h delete mode 100644 ext/dbase/dbf_misc.c delete mode 100644 ext/dbase/dbf_misc.h delete mode 100644 ext/dbase/dbf_ndx.c delete mode 100644 ext/dbase/dbf_ndx.h delete mode 100644 ext/dbase/dbf_rec.c delete mode 100644 ext/dbase/dbf_rec.h delete mode 100644 ext/dbase/package.xml delete mode 100644 ext/dbase/php_dbase.h delete mode 100644 ext/dbase/tests/001.phpt delete mode 100644 ext/dbase/tests/002.phpt delete mode 100644 ext/dbase/tests/bug31754.phpt delete mode 100644 ext/dom/CREDITS delete mode 100644 ext/dom/TODO delete mode 100644 ext/dom/attr.c delete mode 100644 ext/dom/cdatasection.c delete mode 100644 ext/dom/characterdata.c delete mode 100644 ext/dom/comment.c delete mode 100644 ext/dom/config.m4 delete mode 100644 ext/dom/config.w32 delete mode 100644 ext/dom/document.c delete mode 100644 ext/dom/documentfragment.c delete mode 100644 ext/dom/documenttype.c delete mode 100644 ext/dom/dom.dsp delete mode 100644 ext/dom/dom_ce.h delete mode 100644 ext/dom/dom_fe.h delete mode 100644 ext/dom/dom_iterators.c delete mode 100644 ext/dom/dom_properties.h delete mode 100644 ext/dom/domconfiguration.c delete mode 100644 ext/dom/domerror.c delete mode 100644 ext/dom/domerrorhandler.c delete mode 100644 ext/dom/domexception.c delete mode 100644 ext/dom/domimplementation.c delete mode 100644 ext/dom/domimplementationlist.c delete mode 100644 ext/dom/domimplementationsource.c delete mode 100644 ext/dom/domlocator.c delete mode 100644 ext/dom/domstringlist.c delete mode 100644 ext/dom/element.c delete mode 100644 ext/dom/entity.c delete mode 100644 ext/dom/entityreference.c delete mode 100644 ext/dom/examples/dom1.inc delete mode 100644 ext/dom/examples/dom1.php delete mode 100644 ext/dom/examples/note-invalid.xml delete mode 100644 ext/dom/examples/note.dtd delete mode 100644 ext/dom/examples/note.php delete mode 100644 ext/dom/examples/note.xml delete mode 100644 ext/dom/examples/relaxNG.php delete mode 100644 ext/dom/examples/relaxNG.rng delete mode 100644 ext/dom/examples/relaxNG.xml delete mode 100644 ext/dom/examples/relaxNG2.rng delete mode 100644 ext/dom/examples/relaxNG3.rng delete mode 100644 ext/dom/examples/shipping.php delete mode 100644 ext/dom/examples/shipping.xml delete mode 100644 ext/dom/examples/shipping.xsd delete mode 100644 ext/dom/namednodemap.c delete mode 100644 ext/dom/namelist.c delete mode 100644 ext/dom/node.c delete mode 100644 ext/dom/nodelist.c delete mode 100644 ext/dom/notation.c delete mode 100644 ext/dom/php_dom.c delete mode 100644 ext/dom/php_dom.h delete mode 100644 ext/dom/processinginstruction.c delete mode 100644 ext/dom/string_extend.c delete mode 100644 ext/dom/tests/book.xml delete mode 100644 ext/dom/tests/book.xml.gz delete mode 100644 ext/dom/tests/bug28721.phpt delete mode 100644 ext/dom/tests/bug28817.phpt delete mode 100644 ext/dom/tests/bug32615.phpt delete mode 100644 ext/dom/tests/bug34276.phpt delete mode 100644 ext/dom/tests/bug35342.phpt delete mode 100644 ext/dom/tests/bug36756.phpt delete mode 100644 ext/dom/tests/bug37277.phpt delete mode 100644 ext/dom/tests/bug37456.phpt delete mode 100644 ext/dom/tests/bug38438.phpt delete mode 100644 ext/dom/tests/bug38474.phpt delete mode 100644 ext/dom/tests/bug38850.phpt delete mode 100644 ext/dom/tests/bug38949.phpt delete mode 100644 ext/dom/tests/bug40836.phpt delete mode 100644 ext/dom/tests/canonicalization.phpt delete mode 100644 ext/dom/tests/dom.ent delete mode 100644 ext/dom/tests/dom.xml delete mode 100644 ext/dom/tests/dom001.phpt delete mode 100644 ext/dom/tests/dom002.phpt delete mode 100644 ext/dom/tests/dom003.phpt delete mode 100644 ext/dom/tests/dom004.phpt delete mode 100644 ext/dom/tests/dom005.phpt delete mode 100644 ext/dom/tests/dom006.phpt delete mode 100644 ext/dom/tests/dom007.phpt delete mode 100644 ext/dom/tests/dom_create_element.phpt delete mode 100644 ext/dom/tests/dom_import_simplexml.phpt delete mode 100644 ext/dom/tests/dom_set_attr_node.phpt delete mode 100644 ext/dom/tests/dom_test.inc delete mode 100644 ext/dom/tests/dom_xinclude.phpt delete mode 100644 ext/dom/tests/domattributes.phpt delete mode 100644 ext/dom/tests/domchardata.phpt delete mode 100644 ext/dom/tests/domdocument.phpt delete mode 100644 ext/dom/tests/domelement.phpt delete mode 100644 ext/dom/tests/domfragment.phpt delete mode 100644 ext/dom/tests/domimplementation.phpt delete mode 100644 ext/dom/tests/dompi.phpt delete mode 100644 ext/dom/tests/domxpath.phpt delete mode 100644 ext/dom/tests/nsdoc.xml delete mode 100644 ext/dom/tests/regsiter_node_class.phpt delete mode 100644 ext/dom/tests/skipif.inc delete mode 100644 ext/dom/tests/test.html delete mode 100644 ext/dom/tests/xinclude.xml delete mode 100644 ext/dom/text.c delete mode 100644 ext/dom/typeinfo.c delete mode 100644 ext/dom/userdatahandler.c delete mode 100644 ext/dom/xml_common.h delete mode 100644 ext/dom/xpath.c delete mode 100644 ext/enchant/CREDITS delete mode 100755 ext/enchant/config.m4 delete mode 100644 ext/enchant/config.w32 delete mode 100644 ext/enchant/docs/examples/example1.php delete mode 100755 ext/enchant/enchant.c delete mode 100755 ext/enchant/package.xml delete mode 100644 ext/enchant/php_enchant.h delete mode 100644 ext/enchant/tests/broker_describe.phpt delete mode 100644 ext/enchant/tests/broker_free.phpt delete mode 100644 ext/enchant/tests/broker_init.phpt delete mode 100644 ext/enchant/tests/broker_request_dict.phpt delete mode 100644 ext/enchant/tests/hindi_correct.txt delete mode 100644 ext/enchant/tests/hindi_incorrect.txt delete mode 100644 ext/ereg/ereg.c delete mode 100644 ext/ereg/php_ereg.h delete mode 100644 ext/ereg/php_regex.h delete mode 100644 ext/ereg/regex/COPYRIGHT delete mode 100644 ext/ereg/regex/README delete mode 100644 ext/ereg/regex/WHATSNEW delete mode 100644 ext/ereg/regex/cclass.h delete mode 100644 ext/ereg/regex/cname.h delete mode 100644 ext/ereg/regex/debug.c delete mode 100644 ext/ereg/regex/debug.ih delete mode 100644 ext/ereg/regex/engine.c delete mode 100644 ext/ereg/regex/engine.ih delete mode 100644 ext/ereg/regex/main.c delete mode 100644 ext/ereg/regex/main.ih delete mode 100644 ext/ereg/regex/mkh delete mode 100644 ext/ereg/regex/regcomp.c delete mode 100644 ext/ereg/regex/regcomp.ih delete mode 100644 ext/ereg/regex/regerror.c delete mode 100644 ext/ereg/regex/regerror.ih delete mode 100644 ext/ereg/regex/regex.3 delete mode 100644 ext/ereg/regex/regex.7 delete mode 100644 ext/ereg/regex/regex.dsp delete mode 100644 ext/ereg/regex/regex.dsw delete mode 100644 ext/ereg/regex/regex.h delete mode 100644 ext/ereg/regex/regex.mak delete mode 100644 ext/ereg/regex/regex2.h delete mode 100644 ext/ereg/regex/regex_extra.h delete mode 100644 ext/ereg/regex/regexec.c delete mode 100644 ext/ereg/regex/regfree.c delete mode 100644 ext/ereg/regex/split.c delete mode 100644 ext/ereg/regex/tests delete mode 100644 ext/ereg/regex/utils.h delete mode 100644 ext/ereg/tests/001.phpt delete mode 100644 ext/ereg/tests/002.phpt delete mode 100644 ext/ereg/tests/003.phpt delete mode 100644 ext/ereg/tests/004.phpt delete mode 100644 ext/ereg/tests/005.phpt delete mode 100644 ext/ereg/tests/006.phpt delete mode 100644 ext/ereg/tests/007.phpt delete mode 100644 ext/ereg/tests/008.phpt delete mode 100644 ext/ereg/tests/009.phpt delete mode 100644 ext/ereg/tests/010.phpt delete mode 100644 ext/ereg/tests/011.phpt delete mode 100644 ext/ereg/tests/012.phpt delete mode 100644 ext/ereg/tests/013.phpt delete mode 100644 ext/ereg/tests/014.phpt delete mode 100644 ext/ereg/tests/015.phpt delete mode 100644 ext/ereg/tests/016.phpt delete mode 100644 ext/exif/CREDITS delete mode 100644 ext/exif/config.m4 delete mode 100644 ext/exif/config.w32 delete mode 100644 ext/exif/example.php delete mode 100644 ext/exif/exif.c delete mode 100644 ext/exif/exif.dsp delete mode 100644 ext/exif/package.xml delete mode 100644 ext/exif/php_exif.h delete mode 100644 ext/exif/test.php delete mode 100644 ext/exif/test.txt delete mode 100755 ext/exif/tests/bug34704.jpg delete mode 100755 ext/exif/tests/bug34704.phpt delete mode 100644 ext/exif/tests/exif000.phpt delete mode 100644 ext/exif/tests/exif001.phpt delete mode 100644 ext/exif/tests/exif002.phpt delete mode 100644 ext/exif/tests/exif003.phpt delete mode 100644 ext/exif/tests/exif004.phpt delete mode 100644 ext/exif/tests/exif005.phpt delete mode 100644 ext/exif/tests/exif006.phpt delete mode 100644 ext/exif/tests/test1.jpg delete mode 100644 ext/exif/tests/test2.jpg delete mode 100644 ext/exif/tests/test3.jpg delete mode 100644 ext/exif/tests/test4.jpg delete mode 100644 ext/exif/tests/test5.jpg delete mode 100644 ext/exif/tests/test6.jpg delete mode 100755 ext/ext_skel delete mode 100644 ext/ext_skel_win32.php delete mode 100644 ext/fbsql/CREDITS delete mode 100644 ext/fbsql/Readme_w32.txt delete mode 100644 ext/fbsql/config.m4 delete mode 100644 ext/fbsql/config.w32 delete mode 100644 ext/fbsql/fbsql.dsp delete mode 100644 ext/fbsql/php_fbsql.c delete mode 100644 ext/fbsql/php_fbsql.h delete mode 100644 ext/fdf/CREDITS delete mode 100644 ext/fdf/config.m4 delete mode 100644 ext/fdf/config.w32 delete mode 100644 ext/fdf/fdf.c delete mode 100644 ext/fdf/fdf.dsp delete mode 100644 ext/fdf/package.xml delete mode 100644 ext/fdf/php_fdf.h delete mode 100644 ext/fdf/tests/01-general.phpt delete mode 100644 ext/fdf/tests/02-values.phpt delete mode 100644 ext/fdf/tests/03-read-file.phpt delete mode 100644 ext/fdf/tests/04-POST.phpt delete mode 100644 ext/fdf/tests/simple.fdf delete mode 100644 ext/filter/CREDITS delete mode 100644 ext/filter/callback_filter.c delete mode 100644 ext/filter/config.m4 delete mode 100644 ext/filter/config.w32 delete mode 100644 ext/filter/docs/filter.txt delete mode 100644 ext/filter/docs/input_get_args.php delete mode 100644 ext/filter/filter.c delete mode 100644 ext/filter/filter_private.h delete mode 100644 ext/filter/logical_filters.c delete mode 100644 ext/filter/package.xml delete mode 100644 ext/filter/php_filter.h delete mode 100644 ext/filter/sanitizing_filters.c delete mode 100644 ext/filter/tests/001.phpt delete mode 100644 ext/filter/tests/002.phpt delete mode 100644 ext/filter/tests/003.phpt delete mode 100644 ext/filter/tests/004.phpt delete mode 100644 ext/filter/tests/005.phpt delete mode 100644 ext/filter/tests/006.phpt delete mode 100644 ext/filter/tests/007.phpt delete mode 100644 ext/filter/tests/008.phpt delete mode 100644 ext/filter/tests/009.phpt delete mode 100644 ext/filter/tests/010.phpt delete mode 100644 ext/filter/tests/011.phpt delete mode 100644 ext/filter/tests/012.phpt delete mode 100644 ext/filter/tests/013.phpt delete mode 100644 ext/filter/tests/014.phpt delete mode 100644 ext/filter/tests/015.phpt delete mode 100644 ext/filter/tests/016.phpt delete mode 100644 ext/filter/tests/017.phpt delete mode 100644 ext/filter/tests/018.phpt delete mode 100644 ext/filter/tests/019.phpt delete mode 100644 ext/filter/tests/020.phpt delete mode 100644 ext/filter/tests/021.phpt delete mode 100644 ext/filter/tests/022.phpt delete mode 100644 ext/filter/tests/023.phpt delete mode 100644 ext/filter/tests/024.phpt delete mode 100644 ext/filter/tests/025.phpt delete mode 100644 ext/filter/tests/026.phpt delete mode 100644 ext/filter/tests/027.phpt delete mode 100644 ext/filter/tests/028.phpt delete mode 100644 ext/filter/tests/029.phpt delete mode 100644 ext/filter/tests/030.phpt delete mode 100644 ext/filter/tests/031.phpt delete mode 100644 ext/filter/tests/032.phpt delete mode 100644 ext/filter/tests/033.phpt delete mode 100644 ext/filter/tests/033_run.inc delete mode 100644 ext/filter/tests/034.phpt delete mode 100644 ext/filter/tests/035.phpt delete mode 100644 ext/filter/tests/036.phpt delete mode 100644 ext/filter/tests/037.phpt delete mode 100644 ext/filter/tests/038.phpt delete mode 100644 ext/filter/tests/039.phpt delete mode 100644 ext/filter/tests/040.phpt delete mode 100644 ext/filter/tests/041.phpt delete mode 100644 ext/filter/tests/042.phpt delete mode 100644 ext/filter/tests/043.phpt delete mode 100644 ext/filter/tests/044.phpt delete mode 100755 ext/filter/tests/045.phpt delete mode 100755 ext/filter/tests/046.phpt delete mode 100755 ext/filter/tests/047.phpt delete mode 100755 ext/filter/tests/048.phpt delete mode 100755 ext/filter/tests/049.phpt delete mode 100755 ext/filter/tests/050.phpt delete mode 100755 ext/filter/tests/051.phpt delete mode 100644 ext/filter/tests/bug39846.phpt delete mode 100644 ext/filter/tests/bug7586.phpt delete mode 100644 ext/filter/tests/bug7715.phpt delete mode 100644 ext/filter/tests/bug7733.phpt delete mode 100644 ext/filter/tests/bug8315.phpt delete mode 100644 ext/filter/tests/callback_non_modified_var.phpt delete mode 100644 ext/filter/tests/filter_data.phpt delete mode 100644 ext/ftp/CREDITS delete mode 100644 ext/ftp/config.m4 delete mode 100644 ext/ftp/config.w32 delete mode 100644 ext/ftp/ftp.c delete mode 100644 ext/ftp/ftp.h delete mode 100644 ext/ftp/package.xml delete mode 100644 ext/ftp/php_ftp.c delete mode 100644 ext/ftp/php_ftp.h delete mode 100644 ext/ftp/tests/001.phpt delete mode 100644 ext/ftp/tests/002.phpt delete mode 100644 ext/ftp/tests/003.phpt delete mode 100644 ext/ftp/tests/004.phpt delete mode 100644 ext/ftp/tests/005.phpt delete mode 100644 ext/ftp/tests/006.phpt delete mode 100644 ext/ftp/tests/bug27809.phpt delete mode 100644 ext/ftp/tests/bug37799.phpt delete mode 100644 ext/ftp/tests/bug39458-2.phpt delete mode 100644 ext/ftp/tests/bug39458.phpt delete mode 100644 ext/ftp/tests/bug39583-2.phpt delete mode 100644 ext/ftp/tests/bug39583.phpt delete mode 100644 ext/ftp/tests/bug7216-2.phpt delete mode 100644 ext/ftp/tests/bug7216.phpt delete mode 100644 ext/ftp/tests/cert.pem delete mode 100644 ext/ftp/tests/server.inc delete mode 100644 ext/ftp/tests/skipif.inc delete mode 100644 ext/gd/CREDITS delete mode 100644 ext/gd/config.m4 delete mode 100644 ext/gd/config.w32 delete mode 100644 ext/gd/gd.c delete mode 100644 ext/gd/gd.dsp delete mode 100644 ext/gd/gd_ctx.c delete mode 100644 ext/gd/gdcache.c delete mode 100644 ext/gd/gdcache.h delete mode 100644 ext/gd/libgd/README delete mode 100644 ext/gd/libgd/gd.c delete mode 100644 ext/gd/libgd/gd.h delete mode 100644 ext/gd/libgd/gd2copypal.c delete mode 100644 ext/gd/libgd/gd2time.c delete mode 100644 ext/gd/libgd/gd2topng.c delete mode 100644 ext/gd/libgd/gd_arc_f_buggy.c delete mode 100644 ext/gd/libgd/gd_gd.c delete mode 100644 ext/gd/libgd/gd_gd2.c delete mode 100644 ext/gd/libgd/gd_gif_in.c delete mode 100644 ext/gd/libgd/gd_gif_out.c delete mode 100644 ext/gd/libgd/gd_io.c delete mode 100644 ext/gd/libgd/gd_io.h delete mode 100644 ext/gd/libgd/gd_io_dp.c delete mode 100644 ext/gd/libgd/gd_io_file.c delete mode 100644 ext/gd/libgd/gd_io_ss.c delete mode 100644 ext/gd/libgd/gd_jpeg.c delete mode 100644 ext/gd/libgd/gd_png.c delete mode 100644 ext/gd/libgd/gd_security.c delete mode 100644 ext/gd/libgd/gd_ss.c delete mode 100644 ext/gd/libgd/gd_topal.c delete mode 100644 ext/gd/libgd/gd_wbmp.c delete mode 100644 ext/gd/libgd/gdcache.c delete mode 100644 ext/gd/libgd/gdcache.h delete mode 100644 ext/gd/libgd/gddemo.c delete mode 100644 ext/gd/libgd/gdfontg.c delete mode 100644 ext/gd/libgd/gdfontg.h delete mode 100644 ext/gd/libgd/gdfontl.c delete mode 100644 ext/gd/libgd/gdfontl.h delete mode 100644 ext/gd/libgd/gdfontmb.c delete mode 100644 ext/gd/libgd/gdfontmb.h delete mode 100644 ext/gd/libgd/gdfonts.c delete mode 100644 ext/gd/libgd/gdfonts.h delete mode 100644 ext/gd/libgd/gdfontt.c delete mode 100644 ext/gd/libgd/gdfontt.h delete mode 100644 ext/gd/libgd/gdft.c delete mode 100644 ext/gd/libgd/gdhelpers.c delete mode 100644 ext/gd/libgd/gdhelpers.h delete mode 100644 ext/gd/libgd/gdkanji.c delete mode 100644 ext/gd/libgd/gdparttopng.c delete mode 100644 ext/gd/libgd/gdtables.c delete mode 100644 ext/gd/libgd/gdtest.c delete mode 100644 ext/gd/libgd/gdtestft.c delete mode 100644 ext/gd/libgd/gdtopng.c delete mode 100644 ext/gd/libgd/gdxpm.c delete mode 100644 ext/gd/libgd/jisx0208.h delete mode 100644 ext/gd/libgd/mathmake.c delete mode 100644 ext/gd/libgd/pngtogd.c delete mode 100644 ext/gd/libgd/pngtogd2.c delete mode 100644 ext/gd/libgd/testac.c delete mode 100644 ext/gd/libgd/wbmp.c delete mode 100644 ext/gd/libgd/wbmp.h delete mode 100644 ext/gd/libgd/webpng.c delete mode 100644 ext/gd/libgd/xbm.c delete mode 100644 ext/gd/php_gd.h delete mode 100644 ext/gd/tests/001.phpt delete mode 100644 ext/gd/tests/bug19366.phpt delete mode 100644 ext/gd/tests/bug22544.phpt delete mode 100644 ext/gd/tests/bug24155.phpt delete mode 100644 ext/gd/tests/bug24594.phpt delete mode 100644 ext/gd/tests/bug27582_1.phpt delete mode 100644 ext/gd/tests/bug28147.phpt delete mode 100644 ext/gd/tests/bug36697.phpt delete mode 100644 ext/gd/tests/bug37346.gif delete mode 100644 ext/gd/tests/bug37346.phpt delete mode 100644 ext/gd/tests/bug37360.gif delete mode 100644 ext/gd/tests/bug37360.phpt delete mode 100644 ext/gd/tests/bug38112.gif delete mode 100644 ext/gd/tests/bug38112.phpt delete mode 100644 ext/gd/tests/bug38179.phpt delete mode 100644 ext/gd/tests/bug38212.phpt delete mode 100644 ext/gd/tests/bug39082.phpt delete mode 100644 ext/gd/tests/bug39273.phpt delete mode 100644 ext/gd/tests/bug39286.phpt delete mode 100644 ext/gd/tests/bug39366.phpt delete mode 100644 ext/gd/tests/bug39508.phpt delete mode 100644 ext/gd/tests/bug39780.phpt delete mode 100644 ext/gd/tests/bug39780.png delete mode 100644 ext/gd/tests/bug40764.phpt delete mode 100644 ext/gd/tests/colorat.phpt delete mode 100644 ext/gd/tests/colorclosest.phpt delete mode 100644 ext/gd/tests/colorexact.phpt delete mode 100644 ext/gd/tests/colormatch.phpt delete mode 100644 ext/gd/tests/colorresolve.phpt delete mode 100644 ext/gd/tests/conv_test.gif delete mode 100644 ext/gd/tests/conv_test.jpeg delete mode 100644 ext/gd/tests/conv_test.png delete mode 100644 ext/gd/tests/conv_test.xbm delete mode 100644 ext/gd/tests/conv_test.xpm delete mode 100644 ext/gd/tests/copy.phpt delete mode 100644 ext/gd/tests/copypalette.phpt delete mode 100644 ext/gd/tests/copyresized.phpt delete mode 100644 ext/gd/tests/createfromgd2.phpt delete mode 100644 ext/gd/tests/createfromstring.phpt delete mode 100644 ext/gd/tests/createfromwbmp.phpt delete mode 100644 ext/gd/tests/createfromwbmp2.phpt delete mode 100644 ext/gd/tests/dashedlines.phpt delete mode 100644 ext/gd/tests/gif.phpt delete mode 100644 ext/gd/tests/gif2gd.phpt delete mode 100644 ext/gd/tests/gif2jpg.phpt delete mode 100644 ext/gd/tests/gif2png.phpt delete mode 100644 ext/gd/tests/imagefill_1.phpt delete mode 100644 ext/gd/tests/imagefilter.phpt delete mode 100644 ext/gd/tests/imagefttext.phpt delete mode 100644 ext/gd/tests/imagewbmp.phpt delete mode 100644 ext/gd/tests/jpeg2png.phpt delete mode 100644 ext/gd/tests/jpg2gd.phpt delete mode 100644 ext/gd/tests/lines.phpt delete mode 100644 ext/gd/tests/png2gd.phpt delete mode 100644 ext/gd/tests/pngcomp.phpt delete mode 100644 ext/gd/tests/src.gd2 delete mode 100644 ext/gd/tests/src.png delete mode 100644 ext/gd/tests/src.wbmp delete mode 100644 ext/gd/tests/test.png delete mode 100644 ext/gd/tests/test8859.ttf delete mode 100644 ext/gd/tests/truecolor.phpt delete mode 100644 ext/gd/tests/types.phpt delete mode 100644 ext/gd/tests/xbm2png.phpt delete mode 100644 ext/gd/tests/xpm2gd.phpt delete mode 100644 ext/gd/tests/xpm2jpg.phpt delete mode 100644 ext/gd/tests/xpm2png.phpt delete mode 100644 ext/gettext/CREDITS delete mode 100644 ext/gettext/config.m4 delete mode 100644 ext/gettext/config.w32 delete mode 100644 ext/gettext/gettext.c delete mode 100644 ext/gettext/gettext.dsp delete mode 100644 ext/gettext/php_gettext.h delete mode 100644 ext/gettext/tests/dcngettext.phpt delete mode 100644 ext/gettext/tests/gettext_basic.phpt delete mode 100644 ext/gettext/tests/gettext_basic_de.phpt delete mode 100644 ext/gettext/tests/locale/de/LC_MESSAGES/messages.mo delete mode 100644 ext/gettext/tests/locale/de/LC_MESSAGES/messages.po delete mode 100644 ext/gettext/tests/locale/fi/LC_MESSAGES/messages.mo delete mode 100644 ext/gettext/tests/locale/fi/LC_MESSAGES/messages.po delete mode 100644 ext/gmp/CREDITS delete mode 100644 ext/gmp/README delete mode 100644 ext/gmp/TODO delete mode 100644 ext/gmp/config.m4 delete mode 100644 ext/gmp/config.w32 delete mode 100644 ext/gmp/gmp.c delete mode 100644 ext/gmp/php_gmp.h delete mode 100644 ext/gmp/tests/001.phpt delete mode 100644 ext/gmp/tests/002.phpt delete mode 100644 ext/gmp/tests/003.phpt delete mode 100644 ext/gmp/tests/004.phpt delete mode 100644 ext/gmp/tests/005.phpt delete mode 100644 ext/gmp/tests/006.phpt delete mode 100644 ext/gmp/tests/007.phpt delete mode 100644 ext/gmp/tests/008.phpt delete mode 100644 ext/gmp/tests/009.phpt delete mode 100644 ext/gmp/tests/010.phpt delete mode 100644 ext/gmp/tests/bug32773.phpt delete mode 100644 ext/gmp/tests/gmp_nextprime.phpt delete mode 100644 ext/hash/CREDITS delete mode 100644 ext/hash/EXPERIMENTAL delete mode 100644 ext/hash/README delete mode 100644 ext/hash/bench.php delete mode 100644 ext/hash/config.m4 delete mode 100644 ext/hash/config.w32 delete mode 100644 ext/hash/hash.c delete mode 100644 ext/hash/hash_adler32.c delete mode 100644 ext/hash/hash_crc32.c delete mode 100644 ext/hash/hash_gost.c delete mode 100644 ext/hash/hash_haval.c delete mode 100644 ext/hash/hash_md.c delete mode 100644 ext/hash/hash_ripemd.c delete mode 100644 ext/hash/hash_salsa.c delete mode 100644 ext/hash/hash_sha.c delete mode 100644 ext/hash/hash_snefru.c delete mode 100644 ext/hash/hash_tiger.c delete mode 100644 ext/hash/hash_whirlpool.c delete mode 100644 ext/hash/package.xml delete mode 100644 ext/hash/package2.xml delete mode 100644 ext/hash/php_hash.h delete mode 100644 ext/hash/php_hash_adler32.h delete mode 100644 ext/hash/php_hash_crc32.h delete mode 100644 ext/hash/php_hash_crc32_tables.h delete mode 100644 ext/hash/php_hash_gost.h delete mode 100644 ext/hash/php_hash_gost_tables.h delete mode 100644 ext/hash/php_hash_haval.h delete mode 100644 ext/hash/php_hash_md.h delete mode 100644 ext/hash/php_hash_ripemd.h delete mode 100644 ext/hash/php_hash_salsa.h delete mode 100644 ext/hash/php_hash_sha.h delete mode 100644 ext/hash/php_hash_snefru.h delete mode 100644 ext/hash/php_hash_snefru_tables.h delete mode 100644 ext/hash/php_hash_tiger.h delete mode 100644 ext/hash/php_hash_tiger_tables.h delete mode 100644 ext/hash/php_hash_types.h delete mode 100644 ext/hash/php_hash_whirlpool.h delete mode 100644 ext/hash/php_hash_whirlpool_tables.h delete mode 100644 ext/hash/tests/adler32.phpt delete mode 100644 ext/hash/tests/crc32.phpt delete mode 100644 ext/hash/tests/gost.phpt delete mode 100644 ext/hash/tests/haval.phpt delete mode 100644 ext/hash/tests/hmac-md5.phpt delete mode 100644 ext/hash/tests/md2.phpt delete mode 100644 ext/hash/tests/md4.phpt delete mode 100644 ext/hash/tests/md5.phpt delete mode 100644 ext/hash/tests/ripemd128.phpt delete mode 100644 ext/hash/tests/ripemd160.phpt delete mode 100644 ext/hash/tests/ripemd256.phpt delete mode 100644 ext/hash/tests/ripemd320.phpt delete mode 100644 ext/hash/tests/sha1.phpt delete mode 100644 ext/hash/tests/sha256.phpt delete mode 100644 ext/hash/tests/sha384.phpt delete mode 100644 ext/hash/tests/sha512.phpt delete mode 100644 ext/hash/tests/snefru.phpt delete mode 100644 ext/hash/tests/tiger.phpt delete mode 100644 ext/hash/tests/whirlpool.phpt delete mode 100644 ext/iconv/CREDITS delete mode 100644 ext/iconv/config.m4 delete mode 100644 ext/iconv/config.w32 delete mode 100644 ext/iconv/iconv.c delete mode 100644 ext/iconv/iconv.dsp delete mode 100644 ext/iconv/php_iconv.def delete mode 100644 ext/iconv/php_iconv.h delete mode 100644 ext/iconv/tests/Quotes.UTF-8 delete mode 100644 ext/iconv/tests/bug16069.phpt delete mode 100644 ext/iconv/tests/bug37176.phpt delete mode 100644 ext/iconv/tests/bug37773.phpt delete mode 100644 ext/iconv/tests/eucjp2iso2022jp.phpt delete mode 100644 ext/iconv/tests/eucjp2sjis.phpt delete mode 100644 ext/iconv/tests/eucjp2utf8.phpt delete mode 100644 ext/iconv/tests/iconv001.phpt delete mode 100644 ext/iconv/tests/iconv002.phpt delete mode 100644 ext/iconv/tests/iconv003.phpt delete mode 100644 ext/iconv/tests/iconv004.phpt delete mode 100644 ext/iconv/tests/iconv_mime_decode.phpt delete mode 100644 ext/iconv/tests/iconv_mime_decode_headers.phpt delete mode 100644 ext/iconv/tests/iconv_mime_encode.phpt delete mode 100644 ext/iconv/tests/iconv_stream_filter.phpt delete mode 100644 ext/iconv/tests/iconv_stream_filter.txt delete mode 100644 ext/iconv/tests/iconv_strlen.phpt delete mode 100644 ext/iconv/tests/iconv_strpos.phpt delete mode 100644 ext/iconv/tests/iconv_strrpos.phpt delete mode 100644 ext/iconv/tests/iconv_substr.phpt delete mode 100644 ext/iconv/tests/ob_iconv_handler.phpt delete mode 100644 ext/iconv/tests/skipif.inc delete mode 100644 ext/iconv/tests/translit-failure.phpt delete mode 100644 ext/iconv/tests/translit-utf8.phpt delete mode 100644 ext/imap/CREDITS delete mode 100644 ext/imap/IMAP_Win32_HOWTO.txt delete mode 100644 ext/imap/config.m4 delete mode 100644 ext/imap/config.w32 delete mode 100644 ext/imap/imap.dsp delete mode 100644 ext/imap/imap.h delete mode 100644 ext/imap/php_imap.c delete mode 100644 ext/imap/php_imap.h delete mode 100644 ext/imap/tests/bug31142_1.phpt delete mode 100644 ext/imap/tests/bug31142_2.phpt delete mode 100644 ext/imap/tests/bug32589.phpt delete mode 100644 ext/imap/tests/bug35669.phpt delete mode 100644 ext/imap/tests/imap_utf8.phpt delete mode 100644 ext/informix/config.m4 delete mode 100644 ext/informix/config.w32 delete mode 100644 ext/interbase/CREDITS delete mode 100644 ext/interbase/config.m4 delete mode 100644 ext/interbase/config.w32 delete mode 100644 ext/interbase/ibase_blobs.c delete mode 100644 ext/interbase/ibase_events.c delete mode 100644 ext/interbase/ibase_query.c delete mode 100644 ext/interbase/ibase_service.c delete mode 100644 ext/interbase/interbase.c delete mode 100644 ext/interbase/interbase.dsp delete mode 100644 ext/interbase/interbase.rc delete mode 100755 ext/interbase/php_ibase_includes.h delete mode 100644 ext/interbase/php_ibase_udf.c delete mode 100644 ext/interbase/php_interbase.h delete mode 100644 ext/interbase/tests/002.phpt delete mode 100644 ext/interbase/tests/003.phpt delete mode 100644 ext/interbase/tests/004.phpt delete mode 100644 ext/interbase/tests/005.phpt delete mode 100644 ext/interbase/tests/006.phpt delete mode 100644 ext/interbase/tests/007.phpt delete mode 100755 ext/interbase/tests/008.phpt delete mode 100755 ext/interbase/tests/interbase.inc delete mode 100755 ext/interbase/tests/skipif.inc delete mode 100644 ext/json/CREDITS delete mode 100644 ext/json/JSON_parser.c delete mode 100644 ext/json/JSON_parser.h delete mode 100644 ext/json/README delete mode 100644 ext/json/config.m4 delete mode 100644 ext/json/config.w32 delete mode 100644 ext/json/json.c delete mode 100644 ext/json/json.dsp delete mode 100644 ext/json/package.xml delete mode 100644 ext/json/php_json.h delete mode 100644 ext/json/tests/001.phpt delete mode 100644 ext/json/tests/002.phpt delete mode 100644 ext/json/tests/003.phpt delete mode 100644 ext/json/tests/004.phpt delete mode 100644 ext/json/tests/005.phpt delete mode 100644 ext/json/tests/bug40503.phpt delete mode 100644 ext/json/tests/fail001.phpt delete mode 100644 ext/json/tests/pass001.1.phpt delete mode 100644 ext/json/tests/pass001.phpt delete mode 100644 ext/json/tests/pass002.phpt delete mode 100644 ext/json/tests/pass003.phpt delete mode 100644 ext/json/utf8_decode.c delete mode 100644 ext/json/utf8_decode.h delete mode 100644 ext/json/utf8_to_utf16.c delete mode 100644 ext/json/utf8_to_utf16.h delete mode 100644 ext/ldap/CREDITS delete mode 100644 ext/ldap/LDAP_Win32_HOWTO.txt delete mode 100644 ext/ldap/config.m4 delete mode 100644 ext/ldap/config.w32 delete mode 100644 ext/ldap/ldap.c delete mode 100644 ext/ldap/ldap.dsp delete mode 100644 ext/ldap/ldap.mak delete mode 100644 ext/ldap/php_ldap.h delete mode 100644 ext/libxml/CREDITS delete mode 100644 ext/libxml/config.w32 delete mode 100644 ext/libxml/config0.m4 delete mode 100644 ext/libxml/libxml.c delete mode 100644 ext/libxml/php_libxml.h delete mode 100644 ext/libxml/php_libxml2.def delete mode 100644 ext/libxml/tests/001.phpt delete mode 100644 ext/libxml/tests/002.phpt delete mode 100644 ext/libxml/tests/003.phpt delete mode 100644 ext/libxml/tests/004.phpt delete mode 100644 ext/libxml/tests/test.xml delete mode 100644 ext/mbstring/CREDITS delete mode 100644 ext/mbstring/README delete mode 100644 ext/mbstring/README.libmbfl delete mode 100644 ext/mbstring/README_PHP3-i18n-ja delete mode 100644 ext/mbstring/config.m4 delete mode 100644 ext/mbstring/config.w32 delete mode 100644 ext/mbstring/libmbfl/AUTHORS delete mode 100644 ext/mbstring/libmbfl/DISCLAIMER delete mode 100644 ext/mbstring/libmbfl/INSTALL delete mode 100644 ext/mbstring/libmbfl/LICENSE delete mode 100644 ext/mbstring/libmbfl/Makefile.am delete mode 100644 ext/mbstring/libmbfl/Makefile.bcc32 delete mode 100644 ext/mbstring/libmbfl/README delete mode 100755 ext/mbstring/libmbfl/buildconf delete mode 100644 ext/mbstring/libmbfl/config.h.bcc32 delete mode 100644 ext/mbstring/libmbfl/config.h.in delete mode 100644 ext/mbstring/libmbfl/config.h.vc6 delete mode 100644 ext/mbstring/libmbfl/configure.in delete mode 100755 ext/mbstring/libmbfl/cvsclean delete mode 100644 ext/mbstring/libmbfl/filters/Makefile.am delete mode 100644 ext/mbstring/libmbfl/filters/Makefile.bcc32 delete mode 100644 ext/mbstring/libmbfl/filters/cp932_table.h delete mode 100644 ext/mbstring/libmbfl/filters/html_entities.c delete mode 100644 ext/mbstring/libmbfl/filters/html_entities.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_7bit.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_7bit.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_armscii8.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_armscii8.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_ascii.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_ascii.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_base64.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_base64.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_big5.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_big5.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_byte2.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_byte2.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_byte4.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_byte4.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_cp1251.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_cp1251.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_cp1252.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_cp1252.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_cp51932.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_cp51932.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_cp866.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_cp866.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_cp932.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_cp932.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_cp936.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_cp936.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_euc_cn.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_euc_jp.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_euc_kr.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_euc_tw.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_htmlent.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_htmlent.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_hz.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_hz.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.h delete mode 100755 ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.c delete mode 100755 ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_jis.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_jis.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_koi8r.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_koi8r.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_qprint.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_qprint.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_sjis.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_sjis.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_ucs2.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_ucs2.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_ucs4.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_ucs4.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_uhc.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_uhc.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_utf16.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_utf16.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_utf32.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_utf32.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_utf7.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_utf7.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_utf7imap.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_utf8.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_utf8.h delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_uuencode.c delete mode 100644 ext/mbstring/libmbfl/filters/mbfilter_uuencode.h delete mode 100755 ext/mbstring/libmbfl/filters/mk_sb_tbl.awk delete mode 100644 ext/mbstring/libmbfl/filters/unicode_prop.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_armscii8.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_big5.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_cns11643.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_cp1251.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_cp1252.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_cp866.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_cp932_ext.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_cp936.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_iso8859_10.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_iso8859_13.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_iso8859_14.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_iso8859_15.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_iso8859_16.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_iso8859_2.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_iso8859_3.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_iso8859_4.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_iso8859_5.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_iso8859_6.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_iso8859_7.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_iso8859_8.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_iso8859_9.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_jis.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_koi8r.h delete mode 100644 ext/mbstring/libmbfl/filters/unicode_table_uhc.h delete mode 100644 ext/mbstring/libmbfl/libmbfl.dsp delete mode 100644 ext/mbstring/libmbfl/libmbfl.dsw delete mode 100755 ext/mbstring/libmbfl/libmbfl.sln delete mode 100755 ext/mbstring/libmbfl/libmbfl.vcproj delete mode 100644 ext/mbstring/libmbfl/mbfl.def delete mode 100644 ext/mbstring/libmbfl/mbfl.rc delete mode 100644 ext/mbstring/libmbfl/mbfl/Makefile.am delete mode 100644 ext/mbstring/libmbfl/mbfl/Makefile.bcc32 delete mode 100644 ext/mbstring/libmbfl/mbfl/eaw_table.h delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfilter.c delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfilter.h delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfilter_pass.c delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfilter_pass.h delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfilter_wchar.c delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfilter_wchar.h delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfl_allocators.c delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfl_allocators.h delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfl_consts.h delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfl_convert.c delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfl_convert.h delete mode 100755 ext/mbstring/libmbfl/mbfl/mbfl_defs.h delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfl_encoding.c delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfl_encoding.h delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfl_filter_output.c delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfl_filter_output.h delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfl_ident.c delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfl_ident.h delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfl_language.c delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfl_language.h delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfl_string.c delete mode 100644 ext/mbstring/libmbfl/mbfl/mbfl_string.h delete mode 100644 ext/mbstring/libmbfl/mbfl/mk_eaw_tbl.awk delete mode 100644 ext/mbstring/libmbfl/mksbcc32.bat delete mode 100644 ext/mbstring/libmbfl/nls/Makefile.am delete mode 100644 ext/mbstring/libmbfl/nls/Makefile.bcc32 delete mode 100644 ext/mbstring/libmbfl/nls/nls_de.c delete mode 100644 ext/mbstring/libmbfl/nls/nls_de.h delete mode 100644 ext/mbstring/libmbfl/nls/nls_en.c delete mode 100644 ext/mbstring/libmbfl/nls/nls_en.h delete mode 100644 ext/mbstring/libmbfl/nls/nls_hy.c delete mode 100644 ext/mbstring/libmbfl/nls/nls_hy.h delete mode 100644 ext/mbstring/libmbfl/nls/nls_ja.c delete mode 100644 ext/mbstring/libmbfl/nls/nls_ja.h delete mode 100644 ext/mbstring/libmbfl/nls/nls_kr.c delete mode 100644 ext/mbstring/libmbfl/nls/nls_kr.h delete mode 100644 ext/mbstring/libmbfl/nls/nls_neutral.c delete mode 100644 ext/mbstring/libmbfl/nls/nls_neutral.h delete mode 100644 ext/mbstring/libmbfl/nls/nls_ru.c delete mode 100644 ext/mbstring/libmbfl/nls/nls_ru.h delete mode 100644 ext/mbstring/libmbfl/nls/nls_tr.c delete mode 100644 ext/mbstring/libmbfl/nls/nls_tr.h delete mode 100644 ext/mbstring/libmbfl/nls/nls_uni.c delete mode 100644 ext/mbstring/libmbfl/nls/nls_uni.h delete mode 100644 ext/mbstring/libmbfl/nls/nls_zh.c delete mode 100644 ext/mbstring/libmbfl/nls/nls_zh.h delete mode 100644 ext/mbstring/libmbfl/rules.mak.bcc32 delete mode 100644 ext/mbstring/libmbfl/tests/sample.c delete mode 100644 ext/mbstring/mb_gpc.c delete mode 100644 ext/mbstring/mb_gpc.h delete mode 100644 ext/mbstring/mbstring.c delete mode 100644 ext/mbstring/mbstring.dsp delete mode 100644 ext/mbstring/mbstring.h delete mode 100644 ext/mbstring/oniguruma/COPYING delete mode 100644 ext/mbstring/oniguruma/HISTORY delete mode 100644 ext/mbstring/oniguruma/README delete mode 100644 ext/mbstring/oniguruma/README.ja delete mode 100644 ext/mbstring/oniguruma/config.h.in delete mode 100644 ext/mbstring/oniguruma/enc/ascii.c delete mode 100644 ext/mbstring/oniguruma/enc/big5.c delete mode 100644 ext/mbstring/oniguruma/enc/euc_jp.c delete mode 100644 ext/mbstring/oniguruma/enc/euc_kr.c delete mode 100644 ext/mbstring/oniguruma/enc/euc_tw.c delete mode 100644 ext/mbstring/oniguruma/enc/iso8859_1.c delete mode 100644 ext/mbstring/oniguruma/enc/iso8859_10.c delete mode 100644 ext/mbstring/oniguruma/enc/iso8859_11.c delete mode 100644 ext/mbstring/oniguruma/enc/iso8859_13.c delete mode 100644 ext/mbstring/oniguruma/enc/iso8859_14.c delete mode 100644 ext/mbstring/oniguruma/enc/iso8859_15.c delete mode 100644 ext/mbstring/oniguruma/enc/iso8859_16.c delete mode 100644 ext/mbstring/oniguruma/enc/iso8859_2.c delete mode 100644 ext/mbstring/oniguruma/enc/iso8859_3.c delete mode 100644 ext/mbstring/oniguruma/enc/iso8859_4.c delete mode 100644 ext/mbstring/oniguruma/enc/iso8859_5.c delete mode 100644 ext/mbstring/oniguruma/enc/iso8859_6.c delete mode 100644 ext/mbstring/oniguruma/enc/iso8859_7.c delete mode 100644 ext/mbstring/oniguruma/enc/iso8859_8.c delete mode 100644 ext/mbstring/oniguruma/enc/iso8859_9.c delete mode 100644 ext/mbstring/oniguruma/enc/koi8.c delete mode 100644 ext/mbstring/oniguruma/enc/koi8_r.c delete mode 100644 ext/mbstring/oniguruma/enc/mktable.c delete mode 100644 ext/mbstring/oniguruma/enc/sjis.c delete mode 100644 ext/mbstring/oniguruma/enc/unicode.c delete mode 100755 ext/mbstring/oniguruma/enc/utf16_be.c delete mode 100755 ext/mbstring/oniguruma/enc/utf16_le.c delete mode 100755 ext/mbstring/oniguruma/enc/utf32_be.c delete mode 100755 ext/mbstring/oniguruma/enc/utf32_le.c delete mode 100644 ext/mbstring/oniguruma/enc/utf8.c delete mode 100755 ext/mbstring/oniguruma/index.html delete mode 100644 ext/mbstring/oniguruma/onigcmpt200.h delete mode 100644 ext/mbstring/oniguruma/oniggnu.h delete mode 100644 ext/mbstring/oniguruma/onigposix.h delete mode 100644 ext/mbstring/oniguruma/oniguruma.h delete mode 100644 ext/mbstring/oniguruma/php_onig_compat.h delete mode 100644 ext/mbstring/oniguruma/regcomp.c delete mode 100644 ext/mbstring/oniguruma/regenc.c delete mode 100644 ext/mbstring/oniguruma/regenc.h delete mode 100644 ext/mbstring/oniguruma/regerror.c delete mode 100644 ext/mbstring/oniguruma/regexec.c delete mode 100755 ext/mbstring/oniguruma/regext.c delete mode 100644 ext/mbstring/oniguruma/reggnu.c delete mode 100644 ext/mbstring/oniguruma/regint.h delete mode 100644 ext/mbstring/oniguruma/regparse.c delete mode 100644 ext/mbstring/oniguruma/regparse.h delete mode 100644 ext/mbstring/oniguruma/regposerr.c delete mode 100644 ext/mbstring/oniguruma/regposix.c delete mode 100644 ext/mbstring/oniguruma/regsyntax.c delete mode 100644 ext/mbstring/oniguruma/regtrav.c delete mode 100644 ext/mbstring/oniguruma/regversion.c delete mode 100644 ext/mbstring/oniguruma/st.c delete mode 100644 ext/mbstring/oniguruma/st.h delete mode 100644 ext/mbstring/oniguruma/win32/config.h delete mode 100644 ext/mbstring/php_mbregex.c delete mode 100644 ext/mbstring/php_mbregex.h delete mode 100644 ext/mbstring/php_unicode.c delete mode 100644 ext/mbstring/php_unicode.h delete mode 100644 ext/mbstring/tests/bug20087.phpt delete mode 100644 ext/mbstring/tests/bug25140.phpt delete mode 100644 ext/mbstring/tests/bug26639.phpt delete mode 100644 ext/mbstring/tests/bug28220.phpt delete mode 100644 ext/mbstring/tests/bug30549.phpt delete mode 100644 ext/mbstring/tests/bug31911.phpt delete mode 100644 ext/mbstring/tests/casefold.phpt delete mode 100644 ext/mbstring/tests/common.inc delete mode 100644 ext/mbstring/tests/htmlent.phpt delete mode 100644 ext/mbstring/tests/ini_language.phpt delete mode 100644 ext/mbstring/tests/mb_convert_encoding.phpt delete mode 100644 ext/mbstring/tests/mb_convert_variables.phpt delete mode 100644 ext/mbstring/tests/mb_detect_encoding.phpt delete mode 100644 ext/mbstring/tests/mb_detect_order.phpt delete mode 100644 ext/mbstring/tests/mb_ereg-compat-01.phpt delete mode 100644 ext/mbstring/tests/mb_ereg-compat-02.phpt delete mode 100644 ext/mbstring/tests/mb_ereg.phpt delete mode 100644 ext/mbstring/tests/mb_ereg1.phpt delete mode 100644 ext/mbstring/tests/mb_ereg2.phpt delete mode 100644 ext/mbstring/tests/mb_ereg_replace-compat-01.phpt delete mode 100644 ext/mbstring/tests/mb_ereg_replace-compat-02.phpt delete mode 100644 ext/mbstring/tests/mb_ereg_replace-compat-03.phpt delete mode 100644 ext/mbstring/tests/mb_ereg_replace-compat-04.phpt delete mode 100644 ext/mbstring/tests/mb_ereg_replace-compat-05.phpt delete mode 100644 ext/mbstring/tests/mb_ereg_replace-compat-06.phpt delete mode 100644 ext/mbstring/tests/mb_ereg_replace-compat-07.phpt delete mode 100644 ext/mbstring/tests/mb_ereg_replace-compat-08.phpt delete mode 100644 ext/mbstring/tests/mb_ereg_replace-compat-09.phpt delete mode 100644 ext/mbstring/tests/mb_ereg_replace-compat-10.phpt delete mode 100644 ext/mbstring/tests/mb_ereg_replace-compat-11.phpt delete mode 100644 ext/mbstring/tests/mb_ereg_replace-compat-12.phpt delete mode 100644 ext/mbstring/tests/mb_ereg_replace-compat-13.phpt delete mode 100644 ext/mbstring/tests/mb_ereg_replace.phpt delete mode 100644 ext/mbstring/tests/mb_ereg_search_xxx.phpt delete mode 100644 ext/mbstring/tests/mb_http_input.phpt delete mode 100644 ext/mbstring/tests/mb_http_output.phpt delete mode 100644 ext/mbstring/tests/mb_internal_encoding.phpt delete mode 100644 ext/mbstring/tests/mb_output_handler_euc_jp.phpt delete mode 100644 ext/mbstring/tests/mb_output_handler_shift_jis.phpt delete mode 100644 ext/mbstring/tests/mb_parse_str.phpt delete mode 100644 ext/mbstring/tests/mb_parse_str02.phpt delete mode 100644 ext/mbstring/tests/mb_preferred_mime_name.phpt delete mode 100644 ext/mbstring/tests/mb_regex_set_options.phpt delete mode 100644 ext/mbstring/tests/mb_send_mail01.phpt delete mode 100644 ext/mbstring/tests/mb_send_mail02.phpt delete mode 100644 ext/mbstring/tests/mb_send_mail03.phpt delete mode 100644 ext/mbstring/tests/mb_send_mail04.phpt delete mode 100644 ext/mbstring/tests/mb_send_mail05.phpt delete mode 100644 ext/mbstring/tests/mb_send_mail06.phpt delete mode 100644 ext/mbstring/tests/mb_send_mail07.phpt delete mode 100644 ext/mbstring/tests/mb_split-compat-01.phpt delete mode 100644 ext/mbstring/tests/mb_split.phpt delete mode 100644 ext/mbstring/tests/mb_strcut.phpt delete mode 100644 ext/mbstring/tests/mb_strimwidth.phpt delete mode 100644 ext/mbstring/tests/mb_strlen.phpt delete mode 100644 ext/mbstring/tests/mb_strpos.phpt delete mode 100644 ext/mbstring/tests/mb_strwidth.phpt delete mode 100644 ext/mbstring/tests/mb_substitute_character.phpt delete mode 100644 ext/mbstring/tests/mb_substr.phpt delete mode 100644 ext/mbstring/tests/mb_substr_count.phpt delete mode 100644 ext/mbstring/tests/overload01.phpt delete mode 100644 ext/mbstring/tests/overload02.phpt delete mode 100644 ext/mbstring/tests/php_gr_jp_10830.phpt delete mode 100644 ext/mbstring/tests/php_gr_jp_16242.phpt delete mode 100644 ext/mbstring/tests/php_gr_jp_dev_884-1.phpt delete mode 100644 ext/mbstring/tests/php_gr_jp_dev_884-2.phpt delete mode 100644 ext/mbstring/tests/simpletest.phpt delete mode 100644 ext/mbstring/tests/skipif.inc delete mode 100644 ext/mbstring/tests/zend-multibyte.phpt delete mode 100644 ext/mbstring/unicode_data.h delete mode 100644 ext/mcrypt/CREDITS delete mode 100644 ext/mcrypt/TODO delete mode 100644 ext/mcrypt/config.m4 delete mode 100644 ext/mcrypt/config.w32 delete mode 100644 ext/mcrypt/mcrypt.c delete mode 100644 ext/mcrypt/mcrypt.dsp delete mode 100644 ext/mcrypt/php_mcrypt.h delete mode 100644 ext/mcrypt/tests/basic.phpt delete mode 100644 ext/mcrypt/tests/blowfish.phpt delete mode 100644 ext/mcrypt/tests/bug35496.phpt delete mode 100644 ext/mcrypt/tests/bug37595.phpt delete mode 100644 ext/mcrypt/tests/bug8040.phpt delete mode 100644 ext/mcrypt/tests/vectors.txt delete mode 100644 ext/mhash/CREDITS delete mode 100644 ext/mhash/config.m4 delete mode 100644 ext/mhash/config.w32 delete mode 100644 ext/mhash/mhash.c delete mode 100644 ext/mhash/mhash.dsp delete mode 100644 ext/mhash/php_mhash.h delete mode 100644 ext/mhash/tests/001.phpt delete mode 100644 ext/mhash/tests/002.phpt delete mode 100644 ext/mhash/tests/003.phpt delete mode 100644 ext/mhash/tests/skip.inc delete mode 100644 ext/mime_magic/CREDITS delete mode 100644 ext/mime_magic/DEPRECATED delete mode 100644 ext/mime_magic/EXPERIMENTAL delete mode 100644 ext/mime_magic/TODO delete mode 100644 ext/mime_magic/config.m4 delete mode 100644 ext/mime_magic/config.w32 delete mode 100644 ext/mime_magic/mime_magic.c delete mode 100644 ext/mime_magic/mime_magic.dsp delete mode 100644 ext/mime_magic/package.xml delete mode 100644 ext/mime_magic/php_mime_magic.h delete mode 100644 ext/mime_magic/phpmimemagic.h delete mode 100644 ext/ming/CREDITS delete mode 100644 ext/ming/EXPERIMENTAL delete mode 100644 ext/ming/config.m4 delete mode 100644 ext/ming/config.w32 delete mode 100644 ext/ming/ming.c delete mode 100644 ext/ming/ming.dsp delete mode 100644 ext/ming/php_ming.h delete mode 100755 ext/ming/tests/swfaction-new.phpt delete mode 100644 ext/ming/tests/swfaction.phpt delete mode 100644 ext/msql/CREDITS delete mode 100644 ext/msql/config.m4 delete mode 100644 ext/msql/config.w32 delete mode 100644 ext/msql/msql.dsp delete mode 100644 ext/msql/php_msql.c delete mode 100644 ext/msql/php_msql.h delete mode 100644 ext/mssql/CREDITS delete mode 100644 ext/mssql/config.m4 delete mode 100644 ext/mssql/config.w32 delete mode 100644 ext/mssql/mssql.dsp delete mode 100644 ext/mssql/mssql_win32_howto.txt delete mode 100644 ext/mssql/php_mssql.c delete mode 100644 ext/mssql/php_mssql.h delete mode 100644 ext/mysql/CREDITS delete mode 100644 ext/mysql/config.m4 delete mode 100644 ext/mysql/config.w32 delete mode 100644 ext/mysql/mysql.dsp delete mode 100644 ext/mysql/mysql.mak delete mode 100644 ext/mysql/package.xml delete mode 100644 ext/mysql/php_mysql.c delete mode 100644 ext/mysql/php_mysql.h delete mode 100755 ext/mysql/tests/001.phpt delete mode 100755 ext/mysql/tests/002.phpt delete mode 100755 ext/mysql/tests/003.phpt delete mode 100755 ext/mysql/tests/connect.inc delete mode 100644 ext/mysql/tests/mysql_affected_rows.phpt delete mode 100644 ext/mysql/tests/mysql_client_encoding.phpt delete mode 100644 ext/mysql/tests/mysql_close.phpt delete mode 100644 ext/mysql/tests/mysql_connect.phpt delete mode 100644 ext/mysql/tests/mysql_create_db.phpt delete mode 100644 ext/mysql/tests/mysql_data_seek.phpt delete mode 100644 ext/mysql/tests/mysql_db_name.phpt delete mode 100644 ext/mysql/tests/mysql_db_query.phpt delete mode 100644 ext/mysql/tests/mysql_drop_db.phpt delete mode 100644 ext/mysql/tests/mysql_errno.phpt delete mode 100644 ext/mysql/tests/mysql_error.phpt delete mode 100644 ext/mysql/tests/mysql_escape_string.phpt delete mode 100644 ext/mysql/tests/mysql_fetch_array.phpt delete mode 100644 ext/mysql/tests/mysql_fetch_assoc.phpt delete mode 100644 ext/mysql/tests/mysql_fetch_field.phpt delete mode 100644 ext/mysql/tests/mysql_fetch_lengths.phpt delete mode 100644 ext/mysql/tests/mysql_fetch_object.phpt delete mode 100644 ext/mysql/tests/mysql_fetch_row.phpt delete mode 100644 ext/mysql/tests/mysql_field_flags.phpt delete mode 100644 ext/mysql/tests/mysql_field_len.phpt delete mode 100644 ext/mysql/tests/mysql_field_name.phpt delete mode 100644 ext/mysql/tests/mysql_field_seek.phpt delete mode 100644 ext/mysql/tests/mysql_field_table.phpt delete mode 100644 ext/mysql/tests/mysql_field_type.phpt delete mode 100644 ext/mysql/tests/mysql_free_result.phpt delete mode 100644 ext/mysql/tests/mysql_get_client_info.phpt delete mode 100644 ext/mysql/tests/mysql_get_host_info.phpt delete mode 100644 ext/mysql/tests/mysql_get_proto_info.phpt delete mode 100644 ext/mysql/tests/mysql_get_server_info.phpt delete mode 100644 ext/mysql/tests/mysql_info.phpt delete mode 100644 ext/mysql/tests/mysql_insert_id.phpt delete mode 100644 ext/mysql/tests/mysql_list_dbs.phpt delete mode 100644 ext/mysql/tests/mysql_list_fields.phpt delete mode 100644 ext/mysql/tests/mysql_list_processes.phpt delete mode 100644 ext/mysql/tests/mysql_num_fields.phpt delete mode 100644 ext/mysql/tests/mysql_num_rows.phpt delete mode 100644 ext/mysql/tests/mysql_pconnect.phpt delete mode 100644 ext/mysql/tests/mysql_ping.phpt delete mode 100644 ext/mysql/tests/mysql_query.phpt delete mode 100644 ext/mysql/tests/mysql_real_escape_string.phpt delete mode 100644 ext/mysql/tests/mysql_result.phpt delete mode 100644 ext/mysql/tests/mysql_select_db.phpt delete mode 100644 ext/mysql/tests/mysql_stat.phpt delete mode 100644 ext/mysql/tests/mysql_tablename.phpt delete mode 100644 ext/mysql/tests/mysql_thread_id.phpt delete mode 100644 ext/mysql/tests/mysql_unbuffered_query.phpt delete mode 100755 ext/mysql/tests/skipif.inc delete mode 100644 ext/mysql/tests/table.inc delete mode 100644 ext/mysqli/CREDITS delete mode 100644 ext/mysqli/TODO delete mode 100644 ext/mysqli/config.m4 delete mode 100644 ext/mysqli/config.w32 delete mode 100644 ext/mysqli/mysqli.c delete mode 100755 ext/mysqli/mysqli.dsp delete mode 100644 ext/mysqli/mysqli_api.c delete mode 100644 ext/mysqli/mysqli_driver.c delete mode 100644 ext/mysqli/mysqli_embedded.c delete mode 100644 ext/mysqli/mysqli_exception.c delete mode 100644 ext/mysqli/mysqli_fe.c delete mode 100644 ext/mysqli/mysqli_nonapi.c delete mode 100644 ext/mysqli/mysqli_prop.c delete mode 100644 ext/mysqli/mysqli_repl.c delete mode 100644 ext/mysqli/mysqli_report.c delete mode 100644 ext/mysqli/mysqli_report.h delete mode 100644 ext/mysqli/mysqli_warning.c delete mode 100644 ext/mysqli/package.xml delete mode 100644 ext/mysqli/php_mysqli.h delete mode 100644 ext/mysqli/tests/001.phpt delete mode 100644 ext/mysqli/tests/002.phpt delete mode 100644 ext/mysqli/tests/003.phpt delete mode 100644 ext/mysqli/tests/004.phpt delete mode 100644 ext/mysqli/tests/005.phpt delete mode 100644 ext/mysqli/tests/006.phpt delete mode 100644 ext/mysqli/tests/007.phpt delete mode 100644 ext/mysqli/tests/008.phpt delete mode 100644 ext/mysqli/tests/009.phpt delete mode 100644 ext/mysqli/tests/010.phpt delete mode 100644 ext/mysqli/tests/011.phpt delete mode 100644 ext/mysqli/tests/012.phpt delete mode 100644 ext/mysqli/tests/013.phpt delete mode 100644 ext/mysqli/tests/014.phpt delete mode 100644 ext/mysqli/tests/015.phpt delete mode 100644 ext/mysqli/tests/016.phpt delete mode 100644 ext/mysqli/tests/017.phpt delete mode 100644 ext/mysqli/tests/018.phpt delete mode 100644 ext/mysqli/tests/019.phpt delete mode 100644 ext/mysqli/tests/020.phpt delete mode 100644 ext/mysqli/tests/021.phpt delete mode 100644 ext/mysqli/tests/022.phpt delete mode 100644 ext/mysqli/tests/023.phpt delete mode 100644 ext/mysqli/tests/024.phpt delete mode 100644 ext/mysqli/tests/025.phpt delete mode 100644 ext/mysqli/tests/026.phpt delete mode 100644 ext/mysqli/tests/027.phpt delete mode 100644 ext/mysqli/tests/028.phpt delete mode 100644 ext/mysqli/tests/029.phpt delete mode 100644 ext/mysqli/tests/030.phpt delete mode 100644 ext/mysqli/tests/031.phpt delete mode 100644 ext/mysqli/tests/032.phpt delete mode 100644 ext/mysqli/tests/033.phpt delete mode 100644 ext/mysqli/tests/034.phpt delete mode 100644 ext/mysqli/tests/035.phpt delete mode 100644 ext/mysqli/tests/036.phpt delete mode 100644 ext/mysqli/tests/037.phpt delete mode 100644 ext/mysqli/tests/038.phpt delete mode 100644 ext/mysqli/tests/039.phpt delete mode 100644 ext/mysqli/tests/040.phpt delete mode 100644 ext/mysqli/tests/041.phpt delete mode 100644 ext/mysqli/tests/042.phpt delete mode 100644 ext/mysqli/tests/043.phpt delete mode 100644 ext/mysqli/tests/044.phpt delete mode 100644 ext/mysqli/tests/045.phpt delete mode 100644 ext/mysqli/tests/046.phpt delete mode 100644 ext/mysqli/tests/047.phpt delete mode 100644 ext/mysqli/tests/048.phpt delete mode 100644 ext/mysqli/tests/049.phpt delete mode 100644 ext/mysqli/tests/050.phpt delete mode 100644 ext/mysqli/tests/051.phpt delete mode 100644 ext/mysqli/tests/052.phpt delete mode 100644 ext/mysqli/tests/053.phpt delete mode 100644 ext/mysqli/tests/054.phpt delete mode 100644 ext/mysqli/tests/055.phpt delete mode 100644 ext/mysqli/tests/056.phpt delete mode 100644 ext/mysqli/tests/057.phpt delete mode 100644 ext/mysqli/tests/058.phpt delete mode 100644 ext/mysqli/tests/059.phpt delete mode 100644 ext/mysqli/tests/060.phpt delete mode 100644 ext/mysqli/tests/061.phpt delete mode 100644 ext/mysqli/tests/062.phpt delete mode 100644 ext/mysqli/tests/063.phpt delete mode 100644 ext/mysqli/tests/064.phpt delete mode 100644 ext/mysqli/tests/065.phpt delete mode 100644 ext/mysqli/tests/066.phpt delete mode 100644 ext/mysqli/tests/067.phpt delete mode 100644 ext/mysqli/tests/068.phpt delete mode 100644 ext/mysqli/tests/069.phpt delete mode 100644 ext/mysqli/tests/070.phpt delete mode 100644 ext/mysqli/tests/071.phpt delete mode 100644 ext/mysqli/tests/072.phpt delete mode 100644 ext/mysqli/tests/073.phpt delete mode 100644 ext/mysqli/tests/074.phpt delete mode 100644 ext/mysqli/tests/bug28817.phpt delete mode 100644 ext/mysqli/tests/bug29311.phpt delete mode 100644 ext/mysqli/tests/bug30967.phpt delete mode 100644 ext/mysqli/tests/bug31141.phpt delete mode 100644 ext/mysqli/tests/bug31668.phpt delete mode 100644 ext/mysqli/tests/bug32405.phpt delete mode 100644 ext/mysqli/tests/bug33090.phpt delete mode 100644 ext/mysqli/tests/bug33263.phpt delete mode 100644 ext/mysqli/tests/bug33491.phpt delete mode 100644 ext/mysqli/tests/bug34785.phpt delete mode 100644 ext/mysqli/tests/bug34810.phpt delete mode 100644 ext/mysqli/tests/bug35103.phpt delete mode 100644 ext/mysqli/tests/bug35517.phpt delete mode 100644 ext/mysqli/tests/bug35759.phpt delete mode 100644 ext/mysqli/tests/bug36420.phpt delete mode 100644 ext/mysqli/tests/bug36745.phpt delete mode 100644 ext/mysqli/tests/bug36802.phpt delete mode 100644 ext/mysqli/tests/bug36949.phpt delete mode 100644 ext/mysqli/tests/bug38003.phpt delete mode 100755 ext/mysqli/tests/bug38710.phpt delete mode 100644 ext/mysqli/tests/connect.inc delete mode 100644 ext/mysqli/tests/skipif.inc delete mode 100644 ext/mysqli/tests/skipifemb.inc delete mode 100644 ext/mysqli/tests/skipifnotemb.inc delete mode 100644 ext/oci8/CREDITS delete mode 100644 ext/oci8/README delete mode 100644 ext/oci8/config.m4 delete mode 100644 ext/oci8/config.w32 delete mode 100644 ext/oci8/oci8.c delete mode 100644 ext/oci8/oci8.dsp delete mode 100644 ext/oci8/oci8_collection.c delete mode 100644 ext/oci8/oci8_interface.c delete mode 100644 ext/oci8/oci8_lob.c delete mode 100644 ext/oci8/oci8_statement.c delete mode 100644 ext/oci8/package.xml delete mode 100644 ext/oci8/php_oci8.h delete mode 100644 ext/oci8/php_oci8_int.h delete mode 100644 ext/oci8/tests/array_bind_001.phpt delete mode 100644 ext/oci8/tests/array_bind_002.phpt delete mode 100644 ext/oci8/tests/array_bind_003.phpt delete mode 100644 ext/oci8/tests/array_bind_004.phpt delete mode 100644 ext/oci8/tests/array_bind_005.phpt delete mode 100644 ext/oci8/tests/array_bind_006.phpt delete mode 100644 ext/oci8/tests/array_bind_007.phpt delete mode 100644 ext/oci8/tests/array_bind_008.phpt delete mode 100644 ext/oci8/tests/array_bind_009.phpt delete mode 100644 ext/oci8/tests/array_bind_010.phpt delete mode 100644 ext/oci8/tests/array_bind_011.phpt delete mode 100644 ext/oci8/tests/array_bind_012.phpt delete mode 100644 ext/oci8/tests/array_bind_013.phpt delete mode 100644 ext/oci8/tests/array_bind_014.phpt delete mode 100644 ext/oci8/tests/array_bind_date.phpt delete mode 100644 ext/oci8/tests/array_bind_date1.phpt delete mode 100644 ext/oci8/tests/array_bind_float.phpt delete mode 100644 ext/oci8/tests/array_bind_float1.phpt delete mode 100644 ext/oci8/tests/array_bind_int.phpt delete mode 100644 ext/oci8/tests/array_bind_int1.phpt delete mode 100644 ext/oci8/tests/array_bind_str.phpt delete mode 100644 ext/oci8/tests/array_bind_str1.phpt delete mode 100644 ext/oci8/tests/bind_empty.phpt delete mode 100644 ext/oci8/tests/bind_long.phpt delete mode 100644 ext/oci8/tests/bind_long_raw.phpt delete mode 100644 ext/oci8/tests/bind_raw.phpt delete mode 100644 ext/oci8/tests/bug26133.phpt delete mode 100644 ext/oci8/tests/bug27303.phpt delete mode 100644 ext/oci8/tests/bug27303_2.phpt delete mode 100644 ext/oci8/tests/bug27303_3.phpt delete mode 100644 ext/oci8/tests/bug27303_4.phpt delete mode 100644 ext/oci8/tests/bug32325.phpt delete mode 100644 ext/oci8/tests/bug35973.phpt delete mode 100644 ext/oci8/tests/bug36010.phpt delete mode 100644 ext/oci8/tests/bug36096.phpt delete mode 100644 ext/oci8/tests/bug37581.phpt delete mode 100644 ext/oci8/tests/bug38161.phpt delete mode 100644 ext/oci8/tests/bug38173.phpt delete mode 100644 ext/oci8/tests/bug40078.phpt delete mode 100644 ext/oci8/tests/bug40415.phpt delete mode 100644 ext/oci8/tests/close.phpt delete mode 100644 ext/oci8/tests/coll_001.phpt delete mode 100644 ext/oci8/tests/coll_002.phpt delete mode 100644 ext/oci8/tests/coll_002_func.phpt delete mode 100644 ext/oci8/tests/coll_003.phpt delete mode 100644 ext/oci8/tests/coll_003_func.phpt delete mode 100644 ext/oci8/tests/coll_004.phpt delete mode 100644 ext/oci8/tests/coll_004_func.phpt delete mode 100644 ext/oci8/tests/coll_005.phpt delete mode 100644 ext/oci8/tests/coll_006.phpt delete mode 100644 ext/oci8/tests/coll_006_func.phpt delete mode 100644 ext/oci8/tests/coll_007.phpt delete mode 100644 ext/oci8/tests/coll_008.phpt delete mode 100644 ext/oci8/tests/coll_009.phpt delete mode 100644 ext/oci8/tests/coll_009_func.phpt delete mode 100644 ext/oci8/tests/coll_010.phpt delete mode 100644 ext/oci8/tests/coll_010_func.phpt delete mode 100644 ext/oci8/tests/coll_011.phpt delete mode 100644 ext/oci8/tests/coll_011_func.phpt delete mode 100644 ext/oci8/tests/coll_012.phpt delete mode 100644 ext/oci8/tests/coll_012_func.phpt delete mode 100644 ext/oci8/tests/coll_013.phpt delete mode 100644 ext/oci8/tests/coll_013_func.phpt delete mode 100644 ext/oci8/tests/coll_014.phpt delete mode 100644 ext/oci8/tests/coll_014_func.phpt delete mode 100644 ext/oci8/tests/coll_015.phpt delete mode 100644 ext/oci8/tests/coll_015_func.phpt delete mode 100644 ext/oci8/tests/coll_016.phpt delete mode 100644 ext/oci8/tests/coll_016_func.phpt delete mode 100644 ext/oci8/tests/coll_017.phpt delete mode 100644 ext/oci8/tests/coll_017_func.phpt delete mode 100644 ext/oci8/tests/coll_018.phpt delete mode 100644 ext/oci8/tests/coll_019.phpt delete mode 100644 ext/oci8/tests/commit.phpt delete mode 100644 ext/oci8/tests/commit_old.phpt delete mode 100644 ext/oci8/tests/connect.inc delete mode 100644 ext/oci8/tests/connect.phpt delete mode 100644 ext/oci8/tests/connect_1.phpt delete mode 100644 ext/oci8/tests/connect_1_old.phpt delete mode 100644 ext/oci8/tests/connect_old.phpt delete mode 100644 ext/oci8/tests/connect_with_charset_001.phpt delete mode 100644 ext/oci8/tests/connect_without_oracle_home.phpt delete mode 100644 ext/oci8/tests/connect_without_oracle_home_old.phpt delete mode 100644 ext/oci8/tests/create_table.inc delete mode 100644 ext/oci8/tests/create_type.inc delete mode 100644 ext/oci8/tests/cursor_bind.phpt delete mode 100644 ext/oci8/tests/cursor_bind_err.phpt delete mode 100644 ext/oci8/tests/cursors.phpt delete mode 100644 ext/oci8/tests/cursors_old.phpt delete mode 100644 ext/oci8/tests/debug.phpt delete mode 100644 ext/oci8/tests/default_prefetch.phpt delete mode 100644 ext/oci8/tests/default_prefetch1.phpt delete mode 100644 ext/oci8/tests/default_prefetch2.phpt delete mode 100644 ext/oci8/tests/define.phpt delete mode 100644 ext/oci8/tests/define1.phpt delete mode 100644 ext/oci8/tests/define2.phpt delete mode 100644 ext/oci8/tests/define3.phpt delete mode 100644 ext/oci8/tests/define4.phpt delete mode 100644 ext/oci8/tests/define5.phpt delete mode 100644 ext/oci8/tests/define_old.phpt delete mode 100644 ext/oci8/tests/descriptors.phpt delete mode 100644 ext/oci8/tests/details.inc delete mode 100644 ext/oci8/tests/drop_table.inc delete mode 100644 ext/oci8/tests/drop_type.inc delete mode 100644 ext/oci8/tests/error.phpt delete mode 100644 ext/oci8/tests/error1.phpt delete mode 100644 ext/oci8/tests/error2.phpt delete mode 100644 ext/oci8/tests/error_old.phpt delete mode 100644 ext/oci8/tests/exec_fetch.phpt delete mode 100644 ext/oci8/tests/execute_mode.phpt delete mode 100644 ext/oci8/tests/fetch.phpt delete mode 100644 ext/oci8/tests/fetch_all.phpt delete mode 100644 ext/oci8/tests/fetch_all2.phpt delete mode 100644 ext/oci8/tests/fetch_array.phpt delete mode 100644 ext/oci8/tests/fetch_assoc.phpt delete mode 100644 ext/oci8/tests/fetch_into.phpt delete mode 100644 ext/oci8/tests/fetch_into1.phpt delete mode 100644 ext/oci8/tests/fetch_into2.phpt delete mode 100644 ext/oci8/tests/fetch_object.phpt delete mode 100644 ext/oci8/tests/fetch_row.phpt delete mode 100644 ext/oci8/tests/field_funcs.phpt delete mode 100644 ext/oci8/tests/field_funcs1.phpt delete mode 100644 ext/oci8/tests/field_funcs_old.phpt delete mode 100644 ext/oci8/tests/function_aliases.phpt delete mode 100644 ext/oci8/tests/lob_001.phpt delete mode 100644 ext/oci8/tests/lob_002.phpt delete mode 100644 ext/oci8/tests/lob_003.phpt delete mode 100644 ext/oci8/tests/lob_004.phpt delete mode 100644 ext/oci8/tests/lob_005.phpt delete mode 100644 ext/oci8/tests/lob_006.phpt delete mode 100644 ext/oci8/tests/lob_007.phpt delete mode 100644 ext/oci8/tests/lob_008.phpt delete mode 100644 ext/oci8/tests/lob_009.phpt delete mode 100644 ext/oci8/tests/lob_009.txt delete mode 100644 ext/oci8/tests/lob_010.phpt delete mode 100644 ext/oci8/tests/lob_011.phpt delete mode 100644 ext/oci8/tests/lob_012.phpt delete mode 100644 ext/oci8/tests/lob_013.phpt delete mode 100644 ext/oci8/tests/lob_014.phpt delete mode 100644 ext/oci8/tests/lob_015.phpt delete mode 100644 ext/oci8/tests/lob_016.phpt delete mode 100644 ext/oci8/tests/lob_017.phpt delete mode 100644 ext/oci8/tests/lob_018.phpt delete mode 100644 ext/oci8/tests/lob_019.phpt delete mode 100644 ext/oci8/tests/lob_020.phpt delete mode 100644 ext/oci8/tests/lob_021.phpt delete mode 100644 ext/oci8/tests/lob_022.phpt delete mode 100644 ext/oci8/tests/lob_023.phpt delete mode 100644 ext/oci8/tests/lob_024.phpt delete mode 100644 ext/oci8/tests/lob_025.phpt delete mode 100644 ext/oci8/tests/lob_026.phpt delete mode 100644 ext/oci8/tests/lob_027.phpt delete mode 100644 ext/oci8/tests/lob_028.phpt delete mode 100644 ext/oci8/tests/lob_029.phpt delete mode 100644 ext/oci8/tests/lob_030.phpt delete mode 100644 ext/oci8/tests/lob_031.phpt delete mode 100644 ext/oci8/tests/lob_032.phpt delete mode 100644 ext/oci8/tests/lob_033.phpt delete mode 100644 ext/oci8/tests/lob_034.phpt delete mode 100644 ext/oci8/tests/lob_035.phpt delete mode 100644 ext/oci8/tests/lob_036.phpt delete mode 100644 ext/oci8/tests/lob_037.phpt delete mode 100644 ext/oci8/tests/lob_038.phpt delete mode 100644 ext/oci8/tests/lob_039.phpt delete mode 100644 ext/oci8/tests/lob_aliases.phpt delete mode 100644 ext/oci8/tests/lob_temp.phpt delete mode 100644 ext/oci8/tests/lob_temp1.phpt delete mode 100644 ext/oci8/tests/num.phpt delete mode 100644 ext/oci8/tests/oci_execute_segfault.phpt delete mode 100644 ext/oci8/tests/old_oci_close.phpt delete mode 100644 ext/oci8/tests/old_oci_close1.phpt delete mode 100644 ext/oci8/tests/password.phpt delete mode 100644 ext/oci8/tests/password_new.phpt delete mode 100644 ext/oci8/tests/password_old.phpt delete mode 100644 ext/oci8/tests/pecl_bug8816.phpt delete mode 100644 ext/oci8/tests/persistent.phpt delete mode 100644 ext/oci8/tests/prefetch.phpt delete mode 100644 ext/oci8/tests/prefetch_old.phpt delete mode 100644 ext/oci8/tests/privileged_connect.phpt delete mode 100644 ext/oci8/tests/privileged_connect1.phpt delete mode 100644 ext/oci8/tests/select_null.phpt delete mode 100644 ext/oci8/tests/serverversion.phpt delete mode 100644 ext/oci8/tests/skipif.inc delete mode 100644 ext/oci8/tests/statement_cache.phpt delete mode 100644 ext/oci8/tests/statement_type.phpt delete mode 100644 ext/oci8/tests/statement_type_old.phpt delete mode 100644 ext/oci8/tests/test.gif delete mode 100644 ext/oci8/tests/test.txt delete mode 100644 ext/oci8/tests/uncommitted.phpt delete mode 100644 ext/odbc/CREDITS delete mode 100644 ext/odbc/birdstep.c delete mode 100644 ext/odbc/config.m4 delete mode 100644 ext/odbc/config.w32 delete mode 100644 ext/odbc/php_birdstep.h delete mode 100644 ext/odbc/php_odbc.c delete mode 100644 ext/odbc/php_odbc.h delete mode 100644 ext/odbc/php_odbc_includes.h delete mode 100644 ext/openssl/CREDITS delete mode 100644 ext/openssl/README delete mode 100644 ext/openssl/config.w32 delete mode 100644 ext/openssl/config0.m4 delete mode 100644 ext/openssl/openssl.c delete mode 100644 ext/openssl/openssl.dsp delete mode 100644 ext/openssl/openssl.mak delete mode 100644 ext/openssl/php_openssl.h delete mode 100644 ext/openssl/tests/001.phpt delete mode 100644 ext/openssl/tests/002.phpt delete mode 100644 ext/openssl/tests/003.phpt delete mode 100644 ext/openssl/tests/004.phpt delete mode 100644 ext/openssl/tests/005.phpt delete mode 100644 ext/openssl/tests/bug25614.phpt delete mode 100644 ext/openssl/tests/bug28382.phpt delete mode 100644 ext/openssl/tests/bug28382cert.txt delete mode 100644 ext/openssl/tests/bug36732.phpt delete mode 100644 ext/openssl/tests/bug37820.phpt delete mode 100644 ext/openssl/tests/bug37820cert.pem delete mode 100644 ext/openssl/tests/bug37820key.pem delete mode 100644 ext/openssl/tests/bug38255.phpt delete mode 100644 ext/openssl/tests/bug38261.phpt delete mode 100644 ext/openssl/tests/bug39217.phpt delete mode 100644 ext/openssl/tests/bug39217cert1.txt delete mode 100644 ext/openssl/tests/bug39217cert2.txt delete mode 100644 ext/openssl/xp_ssl.c delete mode 100644 ext/pcntl/CREDITS delete mode 100644 ext/pcntl/EXPERIMENTAL delete mode 100644 ext/pcntl/README delete mode 100644 ext/pcntl/config.m4 delete mode 100644 ext/pcntl/package.xml delete mode 100755 ext/pcntl/pcntl.c delete mode 100644 ext/pcntl/php_pcntl.h delete mode 100644 ext/pcntl/php_signal.c delete mode 100644 ext/pcntl/php_signal.h delete mode 100755 ext/pcntl/test-pcntl.php delete mode 100644 ext/pcntl/tests/001.phpt delete mode 100644 ext/pcre/CREDITS delete mode 100644 ext/pcre/TODO delete mode 100644 ext/pcre/config.w32 delete mode 100644 ext/pcre/config0.m4 delete mode 100644 ext/pcre/pcrelib/AUTHORS delete mode 100644 ext/pcre/pcrelib/COPYING delete mode 100644 ext/pcre/pcrelib/ChangeLog delete mode 100644 ext/pcre/pcrelib/LICENCE delete mode 100644 ext/pcre/pcrelib/NEWS delete mode 100644 ext/pcre/pcrelib/NON-UNIX-USE delete mode 100644 ext/pcre/pcrelib/README delete mode 100644 ext/pcre/pcrelib/dftables.c delete mode 100644 ext/pcre/pcrelib/doc/Tech.Notes delete mode 100644 ext/pcre/pcrelib/doc/pcre.txt delete mode 100644 ext/pcre/pcrelib/libpcre.def delete mode 100644 ext/pcre/pcrelib/libpcreposix.def delete mode 100644 ext/pcre/pcrelib/pcre.def delete mode 100644 ext/pcre/pcrelib/pcre.h delete mode 100644 ext/pcre/pcrelib/pcre_chartables.c delete mode 100644 ext/pcre/pcrelib/pcre_compile.c delete mode 100644 ext/pcre/pcrelib/pcre_config.c delete mode 100644 ext/pcre/pcrelib/pcre_exec.c delete mode 100644 ext/pcre/pcrelib/pcre_fullinfo.c delete mode 100644 ext/pcre/pcrelib/pcre_get.c delete mode 100644 ext/pcre/pcrelib/pcre_globals.c delete mode 100644 ext/pcre/pcrelib/pcre_info.c delete mode 100644 ext/pcre/pcrelib/pcre_internal.h delete mode 100644 ext/pcre/pcrelib/pcre_maketables.c delete mode 100644 ext/pcre/pcrelib/pcre_newline.c delete mode 100644 ext/pcre/pcrelib/pcre_ord2utf8.c delete mode 100644 ext/pcre/pcrelib/pcre_printint.src delete mode 100644 ext/pcre/pcrelib/pcre_refcount.c delete mode 100644 ext/pcre/pcrelib/pcre_scanner.cc delete mode 100644 ext/pcre/pcrelib/pcre_scanner.h delete mode 100644 ext/pcre/pcrelib/pcre_scanner_unittest.cc delete mode 100644 ext/pcre/pcrelib/pcre_stringpiece.cc delete mode 100644 ext/pcre/pcrelib/pcre_stringpiece.h delete mode 100644 ext/pcre/pcrelib/pcre_stringpiece_unittest.cc delete mode 100644 ext/pcre/pcrelib/pcre_study.c delete mode 100644 ext/pcre/pcrelib/pcre_tables.c delete mode 100644 ext/pcre/pcrelib/pcre_try_flipped.c delete mode 100644 ext/pcre/pcrelib/pcre_ucp_searchfuncs.c delete mode 100644 ext/pcre/pcrelib/pcre_valid_utf8.c delete mode 100644 ext/pcre/pcrelib/pcre_version.c delete mode 100644 ext/pcre/pcrelib/pcre_xclass.c delete mode 100644 ext/pcre/pcrelib/pcrecpp.cc delete mode 100644 ext/pcre/pcrelib/pcrecpp.h delete mode 100644 ext/pcre/pcrelib/pcrecpp_unittest.cc delete mode 100644 ext/pcre/pcrelib/pcrecpparg.h delete mode 100644 ext/pcre/pcrelib/pcredemo.c delete mode 100644 ext/pcre/pcrelib/pcregrep.c delete mode 100644 ext/pcre/pcrelib/pcreposix.c delete mode 100644 ext/pcre/pcrelib/pcreposix.h delete mode 100644 ext/pcre/pcrelib/pcretest.c delete mode 100644 ext/pcre/pcrelib/testdata/grepinput delete mode 100644 ext/pcre/pcrelib/testdata/grepinput8 delete mode 100644 ext/pcre/pcrelib/testdata/grepinputx delete mode 100644 ext/pcre/pcrelib/testdata/greplist delete mode 100644 ext/pcre/pcrelib/testdata/grepoutput delete mode 100644 ext/pcre/pcrelib/testdata/grepoutput8 delete mode 100644 ext/pcre/pcrelib/testdata/testinput1 delete mode 100644 ext/pcre/pcrelib/testdata/testinput2 delete mode 100644 ext/pcre/pcrelib/testdata/testinput3 delete mode 100644 ext/pcre/pcrelib/testdata/testinput4 delete mode 100644 ext/pcre/pcrelib/testdata/testinput5 delete mode 100644 ext/pcre/pcrelib/testdata/testinput6 delete mode 100644 ext/pcre/pcrelib/testdata/testinput7 delete mode 100644 ext/pcre/pcrelib/testdata/testinput8 delete mode 100644 ext/pcre/pcrelib/testdata/testinput9 delete mode 100644 ext/pcre/pcrelib/testdata/testoutput1 delete mode 100644 ext/pcre/pcrelib/testdata/testoutput2 delete mode 100644 ext/pcre/pcrelib/testdata/testoutput3 delete mode 100644 ext/pcre/pcrelib/testdata/testoutput4 delete mode 100644 ext/pcre/pcrelib/testdata/testoutput5 delete mode 100644 ext/pcre/pcrelib/testdata/testoutput6 delete mode 100644 ext/pcre/pcrelib/testdata/testoutput7 delete mode 100644 ext/pcre/pcrelib/testdata/testoutput8 delete mode 100644 ext/pcre/pcrelib/testdata/testoutput9 delete mode 100644 ext/pcre/pcrelib/ucp.h delete mode 100644 ext/pcre/pcrelib/ucpinternal.h delete mode 100644 ext/pcre/pcrelib/ucptable.c delete mode 100644 ext/pcre/php_pcre.c delete mode 100644 ext/pcre/php_pcre.def delete mode 100644 ext/pcre/php_pcre.h delete mode 100644 ext/pcre/tests/001.phpt delete mode 100644 ext/pcre/tests/002.phpt delete mode 100644 ext/pcre/tests/003.phpt delete mode 100644 ext/pcre/tests/004.phpt delete mode 100644 ext/pcre/tests/005.phpt delete mode 100644 ext/pcre/tests/backtrack_limit.phpt delete mode 100644 ext/pcre/tests/bug20528.phpt delete mode 100644 ext/pcre/tests/bug21732.phpt delete mode 100644 ext/pcre/tests/bug21758.phpt delete mode 100644 ext/pcre/tests/bug26927.phpt delete mode 100644 ext/pcre/tests/bug27011.phpt delete mode 100644 ext/pcre/tests/bug27103.phpt delete mode 100644 ext/pcre/tests/bug33200.phpt delete mode 100755 ext/pcre/tests/bug34790.phpt delete mode 100644 ext/pcre/tests/bug37800.phpt delete mode 100644 ext/pcre/tests/bug38600.phpt delete mode 100644 ext/pcre/tests/bug40195.phpt delete mode 100644 ext/pcre/tests/cache_limit.phpt delete mode 100644 ext/pcre/tests/delimiters.phpt delete mode 100644 ext/pcre/tests/dollar_endonly.phpt delete mode 100644 ext/pcre/tests/grep.phpt delete mode 100644 ext/pcre/tests/grep2.phpt delete mode 100644 ext/pcre/tests/invalid_utf8.phpt delete mode 100644 ext/pcre/tests/locales.phpt delete mode 100644 ext/pcre/tests/match_flags.phpt delete mode 100644 ext/pcre/tests/match_flags2.phpt delete mode 100644 ext/pcre/tests/match_flags3.phpt delete mode 100644 ext/pcre/tests/multiline.phpt delete mode 100644 ext/pcre/tests/pcre_anchored.phpt delete mode 100644 ext/pcre/tests/pcre_count.phpt delete mode 100644 ext/pcre/tests/pcre_extended.phpt delete mode 100644 ext/pcre/tests/pcre_extra.phpt delete mode 100644 ext/pcre/tests/preg_replace.phpt delete mode 100644 ext/pcre/tests/preg_replace2.phpt delete mode 100644 ext/pcre/tests/preg_replace_callback.phpt delete mode 100644 ext/pcre/tests/preg_replace_callback2.phpt delete mode 100644 ext/pcre/tests/preg_replace_callback3.phpt delete mode 100644 ext/pcre/tests/recursion_limit.phpt delete mode 100644 ext/pcre/tests/split.phpt delete mode 100644 ext/pcre/tests/split2.phpt delete mode 100644 ext/pcre/tests/study.phpt delete mode 100644 ext/pcre/tests/ungreedy.phpt delete mode 100644 ext/pdo/EXPERIMENTAL delete mode 100644 ext/pdo/php_pdo_phpvers_compat.h delete mode 100644 ext/pdo/tests/bug_34630.phpt delete mode 100644 ext/pdo/tests/bug_34687.phpt delete mode 100755 ext/pdo/tests/bug_36428.phpt delete mode 100644 ext/pdo/tests/bug_36798.phpt delete mode 100644 ext/pdo/tests/bug_38253.phpt delete mode 100644 ext/pdo/tests/bug_38394.phpt delete mode 100644 ext/pdo/tests/bug_39398.phpt delete mode 100644 ext/pdo/tests/bug_39656.phpt delete mode 100755 ext/pdo/tests/pdo.inc delete mode 100644 ext/pdo/tests/pdo_001.phpt delete mode 100644 ext/pdo/tests/pdo_002.phpt delete mode 100644 ext/pdo/tests/pdo_003.phpt delete mode 100644 ext/pdo/tests/pdo_004.phpt delete mode 100644 ext/pdo/tests/pdo_005.phpt delete mode 100644 ext/pdo/tests/pdo_006.phpt delete mode 100644 ext/pdo/tests/pdo_007.phpt delete mode 100644 ext/pdo/tests/pdo_008.phpt delete mode 100644 ext/pdo/tests/pdo_009.phpt delete mode 100644 ext/pdo/tests/pdo_010.phpt delete mode 100644 ext/pdo/tests/pdo_011.phpt delete mode 100644 ext/pdo/tests/pdo_012.phpt delete mode 100644 ext/pdo/tests/pdo_013.phpt delete mode 100644 ext/pdo/tests/pdo_014.phpt delete mode 100644 ext/pdo/tests/pdo_015.phpt delete mode 100644 ext/pdo/tests/pdo_016.phpt delete mode 100755 ext/pdo/tests/pdo_016a.phpt delete mode 100644 ext/pdo/tests/pdo_017.phpt delete mode 100644 ext/pdo/tests/pdo_018.phpt delete mode 100644 ext/pdo/tests/pdo_019.phpt delete mode 100644 ext/pdo/tests/pdo_020.phpt delete mode 100644 ext/pdo/tests/pdo_021.phpt delete mode 100644 ext/pdo/tests/pdo_022.phpt delete mode 100644 ext/pdo/tests/pdo_023.phpt delete mode 100644 ext/pdo/tests/pdo_024.phpt delete mode 100644 ext/pdo/tests/pdo_025.phpt delete mode 100644 ext/pdo/tests/pdo_026.phpt delete mode 100644 ext/pdo/tests/pdo_027.phpt delete mode 100644 ext/pdo/tests/pdo_028.phpt delete mode 100755 ext/pdo/tests/pdo_029.phpt delete mode 100755 ext/pdo/tests/pdo_030.phpt delete mode 100755 ext/pdo/tests/pdo_031.phpt delete mode 100644 ext/pdo/tests/pdo_032.phpt delete mode 100644 ext/pdo/tests/pdo_033.phpt delete mode 100644 ext/pdo/tests/pdo_test.inc delete mode 100644 ext/pdo/tests/pecl_bug_5217.phpt delete mode 100644 ext/pdo_dblib/CREDITS delete mode 100644 ext/pdo_dblib/README delete mode 100644 ext/pdo_dblib/config.m4 delete mode 100755 ext/pdo_dblib/config.w32 delete mode 100644 ext/pdo_dblib/db.php delete mode 100644 ext/pdo_dblib/dblib_driver.c delete mode 100644 ext/pdo_dblib/dblib_stmt.c delete mode 100644 ext/pdo_dblib/package.xml delete mode 100644 ext/pdo_dblib/pdo_dblib.c delete mode 100644 ext/pdo_dblib/php_pdo_dblib.h delete mode 100644 ext/pdo_dblib/php_pdo_dblib_int.h delete mode 100644 ext/pdo_dblib/tests/common.phpt delete mode 100644 ext/pdo_firebird/CREDITS delete mode 100644 ext/pdo_firebird/EXPERIMENTAL delete mode 100644 ext/pdo_firebird/config.m4 delete mode 100644 ext/pdo_firebird/config.w32 delete mode 100644 ext/pdo_firebird/firebird_driver.c delete mode 100644 ext/pdo_firebird/firebird_statement.c delete mode 100644 ext/pdo_firebird/package.xml delete mode 100644 ext/pdo_firebird/pdo_firebird.c delete mode 100644 ext/pdo_firebird/php_pdo_firebird.h delete mode 100644 ext/pdo_firebird/php_pdo_firebird_int.h delete mode 100644 ext/pdo_firebird/tests/common.phpt delete mode 100644 ext/pdo_firebird/tests/connect.phpt delete mode 100644 ext/pdo_firebird/tests/ddl.phpt delete mode 100644 ext/pdo_firebird/tests/execute.phpt delete mode 100644 ext/pdo_firebird/tests/skipif.inc delete mode 100644 ext/pdo_firebird/tests/testdb.inc delete mode 100644 ext/pdo_mysql/config.w32 delete mode 100644 ext/pdo_mysql/get_error_codes.php delete mode 100644 ext/pdo_mysql/tests/bug_33689.phpt delete mode 100644 ext/pdo_mysql/tests/bug_37445.phpt delete mode 100644 ext/pdo_mysql/tests/bug_39483.phpt delete mode 100644 ext/pdo_mysql/tests/common.phpt delete mode 100644 ext/pdo_mysql/tests/config.inc delete mode 100644 ext/pdo_mysql/tests/last_insert_id.phpt delete mode 100644 ext/pdo_mysql/tests/show_tables.phpt delete mode 100644 ext/pdo_oci/EXPERIMENTAL delete mode 100755 ext/pdo_oci/package.xml create mode 100644 ext/pdo_oci/package2.xml delete mode 100644 ext/pdo_oci/tests/common.phpt delete mode 100644 ext/pdo_odbc/EXPERIMENTAL delete mode 100755 ext/pdo_odbc/package.xml create mode 100644 ext/pdo_odbc/package2.xml delete mode 100644 ext/pdo_odbc/tests/common.phpt delete mode 100644 ext/pdo_odbc/tests/long_columns.phpt delete mode 100644 ext/pdo_pgsql/tests/bug36727.phpt delete mode 100644 ext/pdo_pgsql/tests/bug_33876.phpt delete mode 100644 ext/pdo_pgsql/tests/common.phpt delete mode 100644 ext/pdo_pgsql/tests/large_objects.phpt delete mode 100644 ext/pdo_sqlite/EXPERIMENTAL delete mode 100755 ext/pdo_sqlite/package.xml create mode 100644 ext/pdo_sqlite/package2.xml delete mode 100755 ext/pdo_sqlite/post-bundle.sh delete mode 100644 ext/pdo_sqlite/sqlite/src/complete.c create mode 100644 ext/pdo_sqlite/sqlite/src/experimental.c delete mode 100644 ext/pdo_sqlite/sqlite/src/loadext.c delete mode 100644 ext/pdo_sqlite/sqlite/src/os.c create mode 100644 ext/pdo_sqlite/sqlite/src/os_mac.c create mode 100644 ext/pdo_sqlite/sqlite/src/os_mac.h delete mode 100644 ext/pdo_sqlite/sqlite/src/sqlite3ext.h delete mode 100644 ext/pdo_sqlite/sqlite/src/sqlite_config.w32.h delete mode 100644 ext/pdo_sqlite/sqlite/src/vtab.c delete mode 100644 ext/pdo_sqlite/tests/bug33841.phpt delete mode 100644 ext/pdo_sqlite/tests/bug35336.phpt delete mode 100644 ext/pdo_sqlite/tests/common.phpt delete mode 100644 ext/pgsql/CREDITS delete mode 100644 ext/pgsql/README delete mode 100644 ext/pgsql/config.m4 delete mode 100644 ext/pgsql/config.w32 delete mode 100644 ext/pgsql/mysql_users.php delete mode 100644 ext/pgsql/pgsql.c delete mode 100644 ext/pgsql/pgsql.dsp delete mode 100644 ext/pgsql/pgsql.mak delete mode 100644 ext/pgsql/php_pgsql.h delete mode 100644 ext/pgsql/tests/01createdb.phpt delete mode 100644 ext/pgsql/tests/02connection.phpt delete mode 100644 ext/pgsql/tests/03sync_query.phpt delete mode 100644 ext/pgsql/tests/04async_query.phpt delete mode 100644 ext/pgsql/tests/05large_object.phpt delete mode 100644 ext/pgsql/tests/06copy.phpt delete mode 100644 ext/pgsql/tests/07optional.phpt delete mode 100644 ext/pgsql/tests/08escape.phpt delete mode 100644 ext/pgsql/tests/09notice.phpt delete mode 100644 ext/pgsql/tests/10pg_convert.phpt delete mode 100644 ext/pgsql/tests/11pg_meta_data.phpt delete mode 100644 ext/pgsql/tests/12pg_insert.phpt delete mode 100644 ext/pgsql/tests/13pg_select.phpt delete mode 100644 ext/pgsql/tests/14pg_update.phpt delete mode 100644 ext/pgsql/tests/15pg_delete.phpt delete mode 100644 ext/pgsql/tests/16pg_result_status.phpt delete mode 100644 ext/pgsql/tests/17result.phpt delete mode 100644 ext/pgsql/tests/18pg_escape_bytea.phpt delete mode 100644 ext/pgsql/tests/19pg_ping.phpt delete mode 100644 ext/pgsql/tests/20pg_get_pid.phpt delete mode 100644 ext/pgsql/tests/21pg_get_notify.phpt delete mode 100755 ext/pgsql/tests/22pg_fetch_object.phpt delete mode 100644 ext/pgsql/tests/23sync_query_params.phpt delete mode 100644 ext/pgsql/tests/24sync_query_prepared.phpt delete mode 100644 ext/pgsql/tests/25async_query_params.phpt delete mode 100644 ext/pgsql/tests/26async_query_prepared.phpt delete mode 100644 ext/pgsql/tests/80_bug14383.phpt delete mode 100755 ext/pgsql/tests/80_bug24499.phpt delete mode 100755 ext/pgsql/tests/80_bug27597.phpt delete mode 100755 ext/pgsql/tests/80_bug32223.phpt delete mode 100755 ext/pgsql/tests/80_bug32223b.phpt delete mode 100755 ext/pgsql/tests/80_bug36625.phpt delete mode 100644 ext/pgsql/tests/98old_api.phpt delete mode 100644 ext/pgsql/tests/9999dropdb.phpt delete mode 100644 ext/pgsql/tests/README delete mode 100644 ext/pgsql/tests/config.inc delete mode 100644 ext/pgsql/tests/php.gif delete mode 100644 ext/pgsql/tests/skipif.inc create mode 100644 ext/phar/package.php delete mode 100644 ext/phar/phar.php delete mode 100755 ext/phar/tests/phar_offset_get_error.phpt delete mode 100755 ext/phar/tests/phar_stub_error.phpt delete mode 100644 ext/posix/CREDITS delete mode 100644 ext/posix/config.m4 delete mode 100644 ext/posix/package.xml delete mode 100644 ext/posix/php_posix.h delete mode 100644 ext/posix/posix.c delete mode 100644 ext/posix/tests/001.phpt delete mode 100644 ext/pspell/CREDITS delete mode 100644 ext/pspell/README delete mode 100644 ext/pspell/config.m4 delete mode 100644 ext/pspell/config.w32 delete mode 100644 ext/pspell/php_pspell.h delete mode 100644 ext/pspell/pspell.c delete mode 100644 ext/pspell/pspell.dsp delete mode 100644 ext/pspell/tests/001.phpt delete mode 100644 ext/pspell/tests/002.phpt delete mode 100644 ext/pspell/tests/003.phpt delete mode 100644 ext/pspell/tests/004.phpt delete mode 100644 ext/pspell/tests/005.phpt delete mode 100644 ext/pspell/tests/wordlist.txt delete mode 100644 ext/readline/CREDITS delete mode 100644 ext/readline/README.libedit delete mode 100644 ext/readline/config.m4 delete mode 100644 ext/readline/php_readline.h delete mode 100644 ext/readline/readline.c delete mode 100644 ext/recode/CREDITS delete mode 100644 ext/recode/config.m4 delete mode 100644 ext/recode/config9.m4 delete mode 100644 ext/recode/php_recode.h delete mode 100644 ext/recode/recode.c delete mode 100755 ext/reflection/CREDITS delete mode 100755 ext/reflection/TODO delete mode 100755 ext/reflection/config.m4 delete mode 100755 ext/reflection/config.w32 delete mode 100644 ext/reflection/php_reflection.c delete mode 100644 ext/reflection/php_reflection.h delete mode 100755 ext/reflection/tests/001.phpt delete mode 100755 ext/reflection/tests/002.phpt delete mode 100755 ext/reflection/tests/003.phpt delete mode 100755 ext/reflection/tests/004.phpt delete mode 100755 ext/reflection/tests/005.phpt delete mode 100755 ext/reflection/tests/006.phpt delete mode 100755 ext/reflection/tests/007.phpt delete mode 100755 ext/reflection/tests/008.phpt delete mode 100755 ext/reflection/tests/009.phpt delete mode 100755 ext/reflection/tests/010.phpt delete mode 100755 ext/reflection/tests/011.phpt delete mode 100755 ext/reflection/tests/012.phpt delete mode 100755 ext/reflection/tests/013.phpt delete mode 100755 ext/reflection/tests/014.phpt delete mode 100755 ext/reflection/tests/015.phpt delete mode 100755 ext/reflection/tests/016.phpt delete mode 100755 ext/reflection/tests/017.phpt delete mode 100755 ext/reflection/tests/018.phpt delete mode 100755 ext/reflection/tests/019.phpt delete mode 100755 ext/reflection/tests/020.phpt delete mode 100755 ext/reflection/tests/021.phpt delete mode 100755 ext/reflection/tests/022.phpt delete mode 100755 ext/reflection/tests/023.phpt delete mode 100755 ext/reflection/tests/024.phpt delete mode 100755 ext/reflection/tests/bug26640.phpt delete mode 100755 ext/reflection/tests/bug26695.phpt delete mode 100755 ext/reflection/tests/bug29268.phpt delete mode 100755 ext/reflection/tests/bug29523.phpt delete mode 100755 ext/reflection/tests/bug29828.phpt delete mode 100644 ext/reflection/tests/bug29986.phpt delete mode 100755 ext/reflection/tests/bug30146.phpt delete mode 100755 ext/reflection/tests/bug30148.phpt delete mode 100755 ext/reflection/tests/bug30209.phpt delete mode 100755 ext/reflection/tests/bug30856.phpt delete mode 100755 ext/reflection/tests/bug30961.phpt delete mode 100755 ext/reflection/tests/bug31651.phpt delete mode 100755 ext/reflection/tests/bug32981.phpt delete mode 100755 ext/reflection/tests/bug33312.phpt delete mode 100755 ext/reflection/tests/bug33389.phpt delete mode 100755 ext/reflection/tests/bug36308.phpt delete mode 100644 ext/reflection/tests/bug36337.phpt delete mode 100644 ext/reflection/tests/bug36434.phpt delete mode 100755 ext/reflection/tests/bug37816.phpt delete mode 100755 ext/reflection/tests/bug38132.phpt delete mode 100755 ext/reflection/tests/bug38194.phpt delete mode 100644 ext/reflection/tests/bug38217.phpt delete mode 100644 ext/reflection/tests/bug38465.phpt delete mode 100644 ext/reflection/tests/bug38653.phpt delete mode 100755 ext/reflection/tests/bug38942.phpt delete mode 100644 ext/reflection/tests/bug39001.phpt delete mode 100644 ext/reflection/tests/bug39067.phpt delete mode 100644 ext/reflection/tests/bug39884.phpt delete mode 100644 ext/reflection/tests/bug40431.phpt delete mode 100644 ext/reflection/tests/bug40794.phpt delete mode 100644 ext/reflection/tests/exception.inc delete mode 100755 ext/reflection/tests/parameters_001.phpt delete mode 100755 ext/reflection/tests/parameters_002.phpt delete mode 100755 ext/reflection/tests/property_exists.phpt delete mode 100755 ext/reflection/tests/static_properties_002.phpt delete mode 100644 ext/session/CREDITS delete mode 100644 ext/session/config.m4 delete mode 100644 ext/session/config.w32 delete mode 100644 ext/session/mod_files.c delete mode 100644 ext/session/mod_files.h delete mode 100644 ext/session/mod_files.sh delete mode 100644 ext/session/mod_mm.c delete mode 100644 ext/session/mod_mm.h delete mode 100644 ext/session/mod_user.c delete mode 100644 ext/session/mod_user.h delete mode 100644 ext/session/package.xml delete mode 100644 ext/session/php_session.h delete mode 100644 ext/session/session.c delete mode 100644 ext/session/tests/001.phpt delete mode 100644 ext/session/tests/002.phpt delete mode 100644 ext/session/tests/003.phpt delete mode 100644 ext/session/tests/004.phpt delete mode 100644 ext/session/tests/005.phpt delete mode 100644 ext/session/tests/006.phpt delete mode 100644 ext/session/tests/009.phpt delete mode 100644 ext/session/tests/010.phpt delete mode 100644 ext/session/tests/011.phpt delete mode 100644 ext/session/tests/013.phpt delete mode 100644 ext/session/tests/014.phpt delete mode 100644 ext/session/tests/015.phpt delete mode 100644 ext/session/tests/016.phpt delete mode 100644 ext/session/tests/017.phpt delete mode 100644 ext/session/tests/018.phpt delete mode 100644 ext/session/tests/020.phpt delete mode 100644 ext/session/tests/021.phpt delete mode 100644 ext/session/tests/bug24592.phpt delete mode 100644 ext/session/tests/bug26862.phpt delete mode 100644 ext/session/tests/bug31454.phpt delete mode 100644 ext/session/tests/bug36459.phpt delete mode 100644 ext/session/tests/bug38377.phpt delete mode 100644 ext/session/tests/skipif.inc delete mode 100644 ext/shmop/CREDITS delete mode 100644 ext/shmop/README delete mode 100644 ext/shmop/config.m4 delete mode 100644 ext/shmop/config.w32 delete mode 100644 ext/shmop/package.xml delete mode 100644 ext/shmop/php_shmop.h delete mode 100644 ext/shmop/shmop.c delete mode 100644 ext/shmop/shmop.dsp delete mode 100644 ext/shmop/tests/001.phpt delete mode 100644 ext/simplexml/CREDITS delete mode 100755 ext/simplexml/README delete mode 100644 ext/simplexml/config.m4 delete mode 100644 ext/simplexml/config.w32 delete mode 100644 ext/simplexml/examples/book.php delete mode 100644 ext/simplexml/examples/book.xml delete mode 100644 ext/simplexml/examples/interop.php delete mode 100644 ext/simplexml/examples/security.php delete mode 100644 ext/simplexml/examples/security.xml delete mode 100644 ext/simplexml/examples/xpath.php delete mode 100644 ext/simplexml/php_simplexml.h delete mode 100755 ext/simplexml/php_simplexml_exports.h delete mode 100644 ext/simplexml/simplexml.c delete mode 100644 ext/simplexml/simplexml.dsp delete mode 100755 ext/simplexml/tests/000.phpt delete mode 100755 ext/simplexml/tests/000.xml delete mode 100644 ext/simplexml/tests/001.phpt delete mode 100644 ext/simplexml/tests/002.phpt delete mode 100755 ext/simplexml/tests/003.phpt delete mode 100755 ext/simplexml/tests/004.phpt delete mode 100755 ext/simplexml/tests/005.phpt delete mode 100755 ext/simplexml/tests/006.phpt delete mode 100755 ext/simplexml/tests/007.phpt delete mode 100644 ext/simplexml/tests/008.phpt delete mode 100755 ext/simplexml/tests/009.phpt delete mode 100755 ext/simplexml/tests/009b.phpt delete mode 100644 ext/simplexml/tests/010.phpt delete mode 100755 ext/simplexml/tests/011.phpt delete mode 100755 ext/simplexml/tests/012.phpt delete mode 100755 ext/simplexml/tests/013.phpt delete mode 100644 ext/simplexml/tests/014.phpt delete mode 100755 ext/simplexml/tests/014a.phpt delete mode 100755 ext/simplexml/tests/014b.phpt delete mode 100644 ext/simplexml/tests/015.phpt delete mode 100644 ext/simplexml/tests/016.phpt delete mode 100755 ext/simplexml/tests/016a.phpt delete mode 100644 ext/simplexml/tests/017.phpt delete mode 100644 ext/simplexml/tests/018.phpt delete mode 100755 ext/simplexml/tests/019.phpt delete mode 100755 ext/simplexml/tests/020.phpt delete mode 100644 ext/simplexml/tests/021.phpt delete mode 100755 ext/simplexml/tests/022.phpt delete mode 100755 ext/simplexml/tests/023.phpt delete mode 100755 ext/simplexml/tests/024.phpt delete mode 100755 ext/simplexml/tests/025.phpt delete mode 100755 ext/simplexml/tests/026.phpt delete mode 100755 ext/simplexml/tests/027.phpt delete mode 100755 ext/simplexml/tests/028.phpt delete mode 100755 ext/simplexml/tests/029.phpt delete mode 100644 ext/simplexml/tests/030.phpt delete mode 100644 ext/simplexml/tests/031.phpt delete mode 100755 ext/simplexml/tests/032.phpt delete mode 100755 ext/simplexml/tests/033.phpt delete mode 100644 ext/simplexml/tests/book.xml delete mode 100644 ext/simplexml/tests/bug24392.phpt delete mode 100644 ext/simplexml/tests/bug24392.xml delete mode 100644 ext/simplexml/tests/bug25756.xsd delete mode 100644 ext/simplexml/tests/bug25756_1.xml delete mode 100644 ext/simplexml/tests/bug25756_2.xml delete mode 100644 ext/simplexml/tests/bug26976.phpt delete mode 100755 ext/simplexml/tests/bug27010.phpt delete mode 100755 ext/simplexml/tests/bug35785.phpt delete mode 100644 ext/simplexml/tests/bug36611.phpt delete mode 100755 ext/simplexml/tests/bug37565.phpt delete mode 100644 ext/simplexml/tests/bug38347.phpt delete mode 100644 ext/simplexml/tests/bug38354.phpt delete mode 100644 ext/simplexml/tests/bug38406.phpt delete mode 100644 ext/simplexml/tests/bug38424.phpt delete mode 100644 ext/simplexml/tests/bug39662.phpt delete mode 100644 ext/simplexml/tests/bug39760.phpt delete mode 100644 ext/simplexml/tests/bug40451.phpt delete mode 100644 ext/simplexml/tests/profile01.phpt delete mode 100644 ext/simplexml/tests/profile02.phpt delete mode 100644 ext/simplexml/tests/profile03.phpt delete mode 100644 ext/simplexml/tests/profile04.phpt delete mode 100644 ext/simplexml/tests/profile05.phpt delete mode 100644 ext/simplexml/tests/profile06.phpt delete mode 100644 ext/simplexml/tests/profile07.phpt delete mode 100644 ext/simplexml/tests/profile08.phpt delete mode 100644 ext/simplexml/tests/profile09.phpt delete mode 100644 ext/simplexml/tests/profile10.phpt delete mode 100644 ext/simplexml/tests/profile11.phpt delete mode 100755 ext/simplexml/tests/profile12.phpt delete mode 100755 ext/simplexml/tests/profile13.phpt delete mode 100755 ext/simplexml/tests/simplexml_import_dom.phpt delete mode 100755 ext/simplexml/tests/sxe.dtd delete mode 100755 ext/simplexml/tests/sxe.ent delete mode 100755 ext/simplexml/tests/sxe.xml delete mode 100644 ext/skeleton/CREDITS delete mode 100644 ext/skeleton/EXPERIMENTAL delete mode 100755 ext/skeleton/create_stubs delete mode 100644 ext/skeleton/php_skeleton.h delete mode 100644 ext/skeleton/skeleton.c delete mode 100644 ext/skeleton/skeleton.dsp delete mode 100644 ext/skeleton/skeleton.php delete mode 100644 ext/skeleton/tests/001.phpt delete mode 100644 ext/snmp/CREDITS delete mode 100644 ext/snmp/config.m4 delete mode 100644 ext/snmp/config.w32 delete mode 100644 ext/snmp/php_snmp.h delete mode 100644 ext/snmp/snmp.c delete mode 100644 ext/snmp/snmp.dsp delete mode 100644 ext/snmp/winsnmp.c delete mode 100644 ext/soap/CREDITS delete mode 100644 ext/soap/TODO delete mode 100644 ext/soap/TODO.old delete mode 100644 ext/soap/config.m4 delete mode 100644 ext/soap/config.w32 delete mode 100644 ext/soap/interop/client_round2.php delete mode 100644 ext/soap/interop/client_round2_interop.php delete mode 100644 ext/soap/interop/client_round2_params.php delete mode 100644 ext/soap/interop/client_round2_results.php delete mode 100644 ext/soap/interop/client_round2_run.php delete mode 100644 ext/soap/interop/config.php.dist delete mode 100644 ext/soap/interop/database_round2.sql delete mode 100644 ext/soap/interop/echoheadersvc.wsdl.php delete mode 100644 ext/soap/interop/index.php delete mode 100644 ext/soap/interop/interop.wsdl.php delete mode 100644 ext/soap/interop/interopB.wsdl.php delete mode 100644 ext/soap/interop/server_round2_base.php delete mode 100644 ext/soap/interop/server_round2_groupB.php delete mode 100644 ext/soap/interop/server_round2_groupC.php delete mode 100644 ext/soap/interop/test.utility.php delete mode 100644 ext/soap/package.xml delete mode 100644 ext/soap/php_encoding.c delete mode 100644 ext/soap/php_encoding.h delete mode 100644 ext/soap/php_http.c delete mode 100644 ext/soap/php_http.h delete mode 100644 ext/soap/php_packet_soap.c delete mode 100644 ext/soap/php_packet_soap.h delete mode 100644 ext/soap/php_schema.c delete mode 100644 ext/soap/php_schema.h delete mode 100644 ext/soap/php_sdl.c delete mode 100644 ext/soap/php_sdl.h delete mode 100644 ext/soap/php_soap.dsp delete mode 100644 ext/soap/php_soap.h delete mode 100644 ext/soap/php_xml.c delete mode 100644 ext/soap/php_xml.h delete mode 100644 ext/soap/readme.html delete mode 100644 ext/soap/soap.c delete mode 100755 ext/soap/tests/any.phpt delete mode 100644 ext/soap/tests/bugs/bug27722.phpt delete mode 100644 ext/soap/tests/bugs/bug27722.wsdl delete mode 100644 ext/soap/tests/bugs/bug27742.phpt delete mode 100644 ext/soap/tests/bugs/bug27742.wsdl delete mode 100644 ext/soap/tests/bugs/bug28751.phpt delete mode 100644 ext/soap/tests/bugs/bug28969.phpt delete mode 100644 ext/soap/tests/bugs/bug28985.phpt delete mode 100644 ext/soap/tests/bugs/bug28985.wsdl delete mode 100644 ext/soap/tests/bugs/bug29061.phpt delete mode 100644 ext/soap/tests/bugs/bug29061.wsdl delete mode 100644 ext/soap/tests/bugs/bug29109.phpt delete mode 100644 ext/soap/tests/bugs/bug29109.wsdl delete mode 100644 ext/soap/tests/bugs/bug29236.phpt delete mode 100644 ext/soap/tests/bugs/bug29236.wsdl delete mode 100644 ext/soap/tests/bugs/bug29795.phpt delete mode 100644 ext/soap/tests/bugs/bug29795.wsdl delete mode 100644 ext/soap/tests/bugs/bug29830.phpt delete mode 100644 ext/soap/tests/bugs/bug29839.phpt delete mode 100644 ext/soap/tests/bugs/bug29839.wsdl delete mode 100644 ext/soap/tests/bugs/bug29844.phpt delete mode 100644 ext/soap/tests/bugs/bug29844.wsdl delete mode 100644 ext/soap/tests/bugs/bug30045.phpt delete mode 100644 ext/soap/tests/bugs/bug30106.phpt delete mode 100644 ext/soap/tests/bugs/bug30106.wsdl delete mode 100644 ext/soap/tests/bugs/bug30175.phpt delete mode 100644 ext/soap/tests/bugs/bug30175.wsdl delete mode 100644 ext/soap/tests/bugs/bug30799.phpt delete mode 100644 ext/soap/tests/bugs/bug30928.phpt delete mode 100644 ext/soap/tests/bugs/bug30928.wsdl delete mode 100644 ext/soap/tests/bugs/bug30994.phpt delete mode 100644 ext/soap/tests/bugs/bug31422.phpt delete mode 100644 ext/soap/tests/bugs/bug31695.phpt delete mode 100644 ext/soap/tests/bugs/bug31695.wsdl delete mode 100644 ext/soap/tests/bugs/bug31755.phpt delete mode 100644 ext/soap/tests/bugs/bug32776.phpt delete mode 100644 ext/soap/tests/bugs/bug32776.wsdl delete mode 100755 ext/soap/tests/bugs/bug32941.phpt delete mode 100755 ext/soap/tests/bugs/bug32941.wsdl delete mode 100755 ext/soap/tests/bugs/bug34449.phpt delete mode 100755 ext/soap/tests/bugs/bug34453.phpt delete mode 100755 ext/soap/tests/bugs/bug34453.wsdl delete mode 100755 ext/soap/tests/bugs/bug34643.phpt delete mode 100755 ext/soap/tests/bugs/bug34643.wsdl delete mode 100755 ext/soap/tests/bugs/bug35142.phpt delete mode 100755 ext/soap/tests/bugs/bug35142.wsdl delete mode 100755 ext/soap/tests/bugs/bug35273.phpt delete mode 100755 ext/soap/tests/bugs/bug36226-2.phpt delete mode 100755 ext/soap/tests/bugs/bug36226-2.wsdl delete mode 100755 ext/soap/tests/bugs/bug36226.phpt delete mode 100755 ext/soap/tests/bugs/bug36575.phpt delete mode 100755 ext/soap/tests/bugs/bug36575.wsdl delete mode 100755 ext/soap/tests/bugs/bug36614.phpt delete mode 100755 ext/soap/tests/bugs/bug36614.wsdl delete mode 100755 ext/soap/tests/bugs/bug36629.phpt delete mode 100755 ext/soap/tests/bugs/bug36908.phpt delete mode 100755 ext/soap/tests/bugs/bug36908.wsdl delete mode 100755 ext/soap/tests/bugs/bug37083.phpt delete mode 100755 ext/soap/tests/bugs/bug37083.wsdl delete mode 100755 ext/soap/tests/bugs/bug37278.phpt delete mode 100755 ext/soap/tests/bugs/bug38004.phpt delete mode 100755 ext/soap/tests/bugs/bug38004.wsdl delete mode 100755 ext/soap/tests/bugs/bug38005.phpt delete mode 100755 ext/soap/tests/bugs/bug38055.phpt delete mode 100755 ext/soap/tests/bugs/bug38055.wsdl delete mode 100755 ext/soap/tests/bugs/bug38067.phpt delete mode 100755 ext/soap/tests/bugs/bug38067.wsdl delete mode 100755 ext/soap/tests/bugs/bug38536.phpt delete mode 100755 ext/soap/tests/bugs/bug38536.wsdl delete mode 100755 ext/soap/tests/bugs/bug39121.phpt delete mode 100755 ext/soap/tests/bugs/bug39815.phpt delete mode 100755 ext/soap/tests/bugs/bug39832.phpt delete mode 100755 ext/soap/tests/bugs/bug39832.wsdl delete mode 100755 ext/soap/tests/bugs/bug40609.phpt delete mode 100755 ext/soap/tests/bugs/bug40609.wsdl delete mode 100644 ext/soap/tests/bugs/skipif.inc delete mode 100644 ext/soap/tests/bugs/xml.xsd delete mode 100755 ext/soap/tests/bugs/xml2.xsd delete mode 100644 ext/soap/tests/classmap.wsdl delete mode 100644 ext/soap/tests/classmap001.phpt delete mode 100644 ext/soap/tests/classmap002.phpt delete mode 100755 ext/soap/tests/classmap003.phpt delete mode 100755 ext/soap/tests/classmap003.wsdl delete mode 100755 ext/soap/tests/cookie.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_001p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_001s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_001w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_002p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_002s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_002w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_003p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_003s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_003w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_004p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_004s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_004w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_005p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_005s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_005w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_006p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_006s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_006w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_007p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_007s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_007w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_008p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_008s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_008w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_009p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_009s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_009w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_010p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_010s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_010w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_011p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_011s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_011w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_012p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_012s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_012w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_013p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_013s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_013w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_014p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_014s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_014w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_015p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_015s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_015w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_016p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_016s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_016w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_017p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_017s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_017w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_018p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_018s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_018w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_019p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_019s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_019w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_020p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_020s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_020w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_021p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_021s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_021w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_022p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_022s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_022w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_023p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_023s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_023w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_024p.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_024s.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/r2_base_024w.phpt delete mode 100644 ext/soap/tests/interop/Round2/Base/round2_base.inc delete mode 100644 ext/soap/tests/interop/Round2/Base/round2_base.wsdl delete mode 100644 ext/soap/tests/interop/Round2/Base/skipif.inc delete mode 100644 ext/soap/tests/interop/Round2/GroupB/r2_groupB_001p.phpt delete mode 100644 ext/soap/tests/interop/Round2/GroupB/r2_groupB_001s.phpt delete mode 100644 ext/soap/tests/interop/Round2/GroupB/r2_groupB_001w.phpt delete mode 100644 ext/soap/tests/interop/Round2/GroupB/r2_groupB_002p.phpt delete mode 100644 ext/soap/tests/interop/Round2/GroupB/r2_groupB_002s.phpt delete mode 100644 ext/soap/tests/interop/Round2/GroupB/r2_groupB_002w.phpt delete mode 100644 ext/soap/tests/interop/Round2/GroupB/r2_groupB_003p.phpt delete mode 100644 ext/soap/tests/interop/Round2/GroupB/r2_groupB_003s.phpt delete mode 100644 ext/soap/tests/interop/Round2/GroupB/r2_groupB_003w.phpt delete mode 100644 ext/soap/tests/interop/Round2/GroupB/r2_groupB_004p.phpt delete mode 100644 ext/soap/tests/interop/Round2/GroupB/r2_groupB_004s.phpt delete mode 100644 ext/soap/tests/interop/Round2/GroupB/r2_groupB_004w.phpt delete mode 100644 ext/soap/tests/interop/Round2/GroupB/r2_groupB_005p.phpt delete mode 100644 ext/soap/tests/interop/Round2/GroupB/r2_groupB_005s.phpt delete mode 100644 ext/soap/tests/interop/Round2/GroupB/r2_groupB_005w.phpt delete mode 100644 ext/soap/tests/interop/Round2/GroupB/round2_groupB.inc delete mode 100644 ext/soap/tests/interop/Round2/GroupB/round2_groupB.wsdl delete mode 100644 ext/soap/tests/interop/Round2/GroupB/skipif.inc delete mode 100644 ext/soap/tests/interop/Round3/GroupD/imported/import1B.wsdl delete mode 100644 ext/soap/tests/interop/Round3/GroupD/imported/import2B.wsdl delete mode 100644 ext/soap/tests/interop/Round3/GroupD/imported/import2B.xsd delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_compound1_001w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_compound1_002w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_compound1_003w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_compound2_001w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_doclit_001w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_doclit_002w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_doclit_003w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_doclit_004w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_doclitparams_001w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_doclitparams_002w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_doclitparams_003w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_doclitparams_004w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_emptysa_001w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_import1_001w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_import2_001w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_import3_001w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_import3_002w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_rpcenc_001w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_rpcenc_002w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_rpcenc_003w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/r3_groupD_rpcenc_004w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupD/round3_groupD_compound1.inc delete mode 100644 ext/soap/tests/interop/Round3/GroupD/round3_groupD_compound1.wsdl delete mode 100644 ext/soap/tests/interop/Round3/GroupD/round3_groupD_compound2.inc delete mode 100644 ext/soap/tests/interop/Round3/GroupD/round3_groupD_compound2.wsdl delete mode 100644 ext/soap/tests/interop/Round3/GroupD/round3_groupD_doclit.inc delete mode 100644 ext/soap/tests/interop/Round3/GroupD/round3_groupD_doclit.wsdl delete mode 100644 ext/soap/tests/interop/Round3/GroupD/round3_groupD_doclitparams.inc delete mode 100644 ext/soap/tests/interop/Round3/GroupD/round3_groupD_doclitparams.wsdl delete mode 100644 ext/soap/tests/interop/Round3/GroupD/round3_groupD_emptysa.inc delete mode 100644 ext/soap/tests/interop/Round3/GroupD/round3_groupD_emptysa.wsdl delete mode 100644 ext/soap/tests/interop/Round3/GroupD/round3_groupD_import1.inc delete mode 100644 ext/soap/tests/interop/Round3/GroupD/round3_groupD_import1.wsdl delete mode 100644 ext/soap/tests/interop/Round3/GroupD/round3_groupD_import2.inc delete mode 100644 ext/soap/tests/interop/Round3/GroupD/round3_groupD_import2.wsdl delete mode 100644 ext/soap/tests/interop/Round3/GroupD/round3_groupD_import2_absolute.wsdl delete mode 100644 ext/soap/tests/interop/Round3/GroupD/round3_groupD_import3.inc delete mode 100644 ext/soap/tests/interop/Round3/GroupD/round3_groupD_import3.wsdl delete mode 100644 ext/soap/tests/interop/Round3/GroupD/round3_groupD_rpcenc.inc delete mode 100644 ext/soap/tests/interop/Round3/GroupD/round3_groupD_rpcenc.wsdl delete mode 100644 ext/soap/tests/interop/Round3/GroupD/skipif.inc delete mode 100644 ext/soap/tests/interop/Round3/GroupE/r3_groupE_list_001w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupE/r3_groupE_list_002w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupE/r3_groupE_list_003w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupE/r3_groupE_list_004w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupE/r3_groupE_list_005w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupE/r3_groupE_list_006w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupE/round3_groupE_list.inc delete mode 100644 ext/soap/tests/interop/Round3/GroupE/round3_groupE_list.wsdl delete mode 100644 ext/soap/tests/interop/Round3/GroupE/skipif.inc delete mode 100644 ext/soap/tests/interop/Round3/GroupF/r3_groupF_ext_001w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupF/r3_groupF_extreq_001w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupF/r3_groupF_headers_001w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupF/r3_groupF_headers_002w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupF/r3_groupF_headers_003w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupF/r3_groupF_headers_004w.phpt delete mode 100644 ext/soap/tests/interop/Round3/GroupF/round3_groupF_ext.inc delete mode 100644 ext/soap/tests/interop/Round3/GroupF/round3_groupF_ext.wsdl delete mode 100644 ext/soap/tests/interop/Round3/GroupF/round3_groupF_extreq.wsdl delete mode 100644 ext/soap/tests/interop/Round3/GroupF/round3_groupF_headers.inc delete mode 100644 ext/soap/tests/interop/Round3/GroupF/round3_groupF_headers.wsdl delete mode 100644 ext/soap/tests/interop/Round3/GroupF/skipif.inc delete mode 100644 ext/soap/tests/interop/Round4/GroupG/round4_groupG_dimedoc.inc delete mode 100644 ext/soap/tests/interop/Round4/GroupG/round4_groupG_dimedoc.wsdl delete mode 100644 ext/soap/tests/interop/Round4/GroupG/round4_groupG_dimerpc.inc delete mode 100644 ext/soap/tests/interop/Round4/GroupG/round4_groupG_dimerpc.wsdl delete mode 100644 ext/soap/tests/interop/Round4/GroupG/round4_groupG_mimedoc.inc delete mode 100644 ext/soap/tests/interop/Round4/GroupG/round4_groupG_mimedoc.wsdl delete mode 100644 ext/soap/tests/interop/Round4/GroupG/round4_groupG_mimerpc.inc delete mode 100644 ext/soap/tests/interop/Round4/GroupG/round4_groupG_mimerpc.wsdl delete mode 100644 ext/soap/tests/interop/Round4/GroupG/skipif.inc delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_doclit_001w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_doclit_002w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_doclit_003w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_doclit_004w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_doclit_005w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_doclit_006w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_doclit_007w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_doclit_008w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_doclit_009w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_doclit_010w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_rpcenc_001w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_rpcenc_002w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_rpcenc_003w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_rpcenc_004w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_rpcenc_005w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_rpcenc_006w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_rpcenc_007w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_rpcenc_008w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_rpcenc_009w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_complex_rpcenc_010w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_doclit_001w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_doclit_002w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_doclit_003w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_doclit_004w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_doclit_005w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_doclit_006w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_doclit_007w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_doclit_008w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_doclit_009w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_doclit_010w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_doclit_011w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_doclit_012w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_doclit_013w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_doclit_014w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_doclit_015w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_doclit_016w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_doclit_017w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_rpcenc_001w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_rpcenc_002w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_rpcenc_003w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_rpcenc_004w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_rpcenc_005w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_rpcenc_006w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_rpcenc_007w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_rpcenc_008w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_rpcenc_009w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_rpcenc_010w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_rpcenc_011w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_rpcenc_012w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_rpcenc_013w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_rpcenc_014w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_rpcenc_015w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_rpcenc_016w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_simple_rpcenc_017w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_soapfault_001w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_soapfault_002w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_soapfault_003w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/r4_groupH_soapfault_004w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupH/round4_groupH_complex_doclit.inc delete mode 100644 ext/soap/tests/interop/Round4/GroupH/round4_groupH_complex_doclit.wsdl delete mode 100644 ext/soap/tests/interop/Round4/GroupH/round4_groupH_complex_rpcenc.inc delete mode 100644 ext/soap/tests/interop/Round4/GroupH/round4_groupH_complex_rpcenc.wsdl delete mode 100644 ext/soap/tests/interop/Round4/GroupH/round4_groupH_simple_doclit.inc delete mode 100644 ext/soap/tests/interop/Round4/GroupH/round4_groupH_simple_doclit.wsdl delete mode 100644 ext/soap/tests/interop/Round4/GroupH/round4_groupH_simple_rpcenc.inc delete mode 100644 ext/soap/tests/interop/Round4/GroupH/round4_groupH_simple_rpcenc.wsdl delete mode 100644 ext/soap/tests/interop/Round4/GroupH/round4_groupH_soapfault.inc delete mode 100644 ext/soap/tests/interop/Round4/GroupH/round4_groupH_soapfault.wsdl delete mode 100644 ext/soap/tests/interop/Round4/GroupH/skipif.inc delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_001w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_002w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_003w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_004w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_005w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_006w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_007w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_008w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_009w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_010w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_011w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_012w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_013w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_014w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_015w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_016w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_017w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_018w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_019w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_020w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_021w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_022w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_023w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_024w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_025w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_026w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_027w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_028w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_029w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_030w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_031w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_032w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_033w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_034w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/r4_groupI_xsd_035w.phpt delete mode 100644 ext/soap/tests/interop/Round4/GroupI/round4_groupI_xsd.inc delete mode 100644 ext/soap/tests/interop/Round4/GroupI/round4_groupI_xsd.wsdl delete mode 100644 ext/soap/tests/interop/Round4/GroupI/skipif.inc delete mode 100644 ext/soap/tests/schema/schema001.phpt delete mode 100644 ext/soap/tests/schema/schema002.phpt delete mode 100644 ext/soap/tests/schema/schema003.phpt delete mode 100644 ext/soap/tests/schema/schema004.phpt delete mode 100644 ext/soap/tests/schema/schema005.phpt delete mode 100644 ext/soap/tests/schema/schema006.phpt delete mode 100644 ext/soap/tests/schema/schema007.phpt delete mode 100644 ext/soap/tests/schema/schema008.phpt delete mode 100644 ext/soap/tests/schema/schema009.phpt delete mode 100644 ext/soap/tests/schema/schema010.phpt delete mode 100644 ext/soap/tests/schema/schema011.phpt delete mode 100644 ext/soap/tests/schema/schema012.phpt delete mode 100644 ext/soap/tests/schema/schema013.phpt delete mode 100644 ext/soap/tests/schema/schema014.phpt delete mode 100644 ext/soap/tests/schema/schema015.phpt delete mode 100644 ext/soap/tests/schema/schema016.phpt delete mode 100644 ext/soap/tests/schema/schema017.phpt delete mode 100644 ext/soap/tests/schema/schema018.phpt delete mode 100644 ext/soap/tests/schema/schema019.phpt delete mode 100644 ext/soap/tests/schema/schema020.phpt delete mode 100644 ext/soap/tests/schema/schema021.phpt delete mode 100644 ext/soap/tests/schema/schema022.phpt delete mode 100644 ext/soap/tests/schema/schema023.phpt delete mode 100644 ext/soap/tests/schema/schema024.phpt delete mode 100644 ext/soap/tests/schema/schema025.phpt delete mode 100644 ext/soap/tests/schema/schema026.phpt delete mode 100644 ext/soap/tests/schema/schema027.phpt delete mode 100644 ext/soap/tests/schema/schema028.phpt delete mode 100644 ext/soap/tests/schema/schema029.phpt delete mode 100644 ext/soap/tests/schema/schema030.phpt delete mode 100644 ext/soap/tests/schema/schema031.phpt delete mode 100644 ext/soap/tests/schema/schema032.phpt delete mode 100644 ext/soap/tests/schema/schema033.phpt delete mode 100644 ext/soap/tests/schema/schema034.phpt delete mode 100644 ext/soap/tests/schema/schema035.phpt delete mode 100644 ext/soap/tests/schema/schema036.phpt delete mode 100644 ext/soap/tests/schema/schema037.phpt delete mode 100644 ext/soap/tests/schema/schema038.phpt delete mode 100644 ext/soap/tests/schema/schema039.phpt delete mode 100644 ext/soap/tests/schema/schema040.phpt delete mode 100644 ext/soap/tests/schema/schema041.phpt delete mode 100644 ext/soap/tests/schema/schema042.phpt delete mode 100644 ext/soap/tests/schema/schema043.phpt delete mode 100644 ext/soap/tests/schema/schema044.phpt delete mode 100644 ext/soap/tests/schema/schema045.phpt delete mode 100644 ext/soap/tests/schema/schema046.phpt delete mode 100644 ext/soap/tests/schema/schema047.phpt delete mode 100644 ext/soap/tests/schema/schema048.phpt delete mode 100644 ext/soap/tests/schema/schema049.phpt delete mode 100644 ext/soap/tests/schema/schema050.phpt delete mode 100644 ext/soap/tests/schema/schema051.phpt delete mode 100644 ext/soap/tests/schema/schema052.phpt delete mode 100644 ext/soap/tests/schema/schema053.phpt delete mode 100644 ext/soap/tests/schema/schema054.phpt delete mode 100644 ext/soap/tests/schema/schema055.phpt delete mode 100644 ext/soap/tests/schema/schema056.phpt delete mode 100644 ext/soap/tests/schema/schema057.phpt delete mode 100644 ext/soap/tests/schema/schema058.phpt delete mode 100644 ext/soap/tests/schema/schema059.phpt delete mode 100644 ext/soap/tests/schema/schema060.phpt delete mode 100644 ext/soap/tests/schema/schema061.phpt delete mode 100644 ext/soap/tests/schema/schema062.phpt delete mode 100644 ext/soap/tests/schema/schema063.phpt delete mode 100644 ext/soap/tests/schema/schema064.phpt delete mode 100644 ext/soap/tests/schema/schema065.phpt delete mode 100644 ext/soap/tests/schema/schema066.phpt delete mode 100644 ext/soap/tests/schema/schema067.phpt delete mode 100644 ext/soap/tests/schema/schema068.phpt delete mode 100644 ext/soap/tests/schema/schema069.phpt delete mode 100644 ext/soap/tests/schema/schema070.phpt delete mode 100644 ext/soap/tests/schema/schema071.phpt delete mode 100644 ext/soap/tests/schema/schema072.phpt delete mode 100644 ext/soap/tests/schema/schema073.phpt delete mode 100644 ext/soap/tests/schema/schema074.phpt delete mode 100644 ext/soap/tests/schema/schema075.phpt delete mode 100644 ext/soap/tests/schema/schema076.phpt delete mode 100644 ext/soap/tests/schema/schema077.phpt delete mode 100644 ext/soap/tests/schema/schema078.phpt delete mode 100644 ext/soap/tests/schema/schema079.phpt delete mode 100644 ext/soap/tests/schema/schema080.phpt delete mode 100644 ext/soap/tests/schema/schema081.phpt delete mode 100755 ext/soap/tests/schema/schema082.phpt delete mode 100755 ext/soap/tests/schema/schema083.phpt delete mode 100755 ext/soap/tests/schema/schema084.phpt delete mode 100644 ext/soap/tests/schema/skipif.inc delete mode 100644 ext/soap/tests/schema/test_schema.inc delete mode 100644 ext/soap/tests/server001.phpt delete mode 100644 ext/soap/tests/server002.phpt delete mode 100644 ext/soap/tests/server003.phpt delete mode 100644 ext/soap/tests/server004.phpt delete mode 100644 ext/soap/tests/server005.phpt delete mode 100644 ext/soap/tests/server006.phpt delete mode 100644 ext/soap/tests/server007.phpt delete mode 100644 ext/soap/tests/server008.phpt delete mode 100644 ext/soap/tests/server009.phpt delete mode 100644 ext/soap/tests/server010.phpt delete mode 100644 ext/soap/tests/server011.phpt delete mode 100644 ext/soap/tests/server012.phpt delete mode 100644 ext/soap/tests/server013.phpt delete mode 100644 ext/soap/tests/server014.phpt delete mode 100644 ext/soap/tests/server015.phpt delete mode 100644 ext/soap/tests/server016.phpt delete mode 100644 ext/soap/tests/server017.phpt delete mode 100644 ext/soap/tests/server018.phpt delete mode 100644 ext/soap/tests/server019.phpt delete mode 100644 ext/soap/tests/server020.phpt delete mode 100644 ext/soap/tests/server021.phpt delete mode 100755 ext/soap/tests/server022.phpt delete mode 100755 ext/soap/tests/server023.phpt delete mode 100755 ext/soap/tests/server024.phpt delete mode 100755 ext/soap/tests/server025.phpt delete mode 100755 ext/soap/tests/server025.wsdl delete mode 100755 ext/soap/tests/server026.phpt delete mode 100755 ext/soap/tests/server027.phpt delete mode 100755 ext/soap/tests/server028.phpt delete mode 100755 ext/soap/tests/setheaders.phpt delete mode 100644 ext/soap/tests/skipif.inc delete mode 100644 ext/soap/tests/soap12/T01.phpt delete mode 100644 ext/soap/tests/soap12/T02.phpt delete mode 100644 ext/soap/tests/soap12/T03.phpt delete mode 100644 ext/soap/tests/soap12/T04.phpt delete mode 100644 ext/soap/tests/soap12/T05.phpt delete mode 100644 ext/soap/tests/soap12/T10.phpt delete mode 100644 ext/soap/tests/soap12/T11.phpt delete mode 100644 ext/soap/tests/soap12/T12.phpt delete mode 100644 ext/soap/tests/soap12/T13.phpt delete mode 100644 ext/soap/tests/soap12/T14.phpt delete mode 100644 ext/soap/tests/soap12/T15.phpt delete mode 100644 ext/soap/tests/soap12/T19.phpt delete mode 100644 ext/soap/tests/soap12/T22.phpt delete mode 100644 ext/soap/tests/soap12/T23.phpt delete mode 100644 ext/soap/tests/soap12/T24.phpt delete mode 100644 ext/soap/tests/soap12/T25.phpt delete mode 100644 ext/soap/tests/soap12/T26.phpt delete mode 100644 ext/soap/tests/soap12/T27.phpt delete mode 100644 ext/soap/tests/soap12/T28.phpt delete mode 100644 ext/soap/tests/soap12/T29.phpt delete mode 100644 ext/soap/tests/soap12/T30.phpt delete mode 100644 ext/soap/tests/soap12/T31.phpt delete mode 100644 ext/soap/tests/soap12/T32.phpt delete mode 100644 ext/soap/tests/soap12/T33.phpt delete mode 100644 ext/soap/tests/soap12/T34.phpt delete mode 100644 ext/soap/tests/soap12/T35.phpt delete mode 100644 ext/soap/tests/soap12/T36.phpt delete mode 100644 ext/soap/tests/soap12/T37.phpt delete mode 100644 ext/soap/tests/soap12/T38_1.phpt delete mode 100644 ext/soap/tests/soap12/T38_2.phpt delete mode 100644 ext/soap/tests/soap12/T39.phpt delete mode 100644 ext/soap/tests/soap12/T40.phpt delete mode 100644 ext/soap/tests/soap12/T41.phpt delete mode 100644 ext/soap/tests/soap12/T42.phpt delete mode 100644 ext/soap/tests/soap12/T43.phpt delete mode 100644 ext/soap/tests/soap12/T44.phpt delete mode 100644 ext/soap/tests/soap12/T45.phpt delete mode 100644 ext/soap/tests/soap12/T46.phpt delete mode 100644 ext/soap/tests/soap12/T47.phpt delete mode 100644 ext/soap/tests/soap12/T48.phpt delete mode 100644 ext/soap/tests/soap12/T49.phpt delete mode 100644 ext/soap/tests/soap12/T50.phpt delete mode 100644 ext/soap/tests/soap12/T51.phpt delete mode 100644 ext/soap/tests/soap12/T52.phpt delete mode 100644 ext/soap/tests/soap12/T53.phpt delete mode 100644 ext/soap/tests/soap12/T54.phpt delete mode 100644 ext/soap/tests/soap12/T55.phpt delete mode 100644 ext/soap/tests/soap12/T56.phpt delete mode 100644 ext/soap/tests/soap12/T57.phpt delete mode 100644 ext/soap/tests/soap12/T58.phpt delete mode 100644 ext/soap/tests/soap12/T59.phpt delete mode 100644 ext/soap/tests/soap12/T60.phpt delete mode 100644 ext/soap/tests/soap12/T61.phpt delete mode 100644 ext/soap/tests/soap12/T63.phpt delete mode 100644 ext/soap/tests/soap12/T64.phpt delete mode 100644 ext/soap/tests/soap12/T65.phpt delete mode 100644 ext/soap/tests/soap12/T66.phpt delete mode 100644 ext/soap/tests/soap12/T67.phpt delete mode 100644 ext/soap/tests/soap12/T68.phpt delete mode 100644 ext/soap/tests/soap12/T69.phpt delete mode 100644 ext/soap/tests/soap12/T70.phpt delete mode 100644 ext/soap/tests/soap12/T71.phpt delete mode 100644 ext/soap/tests/soap12/T72.phpt delete mode 100644 ext/soap/tests/soap12/T73.phpt delete mode 100644 ext/soap/tests/soap12/T74.phpt delete mode 100644 ext/soap/tests/soap12/T75.phpt delete mode 100644 ext/soap/tests/soap12/T76_1.phpt delete mode 100644 ext/soap/tests/soap12/T76_2.phpt delete mode 100644 ext/soap/tests/soap12/T77_1.phpt delete mode 100644 ext/soap/tests/soap12/T77_2.phpt delete mode 100644 ext/soap/tests/soap12/T77_3.phpt delete mode 100644 ext/soap/tests/soap12/T78.phpt delete mode 100644 ext/soap/tests/soap12/T80.phpt delete mode 100644 ext/soap/tests/soap12/skipif.inc delete mode 100644 ext/soap/tests/soap12/soap12-test.inc delete mode 100644 ext/soap/tests/soap12/soap12-test.wsdl delete mode 100644 ext/soap/tests/test.wsdl delete mode 100644 ext/soap/tests/transport001.phpt delete mode 100755 ext/soap/tests/typemap001.phpt delete mode 100755 ext/soap/tests/typemap002.phpt delete mode 100755 ext/soap/tests/typemap003.phpt delete mode 100755 ext/soap/tests/typemap004.phpt delete mode 100755 ext/soap/tests/typemap005.phpt delete mode 100755 ext/soap/tests/typemap006.phpt delete mode 100755 ext/soap/tests/typemap007.phpt delete mode 100755 ext/soap/tests/typemap008.phpt delete mode 100755 ext/soap/tests/typemap009.phpt delete mode 100755 ext/soap/tests/typemap010.phpt delete mode 100755 ext/soap/tests/typemap011.phpt delete mode 100755 ext/soap/tests/typemap012.phpt delete mode 100755 ext/soap/tests/typemap013.phpt delete mode 100644 ext/sockets/CREDITS delete mode 100644 ext/sockets/config.m4 delete mode 100644 ext/sockets/config.w32 delete mode 100644 ext/sockets/package.xml delete mode 100644 ext/sockets/php_sockets.h delete mode 100644 ext/sockets/php_sockets_win.c delete mode 100644 ext/sockets/php_sockets_win.h delete mode 100644 ext/sockets/sockets.c delete mode 100644 ext/sockets/sockets.dsp delete mode 100644 ext/sockets/sockets.php delete mode 100644 ext/sockets/tests/ipv4loop.phpt delete mode 100644 ext/sockets/tests/ipv6loop.phpt delete mode 100644 ext/sockets/unix_socket_constants.h delete mode 100644 ext/sockets/win32_socket_constants.h delete mode 100755 ext/spl/CREDITS delete mode 100755 ext/spl/README delete mode 100755 ext/spl/TODO delete mode 100755 ext/spl/config.m4 delete mode 100644 ext/spl/config.w32 delete mode 100755 ext/spl/doxygen.cfg delete mode 100755 ext/spl/examples/autoload.inc delete mode 100644 ext/spl/examples/cachingrecursiveiterator.inc delete mode 100755 ext/spl/examples/callbackfilteriterator.inc delete mode 100755 ext/spl/examples/class_tree.php delete mode 100755 ext/spl/examples/dba_array.php delete mode 100755 ext/spl/examples/dba_dump.php delete mode 100755 ext/spl/examples/dbaarray.inc delete mode 100755 ext/spl/examples/dbareader.inc delete mode 100755 ext/spl/examples/directoryfilterdots.inc delete mode 100644 ext/spl/examples/directorygraphiterator.inc delete mode 100755 ext/spl/examples/directorytree.inc delete mode 100755 ext/spl/examples/directorytree.php delete mode 100755 ext/spl/examples/directorytree_size.php delete mode 100644 ext/spl/examples/directorytreeiterator.inc delete mode 100755 ext/spl/examples/dualiterator.inc delete mode 100755 ext/spl/examples/findfile.inc delete mode 100755 ext/spl/examples/findfile.php delete mode 100755 ext/spl/examples/findregex.php delete mode 100755 ext/spl/examples/ini_groups.php delete mode 100755 ext/spl/examples/inigroups.inc delete mode 100755 ext/spl/examples/keyfilter.inc delete mode 100755 ext/spl/examples/nocvsdir.php delete mode 100755 ext/spl/examples/phar_from_dir.php delete mode 100755 ext/spl/examples/recursivecomparedualiterator.inc delete mode 100755 ext/spl/examples/recursivedualiterator.inc delete mode 100755 ext/spl/examples/recursivetreeiterator.inc delete mode 100755 ext/spl/examples/regexfindfile.inc delete mode 100755 ext/spl/examples/searchiterator.inc delete mode 100755 ext/spl/examples/tests/dualiterator_001.phpt delete mode 100755 ext/spl/examples/tests/examples.inc delete mode 100755 ext/spl/examples/tree.php delete mode 100755 ext/spl/examples/xml_tree.php delete mode 100755 ext/spl/examples/xml_xpath_tree.php delete mode 100755 ext/spl/internal/appenditerator.inc delete mode 100755 ext/spl/internal/cachingiterator.inc delete mode 100755 ext/spl/internal/emptyiterator.inc delete mode 100755 ext/spl/internal/filteriterator.inc delete mode 100755 ext/spl/internal/infiniteiterator.inc delete mode 100755 ext/spl/internal/iteratoriterator.inc delete mode 100755 ext/spl/internal/limititerator.inc delete mode 100755 ext/spl/internal/norewinditerator.inc delete mode 100755 ext/spl/internal/outeriterator.inc delete mode 100755 ext/spl/internal/parentiterator.inc delete mode 100755 ext/spl/internal/recursivearrayiterator.inc delete mode 100755 ext/spl/internal/recursivecachingiterator.inc delete mode 100755 ext/spl/internal/recursivefilteriterator.inc delete mode 100755 ext/spl/internal/recursiveiterator.inc delete mode 100755 ext/spl/internal/recursiveiteratoriterator.inc delete mode 100755 ext/spl/internal/recursiveregexiterator.inc delete mode 100755 ext/spl/internal/regexiterator.inc delete mode 100755 ext/spl/internal/seekableiterator.inc delete mode 100755 ext/spl/internal/splfileobject.inc delete mode 100755 ext/spl/internal/splobjectstorage.inc delete mode 100755 ext/spl/package.xml delete mode 100755 ext/spl/php_spl.c delete mode 100755 ext/spl/php_spl.h delete mode 100755 ext/spl/spl.php delete mode 100755 ext/spl/spl_array.c delete mode 100755 ext/spl/spl_array.h delete mode 100755 ext/spl/spl_directory.c delete mode 100755 ext/spl/spl_directory.h delete mode 100755 ext/spl/spl_engine.c delete mode 100755 ext/spl/spl_engine.h delete mode 100755 ext/spl/spl_exceptions.c delete mode 100755 ext/spl/spl_exceptions.h delete mode 100755 ext/spl/spl_functions.c delete mode 100755 ext/spl/spl_functions.h delete mode 100755 ext/spl/spl_iterators.c delete mode 100755 ext/spl/spl_iterators.h delete mode 100755 ext/spl/spl_observer.c delete mode 100755 ext/spl/spl_observer.h delete mode 100755 ext/spl/spl_sxe.c delete mode 100755 ext/spl/spl_sxe.h delete mode 100755 ext/spl/tests/.htaccess delete mode 100755 ext/spl/tests/array_001.phpt delete mode 100755 ext/spl/tests/array_002.phpt delete mode 100755 ext/spl/tests/array_003.phpt delete mode 100755 ext/spl/tests/array_004.phpt delete mode 100755 ext/spl/tests/array_005.phpt delete mode 100755 ext/spl/tests/array_006.phpt delete mode 100755 ext/spl/tests/array_007.phpt delete mode 100755 ext/spl/tests/array_008.phpt delete mode 100755 ext/spl/tests/array_009.phpt delete mode 100755 ext/spl/tests/array_009a.phpt delete mode 100755 ext/spl/tests/array_010.phpt delete mode 100755 ext/spl/tests/array_011.phpt delete mode 100755 ext/spl/tests/array_012.phpt delete mode 100755 ext/spl/tests/array_013.phpt delete mode 100755 ext/spl/tests/array_014.phpt delete mode 100755 ext/spl/tests/array_015.phpt delete mode 100755 ext/spl/tests/array_016.phpt delete mode 100755 ext/spl/tests/array_017.phpt delete mode 100755 ext/spl/tests/array_018.phpt delete mode 100755 ext/spl/tests/array_019.phpt delete mode 100755 ext/spl/tests/array_020.phpt delete mode 100755 ext/spl/tests/array_021.phpt delete mode 100755 ext/spl/tests/array_022.phpt delete mode 100755 ext/spl/tests/bug28822.phpt delete mode 100755 ext/spl/tests/bug31185.phpt delete mode 100755 ext/spl/tests/bug31346.phpt delete mode 100755 ext/spl/tests/bug31348.phpt delete mode 100755 ext/spl/tests/bug31926.phpt delete mode 100755 ext/spl/tests/bug32134.phpt delete mode 100755 ext/spl/tests/bug32394.phpt delete mode 100755 ext/spl/tests/bug33136.phpt delete mode 100644 ext/spl/tests/bug34548.phpt delete mode 100644 ext/spl/tests/bug36258.phpt delete mode 100755 ext/spl/tests/bug36287.phpt delete mode 100644 ext/spl/tests/bug36825.phpt delete mode 100755 ext/spl/tests/bug36941.phpt delete mode 100755 ext/spl/tests/bug37457.phpt delete mode 100644 ext/spl/tests/bug40036.phpt delete mode 100755 ext/spl/tests/bug40872.phpt delete mode 100755 ext/spl/tests/dit_001.phpt delete mode 100755 ext/spl/tests/fileobject_001.phpt delete mode 100755 ext/spl/tests/fileobject_001a.txt delete mode 100755 ext/spl/tests/fileobject_001b.txt delete mode 100755 ext/spl/tests/fileobject_002.phpt delete mode 100755 ext/spl/tests/fileobject_003.phpt delete mode 100755 ext/spl/tests/iterator_001.phpt delete mode 100755 ext/spl/tests/iterator_002.phpt delete mode 100755 ext/spl/tests/iterator_003.phpt delete mode 100755 ext/spl/tests/iterator_004.phpt delete mode 100755 ext/spl/tests/iterator_005.phpt delete mode 100755 ext/spl/tests/iterator_006.phpt delete mode 100755 ext/spl/tests/iterator_007.phpt delete mode 100755 ext/spl/tests/iterator_008.phpt delete mode 100755 ext/spl/tests/iterator_009.phpt delete mode 100755 ext/spl/tests/iterator_010.phpt delete mode 100755 ext/spl/tests/iterator_011.phpt delete mode 100755 ext/spl/tests/iterator_012.phpt delete mode 100755 ext/spl/tests/iterator_013.phpt delete mode 100755 ext/spl/tests/iterator_014.phpt delete mode 100755 ext/spl/tests/iterator_015.phpt delete mode 100755 ext/spl/tests/iterator_016.phpt delete mode 100755 ext/spl/tests/iterator_017.phpt delete mode 100755 ext/spl/tests/iterator_018.phpt delete mode 100755 ext/spl/tests/iterator_019.phpt delete mode 100755 ext/spl/tests/iterator_020.phpt delete mode 100755 ext/spl/tests/iterator_021.phpt delete mode 100755 ext/spl/tests/iterator_022.phpt delete mode 100755 ext/spl/tests/iterator_023.phpt delete mode 100755 ext/spl/tests/iterator_024.phpt delete mode 100755 ext/spl/tests/iterator_025.phpt delete mode 100755 ext/spl/tests/iterator_026.phpt delete mode 100755 ext/spl/tests/iterator_027.phpt delete mode 100755 ext/spl/tests/iterator_028.phpt delete mode 100755 ext/spl/tests/iterator_029.phpt delete mode 100755 ext/spl/tests/iterator_030.phpt delete mode 100755 ext/spl/tests/iterator_031.phpt delete mode 100755 ext/spl/tests/iterator_032.phpt delete mode 100755 ext/spl/tests/iterator_033.phpt delete mode 100755 ext/spl/tests/iterator_034.phpt delete mode 100644 ext/spl/tests/iterator_035.phpt delete mode 100755 ext/spl/tests/iterator_036.phpt delete mode 100755 ext/spl/tests/iterator_037.phpt delete mode 100755 ext/spl/tests/iterator_038.phpt delete mode 100755 ext/spl/tests/iterator_039.phpt delete mode 100755 ext/spl/tests/iterator_040.phpt delete mode 100755 ext/spl/tests/iterator_041.phpt delete mode 100755 ext/spl/tests/iterator_041a.phpt delete mode 100755 ext/spl/tests/iterator_041b.phpt delete mode 100755 ext/spl/tests/iterator_042.phpt delete mode 100755 ext/spl/tests/iterator_043.phpt delete mode 100755 ext/spl/tests/iterator_044.phpt delete mode 100755 ext/spl/tests/iterator_045.phpt delete mode 100755 ext/spl/tests/iterator_046.phpt delete mode 100755 ext/spl/tests/iterator_047.phpt delete mode 100755 ext/spl/tests/iterator_048.phpt delete mode 100755 ext/spl/tests/iterator_049.phpt delete mode 100755 ext/spl/tests/iterator_049b.phpt delete mode 100755 ext/spl/tests/iterator_050.phpt delete mode 100755 ext/spl/tests/iterator_051.phpt delete mode 100755 ext/spl/tests/iterator_052.phpt delete mode 100755 ext/spl/tests/iterator_053.phpt delete mode 100755 ext/spl/tests/iterator_054.phpt delete mode 100755 ext/spl/tests/iterator_055.phpt delete mode 100755 ext/spl/tests/observer_001.phpt delete mode 100755 ext/spl/tests/observer_002.phpt delete mode 100755 ext/spl/tests/observer_003.phpt delete mode 100755 ext/spl/tests/observer_004.phpt delete mode 100755 ext/spl/tests/observer_005.phpt delete mode 100755 ext/spl/tests/spl_001.phpt delete mode 100755 ext/spl/tests/spl_002.phpt delete mode 100755 ext/spl/tests/spl_003.phpt delete mode 100755 ext/spl/tests/spl_004.phpt delete mode 100755 ext/spl/tests/spl_005.phpt delete mode 100755 ext/spl/tests/spl_006.phpt delete mode 100755 ext/spl/tests/spl_autoload_001.phpt delete mode 100755 ext/spl/tests/spl_autoload_002.phpt delete mode 100755 ext/spl/tests/spl_autoload_003.phpt delete mode 100755 ext/spl/tests/spl_autoload_004.phpt delete mode 100755 ext/spl/tests/spl_autoload_005.phpt delete mode 100755 ext/spl/tests/spl_autoload_006.phpt delete mode 100755 ext/spl/tests/spl_autoload_007.phpt delete mode 100755 ext/spl/tests/spl_autoload_008.phpt delete mode 100755 ext/spl/tests/spl_autoload_009.phpt delete mode 100755 ext/spl/tests/sxe_001.phpt delete mode 100755 ext/spl/tests/sxe_002.phpt delete mode 100755 ext/spl/tests/sxe_003.phpt delete mode 100755 ext/spl/tests/sxe_004.phpt delete mode 100755 ext/spl/tests/sxe_005.phpt delete mode 100755 ext/spl/tests/testclass delete mode 100755 ext/spl/tests/testclass.class.inc delete mode 100755 ext/spl/tests/testclass.inc delete mode 100755 ext/spl/tests/testclass.php.inc delete mode 100644 ext/sqlite/config.w32 delete mode 100755 ext/sqlite/libsqlite/src/config_static.w32.h delete mode 100755 ext/sqlite/libsqlite/src/libsqlite.dsp delete mode 100644 ext/sqlite/pdo_sqlite2.c delete mode 100644 ext/sqlite/sess_sqlite.c delete mode 100755 ext/sqlite/tests/blankdb_oo.inc delete mode 100644 ext/sqlite/tests/bug26911.phpt delete mode 100755 ext/sqlite/tests/bug28112.phpt delete mode 100644 ext/sqlite/tests/bug35248.phpt delete mode 100644 ext/sqlite/tests/bug38759.phpt delete mode 100644 ext/sqlite/tests/pdo/common.phpt delete mode 100755 ext/sqlite/tests/sqlite_018.phpt delete mode 100755 ext/sqlite/tests/sqlite_019.phpt delete mode 100755 ext/sqlite/tests/sqlite_022.phpt delete mode 100644 ext/sqlite/tests/sqlite_023.phpt delete mode 100755 ext/sqlite/tests/sqlite_024.phpt delete mode 100755 ext/sqlite/tests/sqlite_025.phpt delete mode 100755 ext/sqlite/tests/sqlite_026.phpt delete mode 100755 ext/sqlite/tests/sqlite_027.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_001.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_002.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_003.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_008.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_009.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_010.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_011.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_012.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_013.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_014.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_015.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_016.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_020.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_021.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_022.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_024.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_025.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_026.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_027.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_028.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_029.phpt delete mode 100755 ext/sqlite/tests/sqlite_oo_030.phpt delete mode 100755 ext/sqlite/tests/sqlite_spl_001.phpt delete mode 100755 ext/sqlite/tests/sqlite_spl_002.phpt delete mode 100755 ext/sqlite/tests/sqlite_spl_003.phpt delete mode 100644 ext/standard/CREDITS delete mode 100644 ext/standard/Makefile.frag delete mode 100644 ext/standard/array.c delete mode 100644 ext/standard/assert.c delete mode 100644 ext/standard/base64.c delete mode 100644 ext/standard/base64.h delete mode 100644 ext/standard/basic_functions.c delete mode 100644 ext/standard/basic_functions.h delete mode 100644 ext/standard/browscap.c delete mode 100644 ext/standard/config.m4 delete mode 100644 ext/standard/config.w32 delete mode 100644 ext/standard/crc32.c delete mode 100644 ext/standard/crc32.h delete mode 100644 ext/standard/credits.c delete mode 100644 ext/standard/credits.h delete mode 100644 ext/standard/credits_ext.h delete mode 100644 ext/standard/credits_sapi.h delete mode 100644 ext/standard/crypt.c delete mode 100644 ext/standard/css.c delete mode 100644 ext/standard/css.h delete mode 100644 ext/standard/cyr_convert.c delete mode 100644 ext/standard/cyr_convert.h delete mode 100644 ext/standard/datetime.c delete mode 100644 ext/standard/datetime.h delete mode 100644 ext/standard/dir.c delete mode 100644 ext/standard/dl.c delete mode 100644 ext/standard/dl.h delete mode 100644 ext/standard/dns.c delete mode 100644 ext/standard/dns.h delete mode 100644 ext/standard/exec.c delete mode 100644 ext/standard/exec.h delete mode 100644 ext/standard/file.c delete mode 100644 ext/standard/file.h delete mode 100644 ext/standard/filestat.c delete mode 100644 ext/standard/filters.c delete mode 100644 ext/standard/flock_compat.c delete mode 100644 ext/standard/flock_compat.h delete mode 100644 ext/standard/formatted_print.c delete mode 100644 ext/standard/fsock.c delete mode 100644 ext/standard/fsock.h delete mode 100644 ext/standard/ftok.c delete mode 100644 ext/standard/ftp_fopen_wrapper.c delete mode 100644 ext/standard/head.c delete mode 100644 ext/standard/head.h delete mode 100644 ext/standard/html.c delete mode 100644 ext/standard/html.h delete mode 100644 ext/standard/http.c delete mode 100644 ext/standard/http_fopen_wrapper.c delete mode 100644 ext/standard/image.c delete mode 100644 ext/standard/incomplete_class.c delete mode 100644 ext/standard/info.c delete mode 100644 ext/standard/info.h delete mode 100644 ext/standard/iptc.c delete mode 100644 ext/standard/lcg.c delete mode 100644 ext/standard/levenshtein.c delete mode 100644 ext/standard/link.c delete mode 100644 ext/standard/mail.c delete mode 100644 ext/standard/math.c delete mode 100644 ext/standard/md5.c delete mode 100644 ext/standard/md5.h delete mode 100644 ext/standard/metaphone.c delete mode 100644 ext/standard/microtime.c delete mode 100644 ext/standard/microtime.h delete mode 100644 ext/standard/pack.c delete mode 100644 ext/standard/pack.h delete mode 100644 ext/standard/pageinfo.c delete mode 100644 ext/standard/pageinfo.h delete mode 100644 ext/standard/php_array.h delete mode 100644 ext/standard/php_assert.h delete mode 100644 ext/standard/php_browscap.h delete mode 100644 ext/standard/php_crypt.h delete mode 100644 ext/standard/php_dir.h delete mode 100644 ext/standard/php_ext_syslog.h delete mode 100644 ext/standard/php_filestat.h delete mode 100644 ext/standard/php_fopen_wrapper.c delete mode 100644 ext/standard/php_fopen_wrappers.h delete mode 100644 ext/standard/php_ftok.h delete mode 100644 ext/standard/php_http.h delete mode 100644 ext/standard/php_image.h delete mode 100644 ext/standard/php_incomplete_class.h delete mode 100644 ext/standard/php_iptc.h delete mode 100644 ext/standard/php_lcg.h delete mode 100644 ext/standard/php_link.h delete mode 100644 ext/standard/php_mail.h delete mode 100644 ext/standard/php_math.h delete mode 100644 ext/standard/php_metaphone.h delete mode 100644 ext/standard/php_rand.h delete mode 100644 ext/standard/php_smart_str.h delete mode 100644 ext/standard/php_smart_str_public.h delete mode 100644 ext/standard/php_standard.h delete mode 100644 ext/standard/php_string.h delete mode 100644 ext/standard/php_type.h delete mode 100644 ext/standard/php_uuencode.h delete mode 100644 ext/standard/php_var.h delete mode 100644 ext/standard/php_versioning.h delete mode 100644 ext/standard/proc_open.c delete mode 100644 ext/standard/proc_open.h delete mode 100644 ext/standard/quot_print.c delete mode 100644 ext/standard/quot_print.h delete mode 100644 ext/standard/rand.c delete mode 100644 ext/standard/reg.c delete mode 100644 ext/standard/reg.h delete mode 100644 ext/standard/scanf.c delete mode 100644 ext/standard/scanf.h delete mode 100644 ext/standard/sha1.c delete mode 100644 ext/standard/sha1.h delete mode 100644 ext/standard/soundex.c delete mode 100644 ext/standard/streamsfuncs.c delete mode 100644 ext/standard/streamsfuncs.h delete mode 100644 ext/standard/string.c delete mode 100644 ext/standard/strnatcmp.c delete mode 100644 ext/standard/syslog.c delete mode 100644 ext/standard/tests/array/001.phpt delete mode 100644 ext/standard/tests/array/002.phpt delete mode 100644 ext/standard/tests/array/003.phpt delete mode 100644 ext/standard/tests/array/004.phpt delete mode 100644 ext/standard/tests/array/005.phpt delete mode 100644 ext/standard/tests/array/006.phpt delete mode 100644 ext/standard/tests/array/007.phpt delete mode 100644 ext/standard/tests/array/008.phpt delete mode 100644 ext/standard/tests/array/array_change_key_case.phpt delete mode 100644 ext/standard/tests/array/array_chunk.phpt delete mode 100644 ext/standard/tests/array/array_chunk2.phpt delete mode 100755 ext/standard/tests/array/array_combine.phpt delete mode 100644 ext/standard/tests/array/array_count_values.phpt delete mode 100644 ext/standard/tests/array/array_count_values2.phpt delete mode 100644 ext/standard/tests/array/array_diff_1.phpt delete mode 100755 ext/standard/tests/array/array_diff_assoc.phpt delete mode 100644 ext/standard/tests/array/array_diff_key.phpt delete mode 100644 ext/standard/tests/array/array_diff_key2.phpt delete mode 100644 ext/standard/tests/array/array_fill.phpt delete mode 100755 ext/standard/tests/array/array_fill_keys.phpt delete mode 100644 ext/standard/tests/array/array_filter.phpt delete mode 100644 ext/standard/tests/array/array_flip.phpt delete mode 100644 ext/standard/tests/array/array_intersect_1.phpt delete mode 100644 ext/standard/tests/array/array_intersect_key.phpt delete mode 100644 ext/standard/tests/array/array_key_exists.phpt delete mode 100644 ext/standard/tests/array/array_pad.phpt delete mode 100644 ext/standard/tests/array/array_rand.phpt delete mode 100644 ext/standard/tests/array/array_search.phpt delete mode 100644 ext/standard/tests/array/array_search1.phpt delete mode 100644 ext/standard/tests/array/array_slice.phpt delete mode 100644 ext/standard/tests/array/array_sum.phpt delete mode 100644 ext/standard/tests/array/array_unshift.phpt delete mode 100644 ext/standard/tests/array/array_user_key_compare.phpt delete mode 100644 ext/standard/tests/array/array_values.phpt delete mode 100644 ext/standard/tests/array/array_walk.phpt delete mode 100644 ext/standard/tests/array/array_walk_objects.phpt delete mode 100644 ext/standard/tests/array/array_walk_rec_objects.phpt delete mode 100644 ext/standard/tests/array/array_walk_recursive.phpt delete mode 100644 ext/standard/tests/array/array_walk_recursive1.phpt delete mode 100644 ext/standard/tests/array/bug12776.phpt delete mode 100644 ext/standard/tests/array/bug14580.phpt delete mode 100644 ext/standard/tests/array/bug20381.phpt delete mode 100644 ext/standard/tests/array/bug20865.phpt delete mode 100644 ext/standard/tests/array/bug21182.phpt delete mode 100755 ext/standard/tests/array/bug21918.phpt delete mode 100644 ext/standard/tests/array/bug21998.phpt delete mode 100644 ext/standard/tests/array/bug22088.phpt delete mode 100644 ext/standard/tests/array/bug22463.phpt delete mode 100644 ext/standard/tests/array/bug23581.phpt delete mode 100644 ext/standard/tests/array/bug23788.phpt delete mode 100644 ext/standard/tests/array/bug24198.phpt delete mode 100644 ext/standard/tests/array/bug24220.phpt delete mode 100644 ext/standard/tests/array/bug24766.phpt delete mode 100644 ext/standard/tests/array/bug24897.phpt delete mode 100644 ext/standard/tests/array/bug24980.phpt delete mode 100644 ext/standard/tests/array/bug25359.phpt delete mode 100644 ext/standard/tests/array/bug25708.phpt delete mode 100644 ext/standard/tests/array/bug25758.phpt delete mode 100644 ext/standard/tests/array/bug26458.phpt delete mode 100644 ext/standard/tests/array/bug28739.phpt delete mode 100644 ext/standard/tests/array/bug28974.phpt delete mode 100755 ext/standard/tests/array/bug29253.phpt delete mode 100644 ext/standard/tests/array/bug29493.phpt delete mode 100644 ext/standard/tests/array/bug30074.phpt delete mode 100755 ext/standard/tests/array/bug30266.phpt delete mode 100644 ext/standard/tests/array/bug30833.phpt delete mode 100755 ext/standard/tests/array/bug31158.phpt delete mode 100644 ext/standard/tests/array/bug31213.phpt delete mode 100644 ext/standard/tests/array/bug32021.phpt delete mode 100644 ext/standard/tests/array/bug33382.phpt delete mode 100755 ext/standard/tests/array/bug33940.phpt delete mode 100755 ext/standard/tests/array/bug33989.phpt delete mode 100644 ext/standard/tests/array/bug34066.phpt delete mode 100644 ext/standard/tests/array/bug34066_1.phpt delete mode 100755 ext/standard/tests/array/bug34227.phpt delete mode 100755 ext/standard/tests/array/bug34982.phpt delete mode 100644 ext/standard/tests/array/bug35014.phpt delete mode 100644 ext/standard/tests/array/bug35014_64bit.phpt delete mode 100644 ext/standard/tests/array/bug35022.phpt delete mode 100644 ext/standard/tests/array/bug35821.phpt delete mode 100644 ext/standard/tests/array/bug36975.phpt delete mode 100644 ext/standard/tests/array/bug38464.phpt delete mode 100644 ext/standard/tests/array/bug39576.phpt delete mode 100644 ext/standard/tests/array/bug40191.phpt delete mode 100644 ext/standard/tests/array/compact.phpt delete mode 100644 ext/standard/tests/array/count_recursive.phpt delete mode 100644 ext/standard/tests/array/data.inc delete mode 100644 ext/standard/tests/array/locale_sort.phpt delete mode 100644 ext/standard/tests/array/max.phpt delete mode 100644 ext/standard/tests/array/min.phpt delete mode 100644 ext/standard/tests/array/range.phpt delete mode 100644 ext/standard/tests/array/var_export.phpt delete mode 100644 ext/standard/tests/array/var_export2.phpt delete mode 100644 ext/standard/tests/array/var_export3.phpt delete mode 100644 ext/standard/tests/assert/assert.phpt delete mode 100644 ext/standard/tests/assert/assert02.phpt delete mode 100644 ext/standard/tests/assert/assert03.phpt delete mode 100644 ext/standard/tests/assert/assert04.phpt delete mode 100644 ext/standard/tests/file/001-win32.phpt delete mode 100644 ext/standard/tests/file/001.phpt delete mode 100644 ext/standard/tests/file/002.phpt delete mode 100644 ext/standard/tests/file/003.phpt delete mode 100644 ext/standard/tests/file/004.phpt delete mode 100644 ext/standard/tests/file/bug12556.phpt delete mode 100644 ext/standard/tests/file/bug20424.phpt delete mode 100644 ext/standard/tests/file/bug22382.phpt delete mode 100644 ext/standard/tests/file/bug22414.phpt delete mode 100644 ext/standard/tests/file/bug24313.phpt delete mode 100644 ext/standard/tests/file/bug24482.phpt delete mode 100644 ext/standard/tests/file/bug26003.phpt delete mode 100644 ext/standard/tests/file/bug26615.phpt delete mode 100644 ext/standard/tests/file/bug26938.phpt delete mode 100644 ext/standard/tests/file/bug27508.phpt delete mode 100644 ext/standard/tests/file/bug27619.phpt delete mode 100644 ext/standard/tests/file/bug30362.phpt delete mode 100644 ext/standard/tests/file/bug30362.txt delete mode 100644 ext/standard/tests/file/bug32160.phpt delete mode 100644 ext/standard/tests/file/bug32160.txt delete mode 100644 ext/standard/tests/file/bug35740.phpt delete mode 100644 ext/standard/tests/file/bug35781.phpt delete mode 100644 ext/standard/tests/file/bug37158.phpt delete mode 100644 ext/standard/tests/file/bug37864.phpt delete mode 100644 ext/standard/tests/file/bug38086.phpt delete mode 100644 ext/standard/tests/file/bug38086.txt delete mode 100644 ext/standard/tests/file/bug38450.phpt delete mode 100644 ext/standard/tests/file/bug38450_1.phpt delete mode 100644 ext/standard/tests/file/bug38450_2.phpt delete mode 100644 ext/standard/tests/file/bug38450_3.phpt delete mode 100755 ext/standard/tests/file/bug39367.phpt delete mode 100644 ext/standard/tests/file/bug39538.phpt delete mode 100644 ext/standard/tests/file/bug39551.phpt delete mode 100644 ext/standard/tests/file/bug39673.phpt delete mode 100644 ext/standard/tests/file/bug40374.phpt delete mode 100644 ext/standard/tests/file/disk.phpt delete mode 100644 ext/standard/tests/file/fgetcsv.phpt delete mode 100644 ext/standard/tests/file/fgetss.phpt delete mode 100644 ext/standard/tests/file/fgetss1.phpt delete mode 100644 ext/standard/tests/file/file_put_contents.phpt delete mode 100644 ext/standard/tests/file/filestat.phpt delete mode 100644 ext/standard/tests/file/flock.phpt delete mode 100644 ext/standard/tests/file/fopencookie.phpt delete mode 100755 ext/standard/tests/file/fputcsv.phpt delete mode 100644 ext/standard/tests/file/fscanf.phpt delete mode 100644 ext/standard/tests/file/fstat.phpt delete mode 100644 ext/standard/tests/file/ftruncate.phpt delete mode 100644 ext/standard/tests/file/fwrite.phpt delete mode 100644 ext/standard/tests/file/get_current_user.phpt delete mode 100644 ext/standard/tests/file/mkdir-001.phpt delete mode 100644 ext/standard/tests/file/mkdir-002.phpt delete mode 100644 ext/standard/tests/file/mkdir-003.phpt delete mode 100644 ext/standard/tests/file/mkdir-004.phpt delete mode 100644 ext/standard/tests/file/mkdir-005.phpt delete mode 100644 ext/standard/tests/file/mkdir-006.phpt delete mode 100644 ext/standard/tests/file/proc_open01.phpt delete mode 100644 ext/standard/tests/file/statcache-corruption.phpt delete mode 100644 ext/standard/tests/file/statpage.phpt delete mode 100644 ext/standard/tests/file/stream_001.phpt delete mode 100644 ext/standard/tests/file/stream_002.phpt delete mode 100644 ext/standard/tests/file/stream_copy_to_stream.phpt delete mode 100644 ext/standard/tests/file/stream_get_line.phpt delete mode 100755 ext/standard/tests/file/stream_rfc2397_001.phpt delete mode 100755 ext/standard/tests/file/stream_rfc2397_002.phpt delete mode 100755 ext/standard/tests/file/stream_rfc2397_003.gif delete mode 100755 ext/standard/tests/file/stream_rfc2397_003.phpt delete mode 100755 ext/standard/tests/file/stream_rfc2397_004.phpt delete mode 100755 ext/standard/tests/file/stream_rfc2397_005.phpt delete mode 100755 ext/standard/tests/file/stream_rfc2397_006.phpt delete mode 100755 ext/standard/tests/file/stream_rfc2397_007.phpt delete mode 100644 ext/standard/tests/file/symlink.phpt delete mode 100644 ext/standard/tests/file/test.csv delete mode 100644 ext/standard/tests/file/test2.csv delete mode 100644 ext/standard/tests/file/test3.csv delete mode 100644 ext/standard/tests/file/touch.phpt delete mode 100644 ext/standard/tests/file/userdirstream.phpt delete mode 100644 ext/standard/tests/file/userfilters.phpt delete mode 100644 ext/standard/tests/file/userstreams.phpt delete mode 100644 ext/standard/tests/file/userwrapper.phpt delete mode 100644 ext/standard/tests/filters/001.phpt delete mode 100644 ext/standard/tests/filters/basic.phpt delete mode 100644 ext/standard/tests/filters/bug22538.phpt delete mode 100644 ext/standard/tests/filters/bug35916.phpt delete mode 100644 ext/standard/tests/filters/php_user_filter_01.phpt delete mode 100644 ext/standard/tests/filters/php_user_filter_02.phpt delete mode 100644 ext/standard/tests/filters/php_user_filter_03.phpt delete mode 100644 ext/standard/tests/general_functions/001.phpt delete mode 100644 ext/standard/tests/general_functions/002.phpt delete mode 100644 ext/standard/tests/general_functions/003.phpt delete mode 100644 ext/standard/tests/general_functions/004.data delete mode 100644 ext/standard/tests/general_functions/004.phpt delete mode 100644 ext/standard/tests/general_functions/005.phpt delete mode 100644 ext/standard/tests/general_functions/006.phpt delete mode 100644 ext/standard/tests/general_functions/007.phpt delete mode 100644 ext/standard/tests/general_functions/008.phpt delete mode 100644 ext/standard/tests/general_functions/009.phpt delete mode 100644 ext/standard/tests/general_functions/010.phpt delete mode 100755 ext/standard/tests/general_functions/bug25038.phpt delete mode 100644 ext/standard/tests/general_functions/bug27678.phpt delete mode 100644 ext/standard/tests/general_functions/bug29038.phpt delete mode 100644 ext/standard/tests/general_functions/bug31190.phpt delete mode 100644 ext/standard/tests/general_functions/bug32647.phpt delete mode 100644 ext/standard/tests/general_functions/bug34794.phpt delete mode 100755 ext/standard/tests/general_functions/bug35229.phpt delete mode 100755 ext/standard/tests/general_functions/bug36011.phpt delete mode 100644 ext/standard/tests/general_functions/bug39322.phpt delete mode 100755 ext/standard/tests/general_functions/bug40398.phpt delete mode 100644 ext/standard/tests/general_functions/bug40752.phpt delete mode 100755 ext/standard/tests/general_functions/call_user_func_return.phpt delete mode 100644 ext/standard/tests/general_functions/error_get_last.phpt delete mode 100644 ext/standard/tests/general_functions/getopt.phpt delete mode 100644 ext/standard/tests/general_functions/getrusage.phpt delete mode 100644 ext/standard/tests/general_functions/head.phpt delete mode 100644 ext/standard/tests/general_functions/highlight_heredoc.phpt delete mode 100644 ext/standard/tests/general_functions/import_request.phpt delete mode 100644 ext/standard/tests/general_functions/include_path.phpt delete mode 100644 ext/standard/tests/general_functions/ini_get_all.phpt delete mode 100644 ext/standard/tests/general_functions/is_resource.phpt delete mode 100644 ext/standard/tests/general_functions/parse_ini_file.phpt delete mode 100644 ext/standard/tests/general_functions/phpcredits.phpt delete mode 100644 ext/standard/tests/general_functions/phpcredits2.phpt delete mode 100644 ext/standard/tests/general_functions/phpinfo.phpt delete mode 100644 ext/standard/tests/general_functions/phpinfo2.phpt delete mode 100644 ext/standard/tests/general_functions/proc_open.phpt delete mode 100644 ext/standard/tests/general_functions/proc_open02.phpt delete mode 100644 ext/standard/tests/general_functions/rand.phpt delete mode 100644 ext/standard/tests/general_functions/sunfuncts.phpt delete mode 100644 ext/standard/tests/general_functions/sys_getloadavg.phpt delete mode 100644 ext/standard/tests/general_functions/type.phpt delete mode 100644 ext/standard/tests/image/246x247.png delete mode 100644 ext/standard/tests/image/384x385.png delete mode 100644 ext/standard/tests/image/bug13213.jpg delete mode 100644 ext/standard/tests/image/bug13213.phpt delete mode 100644 ext/standard/tests/image/getimagesize.phpt delete mode 100644 ext/standard/tests/image/getimagesize_246x247.phpt delete mode 100644 ext/standard/tests/image/getimagesize_384x385.phpt delete mode 100644 ext/standard/tests/image/getimagesize_swc.phpt delete mode 100644 ext/standard/tests/image/image_type_to_extension.phpt delete mode 100644 ext/standard/tests/image/image_type_to_mime_type.phpt delete mode 100644 ext/standard/tests/image/skipif_imagetype.inc delete mode 100755 ext/standard/tests/image/test13pix.swf delete mode 100644 ext/standard/tests/image/test1pix.bmp delete mode 100644 ext/standard/tests/image/test1pix.jp2 delete mode 100644 ext/standard/tests/image/test1pix.jpc delete mode 100644 ext/standard/tests/image/test1pix.jpg delete mode 100644 ext/standard/tests/image/test2pix.gif delete mode 100644 ext/standard/tests/image/test4pix.gif delete mode 100644 ext/standard/tests/image/test4pix.iff delete mode 100644 ext/standard/tests/image/test4pix.png delete mode 100644 ext/standard/tests/image/test4pix.psd delete mode 100755 ext/standard/tests/image/test4pix.swf delete mode 100644 ext/standard/tests/image/test4pix.tif delete mode 100644 ext/standard/tests/math/abs.phpt delete mode 100644 ext/standard/tests/math/bug21523.phpt delete mode 100644 ext/standard/tests/math/bug24142.phpt delete mode 100644 ext/standard/tests/math/bug25665.phpt delete mode 100644 ext/standard/tests/math/bug25694.phpt delete mode 100755 ext/standard/tests/math/bug27646.phpt delete mode 100755 ext/standard/tests/math/bug28228.phpt delete mode 100755 ext/standard/tests/math/bug30069.phpt delete mode 100644 ext/standard/tests/math/bug30695.phpt delete mode 100644 ext/standard/tests/math/constants.phpt delete mode 100644 ext/standard/tests/math/floorceil.phpt delete mode 100644 ext/standard/tests/math/hexdec.phpt delete mode 100644 ext/standard/tests/math/log.phpt delete mode 100644 ext/standard/tests/math/pow.phpt delete mode 100644 ext/standard/tests/math/round.phpt delete mode 100644 ext/standard/tests/network/bug20134.phpt delete mode 100644 ext/standard/tests/network/inet.phpt delete mode 100644 ext/standard/tests/network/inet_ipv6.phpt delete mode 100644 ext/standard/tests/network/ip.phpt delete mode 100755 ext/standard/tests/network/shutdown.phpt delete mode 100644 ext/standard/tests/network/tcp4loop.phpt delete mode 100644 ext/standard/tests/network/tcp6loop.phpt delete mode 100644 ext/standard/tests/network/udgloop.phpt delete mode 100644 ext/standard/tests/network/udp4loop.phpt delete mode 100644 ext/standard/tests/network/udp6loop.phpt delete mode 100644 ext/standard/tests/network/unixloop.phpt delete mode 100644 ext/standard/tests/reg/001.phpt delete mode 100644 ext/standard/tests/reg/002.phpt delete mode 100644 ext/standard/tests/reg/003.phpt delete mode 100644 ext/standard/tests/reg/004.phpt delete mode 100644 ext/standard/tests/reg/005.phpt delete mode 100644 ext/standard/tests/reg/006.phpt delete mode 100644 ext/standard/tests/reg/007.phpt delete mode 100644 ext/standard/tests/reg/008.phpt delete mode 100644 ext/standard/tests/reg/009.phpt delete mode 100644 ext/standard/tests/reg/010.phpt delete mode 100644 ext/standard/tests/reg/011.phpt delete mode 100644 ext/standard/tests/reg/012.phpt delete mode 100644 ext/standard/tests/reg/013.phpt delete mode 100644 ext/standard/tests/reg/014.phpt delete mode 100644 ext/standard/tests/reg/015.phpt delete mode 100644 ext/standard/tests/reg/016.phpt delete mode 100644 ext/standard/tests/serialize/001.phpt delete mode 100644 ext/standard/tests/serialize/002.phpt delete mode 100644 ext/standard/tests/serialize/003.phpt delete mode 100644 ext/standard/tests/serialize/004.phpt delete mode 100755 ext/standard/tests/serialize/005.phpt delete mode 100644 ext/standard/tests/serialize/006.phpt delete mode 100755 ext/standard/tests/serialize/autoload_implements.p5c delete mode 100755 ext/standard/tests/serialize/autoload_interface.p5c delete mode 100644 ext/standard/tests/serialize/bug14293.phpt delete mode 100644 ext/standard/tests/serialize/bug21957.phpt delete mode 100644 ext/standard/tests/serialize/bug23298.phpt delete mode 100644 ext/standard/tests/serialize/bug24063.phpt delete mode 100644 ext/standard/tests/serialize/bug25378.phpt delete mode 100755 ext/standard/tests/serialize/bug26762.phpt delete mode 100644 ext/standard/tests/serialize/bug27469.phpt delete mode 100644 ext/standard/tests/serialize/bug28325.phpt delete mode 100755 ext/standard/tests/serialize/bug30234.phpt delete mode 100644 ext/standard/tests/serialize/bug31402.phpt delete mode 100755 ext/standard/tests/serialize/bug31442.phpt delete mode 100755 ext/standard/tests/serialize/bug37947.phpt delete mode 100644 ext/standard/tests/strings/004.phpt delete mode 100644 ext/standard/tests/strings/add-and-stripcslashes.phpt delete mode 100644 ext/standard/tests/strings/add-and-stripslashes.phpt delete mode 100644 ext/standard/tests/strings/basename.phpt delete mode 100644 ext/standard/tests/strings/bin2hex.phpt delete mode 100644 ext/standard/tests/strings/bug20108.phpt delete mode 100644 ext/standard/tests/strings/bug20169.phpt delete mode 100644 ext/standard/tests/strings/bug20261.phpt delete mode 100644 ext/standard/tests/strings/bug20927.phpt delete mode 100644 ext/standard/tests/strings/bug20934.phpt delete mode 100644 ext/standard/tests/strings/bug21338.phpt delete mode 100644 ext/standard/tests/strings/bug21453.phpt delete mode 100644 ext/standard/tests/strings/bug21730.phpt delete mode 100644 ext/standard/tests/strings/bug21744.phpt delete mode 100644 ext/standard/tests/strings/bug22008.phpt delete mode 100644 ext/standard/tests/strings/bug22187.phpt delete mode 100644 ext/standard/tests/strings/bug22207.phpt delete mode 100644 ext/standard/tests/strings/bug22224.phpt delete mode 100644 ext/standard/tests/strings/bug22227.phpt delete mode 100644 ext/standard/tests/strings/bug22904.phpt delete mode 100644 ext/standard/tests/strings/bug23650.phpt delete mode 100644 ext/standard/tests/strings/bug23894.phpt delete mode 100644 ext/standard/tests/strings/bug24098.phpt delete mode 100644 ext/standard/tests/strings/bug24208.phpt delete mode 100644 ext/standard/tests/strings/bug24281.phpt delete mode 100644 ext/standard/tests/strings/bug24312.phpt delete mode 100644 ext/standard/tests/strings/bug25671.phpt delete mode 100644 ext/standard/tests/strings/bug25707.phpt delete mode 100644 ext/standard/tests/strings/bug26817.phpt delete mode 100644 ext/standard/tests/strings/bug26819.phpt delete mode 100644 ext/standard/tests/strings/bug26878.phpt delete mode 100644 ext/standard/tests/strings/bug26973.phpt delete mode 100644 ext/standard/tests/strings/bug27276.phpt delete mode 100644 ext/standard/tests/strings/bug27278.phpt delete mode 100644 ext/standard/tests/strings/bug27295.phpt delete mode 100644 ext/standard/tests/strings/bug27457.phpt delete mode 100644 ext/standard/tests/strings/bug27675.phpt delete mode 100644 ext/standard/tests/strings/bug28386.phpt delete mode 100644 ext/standard/tests/strings/bug28633.phpt delete mode 100644 ext/standard/tests/strings/bug29075.phpt delete mode 100644 ext/standard/tests/strings/bug29119.phpt delete mode 100644 ext/standard/tests/strings/bug29538.phpt delete mode 100644 ext/standard/tests/strings/bug33076.phpt delete mode 100644 ext/standard/tests/strings/bug33605.phpt delete mode 100644 ext/standard/tests/strings/bug34214.phpt delete mode 100644 ext/standard/tests/strings/bug35817.phpt delete mode 100644 ext/standard/tests/strings/bug36148.phpt delete mode 100644 ext/standard/tests/strings/bug36306.phpt delete mode 100644 ext/standard/tests/strings/bug36392.phpt delete mode 100644 ext/standard/tests/strings/bug36944.phpt delete mode 100644 ext/standard/tests/strings/bug37244.phpt delete mode 100644 ext/standard/tests/strings/bug37262.phpt delete mode 100644 ext/standard/tests/strings/bug38322.phpt delete mode 100644 ext/standard/tests/strings/bug38770.phpt delete mode 100644 ext/standard/tests/strings/bug39032.phpt delete mode 100644 ext/standard/tests/strings/bug39350.phpt delete mode 100644 ext/standard/tests/strings/bug39621.phpt delete mode 100644 ext/standard/tests/strings/bug39873.phpt delete mode 100644 ext/standard/tests/strings/bug40637.phpt delete mode 100644 ext/standard/tests/strings/chr_ord.phpt delete mode 100644 ext/standard/tests/strings/chunk_split.phpt delete mode 100644 ext/standard/tests/strings/convert_cyr_string.phpt delete mode 100644 ext/standard/tests/strings/count_chars.phpt delete mode 100644 ext/standard/tests/strings/crc32.phpt delete mode 100644 ext/standard/tests/strings/crypt.phpt delete mode 100644 ext/standard/tests/strings/explode.phpt delete mode 100644 ext/standard/tests/strings/get_meta_tags.phpt delete mode 100644 ext/standard/tests/strings/highlight_file.phpt delete mode 100644 ext/standard/tests/strings/htmlentities.phpt delete mode 100644 ext/standard/tests/strings/htmlentities01.phpt delete mode 100644 ext/standard/tests/strings/htmlentities02.phpt delete mode 100644 ext/standard/tests/strings/htmlentities03.phpt delete mode 100644 ext/standard/tests/strings/htmlentities04.phpt delete mode 100644 ext/standard/tests/strings/htmlentities05.phpt delete mode 100644 ext/standard/tests/strings/htmlentities06.phpt delete mode 100644 ext/standard/tests/strings/htmlentities07.phpt delete mode 100644 ext/standard/tests/strings/htmlentities08.phpt delete mode 100644 ext/standard/tests/strings/htmlentities09.phpt delete mode 100644 ext/standard/tests/strings/htmlentities10.phpt delete mode 100644 ext/standard/tests/strings/htmlentities11.phpt delete mode 100644 ext/standard/tests/strings/htmlentities12.phpt delete mode 100644 ext/standard/tests/strings/htmlentities13.phpt delete mode 100644 ext/standard/tests/strings/htmlentities14.phpt delete mode 100644 ext/standard/tests/strings/htmlentities15.phpt delete mode 100644 ext/standard/tests/strings/htmlentities16.phpt delete mode 100644 ext/standard/tests/strings/htmlentities17.phpt delete mode 100644 ext/standard/tests/strings/http_build_query.phpt delete mode 100644 ext/standard/tests/strings/implode.phpt delete mode 100644 ext/standard/tests/strings/implode1.phpt delete mode 100644 ext/standard/tests/strings/levenshtein.phpt delete mode 100644 ext/standard/tests/strings/md5.phpt delete mode 100644 ext/standard/tests/strings/md5raw.phpt delete mode 100644 ext/standard/tests/strings/metaphone.phpt delete mode 100644 ext/standard/tests/strings/nl2br.phpt delete mode 100644 ext/standard/tests/strings/pack.phpt delete mode 100644 ext/standard/tests/strings/pathinfo.phpt delete mode 100644 ext/standard/tests/strings/php_strip_whitespace.phpt delete mode 100644 ext/standard/tests/strings/sha1.phpt delete mode 100644 ext/standard/tests/strings/sha1raw.phpt delete mode 100644 ext/standard/tests/strings/soundex.phpt delete mode 100755 ext/standard/tests/strings/sprintf_f.phpt delete mode 100755 ext/standard/tests/strings/sprintf_f_2.phpt delete mode 100755 ext/standard/tests/strings/sprintf_f_3.phpt delete mode 100644 ext/standard/tests/strings/str_ireplace.phpt delete mode 100644 ext/standard/tests/strings/str_repeat.phpt delete mode 100644 ext/standard/tests/strings/str_replace.phpt delete mode 100644 ext/standard/tests/strings/str_shuffle.phpt delete mode 100644 ext/standard/tests/strings/str_word_count.phpt delete mode 100644 ext/standard/tests/strings/str_word_count1.phpt delete mode 100644 ext/standard/tests/strings/strcasecmp.phpt delete mode 100644 ext/standard/tests/strings/strcmp.phpt delete mode 100644 ext/standard/tests/strings/strcspn.phpt delete mode 100644 ext/standard/tests/strings/strings001.phpt delete mode 100644 ext/standard/tests/strings/strip_tags.phpt delete mode 100644 ext/standard/tests/strings/stripos.phpt delete mode 100644 ext/standard/tests/strings/stristr.phpt delete mode 100644 ext/standard/tests/strings/strlen.phpt delete mode 100644 ext/standard/tests/strings/strpos.phpt delete mode 100644 ext/standard/tests/strings/strrchr.phpt delete mode 100644 ext/standard/tests/strings/strrev.phpt delete mode 100644 ext/standard/tests/strings/strripos.phpt delete mode 100644 ext/standard/tests/strings/strrpos.phpt delete mode 100644 ext/standard/tests/strings/strspn.phpt delete mode 100644 ext/standard/tests/strings/strstr.phpt delete mode 100644 ext/standard/tests/strings/strtotitle.phpt delete mode 100644 ext/standard/tests/strings/strtoupper.phpt delete mode 100644 ext/standard/tests/strings/strtr.phpt delete mode 100644 ext/standard/tests/strings/strtr2.phpt delete mode 100755 ext/standard/tests/strings/strtr3.phpt delete mode 100644 ext/standard/tests/strings/strval.phpt delete mode 100644 ext/standard/tests/strings/substr_compare.phpt delete mode 100644 ext/standard/tests/strings/substr_count.phpt delete mode 100644 ext/standard/tests/strings/substr_replace.phpt delete mode 100644 ext/standard/tests/strings/trim.phpt delete mode 100644 ext/standard/tests/strings/ucfirst.phpt delete mode 100644 ext/standard/tests/strings/url_t.phpt delete mode 100644 ext/standard/tests/strings/uuencode.phpt delete mode 100644 ext/standard/tests/strings/wordwrap.phpt delete mode 100644 ext/standard/tests/time/001.phpt delete mode 100755 ext/standard/tests/time/bug38524.phpt delete mode 100644 ext/standard/tests/time/idate.phpt delete mode 100644 ext/standard/tests/versioning/version_compare.phpt delete mode 100644 ext/standard/type.c delete mode 100644 ext/standard/uniqid.c delete mode 100644 ext/standard/uniqid.h delete mode 100644 ext/standard/url.c delete mode 100644 ext/standard/url.h delete mode 100644 ext/standard/url_scanner.c delete mode 100644 ext/standard/url_scanner.h delete mode 100644 ext/standard/url_scanner_ex.c delete mode 100644 ext/standard/url_scanner_ex.h delete mode 100644 ext/standard/url_scanner_ex.re delete mode 100644 ext/standard/user_filters.c delete mode 100644 ext/standard/uuencode.c delete mode 100644 ext/standard/var.c delete mode 100644 ext/standard/var_unserializer.c delete mode 100644 ext/standard/var_unserializer.re delete mode 100644 ext/standard/versioning.c delete mode 100644 ext/sybase/CREDITS delete mode 100644 ext/sybase/config.m4 delete mode 100644 ext/sybase/php_sybase_db.c delete mode 100644 ext/sybase/php_sybase_db.h delete mode 100644 ext/sybase_ct/CREDITS delete mode 100644 ext/sybase_ct/config.m4 delete mode 100644 ext/sybase_ct/config.w32 delete mode 100644 ext/sybase_ct/php_sybase_ct.c delete mode 100644 ext/sybase_ct/php_sybase_ct.h delete mode 100644 ext/sybase_ct/sybase_ct.dsp delete mode 100644 ext/sybase_ct/tests/bug22403.phpt delete mode 100644 ext/sybase_ct/tests/bug26407.phpt delete mode 100644 ext/sybase_ct/tests/bug27843.phpt delete mode 100644 ext/sybase_ct/tests/bug28354.phpt delete mode 100644 ext/sybase_ct/tests/bug29064.phpt delete mode 100644 ext/sybase_ct/tests/bug30312.phpt delete mode 100644 ext/sybase_ct/tests/bug6339.phpt delete mode 100644 ext/sybase_ct/tests/index.php delete mode 100644 ext/sybase_ct/tests/skipif.inc delete mode 100644 ext/sybase_ct/tests/test.inc delete mode 100644 ext/sybase_ct/tests/test_appname.phpt delete mode 100644 ext/sybase_ct/tests/test_connect.phpt delete mode 100644 ext/sybase_ct/tests/test_connectionbased_msghandler.phpt delete mode 100644 ext/sybase_ct/tests/test_fetch_object.phpt delete mode 100644 ext/sybase_ct/tests/test_fields.phpt delete mode 100644 ext/sybase_ct/tests/test_long.phpt delete mode 100644 ext/sybase_ct/tests/test_msghandler.phpt delete mode 100644 ext/sybase_ct/tests/test_msghandler_handled.phpt delete mode 100644 ext/sybase_ct/tests/test_query_nostore.phpt delete mode 100644 ext/sybase_ct/tests/test_types.phpt delete mode 100644 ext/sybase_ct/tests/test_unbuffered_query.phpt delete mode 100644 ext/sysvmsg/CREDITS delete mode 100644 ext/sysvmsg/config.m4 delete mode 100644 ext/sysvmsg/package.xml delete mode 100644 ext/sysvmsg/php_sysvmsg.h delete mode 100644 ext/sysvmsg/sysvmsg.c delete mode 100644 ext/sysvmsg/tests/001.phpt delete mode 100644 ext/sysvmsg/tests/002.phpt delete mode 100644 ext/sysvsem/CREDITS delete mode 100644 ext/sysvsem/config.m4 delete mode 100644 ext/sysvsem/package.xml delete mode 100644 ext/sysvsem/php_sysvsem.h delete mode 100644 ext/sysvsem/sysvsem.c delete mode 100644 ext/sysvsem/tests/sysv.phpt delete mode 100644 ext/sysvshm/CREDITS delete mode 100644 ext/sysvshm/config.m4 delete mode 100644 ext/sysvshm/package.xml delete mode 100644 ext/sysvshm/php_sysvshm.h delete mode 100644 ext/sysvshm/sysvshm.c delete mode 100644 ext/sysvshm/tests/001.phpt delete mode 100644 ext/sysvshm/tests/002.phpt delete mode 100644 ext/sysvshm/tests/003.phpt delete mode 100644 ext/sysvshm/tests/004.phpt delete mode 100644 ext/sysvshm/tests/005.phpt delete mode 100644 ext/sysvshm/tests/006.phpt delete mode 100644 ext/sysvshm/tests/007.phpt delete mode 100644 ext/tidy/CREDITS delete mode 100644 ext/tidy/README delete mode 100644 ext/tidy/TODO delete mode 100644 ext/tidy/config.m4 delete mode 100644 ext/tidy/config.w32 delete mode 100644 ext/tidy/examples/cleanhtml.php delete mode 100644 ext/tidy/examples/cleanhtml5.php delete mode 100644 ext/tidy/examples/dumpit5.php delete mode 100644 ext/tidy/examples/urlgrab5.php delete mode 100644 ext/tidy/package.xml delete mode 100644 ext/tidy/php_tidy.def delete mode 100644 ext/tidy/php_tidy.h delete mode 100644 ext/tidy/tests/001.phpt delete mode 100644 ext/tidy/tests/002.phpt delete mode 100644 ext/tidy/tests/003.phpt delete mode 100644 ext/tidy/tests/004.phpt delete mode 100644 ext/tidy/tests/005.html delete mode 100644 ext/tidy/tests/005.phpt delete mode 100644 ext/tidy/tests/006.phpt delete mode 100644 ext/tidy/tests/007.html delete mode 100644 ext/tidy/tests/007.phpt delete mode 100644 ext/tidy/tests/008.phpt delete mode 100644 ext/tidy/tests/009.phpt delete mode 100644 ext/tidy/tests/010.phpt delete mode 100644 ext/tidy/tests/011.phpt delete mode 100644 ext/tidy/tests/012.phpt delete mode 100644 ext/tidy/tests/013.html delete mode 100644 ext/tidy/tests/013.phpt delete mode 100644 ext/tidy/tests/014.phpt delete mode 100644 ext/tidy/tests/015.html delete mode 100644 ext/tidy/tests/015.phpt delete mode 100644 ext/tidy/tests/016.html delete mode 100644 ext/tidy/tests/016.phpt delete mode 100644 ext/tidy/tests/016.tcfg delete mode 100644 ext/tidy/tests/017.phpt delete mode 100644 ext/tidy/tests/017a.phpt delete mode 100644 ext/tidy/tests/018.phpt delete mode 100644 ext/tidy/tests/019.phpt delete mode 100644 ext/tidy/tests/020.phpt delete mode 100644 ext/tidy/tests/021.phpt delete mode 100644 ext/tidy/tests/022.phpt delete mode 100644 ext/tidy/tests/023.phpt delete mode 100644 ext/tidy/tests/024.phpt delete mode 100644 ext/tidy/tests/025.phpt delete mode 100644 ext/tidy/tests/026.phpt delete mode 100644 ext/tidy/tests/027.phpt delete mode 100644 ext/tidy/tests/028.phpt delete mode 100644 ext/tidy/tidy.c delete mode 100755 ext/tidy/tidy.dsp delete mode 100644 ext/tokenizer/CREDITS delete mode 100644 ext/tokenizer/Makefile.frag delete mode 100644 ext/tokenizer/config.m4 delete mode 100644 ext/tokenizer/config.w32 delete mode 100644 ext/tokenizer/package.xml delete mode 100644 ext/tokenizer/php_tokenizer.h delete mode 100644 ext/tokenizer/tests/001.phpt delete mode 100644 ext/tokenizer/tests/002.phpt delete mode 100644 ext/tokenizer/tests/003.phpt delete mode 100644 ext/tokenizer/tests/bug26463.phpt delete mode 100644 ext/tokenizer/tokenizer.c delete mode 100644 ext/tokenizer/tokenizer.dsp delete mode 100644 ext/tokenizer/tokenizer.php delete mode 100644 ext/unicode/CREDITS delete mode 100644 ext/unicode/EXPERIMENTAL delete mode 100644 ext/unicode/collator.c delete mode 100644 ext/unicode/config.m4 delete mode 100644 ext/unicode/config.w32 delete mode 100644 ext/unicode/constants.c delete mode 100644 ext/unicode/locale.c delete mode 100644 ext/unicode/package.xml delete mode 100644 ext/unicode/php_property.h delete mode 100644 ext/unicode/php_transform.h delete mode 100644 ext/unicode/php_unicode.h delete mode 100644 ext/unicode/property.c delete mode 100755 ext/unicode/tests/iterator_001.phpt delete mode 100755 ext/unicode/tests/iterator_002.phpt delete mode 100644 ext/unicode/transform.c delete mode 100644 ext/unicode/unicode.c delete mode 100644 ext/unicode/unicode.dsp delete mode 100644 ext/unicode/unicode_iterators.c delete mode 100644 ext/wddx/CREDITS delete mode 100644 ext/wddx/config.m4 delete mode 100644 ext/wddx/config.w32 delete mode 100644 ext/wddx/package.xml delete mode 100644 ext/wddx/php_wddx.h delete mode 100644 ext/wddx/php_wddx_api.h delete mode 100644 ext/wddx/tests/001.phpt delete mode 100755 ext/wddx/tests/bug27287.phpt delete mode 100755 ext/wddx/tests/bug34306.phpt delete mode 100755 ext/wddx/tests/bug35410.phpt delete mode 100755 ext/wddx/tests/bug35410_64bit.phpt delete mode 100755 ext/wddx/tests/bug37569.phpt delete mode 100755 ext/wddx/tests/bug37587.phpt delete mode 100644 ext/wddx/tests/wddx.xml delete mode 100644 ext/wddx/wddx.c delete mode 100644 ext/xml/CREDITS delete mode 100644 ext/xml/compat.c delete mode 100644 ext/xml/config.m4 delete mode 100644 ext/xml/config.w32 delete mode 100644 ext/xml/expat_compat.h delete mode 100644 ext/xml/package.xml delete mode 100644 ext/xml/php_xml.h delete mode 100644 ext/xml/tests/bug25666.phpt delete mode 100644 ext/xml/tests/bug26528.phpt delete mode 100644 ext/xml/tests/bug26614.phpt delete mode 100755 ext/xml/tests/bug26614_libxml.phpt delete mode 100644 ext/xml/tests/bug27908.phpt delete mode 100644 ext/xml/tests/bug30266.phpt delete mode 100644 ext/xml/tests/bug32001.phpt delete mode 100755 ext/xml/tests/bug32001b.phpt delete mode 100644 ext/xml/tests/bug35447.phpt delete mode 100644 ext/xml/tests/inc.ent delete mode 100644 ext/xml/tests/skipif.inc delete mode 100644 ext/xml/tests/xml001.phpt delete mode 100644 ext/xml/tests/xml002.phpt delete mode 100644 ext/xml/tests/xml003.phpt delete mode 100644 ext/xml/tests/xml004.phpt delete mode 100644 ext/xml/tests/xml006.phpt delete mode 100644 ext/xml/tests/xml007.phpt delete mode 100644 ext/xml/tests/xml009.phpt delete mode 100644 ext/xml/tests/xml010.phpt delete mode 100644 ext/xml/tests/xml011.phpt delete mode 100644 ext/xml/tests/xmltest.xml delete mode 100644 ext/xml/xml.c delete mode 100644 ext/xml/xml.mak delete mode 100644 ext/xmlreader/CREDITS delete mode 100644 ext/xmlreader/README delete mode 100644 ext/xmlreader/TODO delete mode 100644 ext/xmlreader/config.m4 delete mode 100644 ext/xmlreader/config.w32 delete mode 100644 ext/xmlreader/examples/dtdexample.dtd delete mode 100644 ext/xmlreader/examples/dtdexample.xml delete mode 100644 ext/xmlreader/examples/relaxNG.rng delete mode 100644 ext/xmlreader/examples/relaxNG.xml delete mode 100644 ext/xmlreader/examples/relaxNG2.rng delete mode 100644 ext/xmlreader/examples/relaxNG3.rng delete mode 100644 ext/xmlreader/examples/xmlreader.xml delete mode 100644 ext/xmlreader/examples/xmlreader_file.php delete mode 100644 ext/xmlreader/examples/xmlreader_relaxNG.php delete mode 100644 ext/xmlreader/examples/xmlreader_string.php delete mode 100644 ext/xmlreader/examples/xmlreader_validatedtd.php delete mode 100644 ext/xmlreader/package.xml delete mode 100644 ext/xmlreader/php_xmlreader.c delete mode 100644 ext/xmlreader/php_xmlreader.h delete mode 100644 ext/xmlreader/tests/001.phpt delete mode 100644 ext/xmlreader/tests/002.phpt delete mode 100644 ext/xmlreader/tests/003.phpt delete mode 100644 ext/xmlreader/tests/004.phpt delete mode 100644 ext/xmlreader/tests/005.phpt delete mode 100644 ext/xmlreader/tests/006.phpt delete mode 100644 ext/xmlreader/tests/007.phpt delete mode 100644 ext/xmlreader/tests/008.phpt delete mode 100644 ext/xmlreader/tests/009.phpt delete mode 100644 ext/xmlreader/tests/010.phpt delete mode 100644 ext/xmlreader/tests/011.phpt delete mode 100755 ext/xmlreader/tests/012.dtd delete mode 100755 ext/xmlreader/tests/012.phpt delete mode 100755 ext/xmlreader/tests/012.xml delete mode 100755 ext/xmlreader/tests/013.phpt delete mode 100755 ext/xmlreader/tests/013.xsd delete mode 100644 ext/xmlreader/tests/bug36743.phpt delete mode 100644 ext/xmlreader/tests/dtdexample.dtd delete mode 100644 ext/xmlreader/tests/relaxNG.rng delete mode 100644 ext/xmlreader/tests/relaxNG2.rng delete mode 100644 ext/xmlreader/tests/relaxNG3.rng delete mode 100644 ext/xmlreader/xmlreader.dsp delete mode 100644 ext/xmlrpc/CREDITS delete mode 100644 ext/xmlrpc/EXPERIMENTAL delete mode 100644 ext/xmlrpc/config.m4 delete mode 100644 ext/xmlrpc/config.w32 delete mode 100644 ext/xmlrpc/libxmlrpc/README delete mode 100644 ext/xmlrpc/libxmlrpc/acinclude.m4 delete mode 100644 ext/xmlrpc/libxmlrpc/base64.c delete mode 100644 ext/xmlrpc/libxmlrpc/base64.h delete mode 100644 ext/xmlrpc/libxmlrpc/encodings.c delete mode 100644 ext/xmlrpc/libxmlrpc/encodings.h delete mode 100644 ext/xmlrpc/libxmlrpc/queue.c delete mode 100644 ext/xmlrpc/libxmlrpc/queue.h delete mode 100644 ext/xmlrpc/libxmlrpc/simplestring.c delete mode 100644 ext/xmlrpc/libxmlrpc/simplestring.h delete mode 100644 ext/xmlrpc/libxmlrpc/system_methods.c delete mode 100644 ext/xmlrpc/libxmlrpc/system_methods_private.h delete mode 100644 ext/xmlrpc/libxmlrpc/xml_element.c delete mode 100644 ext/xmlrpc/libxmlrpc/xml_element.h delete mode 100644 ext/xmlrpc/libxmlrpc/xml_to_dandarpc.c delete mode 100644 ext/xmlrpc/libxmlrpc/xml_to_dandarpc.h delete mode 100644 ext/xmlrpc/libxmlrpc/xml_to_soap.c delete mode 100644 ext/xmlrpc/libxmlrpc/xml_to_soap.h delete mode 100644 ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c delete mode 100644 ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.h delete mode 100644 ext/xmlrpc/libxmlrpc/xmlrpc.c delete mode 100644 ext/xmlrpc/libxmlrpc/xmlrpc.h delete mode 100644 ext/xmlrpc/libxmlrpc/xmlrpc.m4 delete mode 100644 ext/xmlrpc/libxmlrpc/xmlrpc_introspection.c delete mode 100644 ext/xmlrpc/libxmlrpc/xmlrpc_introspection.h delete mode 100644 ext/xmlrpc/libxmlrpc/xmlrpc_introspection_private.h delete mode 100644 ext/xmlrpc/libxmlrpc/xmlrpc_private.h delete mode 100644 ext/xmlrpc/libxmlrpc/xmlrpc_win32.h delete mode 100644 ext/xmlrpc/php_xmlrpc.h delete mode 100644 ext/xmlrpc/tests/001.phpt delete mode 100644 ext/xmlrpc/tests/002.phpt delete mode 100644 ext/xmlrpc/tests/bug37057.phpt delete mode 100644 ext/xmlrpc/tests/bug38431.phpt delete mode 100644 ext/xmlrpc/tests/bug40576.phpt delete mode 100644 ext/xmlrpc/tests/bug40576_64bit.phpt delete mode 100644 ext/xmlrpc/xmlrpc-epi-php.c delete mode 100644 ext/xmlrpc/xmlrpc.dsp delete mode 100644 ext/xmlwriter/CREDITS delete mode 100644 ext/xmlwriter/TODO delete mode 100644 ext/xmlwriter/config.m4 delete mode 100644 ext/xmlwriter/config.w32 delete mode 100644 ext/xmlwriter/examples/xmlwriter_file.php delete mode 100644 ext/xmlwriter/examples/xmlwriter_mem.php delete mode 100644 ext/xmlwriter/examples/xmlwriter_mem_ns.php delete mode 100644 ext/xmlwriter/examples/xmlwriter_oo.php delete mode 100644 ext/xmlwriter/package.xml delete mode 100644 ext/xmlwriter/package2.xml delete mode 100644 ext/xmlwriter/php_xmlwriter.c delete mode 100644 ext/xmlwriter/php_xmlwriter.h delete mode 100644 ext/xmlwriter/tests/001.phpt delete mode 100644 ext/xmlwriter/tests/002.phpt delete mode 100644 ext/xmlwriter/tests/003.phpt delete mode 100644 ext/xmlwriter/tests/004.phpt delete mode 100644 ext/xmlwriter/tests/005.phpt delete mode 100644 ext/xmlwriter/tests/006.phpt delete mode 100644 ext/xmlwriter/tests/007.phpt delete mode 100644 ext/xmlwriter/tests/008.phpt delete mode 100644 ext/xmlwriter/tests/009.phpt delete mode 100644 ext/xmlwriter/tests/010.phpt delete mode 100644 ext/xmlwriter/tests/OO_001.phpt delete mode 100644 ext/xmlwriter/tests/OO_002.phpt delete mode 100644 ext/xmlwriter/tests/OO_003.phpt delete mode 100644 ext/xmlwriter/tests/OO_004.phpt delete mode 100644 ext/xmlwriter/tests/OO_005.phpt delete mode 100644 ext/xmlwriter/tests/OO_006.phpt delete mode 100644 ext/xmlwriter/tests/OO_007.phpt delete mode 100644 ext/xmlwriter/tests/OO_008.phpt delete mode 100644 ext/xmlwriter/tests/OO_009.phpt delete mode 100644 ext/xmlwriter/tests/bug39504.phpt delete mode 100644 ext/xmlwriter/xmlwriter.dsp delete mode 100644 ext/xsl/CREDITS delete mode 100644 ext/xsl/config.m4 delete mode 100644 ext/xsl/config.w32 delete mode 100644 ext/xsl/php_xsl.c delete mode 100644 ext/xsl/php_xsl.h delete mode 100644 ext/xsl/tests/area_list.xsl delete mode 100644 ext/xsl/tests/area_name.xml delete mode 100644 ext/xsl/tests/bug26384.phpt delete mode 100755 ext/xsl/tests/bug33853.phpt delete mode 100644 ext/xsl/tests/documentxpath.xsl delete mode 100644 ext/xsl/tests/exslt.xml delete mode 100644 ext/xsl/tests/exslt.xsl delete mode 100644 ext/xsl/tests/prepare.inc delete mode 100644 ext/xsl/tests/skipif.inc delete mode 100644 ext/xsl/tests/streamsinclude.xsl delete mode 100644 ext/xsl/tests/xslt.xml delete mode 100644 ext/xsl/tests/xslt.xsl delete mode 100644 ext/xsl/tests/xslt.xsl.gz delete mode 100644 ext/xsl/tests/xslt001.phpt delete mode 100644 ext/xsl/tests/xslt002.phpt delete mode 100644 ext/xsl/tests/xslt003.phpt delete mode 100644 ext/xsl/tests/xslt004.phpt delete mode 100644 ext/xsl/tests/xslt005.phpt delete mode 100644 ext/xsl/tests/xslt006.phpt delete mode 100644 ext/xsl/tests/xslt007.phpt delete mode 100644 ext/xsl/tests/xslt008.phpt delete mode 100644 ext/xsl/tests/xslt009.phpt delete mode 100644 ext/xsl/tests/xslt010.phpt delete mode 100644 ext/xsl/tests/xslt011.phpt delete mode 100644 ext/xsl/tests/xslt011.xml delete mode 100644 ext/xsl/tests/xslt011.xsl delete mode 100644 ext/xsl/tests/xslt012.phpt delete mode 100644 ext/xsl/tests/xslt012.xsl delete mode 100644 ext/xsl/xsl.dsp delete mode 100644 ext/xsl/xsl_fe.h delete mode 100644 ext/xsl/xsltprocessor.c delete mode 100644 ext/zip/CREDITS delete mode 100644 ext/zip/TODO delete mode 100644 ext/zip/config.m4 delete mode 100644 ext/zip/config.w32 delete mode 100644 ext/zip/examples/comment.php delete mode 100644 ext/zip/examples/create.php delete mode 100644 ext/zip/examples/dir.php delete mode 100644 ext/zip/examples/extract.php delete mode 100644 ext/zip/examples/extractAll.php delete mode 100644 ext/zip/examples/fopen.php delete mode 100644 ext/zip/examples/get_set_comments.php delete mode 100644 ext/zip/examples/im.php delete mode 100644 ext/zip/examples/odt.php delete mode 100644 ext/zip/examples/oldapi.php delete mode 100644 ext/zip/examples/test.odt delete mode 100644 ext/zip/examples/test.zip delete mode 100644 ext/zip/examples/test1.zip delete mode 100644 ext/zip/examples/test_im.zip delete mode 100644 ext/zip/examples/test_with_comment.zip delete mode 100644 ext/zip/examples/too.php delete mode 100644 ext/zip/lib/mkstemp.c delete mode 100644 ext/zip/lib/unistd.h delete mode 100644 ext/zip/lib/zip.h delete mode 100644 ext/zip/lib/zip_add.c delete mode 100644 ext/zip/lib/zip_add_dir.c delete mode 100644 ext/zip/lib/zip_close.c delete mode 100644 ext/zip/lib/zip_delete.c delete mode 100644 ext/zip/lib/zip_dirent.c delete mode 100644 ext/zip/lib/zip_entry_free.c delete mode 100644 ext/zip/lib/zip_entry_new.c delete mode 100644 ext/zip/lib/zip_err_str.c delete mode 100644 ext/zip/lib/zip_error.c delete mode 100644 ext/zip/lib/zip_error_clear.c delete mode 100644 ext/zip/lib/zip_error_get.c delete mode 100644 ext/zip/lib/zip_error_get_sys_type.c delete mode 100644 ext/zip/lib/zip_error_strerror.c delete mode 100644 ext/zip/lib/zip_error_to_str.c delete mode 100644 ext/zip/lib/zip_fclose.c delete mode 100644 ext/zip/lib/zip_file_error_clear.c delete mode 100644 ext/zip/lib/zip_file_error_get.c delete mode 100644 ext/zip/lib/zip_file_get_offset.c delete mode 100644 ext/zip/lib/zip_file_strerror.c delete mode 100644 ext/zip/lib/zip_fopen.c delete mode 100644 ext/zip/lib/zip_fopen_index.c delete mode 100644 ext/zip/lib/zip_fread.c delete mode 100644 ext/zip/lib/zip_free.c delete mode 100644 ext/zip/lib/zip_get_archive_comment.c delete mode 100644 ext/zip/lib/zip_get_file_comment.c delete mode 100644 ext/zip/lib/zip_get_name.c delete mode 100644 ext/zip/lib/zip_get_num_files.c delete mode 100644 ext/zip/lib/zip_memdup.c delete mode 100644 ext/zip/lib/zip_name_locate.c delete mode 100644 ext/zip/lib/zip_new.c delete mode 100644 ext/zip/lib/zip_open.c delete mode 100644 ext/zip/lib/zip_rename.c delete mode 100644 ext/zip/lib/zip_replace.c delete mode 100644 ext/zip/lib/zip_set_archive_comment.c delete mode 100644 ext/zip/lib/zip_set_file_comment.c delete mode 100644 ext/zip/lib/zip_set_name.c delete mode 100644 ext/zip/lib/zip_source_buffer.c delete mode 100644 ext/zip/lib/zip_source_file.c delete mode 100644 ext/zip/lib/zip_source_filep.c delete mode 100644 ext/zip/lib/zip_source_free.c delete mode 100644 ext/zip/lib/zip_source_function.c delete mode 100644 ext/zip/lib/zip_source_zip.c delete mode 100644 ext/zip/lib/zip_stat.c delete mode 100644 ext/zip/lib/zip_stat_index.c delete mode 100644 ext/zip/lib/zip_stat_init.c delete mode 100644 ext/zip/lib/zip_strerror.c delete mode 100644 ext/zip/lib/zip_unchange.c delete mode 100644 ext/zip/lib/zip_unchange_all.c delete mode 100644 ext/zip/lib/zip_unchange_archive.c delete mode 100644 ext/zip/lib/zip_unchange_data.c delete mode 100644 ext/zip/lib/zip_win32.h delete mode 100644 ext/zip/lib/zipint.h delete mode 100644 ext/zip/php_zip.c delete mode 100644 ext/zip/php_zip.h delete mode 100644 ext/zip/tests/001.phpt delete mode 100644 ext/zip/tests/binarynull.zip delete mode 100644 ext/zip/tests/bug38943.phpt delete mode 100644 ext/zip/tests/bug38944.phpt delete mode 100644 ext/zip/tests/bug40228.phpt delete mode 100644 ext/zip/tests/bug40228.zip delete mode 100644 ext/zip/tests/bug7214.phpt delete mode 100644 ext/zip/tests/bug7658.odt delete mode 100644 ext/zip/tests/bug7658.phpt delete mode 100644 ext/zip/tests/bug7658.xml delete mode 100644 ext/zip/tests/bug8009.phpt delete mode 100644 ext/zip/tests/bug8009.zip delete mode 100644 ext/zip/tests/bug8700.phpt delete mode 100644 ext/zip/tests/oo_addemptydir.phpt delete mode 100644 ext/zip/tests/oo_addfile.phpt delete mode 100644 ext/zip/tests/oo_close.phpt delete mode 100644 ext/zip/tests/oo_delete.phpt delete mode 100644 ext/zip/tests/oo_ext_zip.phpt delete mode 100644 ext/zip/tests/oo_extract.phpt delete mode 100644 ext/zip/tests/oo_getcomment.phpt delete mode 100644 ext/zip/tests/oo_getnameindex.phpt delete mode 100644 ext/zip/tests/oo_namelocate.phpt delete mode 100644 ext/zip/tests/oo_open.phpt delete mode 100644 ext/zip/tests/oo_rename.phpt delete mode 100644 ext/zip/tests/oo_setcomment.phpt delete mode 100644 ext/zip/tests/oo_stream.phpt delete mode 100644 ext/zip/tests/test.zip delete mode 100644 ext/zip/tests/test_procedural.zip delete mode 100644 ext/zip/tests/test_with_comment.zip delete mode 100644 ext/zip/tests/utils.inc delete mode 100644 ext/zip/tests/zip_close.phpt delete mode 100644 ext/zip/tests/zip_entry_compressedsize.phpt delete mode 100644 ext/zip/tests/zip_entry_compressionmethod.phpt delete mode 100644 ext/zip/tests/zip_entry_filesize.phpt delete mode 100644 ext/zip/tests/zip_entry_name.phpt delete mode 100644 ext/zip/tests/zip_entry_open.phpt delete mode 100644 ext/zip/tests/zip_entry_read.phpt delete mode 100644 ext/zip/tests/zip_open.phpt delete mode 100644 ext/zip/tests/zip_read.phpt delete mode 100644 ext/zip/zip_stream.c delete mode 100644 ext/zlib/CREDITS delete mode 100644 ext/zlib/config.w32 delete mode 100644 ext/zlib/config0.m4 delete mode 100644 ext/zlib/package.xml delete mode 100644 ext/zlib/php_zlib.def delete mode 100644 ext/zlib/php_zlib.h delete mode 100644 ext/zlib/tests/001.phpt delete mode 100644 ext/zlib/tests/002.phpt delete mode 100644 ext/zlib/tests/003.phpt delete mode 100644 ext/zlib/tests/004.phpt delete mode 100644 ext/zlib/tests/004.txt.gz delete mode 100644 ext/zlib/tests/005.phpt delete mode 100644 ext/zlib/tests/006.phpt delete mode 100644 ext/zlib/tests/007.phpt delete mode 100644 ext/zlib/tests/bug_34821.phpt delete mode 100644 ext/zlib/tests/compress_zlib_wrapper.phpt delete mode 100644 ext/zlib/tests/gzfilegzreadfile.phpt delete mode 100644 ext/zlib/tests/gzreadgzwrite.phpt delete mode 100644 ext/zlib/tests/gzreadgzwriteplain.phpt delete mode 100644 ext/zlib/tests/ob_001.phpt delete mode 100644 ext/zlib/tests/ob_002.phpt delete mode 100644 ext/zlib/tests/ob_003.phpt delete mode 100644 ext/zlib/tests/ob_004.phpt delete mode 100644 ext/zlib/tests/ob_005.phpt delete mode 100644 ext/zlib/tests/zlib_filter_deflate.phpt delete mode 100644 ext/zlib/tests/zlib_filter_inflate.phpt delete mode 100644 ext/zlib/zlib.c delete mode 100644 ext/zlib/zlib.dsp delete mode 100644 ext/zlib/zlib_filter.c delete mode 100644 ext/zlib/zlib_fopen_wrapper.c delete mode 100644 ext/zlib/zlib_win32_howto.txt delete mode 100644 footer delete mode 100755 genfiles delete mode 100644 header delete mode 100644 ltmain.sh delete mode 100644 main/SAPI.c delete mode 100644 main/SAPI.h delete mode 100644 main/alloca.c delete mode 100644 main/build-defs.h.in delete mode 100644 main/config.w32.h delete mode 100644 main/fopen_wrappers.c delete mode 100644 main/fopen_wrappers.h delete mode 100644 main/internal_functions.c.in delete mode 100644 main/internal_functions_nw.c delete mode 100644 main/internal_functions_win32.c delete mode 100644 main/logos.h delete mode 100644 main/main.c delete mode 100644 main/mergesort.c delete mode 100644 main/network.c delete mode 100644 main/output.c delete mode 100644 main/php.h delete mode 100644 main/php_compat.h delete mode 100644 main/php_content_types.c delete mode 100644 main/php_content_types.h delete mode 100644 main/php_globals.h delete mode 100644 main/php_ini.c delete mode 100644 main/php_ini.h delete mode 100644 main/php_logos.c delete mode 100644 main/php_logos.h delete mode 100644 main/php_main.h delete mode 100644 main/php_memory_streams.h delete mode 100644 main/php_network.h delete mode 100644 main/php_open_temporary_file.c delete mode 100644 main/php_open_temporary_file.h delete mode 100644 main/php_output.h delete mode 100644 main/php_realpath.c delete mode 100644 main/php_reentrancy.h delete mode 100644 main/php_regex.h delete mode 100644 main/php_scandir.c delete mode 100644 main/php_scandir.h delete mode 100644 main/php_sprintf.c delete mode 100755 main/php_streams.h delete mode 100644 main/php_syslog.h delete mode 100644 main/php_ticks.c delete mode 100644 main/php_ticks.h delete mode 100644 main/php_variables.c delete mode 100644 main/php_variables.h delete mode 100644 main/php_version.h delete mode 100644 main/reentrancy.c delete mode 100644 main/rfc1867.c delete mode 100644 main/rfc1867.h delete mode 100644 main/snprintf.c delete mode 100644 main/snprintf.h delete mode 100644 main/spprintf.c delete mode 100644 main/spprintf.h delete mode 100644 main/streams/cast.c delete mode 100644 main/streams/filter.c delete mode 100755 main/streams/glob_wrapper.c delete mode 100644 main/streams/memory.c delete mode 100644 main/streams/mmap.c delete mode 100644 main/streams/php_stream_context.h delete mode 100644 main/streams/php_stream_filter_api.h delete mode 100755 main/streams/php_stream_glob_wrapper.h delete mode 100644 main/streams/php_stream_mmap.h delete mode 100644 main/streams/php_stream_plain_wrapper.h delete mode 100644 main/streams/php_stream_transport.h delete mode 100644 main/streams/php_stream_userspace.h delete mode 100644 main/streams/php_streams_int.h delete mode 100644 main/streams/plain_wrapper.c delete mode 100755 main/streams/streams.c delete mode 100644 main/streams/transports.c delete mode 100644 main/streams/unicode_filter.c delete mode 100644 main/streams/userspace.c delete mode 100644 main/streams/xp_socket.c delete mode 100644 main/strlcat.c delete mode 100644 main/strlcpy.c delete mode 100644 main/win95nt.h delete mode 100755 makedist delete mode 100644 makerpm delete mode 100644 netware/sendmail_nw.h delete mode 100644 netware/start.c create mode 100644 pear/OS/Guess.php create mode 100644 pear/PEAR.php create mode 100644 pear/PEAR/Autoloader.php create mode 100644 pear/PEAR/Builder.php create mode 100644 pear/PEAR/Command.php create mode 100644 pear/PEAR/Command/Auth.php create mode 100644 pear/PEAR/Command/Build.php create mode 100644 pear/PEAR/Command/Common.php create mode 100644 pear/PEAR/Command/Config.php create mode 100644 pear/PEAR/Command/Install.php create mode 100644 pear/PEAR/Command/Package.php create mode 100644 pear/PEAR/Command/Registry.php create mode 100644 pear/PEAR/Command/Remote.php create mode 100644 pear/PEAR/Common.php create mode 100644 pear/PEAR/Config.php create mode 100644 pear/PEAR/Dependency.php create mode 100644 pear/PEAR/Frontend/CLI.php create mode 100644 pear/PEAR/Installer.php create mode 100644 pear/PEAR/Packager.php create mode 100644 pear/PEAR/Registry.php create mode 100644 pear/PEAR/Remote.php create mode 100644 pear/System.php create mode 100644 pear/package-PEAR.xml create mode 100644 pear/package.dtd create mode 100755 pear/scripts/pear.bat create mode 100644 pear/scripts/pear.in create mode 100644 pear/template.spec delete mode 100644 php.gif delete mode 100644 php.ini-dist delete mode 100644 php.ini-recommended delete mode 100644 php5.spec.in delete mode 100644 regex/COPYRIGHT delete mode 100644 regex/README delete mode 100644 regex/WHATSNEW delete mode 100644 regex/cclass.h delete mode 100644 regex/cname.h delete mode 100644 regex/debug.c delete mode 100644 regex/debug.ih delete mode 100644 regex/engine.c delete mode 100644 regex/engine.ih delete mode 100644 regex/main.c delete mode 100644 regex/main.ih delete mode 100644 regex/mkh delete mode 100644 regex/regcomp.c delete mode 100644 regex/regcomp.ih delete mode 100644 regex/regerror.c delete mode 100644 regex/regerror.ih delete mode 100644 regex/regex.3 delete mode 100644 regex/regex.7 delete mode 100644 regex/regex.dsp delete mode 100644 regex/regex.dsw delete mode 100644 regex/regex.h delete mode 100644 regex/regex.mak delete mode 100644 regex/regex2.h delete mode 100644 regex/regex_extra.h delete mode 100644 regex/regexec.c delete mode 100644 regex/regfree.c delete mode 100644 regex/split.c delete mode 100644 regex/tests delete mode 100644 regex/utils.h delete mode 100755 run-tests.php delete mode 100644 sapi/aolserver/CREDITS delete mode 100644 sapi/aolserver/README delete mode 100644 sapi/aolserver/aolserver.c delete mode 100644 sapi/aolserver/config.m4 delete mode 100644 sapi/aolserver/config.w32 delete mode 100644 sapi/aolserver/php.sym delete mode 100644 sapi/aolserver/php5aolserver.dsp delete mode 100644 sapi/apache/CREDITS delete mode 100644 sapi/apache/apMakefile.libdir delete mode 100644 sapi/apache/apMakefile.tmpl delete mode 100644 sapi/apache/config.m4 delete mode 100644 sapi/apache/config.w32 delete mode 100644 sapi/apache/libphp6.module.in delete mode 100644 sapi/apache/libpre.c delete mode 100644 sapi/apache/mod_php.c delete mode 100644 sapi/apache/mod_php.exp delete mode 100644 sapi/apache/mod_php.h delete mode 100644 sapi/apache/php.sym delete mode 100644 sapi/apache/php5apache.dsp delete mode 100644 sapi/apache/php_apache.c delete mode 100644 sapi/apache/php_apache_http.h delete mode 100644 sapi/apache/sapi_apache.c delete mode 100644 sapi/apache2filter/CREDITS delete mode 100644 sapi/apache2filter/EXPERIMENTAL delete mode 100644 sapi/apache2filter/README delete mode 100644 sapi/apache2filter/apache_config.c delete mode 100644 sapi/apache2filter/config.m4 delete mode 100755 sapi/apache2filter/config.w32 delete mode 100644 sapi/apache2filter/php.sym delete mode 100644 sapi/apache2filter/php_apache.h delete mode 100644 sapi/apache2filter/php_functions.c delete mode 100644 sapi/apache2filter/sapi_apache2.c delete mode 100644 sapi/apache2handler/CREDITS delete mode 100644 sapi/apache2handler/README delete mode 100644 sapi/apache2handler/apache_config.c delete mode 100644 sapi/apache2handler/config.m4 delete mode 100644 sapi/apache2handler/config.w32 delete mode 100644 sapi/apache2handler/mod_php.c delete mode 100644 sapi/apache2handler/php.sym delete mode 100644 sapi/apache2handler/php5apache2.dsp delete mode 100644 sapi/apache2handler/php_apache.h delete mode 100644 sapi/apache2handler/php_functions.c delete mode 100644 sapi/apache2handler/sapi_apache2.c delete mode 100644 sapi/apache_hooks/CREDITS delete mode 100644 sapi/apache_hooks/README delete mode 100644 sapi/apache_hooks/apMakefile.libdir delete mode 100644 sapi/apache_hooks/apMakefile.tmpl delete mode 100644 sapi/apache_hooks/config.m4 delete mode 100644 sapi/apache_hooks/config.w32 delete mode 100644 sapi/apache_hooks/libphp5.module.in delete mode 100644 sapi/apache_hooks/mod_php5.c delete mode 100644 sapi/apache_hooks/mod_php5.exp delete mode 100644 sapi/apache_hooks/mod_php5.h delete mode 100644 sapi/apache_hooks/php.sym delete mode 100755 sapi/apache_hooks/php5apache_hooks.dsp delete mode 100644 sapi/apache_hooks/php_apache.c delete mode 100644 sapi/apache_hooks/php_apache_http.h delete mode 100644 sapi/apache_hooks/sapi_apache.c delete mode 100644 sapi/caudium/CREDITS delete mode 100644 sapi/caudium/README delete mode 100644 sapi/caudium/TODO delete mode 100644 sapi/caudium/caudium.c delete mode 100644 sapi/caudium/config.m4 delete mode 100755 sapi/cgi/CHANGES delete mode 100644 sapi/cgi/CREDITS delete mode 100644 sapi/cgi/Makefile.frag delete mode 100644 sapi/cgi/README.FastCGI delete mode 100644 sapi/cgi/cgi_main.c delete mode 100644 sapi/cgi/config.w32 delete mode 100644 sapi/cgi/config9.m4 delete mode 100644 sapi/cgi/fastcgi.c delete mode 100644 sapi/cgi/fastcgi.h delete mode 100644 sapi/cgi/getopt.c delete mode 100644 sapi/cgi/php.sym delete mode 100644 sapi/cgi/php_getopt.h delete mode 100644 sapi/cli/CREDITS delete mode 100644 sapi/cli/Makefile.frag delete mode 100644 sapi/cli/README delete mode 100644 sapi/cli/TODO delete mode 100644 sapi/cli/cli_win32.c delete mode 100644 sapi/cli/config.m4 delete mode 100644 sapi/cli/config.w32 delete mode 100644 sapi/cli/getopt.c delete mode 100644 sapi/cli/php.1.in delete mode 100644 sapi/cli/php_cli.c delete mode 100644 sapi/cli/php_cli_readline.c delete mode 100644 sapi/cli/php_cli_readline.h delete mode 100644 sapi/cli/php_getopt.h delete mode 100644 sapi/cli/tests/001.phpt delete mode 100644 sapi/cli/tests/002-win32.phpt delete mode 100644 sapi/cli/tests/002.phpt delete mode 100644 sapi/cli/tests/003.phpt delete mode 100644 sapi/cli/tests/004.phpt delete mode 100644 sapi/cli/tests/005.phpt delete mode 100644 sapi/cli/tests/006.phpt delete mode 100644 sapi/cli/tests/007.phpt delete mode 100644 sapi/cli/tests/008.phpt delete mode 100644 sapi/cli/tests/009.phpt delete mode 100644 sapi/cli/tests/010-2.phpt delete mode 100644 sapi/cli/tests/010.phpt delete mode 100644 sapi/cli/tests/011.phpt delete mode 100644 sapi/cli/tests/012.phpt delete mode 100644 sapi/cli/tests/013.phpt delete mode 100644 sapi/cli/tests/014.phpt delete mode 100644 sapi/cli/tests/skipif.inc delete mode 100644 sapi/continuity/CREDITS delete mode 100644 sapi/continuity/capi.c delete mode 100644 sapi/continuity/config.m4 delete mode 100644 sapi/embed/CREDITS delete mode 100644 sapi/embed/EXPERIMENTAL delete mode 100644 sapi/embed/config.m4 delete mode 100644 sapi/embed/config.w32 delete mode 100644 sapi/embed/php5embed.dsp delete mode 100644 sapi/embed/php_embed.c delete mode 100644 sapi/embed/php_embed.h delete mode 100644 sapi/isapi/CREDITS delete mode 100644 sapi/isapi/config.m4 delete mode 100644 sapi/isapi/config.w32 delete mode 100644 sapi/isapi/php.sym delete mode 100644 sapi/isapi/php5isapi.c delete mode 100644 sapi/isapi/php5isapi.def delete mode 100644 sapi/isapi/php5isapi.dsp delete mode 100644 sapi/isapi/stresstest/getopt.c delete mode 100644 sapi/isapi/stresstest/getopt.h delete mode 100644 sapi/isapi/stresstest/notes.txt delete mode 100644 sapi/isapi/stresstest/stresstest.cpp delete mode 100644 sapi/isapi/stresstest/stresstest.dsp delete mode 100644 sapi/litespeed/Makefile.frag delete mode 100644 sapi/litespeed/README delete mode 100644 sapi/litespeed/config.m4 delete mode 100644 sapi/litespeed/lsapi_main.c delete mode 100644 sapi/litespeed/lsapidef.h delete mode 100644 sapi/litespeed/lsapilib.c delete mode 100644 sapi/litespeed/lsapilib.h delete mode 100644 sapi/milter/CREDITS delete mode 100644 sapi/milter/EXPERIMENTAL delete mode 100644 sapi/milter/Makefile.frag delete mode 100644 sapi/milter/TODO delete mode 100644 sapi/milter/config.m4 delete mode 100644 sapi/milter/getopt.c delete mode 100644 sapi/milter/milter.php delete mode 100644 sapi/milter/php_getopt.h delete mode 100644 sapi/milter/php_milter.c delete mode 100644 sapi/milter/php_milter.h delete mode 100644 sapi/nsapi/CREDITS delete mode 100644 sapi/nsapi/config.m4 delete mode 100644 sapi/nsapi/config.w32 delete mode 100644 sapi/nsapi/nsapi-readme.txt delete mode 100644 sapi/nsapi/nsapi.c delete mode 100644 sapi/nsapi/php5nsapi.dsp delete mode 100644 sapi/phttpd/CREDITS delete mode 100644 sapi/phttpd/README delete mode 100644 sapi/phttpd/config.m4 delete mode 100644 sapi/phttpd/php.sym delete mode 100644 sapi/phttpd/php_phttpd.h delete mode 100644 sapi/phttpd/phttpd.c delete mode 100644 sapi/pi3web/CREDITS delete mode 100644 sapi/pi3web/README delete mode 100644 sapi/pi3web/config.m4 delete mode 100644 sapi/pi3web/config.w32 delete mode 100644 sapi/pi3web/php.sym delete mode 100644 sapi/pi3web/php5pi3web.dsp delete mode 100644 sapi/pi3web/pi3web_sapi.c delete mode 100644 sapi/pi3web/pi3web_sapi.h delete mode 100644 sapi/roxen/README delete mode 100644 sapi/roxen/TODO delete mode 100644 sapi/roxen/config.m4 delete mode 100644 sapi/roxen/roxen.c delete mode 100644 sapi/tests/test001.phpt delete mode 100644 sapi/tests/test002.phpt delete mode 100644 sapi/tests/test003.phpt delete mode 100644 sapi/tests/test004.phpt delete mode 100644 sapi/tests/test005.phpt delete mode 100644 sapi/tests/test006.phpt delete mode 100644 sapi/tests/test007.phpt delete mode 100644 sapi/thttpd/CREDITS delete mode 100644 sapi/thttpd/README delete mode 100644 sapi/thttpd/config.m4 delete mode 100644 sapi/thttpd/php.sym delete mode 100644 sapi/thttpd/php_thttpd.h delete mode 100644 sapi/thttpd/stub.c delete mode 100644 sapi/thttpd/thttpd.c delete mode 100644 sapi/thttpd/thttpd_patch delete mode 100644 sapi/tux/CREDITS delete mode 100644 sapi/tux/README delete mode 100644 sapi/tux/config.m4 delete mode 100644 sapi/tux/php.sym delete mode 100644 sapi/tux/php_tux.c delete mode 100644 sapi/webjames/CREDITS delete mode 100644 sapi/webjames/README delete mode 100644 sapi/webjames/config.m4 delete mode 100644 sapi/webjames/php_webjames.h delete mode 100644 sapi/webjames/webjames.c delete mode 100644 scripts/Makefile.frag delete mode 100755 scripts/apache/apconf-conv.sh delete mode 100755 scripts/apache/aphtaccess-conv.sh delete mode 100644 scripts/apache/conffix.awk delete mode 100644 scripts/apache/htaccessfix.awk delete mode 100644 scripts/dev/check_parameters.php delete mode 100755 scripts/dev/conv_proto delete mode 100755 scripts/dev/conv_z_macros delete mode 100755 scripts/dev/credits delete mode 100644 scripts/dev/extern_c.php delete mode 100755 scripts/dev/phpextdist delete mode 100755 scripts/dev/search_underscores.php delete mode 100644 scripts/man1/php-config.1.in delete mode 100644 scripts/man1/phpize.1.in delete mode 100644 scripts/php-config.in delete mode 100644 scripts/phpize.in delete mode 100644 scripts/phpize.m4 delete mode 100755 server-tests-config.php delete mode 100755 server-tests.php delete mode 100755 snapshot delete mode 100644 stamp-h.in delete mode 100644 stub.c delete mode 100644 tests/basic/001.phpt delete mode 100644 tests/basic/002.phpt delete mode 100644 tests/basic/003.phpt delete mode 100644 tests/basic/004.phpt delete mode 100644 tests/basic/005.phpt delete mode 100644 tests/basic/006.phpt delete mode 100644 tests/basic/007.phpt delete mode 100644 tests/basic/008.phpt delete mode 100644 tests/basic/009.phpt delete mode 100644 tests/basic/010.phpt delete mode 100644 tests/basic/011.phpt delete mode 100644 tests/basic/012.phpt delete mode 100644 tests/basic/013.phpt delete mode 100644 tests/basic/014.phpt delete mode 100644 tests/basic/015.phpt delete mode 100644 tests/basic/016.phpt delete mode 100644 tests/basic/017.phpt delete mode 100644 tests/basic/018.phpt delete mode 100644 tests/basic/019.phpt delete mode 100644 tests/basic/020.phpt delete mode 100644 tests/basic/022.phpt delete mode 100644 tests/basic/023.phpt delete mode 100644 tests/basic/bug20539.phpt delete mode 100755 tests/basic/bug29971.phpt delete mode 100644 tests/bin-info.inc delete mode 100644 tests/classes/__call_001.phpt delete mode 100755 tests/classes/__call_002.phpt delete mode 100644 tests/classes/__set__get_001.phpt delete mode 100755 tests/classes/__set__get_002.phpt delete mode 100755 tests/classes/__set__get_003.phpt delete mode 100755 tests/classes/__set__get_004.phpt delete mode 100755 tests/classes/__set__get_005.phpt delete mode 100644 tests/classes/__set_data_corrupt.phpt delete mode 100644 tests/classes/abstract.phpt delete mode 100755 tests/classes/abstract_by_interface_001.phpt delete mode 100755 tests/classes/abstract_by_interface_002.phpt delete mode 100644 tests/classes/abstract_class.phpt delete mode 100644 tests/classes/abstract_derived.phpt delete mode 100644 tests/classes/abstract_final.phpt delete mode 100644 tests/classes/abstract_inherit.phpt delete mode 100644 tests/classes/abstract_not_declared.phpt delete mode 100644 tests/classes/abstract_redeclare.phpt delete mode 100644 tests/classes/abstract_static.phpt delete mode 100755 tests/classes/abstract_user_call.phpt delete mode 100644 tests/classes/array_access_001.phpt delete mode 100644 tests/classes/array_access_002.phpt delete mode 100644 tests/classes/array_access_003.phpt delete mode 100644 tests/classes/array_access_004.phpt delete mode 100755 tests/classes/array_access_005.phpt delete mode 100644 tests/classes/array_access_006.phpt delete mode 100755 tests/classes/array_access_007.phpt delete mode 100755 tests/classes/array_access_008.phpt delete mode 100755 tests/classes/array_access_009.phpt delete mode 100755 tests/classes/array_access_010.phpt delete mode 100755 tests/classes/array_access_011.phpt delete mode 100755 tests/classes/array_access_012.phpt delete mode 100755 tests/classes/array_access_013.phpt delete mode 100644 tests/classes/assign_op_property_001.phpt delete mode 100755 tests/classes/autoload_001.phpt delete mode 100755 tests/classes/autoload_002.phpt delete mode 100755 tests/classes/autoload_003.phpt delete mode 100755 tests/classes/autoload_004.phpt delete mode 100755 tests/classes/autoload_005.phpt delete mode 100755 tests/classes/autoload_006.phpt delete mode 100755 tests/classes/autoload_derived.p5c delete mode 100755 tests/classes/autoload_implements.p5c delete mode 100755 tests/classes/autoload_interface.p5c delete mode 100755 tests/classes/autoload_root.p5c delete mode 100644 tests/classes/bug23951.phpt delete mode 100644 tests/classes/bug24399.phpt delete mode 100644 tests/classes/bug24445.phpt delete mode 100644 tests/classes/bug26737.phpt delete mode 100644 tests/classes/bug27468.phpt delete mode 100644 tests/classes/bug27504.phpt delete mode 100644 tests/classes/bug29446.phpt delete mode 100755 tests/classes/class_abstract.phpt delete mode 100644 tests/classes/class_example.phpt delete mode 100755 tests/classes/class_final.phpt delete mode 100755 tests/classes/class_stdclass.phpt delete mode 100755 tests/classes/clone_001.phpt delete mode 100755 tests/classes/clone_002.phpt delete mode 100755 tests/classes/clone_003.phpt delete mode 100755 tests/classes/clone_004.phpt delete mode 100755 tests/classes/clone_005.phpt delete mode 100755 tests/classes/clone_006.phpt delete mode 100644 tests/classes/constants_scope_001.phpt delete mode 100644 tests/classes/ctor_dtor.phpt delete mode 100644 tests/classes/ctor_dtor_inheritance.phpt delete mode 100755 tests/classes/ctor_failure.phpt delete mode 100755 tests/classes/ctor_in_interface_01.phpt delete mode 100755 tests/classes/ctor_in_interface_02.phpt delete mode 100755 tests/classes/ctor_in_interface_03.phpt delete mode 100755 tests/classes/ctor_in_interface_04.phpt delete mode 100644 tests/classes/ctor_name_clash.phpt delete mode 100755 tests/classes/ctor_visibility.phpt delete mode 100644 tests/classes/dereferencing_001.phpt delete mode 100755 tests/classes/destructor_and_echo.phpt delete mode 100755 tests/classes/destructor_and_exceptions.phpt delete mode 100755 tests/classes/destructor_and_globals.phpt delete mode 100755 tests/classes/destructor_and_references.phpt delete mode 100755 tests/classes/destructor_inheritance.phpt delete mode 100755 tests/classes/destructor_visibility_001.phpt delete mode 100755 tests/classes/destructor_visibility_002.phpt delete mode 100755 tests/classes/destructor_visibility_003.phpt delete mode 100644 tests/classes/factory_001.phpt delete mode 100755 tests/classes/factory_and_singleton_001.phpt delete mode 100755 tests/classes/factory_and_singleton_002.phpt delete mode 100755 tests/classes/factory_and_singleton_003.phpt delete mode 100755 tests/classes/factory_and_singleton_004.phpt delete mode 100755 tests/classes/factory_and_singleton_005.phpt delete mode 100755 tests/classes/factory_and_singleton_006.phpt delete mode 100755 tests/classes/factory_and_singleton_007.phpt delete mode 100755 tests/classes/factory_and_singleton_008.phpt delete mode 100755 tests/classes/factory_and_singleton_009.phpt delete mode 100755 tests/classes/factory_and_singleton_010.phpt delete mode 100644 tests/classes/final.phpt delete mode 100644 tests/classes/final_abstract.phpt delete mode 100755 tests/classes/final_ctor1.phpt delete mode 100755 tests/classes/final_ctor2.phpt delete mode 100644 tests/classes/final_redeclare.phpt delete mode 100644 tests/classes/incdec_property_001.phpt delete mode 100644 tests/classes/incdec_property_002.phpt delete mode 100644 tests/classes/incdec_property_003.phpt delete mode 100644 tests/classes/incdec_property_004.phpt delete mode 100644 tests/classes/inheritance.phpt delete mode 100755 tests/classes/inheritance_002.phpt delete mode 100755 tests/classes/inheritance_003.phpt delete mode 100755 tests/classes/inheritance_004.phpt delete mode 100755 tests/classes/interface_and_extends.phpt delete mode 100644 tests/classes/interface_class.phpt delete mode 100644 tests/classes/interface_doubled.phpt delete mode 100644 tests/classes/interface_implemented.phpt delete mode 100644 tests/classes/interface_instantiate.phpt delete mode 100644 tests/classes/interface_member.phpt delete mode 100644 tests/classes/interface_method.phpt delete mode 100644 tests/classes/interface_method_final.phpt delete mode 100644 tests/classes/interface_method_private.phpt delete mode 100644 tests/classes/interface_must_be_implemented.phpt delete mode 100755 tests/classes/interface_optional_arg.phpt delete mode 100644 tests/classes/interfaces_001.phpt delete mode 100644 tests/classes/interfaces_002.phpt delete mode 100755 tests/classes/interfaces_003.phpt delete mode 100755 tests/classes/iterators_001.phpt delete mode 100755 tests/classes/iterators_002.phpt delete mode 100755 tests/classes/iterators_003.phpt delete mode 100755 tests/classes/iterators_004.phpt delete mode 100755 tests/classes/iterators_005.phpt delete mode 100644 tests/classes/iterators_006.phpt delete mode 100755 tests/classes/iterators_007.phpt delete mode 100644 tests/classes/object_reference_001.phpt delete mode 100644 tests/classes/private_001.phpt delete mode 100644 tests/classes/private_002.phpt delete mode 100644 tests/classes/private_003.phpt delete mode 100644 tests/classes/private_003b.phpt delete mode 100644 tests/classes/private_004.phpt delete mode 100644 tests/classes/private_004b.phpt delete mode 100644 tests/classes/private_005.phpt delete mode 100644 tests/classes/private_005b.phpt delete mode 100644 tests/classes/private_006.phpt delete mode 100644 tests/classes/private_006b.phpt delete mode 100644 tests/classes/private_007.phpt delete mode 100644 tests/classes/private_007b.phpt delete mode 100755 tests/classes/private_members.phpt delete mode 100755 tests/classes/private_redeclare.phpt delete mode 100644 tests/classes/protected_001.phpt delete mode 100644 tests/classes/protected_001b.phpt delete mode 100644 tests/classes/protected_002.phpt delete mode 100755 tests/classes/serialize_001.phpt delete mode 100644 tests/classes/singleton_001.phpt delete mode 100644 tests/classes/static_mix_1.phpt delete mode 100644 tests/classes/static_mix_2.phpt delete mode 100755 tests/classes/static_properties_001.phpt delete mode 100755 tests/classes/static_this.phpt delete mode 100755 tests/classes/this.phpt delete mode 100755 tests/classes/tostring_001.phpt delete mode 100755 tests/classes/tostring_002.phpt delete mode 100755 tests/classes/tostring_003.phpt delete mode 100644 tests/classes/type_hinting_001.phpt delete mode 100755 tests/classes/type_hinting_002.phpt delete mode 100755 tests/classes/type_hinting_003.phpt delete mode 100644 tests/classes/visibility_000a.phpt delete mode 100644 tests/classes/visibility_000b.phpt delete mode 100644 tests/classes/visibility_000c.phpt delete mode 100644 tests/classes/visibility_001a.phpt delete mode 100644 tests/classes/visibility_001b.phpt delete mode 100644 tests/classes/visibility_001c.phpt delete mode 100644 tests/classes/visibility_002a.phpt delete mode 100644 tests/classes/visibility_002b.phpt delete mode 100644 tests/classes/visibility_002c.phpt delete mode 100644 tests/classes/visibility_003a.phpt delete mode 100644 tests/classes/visibility_003b.phpt delete mode 100644 tests/classes/visibility_003c.phpt delete mode 100644 tests/classes/visibility_004a.phpt delete mode 100644 tests/classes/visibility_004b.phpt delete mode 100644 tests/classes/visibility_004c.phpt delete mode 100755 tests/classes/visibility_005.phpt delete mode 100644 tests/foo delete mode 100644 tests/foo2 delete mode 100644 tests/foo3 delete mode 100644 tests/foo4 delete mode 100644 tests/func/001.phpt delete mode 100644 tests/func/002.phpt delete mode 100644 tests/func/003.phpt delete mode 100644 tests/func/004.phpt delete mode 100644 tests/func/005.phpt delete mode 100644 tests/func/005a.phpt delete mode 100644 tests/func/006.phpt delete mode 100644 tests/func/007.phpt delete mode 100644 tests/func/008.phpt delete mode 100644 tests/func/009.phpt delete mode 100644 tests/lang/001.phpt delete mode 100644 tests/lang/002.phpt delete mode 100644 tests/lang/003.phpt delete mode 100644 tests/lang/004.phpt delete mode 100644 tests/lang/005.phpt delete mode 100644 tests/lang/006.phpt delete mode 100644 tests/lang/007.phpt delete mode 100644 tests/lang/008.phpt delete mode 100644 tests/lang/009.phpt delete mode 100644 tests/lang/010.phpt delete mode 100644 tests/lang/011.phpt delete mode 100644 tests/lang/012.phpt delete mode 100644 tests/lang/013.phpt delete mode 100644 tests/lang/014.phpt delete mode 100755 tests/lang/015.inc delete mode 100644 tests/lang/015.phpt delete mode 100755 tests/lang/016.inc delete mode 100644 tests/lang/016.phpt delete mode 100644 tests/lang/017.phpt delete mode 100644 tests/lang/018.phpt delete mode 100644 tests/lang/019.phpt delete mode 100644 tests/lang/020.phpt delete mode 100644 tests/lang/021.phpt delete mode 100644 tests/lang/022.phpt delete mode 100755 tests/lang/023-1.inc delete mode 100755 tests/lang/023-2.inc delete mode 100644 tests/lang/023.phpt delete mode 100644 tests/lang/024.phpt delete mode 100644 tests/lang/025.phpt delete mode 100644 tests/lang/026.phpt delete mode 100644 tests/lang/027.phpt delete mode 100644 tests/lang/028.phpt delete mode 100644 tests/lang/030.phpt delete mode 100644 tests/lang/031.phpt delete mode 100644 tests/lang/032.phpt delete mode 100644 tests/lang/033.phpt delete mode 100644 tests/lang/034.phpt delete mode 100644 tests/lang/035.phpt delete mode 100755 tests/lang/036.phpt delete mode 100755 tests/lang/037.phpt delete mode 100755 tests/lang/038.phpt delete mode 100755 tests/lang/039.phpt delete mode 100755 tests/lang/040.phpt delete mode 100644 tests/lang/bison1.phpt delete mode 100644 tests/lang/bug17115.phpt delete mode 100644 tests/lang/bug18872.phpt delete mode 100644 tests/lang/bug19566.phpt delete mode 100644 tests/lang/bug19943.phpt delete mode 100644 tests/lang/bug20175.phpt delete mode 100644 tests/lang/bug21094.phpt delete mode 100644 tests/lang/bug21600.phpt delete mode 100644 tests/lang/bug21669.phpt delete mode 100644 tests/lang/bug21820.phpt delete mode 100644 tests/lang/bug21849.phpt delete mode 100644 tests/lang/bug21961.phpt delete mode 100644 tests/lang/bug22231.phpt delete mode 100644 tests/lang/bug22510.phpt delete mode 100644 tests/lang/bug22592.phpt delete mode 100644 tests/lang/bug22690.phpt delete mode 100644 tests/lang/bug23279.phpt delete mode 100644 tests/lang/bug23384.phpt delete mode 100644 tests/lang/bug23489.phpt delete mode 100755 tests/lang/bug23524.phpt delete mode 100644 tests/lang/bug23584.phpt delete mode 100644 tests/lang/bug23624.phpt delete mode 100644 tests/lang/bug23922.phpt delete mode 100644 tests/lang/bug24054.phpt delete mode 100644 tests/lang/bug24396.phpt delete mode 100644 tests/lang/bug24403.phpt delete mode 100644 tests/lang/bug24436.phpt delete mode 100755 tests/lang/bug24499.phpt delete mode 100644 tests/lang/bug24573.phpt delete mode 100755 tests/lang/bug24640.phpt delete mode 100755 tests/lang/bug24652.phpt delete mode 100644 tests/lang/bug24658.phpt delete mode 100644 tests/lang/bug24783.phpt delete mode 100755 tests/lang/bug24908.phpt delete mode 100644 tests/lang/bug24926.phpt delete mode 100644 tests/lang/bug24951.phpt delete mode 100755 tests/lang/bug25145.phpt delete mode 100755 tests/lang/bug25547.phpt delete mode 100755 tests/lang/bug25652.phpt delete mode 100755 tests/lang/bug25922.phpt delete mode 100644 tests/lang/bug26182.phpt delete mode 100644 tests/lang/bug26696.phpt delete mode 100644 tests/lang/bug26866.phpt delete mode 100644 tests/lang/bug26869.phpt delete mode 100644 tests/lang/bug27354.phpt delete mode 100755 tests/lang/bug27439.phpt delete mode 100644 tests/lang/bug27443.phpt delete mode 100644 tests/lang/bug27535.phpt delete mode 100644 tests/lang/bug28213.phpt delete mode 100644 tests/lang/bug28800.phpt delete mode 100755 tests/lang/bug29566.phpt delete mode 100755 tests/lang/bug29893.phpt delete mode 100755 tests/lang/bug29944.phpt delete mode 100644 tests/lang/bug30578.phpt delete mode 100644 tests/lang/bug30638.phpt delete mode 100644 tests/lang/bug30726.phpt delete mode 100644 tests/lang/bug30862.phpt delete mode 100644 tests/lang/bug32828.phpt delete mode 100644 tests/lang/bug32924.phpt delete mode 100755 tests/lang/bug35176.phpt delete mode 100755 tests/lang/bug35382.phpt delete mode 100755 tests/lang/bug38579.inc delete mode 100755 tests/lang/bug38579.phpt delete mode 100644 tests/lang/bug7515.phpt delete mode 100644 tests/lang/catchable_error_001.phpt delete mode 100644 tests/lang/catchable_error_002.phpt delete mode 100644 tests/lang/each_binary_safety.phpt delete mode 100644 tests/lang/error_2_exception_001.phpt delete mode 100755 tests/lang/foreach_with_object_001.phpt delete mode 100644 tests/lang/foreach_with_references_001.phpt delete mode 100644 tests/lang/inc.inc delete mode 100644 tests/lang/type_hints_001.phpt delete mode 100644 tests/lang/type_hints_002.phpt delete mode 100644 tests/lang/type_hints_003.phpt delete mode 100644 tests/odbc-display.php delete mode 100644 tests/odbc-t1.php delete mode 100644 tests/odbc-t2.php delete mode 100644 tests/odbc-t3.php delete mode 100644 tests/odbc-t4.php delete mode 100644 tests/odbc-t5.php delete mode 100644 tests/output/ob_001.phpt delete mode 100644 tests/output/ob_002.phpt delete mode 100644 tests/output/ob_003.phpt delete mode 100644 tests/output/ob_004.phpt delete mode 100644 tests/output/ob_005.phpt delete mode 100644 tests/output/ob_006.phpt delete mode 100644 tests/output/ob_007.phpt delete mode 100644 tests/output/ob_008.phpt delete mode 100644 tests/output/ob_009.phpt delete mode 100644 tests/output/ob_010.phpt delete mode 100644 tests/output/ob_011.phpt delete mode 100644 tests/output/ob_012.phpt delete mode 100644 tests/output/ob_013.phpt delete mode 100644 tests/output/ob_014.phpt delete mode 100644 tests/output/ob_015.phpt delete mode 100644 tests/output/ob_016.phpt delete mode 100644 tests/output/ob_017.phpt delete mode 100644 tests/output/ob_018.phpt delete mode 100644 tests/output/ob_019.phpt delete mode 100644 tests/output/ob_020.phpt delete mode 100644 tests/quicktester.inc delete mode 100644 tests/recurse delete mode 100644 tests/run-test/test001.phpt delete mode 100644 tests/run-test/test002.phpt delete mode 100644 tests/run-test/test003.phpt delete mode 100644 tests/run-test/test004.phpt delete mode 100644 tests/run-test/test005.phpt delete mode 100644 tests/run-test/test006.phpt delete mode 100644 tests/run-test/test007.phpt delete mode 100644 tests/run-test/test008.phpt delete mode 100644 tests/run-test/test008a.phpt delete mode 100644 tests/run-test/test009.phpt delete mode 100644 tests/run-test/test010.phpt delete mode 100644 tests/run.html delete mode 100644 tests/run.php delete mode 100644 tests/scan_cases delete mode 100644 tests/strings/001.phpt delete mode 100644 tests/strings/002.phpt delete mode 100644 tests/strings/004.phpt delete mode 100755 tests/strings/bug22592.phpt delete mode 100644 tests/strings/bug26703.phpt delete mode 100644 tests/test.pl delete mode 100644 tests/test_class_inheritance delete mode 100644 tests/testarray delete mode 100644 tests/testarray.pl delete mode 100644 tests/testarray2 delete mode 100644 tests/testarray2.pl delete mode 100644 tests/testclassfunc delete mode 100644 tests/testcom delete mode 100644 tests/testcpdf delete mode 100644 tests/testcpdfclock delete mode 100644 tests/testdom delete mode 100644 tests/testfe delete mode 100644 tests/testfunc delete mode 100644 tests/testfunc.pl delete mode 100644 tests/testfunc2 delete mode 100644 tests/testfunc2.pl delete mode 100644 tests/testfuncref delete mode 100644 tests/testhyperwave delete mode 100644 tests/testinclude delete mode 100644 tests/testobj delete mode 100644 tests/testpfpro.php delete mode 100644 tests/tests.dsp delete mode 100644 tests/tests.mak delete mode 100644 tests/testscanf.php delete mode 100644 tests/testswf delete mode 100644 tests/unicode/autodetect-SCSU.inc delete mode 100755 tests/unicode/autodetect-SCSU.phpt delete mode 100644 tests/unicode/autodetect-UTF16BE.inc delete mode 100755 tests/unicode/autodetect-UTF16BE.phpt delete mode 100644 tests/unicode/autodetect-UTF16LE.inc delete mode 100755 tests/unicode/autodetect-UTF16LE.phpt delete mode 100755 tests/unicode/autodetect-UTF32BE.inc delete mode 100755 tests/unicode/autodetect-UTF32BE.phpt delete mode 100755 tests/unicode/autodetect-UTF32LE.inc delete mode 100755 tests/unicode/autodetect-UTF32LE.phpt delete mode 100644 tests/unicode/autodetect-UTF7.inc delete mode 100755 tests/unicode/autodetect-UTF7.phpt delete mode 100755 tests/unicode/autodetect-UTF8.inc delete mode 100755 tests/unicode/autodetect-UTF8.phpt delete mode 100644 tests/unicode/enc-HZ.inc delete mode 100755 tests/unicode/enc-HZ.phpt delete mode 100644 tests/unicode/enc-ISO-2022-KR.inc delete mode 100755 tests/unicode/enc-ISO-2022-KR.phpt delete mode 100644 tests/unicode/enc-JIS.inc delete mode 100755 tests/unicode/enc-JIS.phpt delete mode 100644 tests/unicode/enc-SJIS.inc delete mode 100755 tests/unicode/enc-SJIS.phpt delete mode 100755 tests/unicode/encrt-HZ.phpt delete mode 100755 tests/unicode/encrt-ISO-2022-KR.phpt delete mode 100755 tests/unicode/encrt-JIS.phpt delete mode 100755 tests/unicode/encrt-SJIS.phpt delete mode 100644 tests/unicode/func/strpos.phpt delete mode 100644 tests/unicode/func/strstr.phpt delete mode 100755 tests/unicode/normalize_001.phpt delete mode 100755 tests/unicode/normalize_002.phpt delete mode 100755 tests/unicode/normalize_003.phpt delete mode 100755 tests/unicode/normalize_004.phpt delete mode 100644 unicode-gotchas.txt delete mode 100644 unicode-issues.txt delete mode 100644 unicode-progress.txt delete mode 100644 unicode-todo.txt delete mode 100755 win32/EngineSelect.bat delete mode 100644 win32/EngineSelect.dsp delete mode 100644 win32/build/Makefile delete mode 100644 win32/build/buildconf.js delete mode 100644 win32/build/config.w32 delete mode 100644 win32/build/config.w32.h.in delete mode 100644 win32/build/configure.tail delete mode 100644 win32/build/confutils.js delete mode 100644 win32/build/cvsclean.js delete mode 100644 win32/build/deplister.c delete mode 100644 win32/build/mkdist.php delete mode 100644 win32/build/php.ico delete mode 100755 win32/build/registersyslog.php delete mode 100644 win32/build/template.rc delete mode 100755 win32/build/wsyslog.mc delete mode 100644 win32/builddef.bat delete mode 100644 win32/crypt_win32.c delete mode 100644 win32/crypt_win32.h delete mode 100644 win32/flock.c delete mode 100644 win32/flock.h delete mode 100644 win32/glob.c delete mode 100644 win32/glob.h delete mode 100755 win32/globals.c delete mode 100644 win32/grp.h delete mode 100644 win32/install.txt delete mode 100644 win32/md5crypt.c delete mode 100644 win32/md5crypt.h delete mode 100644 win32/param.h delete mode 100644 win32/php5.dsp delete mode 100644 win32/php5.dsw delete mode 100644 win32/php5dll.dsp delete mode 100644 win32/php5dllts.dsp delete mode 100644 win32/php5dllts.rc delete mode 100644 win32/php5dllts.rc2 delete mode 100644 win32/php5ts.dsp delete mode 100644 win32/php5ts.dsw delete mode 100644 win32/php5ts.rc delete mode 100644 win32/php5ts.rc2 delete mode 100644 win32/php5ts_cli.dsp delete mode 100644 win32/php5ts_cli.rc delete mode 100644 win32/php5ts_cli.rc2 delete mode 100644 win32/php_modules.dsw delete mode 100644 win32/php_registry.h delete mode 100755 win32/php_win32_globals.h delete mode 100644 win32/pws-php5cgi.reg delete mode 100644 win32/pws-php5isapi.reg delete mode 100644 win32/readdir.c delete mode 100644 win32/readdir.h delete mode 100644 win32/registry.c delete mode 100644 win32/resource.h delete mode 100644 win32/select.c delete mode 100644 win32/select.h delete mode 100644 win32/sendmail.c delete mode 100644 win32/sendmail.h delete mode 100644 win32/signal.h delete mode 100644 win32/syslog.h delete mode 100644 win32/syslog.reg delete mode 100644 win32/testsuite.dsp delete mode 100644 win32/time.c delete mode 100644 win32/time.h delete mode 100644 win32/unistd.h delete mode 100644 win32/wfile.c delete mode 100644 win32/wfile.h delete mode 100644 win32/winutil.c delete mode 100644 win32/winutil.h delete mode 100644 win32/wsyslog.c diff --git a/.gdbinit b/.gdbinit deleted file mode 100644 index 5b11d4c26daa4..0000000000000 --- a/.gdbinit +++ /dev/null @@ -1,462 +0,0 @@ -define ____executor_globals - if basic_functions_module.zts - set $tsrm_ls = ts_resource_ex(0, 0) - set $eg = ((zend_executor_globals) (*((void ***) $tsrm_ls))[executor_globals_id-1]) - else - set $eg = executor_globals - end -end - -document ____executor_globals - portable way of accessing executor_globals - ZTS detection is automatically based on ext/standard module struct -end - -define dump_bt - set $t = $arg0 - while $t - printf "[0x%08x] ", $t - if $t->function_state.function->common.function_name - printf "%s() ", $t->function_state.function->common.function_name - else - printf "??? " - end - if $t->op_array != 0 - printf "%s:%d ", $t->op_array->filename, $t->opline->lineno - end - set $t = $t->prev_execute_data - printf "\n" - end -end - -document dump_bt - dumps the current execution stack. usage: dump_bt executor_globals.current_execute_data -end - -define printztype - ____printz_type $arg0 - printf "\n" -end - -document printztype - prints the type name of a zval type -end - -define ____printz_type - set $type = $arg0 - if $type == 0 - printf "NULL" - end - if $type == 1 - printf "long" - end - if $type == 2 - printf "double" - end - if $type == 3 - printf "bool" - end - if $type == 4 - printf "array" - end - if $type == 5 - printf "object" - end - if $type == 6 - printf "string" - end - if $type == 7 - printf "resource" - end - if $type == 8 - printf "constant" - end - if $type == 9 - printf "const_array" - end - if $type == 10 - printf "unicode string" - end - if $type > 10 - printf "unknown type %d", $type - end -end - -define printzv - set $ind = 1 - ____printzv $arg0 0 -end - -document printzv - prints zval contents -end - -define ____printzv_contents - set $zvalue = $arg0 - set $type = $zvalue->type - - printf "(refcount=%d", $zvalue->refcount - if $zvalue->is_ref - printf ",is_ref" - end - printf ") " - if $type == 0 - printf "NULL" - end - ____printz_type $type - if $type == 1 - printf ": %ld", $zvalue->value.lval - end - if $type == 2 - printf ": %lf", $zvalue->value.dval - end - if $type == 3 - if $zvalue->value.lval - printf ": true" - else - printf ": false" - end - end - if $type == 4 - printf "(%d): ", $zvalue->value.ht->nNumOfElements - if ! $arg1 - printf "{\n" - set $ind = $ind + 1 - ____print_ht $zvalue->value.ht 0 - set $ind = $ind - 1 - set $i = $ind - while $i > 0 - printf " " - set $i = $i - 1 - end - printf "}" - end - set $type = 0 - end - if $type == 5 - ____executor_globals - set $handle = $zvalue->value.obj.handle - set $handlers = $zvalue->value.obj.handlers - if basic_functions_module.zts - set $zobj = zend_objects_get_address($zvalue, $tsrm_ls) - else - set $zobj = zend_objects_get_address($zvalue) - end - if $handlers->get_class_entry == &zend_std_object_get_class - set $cname = $zobj->ce.name.s - else - set $cname = "Unknown" - end - printf "(%s) #%d", $cname, $handle - if ! $arg1 - if $handlers->get_properties == &zend_std_get_properties - set $ht = $zobj->properties - if $ht - printf "(%d): ", $ht->nNumOfElements - printf "{\n" - set $ind = $ind + 1 - ____print_ht $ht 1 - set $ind = $ind - 1 - set $i = $ind - while $i > 0 - printf " " - set $i = $i - 1 - end - printf "}" - else - echo "no properties found" - end - end - end - set $type = 0 - end - if $type == 6 - printf "(%d): \"%s\"", $zvalue->value.str.len, $zvalue->value.str.val - end - if $type == 7 - printf ": #%d", $zvalue->value.lval - end - if $type == 8 - end - if $type == 9 - end - if $type == 10 - printf "(%d): [%p]", $zvalue->value.str.len, $zvalue->value.str.val - end - if $type > 10 - end - printf "\n" -end - -define ____printzv - ____executor_globals - set $zvalue = $arg0 - - printf "[0x%08x] ", $zvalue - - if $zvalue == $eg.uninitialized_zval_ptr - printf "*uninitialized* " - end - - set $zcontents = (zval*) $zvalue - if $arg1 - ____printzv_contents $zcontents $arg1 - else - ____printzv_contents $zcontents 0 - end -end - -define ____print_const_table - set $ht = $arg0 - set $p = $ht->pListHead - - while $p != 0 - set $const = (zend_constant *) $p->pData - - set $i = $ind - while $i > 0 - printf " " - set $i = $i - 1 - end - - if $p->nKeyLength > 0 - printf "\"%s\" => ", $p->key.arKey.s - else - printf "%d => ", $p->h - end - - ____printzv_contents &$const->value 0 - set $p = $p->pListNext - end -end - -define print_const_table - set $ind = 1 - printf "[0x%08x] {\n", $arg0 - ____print_const_table $arg0 - printf "}\n" -end - -define ____print_ht - set $ht = $arg0 - set $obj = $arg1 - set $p = $ht->pListHead - - while $p != 0 - set $zval = *(zval **)$p->pData - - set $i = $ind - while $i > 0 - printf " " - set $i = $i - 1 - end - - if $p->nKeyLength > 0 - if $obj && $p->key.arKey.s[0] == 0 - if $p->key.arKey.s[1] == '*' - printf "\"protected %s\" => ", $p->key.arKey.s+3 - else - set $n = 1 - while $n < $p->nKeyLength && $p->key.arKey.s[$n] != 0 - set $n = $n + 1 - end - printf "\"private %s::%s\" => ", $p->key.arKey.s+1, $p->key.arKey.s+$n+1 - end - else - printf "\"%s\" => ", $p->key.arKey.s - end - else - printf "%d => ", $p->h - end - - ____printzv $zval 1 - set $p = $p->pListNext - end -end - -define print_ht - set $ind = 1 - printf "[0x%08x] {\n", $arg0 - ____print_ht $arg0 0 - printf "}\n" -end - -document print_ht - dumps elements of HashTable made of zval -end - -define ____print_ft - set $ht = $arg0 - set $p = $ht->pListHead - - while $p != 0 - set $func = (zend_function*)$p->pData - - set $i = $ind - while $i > 0 - printf " " - set $i = $i - 1 - end - - if $p->nKeyLength > 0 - printf "\"%s\" => ", $p->key.arKey.s - else - printf "%d => ", $p->h - end - - printf "\"%s\"\n", $func->common.function_name - set $p = $p->pListNext - end -end - -define print_ft - set $ind = 1 - printf "[0x%08x] {\n", $arg0 - ____print_ft $arg0 - printf "}\n" -end - -document print_ft - dumps a function table (HashTable) -end - -define printzn - ____executor_globals - set $ind = 0 - set $znode = $arg0 - if $znode->op_type == 1 - set $optype = "IS_CONST" - end - if $znode->op_type == 2 - set $optype = "IS_TMP_VAR" - end - if $znode->op_type == 4 - set $optype = "IS_VAR" - end - if $znode->op_type == 8 - set $optype = "IS_UNUSED" - end - - printf "[0x%08x] %s", $znode, $optype - - if $znode->op_type == 1 - printf ": " - ____printzv &$znode->u.constant 0 - end - if $znode->op_type == 2 - printf ": " - set $tvar = (union _temp_variable *)((char *)$eg.current_execute_data->Ts + $znode->u.var) - ____printzv ((union _temp_variable *)$tvar)->tmp_var 0 - end - if $znode->op_type == 4 - printf ": " - set $tvar = (union _temp_variable *)((char *)$eg.current_execute_data->Ts + $znode->u.var) - ____printzv *$tvar->var.ptr_ptr 0 - end - if $znode->op_type == 8 - printf "\n" - end -end - -document printzn - print type and content of znode. - usage: printzn &opline->op1 -end - -define printzops - printf "op1 => " - printzn &execute_data->opline.op1 - printf "op2 => " - printzn &execute_data->opline.op2 - printf "result => " - printzn &execute_data->opline.result -end - -document printzops - dump operands of the current opline -end - -define zbacktrace - ____executor_globals - dump_bt $eg.current_execute_data -end - -document zbacktrace - prints backtrace. - This command is almost a short cut for - > (gdb) ____executor_globals - > (gdb) dump_bt $eg.current_execute_data -end - -define zmemcheck - set $p = alloc_globals.head - set $stat = "?" - set $total_size = 0 - if $arg0 != 0 - set $not_found = 1 - else - set $not_found = 0 - end - printf " block size status file:line\n" - printf "-------------------------------------------------------------------------------\n" - while $p - set $aptr = $p + sizeof(struct _zend_mem_header) + sizeof(align_test) - if $arg0 == 0 || (void *)$aptr == (void *)$arg0 - if $p->magic == 0x7312f8dc - set $stat = "OK" - end - if $p->magic == 0x99954317 - set $stat = "FREED" - end - if $p->magic == 0xfb8277dc - set $stat = "CACHED" - end - set $filename = strrchr($p->filename, '/') - if !$filename - set $filename = $p->filename - else - set $filename = $filename + 1 - end - printf " 0x%08x ", $aptr - if $p->size == sizeof(struct _zval_struct) && ((struct _zval_struct *)$aptr)->type >= 0 && ((struct _zval_struct *)$aptr)->type < 10 - printf "ZVAL?(%-2d) ", $p->size - else - printf "%-9d ", $p->size - end - set $total_size = $total_size + $p->size - printf "%-06s %s:%d", $stat, $filename, $p->lineno - if $p->orig_filename - set $orig_filename = strrchr($p->orig_filename, '/') - if !$orig_filename - set $orig_filename = $p->orig_filename - else - set $orig_filename = $orig_filename + 1 - end - printf " <= %s:%d\n", $orig_filename, $p->orig_lineno - else - printf "\n" - end - if $arg0 != 0 - set $p = 0 - set $not_found = 0 - else - set $p = $p->pNext - end - else - set $p = $p->pNext - end - end - if $not_found - printf "no such block that begins at 0x%08x.\n", $aptr - end - if $arg0 == 0 - printf "-------------------------------------------------------------------------------\n" - printf " total: %d bytes\n", $total_size - end -end - -document zmemcheck - show status of a memory block. - usage: zmemcheck [ptr]. - if ptr is 0, all blocks will be listed. -end diff --git a/CODING_STANDARDS b/CODING_STANDARDS deleted file mode 100644 index b36c1fc3b202f..0000000000000 --- a/CODING_STANDARDS +++ /dev/null @@ -1,277 +0,0 @@ -PHP Coding Standards -==================== - - -This file lists several standards that any programmer, adding or changing -code in PHP, should follow. Since this file was added at a very late -stage of the development of PHP v3.0, the code base does not (yet) fully -follow it, but it's going in that general direction. Since we are now -well into the version 4 releases, many sections have been recoded to use -these rules. - - -Code Implementation -------------------- - -[0] Document your code in source files and the manual. [tm] - -[1] Functions that are given pointers to resources should not free them - -For instance, function int mail(char *to, char *from) should NOT free -to and/or from. -Exceptions: - - - The function's designated behavior is freeing that resource. E.g. efree() - - The function is given a boolean argument, that controls whether or not - the function may free its arguments (if true - the function must free its - arguments, if false - it must not) - - Low-level parser routines, that are tightly integrated with the token - cache and the bison code for minimum memory copying overhead. - -[2] Functions that are tightly integrated with other functions within the - same module, and rely on each other non-trivial behavior, should be - documented as such and declared 'static'. They should be avoided if - possible. - -[3] Use definitions and macros whenever possible, so that constants have - meaningful names and can be easily manipulated. The only exceptions - to this rule are 0 and 1, when used as false and true (respectively). - Any other use of a numeric constant to specify different behavior - or actions should be done through a #define. - -[4] When writing functions that deal with strings, be sure to remember - that PHP holds the length property of each string, and that it - shouldn't be calculated with strlen(). Write your functions in a such - a way so that they'll take advantage of the length property, both - for efficiency and in order for them to be binary-safe. - Functions that change strings and obtain their new lengths while - doing so, should return that new length, so it doesn't have to be - recalculated with strlen() (e.g. php_addslashes()) - -[5] NEVER USE strncat(). If you're absolutely sure you know what you're doing, - check its man page again, and only then, consider using it, and even then, - try avoiding it. - -[6] Use PHP_* macros in the PHP source, and ZEND_* macros in the Zend - part of the source. Although the PHP_* macro's are mostly aliased to the - ZEND_* macros it gives a better understanding on what kind of macro you're - calling. - -[7] When commenting out code using a #if statement, do NOT use 0 only. Instead - use "_0". For example, #if FOO_0, where FOO is your - cvs user foo. This allows easier tracking of why code was commented out, - especially in bundled libraries. - -[8] Do not define functions that are not available. For instance, if a - library is missing a function, do not define the PHP version of the - function, and do not raise a run-time error about the function not - existing. End users should use function_exists() to test for the - existence of a function - -[9] Prefer emalloc(), efree(), estrdup(), etc. to their standard C library - counterparts. These functions implement an internal "safety-net" - mechanism that ensures the deallocation of any unfreed memory at the - end of a request. They also provide useful allocation and overflow - information while running in debug mode. - - In almost all cases, memory returned to the engine must be allocated - using emalloc(). - - The use of malloc() should be limited to cases where a third-party - library may need to control or free the memory, or when the memory in - question needs to survive between multiple requests. - -Naming Conventions ------------------- - -[1] Function names for user-level functions should be enclosed with in - the PHP_FUNCTION() macro. They should be in lowercase, with words - underscore delimited, with care taken to minimize the letter count. - Abbreviations should not be used when they greatly decrease the - readability of the function name itself. - - Good: - 'mcrypt_enc_self_test' - 'mysql_list_fields' - - Ok: - 'mcrypt_module_get_algo_supported_key_sizes' - (could be 'mcrypt_mod_get_algo_sup_key_sizes'?) - 'get_html_translation_table' - (could be 'html_get_trans_table'?) - - Bad: - 'hw_GetObjectByQueryCollObj' - 'pg_setclientencoding' - 'jf_n_s_i' - -[2] If they are part of a "parent set" of functions, that parent should - be included in the user function name, and should be clearly related - to the parent program or function family. This should be in the form - of parent_*. - - A family of 'foo' functions, for example: - Good: - 'foo_select_bar' - 'foo_insert_baz' - 'foo_delete_baz' - - Bad: - 'fooselect_bar' - 'fooinsertbaz' - 'delete_foo_baz' - -[3] Function names used by user functions should be prefixed - with "_php_", and followed by a word or an underscore-delimited list of - words, in lowercase letters, that describes the function. If applicable, - they should be declared 'static'. - -[4] Variable names must be meaningful. One letter variable names must be - avoided, except for places where the variable has no real meaning or - a trivial meaning (e.g. for (i=0; i<100; i++) ...). - -[5] Variable names should be in lowercase. Use underscores to separate - between words. - -[6] Method names follow the 'studlyCaps' (also referred to as 'bumpy case' - or 'camel caps') naming convention, with care taken to minimize the - letter count. The initial letter of the name is lowercase, and each - letter that starts a new 'word' is capitalized. - - Good: - 'connect()' - 'getData()' - 'buildSomeWidget()' - - Bad: - 'get_Data()' - 'buildsomewidget' - 'getI()' - -[7] Classes should be given descriptive names. Avoid using abbreviations where - possible. Each word in the class name should start with a capital letter, - without underscore delimiters (CampelCaps starting with a capital letter). - The class name should be prefixed with the name of the 'parent set' (e.g. - the name of the extension). - - Good: - 'Curl' - 'FooBar' - - Bad: - 'foobar' - 'foo_bar' - -Syntax and indentation ----------------------- - -[1] Never use C++ style comments (i.e. // comment). Always use C-style - comments instead. PHP is written in C, and is aimed at compiling - under any ANSI-C compliant compiler. Even though many compilers - accept C++-style comments in C code, you have to ensure that your - code would compile with other compilers as well. - The only exception to this rule is code that is Win32-specific, - because the Win32 port is MS-Visual C++ specific, and this compiler - is known to accept C++-style comments in C code. - -[2] Use K&R-style. Of course, we can't and don't want to - force anybody to use a style he or she is not used to, but, - at the very least, when you write code that goes into the core - of PHP or one of its standard modules, please maintain the K&R - style. This applies to just about everything, starting with - indentation and comment styles and up to function declaration - syntax. - - (see also http://www.catb.org/~esr/jargon/html/I/indent-style.html) - -[3] Be generous with whitespace and braces. Always prefer: - - if (foo) { - bar; - } - - to: - - if(foo)bar; - - Keep one empty line between the variable declaration section and - the statements in a block, as well as between logical statement - groups in a block. Maintain at least one empty line between - two functions, preferably two. - -[4] When indenting, use the tab character. A tab is expected to represent - four spaces. It is important to maintain consistency in indenture so - that definitions, comments, and control structures line up correctly. - -[5] Preprocessor statements (#if and such) MUST start at column one. To - indent preprocessor directives you should put the # at the beginning - of a line, followed by any number of whitespace. - -Testing -------- - -[1] Extensions should be well tested using *.phpt tests. Read about that - in README.TESTING. - -Documentation and Folding Hooks -------------------------------- - -In order to make sure that the online documentation stays in line with -the code, each user-level function should have its user-level function -prototype before it along with a brief one-line description of what the -function does. It would look like this: - -/* {{{ proto int abs(int number) - Returns the absolute value of the number */ -PHP_FUNCTION(abs) -{ - ... -} -/* }}} */ - -The {{{ symbols are the default folding symbols for the folding mode in -Emacs and vim (set fdm=marker). Folding is very useful when dealing with -large files because you can scroll through the file quickly and just unfold -the function you wish to work on. The }}} at the end of each function marks -the end of the fold, and should be on a separate line. - -The "proto" keyword there is just a helper for the doc/genfuncsummary script -which generates a full function summary. Having this keyword in front of the -function prototypes allows us to put folds elsewhere in the code without -messing up the function summary. - -Optional arguments are written like this: - -/* {{{ proto object imap_header(int stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]]) - Returns a header object with the defined parameters */ - -And yes, please keep the prototype on a single line, even if that line -is massive. - -New and Experimental Functions ------------------------------------ -To reduce the problems normally associated with the first public -implementation of a new set of functions, it has been suggested -that the first implementation include a file labeled 'EXPERIMENTAL' -in the function directory, and that the functions follow the -standard prefixing conventions during their initial implementation. - -The file labelled 'EXPERIMENTAL' should include the following -information: - Any authoring information (known bugs, future directions of the module). - Ongoing status notes which may not be appropriate for CVS comments. - -Aliases & Legacy Documentation ------------------------------------ -You may also have some deprecated aliases with close to duplicate -names, for example, somedb_select_result and somedb_selectresult. For -documentation purposes, these will only be documented by the most -current name, with the aliases listed in the documentation for -the parent function. For ease of reference, user-functions with -completely different names, that alias to the same function (such as -highlight_file and show_source), will be separately documented. The -proto should still be included, describing which function is aliased. - -Backwards compatible functions and names should be maintained as long -as the code can be reasonably be kept as part of the codebase. See -/phpdoc/README for more information on documentation. diff --git a/CREDITS b/CREDITS deleted file mode 100644 index 42549a2773377..0000000000000 --- a/CREDITS +++ /dev/null @@ -1,2 +0,0 @@ -For the list of people who've put work into PHP, please see -http://www.php.net/credits.php diff --git a/ChangeLog b/ChangeLog deleted file mode 100644 index 84cbc4ce82658..0000000000000 --- a/ChangeLog +++ /dev/null @@ -1,39263 +0,0 @@ -2007-03-21 Marcus Boerger - - * (PHP_4_4) - sapi/cli/getopt.c - sapi/cli/getopt.c: - - MFH Fix issue with long form of command line switches - - * sapi/cli/getopt.c: - - Fix issue with long form of command line switches - -2007-03-21 Derick Rethans - - * (PHP_5_2) - ext/date/lib/parse_date.c - ext/date/lib/parse_date.re: - - Revert this patch, as the code was incorrect. - - It was also not committed to HEAD. - -2007-03-21 Ilia Alshanetsky - - * ext/date/tests/bug40861.phpt - ext/date/tests/bug40861.phpt: - - file bug40861.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - NEWS - ext/date/lib/parse_date.c - ext/date/lib/parse_date.re: - - Fixed bug #40861 (Multiple +/- on relative units breaks strtotime()). - -2007-03-20 Marcus Boerger - - * (PHP_5_2) - NEWS - ext/spl/spl_array.c - ext/spl/tests/bug40872.phpt: - - MFH Fix Bug #40872 (inconsistency in offsetSet, offsetExists treatment - of string enclosed integers) - - * ext/spl/spl_array.c - ext/spl/tests/bug40872.phpt - ext/spl/tests/bug40872.phpt: - - Fix Bug #40872 (inconsistency in offsetSet, offsetExists treatment of - string enclosed integers) - - * (PHP_5_2) - ext/mysqli/mysqli.c: - - MFH Optional dependency for SPL must be specified in header - - * ext/mysqli/mysqli.c: - - Optional dependency for SPL must be specified in header - -2007-03-20 Antony Dovgal - - * (PHP_5_2) - NEWS: - BFN - - * (PHP_5_2) - TSRM/tsrm_win32.c: - MFH: fix shmop_open() with IPC_CREAT|IPC_EXCL flags on win32 - - * TSRM/tsrm_win32.c: - fix shmop_open() with IPC_CREAT|IPC_EXCL flags on win32 - -2007-03-20 Dmitry Stogov - - * ext/soap/tests/schema/schema082.phpt - ext/soap/tests/schema/schema082.phpt - ext/soap/tests/schema/schema083.phpt - ext/soap/tests/schema/schema083.phpt - ext/soap/tests/schema/schema084.phpt - ext/soap/tests/schema/schema084.phpt - ext/soap/tests/schema/test_schema.inc: - - file schema082.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - NEWS - ext/soap/php_encoding.c - ext/soap/php_encoding.c - ext/soap/php_soap.h - ext/soap/php_soap.h - ext/soap/soap.c - ext/soap/soap.c - ext/soap/tests/interop/Round2/Base/r2_base_009s.phpt - ext/soap/tests/interop/Round2/Base/r2_base_009s.phpt - ext/soap/tests/schema/schema081.phpt - ext/soap/tests/schema/schema081.phpt - ext/soap/tests/schema/schema082.phpt - ext/soap/tests/schema/schema083.phpt - ext/soap/tests/schema/schema084.phpt - ext/soap/tests/schema/test_schema.inc: - Added ability to encode arrays with "SOAP-ENC:Array" type instead of WSDL - type. To activate the ability use "feature"=>SOAP_USE_XSI_ARRAY_TYPE - option in SoapClient/SoapServer constructors. - - * ext/soap/tests/bugs/bug36226-2.phpt - ext/soap/tests/bugs/bug36226-2.phpt - ext/soap/tests/bugs/bug36226-2.wsdl - ext/soap/tests/bugs/bug36226-2.wsdl: - - file bug36226-2.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - NEWS - ext/soap/php_encoding.c - ext/soap/php_encoding.c - ext/soap/tests/bugs/bug36226-2.phpt - ext/soap/tests/bugs/bug36226-2.wsdl: - Fixed bug #36226 (Inconsistent handling when passing nillable arrays) - - * (PHP_5_2) - NEWS - ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.h - ZendEngine2/zend_alloc.h - ZendEngine2/tests/bug40261.phpt - ZendEngine2/tests/bug40261.phpt - ZendEngine2/tests/bug40261.phpt - ZendEngine2/tests/bug40809.phpt - ZendEngine2/tests/bug40809.phpt - ZendEngine2/tests/bug40809.phpt: - Improved Zend Memory Manager to guarantee reasonable time for worst cases - of best-fit free block searching algorithm. - -2007-03-19 Antony Dovgal - - * ZendEngine2/zend_strtod.c: - add folding tags - -2007-03-19 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - ext/imap/php_imap.c - ext/imap/tests/bug40854.phpt - ext/imap/tests/bug40854.phpt: - - Fixed bug #40854 (imap_mail_compose() creates an invalid terminator for - multipart e-mails). - -2007-03-19 Dmitry Stogov - - * ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_execute.h - ZendEngine2/tests/bug40833.phpt: - Fixed bug #40833 (Crash when using unset() on an ArrayAccess object - retrieved via __get()). - - * ZendEngine2/tests/bug40833.phpt - ZendEngine2/tests/bug40833.phpt: - - file bug40833.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - NEWS - ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_execute.h: - Fixed bug #40833 (Crash when using unset() on an ArrayAccess object - retrieved via __get()) - -2007-03-19 Antony Dovgal - - * ext/session/session.c: - MFB - - * (PHP_5_2) - ext/reflection/tests/bug40794.phpt: - new test - - * ext/reflection/tests/bug40794.phpt - ext/reflection/tests/bug40794.phpt: - - new test - -2007-03-19 Edin Kadribasic - - * win32/build/confutils.js: - MFB: Make DLL only once (Wez) - - * (PHP_5_2) - win32/build/confutils.js: - Make DLL only once (Wez) - -2007-03-18 Rob Richards - - * (PHP_5_2) - NEWS: - BFN - - * (PHP_5_2) - ext/dom/node.c - ext/dom/tests/bug40836.phpt: - MFH: fix bug #40836 (Segfault in ext/dom) - add test - - * ext/dom/node.c - ext/dom/tests/bug40836.phpt - ext/dom/tests/bug40836.phpt: - fix bug #40836 (Segfault in ext/dom) - add test - -2007-03-18 Wez Furlong - - * ext/standard/array.c: - MFB, #40848 - - * (PHP_5_2) - NEWS: - BFN, #40848 - - * (PHP_5_2) - ext/standard/array.c: - fixes #40848 - -2007-03-18 Ilia Alshanetsky - - * (PHP_4_4) - NEWS - ext/mbstring/mbstring.c: - MFB: Fixed MOPB-26-2007 mb_parse_str() can be used to activate - register_globals - - * (PHP_5_2) - ext/mbstring/mb_gpc.c: - Fixed MOPB-26-2007 mb_parse_str() can be used to activate register_globals - - -2007-03-17 Johannes Schlüter - - * ext/reflection/php_reflection.c - ext/reflection/tests/bug39884.phpt: - - Fix string compare in unicode mode - -2007-03-17 Antony Dovgal - - * (PHP_5_2) - NEWS - ext/reflection/php_reflection.c: - MFH: fix #40794 (ReflectionObject::getValues() may crash when used with - dynamic properties) - - * ext/reflection/php_reflection.c: - fix #40794 (ReflectionObject::getValues() may crash when used with dynamic - properties) - - * (PHP_5_2) - sapi/cli/tests/004.phpt - sapi/cli/tests/005.phpt - sapi/cli/tests/006.phpt: - fix tests - - * sapi/cli/tests/004.phpt - sapi/cli/tests/005.phpt - sapi/cli/tests/006.phpt: - fix tests - - I was absolutely sure we removed --disable-reflection option. - -2007-03-16 Zoe Slattery - - * ext/standard/tests/strings/strcasecmp.phpt - ext/standard/tests/strings/strcmp.phpt: - Fixing %i - > %d, previously changed in error - -2007-03-16 Stanislav Malyshev - - * (PHP_5_2) - ext/sybase/php_sybase_db.c: - fix spprintf usage - - * (PHP_4_4) - NEWS - NEWS: - clarify - - * ext/standard/array.c - ext/standard/array.c - ext/standard/array.c - ext/standard/tests/array/array_user_key_compare.phpt - ext/standard/tests/array/array_user_key_compare.phpt: - Fix UMR in array_user_key_compare() (MOPB24 by Stefan Esser) - - * (PHP_4_4) - NEWS: - fix for mopb-24 - - * (PHP_5_2) - NEWS: - array_user_key_compare() fix - - * ext/standard/tests/array/array_user_key_compare.phpt - ext/standard/tests/array/array_user_key_compare.phpt - ext/standard/tests/array/array_user_key_compare.phpt: - 1.1.4; - file array_user_key_compare.phpt was initially added on branch PHP_5_2. - -2007-03-16 Zoe Slattery - - * ext/standard/tests/strings/strcasecmp.phpt - ext/standard/tests/strings/strcmp.phpt: - Changed %d to %i in EXPECTF - - * ext/standard/tests/strings/strcasecmp.phpt - ext/standard/tests/strings/strcmp.phpt - ext/standard/tests/strings/strlen.phpt: - new test cases for string functions - -2007-03-16 Antony Dovgal - - * (PHP_5_2) - NEWS: - BFN - - * ext/interbase/ibase_query.c: - MFB: fix #40805 (Failure executing function ibase_execute()) - -2007-03-16 Sebastian Bergmann - - * ext/reflection/php_reflection.c: - MFB: Fugbix typo. - - * (PHP_5_2) - ext/reflection/php_reflection.c: - Fugbix typo. - -2007-03-15 Antony Dovgal - - * (PHP_4_4) - NEWS - ext/curl/curl.c: - fix #40831 (cURL extension doesn't clean up the buffer of reused handle) - - * (PHP_5_2) - ext/interbase/ibase_query.c: - fix #40805 (Failure executing function ibase_execute()) - - * (PHP_5_2) - NEWS: - BFN - - * (PHP_5_2) - ZendEngine2/zend.c - ZendEngine2/zend_execute_API.c - ZendEngine2/tests/bug40815.phpt: - fix #40815 (using strings like "class::func" and static methods in - set_exception_handler() might result in crash) - - * ZendEngine2/tests/bug40815.phpt - ZendEngine2/tests/bug40815.phpt: - - new test - - * ZendEngine2/zend.c: - reset the exception if it's still NULL - -2007-03-14 Antony Dovgal - - * (PHP_5_2) - ext/pcre/php_pcre.c - ext/pcre/tests/preg_replace_callback2.phpt: - MFH: remove unnecessary warning in case of exception - - * ext/pcre/php_pcre.c - ext/pcre/tests/preg_replace_callback2.phpt: - don't emit any warnings in addition to an exception - -2007-03-14 Ilia Alshanetsky - - * (PHP_4_4) - NEWS - ext/session/session.c: - - MFB: Fixed MOPB-22-2007 PHP session_regenerate_id() Double Free - Vulnerability. - - * (PHP_5_2) - ext/session/session.c: - - Fixed MOPB-22-2007:PHP session_regenerate_id() Double Free Vulnerability - - -2007-03-14 Antony Dovgal - - * (PHP_5_2) - NEWS - ext/openssl/xp_ssl.c: - MFH: fix #40750 (openssl stream wrapper ignores default_stream_timeout) - - * ext/openssl/xp_ssl.c: - fix #40750 (openssl stream wrapper ignores default_stream_timeout) - -2007-03-14 Pierre-Alain Joye - - * (PHP_5_2) - NEWS: - - leak in extract - - * ext/zip/php_zip.c: - - MFB: Fixed a possible memory leak on open_basedir validation (Ilia) - -2007-03-14 Stanislav Malyshev - - * (PHP_4_4) - NEWS: - mopb 8 fix - -2007-03-14 Pierre-Alain Joye - - * (PHP_5_2) - NEWS: - - add ::open to the safemode check entry - - * (PHP_4_4) - NEWS: - - add summary of the CVE - -2007-03-14 Ilia Alshanetsky - - * (PHP_5_2) - ext/zip/php_zip.c: - - Fixed a possible memory leak on open_basedir validation - - * (PHP_4_4) - NEWS: - - Bug fixing news - -2007-03-14 Pierre-Alain Joye - - * (PHP_5_2) - ext/zip/php_zip.c: - - MFH: openbasedir and safemode check in ::open() - - * ext/zip/php_zip.c: - - add openbase_dir checks in ::open and addFile() - -2007-03-14 Timm Friebe - - * ext/sybase_ct/tests/bug30312.phpt: - - MFB: Changed expected output - - * ext/sybase_ct/tests/test_fetch_object.phpt - ext/sybase_ct/tests/test_fetch_object.phpt - ext/sybase_ct/tests/test_fields.phpt - ext/sybase_ct/tests/test_fields.phpt: - - Changed expected output - - * ext/sybase_ct/tests/test_msghandler_handled.phpt: - - MFB: Changed message handler also to handle message #11021 - - Adjusted expected output - -2007-03-14 Antony Dovgal - - * (PHP_5_2) - NEWS: - BFN - - * (PHP_5_2) - ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.h: - MFH: fix #40800 (cannot disable memory_limit with -1) - -2007-03-14 Timm Friebe - - * (PHP_5_2) - ext/sybase_ct/tests/test_msghandler_handled.phpt: - - Changed message handler also to handle message #11021 - - Adjusted expected output - -2007-03-14 Antony Dovgal - - * ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.h: - fix #40800 (cannot disable memory_limit with -1) - -2007-03-14 Timm Friebe - - * (PHP_5_2) - ext/sybase_ct/php_sybase_ct.c: - - Fixed segmentation fault in sybase_connect() - - * (PHP_5_2) - ext/sybase_ct/tests/bug30312.phpt: - - Changed expected output - -2007-03-14 Pierre-Alain Joye - - * ext/zip/php_zip.c: - - MFB: free rsrc on error in zip_read (old API) - - * (PHP_5_2) - NEWS - ext/zip/php_zip.c: - - MFH: Fixed possible relative path issues in zip_open in TS mode (old API) - - * ext/zip/php_zip.c: - - MFB: free buffer when zip_entry_read returns an empty entry - - * ext/zip/php_zip.c - ext/zip/php_zip.h - ext/zip/zip_stream.c: - - MFB: - - rename SAFEMODE_CHECKFILE to OPENBASEDIR_CHECKPATH (can be used without - confusing in head without confusion) - - Add safemode and open basedir checks in zip:// wrapper (revert Ilia's - patch). Bug found by Stefan Esser in his MOPB-20-2007 - - * (PHP_5_2) - NEWS - ext/zip/php_zip.c - ext/zip/php_zip.h - ext/zip/zip_stream.c: - - rename SAFEMODE_CHECKFILE to OPENBASEDIR_CHECKPATH (can be used without - confusing in head without confusion) - - Add safemode and open basedir checks in zip:// wrapper (revert Ilia's - patch). Bug found by Stefan Esser in his MOPB-20-2007 - - * (PHP_5_2) - ext/zip/tests/oo_getcomment.phpt: - - add more cases for getComment - -2007-03-14 Martin Kraemer - - * ext/bcmath/package.xml - ext/bcmath/package.xml - ext/calendar/package.xml - ext/calendar/package.xml - ext/com_dotnet/package.xml - ext/com_dotnet/package.xml - ext/ctype/package.xml - ext/ctype/package.xml - ext/curl/package.xml - ext/curl/package.xml - ext/dbase/package.xml - ext/dbase/package.xml - ext/exif/package.xml - ext/exif/package.xml - ext/fdf/package.xml - ext/fdf/package.xml - ext/ftp/package.xml - ext/ftp/package.xml - ext/mime_magic/package.xml - ext/mime_magic/package.xml - ext/mysql/package.xml - ext/mysqli/package.xml - ext/mysqli/package.xml - ext/pcntl/package.xml - ext/pcntl/package.xml - ext/posix/package.xml - ext/posix/package.xml - ext/session/package.xml - ext/session/package.xml - ext/shmop/package.xml - ext/shmop/package.xml - ext/sockets/package.xml - ext/sockets/package.xml - ext/sysvmsg/package.xml - ext/sysvmsg/package.xml - ext/sysvsem/package.xml - ext/sysvsem/package.xml - ext/sysvshm/package.xml - ext/sysvshm/package.xml - ext/tokenizer/package.xml - ext/tokenizer/package.xml - ext/wddx/package.xml - ext/wddx/package.xml - ext/xml/package.xml - ext/xml/package.xml - ext/zlib/package.xml - ext/zlib/package.xml: - Typo - -2007-03-14 Ilia Alshanetsky - - * (PHP_4_4) - ext/bz2/bz2.c: - - MFB: Added missing open_basedir & safe_mode checks to bzip:// wrapper. - - * (PHP_5_2) - ext/bz2/bz2.c - ext/zip/zip_stream.c: - - Added missing open_basedir & safe_mode checks to zip:// and bzip:// - wrappers. - - Issues idendtified by MOPB-20 and MOPB-21 - -2007-03-13 Stanislav Malyshev - - * (PHP_4_4) - Zend/zend.c - Zend/zend.h: - fix XSS in phpinfo() (MOPB 8) - patch by Joe Orton - - * ext/odbc/php_odbc.c - ext/odbc/php_odbc_includes.h: - MFB: fix odbc resource handling, patch by Dave Lawson - - * (PHP_5_2) - ext/odbc/php_odbc.c - ext/odbc/php_odbc_includes.h: - fix odbc resource handling, patch by Dave Lawson - -2007-03-12 Antony Dovgal - - * (PHP_5_2) - ext/standard/string.c: - return false instead of empty string when -length is greater than (len - - offset) - -2007-03-12 Ilia Alshanetsky - - * (PHP_5_2) - ext/interbase/php_ibase_udf.c: - - malloc() -> pemalloc() - -2007-03-12 Antony Dovgal - - * ext/standard/uuencode.c: - fix folding and add missing footer - - * (PHP_5_2) - ext/iconv/iconv.c - ext/iconv/tests/iconv_substr.phpt: - synchronize iconv_substr() behavior with substr() - no MFB so far, since substr() changes are not MFBed either - -2007-03-12 Dmitry Stogov - - * ZendEngine2/tests/bug40770.phpt - ZendEngine2/tests/bug40770.phpt: - - file bug40770.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - NEWS - ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.c - ZendEngine2/tests/bug40770.phpt: - Fixed bug #40770 (Apache child exits when PHP memory limit reached) - -2007-03-12 Antony Dovgal - - * (PHP_5_2) - NEWS: - BFN - - * (PHP_5_2) - ZendEngine2/zend_compile.c - ZendEngine2/tests/bug40784.phpt: - MFH: fix #40784 (Case sensivity in constructor's fallback) - - * ZendEngine2/zend_compile.c - ZendEngine2/tests/bug40784.phpt - ZendEngine2/tests/bug40784.phpt: - fix #40784 (Case sensivity in constructor's fallback) - -2007-03-12 Dmitry Stogov - - * sapi/cgi/fastcgi.c - sapi/cgi/fastcgi.c: - Fixed compilation warning - -2007-03-12 Edin Kadribasic - - * (PHP_5_2) - NEWS: - Lib upgrade news - -2007-03-11 Ilia Alshanetsky - - * (PHP_5_2) - ext/imap/php_imap.c: - - malloc() -> pemalloc() - -2007-03-11 Antony Dovgal - - * ext/sybase_ct/tests/test.inc: - one more fix - - * (PHP_5_2) - ext/sybase_ct/tests/test.inc: - fix tests - - * ext/sybase_ct/tests/test.inc: - fix sybase tests - -2007-03-10 Ilia Alshanetsky - - * (PHP_5_2) - ext/standard/string.c: - Re-added check removed by the previous patch - - * (PHP_5_2) - ext/standard/basic_functions.c: - - Added additional checks for long input arrays inside - import_request_variables(). - - -2007-03-10 Pierre-Alain Joye - - * (PHP_4_4) - NEWS: - - NEWS entry for the ft cve - - * (PHP_4_4) - NEWS - NEWS - ext/gd/config.m4 - ext/gd/config.m4 - ext/gd/config.w32 - ext/gd/gd.dsp - ext/gd/libgd/gd_security.c - ext/gd/libgd/gd_security.c - ext/gd/libgd/gdhelpers.h - ext/gd/libgd/gdhelpers.h - ext/gd/libgd/wbmp.c - ext/gd/libgd/wbmp.c - ext/gd/tests/createfromwbmp2.phpt - ext/gd/tests/createfromwbmp2.phpt: - - MFH: CVE-2007-1001, integer overflow with invalid wbmp images - - * (PHP_4_4) - ext/gd/libgd/gdft.c: - - Fix the Fix for CVE-2007-0455 - - * ext/gd/config.m4 - ext/gd/config.w32 - ext/gd/libgd/gd_security.c - ext/gd/libgd/gd_security.c - ext/gd/libgd/gd_security.c - ext/gd/libgd/gdhelpers.h - ext/gd/libgd/wbmp.c - ext/gd/tests/createfromwbmp2.phpt - ext/gd/tests/createfromwbmp2.phpt - ext/gd/tests/createfromwbmp2.phpt: - - CVE-2007-1001, integer overflow with invalid wbmp images - - * ext/gd/libgd/gd.c - ext/gd/tests/bug40764.phpt: - - MFB: #40764, line thickness not respected for horizontal and vertical - lines - - * (PHP_5_2) - NEWS - ext/gd/tests/bug40764.phpt - ext/gd/tests/bug40764.phpt: - - #40764, line thickness not respected for horizontal and vertical lines - - add test - - NEWS entry - -2007-03-09 Stanislav Malyshev - - * ext/mysqli/tests/bug38710.phpt: - add testcase - - * ext/mysqli/tests/bug38710.phpt - ext/mysqli/tests/bug38710.phpt: - - file bug38710.phpt was initially added on branch PHP_5_2. - -2007-03-09 Dmitry Stogov - - * sapi/cgi/cgi_main.c - sapi/cgi/cgi_main.c: - Return HTTP 403 in case of "access denied". - -2007-03-09 Antony Dovgal - - * (PHP_4_4) - NEWS - ext/session/mod_files.c: - fix #40747 (possible crash in session when save_path is out of - open_basedir) - - * (PHP_5_2) - ext/standard/string.c - ext/standard/tests/strings/bug40754.phpt: - fix substr() - it's perfectly legal to do substr("str", 0, 1000000); - - * (PHP_5_2) - ext/date/tests/010.phpt - ext/standard/tests/strings/substr_compare.phpt: - fix tests - -2007-03-09 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - ext/standard/string.c - ext/standard/tests/strings/bug40754.phpt - ext/standard/tests/strings/bug40754.phpt: - - Fixed bug #40754 (added substr() & substr_replace() overflow checks). - - * (PHP_5_2) - ext/standard/basic_functions.c: - Add _SESSION to checklist - - * (PHP_5_2) - ext/standard/basic_functions.c: - - Fixed a possible super-global overwrite inside import_request_variables(). - - -2007-03-09 Rasmus Lerdorf - - * ext/curl/interface.c: - MFB Off by ! in file:/// control char check - - * (PHP_5_2) - ext/curl/interface.c: - Off by ! in the url control char check for file:/// urls - -2007-03-09 Pierre-Alain Joye - - * (PHP_5_2) - ext/gd/libgd/gd.c: - - #40764, line thickness not respected for horizontal and vertical lines - -2007-03-08 Stanislav Malyshev - - * ext/mysqli/mysqli_api.c: - MFB: fix crash/leak in bug #38710 - - * (PHP_5_2) - NEWS: - more fixes - - * (PHP_5_2) - ext/mysqli/mysqli_api.c: - fix crash/leak in bug #38710 - - * (PHP_5_2) - NEWS: - add news - -2007-03-08 Nuno Lopes - - * (PHP_5_2) - NEWS: - BFN: gd gif reading - -2007-03-08 Stanislav Malyshev - - * ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_execute.h: - MFB: fix crash on $x['x']['y'] += 1, patch by Brian Shire - - * ZendEngine2/tests/offset_assign.phpt: - MFB test - - * ZendEngine2/tests/offset_assign.phpt - ZendEngine2/tests/offset_assign.phpt: - - file offset_assign.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_execute.h: - fix crash on $x['x']['y'] += 1, patch by Brian Shire - -2007-03-08 Nuno Lopes - - * ext/gd/libgd/gd_gif_in.c: - MFB: fix thread unsafety in the gif reader code (merge from libgd cvs) - - * (PHP_5_2) - ext/gd/libgd/gd_gif_in.c: - fix thread unsafety in the gif reader code (merge from libgd cvs) - -2007-03-08 Marcus Boerger - - * ZendEngine2/zend_compile.c - ZendEngine2/zend_compile.h - ZendEngine2/zend_execute_API.c - ZendEngine2/zend_language_parser.y - ZendEngine2/zend_opcode.c - ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_execute.h - ZendEngine2/zend_vm_opcodes.h: - - Improved version of ternary shortcut - -2007-03-08 Stanislav Malyshev - - * (PHP_5_2) - ext/standard/string.c: - clarify checks and error messages - -2007-03-08 Antony Dovgal - - * (PHP_5_2) - NEWS - ext/standard/basic_functions.c - ext/standard/tests/general_functions/bug40752.phpt: - MFH: fix #40752 (parse_ini_file() segfaults when a scalar setting is - redeclared as an array) - - * ext/standard/tests/general_functions/bug40752.phpt - ext/standard/tests/general_functions/bug40752.phpt: - - fix #40752 (parse_ini_file() segfaults when a scalar setting is redeclared - as an array) - - * ext/standard/basic_functions.c: - fix #40752 (parse_ini_file() segfaults when a scalar setting is redeclared - as an array) - -2007-03-08 Ilia Alshanetsky - - * (PHP_5_2) - ext/standard/string.c: - Improved length parameter validation - - * (PHP_5_2) - ext/standard/string.c: - Improved offset validation - -2007-03-07 Stanislav Malyshev - - * (PHP_5_2) - ext/standard/string.c: - fix MOPB#14 - -2007-03-07 Antony Dovgal - - * (PHP_4_4) - ext/gmp/tests/bug32773.phpt: - fix test - -2007-03-07 Zoe Slattery - - * ext/standard/tests/array/array_slice.phpt: - New test case for array_slice - -2007-03-07 Antony Dovgal - - * (PHP_5_2) - ext/pdo_mysql/config.m4: - fix small typo - add --with-zlib-dir option (and simple automagic zlib detection) - - * (PHP_5_2) - NEWS - ext/pdo/pdo_stmt.c: - MFH: fix #40727 (segfault in PDO when failed to bind parameters) - - * ext/pdo/pdo_stmt.c: - fix #40727 (segfault in PDO when failed to bind parameters) - -2007-03-07 Ilia Alshanetsky - - * (PHP_5_2) - ZendEngine2/zend_alloc.h: - - Fixed calloc wrapper - - * (PHP_5_2) - ext/standard/browscap.c: - - malloc() -> pemalloc() - - * (PHP_5_2) - ZendEngine2/zend_alloc.h: - - Add checks around raw allocation code - -2007-03-06 Derick Rethans - - * ext/date/lib/timezonedb.h - ext/date/lib/timezonemap.h: - - MF52: Updated timezone database to version 2007.3. - - * (PHP_5_2) - NEWS - ext/date/lib/timezonedb.h - ext/date/lib/timezonemap.h: - - Updated timezone database to version 2007.3. (Derick) - -2007-03-06 Antony Dovgal - - * ZendEngine2/zend_ini.c: - comment out unused function - need to figure out why and what for it has been added in the first place.. - - * (PHP_5_2) - ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c: - use the aliases and eliminate one more compile warning - - * (PHP_5_2) - ZendEngine2/zend_alloc.c: - MFH: declare zend_mm_random() only when needed - - * ZendEngine2/zend_alloc.c: - declare zend_mm_random() only when needed - - * ext/standard/var.c: - be consistent with non-unicode implementation - -2007-03-06 Sara Golemon - - * main/streams/streams.c: - Fix handling over overridden file:// wrapper - -2007-03-06 Antony Dovgal - - * ext/standard/basic_functions.c - ext/standard/tests/general_functions/import_request.phpt: - fix segfault in import_request_variables() and its test - I'm not completely sure it's correct to import numeric vars like - _POST["1"] etc. - -2007-03-06 Uwe Schindler - - * sapi/nsapi/nsapi-readme.txt - sapi/nsapi/nsapi.c: - Update function names for PHP6 to php6* - -2007-03-06 Antony Dovgal - - * ext/standard/var.c: - initialize variable - - * ZendEngine2/tests/bug21478.phpt - ZendEngine2/tests/bug31720.phpt - ZendEngine2/tests/bug32290.phpt - ZendEngine2/tests/bug36214.phpt - ext/standard/tests/file/bug37158.phpt - ext/standard/tests/file/bug38450.phpt - ext/standard/tests/file/bug38450_1.phpt - ext/standard/tests/general_functions/call_user_func_return.phpt - ext/standard/tests/network/bug20134.phpt - ext/standard/tests/serialize/bug24063.phpt - ext/standard/tests/strings/bug20934.phpt - ext/standard/tests/strings/bug26817.phpt - ext/standard/tests/strings/bug29119.phpt - ext/standard/tests/strings/explode.phpt - ext/standard/tests/strings/http_build_query.phpt - ext/standard/tests/strings/metaphone.phpt - ext/standard/tests/strings/url_t.phpt: - fix tests - -2007-03-06 Uwe Schindler - - * sapi/nsapi/nsapi.c - sapi/nsapi/nsapi.c: - remove (large) static buffers for header names and request uri - - * sapi/nsapi/nsapi.c - sapi/nsapi/nsapi.c: - use slprintf instead of snprintf and remove 0termination things (because - slprintf is always available now) - -2007-03-06 Antony Dovgal - - * ext/ming/config.m4: - fix AC_TRY_COMPILE usage - -2007-03-06 Ilia Alshanetsky - - * (PHP_5_2) - ZendEngine2/zend_strtod.c: - Added missing allocation checks - -2007-03-06 Stanislav Malyshev - - * (PHP_5_2) - ext/bz2/bz2.c - ext/sqlite/sqlite.c - ext/sybase_ct/php_sybase_ct.c: - use safe_realloc - - * (PHP_5_2) - ext/sybase/php_sybase_db.c: - use safe_erealloc - -2007-03-06 Marcus Boerger - - * ext/mbstring/oniguruma/regerror.c: - - Add missing return value check - - * (PHP_5_2) - ext/mbstring/oniguruma/regerror.c: - - Revert last part and fix issue under windows - - * (PHP_5_2) - ext/mbstring/oniguruma/regversion.c: - - And the sizes too - - * (PHP_5_2) - ext/mbstring/oniguruma/regversion.c: - - More to go - - * (PHP_5_2) - ext/mbstring/oniguruma/regposerr.c: - - There you go - - * (PHP_5_2) - ext/mbstring/oniguruma/regposerr.c: - - MFH Revert back to sprintf (we could define snprintf for windows but we - don't) - - * ext/mbstring/oniguruma/regposerr.c: - - Revert back to sprintf (we could define snprintf for windows but we - don't) - -2007-03-06 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - ext/pdo/pdo_sql_parser.c - ext/pdo/pdo_sql_parser.re: - - Fixed bug #40417 (Allow multiple instances of the same named PDO token in - prepared statement emulation code). - -2007-03-06 Stanislav Malyshev - - * (PHP_5_2) - ext/interbase/ibase_service.c: - fix broken snprintf code - -2007-03-05 Stanislav Malyshev - - * (PHP_4_4) - ext/fdf/fdf.c: - MF5: use safe_emalloc - - * (PHP_4_4) - sapi/isapi/php4isapi.c: - MF5: use srtlcat - - * (PHP_4_4) - sapi/apache/php_apache.c - sapi/apache2handler/php_functions.c: - MF5: use snprintf - - * (PHP_4_4) - ext/xmlrpc/libxmlrpc/xml_to_soap.c: - MF5: increase array size to fit buffer size - - * (PHP_5_2) - ext/fdf/fdf.c: - use safe_emalloc - -2007-03-05 Uwe Schindler - - * sapi/nsapi/nsapi.c - sapi/nsapi/nsapi.c: - snprintf patch - -2007-03-05 andy wharmby - - * NEWS: - Remove bug entry for 35872 as now in 5.2 - -2007-03-05 Michael Wallner - - * (PHP_5_2) - NEWS: - BFN - - * ext/date/php_date.c - ext/date/php_date.c: - - fix ws as requested by derick - - * ext/date/php_date.c - ext/date/php_date.c: - - fix bug #40691: add comparison object handler - -2007-03-05 andy wharmby - - * NEWS - NEWS - ext/com_dotnet/com_extension.c - ext/com_dotnet/com_extension.c - ext/com_dotnet/com_wrapper.c - ext/com_dotnet/com_wrapper.c - ext/com_dotnet/php_com_dotnet.h - ext/com_dotnet/php_com_dotnet.h: - Fixed bug #35872 (Prevent object store references during RSHUTDOWN) - -2007-03-04 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - ext/xmlrpc/libxmlrpc/base64.c - ext/xmlrpc/libxmlrpc/base64.h - ext/xmlrpc/libxmlrpc/xml_to_dandarpc.c - ext/xmlrpc/libxmlrpc/xml_to_soap.c - ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c: - - Fixed bug #40703 (Resolved a possible namespace conflict between libxmlrpc - and MySQL's NDB table handler). - - * ext/standard/tests/array/bug40709.phpt - ext/standard/tests/array/bug40709.phpt: - - file bug40709.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - NEWS - ext/standard/array.c: - - Fixed bug #40709 (array_reduce() behaves strange with one item stored - arrays). - -2007-03-04 Marcus Boerger - - * ZendEngine2/zend_language_parser.y: - - Implement '?:' - [DOC] "expr1 ?: expr1" is a shortcut for: "expr1 ? expr1 : expr2" as - exists in gcc and discussed some time back. Note that this is not - an implementation ifsetor($var, default). While ifsetor would not - generate any message for non existing variables or array indices - the ternary shortcut does. Also the ternary shortcut does a boolean - evaluation rather then checking for isset(). That way ther ternary - shortcut can work on any expression while ifsetor can only work on - variables. Also to be silent one has do do: "@$expr1 ?: $expr2". - - * (PHP_5_2) - ext/spl/spl_directory.c - ext/spl/spl_iterators.c: - - Fix copy'n'paste issues - - * (PHP_5_2) - ext/spl/spl_directory.c - ext/spl/spl_iterators.c - ext/spl/internal/parentiterator.inc: - - MFH simplify, synch docu/implementation - - * ext/spl/spl_directory.c: - - Missed one is-dot check - - * ext/spl/spl_iterators.c - ext/spl/internal/parentiterator.inc: - - Match docu with implementation - - RecursiveFilterIterator::accept() needs to be abstract - - * ext/spl/spl_directory.c - ext/spl/spl_iterators.c: - - Simplify - -2007-03-04 Stanislav Malyshev - - * (PHP_5_2) - ext/wddx/wddx.c: - ik, make it memcpy - - * (PHP_5_2) - ext/wddx/wddx.c: - fix wrong code - -2007-03-04 Marcus Boerger - - * ext/spl/spl_directory.c - ext/spl/spl_directory.h: - - And finally use prefix style names for consistency sake - -2007-03-04 Edin Kadribasic - - * win32/build/Makefile: - MFB: Check that manifest file exists before trying to embed it - - * (PHP_5_2) - win32/build/Makefile: - Check that manifest file exists before trying to embed it - -2007-03-04 Marcus Boerger - - * ext/spl/spl_directory.c - ext/spl/spl_directory.h: - - Reverting glob on child logic makes globbing work better with the example - code - - * ext/spl/spl_directory.c - ext/spl/spl_directory.h: - - Fix a minor issue with glob support - forgot to set length of string - - Add ability to not use glob on subdirs - -2007-03-03 Marcus Boerger - - * main/streams/glob_wrapper.c: - - Missed to add [ to meta char check - - * ext/spl/spl_directory.c - ext/spl/spl_directory.h: - - Glob might require us to refetch the path for every entry - - * main/streams/glob_wrapper.c - main/streams/php_stream_glob_wrapper.h: - - Allow to retrieve flags with php_glob_stream_get_count() - - Detect meta chars in pathand switch to append mode so that path can - actually changes for each entry - -2007-03-03 Edin Kadribasic - - * (PHP_5_2) - NEWS: - Library update - -2007-03-03 Marcus Boerger - - * ext/spl/spl_directory.c: - - Add DirectoryIterator::count() - - * main/streams/glob_wrapper.c - main/streams/php_stream_glob_wrapper.h: - - Allow to get number of entries of a glob stream - - * main/php_streams.h: - - One more tab to go - - * main/php_streams.h: - - Change to hex to help read-/maintainability - - * ext/spl/spl_directory.c - ext/spl/spl_directory.h: - - Add glob support for DirectoryIterator - - * win32/php5dllts.dsp - win32/build/config.w32: - - Add glob stream to win build - - * main/streams/glob_wrapper.c - main/streams/php_stream_glob_wrapper.h: - - Provide access to pattern used in glob - - * main/streams/glob_wrapper.c - main/streams/php_stream_glob_wrapper.h: - - php_stream_is() requires php_glob_stream_ops to be public - - little bit of additional whitespace - - * configure.in - ext/standard/basic_functions.c - main/php_streams.h - main/streams/glob_wrapper.c - main/streams/php_stream_glob_wrapper.h - main/streams/plain_wrapper.c: - - Add glob stream wrapper - - * ext/standard/file.c: - - Fix realpath() logic - - * (PHP_5_2) - main/streams/streams.c: - - MFH A stream wrapper might only allow directory access - - * main/streams/streams.c: - -A stream wrapper might only allow directory access - -2007-03-03 Ilia Alshanetsky - - * (PHP_5_2) - ext/standard/string.c - ext/standard/tests/strings/bug40704.phpt - ext/standard/tests/strings/bug40704.phpt: - - Fixed bug #40704 (strip_tags() does not handle single quotes correctly) - -2007-03-03 Marcus Boerger - - * (PHP_5_2) - NEWS: - - The # line does not belong here - - * (PHP_5_2) - NEWS - ext/spl/spl_directory.c: - - MFH [DOC] Add SplFileInfo::getBasename(), DirectoryIterator::getBasename - - MFH Add SplFileInfo::getLinkTarget(), SplFileInfo::getRealPath() - -2007-03-03 Ilia Alshanetsky - - * (PHP_5_2) - ext/session/mod_files.c - ext/session/session.c: - Adjust checks to allow paths without a trailing / - -2007-03-03 Marcus Boerger - - * ext/spl/spl_directory.c: - - SplFileInfo::getRealPath() is not always present - - * ext/spl/spl_directory.c: - - - * ext/spl/spl_directory.c: - - [DOC] Add SplInfo::getBasename(), DirectoryIterator::getBasename() - - * ZendEngine2/zend_execute_API.c - ZendEngine2/zend_execute_API.c: - - Catch empty class name error earlier - -2007-03-03 Johannes Schlüter - - * main/output.c - tests/output/ob_020.phpt: - - Fix old behaviour, ob_list_handlers() should always return an array - -2007-03-03 Edin Kadribasic - - * (PHP_4_4) - ext/interbase/interbase.dsp - ext/snmp/snmp.dsp - ext/sybase_ct/sybase_ct.dsp - sapi/apache/php4apache.dsp - sapi/apache2handler/php4apache2.dsp - sapi/pi3web/php4pi3web.dsp: - Use standardised locations for libs and includes - - * (PHP_4_4) - ext/informix/ifx.dsp: - Made compile without magic - - * (PHP_5_2) - NEWS: - Lib upgrade update - -2007-03-02 Stanislav Malyshev - - * main/main.c - main/main.c - main/php_globals.h - main/php_globals.h - main/php_variables.c - main/php_variables.c: - limit nesting level of input variables - - * (PHP_5_2) - main/php_variables.c: - fix variable name - - * (PHP_5_2) - NEWS: - limit input variable nesting - -2007-03-02 Nuno Lopes - - * ext/standard/tests/file/proc_open01.phpt: - MFB - - * (PHP_5_2) - ext/standard/tests/file/proc_open01.phpt: - increase the stream_select() timeout, to make the test pass in a slow - machine with valgrind - - * ext/gd/libgd/gd_gif_in.c: - MFB - - * (PHP_5_2) - ext/gd/libgd/gd_gif_in.c: - fix access to non initialized memory (check valgrind reports on - http://gcov.php.net) - -2007-03-02 Antony Dovgal - - * ext/oci8/tests/bug40415.phpt: - mask resource numbers - - * (PHP_5_2) - ext/oci8/tests/lob_029.phpt: - improved test - -2007-03-02 Ilia Alshanetsky - - * (PHP_5_2) - ext/session/session.c: - - Improve safe_mode check - -2007-03-01 Antony Dovgal - - * (PHP_5_2) - ext/oci8/tests/bug40415.phpt - ext/oci8/tests/fetch_all3.phpt - ext/oci8/tests/fetch_all3.phpt - ext/oci8/tests/lob_037.phpt - ext/oci8/tests/lob_038.phpt - ext/oci8/tests/lob_039.phpt: - new tests - - * ext/oci8/tests/bug40415.phpt - ext/oci8/tests/bug40415.phpt - ext/oci8/tests/lob_029.phpt - ext/oci8/tests/lob_037.phpt - ext/oci8/tests/lob_037.phpt - ext/oci8/tests/lob_038.phpt - ext/oci8/tests/lob_038.phpt - ext/oci8/tests/lob_039.phpt - ext/oci8/tests/lob_039.phpt: - - new tests by Chris and me - - * ext/oci8/oci8_statement.c - ext/oci8/php_oci8_int.h: - MFB: allocate and define descriptors dynamically - - * (PHP_5_2) - ext/oci8/oci8_statement.c - ext/oci8/php_oci8_int.h: - allocate descriptors dynamically - -2007-03-01 Nuno Lopes - - * (PHP_4_4) - ext/gd/libgd/gdft.c: - MFH - - * ext/gd/libgd/gdft.c: - MFB - - * (PHP_5_2) - ext/gd/libgd/gdft.c: - merge from gd sources: unlock mutex before shuting it down - -2007-03-01 Antony Dovgal - - * ext/iconv/config.m4: - fix iconv cross-compilation - - * (PHP_5_2) - NEWS - ext/posix/config.m4: - MFH: fix #40678 (Cross compilation fails) - - * ext/posix/config.m4: - fix #40678 (Cross compilation fails) - -2007-03-01 Ilia Alshanetsky - - * (PHP_5_2) - NEWS: - - Fixed bug #40464 (session.save_path wont use default-value when safe_mode - or open_basedir is enabled). - -2007-02-28 Derick Rethans - - * (PHP_4_4) - NEWS - configure.in - main/php_version.h: - - Back to dev. - - * (PHP_4_4) - NEWS - configure.in - main/php_version.h: - - Go with 4.4.6. - -2007-02-28 Hannes Magnusson - - * ext/interbase/interbase.c - ext/interbase/interbase.c: - Typo - -2007-02-28 Ilia Alshanetsky - - * (PHP_5_2) - ext/mbstring/oniguruma/regerror.c: - - Fixed typo - - * (PHP_5_2) - ext/mbstring/oniguruma/regerror.c: - Adjust vsnprintf() usage - -2007-02-27 Ilia Alshanetsky - - * (PHP_5_2) - ext/ftp/ftp.c - ext/hash/hash.c - ext/mbstring/oniguruma/regerror.c - ext/mhash/mhash.c - ext/pcre/pcrelib/pcregrep.c - ext/pdo_firebird/firebird_driver.c - ext/session/mod_mm.c - ext/session/session.c - ext/spl/spl_directory.c - ext/spl/spl_iterators.c - ext/standard/html.c - ext/standard/http_fopen_wrapper.c - ext/standard/string.c - ext/wddx/wddx.c - main/SAPI.c - sapi/cgi/cgi_main.c - sapi/cgi/fastcgi.c - sapi/tux/php_tux.c: - - snprintf() -> slprintf() - - * (PHP_5_2) - ext/date/php_date.c - ext/exif/exif.c - ext/imap/php_imap.c - ext/interbase/ibase_query.c - ext/interbase/ibase_service.c - ext/interbase/interbase.c - ext/pdo_firebird/firebird_statement.c - ext/soap/soap.c: - - snprintf() -> slprintf() - - - * (PHP_5_2) - ext/standard/string.c: - - Fixed bug #40637 (Regression in strip_tags() in relation so quote - handling) - -2007-02-26 Marcus Boerger - - * ext/spl/spl_directory.c: - - Add missing access check - - * ext/spl/spl.php - ext/spl/spl_directory.c: - - Add SplFileInfo::getLinkTarget - - Add SplFileInfo::getRealPath - -2007-02-26 Antony Dovgal - - * ZendEngine2/zend_operators.c - ZendEngine2/zend_operators.h: - nuke dead code - - * ext/standard/filestat.c: - simplify disk_*_space() functions sources by moving ifdef'ed - implementations into separate functions - - * (PHP_5_2) - ext/session/mod_mm.c: - fix typo - -2007-02-26 Dmitry Stogov - - * ext/soap/tests/bugs/bug40609.phpt - ext/soap/tests/bugs/bug40609.phpt - ext/soap/tests/bugs/bug40609.wsdl - ext/soap/tests/bugs/bug40609.wsdl: - Fixed tests - -2007-02-26 Antony Dovgal - - * Makefile.global: - remind about 'make test' - - * ext/standard/filestat.c - ext/standard/filestat.c: - fix folding - -2007-02-26 Rob Richards - - * ext/pcre/php_pcre.def: - fix win build - -2007-02-26 Antony Dovgal - - * (PHP_5_2) - ext/standard/tests/serialize/bug24063.phpt: - fix - the sprintf() -> zend_spprintf() change affected this - - * (PHP_5_2) - main/snprintf.c: - fix ws/cs and make the ugly code less ugly.. - - * main/snprintf.c: - fix CS/WS - - * ZendEngine2/zend_operators.c: - MFB: use zend_spprintf() - -2007-02-26 Dmitry Stogov - - * main/snprintf.c: - ZTS fix - -2007-02-26 Antony Dovgal - - * (PHP_5_2) - ext/standard/tests/strings/bug40637.phpt: - add new test - - * ext/standard/tests/strings/bug40637.phpt - ext/standard/tests/strings/bug40637.phpt: - - new test - -2007-02-26 Dmitry Stogov - - * sapi/cgi/fastcgi.c - sapi/cgi/fastcgi.c: - poll() is not affected by FD_SETSIZE (Tony) - -2007-02-26 Antony Dovgal - - * (PHP_4_4) - NEWS - ext/curl/curl.c: - fix #40635 (segfault in cURL extension) - -2007-02-26 Ilia Alshanetsky - - * (PHP_5_2) - ext/standard/head.c: - - Revert previous commit that caused a buffer overflow (Bug #40634) - -2007-02-25 Antony Dovgal - - * ext/dbase/dbase.c - ext/dbase/tests/001.phpt - ext/dbase/tests/002.phpt: - do not allow db without fields - fix test - - * ext/sockets/sockets.c: - zerofill socket structs - -2007-02-25 Nuno Lopes - - * main/php_compat.h: - MFB: update pcre symbol list - - * (PHP_5_2) - main/php_compat.h: - update pcre symbols list - -2007-02-25 Dmitry Stogov - - * (PHP_5_2) - NEWS - ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_execute.h - ZendEngine2/zend_vm_execute.h: - Fixed bug #40591 (list()="string"; gives invalid opcode) - - * ext/soap/tests/bugs/bug40609.phpt - ext/soap/tests/bugs/bug40609.phpt - ext/soap/tests/bugs/bug40609.wsdl - ext/soap/tests/bugs/bug40609.wsdl: - - file bug40609.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - NEWS - ext/soap/php_encoding.c - ext/soap/php_encoding.c - ext/soap/tests/bugs/bug40609.phpt - ext/soap/tests/bugs/bug40609.wsdl: - Fixed bug #40609 (Segfaults when using more than one SoapVar in a request). - (Rob, Dmitry) - -2007-02-25 Marcus Boerger - - * ext/exif/exif.c: - - Readability - -2007-02-25 Pierre-Alain Joye - - * ext/gd/libgd/gdft.c: - - MFB: sync with libgd.org, patch from Kees Cook - - * (PHP_5_2) - ext/gd/libgd/gdft.c: - - sync with libgd.org, patch from Kees Cook - -2007-02-24 Rasmus Lerdorf - - * (PHP_5_2) - ext/filter/tests/bug39763.phpt: - Fix test - -2007-02-24 Antony Dovgal - - * (PHP_5_2) - NEWS: - BFN - - * (PHP_5_2) - ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_execute.h - ZendEngine2/tests/bug40621.phpt: - MFH: fix #40621 (Crash when constructor called inappropriately - (statically)) - - * ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_execute.h - ZendEngine2/tests/bug40621.phpt - ZendEngine2/tests/bug40621.phpt: - fix #40621 (Crash when constructor called inappropriately (statically)) - -2007-02-24 Pierre-Alain Joye - - * ext/zip/lib/zip_close.c: - - MFB: Fixed snprintf() usage - - * ext/zip/lib/zip_close.c - ext/zip/lib/zip_open.c - ext/zip/lib/zip_source_file.c: - - merge from pecl: Force binary mode on windows - - * ext/zip/lib/zip_close.c: - - MFB: free temp buffer - -2007-02-24 Marcus Boerger - - * ext/exif/exif.c: - - MFB Synch - - * main/snprintf.c: - - Make [v]s[nl]printf compatible with 5.2 versions and [v]spprintf of head - - * main/snprintf.c - main/snprintf.h: - - Add [v]slprintf - - * (PHP_5_2) - main/snprintf.c - main/snprintf.h: - - Add [v]slprintf to overcome the returnvalues issue of snprintf - -2007-02-24 Ilia Alshanetsky - - * (PHP_5_2) - ext/exif/exif.c: - - missing -1 - - * (PHP_5_2) - ext/dbase/dbf_head.c - ext/dbase/dbf_rec.c - ext/gd/libgd/gd_gif_in.c - ext/interbase/ibase_query.c - ext/pdo_firebird/firebird_statement.c - ext/wddx/wddx.c: - - strncpy() -> strlcpy() - - * (PHP_5_2) - ext/exif/exif.c: - - Pad to given length, not replace data with spaces - - * (PHP_5_2) - ext/exif/exif.c: - - Eliminate strncpy and simplify code - - * (PHP_5_2) - ext/standard/html.c: - - Eliminate strncpy() and simplify code - - * (PHP_5_2) - ext/standard/dir.c: - strncpy > strlcpy - - * (PHP_5_2) - ext/shmop/shmop.c: - - Only do size check on create operations - -2007-02-24 Marcus Boerger - - * ZendEngine2/zend.c - ext/bcmath/libbcmath/src/output.c - ext/bcmath/libbcmath/src/rt.c - ext/com_dotnet/com_wrapper.c - ext/dbase/dbf_head.c - ext/dbase/dbf_misc.c - ext/exif/exif.c - ext/fbsql/php_fbsql.c - ext/ftp/ftp.c - ext/gd/libgd/gdtest.c - ext/gd/libgd/webpng.c - ext/imap/php_imap.c - ext/interbase/ibase_blobs.c - ext/interbase/ibase_query.c - ext/interbase/ibase_service.c - ext/interbase/interbase.c - ext/mbstring/mbstring.c - ext/mbstring/oniguruma/regposerr.c - ext/msql/php_msql.c - ext/mssql/php_mssql.c - ext/mysql/php_mysql.c - ext/mysqli/mysqli.c - ext/mysqli/mysqli_api.c - ext/mysqli/mysqli_prop.c - ext/mysqli/php_mysqli.h - ext/oci8/oci8.c - ext/odbc/php_odbc.c - ext/openssl/openssl.c - ext/pcre/pcrelib/pcregrep.c - ext/pcre/pcrelib/pcreposix.c - ext/pdo_firebird/firebird_statement.c - ext/pdo_odbc/odbc_driver.c - ext/pgsql/pgsql.c - ext/pspell/pspell.c - ext/session/mod_mm.c - ext/session/session.c - ext/skeleton/skeleton.c - ext/soap/php_encoding.c - ext/soap/php_http.c - ext/soap/soap.c - ext/standard/dns.c - ext/standard/head.c - ext/standard/image.c - ext/standard/pack.c - ext/standard/proc_open.c - ext/standard/scanf.c - ext/standard/string.c - ext/standard/type.c - ext/sybase_ct/php_sybase_ct.c - ext/wddx/wddx.c - ext/zip/lib/zip_close.c - ext/zip/lib/zip_error_strerror.c - main/fopen_wrappers.c - main/php_ini.c - main/rfc1867.c - sapi/nsapi/nsapi.c - sapi/tux/php_tux.c - win32/registry.c - win32/sendmail.c: - - avoid sprintf - -2007-02-24 Ilia Alshanetsky - - * (PHP_5_2) - ext/zip/lib/zip_close.c: - - Fixed snprintf() usage - - * (PHP_5_2) - ext/shmop/shmop.c: - Segment size validation - - * (PHP_5_2) - NEWS - main/streams/transports.c: - Fixed Bug #39396 (stream_set_blocking crashes on Win32). - - * (PHP_5_2) - ext/sysvshm/sysvshm.c - ext/sysvshm/tests/002.phpt: - Unify validation of shm segment size inside shm_attach() - - * (PHP_5_2) - ext/tidy/tests/024.phpt: - Fixed test to work with new version of libtidy that strips spaces - -2007-02-24 Marcus Boerger - - * (PHP_5_2) - main/rfc1867.c: - - Drop superflous efree - - * (PHP_5_2) - ext/mysqli/php_mysqli.h: - - Fix spprintf usage - - * (PHP_5_2) - ext/exif/exif.c: - - Make debug code really safe - -2007-02-24 Dmitry Stogov - - * sapi/cgi/fastcgi.c - sapi/cgi/fastcgi.c: - Use poll() instead of select() if available - -2007-02-24 Ilia Alshanetsky - - * (PHP_5_2) - ext/standard/proc_open.c: - strdup() can fail - -2007-02-24 Stanislav Malyshev - - * (PHP_5_2) - ext/exif/exif.c: - use safe allocations - -2007-02-24 Ilia Alshanetsky - - * (PHP_5_2) - ext/sybase/php_sybase_db.c: - - Fixed a typo - -2007-02-24 Stanislav Malyshev - - * (PHP_5_2) - TSRM/tsrm_win32.c: - Unfortunately, VC does not have snprintf, and sprintf_s supported only in - vc2005 - Fortunately, we don't need it here too badly. - - * (PHP_5_2) - ext/ftp/ftp.c: - fix typo - - * (PHP_5_2) - ext/bcmath/libbcmath/src/rt.c: - fix typos - -2007-02-24 Marcus Boerger - - * (PHP_5_2) - TSRM/tsrm_win32.c - ZendEngine2/zend.c - ZendEngine2/zend_builtin_functions.c - ZendEngine2/zend_compile.c - ZendEngine2/zend_language_scanner.l - ZendEngine2/zend_operators.c - ext/bcmath/libbcmath/src/output.c - ext/bcmath/libbcmath/src/rt.c - ext/com_dotnet/com_wrapper.c - ext/date/php_date.c - ext/dbase/dbf_head.c - ext/dbase/dbf_misc.c - ext/exif/exif.c - ext/fbsql/php_fbsql.c - ext/ftp/ftp.c - ext/gd/libgd/gdtest.c - ext/gd/libgd/webpng.c - ext/imap/php_imap.c - ext/interbase/ibase_blobs.c - ext/interbase/ibase_query.c - ext/interbase/ibase_service.c - ext/interbase/interbase.c - ext/mbstring/mbstring.c - ext/mbstring/oniguruma/regerror.c - ext/mbstring/oniguruma/regposerr.c - ext/mbstring/oniguruma/regversion.c - ext/mhash/mhash.c - ext/msql/php_msql.c - ext/mssql/php_mssql.c - ext/mysql/php_mysql.c - ext/mysqli/mysqli.c - ext/mysqli/mysqli_api.c - ext/mysqli/mysqli_prop.c - ext/mysqli/php_mysqli.h - ext/oci8/oci8.c - ext/odbc/php_odbc.c - ext/openssl/openssl.c - ext/pcre/pcrelib/pcregrep.c - ext/pcre/pcrelib/pcreposix.c - ext/pdo_firebird/firebird_statement.c - ext/pdo_odbc/odbc_driver.c - ext/pgsql/pgsql.c - ext/pspell/pspell.c - ext/session/mod_mm.c - ext/session/session.c - ext/skeleton/skeleton.c - ext/soap/php_encoding.c - ext/soap/php_http.c - ext/soap/soap.c - ext/standard/dns.c - ext/standard/head.c - ext/standard/image.c - ext/standard/pack.c - ext/standard/proc_open.c - ext/standard/scanf.c - ext/standard/string.c - ext/standard/type.c - ext/sybase_ct/php_sybase_ct.c - ext/wddx/wddx.c - ext/zip/lib/zip_close.c - ext/zip/lib/zip_error_strerror.c - main/SAPI.c - main/fopen_wrappers.c - main/php_ini.c - main/rfc1867.c - sapi/apache/php_apache.c - sapi/apache2handler/php_functions.c - sapi/apache_hooks/php_apache.c - sapi/cgi/cgi_main.c - sapi/cli/php_cli_readline.c - sapi/nsapi/nsapi.c - sapi/tux/php_tux.c - win32/registry.c - win32/sendmail.c: - - Avoid sprintf, even when checked copy'n'paste or changes lead to errors - -2007-02-24 Stanislav Malyshev - - * (PHP_5_2) - ext/session/session.c: - disallow negative length - -2007-02-23 Sara Golemon - - * (PHP_5_2) - main/streams/plain_wrapper.c: - MFH (r-1.82): Add retry for interrupted reads and graceful handling for - failed retries - - * main/streams/plain_wrapper.c: - Add retry for interrupted reads and graceful handling for failed retries - -2007-02-23 Stanislav Malyshev - - * (PHP_5_2) - sapi/isapi/php5isapi.c - sapi/isapi/php5isapi.c: - use strlcat - - * (PHP_5_2) - sapi/apache/php_apache.c - sapi/apache2handler/php_functions.c - sapi/apache_hooks/php_apache.c: - use snprintf - - * (PHP_5_2) - ext/xmlrpc/libxmlrpc/xml_to_soap.c: - increase array size to fit buffer size - -2007-02-23 Antony Dovgal - - * (PHP_4_4) - NEWS - ext/curl/curl.c: - fix #40611 (possible cURL memory error) - - * ext/curl/interface.c: - fix leak - no need to allocate the buffer if there was no data - -2007-02-23 Stanislav Malyshev - - * (PHP_5_2) - ext/soap/php_sdl.c: - use safe_emalloc - -2007-02-23 Antony Dovgal - - * (PHP_5_2) - NEWS - ext/standard/file.c: - MFH: fix #40606 (umask is not being restored when request is finished) - - * ext/standard/file.c: - fix #40606 (umask is not being restored when request is finished) - -2007-02-23 Rob Richards - - * (PHP_5_2) - NEWS: - BFN - - * ext/libxml/libxml.c: - fix bug #40598 (libxml segfault) - mark more functions unicode safe - - * (PHP_5_2) - ext/libxml/libxml.c: - fix bug #40598 (libxml segfault) - -2007-02-23 Pierre-Alain Joye - - * ext/gd/libgd/gdft.c: - - MFB: #40578, fix the 2nd race condition on shutdown when the cache is - freed - - * (PHP_5_2) - NEWS - ext/gd/libgd/gdft.c: - - #40578, fix the 2nd race condition on shutdown when the cache is freed - -2007-02-23 Ilia Alshanetsky - - * (PHP_5_2) - ext/pgsql/pgsql.c - ext/standard/dl.c - ext/sybase/php_sybase_db.c - ext/sybase_ct/php_sybase_ct.c: - - Simplify code by converting emalloc() + sprintf() to spprintf() - -2007-02-22 Antony Dovgal - - * (PHP_5_2) - ext/posix/posix.c: - MFH: check for buflen (on FreeBSD _SC_GETGR_R_SIZE_MAX is not implemented) - patch by stas at FreeBSD dot org - - * ext/posix/posix.c: - check for buflen (on FreeBSD _SC_GETGR_R_SIZE_MAX is not implemented) - patch by stas at FreeBSD dot org - -2007-02-22 Marcus Boerger - - * main/streams/memory.c: - - Fix logic - -2007-02-22 Edin Kadribasic - - * (PHP_4_4) - ext/imap/imap.dsp: - fix build - -2007-02-22 Derick Rethans - - * (PHP_4_4) - NEWS - configure.in - main/php_version.h: - - Back to -dev. - - * (PHP_4_4) - NEWS - configure.in - main/php_version.h: - - Go with RC1. - -2007-02-22 Nuno Lopes - - * ext/standard/tests/general_functions/proc_open02.phpt: - MFB - - * (PHP_5_2) - ext/standard/tests/general_functions/proc_open02.phpt: - fix test on ultra-fast-machines and/or SOs with long time slices - -2007-02-22 Antony Dovgal - - * sapi/cli/php_cli.c: - check for NULL, then add flag - -2007-02-22 Dmitry Stogov - - * ext/standard/basic_functions.c - ext/standard/basic_functions.c: - Fixed possible crash in putenv() on win32 - -2007-02-22 Ilia Alshanetsky - - * (PHP_5_2) - ext/standard/url_scanner.c: - One more strcpy. (Thanks Stas) - - * (PHP_5_2) - ext/standard/url_scanner.c: - - strcpy() elimination - -2007-02-21 Antony Dovgal - - * ext/standard/tests/file/bug27508.phpt: - minor improvements - - * (PHP_5_2) - main/php_streams.h - main/streams/plain_wrapper.c - main/streams/streams.c - sapi/cli/php_cli.c: - MFH: implement PHP_STREAM_FLAG_NO_CLOSE and avoid hacks - - * main/php_streams.h - main/streams/plain_wrapper.c - main/streams/streams.c - sapi/cli/php_cli.c: - implement PHP_STREAM_FLAG_NO_CLOSE and avoid hacks in plain wrapper - -2007-02-21 Stanislav Malyshev - - * ext/soap/php_http.c - ext/soap/php_http.c: - use snprintf - -2007-02-21 Antony Dovgal - - * ext/standard/tests/file/get_current_user.phpt: - fix test on FreeBSD - - * ext/iconv/tests/bug37176.phpt - ext/iconv/tests/bug37773.phpt: - fix tests - - * (PHP_5_2) - ext/iconv/tests/bug37176.phpt - ext/iconv/tests/bug37773.phpt: - fix tests on AIX - - * ext/xmlrpc/tests/bug40576_64bit.phpt: - add test - - * (PHP_5_2) - ext/xmlrpc/tests/bug40576_64bit.phpt: - wrong string len - - * ext/xmlrpc/tests/bug40576_64bit.phpt - ext/xmlrpc/tests/bug40576_64bit.phpt: - - file bug40576_64bit.phpt was initially added on branch PHP_5_2. - - * ext/ftp/tests/bug37799.phpt - ext/ftp/tests/bug37799.phpt - ext/standard/tests/file/get_current_user.phpt - ext/xmlrpc/tests/bug40576.phpt - ext/xmlrpc/tests/bug40576.phpt: - fix test - - * (PHP_4_4) - NEWS - NEWS - ext/gd/libgd/gdft.c - ext/gd/libgd/gdft.c: - MFH: fix #40578 (imagettftext() multithreading issue) - -2007-02-21 Nuno Lopes - - * ext/standard/tests/general_functions/proc_open02.phpt: - MFB - - * (PHP_5_2) - ext/standard/tests/general_functions/proc_open02.phpt: - use /usr/bin/nohup instead - - * (PHP_5_2) - ext/pdo_sqlite/sqlite/src/parse.c: - fix gcov build (#line stuff) - -2007-02-21 Dmitry Stogov - - * sapi/cgi/fastcgi.c - sapi/cgi/fastcgi.c: - Check for FD_SETSIZE limit - -2007-02-21 Antony Dovgal - - * ext/gd/libgd/gdft.c: - fix #40578 (imagettftext() multithreading issue) - - * (PHP_5_2) - NEWS - ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c - ext/xmlrpc/tests/bug40576.phpt: - MFH: fix #40576 (double values are truncated to 6 decimal digits when - encoding) - - * ext/xmlrpc/libxmlrpc/xml_to_xmlrpc.c - ext/xmlrpc/tests/bug40576.phpt - ext/xmlrpc/tests/bug40576.phpt: - fix bug #40576 (double values are truncated to 6 decimal digits when - encoding) - -2007-02-21 Dmitry Stogov - - * ZendEngine2/zend_hash.c - ZendEngine2/zend_hash.c: - Special case for last iteration - - * (PHP_5_2) - NEWS - TSRM/tsrm_virtual_cwd.c - TSRM/tsrm_virtual_cwd.c: - Fixed bug #40560 (DIR functions do not work on root UNC path) - -2007-02-21 Antony Dovgal - - * sapi/cgi/cgi_main.c: - fix typo - -2007-02-21 Ilia Alshanetsky - - * (PHP_5_2) - ext/soap/php_http.c: - - Improve redirect validation - - * (PHP_5_2) - ext/standard/html.c: - Use strlcpy() rather then strcpy() - -2007-02-21 Stanislav Malyshev - - * (PHP_5_2) - ext/standard/basic_functions.c: - fix putenv - if there was no previous, remove variable from environ - - * ext/com_dotnet/com_olechar.c - ext/com_dotnet/com_olechar.c: - Cosmetic fix - safe_emalloc(nmemb, size, offset) - - * ext/com_dotnet/com_dotnet.c: - MF5.2: CreateInstance requires BSTR (should fix #33188) - - * (PHP_5_2) - ext/com_dotnet/com_dotnet.c: - CreateInstance requires BSTR (should fix #33188) - -2007-02-20 Stanislav Malyshev - - * (PHP_5_2) - ext/com_dotnet/com_dotnet.c: - fix unallocated free - -2007-02-20 Antony Dovgal - - * (PHP_5_2) - acinclude.m4 - configure.in - sapi/cgi/config9.m4: - MFH: move PHP_TEST_WRITE_STDOUT to acinclude.m4 and use it in configure.in - - * acinclude.m4 - configure.in - sapi/cgi/config9.m4: - move PHP_TEST_WRITE_STDOUT to acinclude.m4 and use it in configure.in - its result is used in sapi/cli & sapi/embed, not just sapi/cgi - - * sapi/cgi/cgi_main.c - sapi/cli/php_cli.c: - don't call php_module_startup() directly, use startup functions - patch by Andrei Nigmatulin - - * ext/simplexml/tests/bug38406.phpt - ext/simplexml/tests/bug38406.phpt: - - new test - - * ext/simplexml/simplexml.c: - fix leak, convert unicode values to string before assigning - change error message to use zend_error() since there is no active function - - * (PHP_5_2) - NEWS - ext/simplexml/simplexml.c: - MFH: fix #38406 (crash when assigning objects to SimpleXML attributes) - - * ext/simplexml/simplexml.c: - fix #38406 (crash when assigning objects to SimpleXML attributes) - -2007-02-20 Marcus Boerger - - * (PHP_5_2) - NEWS: - - BFN - - * ext/spl/spl_directory.c - ext/spl/spl_directory.c: - - Make stat based functions throw an exception - -2007-02-20 Antony Dovgal - - * (PHP_5_2) - NEWS: - BFN - - * (PHP_5_2) - ZendEngine2/zend_strtod.c: - MFH: fix #40545 (multithreading issue in zend_strtod()) - - * ZendEngine2/zend_strtod.c: - fix #40545 (multithreading issue in zend_strtod()) - - * sapi/cgi/cgi_main.c: - MFB - -2007-02-20 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - ext/pdo_sqlite/sqlite/VERSION - ext/pdo_sqlite/sqlite/src/btree.c - ext/pdo_sqlite/sqlite/src/build.c - ext/pdo_sqlite/sqlite/src/callback.c - ext/pdo_sqlite/sqlite/src/delete.c - ext/pdo_sqlite/sqlite/src/expr.c - ext/pdo_sqlite/sqlite/src/func.c - ext/pdo_sqlite/sqlite/src/opcodes.h - ext/pdo_sqlite/sqlite/src/os_unix.c - ext/pdo_sqlite/sqlite/src/parse.c - ext/pdo_sqlite/sqlite/src/parse.h - ext/pdo_sqlite/sqlite/src/parse.y - ext/pdo_sqlite/sqlite/src/select.c - ext/pdo_sqlite/sqlite/src/sqliteInt.h - ext/pdo_sqlite/sqlite/src/tclsqlite.c - ext/pdo_sqlite/sqlite/src/test1.c - ext/pdo_sqlite/sqlite/src/test3.c - ext/pdo_sqlite/sqlite/src/update.c - ext/pdo_sqlite/sqlite/src/vdbemem.c - ext/pdo_sqlite/sqlite/src/where.c: - - Upgraded SQLite 3 library to version 3.3.13 - -2007-02-19 Ilia Alshanetsky - - * (PHP_5_2) - ext/session/mod_mm.c: - - Eliminate strcat() usage. - - * (PHP_5_2) - sapi/cgi/cgi_main.c: - - Fixed strlcat() usage. - - -2007-02-19 Marcus Boerger - - * (PHP_5_2) - NEWS - ext/spl/spl_directory.c - ext/spl/spl_directory.c: - - Bugfix #40546: SplFileInfo::getPathInfo() throws an execption if - directory is in root dir. - -2007-02-19 Antony Dovgal - - * (PHP_5_2) - ext/odbc/php_odbc.c: - MFH: check SQLError() return value and output a meaningful errmsg when it - fails - - * ext/odbc/php_odbc.c: - check SQLError() return value and output a meaningful errmsg when it fails - - * tests/basic/022.phpt - tests/basic/023.phpt - tests/classes/bug26737.phpt - tests/classes/bug27504.phpt - tests/lang/034.phpt: - fix tests - - * sapi/cgi/README.FastCGI - sapi/cgi/cgi_main.c: - MFB: Eliminate strcat() usage - Fixed handling of argv[] for GET - - * ext/pgsql/config.m4 - ext/pgsql/config.w32: - MFB: PQfreemem() checks - - * ext/json/json.c - ext/json/tests/bug40503.phpt: - MFB: #40503 (json_encode() value corruption on 32bit systems with overflown - values) - - * (PHP_5_2) - ZendEngine2/zend_alloc.c: - MFH: fix heap protection on SPARC, required by GCC4 - patch by Dmitry - - * ZendEngine2/zend_alloc.c: - fix heap protection on SPARC, required by GCC4 - patch by Dmitry - -2007-02-19 Edin Kadribasic - - * (PHP_5_2) - NEWS: - Info on new lib versions and BFN - -2007-02-19 Dmitry Stogov - - * ext/com_dotnet/com_olechar.c - ext/com_dotnet/com_olechar.c: - typo - -2007-02-19 Marcus Boerger - - * ext/standard/var.c: - - MFH Fixed bug #40465 (Ensure that all PHP elements are printed by - var_dump) - -2007-02-19 Edin Kadribasic - - * (PHP_5_2) - ext/pgsql/config.w32: - Fixed bug #40371 - -2007-02-19 Marcus Boerger - - * ext/standard/info.c: - - WS/CS - - * (PHP_5_2) - ext/spl/spl_iterators.c: - - MFH CachingIterator implements Countable - -2007-02-19 Edin Kadribasic - - * ext/imap/php_imap.c - ext/pgsql/config.w32: - MFB - - * (PHP_5_2) - NEWS - ext/imap/php_imap.c: - Fixed bug #36496 - -2007-02-19 Dmitry Stogov - - * TSRM/tsrm_virtual_cwd.c - TSRM/tsrm_virtual_cwd.c: - On win32 directories in the middle of the patch may be unreadable - - * sapi/cgi/cgi_main.c - sapi/cgi/cgi_main.c: - Initialize "retval" on each request - - * sapi/cgi/fastcgi.c - sapi/cgi/fastcgi.c: - Fixed fcgi_putenv() semantic with NULL value - -2007-02-19 Antony Dovgal - - * ZendEngine2/tests/bug39602.phpt: - fix test - stdout is closed in non-debug mode - -2007-02-18 Ilia Alshanetsky - - * (PHP_5_2) - sapi/cgi/cgi_main.c: - - Eliminate strcat() usage - Fixed handling of argv[] for GET - - * (PHP_5_2) - ext/pgsql/config.m4 - ext/pgsql/config.w32: - PQfreemem checks - - * (PHP_5_2) - NEWS - ext/json/json.c - ext/json/tests/bug40503.phpt - ext/json/tests/bug40503.phpt: - Fixed bug #40503 (json_encode() value corruption on 32bit systems with - overflown values). - -2007-02-17 Stanislav Malyshev - - * ext/pspell/pspell.c - ext/pspell/pspell.c: - use safer functions, check error value - -2007-02-16 Antony Dovgal - - * (PHP_5_2) - ZendEngine2/zend_alloc.c: - fix typo - - * ZendEngine2/zend_alloc.c: - typo in Dmitry's last name =) - -2007-02-16 Dmitry Stogov - - * NEWS - ZendEngine2/zend_compile.c - ZendEngine2/zend_compile.h - ZendEngine2/zend_execute.c - ZendEngine2/zend_execute_API.c - ZendEngine2/zend_globals.h - ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_execute.h: - Added runtime JIT auto-globals fetching and caching - -2007-02-16 Stanislav Malyshev - - * ext/mysqli/mysqli.c - ext/mysqli/mysqli.c: - use error message size - - * (PHP_5_2) - ext/calendar/calendar.c: - fix snprintf size - - * ext/calendar/calendar.c: - use snprintf, increase hebdate buffer - - * (PHP_5_2) - ext/calendar/calendar.c: - increase hebdate buffer, use snprintf - -2007-02-16 Antony Dovgal - - * ZendEngine2/zend_alloc.h: - fix build - -2007-02-16 Stanislav Malyshev - - * ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.h - ZendEngine2/zend_alloc.h: - add safe_realloc - - * (PHP_5_2) - ZendEngine2/zend_alloc.h: - fix typo - -2007-02-16 Dmitry Stogov - - * ext/standard/assert.c - ext/standard/assert.c - ext/standard/basic_functions.c - ext/standard/basic_functions.c: - Optimize out RINIT() - -2007-02-16 Antony Dovgal - - * ext/imap/php_imap.c: - MFB: fix leak - - * (PHP_5_2) - ext/imap/php_imap.c: - fix possible double free - -2007-02-16 Dmitry Stogov - - * ext/standard/assert.c - ext/standard/assert.c - ext/standard/basic_functions.c - ext/standard/basic_functions.c: - Fixed return value of assert_options(ASSERT_CALLBACK) and possible crash - (Andy Wharmby) - - * (PHP_4_4) - NEWS - NEWS - sapi/cgi/cgi_main.c - sapi/cgi/cgi_main.c - sapi/cgi/cgi_main.c: - Fixed bug #40286 (PHP fastcgi with PHP_FCGI_CHILDREN don't kill children - when parent is killed) - -2007-02-16 Antony Dovgal - - * ext/gd/tests/bug38179.phpt: - fix test name - -2007-02-16 Dmitry Stogov - - * ZendEngine2/zend_globals_macros.h - ZendEngine2/zend_globals_macros.h: - Allow C++ extensions to use CG(), EG() ... (Caroline) - - * (PHP_5_2) - NEWS - ZendEngine2/zend_llist.c - ZendEngine2/zend_llist.c: - Fixed zend_llist_remove_tail (Michael Wallner) - -2007-02-16 Antony Dovgal - - * (PHP_4_4) - NEWS: - BFN - - * (PHP_4_4) - ext/interbase/interbase.c: - fix ext/interbase build - -2007-02-16 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - ext/standard/var.c: - - Fixed bug #40465 (Ensure that all PHP elements are printed by var_dump). - - * (PHP_5_2) - ext/imap/php_imap.c: - Reduce stack usage & improve boundary checks - -2007-02-15 Nuno Lopes - - * ext/pdo_sqlite/config.m4: - MFB: fix build on cygwin with windows-style EOLs - - * (PHP_5_2) - ext/pdo_sqlite/config.m4: - fix build on cygwin with windows-style EOLs - - * build/build.mk: - MFB: fix cvsclean on cygwin with windows-style EOLs - - * (PHP_5_2) - build/build.mk: - fix cvsclean on cygwin with windows-style EOLs - -2007-02-15 Antony Dovgal - - * TSRM/TSRM.h - TSRM/tsrm_config_common.h: - fix Cygwin build - (costs us nothing, but makes some people happy) - -2007-02-15 Dmitry Stogov - - * ext/soap/php_schema.c - ext/soap/php_schema.c: - Fixed memory leak - - * (PHP_5_2) - NEWS - ext/soap/php_encoding.c - ext/soap/php_encoding.c: - Fixed bug #40467 (Partial SOAP request sent when XSD sequence or choice - include minOccurs=0) - - * (PHP_5_2) - NEWS - sapi/cgi/cgi_main.c - sapi/cgi/cgi_main.c - sapi/cgi/fastcgi.c - sapi/cgi/fastcgi.c - sapi/cgi/fastcgi.h - sapi/cgi/fastcgi.h: - Fixed bug #40414 (possivle endless fork() loop when running fastcgi) - - * (PHP_5_2) - NEWS - sapi/cgi/fastcgi.c - sapi/cgi/fastcgi.c: - Fixed Bug #40352 (FCGI_WEB_SERVER_ADDRS function get lost) - - * (PHP_5_2) - NEWS - ZendEngine2/zend_compile.c - ZendEngine2/zend_compile.c - ZendEngine2/zend_compile.h - ZendEngine2/zend_compile.h - ZendEngine2/zend_execute_API.c - ZendEngine2/zend_execute_API.c - ZendEngine2/zend_language_scanner.l - ZendEngine2/zend_language_scanner.l - ZendEngine2/zend_opcode.c - ZendEngine2/zend_opcode.c - ZendEngine2/tests/bug40236.inc - ZendEngine2/tests/bug40236.inc - ZendEngine2/tests/bug40236.inc - ZendEngine2/tests/bug40236.phpt - ZendEngine2/tests/bug40236.phpt - ZendEngine2/tests/bug40236.phpt: - Fixed bug #40236 (php -a function allocation eats memory) - -2007-02-15 Antony Dovgal - - * (PHP_4_4) - ext/session/session.c - ext/session/tests/002.phpt: - fix segfault in php_add_session_var() - - * (PHP_4_4) - ext/standard/string.c: - fix possible off-by-one in str_(i)replace() - -2007-02-15 Ilia Alshanetsky - - * (PHP_5_2) - ext/mcrypt/mcrypt.c: - use constant - - * (PHP_5_2) - ext/mcrypt/mcrypt.c: - - Improved validation route for size parameter of the mcrypt_create_iv() - function. - - * (PHP_5_2) - ext/mime_magic/mime_magic.c: - Fixed a possible memory corruption inside mime_content_type() on a - non-existent file. - -2007-02-14 Derick Rethans - - * (PHP_5_2) - ext/date/php_date.c: - - MFH: Clarify the source of the timezone data. - - * ext/date/php_date.c: - - Clarify the source of the timezone data. - -2007-02-14 Nuno Lopes - - * ext/standard/tests/general_functions/bug39322.phpt - ext/standard/tests/general_functions/bug40398.phpt - ext/standard/tests/general_functions/error_get_last.phpt - ext/standard/tests/general_functions/proc_open02.phpt: - fix a few tests in unicode mode - - * ext/standard/proc_open.c - ext/standard/tests/general_functions/bug39322.phpt - ext/standard/tests/general_functions/phpcredits.phpt - ext/standard/tests/general_functions/proc_open02.phpt: - MFB - - * (PHP_5_2) - NEWS - ext/standard/proc_open.c - ext/standard/tests/general_functions/bug39322.phpt - ext/standard/tests/general_functions/bug39322.phpt - ext/standard/tests/general_functions/proc_open02.phpt - ext/standard/tests/general_functions/proc_open02.phpt: - Fixed bug #39322 (proc_terminate() destroys process resource) - -2007-02-14 Andi Gutmans - - * (PHP_5_2) - sapi/cgi/CREDITS: - - Give Dmitry credit for all the FastCGI work - -2007-02-13 Ilia Alshanetsky - - * (PHP_5_2) - ext/standard/string.c: - - Make sure p is not pointing to the start of the buffer - - * (PHP_5_2) - main/streams/plain_wrapper.c: - - Fixed a memory leak on highlight_file() with a non-existant file - -2007-02-13 Nuno Lopes - - * (PHP_4_4) - NEWS - ext/pcre/config0.m4 - ext/pcre/pcrelib/.cvsignore - ext/pcre/pcrelib/COPYING - ext/pcre/pcrelib/ChangeLog - ext/pcre/pcrelib/LICENCE - ext/pcre/pcrelib/NEWS - ext/pcre/pcrelib/NON-UNIX-USE - ext/pcre/pcrelib/README - ext/pcre/pcrelib/dftables.c - ext/pcre/pcrelib/pcre.h - ext/pcre/pcrelib/pcre_compile.c - ext/pcre/pcrelib/pcre_config.c - ext/pcre/pcrelib/pcre_dfa_exec.c - ext/pcre/pcrelib/pcre_exec.c - ext/pcre/pcrelib/pcre_fullinfo.c - ext/pcre/pcrelib/pcre_get.c - ext/pcre/pcrelib/pcre_globals.c - ext/pcre/pcrelib/pcre_info.c - ext/pcre/pcrelib/pcre_internal.h - ext/pcre/pcrelib/pcre_maketables.c - ext/pcre/pcrelib/pcre_newline.c - ext/pcre/pcrelib/pcre_ord2utf8.c - ext/pcre/pcrelib/pcre_printint.src - ext/pcre/pcrelib/pcre_refcount.c - ext/pcre/pcrelib/pcre_scanner.cc - ext/pcre/pcrelib/pcre_scanner.h - ext/pcre/pcrelib/pcre_scanner_unittest.cc - ext/pcre/pcrelib/pcre_study.c - ext/pcre/pcrelib/pcre_tables.c - ext/pcre/pcrelib/pcre_try_flipped.c - ext/pcre/pcrelib/pcre_ucp_searchfuncs.c - ext/pcre/pcrelib/pcre_valid_utf8.c - ext/pcre/pcrelib/pcre_version.c - ext/pcre/pcrelib/pcre_xclass.c - ext/pcre/pcrelib/pcrecpp.cc - ext/pcre/pcrelib/pcrecpp.h - ext/pcre/pcrelib/pcrecpp_unittest.cc - ext/pcre/pcrelib/pcregrep.c - ext/pcre/pcrelib/pcreposix.c - ext/pcre/pcrelib/pcreposix.h - ext/pcre/pcrelib/pcretest.c - ext/pcre/pcrelib/ucp.h - ext/pcre/pcrelib/ucpinternal.h - ext/pcre/pcrelib/ucptable.c - ext/pcre/pcrelib/doc/.cvsignore - ext/pcre/pcrelib/doc/Tech.Notes - ext/pcre/pcrelib/doc/pcre.txt - ext/pcre/pcrelib/testdata/.cvsignore - ext/pcre/pcrelib/testdata/grepinput - ext/pcre/pcrelib/testdata/grepinput8 - ext/pcre/pcrelib/testdata/grepoutput - ext/pcre/pcrelib/testdata/grepoutput8 - ext/pcre/pcrelib/testdata/testinput1 - ext/pcre/pcrelib/testdata/testinput2 - ext/pcre/pcrelib/testdata/testinput4 - ext/pcre/pcrelib/testdata/testinput5 - ext/pcre/pcrelib/testdata/testinput6 - ext/pcre/pcrelib/testdata/testinput7 - ext/pcre/pcrelib/testdata/testinput8 - ext/pcre/pcrelib/testdata/testoutput1 - ext/pcre/pcrelib/testdata/testoutput2 - ext/pcre/pcrelib/testdata/testoutput3 - ext/pcre/pcrelib/testdata/testoutput4 - ext/pcre/pcrelib/testdata/testoutput5 - ext/pcre/pcrelib/testdata/testoutput6 - ext/pcre/pcrelib/testdata/testoutput7 - ext/pcre/pcrelib/testdata/testoutput8 - win32/php4dllts.dsp: - upgrade bundled PCRE to version 7.0 - -2007-02-13 Antony Dovgal - - * ext/oci8/php_oci8_int.h: - output debug messages before calling OCI functions - -2007-02-13 Ilia Alshanetsky - - * (PHP_5_2) - ext/imap/php_imap.c: - - Fixed a memory leak inside imap_utf8() - -2007-02-13 Nuno Lopes - - * (PHP_5_2) - NEWS - ext/standard/proc_open.c - ext/standard/tests/general_functions/bug34794.phpt - ext/standard/tests/general_functions/bug34794.phpt: - Fixed bug #34794 (proc_close() hangs when used with two processes) - -2007-02-13 Antony Dovgal - - * main/streams/userspace.c: - improve php_userstreamop_seek() - check for errors in stream_seek() and return correct status - -2007-02-13 Nuno Lopes - - * ext/ftp/ftp.c - ext/ftp/tests/bug37799.phpt - ext/ftp/tests/server.inc - ext/standard/proc_open.c - ext/standard/tests/general_functions/bug34794.phpt: - MFB - - * (PHP_5_2) - NEWS - ext/ftp/ftp.c - ext/ftp/tests/bug37799.phpt - ext/ftp/tests/bug37799.phpt - ext/ftp/tests/server.inc: - Fixed bug #37799 (ftp_ssl_connect() falls back to non-ssl connection) - -2007-02-13 Derick Rethans - - * (PHP_4_4) - NEWS - configure.in - main/php_version.h: - - Back to -dev. - - * (PHP_4_4) - NEWS - configure.in - main/php_version.h: - - Package 4.4.5. - -2007-02-13 Antony Dovgal - - * (PHP_5_2) - NEWS - ext/standard/proc_open.c: - fix #40455 (proc_open() uses wrong commandline when safe_mode_exec_dir is - set) - - * ZendEngine2/tests/018.phpt - ext/standard/tests/file/flock.phpt - ext/standard/tests/general_functions/ini_get_all.phpt - ext/standard/tests/strings/convert_cyr_string.phpt - ext/standard/tests/strings/crypt.phpt: - new/improved tests - - * ZendEngine2/tests/018.phpt - ZendEngine2/tests/018.phpt - ext/standard/tests/file/flock.phpt - ext/standard/tests/file/flock.phpt - ext/standard/tests/general_functions/ini_get_all.phpt - ext/standard/tests/general_functions/ini_get_all.phpt - ext/standard/tests/strings/convert_cyr_string.phpt - ext/standard/tests/strings/convert_cyr_string.phpt - ext/standard/tests/strings/crypt.phpt: - - file 018.phpt was initially added on branch PHP_5_2. - - * ext/standard/file.c: - plug possible leak - - * (PHP_5_2) - ext/filter/.cvsignore - ext/pdo/.cvsignore - ext/pdo_sqlite/.cvsignore - ext/xmlreader/.cvsignore - ext/zip/.cvsignore - ext/zip/lib/.cvsignore: - fix .cvsignore's - -2007-02-13 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - ext/standard/string.c - ext/standard/tests/strings/bug40432.phpt - ext/standard/tests/strings/bug40432.phpt: - - Fixed bug #40432 (strip_tags() fails with greater than in attribute). - -2007-02-13 Marcus Boerger - - * ext/spl/examples/phar_from_dir.php: - - Drop useless stuff - - * ext/spl/examples/phar_from_dir.php - ext/spl/examples/phar_from_dir.php: - - - Add new example - -2007-02-12 Antony Dovgal - - * ext/simplexml/simplexml.c - ext/simplexml/tests/bug40451.phpt: - MFB: #40451 (addAttribute() may crash when used with non-existent child - node) - - * (PHP_5_2) - ext/simplexml/simplexml.c - ext/simplexml/tests/bug40451.phpt - ext/simplexml/tests/bug40451.phpt: - fix #40451 (addAttribute() may crash when used with non-existent child - node) - - * (PHP_5_2) - ext/standard/iptc.c: - upgrade to new parameter parsing API - + mostly ws/cs fixes, sort of MFH - - * (PHP_5_2) - NEWS - ext/standard/iptc.c: - MFH: fix #40109 (iptcembed fails on non-jfif jpegs) - - * ext/standard/iptc.c: - fix bug #40109 (iptcembed fails on non-jfif jpegs) - + use safe_emalloc - - * (PHP_4_4) - NEWS - main/output.c - main/php_output.h: - fix #40335 (Compile fails when using GCC 4.1.1/binutils 2.17) - - * ext/sockets/tests/ipv6loop.phpt - ext/standard/tests/file/stream_002.phpt: - fix tests - - * ext/standard/tests/network/inet.phpt - ext/standard/tests/network/inet_ipv6.phpt - ext/standard/tests/network/inet_ipv6.phpt: - add separate IPv6 test - - * ext/pcre/tests/backtrack_limit.phpt - ext/pcre/tests/bug27103.phpt - ext/pcre/tests/invalid_utf8.phpt - ext/pcre/tests/pcre_anchored.phpt - ext/pcre/tests/preg_replace2.phpt - ext/pcre/tests/recursion_limit.phpt: - add SKIPIF sections to check if PCRE has the functionality tested/used - - * ext/oci8/config.m4 - ext/oci8/oci8.c - ext/oci8/php_oci8_int.h: - typofixes and other improvements by Chris Jones - - * (PHP_5_2) - NEWS: - fix news entry - -2007-02-12 Ilia Alshanetsky - - * (PHP_5_2) - ext/readline/readline.c: - - Fixed a memory leak inside readline_completion_function() on non-callable - callback. - -2007-02-11 Antony Dovgal - - * (PHP_5_2) - ext/standard/tests/strings/str_ireplace.phpt: - add test - - * ext/standard/tests/strings/str_ireplace.phpt - ext/standard/tests/strings/str_ireplace.phpt: - - new test - - * tests/lang/bug30638.phpt: - add a note - - * ext/standard/tests/file/bug40374.phpt - ext/standard/tests/file/bug40374.phpt: - fix test - -2007-02-11 Nuno Lopes - - * ext/tidy/tests/019.phpt - ext/tidy/tests/028.phpt: - sync tests with php 5.2 - - * (PHP_5_2) - NEWS - ext/tidy/tidy.c - ext/tidy/tests/028.phpt - ext/tidy/tests/028.phpt: - merge the tidyNode::getParent() patch from HEAD - -2007-02-11 Pierre-Alain Joye - - * ext/gd/gd.c: - - MFB: Fixed bug #40428, imagepstext() doesn't accept optional parameter - (Pierre) - - * (PHP_5_2) - NEWS - ext/gd/gd.c: - - Fixed bug #40428, imagepstext() doesn't accept optional parameter - (Pierre) - -2007-02-11 Antony Dovgal - - * ext/imap/config.m4: - fix typos - -2007-02-10 Nuno Lopes - - * (PHP_4_4) - ext/imap/config.m4: - fix typos - -2007-02-10 Antony Dovgal - - * ext/reflection/php_reflection.c - ext/reflection/tests/bug40431.phpt - ext/reflection/tests/bug40431.phpt: - fix #40431 (dynamic properties may cause crash in ReflectionProperty - methods) - -2007-02-10 Nuno Lopes - - * (PHP_5_2) - ext/pdo_sqlite/sqlite/src/parse.c: - fix gcov build (#line directives) - -2007-02-10 Antony Dovgal - - * ext/posix/posix.c: - use the same ifdef anf get rid of "unused var" warnings - - * ext/standard/string.c: - fix off-by-one accidentally introduced by safe_emalloc() patch - -2007-02-09 Nuno Lopes - - * ext/pcre/config.w32 - ext/pcre/config0.m4 - ext/pcre/pcrelib/.cvsignore - ext/pcre/pcrelib/COPYING - ext/pcre/pcrelib/ChangeLog - ext/pcre/pcrelib/LICENCE - ext/pcre/pcrelib/NEWS - ext/pcre/pcrelib/NON-UNIX-USE - ext/pcre/pcrelib/README - ext/pcre/pcrelib/dftables.c - ext/pcre/pcrelib/pcre.h - ext/pcre/pcrelib/pcre_compile.c - ext/pcre/pcrelib/pcre_config.c - ext/pcre/pcrelib/pcre_exec.c - ext/pcre/pcrelib/pcre_fullinfo.c - ext/pcre/pcrelib/pcre_get.c - ext/pcre/pcrelib/pcre_globals.c - ext/pcre/pcrelib/pcre_info.c - ext/pcre/pcrelib/pcre_internal.h - ext/pcre/pcrelib/pcre_maketables.c - ext/pcre/pcrelib/pcre_newline.c - ext/pcre/pcrelib/pcre_ord2utf8.c - ext/pcre/pcrelib/pcre_printint.src - ext/pcre/pcrelib/pcre_refcount.c - ext/pcre/pcrelib/pcre_scanner.cc - ext/pcre/pcrelib/pcre_scanner.h - ext/pcre/pcrelib/pcre_scanner_unittest.cc - ext/pcre/pcrelib/pcre_study.c - ext/pcre/pcrelib/pcre_tables.c - ext/pcre/pcrelib/pcre_try_flipped.c - ext/pcre/pcrelib/pcre_ucp_searchfuncs.c - ext/pcre/pcrelib/pcre_valid_utf8.c - ext/pcre/pcrelib/pcre_version.c - ext/pcre/pcrelib/pcre_xclass.c - ext/pcre/pcrelib/pcrecpp.cc - ext/pcre/pcrelib/pcrecpp.h - ext/pcre/pcrelib/pcrecpp_unittest.cc - ext/pcre/pcrelib/pcregrep.c - ext/pcre/pcrelib/pcreposix.c - ext/pcre/pcrelib/pcreposix.h - ext/pcre/pcrelib/pcretest.c - ext/pcre/pcrelib/ucp.h - ext/pcre/pcrelib/ucpinternal.h - ext/pcre/pcrelib/ucptable.c - ext/pcre/pcrelib/doc/.cvsignore - ext/pcre/pcrelib/doc/Tech.Notes - ext/pcre/pcrelib/doc/pcre.txt - ext/pcre/pcrelib/testdata/grepinput8 - ext/pcre/pcrelib/testdata/grepoutput - ext/pcre/pcrelib/testdata/grepoutput8 - ext/pcre/pcrelib/testdata/testinput1 - ext/pcre/pcrelib/testdata/testinput2 - ext/pcre/pcrelib/testdata/testinput4 - ext/pcre/pcrelib/testdata/testinput5 - ext/pcre/pcrelib/testdata/testinput6 - ext/pcre/pcrelib/testdata/testinput7 - ext/pcre/pcrelib/testdata/testinput8 - ext/pcre/pcrelib/testdata/testoutput1 - ext/pcre/pcrelib/testdata/testoutput2 - ext/pcre/pcrelib/testdata/testoutput3 - ext/pcre/pcrelib/testdata/testoutput4 - ext/pcre/pcrelib/testdata/testoutput5 - ext/pcre/pcrelib/testdata/testoutput6 - ext/pcre/pcrelib/testdata/testoutput7 - ext/pcre/pcrelib/testdata/testoutput8 - ext/pcre/tests/bug40195.phpt: - upgrade PCRE to version 7.0 - - * ext/pcre/tests/bug40195.phpt - ext/pcre/tests/bug40195.phpt: - - file bug40195.phpt was initially added on branch PHP_5_2. - - * ext/pcre/pcrelib/pcre_newline.c - ext/pcre/pcrelib/pcre_newline.c - ext/pcre/pcrelib/pcre_ord2utf8.c - ext/pcre/pcrelib/pcre_printint.src - ext/pcre/pcrelib/pcre_refcount.c - ext/pcre/pcrelib/pcre_scanner.cc - ext/pcre/pcrelib/pcre_scanner.h - ext/pcre/pcrelib/pcre_scanner_unittest.cc - ext/pcre/pcrelib/pcre_study.c - ext/pcre/pcrelib/pcre_tables.c - ext/pcre/pcrelib/pcre_try_flipped.c - ext/pcre/pcrelib/pcre_ucp_searchfuncs.c - ext/pcre/pcrelib/pcre_valid_utf8.c - ext/pcre/pcrelib/pcre_version.c - ext/pcre/pcrelib/pcre_xclass.c - ext/pcre/pcrelib/pcrecpp.cc - ext/pcre/pcrelib/pcrecpp.h - ext/pcre/pcrelib/pcrecpp_unittest.cc - ext/pcre/pcrelib/pcregrep.c - ext/pcre/pcrelib/pcreposix.c - ext/pcre/pcrelib/pcreposix.h - ext/pcre/pcrelib/pcretest.c - ext/pcre/pcrelib/ucp.h - ext/pcre/pcrelib/ucpinternal.h - ext/pcre/pcrelib/ucptable.c - ext/pcre/pcrelib/doc/.cvsignore - ext/pcre/pcrelib/doc/Tech.Notes - ext/pcre/pcrelib/doc/pcre.txt - ext/pcre/pcrelib/testdata/grepinput - ext/pcre/pcrelib/testdata/grepinput8 - ext/pcre/pcrelib/testdata/grepinput8 - ext/pcre/pcrelib/testdata/grepoutput - ext/pcre/pcrelib/testdata/grepoutput8 - ext/pcre/pcrelib/testdata/grepoutput8 - ext/pcre/pcrelib/testdata/testinput1 - ext/pcre/pcrelib/testdata/testinput2 - ext/pcre/pcrelib/testdata/testinput4 - ext/pcre/pcrelib/testdata/testinput5 - ext/pcre/pcrelib/testdata/testinput6 - ext/pcre/pcrelib/testdata/testinput7 - ext/pcre/pcrelib/testdata/testinput8 - ext/pcre/pcrelib/testdata/testoutput1 - ext/pcre/pcrelib/testdata/testoutput2 - ext/pcre/pcrelib/testdata/testoutput3 - ext/pcre/pcrelib/testdata/testoutput4 - ext/pcre/pcrelib/testdata/testoutput5 - ext/pcre/pcrelib/testdata/testoutput6 - ext/pcre/pcrelib/testdata/testoutput7 - ext/pcre/pcrelib/testdata/testoutput8: - - file pcre_newline.c was initially added on branch PHP_5_2. - - * (PHP_5_2) - NEWS - ext/pcre/config.w32 - ext/pcre/config0.m4 - ext/pcre/pcrelib/COPYING - ext/pcre/pcrelib/ChangeLog - ext/pcre/pcrelib/LICENCE - ext/pcre/pcrelib/NEWS - ext/pcre/pcrelib/NON-UNIX-USE - ext/pcre/pcrelib/README - ext/pcre/pcrelib/dftables.c - ext/pcre/pcrelib/pcre.h - ext/pcre/pcrelib/pcre_compile.c - ext/pcre/pcrelib/pcre_config.c - ext/pcre/pcrelib/pcre_exec.c - ext/pcre/pcrelib/pcre_fullinfo.c - ext/pcre/pcrelib/pcre_get.c - ext/pcre/pcrelib/pcre_globals.c - ext/pcre/pcrelib/pcre_info.c - ext/pcre/pcrelib/pcre_internal.h - ext/pcre/pcrelib/pcre_maketables.c: - upgrade pcre to version 7.0 - -2007-02-09 Antony Dovgal - - * (PHP_5_2) - NEWS: - BFN - - * (PHP_5_2) - ext/posix/posix.c: - MFH: fix #40410 (ext/posix does not compile on MacOS 10.3.9) - - * ext/posix/posix.c: - fix #40410 (ext/posix does not compile on MacOS 10.3.9) - -2007-02-09 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - ext/pdo_sqlite/sqlite/VERSION - ext/pdo_sqlite/sqlite/src/alter.c - ext/pdo_sqlite/sqlite/src/btree.c - ext/pdo_sqlite/sqlite/src/btree.h - ext/pdo_sqlite/sqlite/src/build.c - ext/pdo_sqlite/sqlite/src/date.c - ext/pdo_sqlite/sqlite/src/expr.c - ext/pdo_sqlite/sqlite/src/func.c - ext/pdo_sqlite/sqlite/src/insert.c - ext/pdo_sqlite/sqlite/src/legacy.c - ext/pdo_sqlite/sqlite/src/loadext.c - ext/pdo_sqlite/sqlite/src/main.c - ext/pdo_sqlite/sqlite/src/opcodes.c - ext/pdo_sqlite/sqlite/src/opcodes.h - ext/pdo_sqlite/sqlite/src/os.h - ext/pdo_sqlite/sqlite/src/os_common.h - ext/pdo_sqlite/sqlite/src/os_unix.c - ext/pdo_sqlite/sqlite/src/os_win.c - ext/pdo_sqlite/sqlite/src/pager.c - ext/pdo_sqlite/sqlite/src/pager.h - ext/pdo_sqlite/sqlite/src/parse.c - ext/pdo_sqlite/sqlite/src/parse.y - ext/pdo_sqlite/sqlite/src/pragma.c - ext/pdo_sqlite/sqlite/src/prepare.c - ext/pdo_sqlite/sqlite/src/printf.c - ext/pdo_sqlite/sqlite/src/random.c - ext/pdo_sqlite/sqlite/src/select.c - ext/pdo_sqlite/sqlite/src/shell.c - ext/pdo_sqlite/sqlite/src/sqlite.h.in - ext/pdo_sqlite/sqlite/src/sqlite3ext.h - ext/pdo_sqlite/sqlite/src/sqliteInt.h - ext/pdo_sqlite/sqlite/src/table.c - ext/pdo_sqlite/sqlite/src/tclsqlite.c - ext/pdo_sqlite/sqlite/src/test1.c - ext/pdo_sqlite/sqlite/src/test3.c - ext/pdo_sqlite/sqlite/src/tokenize.c - ext/pdo_sqlite/sqlite/src/trigger.c - ext/pdo_sqlite/sqlite/src/utf.c - ext/pdo_sqlite/sqlite/src/util.c - ext/pdo_sqlite/sqlite/src/vacuum.c - ext/pdo_sqlite/sqlite/src/vdbe.c - ext/pdo_sqlite/sqlite/src/vdbe.h - ext/pdo_sqlite/sqlite/src/vdbeInt.h - ext/pdo_sqlite/sqlite/src/vdbeapi.c - ext/pdo_sqlite/sqlite/src/vdbeaux.c - ext/pdo_sqlite/sqlite/src/vdbemem.c - ext/pdo_sqlite/sqlite/src/vtab.c - ext/pdo_sqlite/sqlite/src/where.c: - - Upgraded SQLite 3 to version 3.3.12 - -2007-02-08 Marcus Boerger - - * ext/spl/spl_array.h: - - Add include - - * (PHP_5_2) - ext/spl/spl_array.c - ext/spl/spl_array.h - ext/spl/spl_iterators.c - ext/spl/spl_iterators.h: - - MFH Rearrange code: mode Countable from spl_array.c to spl_iterator.c - - * (PHP_5_2) - NEWS - ext/spl/spl_observer.c: - - MFH: Fix Bug #39836 SplObjectStorage empty after unserialize - - * ext/spl/spl_array.c - ext/spl/spl_array.h - ext/spl/spl_iterators.c - ext/spl/spl_iterators.h: - - Moving Countable from spl_array.c to spl_iterator.c - allows CachingIterator to implement Countable - -2007-02-08 Nuno Lopes - - * ext/tidy/tidy.c - ext/tidy/tests/004.phpt - ext/tidy/tests/007.phpt - ext/tidy/tests/010.phpt - ext/tidy/tests/011.phpt - ext/tidy/tests/012.phpt - ext/tidy/tests/019.phpt - ext/tidy/tests/024.phpt - ext/tidy/tests/025.phpt - ext/tidy/tests/027.phpt: - fix a few tests (segfaults + wrong output) - -2007-02-08 Marcus Boerger - - * ext/standard/basic_functions.c - ext/standard/tests/general_functions/bug40398.phpt - ext/standard/tests/general_functions/call_user_func_return.phpt: - - Simplify call_user_func/call_user_func_array implementation - - Allow call_user_func/call_user_func_array to return reference - - * .gdbinit: - - Show whether a zval is a reference in printzv user command - -2007-02-08 Nuno Lopes - - * run-tests.php: - MFB: remove ereg() calls - - * (PHP_5_2) - run-tests.php: - convert all ereg*() calls to preg_match(), so that we become future-proof - (ereg is scheduled for removal in PHP 6) - -2007-02-08 Marcus Boerger - - * ZendEngine2/zend_execute.c - ZendEngine2/zend_execute_API.c - ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_execute.h: - - No reason not to pass return_value_ptr for non return-by-reference - functions - - * ZendEngine2/zend_API.c - ZendEngine2/zend_API.h: - - Fix potential issue with 'f'-parameter parsing - - Complete zend_fcall_info_*() API - - * ZendEngine2/zend_execute_API.c: - - Do not set is_ref/refcount for functions that return by reference - - * ZendEngine2/zend_API.c - ZendEngine2/zend_API.h: - - More ZEND_API's - - * ext/standard/tests/general_functions/bug40398.phpt - ext/standard/tests/general_functions/bug40398.phpt: - - - Add new test - -2007-02-08 Ilia Alshanetsky - - * (PHP_5_2) - TODO: - - Remove already done item from the todo - -2007-02-07 Antony Dovgal - - * (PHP_5_2) - ext/standard/tests/file/bug40374.phpt: - add test - - * ext/standard/tests/file/bug40374.phpt - ext/standard/tests/file/bug40374.phpt: - - add test - - * sapi/apache2handler/mod_php.c: - explicitly set module name - -2007-02-07 Nuno Lopes - - * (PHP_5_2) - run-tests.php: - MFH: use getenv() instead of _ENV - enable multiple error reporting on the same test - -2007-02-07 Antony Dovgal - - * (PHP_5_2) - configure.in: - MFH: check if GCC on MacOS supports -no-cpp-precomp before using it - - * sapi/apache2filter/config.m4 - sapi/apache2filter/php.sym - sapi/apache2filter/php_apache.h - sapi/apache2filter/sapi_apache2.c: - upgrade apache2filter to php6 - - * sapi/apache2handler/.cvsignore - sapi/apache2handler/config.m4 - sapi/apache2handler/config.w32 - sapi/apache2handler/mod_php.c - sapi/apache2handler/mod_php5.c - sapi/apache2handler/php.sym - sapi/apache2handler/php5apache2.dsp - sapi/apache2handler/php_apache.h - sapi/apache2handler/sapi_apache2.c: - change "php5" to "php6" everywhere - rename mod_php5.c to mod_php.c - -2007-02-07 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - configure.in - main/php_version.h: - - Back to dev - - * (PHP_5_2) - NEWS - configure.in - main/php_version.h: - - 5.2.1 - -2007-02-06 Antony Dovgal - - * main/php_open_temporary_file.c: - use strdup() - -2007-02-06 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - ext/session/php_session.h: - - Fixed Bug #40274 (Sessions fail with numeric root keys). - -2007-02-05 Marcus Boerger - - * ext/spl/spl_engine.c - ext/spl/spl_engine.h: - - Add missing PHPAPI - -2007-02-05 Andrei Zmievski - - * README.PARAMETER_PARSING_API: - Update - - * (PHP_5_2) - README.PARAMETER_PARSING_API: - Update ! docs. - -2007-02-05 Andi Gutmans - - * main/streams/php_stream_transport.h - main/streams/php_stream_transport.h: - - Make sure to be ANSI C compliant - -2007-02-04 Frank M. Kromann - - * ext/mssql/php_mssql.c: - MFB: #39213 - Fix for '' returned as ' '. - This only works with FreeTDS as microsofts library returns a length of 1 - for an empty string! - - * (PHP_5_2) - ext/mssql/php_mssql.c: - Fix for '' returned as ' '. - This only works with FreeTDS as microsofts library returns a length of 1 - for an empty string! - -2007-02-04 Ilia Alshanetsky - - * ext/standard/http.c: - - Added a double free check. - -2007-02-04 Frank M. Kromann - - * ext/mbstring/config.w32: - MFB: Fix win32 build - - * (PHP_5_2) - ext/mbstring/config.w32: - Fix win32 build - -2007-02-03 Marcus Boerger - - * (PHP_5_2) - main/php_memory_streams.h - main/streams/memory.c: - - MFH Add PHPAPI to stuff needed by streams API for shared exts - - MFH Readonly issue fix to memory streams option handling (still not - activated in 5.2.1 though) - - * main/main.c - main/php_open_temporary_file.c - main/php_open_temporary_file.h: - - Fix memleak - - * main/php_memory_streams.h - main/streams/memory.c: - - Fix mem/temp stream exports and readonlyissue - -2007-02-02 Andrei Zmievski - - * ZendEngine2/zend_API.h: - Typos. - - * README.PARAMETER_PARSING_API - ZendEngine2/zend_API.c - ZendEngine2/zend_API.h: - - Add ^ specifier that returns original string type before conversion. - - Add ZVAL_ENC_STRING[L] macro that allows returning either a binary - string or an encoded strings as Unicode based on type, instead of - UG(unicode) - -2007-02-02 Michael Wallner - - * ext/zlib/zlib.c: - - add note about the past for the future, see - http://bugs.php.net/?id=40310&edit=1 - -2007-02-02 andy wharmby - - * NEWS: - Remove bug fix entries #34564 and #37927 as now in 5.2.1 - - * (PHP_5_2) - NEWS - ext/com_dotnet/com_misc.c: - Fixed bug #37927 (Prevent trap when COM extension processes argument of - type VT_DISPATCH|VT_REF) - - * (PHP_5_2) - NEWS - ext/com_dotnet/com_misc.c - ext/com_dotnet/com_variant.c - ext/com_dotnet/com_wrapper.c - ext/com_dotnet/php_com_dotnet_internal.h: - Fixed bug #34564 (COM extension not returning modified "out" argument) - -2007-02-02 Antony Dovgal - - * ZendEngine2/tests/errmsg_001.phpt - ZendEngine2/tests/errmsg_002.phpt - ZendEngine2/tests/errmsg_003.phpt - ZendEngine2/tests/errmsg_004.phpt - ZendEngine2/tests/errmsg_005.phpt - ZendEngine2/tests/errmsg_006.phpt - ZendEngine2/tests/errmsg_007.phpt - ZendEngine2/tests/errmsg_008.phpt - ZendEngine2/tests/errmsg_009.phpt - ZendEngine2/tests/errmsg_010.phpt - ZendEngine2/tests/errmsg_011.phpt - ZendEngine2/tests/errmsg_012.phpt - ZendEngine2/tests/errmsg_013.phpt - ZendEngine2/tests/errmsg_014.phpt - ZendEngine2/tests/errmsg_015.phpt - ZendEngine2/tests/errmsg_016.phpt - ZendEngine2/tests/errmsg_017.phpt - ZendEngine2/tests/errmsg_018.phpt - ZendEngine2/tests/errmsg_019.phpt - ZendEngine2/tests/errmsg_020.phpt - ZendEngine2/tests/errmsg_021.phpt - ZendEngine2/tests/errmsg_022.phpt - ZendEngine2/tests/errmsg_023.phpt - ZendEngine2/tests/errmsg_024.phpt - ZendEngine2/tests/errmsg_025.phpt - ZendEngine2/tests/errmsg_026.phpt - ZendEngine2/tests/errmsg_027.phpt - ZendEngine2/tests/errmsg_028.phpt - ZendEngine2/tests/errmsg_029.phpt - ZendEngine2/tests/errmsg_030.phpt - ZendEngine2/tests/errmsg_031.phpt - ZendEngine2/tests/errmsg_032.phpt - ZendEngine2/tests/errmsg_033.phpt - ZendEngine2/tests/errmsg_034.phpt - ZendEngine2/tests/errmsg_035.phpt - ZendEngine2/tests/errmsg_036.phpt - ZendEngine2/tests/errmsg_037.phpt - ZendEngine2/tests/errmsg_038.phpt - ZendEngine2/tests/errmsg_039.phpt - ZendEngine2/tests/errmsg_040.phpt - ZendEngine2/tests/errmsg_041.phpt - ZendEngine2/tests/errmsg_042.phpt - ZendEngine2/tests/errmsg_043.phpt - ZendEngine2/tests/globals.inc - ZendEngine2/tests/globals_001.phpt - ZendEngine2/tests/globals_002.phpt - ZendEngine2/tests/globals_003.phpt - ZendEngine2/tests/globals_004.phpt: - add new tests - - * ZendEngine2/zend_API.c: - -exactly 1 arguments - +exactly 1 argument - -2007-02-02 andy wharmby - - * NEWS: - Update NEWS for ealier bug fixes - -2007-02-02 Antony Dovgal - - * ZendEngine2/tests/bug38779.phpt - ZendEngine2/tests/bug38779_1.phpt: - fix tests - - * ZendEngine2/zend_compile.c: - fix isset() & unset() with CV-superglobals - see #40311 - -2007-02-02 andy wharmby - - * ext/com_dotnet/com_misc.c - ext/com_dotnet/com_variant.c - ext/com_dotnet/com_wrapper.c - ext/com_dotnet/php_com_dotnet_internal.h: - ADW: Fix COM extension bug #35463. Fix in/out argument processing - -2007-02-02 Ilia Alshanetsky - - * (PHP_5_2) - ext/pdo/pdo_sql_parser.c: - - Better generated parser - - * (PHP_5_2) - ext/pdo/tests/bug_39656.phpt - ext/pdo/tests/bug_40285.phpt - ext/pdo/tests/bug_40285.phpt: - - Fixed test mixup - -2007-02-01 andy wharmby - - * ext/com_dotnet/com_misc.c: - ADW: Fixed COM extension bug #37927. Correct the processing of in/out - arguments of type VT_DISPATCH|VT_REF - -2007-02-01 Dmitry Stogov - - * ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_execute.h - ZendEngine2/zend_vm_execute.h: - Removed dead code - - * ZendEngine2/zend_compile.c - ZendEngine2/zend_compile.c: - Fixed possible crash because of dereference of NULL - - * ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.c: - Enable canary protection in DEBUG mode only. - -2007-02-01 Antony Dovgal - - * ext/standard/user_filters.c: - bailout if bucket is NULL - - * ext/standard/incomplete_class.c: - free class_name when necessary - - * (PHP_5_2) - ext/iconv/iconv.c: - plug leak - - * (PHP_5_2) - ext/standard/string.c: - fix leaks on error - -2007-02-01 Derick Rethans - - * (PHP_4_4) - NEWS - configure.in - main/php_version.h: - - Back to -dev. - - * (PHP_4_4) - NEWS - configure.in - main/php_version.h: - - Go with RC2. - -2007-02-01 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - ext/pdo/pdo_sql_parser.c - ext/pdo/pdo_sql_parser.re - ext/pdo/tests/bug_39656.phpt: - - Fixed bug #40285 (The PDO prepare parser goes into an infinite loop in - some instances). - -2007-01-31 Antony Dovgal - - * acinclude.m4: - use correct comment marker (dnl, not #) - add comment regarding AC_DECL_YYTEXT and the annoying warning - (just in case I'm not the only one who's annoyed by it) - - * (PHP_5_2) - NEWS: - BFN - - * (PHP_5_2) - ext/oci8/oci8.c - ext/oci8/oci8_statement.c - ext/oci8/php_oci8_int.h: - MFH: fix segfault on rebindinging and rexecuting a statement with LOBs - fix compile failure in ZTS mode when collections support is missing - - * ext/oci8/oci8.c - ext/oci8/oci8_statement.c: - fix compile failure in ZTS mode when collections support is missing - - * ext/oci8/oci8_statement.c - ext/oci8/php_oci8_int.h - ext/oci8/tests/oci_execute_segfault.phpt: - fix segfault on re-binding and re-executing a statement - improve the test - patch by Chris Jones - -2007-01-31 Ilia Alshanetsky - - * ext/shmop/shmop.c: - Minor code optimization - -2007-01-30 Nuno Lopes - - * run-tests.php: - use getenv() instead of the _ENV var - -2007-01-30 Antony Dovgal - - * ext/oci8/tests/bind_empty.phpt: - improve test - patch by Chris Jones - -2007-01-30 Ilia Alshanetsky - - * (PHP_5_2) - NEWS: - - Prepare news file for release - -2007-01-29 Nuno Lopes - - * run-tests.php: - display all errors/leaks/warnings on each test, instead of showing just the - top most error - -2007-01-29 Rui Hirokawa - - * (PHP_5_2) - ext/mbstring/config.m4 - ext/mbstring/libmbfl/filters/Makefile.am - ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c - ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c - ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c - ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.h - ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.h - ext/mbstring/libmbfl/filters/mbfilter_jis.c - ext/mbstring/libmbfl/filters/mbfilter_jis.h - ext/mbstring/libmbfl/filters/unicode_table_jis.h - ext/mbstring/libmbfl/mbfl/mbfl_convert.c - ext/mbstring/libmbfl/mbfl/mbfl_encoding.c - ext/mbstring/libmbfl/mbfl/mbfl_ident.c: - fixed incompatibility with PHP 5.2.0 for encoding conversion between - ShiftJIS(CP932), eucJP, ISO-2022-JP. - -2007-01-29 Dmitry Stogov - - * sapi/cgi/cgi_main.c: - Prevent flush() of closed handle on php_module_shutdown() - -2007-01-29 Nuno Lopes - - * ext/soap/php_xml.c: - fix access to already free'ed memory - -2007-01-29 Dmitry Stogov - - * (PHP_5_2) - sapi/cgi/cgi_main.c: - Prevent flush of closed handle on php_module_shutdown() - -2007-01-29 Antony Dovgal - - * ext/oci8/tests/privileged_connect1.phpt: - fix test - different Oracle client versions report different error messages - - * ext/oci8/tests/array_bind_005.phpt: - fix test - -2007-01-29 Pierre-Alain Joye - - * ext/zip/php_zip.c - ext/zip/tests/bug40228.phpt - ext/zip/tests/bug40228.zip: - - MFB: #40228, ZipArchive::extractTo does create empty directories - recursively - - * (PHP_5_2) - NEWS: - - #40228 - - * (PHP_5_2) - ext/zip/php_zip.c - ext/zip/tests/bug40228.phpt - ext/zip/tests/bug40228.phpt - ext/zip/tests/bug40228.zip - ext/zip/tests/bug40228.zip: - - #40228, ZipArchive::extractTo does create empty directories - recursively - -2007-01-29 Michael Wallner - - * main/output.c: - - don't do memory limit checks for chunk_size - -2007-01-29 Dmitry Stogov - - * (PHP_5_2) - NEWS - main/output.c: - Fixed bug #40259 (ob_start call many times - memory error). (Dmitry) - -2007-01-29 Antony Dovgal - - * (PHP_4_4) - NEWS - ext/imap/config.m4 - ext/imap/php_imap.c: - backported fix for ext/imap compilation failure with recent c-client - versions - (fixes #39401) - -2007-01-29 Ilia Alshanetsky - - * ZendEngine2/zend_ini_parser.y - ZendEngine2/zend_language_parser.y - ZendEngine2/zend_language_scanner.l - win32/build/Makefile - win32/build/buildconf.js - win32/build/confutils.js - win32/build/cvsclean.js - win32/build/template.rc: - - Copyright update - -2007-01-27 Antony Dovgal - - * (PHP_5_2) - ext/pdo/pdo_stmt.c: - nullify param.parameter and avoid destroying it twice - -2007-01-27 Marcus Boerger - - * (PHP_5_2) - main/streams/memory.c: - - Disable memory streams set option until 5.2.2 - - * (PHP_5_2) - main/streams/memory.c: - - MFH truncate support for mem/temp streams - - * main/streams/memory.c: - - Add option support for temp/memory stream (adds ftruncate support) - -2007-01-26 Antony Dovgal - - * (PHP_5_2) - ext/standard/info.c: - use length - 1 when we fetch it from hashes - -2007-01-26 Dmitry Stogov - - * (PHP_5_2) - NEWS - TSRM/tsrm_virtual_cwd.c - TSRM/tsrm_virtual_cwd.c: - Fixed bug #40231 (file_exists incorrectly reports false) - -2007-01-26 Antony Dovgal - - * (PHP_5_2) - ext/pdo_oci/oci_statement.c: - fix leak - readuce size of the buffer to prevent ORA-01461 - - * configure.in: - check if -no-cpp-precomp is supported by GCC before using it (mac os only) - -2007-01-26 Ilia Alshanetsky - - * (PHP_5_2) - configure.in - main/php_version.h: - - Back to dev - - * (PHP_5_2) - NEWS - configure.in - main/php_version.h: - - 5.2.1RC4 - -2007-01-25 Antony Dovgal - - * ext/oci8/package2.xml - ext/oci8/package2.xml: - - file package2.xml was initially added on branch PHP_5_2. - - * (PHP_5_2) - ext/date/lib/parse_tz.c: - add missing ifdefs - - * (PHP_5_2) - ext/date/lib/parse_tz.c: - setlocale() returns static buffer, which must be copied - - * (PHP_5_2) - NEWS - ext/bz2/bz2_filter.c - ext/zlib/zlib_filter.c: - MFH: fix #40189 (possible endless loop in zlib.inflate stream filter) - - * ext/bz2/bz2_filter.c - ext/zlib/zlib_filter.c: - fix #40189 (possible endless loop in zlib.inflate stream filter) - - * (PHP_5_2) - ext/oci8/oci8_statement.c: - PHP4 compatibility - -2007-01-25 Rasmus Lerdorf - - * (PHP_5_2) - ext/standard/user_filters.c: - Fix typo - -2007-01-25 Ilia Alshanetsky - - * (PHP_5_2) - ext/standard/user_filters.c: - - Added safety checks to the code - - * (PHP_5_2) - ext/standard/head.c - ext/standard/mail.c: - - Eliminate strcat() and strcpy() - -2007-01-24 Sara Golemon - - * NEWS - ext/soap/php_http.c - ext/soap/php_xml.c - ext/standard/php_fopen_wrapper.c - main/main.c - main/php_globals.h - main/php_streams.h - main/streams/streams.c - main/streams/userspace.c: - Expand allow_url_fopen/allow_url_include functionality - -2007-01-24 Antony Dovgal - - * (PHP_5_2) - ext/oci8/oci8.c - ext/oci8/package.xml: - prepare to release 1.2.3 - -2007-01-24 Ilia Alshanetsky - - * (PHP_5_2) - ext/standard/head.c: - - strcat() -> strlcat() - -2007-01-24 Antony Dovgal - - * ext/iconv/iconv.c: - initialize errno - -2007-01-23 Marcus Boerger - - * sapi/cli/php.1.in - sapi/cli/php_cli.c: - - Add --ri/--rextinfo - - * ext/standard/info.c - ext/standard/info.h: - - Simplify - - Add PHPAPI php_info_print_module() - -2007-01-23 Nuno Lopes - - * ext/tidy/tidy.c - ext/tidy/tests/027.phpt: - MFB: fix a few crashes - - * ext/tidy/tests/027.phpt - ext/tidy/tests/027.phpt: - - file 027.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - ext/tidy/tidy.c: - fix a few crashes - -2007-01-23 Dmitry Stogov - - * (PHP_5_2) - NEWS: - Fixed bug #40200 (The FastCgi version has different realpath results than - thread safe version) - - * TSRM/tsrm_virtual_cwd.c - TSRM/tsrm_virtual_cwd.c: - Fixed wrong realpath() result for unexistent files on win32 - -2007-01-23 Johannes Schlüter - - * ext/standard/info.c: - - Use utf-8 instead of utf8 as encoding to fix phpinfo() - -2007-01-23 Hannes Magnusson - - * ext/imap/config.m4: - MFB: Fix typo - - * (PHP_5_2) - ext/imap/config.m4: - Fix typo - -2007-01-23 Ilia Alshanetsky - - * (PHP_5_2) - ext/exif/exif.c: - - emalloc() -> safe_emalloc() - -2007-01-22 Derick Rethans - - * (PHP_4_4) - NEWS - ext/standard/config.m4: - - Backported a fix in the configure tests to detect the "rounding fuzz". - - * (PHP_4_4) - NEWS: - - Move ext/ovrimos to PECL. - -2007-01-22 Antony Dovgal - - * (PHP_5_2) - NEWS - ext/pdo_oci/oci_statement.c: - fix PECL bug #7295 (ORA-01405: fetched column value is NULL on LOB fields) - -2007-01-22 Dmitry Stogov - - * (PHP_5_2) - NEWS - TSRM/tsrm_virtual_cwd.c - TSRM/tsrm_virtual_cwd.c - TSRM/tsrm_virtual_cwd.h - TSRM/tsrm_virtual_cwd.h - ext/standard/dir.c - ext/standard/dir.c - ext/standard/filestat.c - ext/standard/filestat.c - ext/standard/tests/file/bug39367.phpt - ext/standard/tests/file/bug39367.phpt - ext/standard/tests/file/bug39367.phpt: - Fixed bug #39367 (clearstatcache() doesn't clear realpath cache) - Fixed bug #40092 (chroot() doesn't clear realpath cache) - -2007-01-22 Antony Dovgal - - * ext/interbase/ibase_query.c: - fix wrong param definition - - * ext/interbase/ibase_service.c: - fix long/int mess - - * (PHP_5_2) - ZendEngine2/tests/unset_cv08.phpt: - fix test - - * ZendEngine2/tests/unset_cv08.phpt: - fix test - array_unique() is not expected to modify its argument - - * ext/spl/examples/directoryfilterdots.inc - ext/spl/examples/directoryfilterdots.inc: - fix classname - - * (PHP_4_4) - ext/standard/array.c: - fix array_unique() to return array with any type of argument - - * ext/standard/tests/array/bug40191.phpt: - add skipif - - * (PHP_5_2) - NEWS - ext/standard/array.c - ext/standard/tests/array/bug40191.phpt: - MFH: fix #40191 (use of array_unique() with objects triggers segfault) - - * ext/standard/array.c - ext/standard/tests/array/bug40191.phpt - ext/standard/tests/array/bug40191.phpt: - fix #40191 (use of array_unique() with objects triggers segfault) - -2007-01-21 Ilia Alshanetsky - - * (PHP_5_2) - NEWS: - Fixed typos - -2007-01-21 Marcus Boerger - - * ZendEngine2/tests/.cvsignore - ext/bcmath/tests/.cvsignore - ext/bz2/tests/.cvsignore - ext/calendar/tests/.cvsignore - ext/ctype/tests/.cvsignore - ext/date/tests/.cvsignore - ext/dba/tests/.cvsignore - ext/dbase/tests/.cvsignore - ext/dom/tests/.cvsignore - ext/exif/tests/.cvsignore - ext/fdf/tests/.cvsignore - ext/filter/tests/.cvsignore - ext/gd/tests/.cvsignore - ext/gettext/tests/.cvsignore - ext/gmp/tests/.cvsignore - ext/hash/tests/.cvsignore - ext/iconv/tests/.cvsignore - ext/imap/tests/.cvsignore - ext/interbase/tests/.cvsignore - ext/json/tests/.cvsignore - ext/libxml/tests/.cvsignore - ext/mbstring/tests/.cvsignore - ext/mcrypt/tests/.cvsignore - ext/mhash/tests/.cvsignore - ext/ming/tests/.cvsignore - ext/mysql/tests/.cvsignore - ext/mysqli/tests/.cvsignore - ext/oci8/tests/.cvsignore - ext/openssl/tests/.cvsignore - ext/pcntl/tests/.cvsignore - ext/pcre/pcrelib/testdata/.cvsignore - ext/pcre/tests/.cvsignore - ext/pdo/tests/.cvsignore - ext/pdo_firebird/tests/.cvsignore - ext/pdo_mysql/tests/.cvsignore - ext/pdo_oci/tests/.cvsignore - ext/pdo_odbc/tests/.cvsignore - ext/pdo_pgsql/tests/.cvsignore - ext/pdo_sqlite/tests/.cvsignore - ext/pgsql/tests/.cvsignore - ext/posix/tests/.cvsignore - ext/pspell/tests/.cvsignore - ext/reflection/tests/.cvsignore - ext/session/tests/.cvsignore - ext/shmop/tests/.cvsignore - ext/simplexml/tests/.cvsignore - ext/skeleton/tests/.cvsignore - ext/soap/tests/.cvsignore - ext/soap/tests/bugs/.cvsignore - ext/soap/tests/interop/Round2/Base/.cvsignore - ext/soap/tests/interop/Round2/GroupB/.cvsignore - ext/soap/tests/interop/Round3/GroupD/.cvsignore - ext/soap/tests/interop/Round3/GroupE/.cvsignore - ext/soap/tests/interop/Round3/GroupF/.cvsignore - ext/soap/tests/interop/Round4/GroupG/.cvsignore - ext/soap/tests/interop/Round4/GroupH/.cvsignore - ext/soap/tests/interop/Round4/GroupI/.cvsignore - ext/soap/tests/schema/.cvsignore - ext/soap/tests/soap12/.cvsignore - ext/sockets/tests/.cvsignore - ext/spl/examples/tests/.cvsignore - ext/spl/tests/.cvsignore - ext/sqlite/tests/.cvsignore - ext/sqlite/tests/pdo/.cvsignore - ext/standard/tests/.cvsignore - ext/standard/tests/array/.cvsignore - ext/standard/tests/assert/.cvsignore - ext/standard/tests/file/.cvsignore - ext/standard/tests/filters/.cvsignore - ext/standard/tests/general_functions/.cvsignore - ext/standard/tests/image/.cvsignore - ext/standard/tests/math/.cvsignore - ext/standard/tests/network/.cvsignore - ext/standard/tests/reg/.cvsignore - ext/standard/tests/serialize/.cvsignore - ext/standard/tests/strings/.cvsignore - ext/standard/tests/time/.cvsignore - ext/standard/tests/versioning/.cvsignore - ext/sysvmsg/tests/.cvsignore - ext/sysvsem/tests/.cvsignore - ext/sysvshm/tests/.cvsignore - ext/tidy/tests/.cvsignore - ext/tokenizer/tests/.cvsignore - ext/unicode/tests/.cvsignore - ext/wddx/tests/.cvsignore - ext/xml/tests/.cvsignore - ext/xmlreader/tests/.cvsignore - ext/xmlrpc/tests/.cvsignore - ext/xmlwriter/tests/.cvsignore - ext/xsl/tests/.cvsignore - ext/zip/tests/.cvsignore - ext/zlib/tests/.cvsignore - sapi/cli/tests/.cvsignore - sapi/tests/.cvsignore - tests/.cvsignore - tests/basic/.cvsignore - tests/classes/.cvsignore - tests/func/.cvsignore - tests/lang/.cvsignore - tests/output/.cvsignore - tests/run-test/.cvsignore - tests/strings/.cvsignore - tests/unicode/.cvsignore - tests/unicode/func/.cvsignore: - - Add *.mem - - * (PHP_5_2) - ext/spl/tests/observer_003.phpt - ext/spl/tests/observer_004.phpt - ext/spl/tests/observer_005.phpt: - - Add tests - -2007-01-20 Antony Dovgal - - * ZendEngine2/zend_hash.c: - catch overflow right away - -2007-01-20 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - main/php_variables.c: - Fixed bug #39450 (getenv() fills other super-globals). - -2007-01-20 Antony Dovgal - - * sapi/cli/tests/001.phpt - sapi/cli/tests/001.phpt - sapi/cli/tests/002.phpt - sapi/cli/tests/002.phpt - sapi/cli/tests/003.phpt - sapi/cli/tests/003.phpt - sapi/cli/tests/004.phpt - sapi/cli/tests/004.phpt - sapi/cli/tests/005.phpt - sapi/cli/tests/005.phpt - sapi/cli/tests/006.phpt - sapi/cli/tests/006.phpt - sapi/cli/tests/007.phpt - sapi/cli/tests/007.phpt - sapi/cli/tests/008.phpt - sapi/cli/tests/008.phpt - sapi/cli/tests/009.phpt - sapi/cli/tests/009.phpt - sapi/cli/tests/010-2.phpt - sapi/cli/tests/010-2.phpt - sapi/cli/tests/010.phpt - sapi/cli/tests/010.phpt - sapi/cli/tests/011.phpt - sapi/cli/tests/011.phpt - sapi/cli/tests/012.phpt - sapi/cli/tests/012.phpt - sapi/cli/tests/013.phpt - sapi/cli/tests/013.phpt - sapi/cli/tests/014.phpt - sapi/cli/tests/014.phpt: - use getenv() - -2007-01-20 Rob Richards - - * (PHP_5_2) - ext/openssl/openssl.c - ext/openssl/tests/005.phpt - ext/openssl/tests/bug38261.phpt: - MFH: fix accessing public key from x509 resource - add test - fix test under win32 - -2007-01-20 Sara Golemon - - * ZendEngine2/zend_compile.c - ZendEngine2/zend_compile.h - ZendEngine2/zend_execute.c: - Resolve autoglobals as global-fetch CVs when possible - -2007-01-20 Antony Dovgal - - * (PHP_5_2) - ext/dom/tests/bug38474.phpt: - typo in the test name - -2007-01-20 Ilia Alshanetsky - - * (PHP_5_2) - TSRM/tsrm_virtual_cwd.c: - - CS - -2007-01-20 Marcus Boerger - - * ext/spl/spl_array.c - ext/spl/spl_directory.c - ext/spl/spl_functions.c - ext/spl/spl_functions.h - ext/spl/spl_observer.c - ext/spl/tests/dit_001.phpt - ext/spl/tests/fileobject_003.phpt: - - Mode debug info - - * ext/spl/spl_array.c: - - Drop left-over - - * ext/spl/spl_array.c - ext/spl/tests/array_001.phpt - ext/spl/tests/array_002.phpt - ext/spl/tests/array_003.phpt - ext/spl/tests/array_007.phpt - ext/spl/tests/array_015.phpt - ext/spl/tests/array_017.phpt - ext/spl/tests/array_018.phpt - ext/spl/tests/array_022.phpt - ext/spl/tests/bug33136.phpt - ext/spl/tests/iterator_042.phpt - ext/spl/tests/iterator_049.phpt - ext/spl/tests/iterator_049b.phpt - ext/spl/tests/iterator_050.phpt - ext/spl/tests/iterator_051.phpt - ext/spl/tests/iterator_052.phpt - ext/spl/tests/iterator_053.phpt - ext/spl/tests/iterator_054.phpt - ext/spl/tests/iterator_055.phpt: - - Make use of get_debug_info() handler in ArrayObject/Iterator - -2007-01-20 Nuno Lopes - - * ext/tidy/tidy.c - ext/tidy/tests/024.phpt - ext/tidy/tests/025.phpt - ext/tidy/tests/026.phpt: - MFB: fix crash & add tests - - * ext/tidy/tests/024.phpt - ext/tidy/tests/024.phpt - ext/tidy/tests/025.phpt - ext/tidy/tests/025.phpt - ext/tidy/tests/026.phpt - ext/tidy/tests/026.phpt: - - file 024.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - ext/tidy/tidy.c: - fix another crash - - * ext/tidy/tidy.c: - MFB: fix crash - - * (PHP_5_2) - ext/tidy/tidy.c: - fix crash. tests will follow - -2007-01-20 Marcus Boerger - - * ext/date/php_date.c: - - Fix warnings - -2007-01-19 Marcus Boerger - - * ext/spl/php_spl.c - ext/spl/php_spl.h - ext/spl/spl_observer.c - ext/spl/tests/observer_004.phpt - ext/spl/tests/observer_005.phpt: - - Make use of get_debug_info handler in SplObjectStorage - -2007-01-19 Antony Dovgal - - * ext/imap/config.m4: - fix configure check with imap-2001 - -2007-01-19 Marcus Boerger - - * ext/standard/var.c: - - Use Z_OBJDEBUG_PP() - - * ZendEngine2/zend.c - ZendEngine2/zend_operators.h: - - Add Z_OBJDEBUG[_P[P]] helper macros - -2007-01-19 Antony Dovgal - - * TSRM/tsrm_virtual_cwd.c: - improve readability and use constant instead of its value - - * (PHP_5_2) - ext/imap/config.m4: - MFH: improve utf8_mime2text() signature detection - - * ext/imap/config.m4: - improve utf8_mime2text() signature detection - look also for U8T_CANONICAL, which must exist if new signature was - detected - - * ext/oci8/tests/array_bind_013.phpt: - fix test - -2007-01-19 Nuno Lopes - - * (PHP_5_2) - INSTALL - win32/install.txt: - update install instructions from phpdoc XMl sources - -2007-01-19 Rob Richards - - * ext/openssl/openssl.c - ext/openssl/tests/005.phpt - ext/openssl/tests/bug38261.phpt: - fix accessing public key from x509 resource - add test - fix test under win32 - -2007-01-19 Nuno Lopes - - * ext/tidy/tidy.c: - MFB: fix segfaults with new libtidy - - * (PHP_5_2) - ext/tidy/tidy.c: - fix segfaults with new libtidy. the patch is backwards compatible - -2007-01-19 Antony Dovgal - - * ext/curl/interface.c: - improve the fix - - * (PHP_5_2) - NEWS - ext/curl/interface.c: - MFH: fix #40169 (CURLOPT_TCP_NODELAY only available in curl >= 7.11.2) - - * ext/curl/interface.c: - fix #40169 (CURLOPT_TCP_NODELAY only available in curl >= 7.11.2) - -2007-01-19 Pierre-Alain Joye - - * ext/gd/libgd/gd.c: - - MFB: save/restore the alpha blending mode correctly in imagefill and - imagefilltoborder - - * (PHP_5_2) - ext/gd/libgd/gd.c: - - save/restore the alpha blending mode correctly in imagefill and - imagefilltoborder - -2007-01-19 Antony Dovgal - - * ext/standard/streamsfuncs.c - ext/standard/user_filters.c: - fix #40168 - -2007-01-19 Marcus Boerger - - * unicode-progress.txt - ext/spl/spl_directory.c - ext/spl/spl_iterators.c: - - Update unicode progress on SPL, looks like nearly done, actually all is - unicode safe by now but a few things need to be added and a few problems - be clarified. - - * README.UNICODE-UPGRADES: - - Nicer version - - * README.UNICODE-UPGRADES: - - Update - - * main/spprintf.c: - - Change hardcoded size to lentgh translation to use sizeof(UChar) as - suggested by Andrei - - * ext/spl/spl_directory.c - ext/spl/tests/bug36258.phpt - ext/spl/tests/bug36287.phpt: - - A few unicode fixes and tidying - -2007-01-19 Ilia Alshanetsky - - * (PHP_5_2) - ext/standard/http_fopen_wrapper.c: - Fix win32 build - - * (PHP_5_2) - NEWS - configure.in - main/php_version.h: - - Back to dev - - * (PHP_5_2) - NEWS - configure.in - main/php_version.h: - - 5.2.1RC3 - - * (PHP_5_2) - NEWS - ext/standard/http_fopen_wrapper.c: - - Added read-timeout context option "timeout" for HTTP streams. - - -2007-01-18 Ilia Alshanetsky - - * (PHP_5_2) - NEWS: - Old bug fixing news - - * (PHP_5_2) - ZendEngine2/zend_language_scanner.l: - - Syntax highlighting fix for hex numbers. - - -2007-01-18 Marcus Boerger - - * ext/simplexml/simplexml.c: - - Implement debug helper - - * ZendEngine2/zend.c - ZendEngine2/zend_object_handlers.c - ZendEngine2/zend_object_handlers.h - ext/standard/var.c: - - Add debug_info helper to overloadedobjects - -2007-01-18 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - ext/date/lib/parse_tz.c: - - Fixed bug #39993 (tr_TR.UTF-8 locale has problems with PHP). - -2007-01-18 Marcus Boerger - - * ext/date/php_date.c: - - We want the size here not the length - - * main/spprintf.c - main/spprintf.h: - - We need to return the length not the byte size - - * ext/standard/filestat.c: - - Use correct string inunicode mode - -2007-01-18 Antony Dovgal - - * ext/spl/spl_directory.c: - fix win32 build - -2007-01-18 Marcus Boerger - - * ext/spl/spl_directory.c: - - Simplify by using zspprintf - - * main/spprintf.c - main/spprintf.h: - - Fix [v]uspprintf() - - Add [v]zspprintf - -2007-01-18 Andrei Zmievski - - * unicode-todo.txt: - -** empty log message *** - -2007-01-18 Antony Dovgal - - * ext/soap/soap.c - ext/standard/html.c - ext/wddx/wddx.c: - more snprintf() - -2007-01-18 Nuno Lopes - - * main/streams/php_stream_transport.h: - MFB: use only 2 bits - - * (PHP_5_2) - main/streams/php_stream_transport.h: - only 2 bits are needed for shutdown(2) method (only 3 possible values). - this is new code in 5.2.1, so don't worry.. - -2007-01-18 Antony Dovgal - - * ext/interbase/interbase.c: - fix the previous patch - - * ext/interbase/ibase_query.c - ext/interbase/interbase.c - ext/pdo_firebird/firebird_driver.c: - use snprintf() - - * (PHP_5_2) - ext/imap/config.m4: - MFH: improve check configure for new version of utf8_mime2text() - - * ext/imap/config.m4: - improve check configure for new version of utf8_mime2text() - - * ext/imap/php_imap.c: - use strlcat() - - * main/main.c: - fix fodling, mark set_time_limit() unicode safe - - * (PHP_5_2) - NEWS - ext/informix/.cvsignore - ext/informix/.cvsignore - ext/informix/CREDITS - ext/informix/CREDITS - ext/informix/Makefile.frag - ext/informix/Makefile.frag - ext/informix/config.m4 - ext/informix/config.w32 - ext/informix/ifx.dsp - ext/informix/ifx.dsp - ext/informix/ifx.ec - ext/informix/ifx.ec - ext/informix/php_informix.h - ext/informix/php_informix.h - ext/informix/php_informix_includes.h - ext/informix/php_informix_includes.h: - moved ext/informix to PECL - - * (PHP_5_2) - ZendEngine2/zend_exceptions.c: - fix folding - - * ZendEngine2/zend_exceptions.c: - fix folding, mark functions as unicode safe - -2007-01-17 Ilia Alshanetsky - - * (PHP_4_4) - ext/interbase/interbase.c: - - Buffer length checks - -2007-01-17 Marcus Boerger - - * ext/spl/tests/fileobject_001.phpt - ext/spl/tests/fileobject_002.phpt - ext/spl/tests/fileobject_003.phpt: - - Different results in unicode now - - * ext/spl/spl_directory.c: - - Ensure string-type is always set correctly - - * ext/spl/spl_directory.c: - - More help from David - - * ext/spl/spl_directory.c: - - A little help from Andrei - -2007-01-17 Antony Dovgal - - * (PHP_5_2) - NEWS - ext/iconv/iconv.c: - MFH: fix #40129 (iconv extension doesn't compile with CodeWarrior on - Netware) - patch by gk at gknw dot de - - * ext/iconv/iconv.c: - fix #40129 (iconv extension doesn't compile with CodeWarrior on Netware) - patch by gk at gknw dot de - - * ext/standard/formatted_print.c - ext/sysvmsg/sysvmsg.c: - fix grammar - -2007-01-17 Sara Golemon - - * ext/soap/php_http.c - ext/soap/php_xml.c: - INI options should not be modified directly. - Bad extension. No cookie for you. - -2007-01-16 Marcus Boerger - - * ext/spl/spl_directory.c - ext/spl/spl_directory.h: - - Steps towards unicode - -2007-01-16 Andrei Zmievski - - * main/php.h: - Update PHP API version. - - -2007-01-16 Marcus Boerger - - * ext/standard/filestat.c - ext/standard/php_filestat.h: - - Add php_u_stat() - - * main/php_streams.h - main/streams/streams.c: - - Add more unicode stuff - -2007-01-16 Ilia Alshanetsky - - * ext/odbc/php_odbc.c: - - MFB: Fixed output code inside odbc_result_all() - - * (PHP_4_4) - ext/odbc/php_odbc.c: - - MFH: Fixed output code inside odbc_result_all() - - * (PHP_5_2) - ext/odbc/php_odbc.c: - Fixed output code inside odbc_result_all() - -2007-01-16 Antony Dovgal - - * (PHP_5_2) - ext/gettext/gettext.c: - MFH: return false if realpath()/getcwd() fail - - * ext/gettext/gettext.c: - return false if realpath()/getcwd() fail - - * (PHP_5_2) - TSRM/tsrm_virtual_cwd.c: - MFH: free temp cwd_state struct on error - - * TSRM/tsrm_virtual_cwd.c: - free temporary cwd_state struct on error - - * ext/pspell/pspell.c: - plug leaks - initialize the last argument of RegQueryValueEx() - fix ws - -2007-01-16 Ilia Alshanetsky - - * (PHP_4_4) - win32/sendmail.c: - - Added buffer length checks - -2007-01-15 Marcus Boerger - - * main/php_streams.h - main/streams/cast.c - main/streams/streams.c: - - Help streams debugging - -2007-01-15 Antony Dovgal - - * ext/standard/user_filters.c - main/streams/streams.c - main/streams/transports.c - main/streams/userspace.c: - add trailing '\0' to stream hashes - - * (PHP_5_2) - main/streams/filter.c: - revert the patch temporarily, I need to test a bigger patch in HEAD.. - - * main/streams/filter.c: - include \0 to the hash - it does matter because we use these strings in phpinfo() - - * acinclude.m4: - tabs -> ws - - * acinclude.m4: - improve icu-config check - - * ZendEngine2/tests/bug36214.phpt - ZendEngine2/tests/bug36214.phpt: - fix test - - * (PHP_5_2) - ZendEngine2/zend_compile.c: - missing comma - - * (PHP_5_2) - ZendEngine2/zend_compile.c: - fix error message and #40111 - -2007-01-15 Frank M. Kromann - - * (PHP_5_2) - ext/pdo_dblib/dblib_stmt.c: - Fix mysql -> dblib - -2007-01-14 Marcus Boerger - - * main/streams/memory.c: - - Use relay to aid debugging - - * main/streams/memory.c: - - Fix readonly mode to 'rb' - -2007-01-14 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - sapi/apache2handler/php_functions.c: - - Fixed bug #40127 (apache2handler doesnt compile on Netware). - - * (PHP_5_2) - NEWS - ext/pdo_dblib/dblib_stmt.c: - - Fixed bug #40121 (PDO_DBLIB driver wont free statements). - -2007-01-14 Hannes Magnusson - - * ext/standard/http_fopen_wrapper.c: - MFB: Fix typo in error message - - * (PHP_5_2) - ext/standard/http_fopen_wrapper.c: - Fix typo in error message - -2007-01-13 Ilia Alshanetsky - - * ext/standard/formatted_print.c: - - MFB: Improve validation of argnum, width and precision. - - * (PHP_4_4) - ext/standard/formatted_print.c: - - MFH: Improve validation of argnum, width and precision. - - * (PHP_5_2) - ext/standard/formatted_print.c: - - Improve validation of argnum, width and precision. - -2007-01-13 Nuno Lopes - - * ext/gd/libgd/gd.c - ext/gd/libgd/gd.c: - MFB - - * (PHP_5_2) - ext/gd/libgd/gd.c: - OMG, this line was really bogus (and allocating huge amounts of memory - unecessarly) - - * (PHP_5_2) - ext/gd/libgd/gd.c: - fix valgrind error in test bug24594.phpt - while at it, remove some dead code and change the pts vector to char to - save (much) memory - -2007-01-13 Frank M. Kromann - - * (PHP_5_2) - win32/build/Makefile: - MFH: Kill warnings when mt is not installed or is found as the tape command - under cygwin - - * win32/build/Makefile: - Kill warnings when mt is not installed or is found as the tape command - under cygwin - -2007-01-11 Andrei Zmievski - - * sapi/apache/mod_php.c: - Fake out the module name, since the filename is different now. - -2007-01-11 Marcus Boerger - - * ZendEngine2/zend_API.h - ZendEngine2/zend_unicode.h: - - Consistency: macros shall be uppercased (as requested by Andrei) - - * ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_execute.h: - - MFB Missing part of __toString() support - -2007-01-11 Antony Dovgal - - * ext/mbstring/php_mbregex.c: - avoid changing original zval - -2007-01-11 Marcus Boerger - - * ext/spl/spl_engine.h: - - Unicode support - - * ZendEngine2/zend_API.h - ZendEngine2/zend_unicode.h: - - Add zstrlen() helper - -2007-01-11 Dmitry Stogov - - * (PHP_5_2) - NEWS - ZendEngine2/zend.c - ZendEngine2/zend.c - ZendEngine2/tests/bug35634.phpt - ZendEngine2/tests/bug35634.phpt - ZendEngine2/tests/bug35634.phpt: - Fixed bug #35634 (Erroneous "Class declarations may not be nested" error - raised). (Carl P. Corliss) - -2007-01-11 Antony Dovgal - - * ext/pgsql/pgsql.c: - make sure the string is non-empty and use strlcpy() & strlcat() - - * main/network.c: - use closesocket() on Win32 and close() on *nix - - * (PHP_5_2) - NEWS - ext/oci8/oci8_interface.c - ext/oci8/oci8_statement.c - ext/oci8/tests/array_bind_005.phpt - ext/oci8/tests/coll_019.phpt - ext/oci8/tests/define2.phpt - ext/oci8/tests/define3.phpt - ext/oci8/tests/define4.phpt - ext/oci8/tests/define5.phpt: - MFH: fix #39988 (type argument of oci_define_by_name() is ignored) - patch and tests by Chris Jones - - * ext/oci8/oci8_interface.c - ext/oci8/oci8_statement.c - ext/oci8/tests/coll_019.phpt - ext/oci8/tests/coll_019.phpt - ext/oci8/tests/define2.phpt - ext/oci8/tests/define2.phpt - ext/oci8/tests/define3.phpt - ext/oci8/tests/define3.phpt - ext/oci8/tests/define4.phpt - ext/oci8/tests/define4.phpt - ext/oci8/tests/define5.phpt - ext/oci8/tests/define5.phpt: - fix #39988 (type argument of oci_define_by_name() is ignored) - patch and tests by Chris Jones - - * (PHP_5_2) - NEWS - ext/oci8/oci8.c - ext/oci8/oci8_statement.c - ext/oci8/php_oci8_int.h - ext/oci8/tests/bug40078.phpt: - MFH: fix #40078 (ORA-01405 when fetching NULL values using - oci_bind_array_by_name()) - - * ext/oci8/oci8.c - ext/oci8/oci8_statement.c - ext/oci8/php_oci8_int.h - ext/oci8/tests/bug40078.phpt - ext/oci8/tests/bug40078.phpt: - fix #40078 (ORA-01405 when fetching NULL values using - oci_bind_array_by_name()) - - * main/.cvsignore - main/streams/.cvsignore - regex/.cvsignore: - add misssing temp directories to .cvsignore - -2007-01-11 Sara Golemon - - * ext/posix/posix.c: - - - * ext/posix/posix.c - ext/standard/filestat.c: - Some platforms have getpwnam_r() but are missing _SC_GETPW_R_SIZE_MAX - -2007-01-10 Andrei Zmievski - - * INSTALL - Makefile.global - acinclude.m4 - configure.in - makerpm - sapi/apache/.cvsignore - sapi/apache/apMakefile.tmpl - sapi/apache/config.m4 - sapi/apache/libphp5.module.in - sapi/apache/libphp6.module.in - sapi/apache/mod_php.c - sapi/apache/mod_php.exp - sapi/apache/mod_php.h - sapi/apache/mod_php5.c - sapi/apache/mod_php5.exp - sapi/apache/mod_php5.h - sapi/apache/php.sym - sapi/apache/php_apache_http.h - sapi/cli/config.m4: - Rename php5 module to php6. Remove version number from - sapi/apache/mod_php.* filenames (for future's sake). No other SAPI - moduels modified (up to invididual maintainers). - - * README.UNICODE: - Update with rewrites by me and Evan G. - - * README.UNICODE-UPGRADES: - Update with info from README.UNICODE. - -2007-01-10 Sara Golemon - - * main/php_streams.h - main/streams/streams.c: - Add convenience function for openeing files with unicode names - -2007-01-10 Johannes Schlüter - - * sapi/cli/php.1.in: - - Bump year - -2007-01-10 Hannes Magnusson - - * ext/sockets/php_sockets.h - ext/sockets/sockets.c: - MFB: Add missing ifdefs - -2007-01-10 Marcus Boerger - - * ext/standard/file.c: - - Fix mem access - -2007-01-10 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - ext/spl/php_spl.c - ext/spl/tests/bug40091.phpt - ext/spl/tests/bug40091.phpt: - - Fixed bug #40091 (spl_autoload_register with 2 instances of the same - class). - -2007-01-10 Andrei Zmievski - - * ZendEngine2/zend_API.h: - Remove const warnings. (Andrey) - -2007-01-10 Ilia Alshanetsky - - * (PHP_5_2) - NEWS: - - Another bug fixed by Dmitry - -2007-01-10 Dmitry Stogov - - * ext/simplexml/tests/bug38347.phpt - ext/simplexml/tests/bug38347.phpt - ext/spl/tests/iterator_035.phpt - ext/spl/tests/iterator_035.phpt - tests/classes/bug27468.phpt - tests/classes/bug27468.phpt - tests/lang/bug27439.phpt - tests/lang/bug27439.phpt: - Fixed tests - - * ZendEngine2/tests/bug35106.phpt - ZendEngine2/tests/bug35106.phpt - ZendEngine2/tests/bug36214.phpt - ZendEngine2/tests/bug36214.phpt - ZendEngine2/tests/bug38146.phpt - ZendEngine2/tests/bug39449.phpt - ZendEngine2/tests/bug39449.phpt - ZendEngine2/tests/bug39990.phpt - ZendEngine2/tests/bug39990.phpt: - - file bug35106.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - NEWS - ZendEngine2/zend_compile.c - ZendEngine2/zend_compile.c - ZendEngine2/zend_compile.h - ZendEngine2/zend_compile.h - ZendEngine2/zend_execute.c - ZendEngine2/zend_execute.c - ZendEngine2/zend_execute.h - ZendEngine2/zend_execute.h - ZendEngine2/zend_hash.c - ZendEngine2/zend_hash.c - ZendEngine2/zend_hash.h - ZendEngine2/zend_hash.h - ZendEngine2/zend_language_parser.y - ZendEngine2/zend_language_parser.y - ZendEngine2/zend_object_handlers.c - ZendEngine2/zend_object_handlers.c - ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_execute.h - ZendEngine2/zend_vm_execute.h - ZendEngine2/tests/bug35106.phpt - ZendEngine2/tests/bug36214.phpt - ZendEngine2/tests/bug38146.phpt - ZendEngine2/tests/bug39449.phpt - ZendEngine2/tests/bug39990.phpt: - - Fixed bug #35106 (nested foreach fails when array variable has a - reference). - - Fixed bug #36214 (__get method works properly only when conditional - operator is used). - - Fixed bug #39449 (Overloaded array properties do not work correctly). - - Fixed bug #39990 (Cannot "foreach" over overloaded properties). - -2007-01-10 Hannes Magnusson - - * (PHP_5_2) - ext/sockets/php_sockets.h - ext/sockets/sockets.c: - Add missing ifdefs for shutdown() - - * ext/standard/file.h: - MFB: fix ifdefs - - * (PHP_5_2) - ext/standard/file.h: - Fix ifdefs - - * (PHP_5_2) - ext/pcre/php_pcre.c: - Fix build on system where HAVE_SETLOCALE is not defined - -2007-01-10 Antony Dovgal - - * (PHP_5_2) - NEWS: - BFN - - * sapi/milter/php_milter.c: - fix #40083 - - * (PHP_5_2) - sapi/milter/php_milter.c: - use RETURN_* instead of RETVAL_* and fix #40083 - -2007-01-10 Dmitry Stogov - - * (PHP_5_2) - ext/session/session.c: - Fixed SIGSEGV - -2007-01-09 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - configure.in - main/safe_mode.c: - - Fixed bug #40079 (php_get_current_user() not thread safe). - - -2007-01-09 Marcus Boerger - - * (PHP_5_2) - NEWS: - - Ups wrong place - - * (PHP_5_2) - NEWS: - - BFN - - * ext/exif/exif.c: - - Improve debugging and fix #40073 - -2007-01-09 Andrei Zmievski - - * ZendEngine2/zend_language_scanner.l - ZendEngine2/zend_language_scanner.l: - Fix 'b' prefix in highlighting and tokenizer. (Matt W) - -2007-01-09 Dmitry Stogov - - * (PHP_4_4) - NEWS - Zend/zend_execute.c: - Fixed bug #39819 (Using $this not in object context can cause segfaults) - - * ext/standard/proc_open.c - ext/standard/proc_open.c: - Close open files in case of failure (Amit) - -2007-01-09 Ilia Alshanetsky - - * (PHP_4_4) - ext/session/session.c: - - MFH: Prevent SESSION/GLOBALS overload via session decoding - - * (PHP_5_2) - ext/session/session.c: - - Prevent SESSION/GLOBALS overload via session decoding - -2007-01-09 Dmitry Stogov - - * (PHP_5_2) - NEWS - ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.c: - Fixed bug #40076 (zend_alloc.c: Value of enumeration constant must be in - range of signed integer) - -2007-01-09 Ilia Alshanetsky - - * ext/wddx/wddx.c: - - MFB: Added key_length intialization for intergers - - * (PHP_4_4) - ext/wddx/wddx.c: - - MFH: Added key_length intialization for intergers - - * (PHP_5_2) - ext/wddx/wddx.c: - Added key_length intialization for intergers - -2007-01-09 Dmitry Stogov - - * (PHP_5_2) - NEWS - ZendEngine2/zend_compile.c - ZendEngine2/zend_compile.c: - Fixed bug #40002 (Try/Catch performs poorly) - - * ZendEngine2/zend_vm_gen.php - ZendEngine2/zend_vm_gen.php: - Bump year. - -2007-01-09 Antony Dovgal - - * (PHP_5_2) - ext/exif/exif.c: - MFH: zerofill info_data and fix possible segfault - partly fixes #40073 - - * ext/exif/exif.c: - zerofill info_data and fix possible segfault - partly fixes #40073 - -2007-01-08 Nuno Lopes - - * ext/gd/gd.c - ext/gd/php_gd.h: - MFB - - * (PHP_5_2) - ext/gd/gd.c - ext/gd/php_gd.h: - avoid calling MSHUTDOWN when built without libt1 - - * ext/sysvmsg/php_sysvmsg.h - ext/sysvmsg/sysvmsg.c: - MFB: remove mshutdown func - - * (PHP_5_2) - ext/sysvmsg/php_sysvmsg.h - ext/sysvmsg/sysvmsg.c: - remove useless MSHUTDOWN function - - * ext/hash/hash.c - ext/hash/hash_adler32.c - ext/hash/hash_crc32.c - ext/hash/hash_gost.c - ext/hash/hash_haval.c - ext/hash/hash_md.c - ext/hash/hash_ripemd.c - ext/hash/hash_salsa.c - ext/hash/hash_sha.c - ext/hash/hash_snefru.c - ext/hash/hash_tiger.c - ext/hash/hash_whirlpool.c - ext/hash/php_hash.h: - MFB: constify - - * (PHP_5_2) - ext/hash/hash.c - ext/hash/hash_adler32.c - ext/hash/hash_crc32.c - ext/hash/hash_gost.c - ext/hash/hash_haval.c - ext/hash/hash_md.c - ext/hash/hash_ripemd.c - ext/hash/hash_salsa.c - ext/hash/hash_sha.c - ext/hash/hash_snefru.c - ext/hash/hash_tiger.c - ext/hash/hash_whirlpool.c - ext/hash/php_hash.h: - make the hash_ops structures const and save some memory - -2007-01-08 Sara Golemon - - * ext/curl/interface.c: - Add CURLOPT_TCP_NODELAY - - * ext/libxml/libxml.c - ext/libxml/php_libxml.h: - Allow libxml DomNodes to remain persistent when requested by other - extensions - -2007-01-08 Andrei Zmievski - - * ext/imap/config.m4: - Fix IMAP check. - - * ZendEngine2/zend_unicode.c: - Let caller issue error. - - * ZendEngine2/zend_vm_def.h: - Note. - -2007-01-08 Ilia Alshanetsky - - * ext/standard/string.c: - - MFB: Use safe_emalloc() rather then emalloc() - - * (PHP_4_4) - ext/standard/string.c: - - MFH: Use safe_emalloc() rather then emalloc() - - * (PHP_5_2) - ext/standard/string.c: - - Use safe_emalloc() rather then emalloc() - - * (PHP_5_2) - NEWS - ext/spl/php_spl.c - ext/spl/tests/bug38325.phpt - ext/spl/tests/bug38325.phpt: - - Fixed bug #38325 (spl_autoload_register() gaves wrong line for "class - not found"). - - * (PHP_5_2) - ext/spl/php_spl.c - main/main.c - main/php_main.h: - - Provide means for opening file for zend with error supression. Allows us - to - avoid INI hackery such as the one used in SPL. - -2007-01-08 Edin Kadribasic - - * win32/build/Makefile: - Make mt more silent - -2007-01-07 Sara Golemon - - * ZendEngine2/zend_alloc.h: - Typo - -2007-01-07 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - ext/openssl/config.w32 - ext/openssl/config0.m4 - ext/openssl/openssl.c: - - Fixed bug #39394 (Missing check for older variants of openssl). - -2007-01-07 Hannes Magnusson - - * ext/date/tests/bug37514.phpt: - Use relative timestamp - - * (PHP_5_2) - ext/date/tests/bug37514.phpt: - Use relative timestamp - -2007-01-07 Sara Golemon - - * ext/standard/user_filters.c - ext/standard/tests/filters/001.phpt - ext/standard/tests/filters/bug35916.phpt: - Remaining unicode updates for user filters - - * ZendEngine2/zend_API.c - ZendEngine2/zend_API.h: - Add add_property_zstr(l)(_ex)() - - * ZendEngine2/zend_alloc.h: - Add pestrndup() - - * ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.h: - Fix prior commit noticing this time that persistent allocators start with - zend_*() and that one already exists - - * ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.h: - Flesh out some missing API calls - -2007-01-07 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - ext/pgsql/pgsql.c: - - Fixed bug #39979 (PGSQL_CONNECT_FORCE_NEW will causes next connect to - establish a new connection). - - * (PHP_5_2) - NEWS - ext/spl/spl_array.c - ext/spl/tests/bug40036.phpt - ext/spl/tests/bug40036.phpt: - - Fixed bug #40036 (empty() does not work correctly with ArrayObject when - using ARRAY_AS_PROPS). - - * (PHP_5_2) - ext/zip/php_zip.c: - Fixed memory leaks on error - -2007-01-06 Nuno Lopes - - * main/php_logos.c: - make a var static - - * ext/zip/php_zip.c: - MFB - - * (PHP_5_2) - ext/zip/php_zip.c: - fix a few memleaks and double-free()s on error conditions - - * ext/ming/config.m4 - ext/ming/ming.c - ext/ming/php_ming.h: - MFB: fix build with libming 0.3 - - * (PHP_5_2) - ext/ming/config.m4 - ext/ming/ming.c - ext/ming/php_ming.h: - fix build with libming 0.3 and older - -2007-01-06 Rob Richards - - * (PHP_5_2) - README.UPDATE_5_2: - update xmlwriter_write_dtd_entity parameters - - * (PHP_5_2) - ext/xmlwriter/php_xmlwriter.c - ext/xmlwriter/tests/bug39504.phpt: - MFH: parameter entity argument (pe) should be bool - update test - - * ext/xmlwriter/php_xmlwriter.c - ext/xmlwriter/tests/bug39504.phpt: - parameter entity argument (pe) should be bool - update test - -2007-01-06 Ilia Alshanetsky - - * (PHP_5_2) - ext/session/tests/016.phpt: - - - removed dl() block - -2007-01-06 Hannes Magnusson - - * ext/session/tests/016.phpt: - MFB: fix skipif - - * (PHP_5_2) - ext/session/tests/016.phpt: - Fix skipif - - * (PHP_5_2) - NEWS - README.UPDATE_5_2: - ext/XMLWriter updates - - * NEWS: - Remove bugfix entry (will be in 5.2.1) - - * ext/xmlwriter/php_xmlwriter.c: - Fix parameter parsing - - * (PHP_5_2) - ext/xmlwriter/php_xmlwriter.c - ext/xmlwriter/tests/008.phpt - ext/xmlwriter/tests/bug39504.phpt: - MFH: bug #39504 (xmlwriter_write_dtd_entity() creates Attlist tag, not - entity) - Add & improve test - -2007-01-06 Dmitry Stogov - - * (PHP_5_2) - NEWS - ext/standard/proc_open.c - ext/standard/proc_open.c: - Improved proc_open(). Now on Windows it can run external commands not - through CMD.EXE - -2007-01-06 Georg Richter - - * ext/mysqli/mysqli_api.c: - merged from 5_2 (mysqli_info crash) - -2007-01-05 Sara Golemon - - * (PHP_5_2) - ext/posix/config.m4: - MFH: (r-1.16) ttyname_r() is broken on BSD - - * ext/posix/config.m4 - ext/posix/posix.c: - Refix posix_ttyname(), test for a working implementation of ttyname_r() -- - which BSD doesn't have - - * ext/posix/posix.c: - BSD4.1 (possibly others) doesn't support _SC_TTY_NAME_MAX - - * ZendEngine2/zend_builtin_functions.c: - Update create_function() - -2007-01-05 Andrei Zmievski - - * ext/standard/basic_functions.c: - Clean up set_include_path(). - -2007-01-05 Sara Golemon - - * ext/session/mod_files.c: - Don't bother with conversion when the converter is already UTF8 - -2007-01-05 Hannes Magnusson - - * ext/date/tests/bug37514.phpt - ext/date/tests/oo_002.phpt - ext/standard/tests/strings/bug26819.phpt: - MFB: Fix tests - - * (PHP_5_2) - ext/standard/tests/strings/bug26819.phpt: - Fix test according to bug#40009 - - * (PHP_5_2) - ext/date/tests/bug37514.phpt - ext/date/tests/oo_002.phpt: - Fix tests - -2007-01-05 Ilia Alshanetsky - - * (PHP_5_2) - ext/fbsql/php_fbsql.c - ext/gd/gd.c - ext/ldap/ldap.c - ext/pdo_firebird/firebird_statement.c - ext/pgsql/pgsql.c - ext/soap/php_encoding.c - ext/standard/uniqid.c - ext/sysvmsg/sysvmsg.c: - - %f -> %F - -2007-01-05 Sebastian Bergmann - - * ext/session/mod_files.c - ext/session/session.c: - Fix ZTS issues. - -2007-01-05 Edin Kadribasic - - * (PHP_4_4) - ext/curl/curl.dsp: - New curl lib needs CURL_STATICLIB define when linked statically - -2007-01-05 Derick Rethans - - * (PHP_4_4) - NEWS - configure.in - main/php_version.h: - - Back to -dev - - * (PHP_4_4) - NEWS - configure.in - main/php_version.h: - - 4.4.5rc1 - -2007-01-05 Sara Golemon - - * NEWS - ext/session/CREDITS - ext/session/php_session.h - ext/session/session.c: - Allow ext/session to use ext/hash's algorithms for generating IDs - - * ext/session/mod_files.c - ext/session/mod_user.c - ext/session/php_session.h - ext/session/session.c - ext/session/tests/001.phpt - ext/session/tests/003.phpt - ext/session/tests/004.phpt - ext/session/tests/005.phpt: - Unicode Updates - -2007-01-04 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - configure.in - main/php_version.h: - - Back to dev - - * (PHP_5_2) - NEWS - configure.in - main/php_version.h: - - 5.2.1RC2 - - * ext/session/mod_files.c: - - MFB: Added missing open_basedir checks - - * (PHP_5_2) - ext/session/mod_files.c: - - Added missing open_basedir checks - -2007-01-04 Sara Golemon - - * ext/session/mod_files.c - ext/session/mod_mm.c - ext/session/mod_user.c - ext/session/php_session.h - ext/session/session.c: - Cleanup ext/session so that I can do a unicode update without going insane. - -2007-01-04 Nuno Lopes - - * Makefile.gcov: - MFB - - * (PHP_5_2) - Makefile.gcov: - remove --show-details from lcov's genhtml, as currently we don't separate - the coverage data per test, making this option useless - -2007-01-03 Ilia Alshanetsky - - * ext/standard/http.c: - - MFB: Fixed bug #40009 (http_build_query(array()) returns NULL). - - * (PHP_5_2) - NEWS - ext/standard/http.c: - - Fixed bug #40009 (http_build_query(array()) returns NULL). - -2007-01-03 Nuno Lopes - - * ext/zlib/tests/bug_34821.phpt: - MFB - - * (PHP_5_2) - ext/zlib/tests/bug_34821.phpt: - reduce the test data size even further or when running with valgrind it - times out - - * (PHP_5_2) - ext/pdo/pdo_sql_parser.c - ext/pdo/pdo_sql_parser.re: - MFH: fix infinite cycle - - * ext/pdo/pdo_sql_parser.c - ext/pdo/pdo_sql_parser.re: - fix a bug where PHP would enter in an infinite cycle with chars with ascii - value > 127 - while at it, remove the lim structure parameter (it wasn't being used) - -2007-01-03 Antony Dovgal - - * ZendEngine2/zend_extensions.h - ZendEngine2/zend_modules.h - ext/exif/exif.c - ext/mime_magic/mime_magic.c - ext/sqlite/sqlite.c: - more magic number fixes - - * ext/oci8/oci8_interface.c: - use constant - -2007-01-03 Nuno Lopes - - * ext/pdo/php_pdo_driver.h: - fix PDO_DRIVER_API - - * ext/pdo/pdo_sql_parser.c: - fix lcov build - -2007-01-03 Hannes Magnusson - - * ext/pcre/pcrelib/pcregrep.c: - Revert pcrelib version string to 2006 - -2007-01-03 Nuno Lopes - - * (PHP_4_4) - ext/ftp/ftp.c: - merge Tony's patch to fix memleak - -2007-01-03 Antony Dovgal - - * sapi/apache2filter/php_functions.c - sapi/apache2handler/php_functions.c: - fix magic numbers - - * ext/pcre/pcrelib/pcre.h: - revert this date to its previous state - -2007-01-03 Derick Rethans - - * ext/date/php_date.c: - - MFB: Fixed bug #40012 (php_date.c doesnt compile on Netware). - - * (PHP_5_2) - NEWS - ext/date/php_date.c: - - Fixed bug #40012 (php_date.c doesnt compile on Netware). - -2007-01-03 Antony Dovgal - - * ext/date/tests/bug37514.phpt: - and one more.. - - * ext/date/tests/oo_002.phpt - ext/date/tests/oo_002.phpt: - fix test - -2007-01-03 Ilia Alshanetsky - - * ext/fdf/fdf.c - ext/fdf/fdf.c: - Use proper length - - * ext/fdf/fdf.c: - MFB: - Added filter callback - Unlink temporary file on error - - * (PHP_5_2) - ext/fdf/fdf.c: - Added filter callback - Unlink temporary file on error - -2007-01-02 Marcus Boerger - - * ext/spl/spl_array.c: - - Make Andrei happy - spread some U's - -2007-01-02 Nuno Lopes - - * ext/standard/proc_open.c: - MFB - - * (PHP_5_2) - NEWS - ext/standard/proc_open.c: - +- Fixed bug #37619 (proc_open() closes stdin on fork() failure). - -2007-01-02 Ilia Alshanetsky - - * (PHP_4_4) - ext/zip/zip.c: - - Added length parameter validator to zip_entry_read() - -2007-01-02 Georg Richter - - * ext/mysqli/mysqli_api.c: - fixed parameters for unicode in mysqli_change_user - -2007-01-01 Nuno Lopes - - * acinclude.m4 - acinclude.m4: - MFB - - * (PHP_5_2) - acinclude.m4: - add EXTRA_LDFLAGS_PROGRAM to config.nice (as LDFLAG is quite useless) - -2007-01-01 Ilia Alshanetsky - - * ext/dba/libinifile/inifile.c: - - MFB: fixed compiler warnings - - * (PHP_5_2) - ext/dba/libinifile/inifile.c: - - fixed compiler warnings - - * (PHP_5_2) - ext/xmlwriter/php_xmlwriter.c: - - fixed compiler warning - - * (PHP_5_2) - header - run-tests.php - server-tests.php - build/build.mk - build/build2.mk - build/buildcheck.sh - ext/informix/ifx.ec - ext/interbase/interbase.rc - main/build-defs.h.in - main/internal_functions.c.in - scripts/dev/check_parameters.php - scripts/dev/conv_z_macros - win32/php5dllts.rc2 - win32/php5ts.rc2 - win32/php5ts_cli.rc2 - win32/build/Makefile - win32/build/buildconf.js - win32/build/confutils.js - win32/build/cvsclean.js - win32/build/template.rc: - - Update copyright year - - - * (PHP_5_2) - ext/pdo_oci/oci_driver.c - ext/pdo_oci/oci_statement.c: - - Fixed compiler warnings - - * (PHP_5_2) - ext/xmlwriter/php_xmlwriter.c: - - Added missing entity functions (MFH from HEAD) - Fixed php_xmlwriter_streams_IO_close() docs - -2007-01-01 Sebastian Bergmann - - * TSRM/TSRM.c - TSRM/TSRM.h - TSRM/tsrm_nw.c - TSRM/tsrm_nw.h - TSRM/tsrm_virtual_cwd.c - TSRM/tsrm_virtual_cwd.h - TSRM/tsrm_win32.c - TSRM/tsrm_win32.h - ZendEngine2/acconfig.h - ZendEngine2/zend.c - ZendEngine2/zend.h - ZendEngine2/zend_API.c - ZendEngine2/zend_API.h - ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.h - ZendEngine2/zend_arg_defs.c - ZendEngine2/zend_builtin_functions.c - ZendEngine2/zend_builtin_functions.h - ZendEngine2/zend_compile.c - ZendEngine2/zend_compile.h - ZendEngine2/zend_config.nw.h - ZendEngine2/zend_config.w32.h - ZendEngine2/zend_constants.c - ZendEngine2/zend_constants.h - ZendEngine2/zend_default_classes.c - ZendEngine2/zend_dynamic_array.c - ZendEngine2/zend_dynamic_array.h - ZendEngine2/zend_errors.h - ZendEngine2/zend_exceptions.c - ZendEngine2/zend_exceptions.h - ZendEngine2/zend_execute.c - ZendEngine2/zend_execute.h - ZendEngine2/zend_execute_API.c - ZendEngine2/zend_extensions.c - ZendEngine2/zend_extensions.h - ZendEngine2/zend_fast_cache.h - ZendEngine2/zend_globals.h - ZendEngine2/zend_globals_macros.h - ZendEngine2/zend_hash.c - ZendEngine2/zend_hash.h - ZendEngine2/zend_highlight.c - ZendEngine2/zend_highlight.h - ZendEngine2/zend_indent.c - ZendEngine2/zend_indent.h - ZendEngine2/zend_ini.c - ZendEngine2/zend_ini.h - ZendEngine2/zend_ini_scanner.h - ZendEngine2/zend_interfaces.c - ZendEngine2/zend_interfaces.h - ZendEngine2/zend_istdiostream.h - ZendEngine2/zend_iterators.c - ZendEngine2/zend_iterators.h - ZendEngine2/zend_language_scanner.h - ZendEngine2/zend_list.c - ZendEngine2/zend_list.h - ZendEngine2/zend_llist.c - ZendEngine2/zend_llist.h - ZendEngine2/zend_modules.h - ZendEngine2/zend_multiply.h - ZendEngine2/zend_object_handlers.c - ZendEngine2/zend_object_handlers.h - ZendEngine2/zend_objects.c - ZendEngine2/zend_objects.h - ZendEngine2/zend_objects_API.c - ZendEngine2/zend_objects_API.h - ZendEngine2/zend_opcode.c - ZendEngine2/zend_operators.c - ZendEngine2/zend_operators.h - ZendEngine2/zend_ptr_stack.c - ZendEngine2/zend_ptr_stack.h - ZendEngine2/zend_qsort.c - ZendEngine2/zend_qsort.h - ZendEngine2/zend_sprintf.c - ZendEngine2/zend_stack.c - ZendEngine2/zend_stack.h - ZendEngine2/zend_static_allocator.c - ZendEngine2/zend_static_allocator.h - ZendEngine2/zend_stream.c - ZendEngine2/zend_stream.h - ZendEngine2/zend_strtod.h - ZendEngine2/zend_ts_hash.c - ZendEngine2/zend_ts_hash.h - ZendEngine2/zend_types.h - ZendEngine2/zend_unicode.c - ZendEngine2/zend_unicode.h - ZendEngine2/zend_variables.c - ZendEngine2/zend_variables.h - ZendEngine2/zend_vm.h - ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_execute.h - ZendEngine2/zend_vm_opcodes.h - ext/bcmath/bcmath.c - ext/bcmath/php_bcmath.h - ext/bz2/bz2.c - ext/bz2/bz2_filter.c - ext/bz2/php_bz2.h - ext/calendar/cal_unix.c - ext/calendar/calendar.c - ext/calendar/easter.c - ext/com_dotnet/com_com.c - ext/com_dotnet/com_dotnet.c - ext/com_dotnet/com_extension.c - ext/com_dotnet/com_handlers.c - ext/com_dotnet/com_iterator.c - ext/com_dotnet/com_misc.c - ext/com_dotnet/com_olechar.c - ext/com_dotnet/com_persist.c - ext/com_dotnet/com_saproxy.c - ext/com_dotnet/com_typeinfo.c - ext/com_dotnet/com_variant.c - ext/com_dotnet/com_wrapper.c - ext/com_dotnet/php_com_dotnet.h - ext/com_dotnet/php_com_dotnet_internal.h - ext/ctype/ctype.c - ext/ctype/php_ctype.h - ext/curl/interface.c - ext/curl/multi.c - ext/curl/php_curl.h - ext/curl/streams.c - ext/date/php_date.c - ext/date/php_date.h - ext/date/lib/astro.c - ext/date/lib/dow.c - ext/date/lib/parse_date.c - ext/date/lib/parse_tz.c - ext/date/lib/timelib.c - ext/date/lib/timelib.h - ext/date/lib/timelib_structs.h - ext/date/lib/timezonedb.h - ext/date/lib/tm2unixtime.c - ext/date/lib/unixtime2tm.c - ext/dba/dba.c - ext/dba/dba_cdb.c - ext/dba/dba_db1.c - ext/dba/dba_db2.c - ext/dba/dba_db3.c - ext/dba/dba_db4.c - ext/dba/dba_dbm.c - ext/dba/dba_flatfile.c - ext/dba/dba_gdbm.c - ext/dba/dba_inifile.c - ext/dba/dba_ndbm.c - ext/dba/dba_qdbm.c - ext/dba/php_dba.h - ext/dba/libcdb/cdb.c - ext/dba/libcdb/cdb.h - ext/dba/libcdb/cdb_make.c - ext/dba/libcdb/cdb_make.h - ext/dba/libcdb/uint32.c - ext/dba/libcdb/uint32.h - ext/dba/libflatfile/flatfile.c - ext/dba/libflatfile/flatfile.h - ext/dba/libinifile/inifile.c - ext/dba/libinifile/inifile.h - ext/dbase/dbase.c - ext/dbase/php_dbase.h - ext/dom/attr.c - ext/dom/cdatasection.c - ext/dom/characterdata.c - ext/dom/comment.c - ext/dom/document.c - ext/dom/documentfragment.c - ext/dom/documenttype.c - ext/dom/dom_ce.h - ext/dom/dom_fe.h - ext/dom/dom_iterators.c - ext/dom/dom_properties.h - ext/dom/domconfiguration.c - ext/dom/domerror.c - ext/dom/domerrorhandler.c - ext/dom/domexception.c - ext/dom/domimplementation.c - ext/dom/domimplementationlist.c - ext/dom/domimplementationsource.c - ext/dom/domlocator.c - ext/dom/domstringlist.c - ext/dom/element.c - ext/dom/entity.c - ext/dom/entityreference.c - ext/dom/namednodemap.c - ext/dom/namelist.c - ext/dom/node.c - ext/dom/nodelist.c - ext/dom/notation.c - ext/dom/php_dom.c - ext/dom/php_dom.h - ext/dom/processinginstruction.c - ext/dom/string_extend.c - ext/dom/text.c - ext/dom/typeinfo.c - ext/dom/userdatahandler.c - ext/dom/xml_common.h - ext/dom/xpath.c - ext/exif/exif.c - ext/exif/php_exif.h - ext/fbsql/php_fbsql.c - ext/fbsql/php_fbsql.h - ext/fdf/fdf.c - ext/fdf/php_fdf.h - ext/filter/callback_filter.c - ext/filter/filter.c - ext/filter/filter_private.h - ext/filter/logical_filters.c - ext/filter/php_filter.h - ext/filter/sanitizing_filters.c - ext/ftp/ftp.c - ext/ftp/ftp.h - ext/ftp/php_ftp.c - ext/ftp/php_ftp.h - ext/gd/gd.c - ext/gd/gd_ctx.c - ext/gd/php_gd.h - ext/gd/libgd/xbm.c - ext/gettext/gettext.c - ext/gettext/php_gettext.h - ext/gmp/gmp.c - ext/gmp/php_gmp.h - ext/hash/hash.c - ext/hash/hash_adler32.c - ext/hash/hash_crc32.c - ext/hash/hash_gost.c - ext/hash/hash_haval.c - ext/hash/hash_md.c - ext/hash/hash_ripemd.c - ext/hash/hash_salsa.c - ext/hash/hash_sha.c - ext/hash/hash_snefru.c - ext/hash/hash_tiger.c - ext/hash/hash_whirlpool.c - ext/hash/php_hash.h - ext/hash/php_hash_adler32.h - ext/hash/php_hash_crc32.h - ext/hash/php_hash_crc32_tables.h - ext/hash/php_hash_gost.h - ext/hash/php_hash_haval.h - ext/hash/php_hash_md.h - ext/hash/php_hash_ripemd.h - ext/hash/php_hash_salsa.h - ext/hash/php_hash_sha.h - ext/hash/php_hash_snefru.h - ext/hash/php_hash_snefru_tables.h - ext/hash/php_hash_tiger.h - ext/hash/php_hash_tiger_tables.h - ext/hash/php_hash_types.h - ext/hash/php_hash_whirlpool.h - ext/hash/php_hash_whirlpool_tables.h - ext/iconv/iconv.c - ext/iconv/php_iconv.h - ext/imap/php_imap.c - ext/imap/php_imap.h - ext/informix/php_informix.h - ext/informix/php_informix_includes.h - ext/interbase/ibase_blobs.c - ext/interbase/ibase_events.c - ext/interbase/ibase_query.c - ext/interbase/ibase_service.c - ext/interbase/interbase.c - ext/interbase/php_ibase_includes.h - ext/interbase/php_ibase_udf.c - ext/interbase/php_interbase.h - ext/json/json.c - ext/json/php_json.h - ext/ldap/ldap.c - ext/ldap/php_ldap.h - ext/libxml/libxml.c - ext/libxml/php_libxml.h - ext/mbstring/mb_gpc.c - ext/mbstring/mb_gpc.h - ext/mbstring/mbstring.c - ext/mbstring/mbstring.h - ext/mbstring/php_mbregex.c - ext/mbstring/php_mbregex.h - ext/mbstring/php_unicode.c - ext/mbstring/php_unicode.h - ext/mcrypt/mcrypt.c - ext/mcrypt/php_mcrypt.h - ext/mhash/mhash.c - ext/mhash/php_mhash.h - ext/mime_magic/mime_magic.c - ext/mime_magic/php_mime_magic.h - ext/mime_magic/phpmimemagic.h - ext/ming/ming.c - ext/ming/php_ming.h - ext/msql/php_msql.c - ext/msql/php_msql.h - ext/mssql/php_mssql.c - ext/mssql/php_mssql.h - ext/mysql/php_mysql.c - ext/mysql/php_mysql.h - ext/mysqli/mysqli.c - ext/mysqli/mysqli_api.c - ext/mysqli/mysqli_driver.c - ext/mysqli/mysqli_embedded.c - ext/mysqli/mysqli_exception.c - ext/mysqli/mysqli_fe.c - ext/mysqli/mysqli_nonapi.c - ext/mysqli/mysqli_prop.c - ext/mysqli/mysqli_repl.c - ext/mysqli/mysqli_report.c - ext/mysqli/mysqli_report.h - ext/mysqli/mysqli_warning.c - ext/mysqli/php_mysqli.h - ext/oci8/oci8.c - ext/oci8/oci8_collection.c - ext/oci8/oci8_interface.c - ext/oci8/oci8_lob.c - ext/oci8/oci8_statement.c - ext/oci8/php_oci8.h - ext/oci8/php_oci8_int.h - ext/odbc/birdstep.c - ext/odbc/php_birdstep.h - ext/odbc/php_odbc.c - ext/odbc/php_odbc.h - ext/odbc/php_odbc_includes.h - ext/openssl/openssl.c - ext/openssl/php_openssl.h - ext/openssl/xp_ssl.c - ext/pcntl/pcntl.c - ext/pcntl/php_pcntl.h - ext/pcntl/php_signal.c - ext/pcntl/php_signal.h - ext/pcre/php_pcre.c - ext/pcre/php_pcre.h - ext/pcre/pcrelib/dftables.c - ext/pcre/pcrelib/pcre.h - ext/pcre/pcrelib/pcre_compile.c - ext/pcre/pcrelib/pcre_config.c - ext/pcre/pcrelib/pcre_exec.c - ext/pcre/pcrelib/pcre_fullinfo.c - ext/pcre/pcrelib/pcre_get.c - ext/pcre/pcrelib/pcre_globals.c - ext/pcre/pcrelib/pcre_info.c - ext/pcre/pcrelib/pcre_internal.h - ext/pcre/pcrelib/pcre_maketables.c - ext/pcre/pcrelib/pcre_ord2utf8.c - ext/pcre/pcrelib/pcre_refcount.c - ext/pcre/pcrelib/pcre_study.c - ext/pcre/pcrelib/pcre_tables.c - ext/pcre/pcrelib/pcre_try_flipped.c - ext/pcre/pcrelib/pcre_ucp_searchfuncs.c - ext/pcre/pcrelib/pcre_valid_utf8.c - ext/pcre/pcrelib/pcre_version.c - ext/pcre/pcrelib/pcre_xclass.c - ext/pcre/pcrelib/pcregrep.c - ext/pcre/pcrelib/pcreposix.c - ext/pcre/pcrelib/pcreposix.h - ext/pdo/pdo.c - ext/pdo/pdo_dbh.c - ext/pdo/pdo_sql_parser.c - ext/pdo/pdo_sqlstate.c - ext/pdo/pdo_stmt.c - ext/pdo/php_pdo.h - ext/pdo/php_pdo_driver.h - ext/pdo/php_pdo_int.h - ext/pdo/php_pdo_phpvers_compat.h - ext/pdo_dblib/dblib_driver.c - ext/pdo_dblib/dblib_stmt.c - ext/pdo_dblib/pdo_dblib.c - ext/pdo_dblib/php_pdo_dblib.h - ext/pdo_dblib/php_pdo_dblib_int.h - ext/pdo_firebird/firebird_driver.c - ext/pdo_firebird/firebird_statement.c - ext/pdo_firebird/pdo_firebird.c - ext/pdo_firebird/php_pdo_firebird.h - ext/pdo_firebird/php_pdo_firebird_int.h - ext/pdo_mysql/mysql_driver.c - ext/pdo_mysql/mysql_statement.c - ext/pdo_mysql/pdo_mysql.c - ext/pdo_mysql/php_pdo_mysql.h - ext/pdo_mysql/php_pdo_mysql_int.h - ext/pdo_oci/oci_driver.c - ext/pdo_oci/oci_statement.c - ext/pdo_oci/pdo_oci.c - ext/pdo_oci/php_pdo_oci.h - ext/pdo_oci/php_pdo_oci_int.h - ext/pdo_odbc/odbc_driver.c - ext/pdo_pgsql/pdo_pgsql.c - ext/pdo_pgsql/pgsql_driver.c - ext/pdo_pgsql/pgsql_statement.c - ext/pdo_pgsql/php_pdo_pgsql.h - ext/pdo_pgsql/php_pdo_pgsql_int.h - ext/pdo_sqlite/pdo_sqlite.c - ext/pdo_sqlite/php_pdo_sqlite.h - ext/pdo_sqlite/php_pdo_sqlite_int.h - ext/pdo_sqlite/sqlite_driver.c - ext/pdo_sqlite/sqlite_statement.c - ext/pdo_sqlite/sqlite/src/alter.c - ext/pdo_sqlite/sqlite/src/analyze.c - ext/pdo_sqlite/sqlite/src/callback.c - ext/pdo_sqlite/sqlite/src/complete.c - ext/pdo_sqlite/sqlite/src/loadext.c - ext/pdo_sqlite/sqlite/src/os_unix.c - ext/pdo_sqlite/sqlite/src/prepare.c - ext/pdo_sqlite/sqlite/src/sqlite3ext.h - ext/pdo_sqlite/sqlite/src/vdbemem.c - ext/pdo_sqlite/sqlite/src/vtab.c - ext/pgsql/pgsql.c - ext/pgsql/php_pgsql.h - ext/posix/php_posix.h - ext/posix/posix.c - ext/pspell/php_pspell.h - ext/pspell/pspell.c - ext/readline/php_readline.h - ext/readline/readline.c - ext/recode/php_recode.h - ext/recode/recode.c - ext/reflection/php_reflection.c - ext/reflection/php_reflection.h - ext/session/mod_files.c - ext/session/mod_files.h - ext/session/mod_mm.c - ext/session/mod_mm.h - ext/session/mod_user.c - ext/session/mod_user.h - ext/session/php_session.h - ext/session/session.c - ext/shmop/php_shmop.h - ext/shmop/shmop.c - ext/simplexml/php_simplexml.h - ext/simplexml/php_simplexml_exports.h - ext/simplexml/simplexml.c - ext/snmp/php_snmp.h - ext/snmp/snmp.c - ext/soap/php_encoding.c - ext/soap/php_encoding.h - ext/soap/php_http.c - ext/soap/php_http.h - ext/soap/php_packet_soap.c - ext/soap/php_packet_soap.h - ext/soap/php_schema.c - ext/soap/php_schema.h - ext/soap/php_sdl.c - ext/soap/php_sdl.h - ext/soap/php_soap.h - ext/soap/php_xml.c - ext/soap/php_xml.h - ext/soap/soap.c - ext/sockets/php_sockets.h - ext/sockets/php_sockets_win.c - ext/sockets/php_sockets_win.h - ext/sockets/sockets.c - ext/sockets/unix_socket_constants.h - ext/sockets/win32_socket_constants.h - ext/spl/php_spl.c - ext/spl/php_spl.h - ext/spl/spl_array.c - ext/spl/spl_array.h - ext/spl/spl_directory.c - ext/spl/spl_directory.h - ext/spl/spl_engine.c - ext/spl/spl_engine.h - ext/spl/spl_exceptions.c - ext/spl/spl_exceptions.h - ext/spl/spl_functions.c - ext/spl/spl_functions.h - ext/spl/spl_iterators.c - ext/spl/spl_iterators.h - ext/spl/spl_observer.c - ext/spl/spl_observer.h - ext/spl/spl_sxe.c - ext/spl/spl_sxe.h - ext/sqlite/pdo_sqlite2.c - ext/sqlite/php_sqlite.h - ext/sqlite/sess_sqlite.c - ext/sqlite/sqlite.c - ext/sqlite/libsqlite/src/date.c - ext/sqlite/libsqlite/src/encode.c - ext/sqlite/libsqlite/src/vdbe.c - ext/standard/array.c - ext/standard/assert.c - ext/standard/base64.c - ext/standard/base64.h - ext/standard/basic_functions.c - ext/standard/basic_functions.h - ext/standard/browscap.c - ext/standard/crc32.c - ext/standard/crc32.h - ext/standard/credits.c - ext/standard/credits.h - ext/standard/crypt.c - ext/standard/css.c - ext/standard/css.h - ext/standard/cyr_convert.c - ext/standard/cyr_convert.h - ext/standard/datetime.c - ext/standard/datetime.h - ext/standard/dir.c - ext/standard/dl.c - ext/standard/dl.h - ext/standard/dns.c - ext/standard/dns.h - ext/standard/exec.c - ext/standard/exec.h - ext/standard/file.c - ext/standard/file.h - ext/standard/filestat.c - ext/standard/filters.c - ext/standard/flock_compat.c - ext/standard/flock_compat.h - ext/standard/formatted_print.c - ext/standard/fsock.c - ext/standard/fsock.h - ext/standard/ftok.c - ext/standard/ftp_fopen_wrapper.c - ext/standard/head.c - ext/standard/head.h - ext/standard/html.c - ext/standard/html.h - ext/standard/http.c - ext/standard/http_fopen_wrapper.c - ext/standard/image.c - ext/standard/incomplete_class.c - ext/standard/info.c - ext/standard/info.h - ext/standard/iptc.c - ext/standard/lcg.c - ext/standard/levenshtein.c - ext/standard/link.c - ext/standard/mail.c - ext/standard/math.c - ext/standard/md5.c - ext/standard/md5.h - ext/standard/metaphone.c - ext/standard/microtime.c - ext/standard/microtime.h - ext/standard/pack.c - ext/standard/pack.h - ext/standard/pageinfo.c - ext/standard/pageinfo.h - ext/standard/php_array.h - ext/standard/php_assert.h - ext/standard/php_browscap.h - ext/standard/php_crypt.h - ext/standard/php_dir.h - ext/standard/php_ext_syslog.h - ext/standard/php_filestat.h - ext/standard/php_fopen_wrapper.c - ext/standard/php_fopen_wrappers.h - ext/standard/php_ftok.h - ext/standard/php_http.h - ext/standard/php_image.h - ext/standard/php_incomplete_class.h - ext/standard/php_iptc.h - ext/standard/php_lcg.h - ext/standard/php_link.h - ext/standard/php_mail.h - ext/standard/php_math.h - ext/standard/php_metaphone.h - ext/standard/php_rand.h - ext/standard/php_smart_str.h - ext/standard/php_smart_str_public.h - ext/standard/php_standard.h - ext/standard/php_string.h - ext/standard/php_type.h - ext/standard/php_uuencode.h - ext/standard/php_var.h - ext/standard/php_versioning.h - ext/standard/proc_open.c - ext/standard/proc_open.h - ext/standard/quot_print.c - ext/standard/quot_print.h - ext/standard/rand.c - ext/standard/reg.c - ext/standard/reg.h - ext/standard/scanf.c - ext/standard/scanf.h - ext/standard/sha1.c - ext/standard/sha1.h - ext/standard/soundex.c - ext/standard/streamsfuncs.c - ext/standard/streamsfuncs.h - ext/standard/string.c - ext/standard/strnatcmp.c - ext/standard/syslog.c - ext/standard/type.c - ext/standard/uniqid.c - ext/standard/uniqid.h - ext/standard/url.c - ext/standard/url.h - ext/standard/url_scanner.c - ext/standard/url_scanner.h - ext/standard/url_scanner_ex.c - ext/standard/url_scanner_ex.h - ext/standard/user_filters.c - ext/standard/uuencode.c - ext/standard/var.c - ext/standard/var_unserializer.c - ext/standard/versioning.c - ext/sybase/php_sybase_db.c - ext/sybase/php_sybase_db.h - ext/sybase_ct/php_sybase_ct.c - ext/sybase_ct/php_sybase_ct.h - ext/sysvmsg/php_sysvmsg.h - ext/sysvmsg/sysvmsg.c - ext/sysvsem/php_sysvsem.h - ext/sysvsem/sysvsem.c - ext/sysvshm/php_sysvshm.h - ext/sysvshm/sysvshm.c - ext/tidy/php_tidy.h - ext/tidy/tidy.c - ext/tokenizer/php_tokenizer.h - ext/tokenizer/tokenizer.c - ext/unicode/collator.c - ext/unicode/locale.c - ext/unicode/php_property.h - ext/unicode/php_transform.h - ext/unicode/php_unicode.h - ext/unicode/property.c - ext/unicode/transform.c - ext/unicode/unicode.c - ext/unicode/unicode_iterators.c - ext/wddx/php_wddx.h - ext/wddx/php_wddx_api.h - ext/wddx/wddx.c - ext/xml/compat.c - ext/xml/expat_compat.h - ext/xml/php_xml.h - ext/xml/xml.c - ext/xmlreader/php_xmlreader.c - ext/xmlreader/php_xmlreader.h - ext/xmlrpc/php_xmlrpc.h - ext/xmlrpc/xmlrpc-epi-php.c - ext/xmlrpc/libxmlrpc/xml_element.c - ext/xmlrpc/libxmlrpc/xmlrpc.c - ext/xmlwriter/php_xmlwriter.c - ext/xmlwriter/php_xmlwriter.h - ext/xsl/php_xsl.c - ext/xsl/php_xsl.h - ext/xsl/xsl_fe.h - ext/xsl/xsltprocessor.c - ext/zip/php_zip.c - ext/zip/php_zip.h - ext/zip/zip_stream.c - ext/zip/lib/mkstemp.c - ext/zip/lib/zip.h - ext/zip/lib/zip_add_dir.c - ext/zip/lib/zip_close.c - ext/zip/lib/zip_dirent.c - ext/zip/lib/zip_entry_free.c - ext/zip/lib/zip_entry_new.c - ext/zip/lib/zip_err_str.c - ext/zip/lib/zip_error.c - ext/zip/lib/zip_error_clear.c - ext/zip/lib/zip_error_strerror.c - ext/zip/lib/zip_file_error_clear.c - ext/zip/lib/zip_file_get_offset.c - ext/zip/lib/zip_fread.c - ext/zip/lib/zip_get_archive_comment.c - ext/zip/lib/zip_get_file_comment.c - ext/zip/lib/zip_memdup.c - ext/zip/lib/zip_new.c - ext/zip/lib/zip_open.c - ext/zip/lib/zip_replace.c - ext/zip/lib/zip_set_archive_comment.c - ext/zip/lib/zip_set_file_comment.c - ext/zip/lib/zip_source_buffer.c - ext/zip/lib/zip_source_filep.c - ext/zip/lib/zip_source_function.c - ext/zip/lib/zip_source_zip.c - ext/zip/lib/zip_stat_index.c - ext/zip/lib/zip_stat_init.c - ext/zip/lib/zip_unchange.c - ext/zip/lib/zip_unchange_all.c - ext/zip/lib/zip_unchange_archive.c - ext/zip/lib/zipint.h - ext/zlib/php_zlib.h - ext/zlib/zlib.c - ext/zlib/zlib_filter.c - ext/zlib/zlib_fopen_wrapper.c - main/SAPI.c - main/SAPI.h - main/config.w32.h - main/fopen_wrappers.c - main/fopen_wrappers.h - main/internal_functions_nw.c - main/internal_functions_win32.c - main/logos.h - main/main.c - main/network.c - main/output.c - main/php.h - main/php_compat.h - main/php_content_types.c - main/php_content_types.h - main/php_globals.h - main/php_ini.c - main/php_ini.h - main/php_logos.c - main/php_logos.h - main/php_main.h - main/php_memory_streams.h - main/php_network.h - main/php_open_temporary_file.c - main/php_open_temporary_file.h - main/php_output.h - main/php_reentrancy.h - main/php_regex.h - main/php_scandir.c - main/php_scandir.h - main/php_sprintf.c - main/php_streams.h - main/php_syslog.h - main/php_ticks.c - main/php_ticks.h - main/php_variables.c - main/php_variables.h - main/reentrancy.c - main/rfc1867.c - main/rfc1867.h - main/snprintf.c - main/snprintf.h - main/spprintf.c - main/spprintf.h - main/strlcat.c - main/strlcpy.c - main/win95nt.h - main/streams/cast.c - main/streams/filter.c - main/streams/memory.c - main/streams/mmap.c - main/streams/php_stream_context.h - main/streams/php_stream_filter_api.h - main/streams/php_stream_mmap.h - main/streams/php_stream_plain_wrapper.h - main/streams/php_stream_transport.h - main/streams/php_stream_userspace.h - main/streams/php_streams_int.h - main/streams/plain_wrapper.c - main/streams/streams.c - main/streams/transports.c - main/streams/unicode_filter.c - main/streams/userspace.c - main/streams/xp_socket.c - netware/start.c - sapi/aolserver/aolserver.c - sapi/apache/libpre.c - sapi/apache/mod_php5.c - sapi/apache/mod_php5.h - sapi/apache/php_apache.c - sapi/apache/php_apache_http.h - sapi/apache/sapi_apache.c - sapi/apache2filter/apache_config.c - sapi/apache2filter/php_apache.h - sapi/apache2filter/php_functions.c - sapi/apache2filter/sapi_apache2.c - sapi/apache2handler/apache_config.c - sapi/apache2handler/mod_php5.c - sapi/apache2handler/php_apache.h - sapi/apache2handler/php_functions.c - sapi/apache2handler/sapi_apache2.c - sapi/apache_hooks/mod_php5.c - sapi/apache_hooks/mod_php5.h - sapi/apache_hooks/php_apache.c - sapi/apache_hooks/sapi_apache.c - sapi/caudium/caudium.c - sapi/cgi/cgi_main.c - sapi/cgi/fastcgi.c - sapi/cgi/fastcgi.h - sapi/cgi/getopt.c - sapi/cgi/php_getopt.h - sapi/cli/getopt.c - sapi/cli/php_cli.c - sapi/cli/php_cli_readline.c - sapi/cli/php_cli_readline.h - sapi/cli/php_getopt.h - sapi/continuity/capi.c - sapi/embed/php_embed.c - sapi/embed/php_embed.h - sapi/isapi/php5isapi.c - sapi/milter/php_milter.c - sapi/nsapi/nsapi.c - sapi/phttpd/php_phttpd.h - sapi/phttpd/phttpd.c - sapi/pi3web/pi3web_sapi.c - sapi/roxen/roxen.c - sapi/thttpd/php_thttpd.h - sapi/thttpd/thttpd.c - sapi/tux/php_tux.c - sapi/webjames/php_webjames.h - sapi/webjames/webjames.c - win32/crypt_win32.h - win32/glob.c - win32/globals.c - win32/grp.h - win32/md5crypt.c - win32/md5crypt.h - win32/php_win32_globals.h - win32/select.c - win32/select.h - win32/sendmail.c - win32/syslog.h - win32/winutil.c - win32/winutil.h - win32/build/deplister.c: - Bump year. - -2006-12-31 Ilia Alshanetsky - - * ext/filter/logical_filters.c: - - MFB: Simplify code and change strchr() to memchr() - - * (PHP_5_2) - ext/filter/logical_filters.c: - - Simplify code and change strchr() to memchr() - - * (PHP_4_4) - ext/session/session.c: - - MFH: Added boundary checks to php_binary deserializer - - * ext/session/session.c: - MFB: Added boundary checks to php_binary deserializer - - * (PHP_5_2) - ext/session/session.c: - - Added boundary checks to php_binary deserializer - - * main/SAPI.c: - - MFB: Fixed bug #39984 (redirect response code in header() could be ignored - in CGI sapi). - - * (PHP_5_2) - NEWS - main/SAPI.c: - - Fixed bug #39984 (redirect response code in header() could be ignored in - CGI sapi). - -2006-12-31 Marcus Boerger - - * (PHP_5_2) - ext/spl/spl.php: - - MFH Bugfix: #39996 Wrong PHPDoc comment for SplFileInfo::getType() - - * ext/spl/spl.php: - - Bugfix: #39996 Wrong PHPDoc comment for SplFileInfo::getType() - -2006-12-31 Nuno Lopes - - * ext/standard/proc_open.c: - MFB: fix #36427. patch by jdolecek at NetBSD dot org - - * (PHP_5_2) - NEWS - ext/standard/proc_open.c: - - Fixed bug #36427 (proc_open() / proc_close() leak handles on windows). - - * ext/standard/proc_open.c - ext/standard/proc_open.h: - MFB: fix PID info on windows - - * (PHP_5_2) - NEWS - ext/standard/proc_open.c - ext/standard/proc_open.h: - Fixed bug #38542 (proc_get_status() returns wrong PID on windows) - -2006-12-30 Ilia Alshanetsky - - * (PHP_4_4) - ext/sysvshm/sysvshm.c: - MFH: Added missing resource validation checks - - * (PHP_5_2) - ext/sysvshm/sysvshm.c: - Added missing resource validation checks - - * ext/shmop/shmop.c: - MFB: Added missing resource type checks - - * (PHP_5_2) - ext/shmop/shmop.c: - Added missing resource type checks - -2006-12-30 Rob Richards - - * (PHP_5_2) - NEWS: - BFN - - * ext/simplexml/simplexml.c - ext/simplexml/tests/bug39760.phpt: - MFB: fix bug #39760 (cloning fails on nested SimpleXML-Object) - add test - - * (PHP_5_2) - ext/simplexml/simplexml.c - ext/simplexml/tests/bug39760.phpt - ext/simplexml/tests/bug39760.phpt: - fix bug #39760 (cloning fails on nested SimpleXML-Object) - add test - -2006-12-30 Ilia Alshanetsky - - * (PHP_5_2) - ext/xsl/xsltprocessor.c: - - C++ comment - - * ext/standard/tests/strings/pack.phpt: - MFB: Mark test as being 32bit only - - * (PHP_5_2) - ext/standard/tests/strings/pack.phpt: - - Mark test as being 32bit only - - * (PHP_5_2) - ZendEngine2/zend_operators.c: - - Simplify & optimize code - - - * ext/filter/logical_filters.c: - - MFB: Fixes test #50 - - * (PHP_5_2) - ext/filter/logical_filters.c: - - Fixes test #50 - -2006-12-29 Ilia Alshanetsky - - * (PHP_4_4) - NEWS - ext/pgsql/pgsql.c: - - MFH: Fixed bug #39971 (pg_insert/pg_update do not allow now() to be used - for - timestamp fields). - - * ext/pgsql/pgsql.c: - MFB: Fixed bug #39971 (pg_insert/pg_update do not allow now() to be used - for - timestamp fields). - - * ext/pgsql/tests/80_bug39971.phpt - ext/pgsql/tests/80_bug39971.phpt: - - file 80_bug39971.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - NEWS - ext/pgsql/pgsql.c: - - Fixed bug #39971 (pg_insert/pg_update do not allow now() to be used for - timestamp fields). - -2006-12-28 Antony Dovgal - - * sapi/cgi/cgi_main.c: - make sure l != 0 - - * (PHP_5_2) - ZendEngine2/zend.c: - that was not intentional - thanks Nuno - - * ZendEngine2/zend.c: - nuke dead code - - * ext/fdf/fdf.c - ext/mime_magic/mime_magic.c: - use strlcpy() - -2006-12-28 Nuno Lopes - - * ext/zlib/tests/bug_34821.phpt: - MFB - - * (PHP_5_2) - ext/zlib/tests/bug_34821.phpt: - make this test run a little faster (is currently timeout with valgrind) - -2006-12-28 Antony Dovgal - - * ext/mysql/php_mysql.c: - include basic_functions.h for php_get_current_user() declaration - - * ext/fdf/fdf.c: - it's ptr, not ptrptr - - * ext/dba/libflatfile/flatfile.c: - use the macro, casting works only with GCC - - * sapi/embed/php_embed.c: - fix sapi/embed build - -2006-12-28 Ilia Alshanetsky - - * ext/pgsql/pgsql.c: - - MFB: Added buffer length checks - - * (PHP_5_2) - ext/pgsql/pgsql.c: - - Added buffer length checks - -2006-12-28 Antony Dovgal - - * sapi/apache_hooks/php_apache.c: - fix build - -2006-12-28 Ilia Alshanetsky - - * main/php_logos.c: - - MFB: strcat() stuff - - * (PHP_5_2) - ext/standard/proc_open.c - main/php_logos.c: - - Simplify code and eliminate strcat() usage - -2006-12-28 Nuno Lopes - - * run-tests.php: - force tidy.clean_output=0 - -2006-12-28 Antony Dovgal - - * ext/standard/file.c: - fix ZTS build - - * ext/odbc/php_odbc.c - main/php_ini.c - sapi/apache/php_apache.c - sapi/apache_hooks/php_apache.c: - use strlcat() - - * ext/sockets/sockets.c - ext/standard/reg.c: - minor improvements - - * main/main.c: - use strlcat() and a bigger buffer - -2006-12-28 Ilia Alshanetsky - - * (PHP_5_2) - ZendEngine2/zend_execute_API.c: - Avoid strcpy() & strcat() - -2006-12-27 Antony Dovgal - - * (PHP_4_4) - Zend/zend_ini.c: - fix build - - * ext/session/tests/001.phpt - ext/session/tests/004.phpt - ext/session/tests/005.phpt - ext/standard/tests/general_functions/include_path.phpt - ext/standard/tests/general_functions/parse_ini_file.phpt - ext/standard/tests/strings/bug20108.phpt - ext/standard/tests/strings/bug25671.phpt - ext/standard/tests/strings/bug27278.phpt - ext/standard/tests/strings/bug39873.phpt - ext/standard/tests/time/bug38524.phpt: - fix tests - - * ext/standard/math.c: - NULL is a special value for number_format() meaning "use default separator" - - * ZendEngine2/zend_operators.c: - restore old behaviour when casting objects to strings and NULL - - * ZendEngine2/zend_operators.c: - fix convert_to_unicode() and convert_to_string() which didn't set the type - of the op properly - - * ext/standard/tests/file/fscanf.phpt - ext/standard/tests/strings/bug21730.phpt: - fix *scanf() tests - - * ZendEngine2/zend_operators.h - ZendEngine2/zend_strtol.c: - add zend_u_strtoul() and fix build - - * main/php_streams.h: - fix php_stream_u_get_line() macro - -2006-12-27 Nuno Lopes - - * (PHP_5_2) - ext/session/tests/008.phpt: - die("skip this is for PHP < 4.2.3"); - - * ext/standard/tests/strings/htmlentities02.phpt: - MFB - - * (PHP_5_2) - ext/standard/tests/strings/htmlentities02.phpt: - oops: remove uneeded code in the skip condition - - * (PHP_5_2) - ext/standard/tests/strings/htmlentities02.phpt: - add fr_FR@euro to the setlocale list - -2006-12-27 Antony Dovgal - - * ext/pdo_oci/oci_statement.c: - initialize memory with 0's, so we won't get garbage if the statement does - not set the var - - * (PHP_5_2) - ext/oci8/tests/function_aliases.phpt - ext/oci8/tests/lob_aliases.phpt - ext/oci8/tests/num.phpt - ext/oci8/tests/statement_type.phpt - ext/oci8/tests/statement_type_old.phpt: - MFH more test improvements by Chris Jones - - * ext/oci8/tests/details.inc: - that should not be there.. - - * ext/oci8/tests/details.inc - ext/oci8/tests/function_aliases.phpt - ext/oci8/tests/function_aliases.phpt - ext/oci8/tests/lob_aliases.phpt - ext/oci8/tests/lob_aliases.phpt - ext/oci8/tests/num.phpt - ext/oci8/tests/statement_type.phpt - ext/oci8/tests/statement_type_old.phpt: - more test improvements by Chris Jones - -2006-12-26 Andrei Zmievski - - * ext/standard/file.c - ext/standard/scanf.c - ext/standard/scanf.h - ext/standard/string.c: - Unicode support in sscanf() and fscanf(). (Tony, Andrei) - -2006-12-26 Nuno Lopes - - * ext/snmp/php_snmp.h: - fix build - -2006-12-26 Ilia Alshanetsky - - * ZendEngine2/zend_ini.c - ZendEngine2/zend_ini.h - ext/exif/exif.c - ext/interbase/ibase_query.c - ext/json/json.c - ext/pdo_dblib/dblib_driver.c - ext/pdo_dblib/dblib_stmt.c - ext/pgsql/pgsql.c - ext/soap/php_encoding.c - ext/spl/spl_directory.c - ext/standard/uuencode.c - ext/standard/var.c - main/main.c: - - MFB: safety checks - - * (PHP_4_4) - Zend/zend_ini.c - Zend/zend_ini.h - ext/exif/exif.c - main/main.c: - MFB: safety checks - - * ext/session/session.c: - MFB: Session deserializer protection. - - * (PHP_5_2) - ZendEngine2/zend_strtod.c: - - Fixed compiler warning - - * (PHP_5_2) - ext/curl/interface.c: - Don't forget to free url structure - - * ext/curl/interface.c: - MFB: Fixed bug #39878 (CURL doesn't compile on Sun Studio Pro). - - * (PHP_5_2) - NEWS - ext/curl/interface.c: - Fixed bug #39878 (CURL doesn't compile on Sun Studio Pro). - - * (PHP_5_2) - ext/session/session.c: - Session deserializer protection. - - * (PHP_5_2) - ext/standard/type.c: - is_numeric_string() optimization - - * (PHP_5_2) - ZendEngine2/bench.php - ZendEngine2/zend.c - ZendEngine2/zend_exceptions.c - ZendEngine2/zend_language_scanner.l - ZendEngine2/zend_operators.c - ZendEngine2/zend_operators.h - ZendEngine2/zend_strtod.c - ZendEngine2/zend_strtod.h: - is_numeric_string() optimization - - -2006-12-26 Antony Dovgal - - * ext/xml/xml.c: - fix arguments order (just in the sake of purity) - -2006-12-26 Pierre-Alain Joye - - * ext/gd/config.m4: - - Add better zlib detection - - * (PHP_5_2) - NEWS - ext/zip/config.m4 - ext/zip/config.m4: - - #39952 zip ignoring --with-libdir on zlib checks (judas dot - iscariote at gmail dot com) - -2006-12-26 Dmitry Stogov - - * ext/filter/filter.c - ext/filter/filter.c - ext/filter/filter_private.h - ext/filter/filter_private.h - ext/filter/logical_filters.c - ext/filter/logical_filters.c - ext/filter/tests/030.phpt - ext/filter/tests/030.phpt - ext/filter/tests/045.phpt - ext/filter/tests/046.phpt - ext/filter/tests/047.phpt - ext/filter/tests/048.phpt - ext/filter/tests/049.phpt - ext/filter/tests/050.phpt - ext/filter/tests/051.phpt - ext/filter/tests/bug7733.phpt: - Code review: - . fixed integer overflow - . fixed buffer overflow/underflow - . added more strict IP validation - . reimplemented float number validation - - * ext/filter/tests/045.phpt - ext/filter/tests/045.phpt - ext/filter/tests/046.phpt - ext/filter/tests/046.phpt - ext/filter/tests/047.phpt - ext/filter/tests/047.phpt - ext/filter/tests/048.phpt - ext/filter/tests/048.phpt - ext/filter/tests/049.phpt - ext/filter/tests/049.phpt - ext/filter/tests/050.phpt - ext/filter/tests/050.phpt - ext/filter/tests/051.phpt - ext/filter/tests/051.phpt - ext/filter/tests/bug7733.phpt: - - file 045.phpt was initially added on branch PHP_5_2. - -2006-12-25 Ilia Alshanetsky - - * (PHP_5_2) - ZendEngine2/zend_ini.c - ZendEngine2/zend_ini.h - main/main.c: - - Ensure that OnUpdateLongGEZero is greater or equal to 0. - Added a update wrapper for ensuring >0 values - - * (PHP_5_2) - ext/exif/exif.c: - - Allocation safety checks - -2006-12-25 Antony Dovgal - - * ext/zip/php_zip.c: - add missing space for \0 - -2006-12-25 Ilia Alshanetsky - - * (PHP_5_2) - ext/pgsql/pgsql.c - ext/soap/php_encoding.c - ext/spl/spl_directory.c - ext/standard/math.c - main/main.c: - Allocation safety checks - -2006-12-25 Antony Dovgal - - * ext/xsl/xsltprocessor.c: - more safe_emalloc() - -2006-12-25 Ilia Alshanetsky - - * (PHP_5_2) - ext/interbase/ibase_query.c - ext/json/json.c - ext/oci8/oci8_statement.c - ext/pdo_dblib/dblib_driver.c - ext/pdo_dblib/dblib_stmt.c - ext/standard/uuencode.c - ext/standard/var.c: - Use safe_emalloc() - - * ext/standard/tests/array/array_sum.phpt: - MFB: Fixed test for 64bit systems - - * (PHP_5_2) - ext/standard/tests/array/array_sum.phpt: - Fixed test for 64bit systems - -2006-12-25 Antony Dovgal - - * ext/iconv/iconv.c - ext/interbase/ibase_blobs.c - ext/mhash/mhash.c - ext/oci8/oci8_statement.c - ext/standard/streamsfuncs.c: - use safe_emalloc() - - * ext/bz2/bz2.c: - improve check for overflow - - * ext/sockets/sockets.c: - fix CS, add missing folding markers - mark Unicode safe functions as they are - -2006-12-25 Dmitry Stogov - - * ZendEngine2/tests/bug39825.phpt - ZendEngine2/tests/bug39825.phpt: - - file bug39825.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - NEWS - ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_execute.h - ZendEngine2/zend_vm_execute.h - ZendEngine2/tests/bug39825.phpt: - Fixed bug #39825 (foreach produces memory error) - -2006-12-25 Antony Dovgal - - * ext/standard/streamsfuncs.c: - stream_socket_shutdown() is Unicode safe by definition - - * ext/soap/soap.c: - fix proto - - * ext/mhash/mhash.c: - fix protos - - * ext/posix/posix.c: - mark most of the ext/posix functions as Unicode safe, for they do not use - strings in any way - - * ext/oci8/oci8_interface.c: - mark all LOB functions as Unicode safe - -2006-12-25 Ilia Alshanetsky - - * ext/exif/exif.c - ext/informix/ifx.ec - ext/standard/http_fopen_wrapper.c - ext/standard/microtime.c: - MFB: Use %F (ignores locale) for internal representation of floats - - * (PHP_5_2) - ext/exif/exif.c - ext/informix/ifx.ec - ext/standard/http_fopen_wrapper.c - ext/standard/microtime.c: - Use %F (ignores locale) for internal representation of floats - -2006-12-25 Hannes Magnusson - - * (PHP_5_2) - NEWS - README.UPDATE_5_2: - Add missing NEWS entrys and update the README.UPDATE file - -2006-12-25 Antony Dovgal - - * (PHP_4_4) - NEWS - NEWS - configure.in - configure.in: - MFH: fix bug #39890 (using autoconf 2.6x and --with-layout=GNU breaks PEAR - install path) - - * configure.in: - fix bug #39890 (using autoconf 2.6x and --with-layout=GNU breaks PEAR - install path) - - * ext/imap/php_imap.c: - fix build - - * ext/standard/tests/general_functions/001.phpt - ext/standard/tests/general_functions/001.phpt - ext/standard/tests/strings/bug22207.phpt - ext/standard/tests/strings/bug22207.phpt: - fix test - -2006-12-25 Ilia Alshanetsky - - * ext/imap/php_imap.c: - MFB: Define SENDBUFLEN for older c-client libs - - * (PHP_4_4) - ext/imap/php_imap.c: - MFH: Define SENDBUFLEN for older c-client libs - - * (PHP_5_2) - ext/imap/php_imap.c: - Define SENDBUFLEN for older c-client libs - -2006-12-25 Dmitry Stogov - - * ZendEngine2/tests/bug39944.phpt - ZendEngine2/tests/bug39944.phpt: - - file bug39944.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - NEWS - ZendEngine2/zend_execute.c - ZendEngine2/zend_execute.c - ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_def.h - ZendEngine2/zend_vm_execute.h - ZendEngine2/zend_vm_execute.h - ZendEngine2/tests/bug39944.phpt: - Fixed bug #39944 (References broken) - - * main/streams/filter.c - main/streams/filter.c: - Fixed heap overflow - - * ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.c: - Fixed possible size_t overflow - -2006-12-25 Antony Dovgal - - * ext/standard/credits.c: - update credits at request of Gabor - - * ext/standard/tests/strings/bug23894.phpt - ext/standard/tests/strings/sprintf_f.phpt - ext/standard/tests/strings/sprintf_f_2.phpt - ext/standard/tests/strings/sprintf_f_2.phpt - ext/standard/tests/strings/sprintf_f_3.phpt - ext/standard/tests/strings/sprintf_f_3.phpt: - fix tests - - * ext/standard/formatted_print.c: - fix #36392 in Unicode mode - -2006-12-24 Ilia Alshanetsky - - * ext/imap/php_imap.c: - MFB: Fixed buffer boundary protection - - * (PHP_5_2) - ext/imap/php_imap.c: - Fixed buffer boundary protection - - * ext/sqlite/libsqlite/src/encode.c: - MFB: Added empty string checks - - * (PHP_5_2) - ext/sqlite/libsqlite/src/encode.c: - Added empty string checks - -2006-12-24 Rob Richards - - * ext/com_dotnet/com_saproxy.c: - update function signature - - * (PHP_5_2) - NEWS - NEWS: - BFN - - * ext/com_dotnet/com_com.c - ext/com_dotnet/com_handlers.c - ext/com_dotnet/com_saproxy.c - ext/com_dotnet/php_com_dotnet_internal.h: - MFB: fix bug #33734 and related (Something strange with COM Object) - - caused by fix in com_handlers.c rev 1.22.2.5 - - * (PHP_5_2) - ext/com_dotnet/com_com.c - ext/com_dotnet/com_handlers.c - ext/com_dotnet/com_saproxy.c - ext/com_dotnet/php_com_dotnet_internal.h: - fix bug #33734 and related (Something strange with COM Object) - - caused by fix in com_handlers.c rev 1.22.2.5 - - * ext/com_dotnet/com_handlers.c - ext/com_dotnet/com_variant.c - ext/com_dotnet/com_wrapper.c - ext/com_dotnet/tests/bug33386.phpt - ext/com_dotnet/tests/bug39596.phpt: - MFB: - - fix bug #33386 (ScriptControl only sees last function of class): - com_wrapper.c - - fix bug #37588 (COM Property propputref converts to PHP function - and can't be accesed): com_handlers.c - - fix bug #39596 (Creating Variant of type VT_ARRAY): com_variant.c - - add tests - - * ext/com_dotnet/tests/bug33386.phpt - ext/com_dotnet/tests/bug33386.phpt - ext/com_dotnet/tests/bug39596.phpt - ext/com_dotnet/tests/bug39596.phpt: - - file bug33386.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - ext/com_dotnet/com_handlers.c - ext/com_dotnet/com_variant.c - ext/com_dotnet/com_wrapper.c: - - fix bug #33386 (ScriptControl only sees last function of class): - com_wrapper.c - - fix bug #37588 (COM Property propputref converts to PHP function - and can't be accesed): com_handlers.c - - fix bug #39596 (Creating Variant of type VT_ARRAY): com_variant.c - - add tests - -2006-12-24 Hannes Magnusson - - * (PHP_5_2) - ext/zip/php_zip.c: - Fix typo - -2006-12-23 Ilia Alshanetsky - - * ext/zip/php_zip.c - ext/zip/zip_stream.c: - MFB: safety checks - - * (PHP_5_2) - ext/zip/php_zip.c - ext/zip/zip_stream.c: - Safety checks - - * (PHP_4_4) - ext/sysvmsg/sysvmsg.c: - MFB: Added checks for negative max length and overflow checks for - overly long strings. - - * ext/sysvmsg/sysvmsg.c: - MFB: Added checks for negative max length and overflow checks for overly - long strings. - - * (PHP_5_2) - ext/sysvmsg/sysvmsg.c: - Added checks for negative max length and overflow checks for overly long - strings. - -2006-12-23 Derick Rethans - - * ext/mcrypt/config.m4 - ext/mhash/config.m4 - ext/pdo_sqlite/config.m4 - ext/tidy/config.m4: - - MFB: Fixed bug #39935 (Extensions tidy,mcrypt,mhash,pdo_sqlite ignores - --with-libdir). - - * (PHP_5_2) - NEWS - ext/mcrypt/config.m4 - ext/mhash/config.m4 - ext/pdo_sqlite/config.m4 - ext/tidy/config.m4: - - Fixed bug #39935 (Extensions tidy,mcrypt,mhash,pdo_sqlite ignores - --with-libdir). - -2006-12-23 Antony Dovgal - - * ext/oci8/tests/error1.phpt: - fix test - - * ZendEngine2/zend_API.h: - fix typo - - * ext/oci8/tests/error.phpt - ext/oci8/tests/error1.phpt - ext/oci8/tests/error_old.phpt: - fix tests - - * ext/oci8/oci8_interface.c: - use add_ascii_assoc_text() - - * ext/oci8/oci8_collection.c: - use OCI_SUCCESS constant, do not rely on its value - -2006-12-22 Andrei Zmievski - - * unicode-progress.txt - ZendEngine2/zend_ini.c - ZendEngine2/zend_ini.h: - Implement OnUpdateUTF8String() handler. It always assumes UTF-8 input, - since we cannot check for UG(unicodE) inside it. - - * ext/standard/math.c: - Unicode support in number_format(). - -2006-12-22 Nuno Lopes - - * ext/pdo/pdo_sql_parser.c: - fix lcov/genhtml build (yes it is very picky) - -2006-12-22 Ilia Alshanetsky - - * ext/reflection/php_reflection.c - ext/reflection/tests/bug39884.phpt: - MFB: Fixed bug #39884 (ReflectionParameter::getClass() throws exception for - type hint self). - - * (PHP_5_2) - NEWS - ext/reflection/php_reflection.c - ext/reflection/tests/bug39884.phpt - ext/reflection/tests/bug39884.phpt: - Fixed bug #39884 (ReflectionParameter::getClass() throws exception for type - hint self). - - * ext/standard/formatted_print.c - ext/standard/tests/strings/bug36392.phpt: - MFB: Fixed bug #36392 (wrong number of decimal digits with %e specifier in - sprintf). - - * (PHP_5_2) - NEWS - ext/standard/formatted_print.c: - Fixed bug #36392 (wrong number of decimal digits with %e specifier in - sprintf). - - * ext/standard/tests/strings/bug36392.phpt - ext/standard/tests/strings/bug36392.phpt: - - file bug36392.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - NEWS - ext/date/php_date.c: - Small optimization of the date() function - -2006-12-22 Antony Dovgal - - * (PHP_5_2) - ext/oci8/tests/coll_018.phpt - ext/oci8/tests/error2.phpt - ext/oci8/tests/lob_036.phpt - ext/oci8/tests/statement_type.phpt: - new tests - - * ext/oci8/tests/coll_018.phpt - ext/oci8/tests/coll_018.phpt - ext/oci8/tests/error2.phpt - ext/oci8/tests/error2.phpt - ext/oci8/tests/lob_036.phpt - ext/oci8/tests/lob_036.phpt - ext/oci8/tests/statement_type.phpt: - - more OCI8 tests by Chris Jones - - * (PHP_5_2) - ext/date/tests/010.phpt - ext/date/tests/011.phpt - ext/date/tests/012.phpt - ext/date/tests/013.phpt - ext/date/tests/014.phpt - ext/date/tests/date_parse_001.phpt - ext/date/tests/date_sun_info_001.phpt: - more tests - - * ext/date/tests/010.phpt - ext/date/tests/010.phpt - ext/date/tests/011.phpt - ext/date/tests/011.phpt - ext/date/tests/012.phpt - ext/date/tests/012.phpt - ext/date/tests/013.phpt - ext/date/tests/013.phpt - ext/date/tests/014.phpt - ext/date/tests/014.phpt - ext/date/tests/date_parse_001.phpt - ext/date/tests/date_parse_001.phpt - ext/date/tests/date_sun_info_001.phpt - ext/date/tests/date_sun_info_001.phpt: - - more ext/date tests by Chris Jones - -2006-12-22 Ilia Alshanetsky - - * ext/standard/math.c - ext/standard/tests/strings/bug39873.phpt: - MFB: Fixed bug #39873 (number_format() breaks with locale & decimal - points). - - * ext/standard/tests/strings/bug39873.phpt - ext/standard/tests/strings/bug39873.phpt: - - file bug39873.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - NEWS - ext/standard/math.c: - Fixed bug #39873 (number_format() breaks with locale & decimal points). - -2006-12-22 Hannes Magnusson - - * ext/ftp/tests/005.phpt - ext/standard/tests/array/locale_sort.phpt - ext/standard/tests/strings/substr_compare.phpt: - Fix tests - - * ext/standard/array.c: - Fix ZTS build... - -2006-12-22 Marcus Boerger - - * ext/spl/php_spl.c: - - Fix memory allocation/deallocation to match - - * ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.h - ZendEngine2/zend_interfaces.c: - - Implement ezstrndup() - -2006-12-22 Andrei Zmievski - - * ext/standard/tests/serialize/006.phpt: - Fix serialization test. - -2006-12-22 Marcus Boerger - - * ZendEngine2/zend.h - ZendEngine2/zend_interfaces.c - ext/standard/var.c - ext/standard/var_unserializer.c - ext/standard/var_unserializer.re - ext/standard/tests/serialize/005.phpt: - - Make custom serializing work with zstr (as discussed with andrei) - - * ZendEngine2/zend_alloc.c: - - Use conversion macro - -2006-12-21 Andrei Zmievski - - * ext/standard/levenshtein.c: - levenshtein() already supported Unicode. - - * ext/standard/metaphone.c: - Metaphone will work only with binary runtime-encoded strings. - -2006-12-21 Marcus Boerger - - * ext/standard/var.c: - - No misleading comments - - * ext/spl/spl_observer.c - ext/spl/spl_sxe.c: - - Mark a fewthings as unicode ready - - * ext/standard/var.c: - - Serialization doesn't work with unicode data - - * ZendEngine2/zend_interfaces.c: - -Serialization doesn't work with unicode data - -2006-12-21 Antony Dovgal - - * ext/oci8/oci8_interface.c: - temporary fix for oci_error(), just to make it work - it should be using add_ascii_assoc_text() instead - - * ext/oci8/oci8_interface.c: - added support for CALL statement type (patch by Chris Jones) - - * main/SAPI.c: - fix ws, cs and overall code readability - -2006-12-21 Andrei Zmievski - - * unicode-progress.txt - ext/standard/array.c - ext/standard/php_string.h - ext/standard/string.c - ext/standard/strnatcmp.c: - Bite the bullet and port the natural comparison algorithm to support - UChar strings. Also, simplify the original code. - - -2006-12-21 Antony Dovgal - - * ext/standard/datetime.c: - temp is freed in zend_unicode_to_string() on failure - - * ext/standard/browscap.c: - lookup_browser_name cannot be NULL - - * (PHP_5_2) - ext/oci8/tests/array_bind_014.phpt - ext/oci8/tests/array_bind_int1.phpt - ext/oci8/tests/fetch_all2.phpt - ext/oci8/tests/lob_020.phpt - ext/oci8/tests/lob_027.phpt - ext/oci8/tests/lob_033.phpt - ext/oci8/tests/lob_034.phpt - ext/oci8/tests/lob_035.phpt: - improve tests - - * ext/oci8/tests/array_bind_014.phpt - ext/oci8/tests/array_bind_014.phpt - ext/oci8/tests/array_bind_int1.phpt - ext/oci8/tests/error1.phpt - ext/oci8/tests/fetch_all2.phpt - ext/oci8/tests/fetch_all2.phpt - ext/oci8/tests/lob_020.phpt - ext/oci8/tests/lob_027.phpt - ext/oci8/tests/lob_033.phpt - ext/oci8/tests/lob_033.phpt - ext/oci8/tests/lob_034.phpt - ext/oci8/tests/lob_034.phpt - ext/oci8/tests/lob_035.phpt - ext/oci8/tests/lob_035.phpt - ext/oci8/tests/privileged_connect1.phpt: - - improve tests, add new ones - -2006-12-21 Seiji Masugata - - * ext/mbstring/libmbfl/filters/mbfilter_cp51932.c - ext/mbstring/libmbfl/filters/mbfilter_cp51932.h: - Initial commit(Synced PHP_5_2 Branch.). - - * ext/mbstring/config.m4 - ext/mbstring/mb_gpc.c - ext/mbstring/mbstring.c - ext/mbstring/libmbfl/libmbfl.dsw - ext/mbstring/libmbfl/libmbfl.sln - ext/mbstring/libmbfl/libmbfl.vcproj - ext/mbstring/libmbfl/filters/Makefile.am - ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c - ext/mbstring/libmbfl/filters/mbfilter_jis.c - ext/mbstring/libmbfl/filters/mbfilter_jis.h - ext/mbstring/libmbfl/filters/unicode_table_jis.h - ext/mbstring/libmbfl/mbfl/mbfilter.c - ext/mbstring/libmbfl/mbfl/mbfl_convert.c - ext/mbstring/libmbfl/mbfl/mbfl_encoding.c - ext/mbstring/libmbfl/mbfl/mbfl_encoding.h - ext/mbstring/libmbfl/mbfl/mbfl_ident.c - ext/mbstring/libmbfl/nls/nls_ru.c - ext/mbstring/libmbfl/nls/nls_ru.h: - Synced PHP_5_2 Branch. - - * (PHP_4_4) - ext/mbstring/mbstring.c - ext/mbstring/mbstring.c: - Fixed bug #39361, #39400 (mbstring function overloading problem). - -2006-12-21 Dmitry Stogov - - * php.ini-dist - php.ini-dist - php.ini-recommended - php.ini-recommended: - Fixed comments - -2006-12-21 Rob Richards - - * ext/dom/domimplementation.c - ext/dom/text.c: - MFB: fix issues identitified by coverity - - * (PHP_5_2) - ext/dom/domimplementation.c - ext/dom/text.c: - fix issues identitified by coverity - -2006-12-21 Antony Dovgal - - * (PHP_5_2) - ext/oci8/tests/lob_030.phpt - ext/oci8/tests/lob_031.phpt - ext/oci8/tests/lob_032.phpt: - new tests - - * ext/oci8/tests/lob_030.phpt - ext/oci8/tests/lob_030.phpt - ext/oci8/tests/lob_031.phpt - ext/oci8/tests/lob_031.phpt - ext/oci8/tests/lob_032.phpt - ext/oci8/tests/lob_032.phpt: - - new tests by Christopher Jones - - * ZendEngine2/zend_execute_API.c: - fix possible leak - -2006-12-21 Dmitry Stogov - - * (PHP_5_2) - NEWS - php.ini-dist - php.ini-dist - php.ini-recommended - php.ini-recommended - main/main.c - main/main.c: - Default memory_limit value is set to 128M - - * TSRM/tsrm_virtual_cwd.c - TSRM/tsrm_win32.c: - emoved dependency from SHELL32.DLL - - * (PHP_5_2) - NEWS - TSRM/tsrm_virtual_cwd.c - TSRM/tsrm_win32.c: - Removed dependency from SHELL32.DLL - -2006-12-21 Ilia Alshanetsky - - * ZendEngine2/zend_compile.c: - MFB: Fix a possible memory leak - - * (PHP_5_2) - ZendEngine2/zend_compile.c: - Fix a possible memory leak - - * ZendEngine2/zend_operators.c: - MFB: Fixed possible memory leak - - * (PHP_5_2) - ZendEngine2/zend_operators.c: - Fixed possible memory leak - -2006-12-21 Antony Dovgal - - * main/streams/memory.c: - apply correct fix (aka "oops!") - -2006-12-21 Ilia Alshanetsky - - * ext/soap/php_sdl.c: - MFB: Optimize out zend_hash_num_elements() call - - * (PHP_5_2) - ext/soap/php_sdl.c: - Optimize out zend_hash_num_elements() call - -2006-12-21 Antony Dovgal - - * ext/standard/html.c: - fix leak on error - - * main/streams/xp_socket.c: - don't leak on error - - * ext/posix/posix.c - ext/posix/posix.c: - fix possible leaks - - * main/streams/memory.c: - fix potential leak - - * sapi/cli/php_cli.c: - prevent potential leak on error - - * ext/standard/datetime.c: - bail out if zend_unicode_to_string() fails - - * ZendEngine2/zend_unicode.c: - make sure err_char is initialized properly - - * ext/standard/file.c: - fix double free - -2006-12-20 Antony Dovgal - - * ext/standard/string.c: - fix potential leak, improve length checks - -2006-12-20 Marcus Boerger - - * ext/spl/spl_directory.c: - - Quick hackto make tests pass - -2006-12-20 Antony Dovgal - - * ext/standard/string.c: - do not allocate the return value if it wasn't requested - - * ZendEngine2/zend_builtin_functions.c: - fix possible leak on failure in get_defined_functions() - - * ZendEngine2/zend_API.c: - fix leak in zend_disable_class() - - * ext/standard/file.c: - fix double free on error - -2006-12-20 Marcus Boerger - - * ext/spl/php_spl.c - ext/spl/php_spl.h: - - More unicode - - * ext/spl/tests/spl_autoload_001.phpt: - - Add unicode expectations - - * ext/spl/tests/spl_autoload_002.phpt: - - Fix test name - -2006-12-20 Andrei Zmievski - - * unicode-progress.txt: - Update. - -2006-12-20 Marcus Boerger - - * ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.h: - - Make shorter and do not use problematic attribute - - * ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.h: - - Compilers mightnot like the zstr return,thus return void* - -2006-12-20 Andrei Zmievski - - * ext/standard/browscap.c: - Unicode support in get_browser(). To avoid additional copying/conversion - during parsing, the browscap values in the returned array will be of - IS_STRING type. - - * ZendEngine2/zend_API.c: - Check for conversion failure in "s&" and return appropriately. - - * ZendEngine2/zend_unicode.c: - Fix return value in zval_unicode_to_string_ex(). - - * ZendEngine2/zend_alloc.c: - Fix warning. - -2006-12-20 Marcus Boerger - - * README.UNICODE-UPGRADES: - - Mention zend_zstrndup() - - * ZendEngine2/zend.h - ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.h: - - Implement zend_zstrndup() - -2006-12-20 Ilia Alshanetsky - - * ext/filter/logical_filters.c: - Fixed zts build - - * (PHP_5_2) - ext/filter/logical_filters.c: - fixed ZTS build - -2006-12-20 Antony Dovgal - - * (PHP_4_4) - ext/session/session.c - ext/session/session.c: - protect _SESSION, HTTP_SESSION_VARS and GLOBALS - maintain an internal reference of _SESSION, so that it won't be possible - to destroy it from userspace - - * ext/session/session.c: - remove register_globals remains - maintain an internal reference of _SESSION, so that it won't be possible - to destroy it from userspace - -2006-12-20 Ilia Alshanetsky - - * ext/filter/logical_filters.c - ext/filter/tests/015.phpt - ext/filter/tests/033.phpt: - MFB: Fixed bug #39898 (FILTER_VALIDATE_URL validates \r\n\t etc). - - * (PHP_5_2) - NEWS - ext/filter/logical_filters.c - ext/filter/tests/015.phpt - ext/filter/tests/033.phpt: - Fixed bug #39898 (FILTER_VALIDATE_URL validates \r\n\t etc). - -2006-12-20 Antony Dovgal - - * ZendEngine2/zend_operators.h: - return NULL right away if invalid length was passed - -2006-12-20 Andrei Zmievski - - * ext/standard/formatted_print.c: - Align Unicode and binary versions of formatted printing. - - * (PHP_5_2) - ZendEngine2/zend_language_scanner.l: - More correct patch for b-prefixes. - -2006-12-20 Antony Dovgal - - * (PHP_5_2) - NEWS - ZendEngine2/zend_language_parser.y: - MFH: fix #39903 (Notice message when executing __halt_compiler() more than - once) - - * ZendEngine2/zend_language_parser.y: - fix #39903 (Notice message when executing __halt_compiler() more than once) - - * (PHP_5_2) - ZendEngine2/zend_builtin_functions.c: - use Z_* macros - - * ext/pspell/pspell.c: - don't reinvent the wheel, use sprintf() - -2006-12-20 Derick Rethans - - * (PHP_5_2) - NEWS - ext/filter/logical_filters.c: - - Fixed the validate email filter so that the letter "v" can also be used - in - the user part of the email address. (Derick) - - * ext/filter/logical_filters.c: - - Fixed the regexp so that the letter "v" also works. - -2006-12-20 Antony Dovgal - - * ext/curl/streams.c: - gracefully bail out on invalid header - -2006-12-20 Dmitry Stogov - - * ZendEngine2/Zend.m4 - ZendEngine2/zend_alloc.c - ext/standard/basic_functions.c - ext/standard/php_var.h - ext/standard/var.c - main/main.c - main/output.c - sapi/apache/mod_php5.c - sapi/apache2filter/sapi_apache2.c - sapi/apache2handler/sapi_apache2.c - sapi/apache_hooks/mod_php5.c - win32/build/config.w32: - Make MEMORY_LIMIT and ZEND_USE_MALLOC_MM to be always enabled. They don't - make a - ny significant slowdown, but incrise maintainability a lot. Note that the - setting of memory_limit wasn't changes (neither in main/main.c nor in - php.ini) and it - still set to 16M. - - * (PHP_5_2) - NEWS - ZendEngine2/Zend.m4 - ZendEngine2/zend_alloc.c - ext/standard/basic_functions.c - ext/standard/php_var.h - ext/standard/var.c - main/main.c - sapi/apache/mod_php5.c - sapi/apache2filter/sapi_apache2.c - sapi/apache2handler/sapi_apache2.c - sapi/apache_hooks/mod_php5.c - win32/build/config.w32: - Make MEMORY_LIMIT and ZEND_USE_MALLOC_MM to be always enabled. They don't - make any significant slowdown, but incrise maintainability a lot. Note - that the setting of memory_limit wasn't changes (neither in main/main.c - nor in php.ini) and it still set to 16M. - -2006-12-20 Hannes Magnusson - - * ZendEngine2/zend_API.h - ext/iconv/iconv.c - ext/standard/basic_functions.c - main/php.h: - MFB: - - Fixed incorrect function names on FreeBSD where inet_pton() was named - __inet_pton() and inet_ntop() was named __inet_ntop() - - Fixed bug #39685 (iconv() - undefined function) - - Fixed bug #38852 (XML-RPC Breaks iconv) - - * (PHP_5_2) - NEWS - ZendEngine2/zend_API.h - ext/iconv/iconv.c - ext/standard/basic_functions.c - main/php.h: - - Fixed incorrect function names on FreeBSD where inet_pton() was named - __inet_pton() and inet_ntop() was named __inet_ntop() - - Fixed bug #39685 (iconv() - undefined function) - - Fixed bug #38852 (XML-RPC Breaks iconv) - -2006-12-19 Andrei Zmievski - - * ext/standard/mail.c: - Unicode support in ezmlm_hash(). - - -2006-12-19 Marcus Boerger - - * ext/spl/php_spl.c: - - Use new 'x' parameter parsing - - * ext/spl/php_spl.c: - - Make spl_autoload_call() unicode safe - - * ZendEngine2/zend_interfaces.c: - - Changed macro once again - - * README.PARAMETER_PARSING_API: - - x was added toparameter parsing api - - * ZendEngine2/zend_API.c: - - Implement parameter parsing 'x' - - * ZendEngine2/zend_interfaces.c: - - Fix macro param order - - * ZendEngine2/zend_interfaces.c - ZendEngine2/zend_interfaces.h: - - Implement zend_u_call_method to deal with situations where the function - name type is already known - -2006-12-19 Andrei Zmievski - - * ext/standard/basic_functions.c: - Unicode support in set_include_path(). - -2006-12-19 Nuno Lopes - - * ext/pcre/tests/005.phpt: - new test - - * ext/pcre/tests/005.phpt - ext/pcre/tests/005.phpt: - - file 005.phpt was initially added on branch PHP_5_2. - -2006-12-19 Michael Wallner - - * (PHP_5_2) - ext/curl/interface.c: - MFH: check CRYPTO_get_id_callback() if anyone else already set thread lock - callbacks - - * ext/curl/interface.c: - - check CRYPTO_get_id_callback() if anyone else already set thread lock - callbacks - -2006-12-19 Antony Dovgal - - * ext/soap/tests/bugs/bug39815.phpt: - MFB - -2006-12-19 Andrei Zmievski - - * README.UNICODE-UPGRADES: - Update. - -2006-12-19 Antony Dovgal - - * (PHP_5_2) - ext/soap/tests/bugs/bug39815.phpt: - on FreeBSD these locales have different names - -2006-12-19 Andrei Zmievski - - * ZendEngine2/zend_API.h - ZendEngine2/zend_execute_API.c - ext/reflection/php_reflection.c - ext/standard/array.c - ext/standard/basic_functions.c - ext/standard/string.c: - - Marcus was too quick. Let's put type before zstr in the macros. - - Also mark get_include_path() and restore_include_path() with U. - -2006-12-19 Marcus Boerger - - * README.UNICODE-UPGRADES - ZendEngine2/zend_API.h - ZendEngine2/zend_execute_API.c - ext/reflection/php_reflection.c - ext/standard/array.c: - - Fix ZVAL_ZSTRL - -2006-12-19 Antony Dovgal - - * ext/soap/tests/bugs/bug39815.phpt: - add check for setlocale() and sv_SE to SKIPIF section - -2006-12-19 Andrei Zmievski - - * ext/standard/formatted_print.c: - Unicode support in *printf() functions. (Antony, Andrei) - - * (PHP_5_2) - ZendEngine2/zend_language_scanner.l: - Support 'b' prefix in front of string literals for forward compatibility - with PHP 6. - -2006-12-19 Nuno Lopes - - * ext/json/json.c: - MFB: little cleanup in json_determine_array_type() - - * (PHP_5_2) - ext/json/json.c: - remove NOP code in json_determine_array_type(), as we already know the zval - passed is an array (based on patch by Ron Korving) - -2006-12-19 Antony Dovgal - - * ext/filter/tests/004.phpt - ext/filter/tests/004.phpt - ext/filter/tests/006.phpt - ext/filter/tests/006.phpt - ext/filter/tests/007.phpt - ext/filter/tests/007.phpt - ext/filter/tests/008.phpt - ext/filter/tests/008.phpt - ext/filter/tests/009.phpt - ext/filter/tests/009.phpt - ext/filter/tests/010.phpt - ext/filter/tests/010.phpt - ext/filter/tests/011.phpt - ext/filter/tests/011.phpt - ext/filter/tests/012.phpt - ext/filter/tests/012.phpt - ext/filter/tests/013.phpt - ext/filter/tests/013.phpt - ext/filter/tests/014.phpt - ext/filter/tests/014.phpt - ext/filter/tests/015.phpt - ext/filter/tests/015.phpt - ext/filter/tests/016.phpt - ext/filter/tests/016.phpt - ext/filter/tests/017.phpt - ext/filter/tests/017.phpt - ext/filter/tests/018.phpt - ext/filter/tests/018.phpt - ext/filter/tests/019.phpt - ext/filter/tests/019.phpt - ext/filter/tests/020.phpt - ext/filter/tests/020.phpt - ext/filter/tests/021.phpt - ext/filter/tests/021.phpt - ext/filter/tests/022.phpt - ext/filter/tests/022.phpt - ext/filter/tests/023.phpt - ext/filter/tests/023.phpt - ext/filter/tests/024.phpt - ext/filter/tests/024.phpt - ext/filter/tests/025.phpt - ext/filter/tests/025.phpt - ext/filter/tests/026.phpt - ext/filter/tests/026.phpt - ext/filter/tests/027.phpt - ext/filter/tests/027.phpt - ext/filter/tests/028.phpt - ext/filter/tests/028.phpt - ext/filter/tests/029.phpt - ext/filter/tests/029.phpt - ext/filter/tests/030.phpt - ext/filter/tests/030.phpt - ext/filter/tests/031.phpt - ext/filter/tests/031.phpt - ext/filter/tests/032.phpt - ext/filter/tests/032.phpt - ext/filter/tests/033.phpt - ext/filter/tests/033.phpt - ext/filter/tests/034.phpt - ext/filter/tests/034.phpt - ext/filter/tests/035.phpt - ext/filter/tests/035.phpt - ext/filter/tests/037.phpt - ext/filter/tests/037.phpt - ext/filter/tests/038.phpt - ext/filter/tests/038.phpt - ext/filter/tests/040.phpt - ext/filter/tests/040.phpt - ext/filter/tests/041.phpt - ext/filter/tests/041.phpt - ext/filter/tests/042.phpt - ext/filter/tests/042.phpt - ext/filter/tests/043.phpt - ext/filter/tests/043.phpt - ext/filter/tests/044.phpt - ext/filter/tests/044.phpt - ext/filter/tests/bug39846.phpt - ext/filter/tests/bug39846.phpt - ext/filter/tests/bug7586.phpt - ext/filter/tests/bug7586.phpt - ext/filter/tests/bug7715.phpt - ext/filter/tests/bug7715.phpt - ext/filter/tests/bug7733.phpt - ext/filter/tests/bug7733.phpt - ext/filter/tests/bug8315.phpt - ext/filter/tests/bug8315.phpt - ext/filter/tests/callback_non_modified_var.phpt - ext/filter/tests/callback_non_modified_var.phpt - ext/filter/tests/filter_data.phpt - ext/filter/tests/filter_data.phpt: - add missing SKIPIF sections - - * main/snprintf.c: - -NAN should not be possible - - * main/snprintf.c: - inf->INF - nan->NAN - -2006-12-19 Dmitry Stogov - - * ext/standard/formatted_print.c - ext/standard/formatted_print.c - main/snprintf.c - main/snprintf.c - main/spprintf.c - main/spprintf.c: - Support for systems without locale.h - -2006-12-19 Antony Dovgal - - * ext/pcre/tests/002.phpt - sapi/cli/tests/011.phpt - sapi/cli/tests/011.phpt: - fix test on MacOS - - * ext/standard/tests/serialize/001.phpt - ext/standard/tests/serialize/006.phpt - ext/standard/tests/serialize/bug14293.phpt - ext/standard/tests/serialize/bug21957.phpt: - fix serialize tests after s: -> S: change - - * ext/standard/var.c: - MFB: serialize() should use '.' as decimal point irrespectively to locale - - * (PHP_5_2) - ext/standard/var.c: - serialize() should use '.' as decimal point irrespectively to locale - -2006-12-19 Dmitry Stogov - - * ext/soap/tests/bugs/bug39815.phpt - ext/soap/tests/bugs/bug39815.phpt - ext/soap/tests/interop/Round3/GroupD/r3_groupD_compound2_001w.phpt - ext/standard/formatted_print.c - main/snprintf.c - main/snprintf.h - main/spprintf.c: - - file bug39815.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - NEWS - ext/soap/php_encoding.c - ext/soap/php_encoding.c - ext/soap/tests/bugs/bug39815.phpt - ext/soap/tests/interop/Round3/GroupD/r3_groupD_compound2_001w.phpt - ext/standard/formatted_print.c - main/snprintf.c - main/snprintf.h - main/spprintf.c: - Fixed bug #39815 (SOAP double encoding is not locale-independent) - -2006-12-19 Edin Kadribasic - - * php.ini-dist - php.ini-recommended: - MFB - - * (PHP_5_2) - php.ini-dist - php.ini-recommended: - Updated list of available extensions in dlls. - Updated oci extension ini settings. - -- christopher.jones at oracle dot com - - * win32/build/Makefile - win32/build/config.w32 - win32/build/confutils.js - win32/build/mkdist.php: - MFB: Enable full build with newer Microsoft compilers - - * (PHP_5_2) - win32/build/Makefile - win32/build/config.w32 - win32/build/confutils.js - win32/build/mkdist.php: - Enable full build with newer Microsoft compilers - -2006-12-19 Hannes Magnusson - - * (PHP_5_2) - ZendEngine2/tests/bug34617.phpt - ext/ftp/tests/004.phpt - ext/standard/tests/array/locale_sort.phpt - tests/lang/bug30638.phpt: - Fix tests - -2006-12-19 Dmitry Stogov - - * (PHP_5_2) - NEWS - sapi/cgi/fastcgi.c - sapi/cgi/fastcgi.c: - Fixed bug #39869 (safe_read does not initialize errno). (michiel at boland - dot org) - - * (PHP_5_2) - NEWS - ext/standard/basic_functions.c - ext/standard/basic_functions.c - ext/standard/file.c - ext/standard/file.c - ext/standard/streamsfuncs.c - ext/standard/streamsfuncs.c - ext/standard/streamsfuncs.h - ext/standard/streamsfuncs.h - ext/standard/tests/network/shutdown.phpt - ext/standard/tests/network/shutdown.phpt - ext/standard/tests/network/shutdown.phpt - main/streams/php_stream_transport.h - main/streams/php_stream_transport.h - main/streams/transports.c - main/streams/transports.c - main/streams/xp_socket.c - main/streams/xp_socket.c: - Added function stream_socket_shutdown(). It is a wraper for system - shutdown() function, that shut downs part of a full-duplex connection - -2006-12-19 Brian Shire - - * (PHP_5_2) - NEWS: - BFN - - * ext/standard/array.c - ext/standard/tests/array/bug30074.phpt: - -Fixed bug #30074 (apparent symbol table error with extract($blah, - EXTR_REFS)) - -2006-12-19 Pierre-Alain Joye - - * unicode-progress.txt: - - zip is done - - * ext/zip/php_zip.c: - - unicode support for the procedural API - -2006-12-18 Marcus Boerger - - * ext/spl/tests/observer_004.phpt - ext/spl/tests/observer_005.phpt: - - More tests - - Test naming - -2006-12-18 Hannes Magnusson - - * ext/standard/basic_functions.c: - Fix ZTS - -2006-12-18 Marcus Boerger - - * ext/spl/spl_observer.c - ext/spl/tests/observer_003.phpt - ext/spl/tests/observer_004.phpt: - - Support members in SplObjectStorage serialization / shorter serialization - -2006-12-18 Andrei Zmievski - - * unicode-progress.txt - ext/standard/basic_functions.c: - Unicode support in get_cfg_var(). - - * ext/standard/basic_functions.c: - Fix macro. - - * ext/standard/basic_functions.c: - Unicode support in parse_ini_file(). - -2006-12-18 Ilia Alshanetsky - - * ext/pdo_pgsql/pgsql_driver.c: - MFB: Fixed bug #39845 (Persistent connections generate a warning in - pdo_pgsql). - - * (PHP_5_2) - NEWS - ext/pdo_pgsql/pgsql_driver.c: - Fixed bug #39845 (Persistent connections generate a warning in pdo_pgsql). - - * ext/filter/sanitizing_filters.c: - MFB: Cleanup & optimize php_filter_encode_url() - - * (PHP_5_2) - ext/filter/sanitizing_filters.c: - Cleanup & optimize php_filter_encode_url() - - * ext/filter/sanitizing_filters.c - ext/standard/php_string.h - ext/standard/string.c: - MFB: Less hackish support for spaces at the start of tags within - strip_tags() - - * (PHP_5_2) - ext/filter/sanitizing_filters.c - ext/standard/php_string.h - ext/standard/string.c: - Less hackish support for spaces at the start of tags within strip_tags() - - * ext/filter/filter_private.h - ext/filter/logical_filters.c - ext/filter/tests/042.phpt - ext/filter/tests/044.phpt: - MFB: Fixed bugs with trimming of spaces - - * (PHP_5_2) - NEWS - ext/filter/filter_private.h - ext/filter/logical_filters.c - ext/filter/tests/042.phpt - ext/filter/tests/044.phpt - ext/filter/tests/044.phpt: - Fixed bugs with trimming of spaces - -2006-12-18 Antony Dovgal - - * (PHP_5_2) - NEWS - ext/standard/php_fopen_wrapper.c: - MFH: fix #39850 (SplFileObject throws contradictory/wrong error messages - when trying to open "php://wrong") - - * ext/standard/php_fopen_wrapper.c: - fix #39850 (SplFileObject throws contradictory/wrong error messages when - trying to open "php://wrong") - -2006-12-18 Dmitry Stogov - - * ext/soap/tests/bugs/bug39832.phpt - ext/soap/tests/bugs/bug39832.phpt - ext/soap/tests/bugs/bug39832.wsdl - ext/soap/tests/bugs/bug39832.wsdl: - - file bug39832.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - NEWS - ext/soap/php_encoding.c - ext/soap/php_encoding.c - ext/soap/tests/bugs/bug39832.phpt - ext/soap/tests/bugs/bug39832.wsdl: - Fixed bug #39832 (SOAP Server: parameter not matching the WSDL specified - type are set to 0) - -2006-12-18 Antony Dovgal - - * (PHP_5_2) - main/SAPI.c: - MFH: fix possible invalid read (reproducible only on big-endian machines) - - * main/SAPI.c: - fix possible invalid read (reproducible only on big-endian machines) - -2006-12-18 Zeev Suraski - - * (PHP_5_2) - main/SAPI.c: - Whitespace - -2006-12-18 Dmitry Stogov - - * (PHP_5_2) - NEWS - ZendEngine2/Zend.m4 - ZendEngine2/Zend.m4 - ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.c: - Fixed random generation of cookies and canaries - -2006-12-18 Antony Dovgal - - * ext/standard/tests/strings/sprintf_f_2.phpt - ext/standard/tests/strings/sprintf_f_3.phpt: - fix test names - - * (PHP_5_2) - ext/standard/formatted_print.c: - remove the comment, it's not valid anymore - -2006-12-18 Hannes Magnusson - - * (PHP_5_2) - ext/standard/formatted_print.c - ext/standard/tests/strings/sprintf_f_2.phpt - ext/standard/tests/strings/sprintf_f_3.phpt - main/snprintf.c: - MFH: - - make %f locale aware again - - fix precision loss with %F (noticed by Sebastian Nohn) - - add new tests - - * ext/standard/formatted_print.c - ext/standard/tests/strings/sprintf_f_2.phpt - ext/standard/tests/strings/sprintf_f_2.phpt - ext/standard/tests/strings/sprintf_f_3.phpt - ext/standard/tests/strings/sprintf_f_3.phpt - main/snprintf.c: - - make %f locale aware again - - fix precision loss with %F (noticed by Sebastian Nohn) - - add new tests - -2006-12-18 Dmitry Stogov - - * (PHP_5_2) - ZendEngine2/zend_alloc.c: - MFH: __builtin_expect() exists only in GCC 3.0 and higher - -2006-12-18 Ilia Alshanetsky - - * ext/filter/sanitizing_filters.c - ext/filter/tests/025.phpt - ext/filter/tests/042.phpt - ext/filter/tests/043.phpt - ext/standard/string.c: - MFB: Filter fixes: - Fixed possible double encoding problem with sanitizing filters - Make use of space-strict strip_tags() function - - * (PHP_5_2) - NEWS - ext/filter/sanitizing_filters.c - ext/filter/tests/025.phpt: - Filter fixes: - Fixed possible double encoding problem with sanitizing filters - Make use of space-strict strip_tags() function - - * ext/filter/tests/042.phpt - ext/filter/tests/042.phpt - ext/filter/tests/043.phpt - ext/filter/tests/043.phpt - ext/standard/string.c: - - file 042.phpt was initially added on branch PHP_5_2. - -2006-12-17 Marcus Boerger - - * ext/spl/spl_observer.c - ext/spl/tests/observer_003.phpt: - - Make this work in unicode mode - -2006-12-17 Brian Shire - - * (PHP_5_2) - ext/standard/array.c - ext/standard/tests/array/bug30074.phpt - ext/standard/tests/array/bug30074.phpt: - Fixed bug #30074 - extract with EXTR_REFS was setting EG(unitialized_zval_ptr)->is_ref=1, - affecting subsequent usage - Added test - -2006-12-17 Ilia Alshanetsky - - * main/main.c - main/main.c: - Fixed compiler warning - - * ext/imap/php_imap.c: - MFB: Fixed bug #39779 (Enable AUTH PLAIN mechanism in underlaying - libc-client). - - * (PHP_5_2) - NEWS - ext/imap/php_imap.c: - Fixed bug #39779 (Enable AUTH PLAIN mechanism in underlaying libc-client). - -2006-12-17 Hannes Magnusson - - * ext/filter/logical_filters.c: - MFB: fix build - - * (PHP_5_2) - ext/filter/logical_filters.c: - Fix build - -2006-12-16 Ilia Alshanetsky - - * ext/filter/logical_filters.c - ext/filter/tests/bug39846.phpt: - MFB: Fixed bug #39846 (Invalid IPv4 treated as valid). - - * (PHP_5_2) - NEWS - ext/filter/logical_filters.c - ext/filter/tests/bug39846.phpt - ext/filter/tests/bug39846.phpt: - Fixed bug #39846 (Invalid IPv4 treated as valid). - -2006-12-16 Hannes Magnusson - - * NEWS: - Remove items that are already in 5.2 - - * ZendEngine2/zend_API.h - ext/pdo_pgsql/pgsql_driver.c - ext/standard/basic_functions.c: - Fix ZTS build - -2006-12-16 Marcus Boerger - - * ext/spl/spl_observer.c - ext/spl/tests/observer_003.phpt: - - Implement feature request #39836i (SplObjectStorage empty after - unserialize) - -2006-12-16 Andrei Zmievski - - * ZendEngine2/zend_operators.c - ZendEngine2/zend_operators.h: - Make convert_to_*() APIs return SUCCESS/FAILURE. - -2006-12-15 Andrei Zmievski - - * README.UNICODE: - Update with INI file info. - - * unicode-progress.txt - ext/standard/basic_functions.c: - Unicode support in ini_*() functions. - - * ZendEngine2/zend_alloc.c: - __builtin_expect() exists only in GCC 3.0 and higher. - - * ZendEngine2/zend_API.h: - Make all macros (RETURN_*, RETVAL_*, ZVAL_*, add_*) that convert binary - strings to Unicode actually issues errors on failure. I'm surprised we - haven't done this already. - - * ZendEngine2/zend_unicode.c: - Fix potential buffer overflow in default conversion error handler. - - * ZendEngine2/zend.c: - Make utf8_conv stop on conversion errors when converting to UTF-16. - -2006-12-15 Andi Gutmans - - * ZendEngine2/zend_alloc.c: - - MF 5.2 (put cookie in first place) - - * (PHP_5_2) - ZendEngine2/zend_alloc.c: - - I prefer cookie to be the first element. - -2006-12-15 Dmitry Stogov - - * (PHP_5_2) - NEWS - ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.c: - Added internal heap protection - . safe unlinking - . cookies - . canary protection (debug build only) - -2006-12-15 Wez Furlong - - * ext/pdo_sqlite/pdo_sqlite.c - ext/pdo_sqlite/php_pdo_sqlite.h - ext/pdo_sqlite/php_pdo_sqlite_int.h - ext/pdo_sqlite/sqlite_driver.c - ext/pdo_sqlite/sqlite_statement.c: - merge php5 pdo_sqlite into head; this source compiles on both php5 and - php6. - -2006-12-15 Ilia Alshanetsky - - * (PHP_5_2) - configure.in - main/php_version.h: - back to dev - - * (PHP_5_2) - NEWS - configure.in - main/php_version.h: - 5.2.1RC1 - -2006-12-15 Andrei Zmievski - - * (PHP_5_2) - ext/standard/var_unserializer.c - ext/standard/var_unserializer.re: - Support for 'S' format in unserialize() (forward compatibility with PHP - 6) - -2006-12-14 Andrei Zmievski - - * ext/standard/var.c - ext/standard/var_unserializer.c - ext/standard/var_unserializer.re: - Use 'S' for escaped binary strings and 's' for non-escaped. - -2006-12-14 Rob Richards - - * ext/dom/dom_fe.h - ext/dom/php_dom.c - ext/dom/php_dom.h - ext/dom/xpath.c - ext/dom/tests/domxpath.phpt: - add ability to call PHP functions from XPath - update test - -2006-12-13 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - sapi/apache2filter/sapi_apache2.c: - Fixed bug #39816 (apxs2filter ignores httpd.conf & .htaccess php config - settings). - - * (PHP_5_2) - ext/standard/string.c: - Removed deadcode found by Ron Korving - - * (PHP_5_2) - ext/standard/basic_functions.c - ext/wddx/wddx.c: - optimize out strlen() calls - - - * sapi/apache2handler/sapi_apache2.c: - MFB: Fixed bug #39201 (Possible crash in Apache 2 with 413 ErrorHandler). - - * (PHP_5_2) - NEWS - sapi/apache2handler/sapi_apache2.c: - Fixed bug #39201 (Possible crash in Apache 2 with 413 ErrorHandler). - -2006-12-12 Sara Golemon - - * (PHP_5_2) - ZendEngine2/zend_compile.c: - MFH: Bugfix# 39435: 'foo' instanceof bar gives invalid opcode error - - * ZendEngine2/zend_compile.c: - Bugfix# 39435: 'foo' instanceof bar gives invalid opcode error - -2006-12-12 Antony Dovgal - - * ext/standard/file.c: - erm.. somehow this part got here twice - -2006-12-12 Michael Wallner - - * ext/recode/CREDITS - ext/standard/credits_ext.h: - - utf8 - - * unicode-progress.txt - ext/posix/CREDITS - ext/standard/credits.c - ext/standard/credits_ext.h - ext/standard/info.c - ext/standard/info.h: - - utf8 CREDITS and php_info API - - unicode progress in info.c - -2006-12-12 Andrei Zmievski - - * unicode-progress.txt: - -** empty log message *** - - * ext/standard/basic_functions.c: - Do not convert args to Unicode in getopt(), they should stay binary. - - * ext/standard/string.c: - Make hebrev(c) support only binary strings. - -2006-12-12 Ilia Alshanetsky - - * sapi/apache2handler/sapi_apache2.c: - MFB: Fixed bug #39797 (virtual() does not reset changed INI settings). - - * (PHP_5_2) - NEWS - sapi/apache2handler/sapi_apache2.c: - Fixed bug #39797 (virtual() does not reset changed INI settings). - -2006-12-12 Andrei Zmievski - - * main/php_variables.c: - Keep CLI args as binary strings. - -2006-12-12 Ilia Alshanetsky - - * (PHP_5_2) - ext/pcre/php_pcre.c: - Removed dummy vars. - - -2006-12-12 Antony Dovgal - - * (PHP_5_2) - ext/oci8/tests/connect_without_oracle_home.phpt - ext/oci8/tests/connect_without_oracle_home_old.phpt: - disable tests - - * ext/oci8/tests/connect_without_oracle_home.phpt - ext/oci8/tests/connect_without_oracle_home_old.phpt: - disable tests - I don't think it makes sense to test a segfault which we cannot fix.. - - * ext/oci8/tests/privileged_connect1.phpt - ext/oci8/tests/privileged_connect1.phpt - ext/oci8/tests/statement_type_old.phpt - tests/basic/023.phpt: - fix test - - * (PHP_5_2) - ext/oci8/tests/connect.inc - ext/oci8/tests/details.inc - ext/oci8/tests/lob_029.phpt: - MFH: skip BFILE tests if Oracle is not on localhost - - * ext/oci8/tests/connect.inc - ext/oci8/tests/details.inc - ext/oci8/tests/details.inc - ext/oci8/tests/lob_029.phpt: - BFILE tests are only valid when Oracle is installed on the same host - skip them if it's not - - * ext/standard/crypt.c: - _THREAD_SAFE might be used instead of _REENTRANT - - * acinclude.m4 - ext/standard/crypt.c: - missing part of the fix for #39795 - crypt.h defines struct crypt_data only if _REENTRANT is defined - - * ext/oci8/oci8_lob.c: - fix LOBs internal position in Unicode mode - - * acinclude.m4: - fix typo - - * (PHP_5_2) - ext/oci8/tests/lob_028.phpt - ext/oci8/tests/lob_029.phpt: - add new tests - - * ext/oci8/tests/lob_028.phpt - ext/oci8/tests/lob_028.phpt - ext/oci8/tests/lob_029.phpt - ext/oci8/tests/lob_029.phpt: - - add new tests - - * ext/oci8/oci8_lob.c: - OCILobGetChunkSize() does not like BFILEs, return read_length right away - -2006-12-12 Hannes Magnusson - - * (PHP_5_2) - ext/pgsql/tests/02connection.phpt: - Fix test - - * (PHP_5_2) - ext/pdo_mysql/tests/bug_33689.phpt - ext/pdo_mysql/tests/bug_37445.phpt - ext/pdo_mysql/tests/bug_39483.phpt - ext/pdo_mysql/tests/last_insert_id.phpt - ext/pdo_mysql/tests/pecl_bug_5200.phpt - ext/pdo_mysql/tests/pecl_bug_5780.phpt - ext/pdo_mysql/tests/pecl_bug_5802.phpt - ext/pdo_mysql/tests/show_tables.phpt: - Fix skipif - - * (PHP_5_2) - ext/mysqli/tests/061.phpt - ext/mysqli/tests/065.phpt - ext/mysqli/tests/skipif.inc: - Fix tests - -2006-12-12 Antony Dovgal - - * (PHP_5_2) - NEWS - acinclude.m4 - configure.in - ext/standard/crypt.c: - MFH: fix #39795 (build fails on AIX because crypt_r() uses different data - struct) - - * acinclude.m4 - configure.in - ext/standard/crypt.c: - fix #39795 (build fails on AIX because crypt_r() uses different data - struct) - -2006-12-11 Andrei Zmievski - - * ZendEngine2/zend.c: - Clarify stream_encoding. - -2006-12-11 Ilia Alshanetsky - - * ext/date/php_date.c - ext/date/tests/bug39782.phpt: - MFB: Fixed bug #39782 (setTime() on a DateTime constructed with a Weekday - yields incorrect results). - - * (PHP_5_2) - NEWS - ext/date/php_date.c - ext/date/tests/bug39782.phpt - ext/date/tests/bug39782.phpt: - Fixed bug #39782 (setTime() on a DateTime constructed with a Weekday - yields incorrect results). - - * (PHP_5_2) - ZendEngine2/zend_operators.c: - Fixed typo - - * (PHP_5_2) - ZendEngine2/zend_operators.c: - Removed bool<>long optimization as it causes issues with strict type checks - - * (PHP_5_2) - ZendEngine2/zend_operators.c - ZendEngine2/zend_operators.h: - Minor optimization (2-3%) from Brian Shire - - * sapi/apache2filter/php_functions.c - sapi/apache2handler/php_functions.c: - MFB: Fixed bug #39787 (PHP doesn't work with Apache 2.3). - - * (PHP_5_2) - NEWS - sapi/apache2filter/php_functions.c - sapi/apache2handler/php_functions.c: - Fixed bug #39787 (PHP doesn't work with Apache 2.3). - -2006-12-11 Antony Dovgal - - * ext/oci8/oci8_interface.c: - prevent any possible problems with negative values - - * (PHP_5_2) - ext/oci8/tests/lob_027.phpt: - add new test - - * ext/oci8/tests/lob_027.phpt - ext/oci8/tests/lob_027.phpt: - - add new test - -2006-12-11 Ilia Alshanetsky - - * ext/date/lib/parse_date.c - ext/date/lib/parse_date.re: - MFB: Fixed bug #39791 (Crash in strtotime() on overly long relative date - multipliers). - - * (PHP_5_2) - NEWS - ext/date/lib/parse_date.c - ext/date/lib/parse_date.re: - Fixed bug #39791 (Crash in strtotime() on overly long relative date - multipliers). - -2006-12-10 Marcus Boerger - - * (PHP_5_2) - ext/spl/examples/dualiterator.inc - ext/spl/examples/recursivecomparedualiterator.inc - ext/spl/examples/recursivedualiterator.inc - ext/spl/examples/tests/dualiterator_001.phpt: - - MFH Fix comparison of RecursiveDualIterators - - * ext/spl/examples/dualiterator.inc - ext/spl/examples/recursivecomparedualiterator.inc - ext/spl/examples/recursivecomparedualiterator.inc - ext/spl/examples/recursivedualiterator.inc - ext/spl/examples/tests/dualiterator_001.phpt: - - Fix comparison of RecursiveDualIterators - -2006-12-10 Ilia Alshanetsky - - * (PHP_5_2) - ext/standard/array.c: - Optimize extract() - - -2006-12-10 Hannes Magnusson - - * ext/sqlite/pdo_sqlite2.c: - Fix build - -2006-12-10 Michael Wallner - - * ext/standard/credits.c - ext/standard/info.c - main/output.c - main/php_output.h: - - upgrade phpinfo() and phpcredits() - -2006-12-10 Pierre-Alain Joye - - * ext/pdo_mysql/mysql_driver.c - ext/pdo_oci/oci_driver.c - ext/pdo_odbc/odbc_driver.c - ext/sqlite/pdo_sqlite2.c: - - build fix the other driver as well (a macro would be nicer) - - * ext/zip/php_zip.c: - - MFB: addDir returns true - - * ext/gd/gd.c - ext/gd/tests/bug38212.phpt - ext/gd/tests/bug39286.phpt: - - MFB: #39286, misleading error message when invalid dimensions are given - - * (PHP_5_2) - NEWS: - - #39286 entry - - * ext/gd/tests/bug39286.phpt - ext/gd/tests/bug39286.phpt: - - file bug39286.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - ext/gd/gd.c - ext/gd/tests/bug38212.phpt: - - #39286, misleading error message when nvalid dimensions are given - - * ext/pdo_sqlite/sqlite_driver.c: - - fix build on HEAD - (not sure if it should compile on 6 and 5 or if it is required only for - pdo, other drivers require this fix) - - * ext/gd/libgd/gd.c - ext/gd/tests/bug39508.phpt: - - MFB: #39508, imagefill crashes with small image - - * ext/gd/tests/bug39508.phpt - ext/gd/tests/bug39508.phpt: - - file bug39508.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - NEWS: - - #39508, add test (imagefill crashes with small image) - - * (PHP_5_2) - NEWS: - - #39780 entry - - * (PHP_5_2) - ext/gd/gd.c - ext/gd/libgd/gd_png.c - ext/gd/tests/bug39780.phpt - ext/gd/tests/bug39780.png: - - MFH:#39780, PNG image with CRC/data error raises fatal error - - * ext/gd/gd.c - ext/gd/libgd/gd_png.c - ext/gd/tests/bug39780.phpt - ext/gd/tests/bug39780.phpt - ext/gd/tests/bug39780.png - ext/gd/tests/bug39780.png: - - #39780, PNG image with CRC/data error raises fatal error - -2006-12-10 Edin Kadribasic - - * (PHP_5_2) - NEWS: - BFN - - * ext/standard/basic_functions.c: - MFB: Fixed by #39751 by KevinJohnHoffman at gmail dot com - - * (PHP_5_2) - ext/standard/basic_functions.c: - Fixed by #39751 by KevinJohnHoffman at gmail dot com - -2006-12-09 Wez Furlong - - * ext/pdo/config.m4 - ext/pdo/pdo.c - ext/pdo/pdo_dbh.c - ext/pdo/pdo_sql_parser.c - ext/pdo/pdo_sqlstate.c - ext/pdo/pdo_stmt.c - ext/pdo/php_pdo.h - ext/pdo/php_pdo_driver.h - ext/pdo/php_pdo_int.h - ext/pdo/php_pdo_phpvers_compat.h: - merge PHP 5 pdo into HEAD. This source compiles on both PHP 5 and PHP 6. - If you're poking around in here, please make sure that any changes you - make - compile on both PHP 5 and 6. Thanks! - -2006-12-09 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - ext/standard/filestat.c: - Fixed bug #29840 (is_executable() does not honor safe_mode_exec_dir - setting). - -2006-12-09 Hannes Magnusson - - * tests/basic/022.phpt - tests/basic/022.phpt - tests/basic/023.phpt - tests/basic/023.phpt: - - Cookie tests - -2006-12-09 Ilia Alshanetsky - - * ext/curl/interface.c: - Improve handling of POST data with Andrei's help. - - * run-tests.php - ext/filter/filter.c - ext/filter/tests/041.phpt - main/php_variables.c: - MFB: - Fixed handling of multiple cookies with the same name. - Added support for cookies into run-tests.php - - * (PHP_5_2) - run-tests.php - ext/filter/filter.c - ext/filter/tests/041.phpt - ext/filter/tests/041.phpt: - Fixed handling of multiple cookies with the same name. - Added support for cookies into run-tests.php - -2006-12-09 Hannes Magnusson - - * ext/curl/interface.c: - Fix build - -2006-12-09 Ilia Alshanetsky - - * main/php_variables.c: - MFB: Strip leading spaces from cookie names, that can come from - multi-cookie - headers where ; can be followed by any number of spaces. - - * (PHP_5_2) - main/php_variables.c: - Strip leading spaces from cookie names, that can come from multi-cookie - headers where ; can be followed by any number of spaces. - -2006-12-09 Rob Richards - - * (PHP_5_2) - NEWS: - BFN - - * ext/com_dotnet/com_typeinfo.c - ext/com_dotnet/tests/bug39606.phpt: - MFB: fix heap corruption when adding/caching typelib (also fixes bug 39606) - add test - - * (PHP_5_2) - ext/com_dotnet/com_typeinfo.c - ext/com_dotnet/tests/bug39606.phpt - ext/com_dotnet/tests/bug39606.phpt: - fix heap corruption when adding/caching typelib (also fixes bug 39606) - add test - -2006-12-09 Ilia Alshanetsky - - * ext/filter/tests/007.phpt - ext/filter/tests/011.phpt: - MFB: Fixed tests - - * (PHP_5_2) - ext/filter/tests/007.phpt - ext/filter/tests/011.phpt: - Fixed tests - - * ext/filter/tests/004.phpt: - MFB: fixed test - - * (PHP_5_2) - ext/filter/tests/004.phpt - ext/pdo/tests/bug_39656.phpt: - Fixed test - -2006-12-08 Antony Dovgal - - * ext/standard/php_var.h - ext/standard/var.c: - don't change public API - - * (PHP_5_2) - ext/standard/php_var.h - ext/standard/var.c: - MFH: fix possible issue in the serializer, which might currupt struc when - reallocating arguments stack - - * ext/standard/php_var.h - ext/standard/var.c: - fix possible issue in the serializer, which might currupt struc when - reallocating arguments stack - (no reproduce case, sorry) - - * (PHP_5_2) - NEWS - ext/oci8/oci8_lob.c - ext/oci8/php_oci8_int.h: - MFH: fix #39732 (oci_bind_array_by_name doesn't work on Solaris 64bit) - - * ext/oci8/oci8_lob.c - ext/oci8/php_oci8_int.h: - fix #39732 (oci_bind_array_by_name doesn't work on Solaris 64bit) - - * ext/standard/iptc.c: - fix typo - -2006-12-08 Ilia Alshanetsky - - * ext/pdo/pdo_stmt.c - ext/pdo_mysql/mysql_statement.c: - MFB: Fixed bug #39759 (Can't use stored procedures fetching multiple result - sets in pdo_mysql). - - * (PHP_5_2) - NEWS - ext/pdo/pdo_stmt.c - ext/pdo_mysql/mysql_driver.c - ext/pdo_mysql/mysql_statement.c - ext/pdo_mysql/tests/pecl_bug_5780.phpt: - Fixed bug #39759 (Can't use stored procedures fetching multiple result - sets in pdo_mysql). - -2006-12-08 Andrei Zmievski - - * ext/standard/dl.c: - Unicode filename support in dl(). - - * main/main.c: - Don't use zend_ascii_hash_find() here -- module names are binary strings. - -2006-12-08 Rob Richards - - * (PHP_5_2) - ext/simplexml/tests/027.phpt - ext/simplexml/tests/bug35785.phpt: - fix tests - -2006-12-08 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - ext/filter/filter.c - ext/filter/tests/bug39763.phpt - ext/filter/tests/bug39763.phpt: - Fixed bug #39763 (magic quotes are applied twice by ext/filter in - parse_str()) - -2006-12-08 Antony Dovgal - - * (PHP_5_2) - NEWS: - -BFN - - * ext/filter/filter.c - ext/filter/filter.c: - revert the fix for #39763 - -2006-12-08 Rob Richards - - * ext/dom/document.c - ext/dom/xpath.c - ext/dom/tests/domxpath.phpt: - mark more functions unicode safe - add test - - * ext/dom/documentfragment.c - ext/dom/domconfiguration.c - ext/dom/domerrorhandler.c - ext/dom/domimplementation.c - ext/dom/domimplementationlist.c - ext/dom/domimplementationsource.c - ext/dom/domstringlist.c - ext/dom/entityreference.c - ext/dom/namednodemap.c - ext/dom/namelist.c - ext/dom/node.c - ext/dom/processinginstruction.c - ext/dom/string_extend.c - ext/dom/text.c - ext/dom/userdatahandler.c - ext/dom/xpath.c - ext/dom/tests/domattributes.phpt - ext/dom/tests/domelement.phpt - ext/dom/tests/domfragment.phpt - ext/dom/tests/domimplementation.phpt - ext/dom/tests/dompi.phpt: - mark more functions unicode safe - add tests - -2006-12-08 Dmitry Stogov - - * ZendEngine2/zend_execute.c - ZendEngine2/zend_object_handlers.c - ZendEngine2/tests/bug38146.phpt - ZendEngine2/tests/bug39775.phpt - ext/spl/tests/iterator_035.phpt - tests/classes/array_access_003.phpt - tests/classes/array_access_004.phpt - tests/classes/array_access_005.phpt - tests/classes/array_access_008.phpt - tests/classes/array_access_012.phpt: - Fixed bug #39775 ("Indirect modification ..." message is not shown) - - * (PHP_5_2) - NEWS - ZendEngine2/zend_execute.c - ZendEngine2/zend_object_handlers.c - ZendEngine2/tests/bug38146.phpt - ZendEngine2/tests/bug39775.phpt - ZendEngine2/tests/bug39775.phpt - ext/spl/tests/iterator_035.phpt - tests/classes/array_access_003.phpt - tests/classes/array_access_004.phpt - tests/classes/array_access_005.phpt - tests/classes/array_access_008.phpt - tests/classes/array_access_012.phpt: - Fixed bug #39775 ("Indirect modification ..." message is not shown) - The fix breaks two SimpleXML tests those must be fixed - -2006-12-08 Antony Dovgal - - * (PHP_5_2) - ext/standard/tests/assert/assert03.phpt - ext/standard/tests/assert/assert04.phpt: - add new tests by - - * ext/standard/tests/assert/assert03.phpt - ext/standard/tests/assert/assert03.phpt - ext/standard/tests/assert/assert04.phpt - ext/standard/tests/assert/assert04.phpt: - - add new tests by - -2006-12-08 Dmitry Stogov - - * ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.c: - Fixed possible failure - -2006-12-08 Nuno Lopes - - * ext/pcre/tests/bug21758.phpt - ext/pcre/tests/bug27011.phpt - ext/pcre/tests/bug38600.phpt: - MFB: new tests - - * ext/pcre/tests/bug21758.phpt - ext/pcre/tests/bug21758.phpt - ext/pcre/tests/bug27011.phpt - ext/pcre/tests/bug27011.phpt - ext/pcre/tests/bug38600.phpt - ext/pcre/tests/bug38600.phpt: - - file bug21758.phpt was initially added on branch PHP_5_2. - -2006-12-08 Ilia Alshanetsky - - * ext/curl/interface.c: - Fixed typo - -2006-12-08 Sara Golemon - - * ext/standard/file.c: - More BC bodges for fgets/fgetss - -2006-12-08 Ilia Alshanetsky - - * ext/curl/interface.c: - Allow POST of unicode data as utf8 - -2006-12-07 Antony Dovgal - - * ext/standard/tests/strings/bug39350.phpt: - MFB test - - * ext/standard/file.c - ext/standard/tests/file/fgetss.phpt - ext/standard/tests/file/fgetss1.phpt: - MFB tests (they still fail though) - fix BC in fgetss() - -2006-12-07 Andrei Zmievski - - * ext/standard/datetime.c: - Unicode support in strptime(). Uses runtime encoding for conversion. - - - * ext/standard/versioning.c: - version_compare() will use runtime encoding. - - * ext/standard/iptc.c: - Unicode support/safety in iptc* functions. Untested, cause I know crap - about IPTC. - -2006-12-07 Antony Dovgal - - * (PHP_5_2) - ZendEngine2/zend_strtod.c - ext/standard/formatted_print.c: - initialize variables - - * ZendEngine2/zend_strtod.c - ext/standard/formatted_print.c: - initialize variables and make Coverity happy - -2006-12-07 Andrei Zmievski - - * ZendEngine2/zend_hash.c - ZendEngine2/zend_strtol.c: - Apply Matt W's patch to only allow ASCII digits and not use u_digit(). - - * ZendEngine2/zend_API.h: - Guard against ambiguous 'else' clauses. - - * ext/standard/url.c: - Unicode support in parse_url(). - -2006-12-07 Antony Dovgal - - * (PHP_5_2) - NEWS - ext/filter/filter.c: - MFH: fix #39763 (magic quotes are applied twice by ext/filter) - - * ext/filter/filter.c: - fix #39763 (magic quotes are applied twice by ext/filter) - no need to add slashes manually, they are added by - php_register_variable_ex() - -2006-12-07 Sara Golemon - - * ext/standard/file.c: - Change fgets() behavior back to BC version - -2006-12-07 Ilia Alshanetsky - - * ext/posix/config.m4 - ext/posix/posix.c: - MFB: Fixed bug #39754 (Some POSIX extension functions not thread safe). - - * (PHP_5_2) - NEWS - ext/posix/config.m4 - ext/posix/posix.c: - Fixed bug #39754 (Some POSIX extension functions not thread safe). - - * ext/curl/interface.c: - Allow submission of unicode data in utf8 form - -2006-12-06 Sara Golemon - - * ext/standard/string.c: - Use proper zstr for str_getcsv() and add documentation for Andrei's peace - of mind - -2006-12-06 Rasmus Lerdorf - - * (PHP_5_2) - NEWS: - Typo - -2006-12-06 Antony Dovgal - - * ext/pdo_odbc/package.xml: - test. please ignore - -2006-12-06 Ilia Alshanetsky - - * ext/curl/interface.c: - Final set of unicode changes - - * ext/curl/interface.c: - First part of unicode upgrade - -2006-12-06 Antony Dovgal - - * ext/standard/array.c - ext/standard/basic_functions.c - ext/standard/basic_functions.h: - fix import_request_variables() - - * ext/oci8/oci8_interface.c - ext/oci8/tests/statement_type.phpt: - add Unicode support to oci_statement_type() - - * ext/oci8/oci8_interface.c: - mark most of the OCI8 functions as unicode aware - - * ext/standard/formatted_print.c: - move handling of 'F' to the top - -2006-12-06 Ilia Alshanetsky - - * ext/curl/multi.c: - Make functions as being unicode safe - -2006-12-06 Antony Dovgal - - * (PHP_5_2) - ext/standard/formatted_print.c: - MFH: add missing 'F' modified (noticed by Matt) - - * ext/standard/formatted_print.c: - add missing 'F' modified (noticed by Matt) - -2006-12-06 Rob Richards - - * ext/openssl/xp_ssl.c - ext/pdo_sqlite/sqlite/src/date.c: - MFB: Fix win32 build - - * (PHP_5_2) - ext/openssl/xp_ssl.c - ext/pdo_sqlite/sqlite/src/date.c: - Fix win32 build - -2006-12-06 Antony Dovgal - - * ZendEngine2/tests/unset_cv05.phpt - ext/standard/tests/array/array_fill.phpt - ext/standard/tests/array/bug14580.phpt - ext/standard/tests/general_functions/007.phpt - ext/standard/tests/serialize/002.phpt - ext/standard/tests/strings/bug24312.phpt - ext/standard/tests/strings/bug36306.phpt - ext/standard/tests/strings/crc32.phpt - ext/standard/tests/strings/crypt.phpt - ext/standard/tests/strings/htmlentities.phpt - ext/standard/tests/strings/strrev.phpt - ext/standard/tests/strings/strtotitle.phpt - ext/standard/tests/strings/strtoupper.phpt - tests/classes/bug26737.phpt - tests/lang/034.phpt - tests/lang/bug24783.phpt - tests/lang/bug30638.phpt - tests/lang/each_binary_safety.phpt: - fix tests - - * ZendEngine2/zend_strtod.c: - add zend_u_strtod() implementation by Matt Wilmas - major speedup when using floats in Unicode mode - also fixes several problems with the current code - - * ZendEngine2/zend_strtod.c: - destroy freelist before destroying the mutexes - - * (PHP_5_2) - NEWS: - news - - * (PHP_5_2) - ZendEngine2/zend.c - ZendEngine2/zend_strtod.c - ZendEngine2/zend_strtod.h - ext/standard/formatted_print.c - ext/standard/tests/serialize/003.phpt - ext/standard/tests/strings/sprintf_f.phpt - main/snprintf.c - main/snprintf.h - main/spprintf.c: - MFH: use BSD licensed implementation of double-to-string utilities instead - of LGPL one - this patch also fixes thread safety issues in zend_strtod() - - * ZendEngine2/zend.c - ZendEngine2/zend_strtod.c - ZendEngine2/zend_strtod.h - ext/standard/formatted_print.c - ext/standard/tests/serialize/003.phpt - ext/standard/tests/strings/sprintf_f.phpt - main/snprintf.c - main/snprintf.h - main/spprintf.c: - use BSD licensed implementation of double-to-string utilities instead of - LGPL one - this patch also fixes thread safety issues in zend_strtod() - -2006-12-05 Antony Dovgal - - * ext/filter/config.m4: - let PHP_ADD_EXTENSION_DEP() to take care of this - -2006-12-05 Ilia Alshanetsky - - * ext/filter/config.m4: - MFB: Fixed bug #39724 (Broken build due to spl/filter usage of pcre - extension). - - * (PHP_5_2) - NEWS - ext/filter/config.m4: - Fixed bug #39724 (Broken build due to spl/filter usage of pcre extension). - -2006-12-05 Andrei Zmievski - - * ext/standard/array.c: - extract() should convert keys using runtime encoding. - -2006-12-05 Antony Dovgal - - * ext/standard/tests/array/bug33382.phpt - ext/standard/tests/array/bug33382.phpt - ext/standard/tests/array/bug36975.phpt - ext/standard/tests/array/bug36975.phpt - ext/standard/tests/file/bug35740.phpt - ext/standard/tests/file/bug35740.phpt - ext/standard/tests/file/bug39538.phpt - ext/standard/tests/file/bug39538.phpt - ext/standard/tests/general_functions/bug27678.phpt - ext/standard/tests/general_functions/bug27678.phpt - ext/xmlwriter/tests/bug39504.phpt - ext/zlib/tests/bug_34821.phpt - ext/zlib/tests/bug_34821.phpt: - cosmetic improvements - -2006-12-05 Frank M. Kromann - - * ext/ming/ming.c - ext/ming/ming.c: - Remove PHP4.x stuff - - * ext/ming/ming.c - ext/ming/ming.c - ext/ming/php_ming.h - ext/ming/php_ming.h: - - -2006-12-05 Dmitry Stogov - - * ZendEngine2/tests/bug39721.phpt - ZendEngine2/tests/bug39721.phpt: - - file bug39721.phpt was initially added on branch PHP_5_2. - - * (PHP_5_2) - NEWS - ZendEngine2/zend_compile.c - ZendEngine2/zend_compile.c - ZendEngine2/tests/bug39721.phpt: - Fixed bug #39721 (Runtime inheritance causes data corruption) - -2006-12-05 Antony Dovgal - - * (PHP_5_2) - ext/standard/http_fopen_wrapper.c: - MFH: nuke redundant zval_ptr_dtor() call - - * ext/standard/http_fopen_wrapper.c: - nuke redundant zval_ptr_dtor() call and fix memory corruption/segfault - -2006-12-05 Andrei Zmievski - - * ext/standard/http.c: - Unicode support in http_build_query(). - -2006-12-05 Ilia Alshanetsky - - * ext/pdo/pdo_sql_parser.c - ext/pdo/pdo_sql_parser.re - ext/pdo/tests/bug_36798.phpt: - MFB: Fixed bug #36798 (Error parsing named parameters with queries - containing high-ascii chars). - - * (PHP_5_2) - NEWS - ext/pdo/pdo_sql_parser.c - ext/pdo/pdo_sql_parser.re - ext/pdo/tests/bug_36798.phpt - ext/pdo/tests/bug_36798.phpt: - Fixed bug #36798 (Error parsing named parameters with queries containing - high-ascii chars). - - * (PHP_5_2) - ext/dba/config.m4: - Revert previous patch and it breaks builds with built-in cdb lib - -2006-12-05 Hannes Magnusson - - * ext/pdo/tests/bug_39656.phpt: - MFB: fix test - - * (PHP_5_2) - ext/pdo/tests/bug_39656.phpt: - Fix test - -2006-12-05 Antony Dovgal - - * ext/standard/file.c: - don't pass negative maxchars to php_stream_get_line_ex() - - * ZendEngine2/zend_compile.c: - remove duplicating line - -2006-12-05 Rob Richards - - * (PHP_5_2) - NEWS: - BFN - - * ext/xsl/xsltprocessor.c: - MFB: fix bug #39625 (Apache crashes on importStylesheet call) - - * (PHP_5_2) - ext/xsl/xsltprocessor.c: - fix bug #39625 (Apache crashes on importStylesheet call) - -2006-12-05 Dmitry Stogov - - * (PHP_5_2) - NEWS - sapi/cgi/fastcgi.c - sapi/cgi/fastcgi.c: - Fixed FastCGI impersonation for persistent connections on Windows - - * configure.in - configure.in - ZendEngine2/Makefile.am - ZendEngine2/Makefile.am - ZendEngine2/Zend.dsp - ZendEngine2/Zend.dsp - ZendEngine2/ZendTS.dsp - ZendEngine2/ZendTS.dsp - ZendEngine2/zend_mm.c - ZendEngine2/zend_mm.c - ZendEngine2/zend_mm.h - ZendEngine2/zend_mm.h - win32/build/config.w32 - win32/build/config.w32: - Removed unused zend_mm.* - -2006-12-05 Sara Golemon - - * NEWS - ext/standard/basic_functions.c - ext/standard/file.c - ext/standard/php_string.h - ext/standard/string.c: - Add str_getcsv() and fix a couple cases in recent fgetcsv() - reimplementation - - * ext/standard/file.c - ext/standard/file.h - ext/standard/tests/file/bug12556.phpt - ext/standard/tests/file/fgetcsv.phpt: - Unicode upgrade for fgetcsv() - -2006-12-05 Stanislav Malyshev - - * ZendEngine2/zend_operators.c - ZendEngine2/zend_operators.h - ext/standard/basic_functions.c - ext/standard/string.c - main/main.c: - Merge from 5.2: - Improve tolower()-related functions on Windows and VC2005 by caching - locale and using - tolower_l function. - -2006-12-05 Ilia Alshanetsky - - * ext/openssl/xp_ssl.c: - MFB: Fixed bug #39571 (timeout ssl:// connections). - - * (PHP_5_2) - NEWS - ext/openssl/xp_ssl.c: - Fixed bug #39571 (timeout ssl:// connections). - -2006-12-05 Pierre-Alain Joye - - * (PHP_5_2) - NEWS: - - invalid filter - - * (PHP_5_2) - ext/filter/filter.c - ext/filter/filter_private.h - ext/filter/tests/010.phpt - ext/filter/tests/039.phpt: - - MFH: invalid filter id should not return unsafe values - - * ext/filter/filter.c - ext/filter/filter_private.h - ext/filter/tests/010.phpt - ext/filter/tests/039.phpt: - - invalid filter id should not return unsafe values - -2006-12-04 Pierre-Alain Joye - - * ext/filter/tests/008.phpt - ext/filter/tests/009.phpt: - - MFB: use %s - - * ext/filter/filter.c - ext/filter/sanitizing_filters.c: - - WS - - * (PHP_5_2) - ext/filter/filter.c: - - default filter is not string anymore (in comment) - - WS and error msg sync with head - -2006-12-04 Andrei Zmievski - - * ext/standard/head.c: - Make headers-related functions accept Unicode strings, but only if their - contents can be converted to ASCII. - - * ext/standard/string.c - ext/standard/var.c: - Unicode support in var_export(). - -2006-12-04 Stanislav Malyshev - - * (PHP_5_2) - ZendEngine2/zend_operators.c - ZendEngine2/zend_operators.h - ext/standard/basic_functions.c - ext/standard/string.c - main/main.c: - Improve tolower()-related functions on Windows and VC2005 by caching locale - and using - tolower_l function. - -2006-12-04 Ilia Alshanetsky - - * ext/calendar/tests/easter_date.phpt - ext/calendar/tests/unixtojd.phpt: - MFB: Fixed tests - - * (PHP_5_2) - ext/calendar/tests/easter_date.phpt - ext/calendar/tests/unixtojd.phpt: - Fixed tests - -2006-12-04 Antony Dovgal - - * (PHP_5_2) - acinclude.m4 - configure.in: - MFH: fix build with Sun compiler, which doesn't support -O0 - - * acinclude.m4 - configure.in: - fix build with Sun compiler, which doesn't support -O0 - - * (PHP_5_2) - ext/pcre/config0.m4 - ext/spl/config.m4: - MFH: partly fix #39724 - ext/spl has a soft dependcy from ext/pcre (not ext/pcre-regex) - - * ext/pcre/config0.m4 - ext/spl/config.m4: - partly fix #39724 - ext/spl has a soft dependcy from ext/pcre (not ext/pcre-regex) - -2006-12-04 Ilia Alshanetsky - - * ext/pdo/tests/bug_39656.phpt: - MFB: Fixed test (user is a reserved keyword in pgsql) - - * (PHP_5_2) - ext/pdo/tests/bug_39656.phpt: - Fixed test (user is a reserved keyword in pgsql) - -2006-12-04 Antony Dovgal - - * (PHP_5_2) - sapi/cli/tests/002-win32.phpt - sapi/cli/tests/002.phpt - sapi/cli/tests/004.phpt - sapi/cli/tests/005.phpt - sapi/cli/tests/006.phpt - sapi/cli/tests/007.phpt - sapi/cli/tests/008.phpt - sapi/cli/tests/009.phpt - sapi/cli/tests/010-2.phpt - sapi/cli/tests/010.phpt - sapi/cli/tests/011.phpt - sapi/cli/tests/012.phpt - sapi/cli/tests/013.phpt: - fix tests - - * sapi/cli/tests/002-win32.phpt - sapi/cli/tests/002.phpt - sapi/cli/tests/004.phpt - sapi/cli/tests/005.phpt - sapi/cli/tests/006.phpt - sapi/cli/tests/007.phpt - sapi/cli/tests/008.phpt - sapi/cli/tests/009.phpt - sapi/cli/tests/010-2.phpt - sapi/cli/tests/010.phpt - sapi/cli/tests/011.phpt - sapi/cli/tests/012.phpt - sapi/cli/tests/013.phpt: - fix tests, use -n to prevent any problems with existing php.ini - -2006-12-04 Dmitry Stogov - - * (PHP_5_2) - NEWS - ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.c: - Fixed bug #38274 (Memlimit fatal error sent to "wrong" stderr when using - fastcgi) - -2006-12-04 Antony Dovgal - - * ext/session/session.c - main/main.c: - fix retval type - it should be int, not zend_bool - -2006-12-04 Andrey Hristov - - * ext/mysqli/mysqli_api.c: - dummy change - -2006-12-04 Ilia Alshanetsky - - * (PHP_5_2) - NEWS - ext/session/session.c: - Fixed bug #37627 (session save_path check checks the parent directory). - -2006-12-04 Antony Dovgal - - * run-tests.php: - look for tests in sapi/cli - -2006-12-04 Ilia Alshanetsky - - * ext/pdo/pdo_stmt.c: - MFB: Fixed bug #38319 (Remove bogus warnings from persistent PDO - connections). - - * (PHP_5_2) - NEWS - ext/pdo/pdo_stmt.c: - Fixed bug #38319 (Remove bogus warnings from persistent PDO connections). - - * ext/pdo/pdo_dbh.c: - MFB: Fixed bug #38252 (Incorrect PDO error message on invalid default fetch - mode). - - * (PHP_5_2) - NEWS - ext/pdo/pdo_dbh.c: - Fixed bug #38252 (Incorrect PDO error message on invalid default fetch - mode). - - * ext/pdo_mysql/tests/bug_39483.phpt: - MFB: Added test for previous bug - - * ext/pdo_mysql/tests/bug_39483.phpt - ext/pdo_mysql/tests/bug_39483.phpt: - - file bug_39483.phpt was initially added on branch PHP_5_2. - - * ext/pdo/pdo_sql_parser.c - ext/pdo/pdo_sql_parser.re: - MFB: Fixed bug #39483 (Problem with handling of \ char in prepared - statements). - - * (PHP_5_2) - NEWS - ext/pdo/pdo_sql_parser.c - ext/pdo/pdo_sql_parser.re: - Fixed bug #39483 (Problem with handling of \ char in prepared statements). - -2006-12-03 Ilia Alshanetsky - - * ext/pdo_mysql/mysql_driver.c: - MFB: - Default to buffered queries (much faster) - Default to prepared statement emulation to avoid hitting MySQL bugs - - * (PHP_5_2) - ext/pdo_mysql/mysql_driver.c: - Default to buffered queries (much faster) - Default to prepared statement emulation to avoid hitting MySQL bugs - - * ext/pdo/pdo_sql_parser.c - ext/pdo/pdo_sql_parser.re: - MFB: Added missing check for mismatching number of tokens & bound params in - prepared statement emulation. - - * (PHP_5_2) - ext/pdo/pdo_sql_parser.c - ext/pdo/pdo_sql_parser.re: - Added missing check for mismatching number of tokens & bound params in - prepared statement emulation. - - * ext/filter/filter.c: - MFB: Added "default" option that allows a default value to be set for an - invalid or missing value. - - * (PHP_5_2) - NEWS - ext/filter/filter.c: - Added "default" option that allows a default value to be set for an invalid - or missing value. - - * (PHP_5_2) - ext/dba/config.m4: - Config fix from Gentoo - - * ext/standard/assert.c: - MFB: Fixed bug #39718 (possible crash if assert.callback is set in ini). - - * (PHP_5_2) - NEWS - ext/standard/assert.c: - Fixed bug #39718 (possible crash if assert.callback is set in ini). - - * main/php_scandir.c: - MFB: Fixed php_readdir_r() usage in scandir emulation - - * (PHP_5_2) - main/php_scandir.c: - Fixed php_readdir_r() usage in scandir emulation - -2006-12-03 Antony Dovgal - - * main/php_scandir.c: - fix Solaris build - - * ext/ftp/ftp.c: - fix leaks - - * ext/standard/crypt.c: - fix AIX build - -2006-12-03 Nuno Lopes - - * ext/pcre/tests/001.phpt - ext/pcre/tests/002.phpt - ext/pcre/tests/003.phpt - ext/pcre/tests/004.phpt: - add UEXPECT sections - -2006-12-03 Hannes Magnusson - - * ext/pcre/tests/002.phpt: - MFB: fix test on fbsd - - * (PHP_5_2) - ext/pcre/tests/002.phpt: - Fix test on fbsd - -2006-12-02 Nuno Lopes - - * ext/pcre/tests/001.phpt - ext/pcre/tests/002.phpt - ext/pcre/tests/003.phpt - ext/pcre/tests/004.phpt: - MFH (not tested. so some tests may fail in unicode mode) - - * ext/pcre/tests/001.phpt - ext/pcre/tests/001.phpt - ext/pcre/tests/002.phpt - ext/pcre/tests/002.phpt - ext/pcre/tests/003.phpt - ext/pcre/tests/003.phpt - ext/pcre/tests/004.phpt - ext/pcre/tests/004.phpt: - - file 001.phpt was initially added on branch PHP_5_2. - -2006-12-02 Ilia Alshanetsky - - * ext/pdo/tests/pdo_016.phpt - ext/pdo/tests/pdo_016a.phpt - ext/pdo/tests/pdo_021.phpt - ext/pdo_mysql/mysql_statement.c: - MFB: Fixed bug #39527 (Failure to retrieve results when multiple - unbuffered, - prepared statements are used in pdo_mysql). - - * (PHP_5_2) - NEWS - ext/pdo/tests/pdo_016.phpt - ext/pdo/tests/pdo_016a.phpt - ext/pdo/tests/pdo_021.phpt - ext/pdo_mysql/mysql_statement.c: - Fixed bug #39527 (Failure to retrieve results when multiple unbuffered, - prepared statements are used in pdo_mysql). - -2006-12-01 Frank M. Kromann - - * (PHP_5_2) - ext/sqlite/libsqlite/src/date.c - ext/zip/lib/zip_dirent.c - main/php_scandir.c - win32/readdir.h: - Fix win32 build - - * main/php_scandir.c - win32/readdir.h: - MFB: Fix win32 build - -2006-12-01 Ilia Alshanetsky - - * (PHP_5_2) - NEWS: - Fixed typo - -2006-12-01 Dmitry Stogov - - * (PHP_5_2) - NEWS - ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.c - ZendEngine2/tests/bug39438.phpt: - Bug #39438 (Fatal error: Out of memory) - - * ZendEngine2/tests/bug39438.phpt - ZendEngine2/tests/bug39438.phpt: - - file bug39438.phpt was initially added on branch PHP_5_2. - - * ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.c: - typo - -2006-12-01 Andrei Zmievski - - * ext/standard/var.c - ext/standard/var_unserializer.c - ext/standard/var_unserializer.re: - Finalize Unicode support in serialize() and unserialize(). - -2006-12-01 Ilia Alshanetsky - - * ext/dbase/dbase.c - ext/dbase/tests/002.phpt: - MFB: Fixed a possible memory corruption in dbase_open() with invalid open - mode - - * (PHP_5_2) - ext/dbase/dbase.c - ext/dbase/tests/002.phpt: - Fixed a possible memory corruption in dbase_open() with invalid open mode - -2006-12-01 Andrei Zmievski - - * ext/standard/filestat.c: - Fix group macro access. - -2006-12-01 Nuno Lopes - - * ext/ftp/ftp.c - ext/ftp/tests/bug39458-2.phpt - ext/ftp/tests/bug39458.phpt - ext/ftp/tests/server.inc: - MFB: fix #39458 - - * (PHP_5_2) - NEWS - ext/ftp/tests/bug39458-2.phpt - ext/ftp/tests/bug39458-2.phpt - ext/ftp/tests/bug39458.phpt - ext/ftp/tests/bug39458.phpt - ext/ftp/tests/server.inc: - tests + BFN - - * (PHP_5_2) - ext/ftp/ftp.c: - fix bug #39458: ftp_nlist() returns false on empty dirs - -2006-12-01 Dmitry Stogov - - * (PHP_5_2) - NEWS - ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.c: - Fixed bug #39702 (php crashes in the allocator on linux-m68k) - - * ZendEngine2/zend_API.c: - Fixed buffer overflow. (Rob) - - * (PHP_5_2) - NEWS - ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.c: - Fixed bug #39640 (Segfault with "Allowed memory size exhausted") - - * (PHP_5_2) - NEWS - ZendEngine2/zend_alloc.c - ZendEngine2/zend_alloc.c: - Fixed bug #39652 (Wrong negative results from memeory_get_usage()) - -2006-12-01 Marcus Boerger - - * (PHP_5_2) - ext/spl/examples/dualiterator.inc: - - MFH: Fix handling of recursive inner iterators - - * ext/spl/examples/dualiterator.inc: - - Fix handling of recursive inner iterators - -2006-12-01 Ilia Alshanetsky - - * (PHP_4_4) - ext/session/session.c: - MFH: Disallow \0 chars inside session.save_path - - * ext/session/session.c: - MFB: Disallow \0 chars inside session.save_path - - * (PHP_5_2) - ext/session/session.c: - Disallow \0 chars inside session.save_path - -2006-11-30 Ilia Alshanetsky - - * (PHP_5_2) - ext/soap/php_sdl.c: - Small hash table optimization - -2006-11-30 Andrei Zmievski - - * ext/standard/url.c: - get_headers() will keep headers as binary strings. - -2006-11-30 Antony Dovgal - - * (PHP_4_4) - acinclude.m4 - configure.in: - MFH missing fixes required by autoconf 2.6x - fixes bug #39696 - -2006-11-30 Andrei Zmievski - - * ext/standard/string.c: - Mark setlocale() as Unicode-safe. It shouldn't be used in - unicode.semantics=on mode anyway. - - * ext/standard/basic_functions.c: - Forgot to mark import_request_variables() as Unicode-safe. - - * ext/standard/string.c: - Mark strtr() as Unicode-safe. - - - * ext/standard/pack.c: - Mark pack()/unpack() as Unicode-safe. They will accept Unicode strings - but convert them to binary. We can revisit supporting something like 'U' - format in the future, if it's needed. - - * ext/standard/quot_print.c: - Make quoted_printable_decode() take only ASCII strings. - -2006-11-30 Ilia Alshanetsky - - * configure.in: - MFB: Added check for crypt_r() - - * (PHP_5_2) - configure.in: - Added check for crypt_r() - - * ext/posix/config.m4: - MFB: Added missing function checks - - * (PHP_5_2) - ext/posix/config.m4: - Added missing function checks - - * ext/pdo_sqlite/sqlite/src/date.c - ext/sqlite/libsqlite/src/date.c - ext/xmlrpc/libxmlrpc/xmlrpc.c - ext/zip/lib/zip_dirent.c: - zts fixes - - * (PHP_5_2) - ext/pdo_sqlite/sqlite/src/date.c - ext/sqlite/libsqlite/src/date.c - ext/xmlrpc/libxmlrpc/xmlrpc.c - ext/zip/lib/zip_dirent.c: - last set of zts fixes - - * ext/interbase/ibase_query.c: - MFB: Thread safety fixes. - - * (PHP_5_2) - ext/interbase/ibase_query.c: - Thread safety fixes. - - * main/php_scandir.c: - MFB: Thread-safety issues - - * (PHP_5_2) - main/php_scandir.c: - Thread-safety issues - - * ext/standard/crypt.c: - MFB: Use reantrant crypt_r() whenever possible. - - * (PHP_5_2) - ext/standard/crypt.c: - Use reantrant crypt_r() whenever possible. - - * ext/mime_magic/mime_magic.c: - MFB: Use thread-safe code - - * (PHP_5_2) - ext/mime_magic/mime_magic.c: - Use thread-safe code - -2006-11-30 Antony Dovgal - - * ZendEngine2/tests/bug39602.phpt - ZendEngine2/tests/bug39602.phpt: - fix test - -2006-11-30 Ilia Alshanetsky - - * ext/posix/posix.c: - MFB: Thread safety fixed for *nix systems - - * (PHP_5_2) - ext/posix/posix.c: - Thread safety fixed for *nix systems - -2006-11-29 Ilia Alshanetsky - - * ext/standard/filestat.c: - MFB: Fixed bug #39648 (Implementation of PHP functions chown() and chgrp() - are not thread safe). - - * (PHP_5_2) - NEWS - configure.in - ext/standard/filestat.c: - Fixed bug #39648 (Implementation of PHP functions chown() and chgrp() are - not thread safe). - -2006-11-29 Antony Dovgal - - * ext/simplexml/simplexml.c: - add missing folding marker - -2006-11-29 Derick Rethans - - * (PHP_5_2) - NEWS - ext/date/lib/timezonedb.h - ext/date/lib/timezonedb.h: - - Updated timezone database to version 2006.16. - -2006-11-29 Ilia Alshanetsky - - * ext/pdo_pgsql/pgsql_driver.c - ext/pgsql/pgsql.c: - MFB: Fixed bug #39663 (Memory leak in pg_get_notify() and a possible memory - corruption on Windows in pgsql and pdo_pgsql extensions). - - * (PHP_5_2) - NEWS - ext/pdo_pgsql/pgsql_driver.c - ext/pgsql/pgsql.c: - Fixed bug #39663 (Memory leak in pg_get_notify() and a possible memory - corruption on Windows in pgsql and pdo_pgsql extensions). - -2006-11-29 Antony Dovgal - - * (PHP_5_2) - NEWS - ext/standard/tests/file/bug39673.phpt - main/streams/plain_wrapper.c: - MFH: fix #39673 (file_get_contents causes bus error on certain offsets) - - * ext/standard/tests/file/bug39673.phpt - ext/standard/tests/file/bug39673.phpt - main/streams/plain_wrapper.c: - - fix #39673 (file_get_contents causes bus error on certain offsets) - -2006-11-29 Rob Richards - - * ext/simplexml/simplexml.c - ext/simplexml/tests/bug39662.phpt: - MFB: correct fix for bug #39662 to fix leak and tree corruption - fix test - - * (PHP_5_2) - ext/simplexml/simplexml.c - ext/simplexml/tests/bug39662.phpt: - correct fix for bug #39662 to fix leak and tree corruption - fix test - -2006-11-28 Marcus Boerger - - * ext/spl/examples/callbackfilteriterator.inc - ext/spl/examples/callbackfilteriterator.inc: - - - Add new example - -2006-11-28 Antony Dovgal - - * ZendEngine2/zend_builtin_functions.c: - resolve coverity issue #224 - - * (PHP_5_2) - ext/standard/html.h: - add php_unescape_html_entities() proto to the header - (fixes #39665) - - * ext/standard/html.h: - add php_unescape_html_entities() proto to the header - - * (PHP_5_2) - NEWS - ext/simplexml/simplexml.c - ext/simplexml/tests/bug39662.phpt: - MFH: fix #39662 (Segfault when calling asXML() of a cloned - SimpleXMLElement) - - * ext/simplexml/simplexml.c - ext/simplexml/tests/bug39662.phpt - ext/simplexml/tests/bug39662.phpt: - fix #39662 (Segfault when calling asXML() of a cloned SimpleXMLElement) - - * ext/pdo/tests/bug_39656.phpt: - add test - - * ext/pdo/tests/bug_39656.phpt - ext/pdo/tests/bug_39656.phpt: - - file bug_39656.phpt was initially added on branch PHP_5_2. - -2006-11-28 Ilia Alshanetsky - - * ext/pdo/pdo_stmt.c - ext/pdo_pgsql/pgsql_statement.c: - MFB: Fixed bug #39656 (crash when calling fetch() on a PDO statment object - after closeCursor()). - - * (PHP_5_2) - NEWS - ext/pdo/pdo_stmt.c - ext/pdo_pgsql/pgsql_statement.c: - Fixed bug #39656 (crash when calling fetch() on a PDO statment object - after closeCursor()). - -2006-11-28 Antony Dovgal - - * (PHP_5_2) - NEWS: - BFN - - * (PHP_5_2) - ext/dba/config.m4: - MFH: fix #39653 (ext/dba doesn't check for db-4.5 and db-4.4 when db4 - support is enabled) - - * ext/dba/config.m4: - fix #39653 (ext/dba doesn't check for db-4.5 and db-4.4 when db4 support is - enabled) - -2006-11-28 Pierre-Alain Joye - - * (PHP_5_2) - ext/zip/php_zip.c: - - fix warning - - addEmptyDir returns true on success - - remove useless semi column - -2006-11-28 Ilia Alshanetsky - - * ext/mcrypt/mcrypt.c - ext/soap/php_http.c: - MFB: Replace non-threadsafe rand() with php_rand_r() - - * (PHP_5_2) - ext/mcrypt/mcrypt.c - ext/soap/php_http.c: - Replace non-threadsafe rand() with php_rand_r() - -2006-11-27 Antony Dovgal - - * (PHP_5_2) - NEWS - ext/pdo_sqlite/sqlite_statement.c: - MFH: fix #39564 (PDO::errorInfo() returns inconsistent information when - sqlite3_step() fails) - - * ext/pdo_sqlite/sqlite_statement.c: - fix #39564 (PDO::errorInfo() returns inconsistent information when - sqlite3_step() fails) - - * ext/ftp/tests/004.phpt: - fix test - this errmsg is different on FreeBSD - -2006-11-26 Alex Waugh - - * (PHP_5_2) - sapi/webjames/webjames.c: - MFH: Improve robustness of sending routines - - * sapi/webjames/webjames.c: - Improve robustness of sending routines - -2006-11-26 Ilia Alshanetsky - - * ext/mime_magic/mime_magic.c: - MFB: Fixed bug #39623 (thread safety fixes on *nix for mime_magic - extenion). - - * (PHP_5_2) - ext/mime_magic/mime_magic.c - ext/standard/basic_functions.c: - Fixed bug #39623 (thread safety fixes on *nix for putenv() & mime_magic). - - * (PHP_4_4) - NEWS - ext/standard/info.c: - MFH: Added a meta tag to phpinfo() output to prevent search engines from - indexing the page. - - * ext/imap/tests/imap_utf8.phpt: - MFB: Fixed test, in some versions of c-client returned value is always - uppercase - - * (PHP_5_2) - ext/imap/tests/imap_utf8.phpt: - Fixed test, in some versions of c-client returned value is always uppercase - - * ext/dbase/tests/002.phpt: - MFB: fixed test - - * (PHP_5_2) - ext/dbase/tests/002.phpt: - Fixed test - - * ext/standard/info.c: - MFB: Added a meta tag to phpinfo() output to prevent search engines from - indexing the page. - - * (PHP_5_2) - NEWS - ext/standard/info.c: - Added a meta tag to phpinfo() output to prevent search engines from - indexing the page. - -2006-11-24 Antony Dovgal - - * (PHP_5_2) - NEWS - ext/standard/string.c - ext/standard/tests/strings/bug39621.phpt: - MFH: fix #39621 (str_replace() is not binary safe on strings with equal - length) - - * ext/standard/string.c - ext/standard/tests/strings/bug39621.phpt - ext/standard/tests/strings/bug39621.phpt: - fix #39621 (str_replace() is not binary safe on strings with equal length) - - * ext/standard/levenshtein.c: - add missing argument to zend_parse_parameters() - -2006-11-24 Nuno Lopes - - * ext/ftp/tests/006.phpt - ext/ftp/tests/bug39583.phpt - ext/ftp/tests/server.inc - ext/standard/tests/general_functions/phpcredits.phpt - ext/standard/tests/general_functions/phpcredits2.phpt - ext/standard/tests/general_functions/phpinfo.phpt - ext/standard/tests/general_functions/phpinfo2.phpt: - more tests - - * ext/ftp/tests/006.phpt - ext/ftp/tests/006.phpt - ext/ftp/tests/bug39583.phpt - ext/ftp/tests/server.inc - ext/standard/tests/general_functions/phpcredits.phpt - ext/standard/tests/general_functions/phpcredits.phpt - ext/standard/tests/general_functions/phpcredits2.phpt - ext/standard/tests/general_functions/phpcredits2.phpt - ext/standard/tests/general_functions/phpinfo.phpt - ext/standard/tests/general_functions/phpinfo.phpt - ext/standard/tests/general_functions/phpinfo2.phpt - ext/standard/tests/general_functions/phpinfo2.phpt: - - file 006.phpt was initially added on branch PHP_5_2. - - * ext/ftp/tests/005.phpt - ext/ftp/tests/bug39583-2.phpt - ext/ftp/tests/bug39583.phpt - ext/ftp/tests/bug7216-2.phpt - ext/ftp/tests/server.inc: - MFB - - * (PHP_5_2) - ext/ftp/tests/005.phpt - ext/ftp/tests/bug39583-2.phpt - ext/ftp/tests/bug39583-2.phpt - ext/ftp/tests/bug39583.phpt - ext/ftp/tests/bug39583.phpt - ext/ftp/tests/bug7216-2.phpt - ext/ftp/tests/server.inc: - fix tests after Tony's commit and add a test for the bug he fixed - -2006-11-24 Antony Dovgal - - * ext/ftp/tests/004.phpt - ext/ftp/tests/004.phpt - sapi/cli/tests/011.phpt - sapi/cli/tests/011.phpt: - fix test - - * (PHP_5_2) - sapi/cli/tests/.cvsignore - sapi/cli/tests/001.phpt - sapi/cli/tests/002-win32.phpt - sapi/cli/tests/002.phpt - sapi/cli/tests/003.phpt - sapi/cli/tests/004.phpt - sapi/cli/tests/005.phpt - sapi/cli/tests/006.phpt - sapi/cli/tests/007.phpt - sapi/cli/tests/008.phpt - sapi/cli/tests/009.phpt - sapi/cli/tests/010-2.phpt - sapi/cli/tests/010.phpt - sapi/cli/tests/011.phpt - sapi/cli/tests/012.phpt - sapi/cli/tests/013.phpt - sapi/cli/tests/014.phpt - sapi/cli/tests/skipif.inc: - add tests for CLI - - * sapi/cli/tests/.cvsignore - sapi/cli/tests/.cvsignore: - - add .cvsignore - - * sapi/cli/tests/001.phpt - sapi/cli/tests/001.phpt - sapi/cli/tests/002-win32.phpt - sapi/cli/tests/002-win32.phpt - sapi/cli/tests/002.phpt - sapi/cli/tests/002.phpt - sapi/cli/tests/003.phpt - sapi/cli/tests/003.phpt - sapi/cli/tests/004.phpt - sapi/cli/tests/004.phpt - sapi/cli/tests/005.phpt - sapi/cli/tests/005.phpt - sapi/cli/tests/006.phpt - sapi/cli/tests/006.phpt - sapi/cli/tests/007.phpt - sapi/cli/tests/007.phpt - sapi/cli/tests/008.phpt - sapi/cli/tests/008.phpt - sapi/cli/tests/009.phpt - sapi/cli/tests/009.phpt - sapi/cli/tests/010-2.phpt - sapi/cli/tests/010-2.phpt - sapi/cli/tests/010.phpt - sapi/cli/tests/010.phpt - sapi/cli/tests/011.phpt - sapi/cli/tests/011.phpt - sapi/cli/tests/012.phpt - sapi/cli/tests/012.phpt - sapi/cli/tests/013.phpt - sapi/cli/tests/013.phpt - sapi/cli/tests/014.phpt - sapi/cli/tests/014.phpt - sapi/cli/tests/skipif.inc - sapi/cli/tests/skipif.inc: - - add tests for CLI - - * (PHP_4_4) - NEWS - NEWS - ext/ftp/ftp.h - ext/ftp/ftp.h: - MFH: fix #39583 (ftp_put() does not change transfer mode to ASCII) - - * ext/ftp/ftp.h: - fix #39583 (ftp_put() does not change transfer mode to ASCII) - - * sapi/cli/php_cli.c: - call sapi_deactivate() & friends on error - fixes leak with `php-cli -n -c ..` - - * ZendEngine2/zend.c: - initialize CG(literal_type) using ZEND_STR_TYPE macro - add CG(literal_type) initialization in non-ZTS mode - fixes backticks operator - - * (PHP_5_2) - NEWS: - BFN - - * ext/imap/php_imap.c - ext/imap/php_imap.c: - fix #39613 (Possible segfault in imap initialization due to missing module - dependency) - patch by wharmby at uk dot ibm dot com - -2006-11-23 Antony Dovgal - - * ZendEngine2/zend_language_scanner.l - ZendEngine2/zend_language_scanner.l: - nullify opened_path and filename (when required) - fixes invalid reads with `php-cli -F patch - -2005-03-06 Marcus Boerger - - * zend_reflection_api.c: - - Fix by Tim - -2005-03-06 Jani Taskinen - - * zend_compile.c - zend_compile.c: - Fixed compile warning (bug #32046) - - * zend_mm.c: - Fix compile warning (bug #32047) - -2005-03-01 Marcus Boerger - - * zend_interfaces.c: - - Support statuc methods/functions - -2005-03-01 Jani Taskinen - - * (PHP_5_0) - zend_language_scanner.l: - MFH: - Fixed bug #31672 ( not considered closing tag if - MFH: preceded by one-line comment) - - * zend_language_scanner.l: - Fix the fix for one line comments with tags - -2005-02-28 Marcus Boerger - - * zend_builtin_functions.c: - - Add support for methods dynamically added through object handlers - -2005-02-27 Marcus Boerger - - * zend_object_handlers.c: - - If silence if wanted we do not error out - - * zend_reflection_api.c: - - Add two new methods - - Fix signature, no need to cast it - - * zend_API.h: - - These must be initailized - - * zend_builtin_functions.c: - - Update method_exists to new handlers and allow first parameter as string - -2005-02-27 Jani Taskinen - - * Zend.m4: - - Cache the version check results - -2005-02-24 Andi Gutmans - - * zend_language_scanner.l: - - Make one line comments work the same with as with - - other tags. This will break scripts that have whitespace at the end - - of the closing tag but this is barely used as it is - - and I doubt ppl used whitespace. (patch by Jani) - - * zend_objects_API.h: - - This part of the patch was right - -2005-02-24 Dmitry Stogov - - * (PHP_5_0) - zend_execute.c - zend_vm_def.h - zend_vm_execute.h - zend_vm_opcodes.h: - Fixed bug in ZEND_POST_INC/ZEND_POST_DEC handlers. - These opcodes assume IS_TMP_VAR as result. - -2005-02-24 Andi Gutmans - - * zend_modules.h: - - Need zend_Compile.h for struct _zend_arg_info definiton (thanks to Joe - Orton) - - * zend_objects.c - zend_objects.h - zend_objects_API.h: - - Revert following patch until we decide what is the right way to handle - - this: - - Fix signatures they are all meant to be able to deal with any type in - any - object storage (though we are still missing several parts) - -2005-02-23 Derick Rethans - - * (PHP_5_0) - zend_reflection_api.c: - - MFH: fixed bug #32076 (ReflectionMethod :: isDestructor() always return - true). - - * zend_reflection_api.c: - - Fixed bug #32076 (ReflectionMethod :: isDestructor() always return true) - (Patch by Antony Dogval) - -2005-02-23 Stanislav Malyshev - - * zend.h - zend_compile.c: - Custom object serializer infrastructure - -2005-02-23 Jani Taskinen - - * Zend.m4: - Hack the planet - -2005-02-23 Marcus Boerger - - * zend_interfaces.c: - - Allow to convert Traversable into Aggregate - -2005-02-22 Marcus Boerger - - * zend_objects_API.c: - - We cannot provide this fallback becuase it requires zend_object ptr's. - -2005-02-22 Jani Taskinen - - * Zend.m4: - Fix cross-compile - - * acconfig.h: - Fix build (it was #ifNdef NETWARE..) - -2005-02-22 Marcus Boerger - - * zend_objects.c - zend_objects.h - zend_objects_API.h: - - Fix signatures they are all meant to be able to deal with any type in any - object storage (though we are still missing several parts) - - * zend_objects_API.c: - - Force calling of dtors unless otherwise specified (fixes several - __destruct bugs) - -2005-02-22 Anantha Kesari H Y - - * zend.h: - NetWare can include autoconf generated config headers - - * acconfig.h: - NetWare can make use of the configure script generated header file. - -2005-02-21 Moriyoshi Koizumi - - * Makefile.am: - - Add missing entry. - -2005-02-20 Dmitry Stogov - - * zend_compile.c: - Fixed possible memory corruption - -2005-02-19 Rui Hirokawa - - * (PHP_5_0) - zend_language_scanner.l: - MFH: fixed #31987 zend-multibyte in ZTS. - - * zend_language_scanner.l: - fixed #31987 zend-multibyte in ZTS. - -2005-02-17 Marcus Boerger - - * zend_API.c: - - A little optimization to prevent problems when trying to reimplement an - interface inherited from an interfaces that was just implemented...... - - * zend_API.c: - - No C++ ruleZ here - - * zend_API.c: - - Actually we must do this in two steps: 1st resize the table and set all - interfaces, 2nd implement the interfaces - - * zend_API.c: - - Incrementation is done elsewhere - - * zend_API.c: - - Fix windows build (funny MS compiler) - -2005-02-17 Jani Taskinen - - * (PHP_5_0) - Zend.m4 - zend_strtod.c: - MFH: - Compile fix for systems without int32_t typedef - - * Zend.m4 - zend_strtod.c: - - Compile fix for systems without int32_t typedef - -2005-02-13 Marcus Boerger - - * zend_execute_API.c - zend_reflection_api.c: - - Be more gracious in reflection API - - * zend_language_scanner.l: - - Fix doc comment handling - -2005-02-12 Marcus Boerger - - * zend_execute_API.c: - - Bugfix #30682 (autoconversion from false/true to 0/1 missing in case of - static property default value) - -2005-02-11 Marcus Boerger - - * zend_compile.c - zend_compile.h - zend_language_parser.y: - - Cleanup foreach handling - -2005-02-10 Jani Taskinen - - * zend_strtod.c - zend_strtod.c: - - Fixed bug #31920 (zend_strtod.c error: conflicting types for 'int8_t') - -2005-02-10 Dmitry Stogov - - * zend_vm_def.h - zend_vm_execute.h - zend_vm_opcodes.h - tests/bug30407.phpt: - Fixed bug #30407 (Strange behaviour of default arguments) - -2005-02-07 Dmitry Stogov - - * zend_compile.c: - Fixed bug introduced with foreach() optimization patch - - * zend_compile.c: - Fixed FE_RESET/FE_FETCH bug. - Now FE_RESET instruction takes jump-address from itself, not from the - following FE_FETCH instruction. - - * zend_compile.c - zend_compile.h - zend_language_parser.y - zend_vm_def.h - zend_vm_execute.h - zend_vm_opcodes.h: - foreash($a as $key => $val) optimization - Removed temorary array creation on each iteration. - -2005-02-07 Marcus Boerger - - * zend_compile.c - zend_compile.h - zend_language_parser.y: - - Remove part of the cleanup which causes a problem with unnormal code - like tests/lang/040.phpt - -2005-02-06 Zeev Suraski - - * (PHP_5_0) - zend_ini_scanner.l: - Correct fix for #28803 - - * zend_ini_scanner.l: - Correct fix for #28804 - -2005-02-05 Marcus Boerger - - * zend_compile.c - zend_compile.h - zend_language_parser.y - zend_vm_def.h - zend_vm_execute.h - zend_vm_opcodes.h: - - Cleanup foreach statement - -2005-02-04 Hartmut Holzgraefe - - * zend_API.c - zend_API.h: - added some missing zend_[declare|update]_property_...() convenience - functions for bool, double and binary safe string data - -2005-02-03 Jani Taskinen - - * (PHP_5_0) - zend_ini_scanner.l: - MFH: Fixed bug #28804 (ini-file section parsing pattern is buggy). - - * zend_ini_scanner.l: - - Fixed bug #28804 (ini-file section parsing pattern is buggy). - - * zend_ini_scanner.l - zend_ini_scanner.l: - ws fix - -2005-02-02 Stanislav Malyshev - - * zend_execute_API.c: - Fix #31720 Invalid object callbacks not caught in array_walk() (patch - from Antony Dovgal) - - * tests/bug31720.phpt: - test for Bug #31720 - - * tests/bug31720.phpt - tests/bug31720.phpt: - - file bug31720.phpt was initially added on branch PHP_5_0. - - * (PHP_5_0) - zend_execute_API.c: - Fix #31720 Invalid object callbacks not caught in array_walk() (patch - from Antony Dovgal) - -2005-02-02 Dmitry Stogov - - * zend.h - zend.h - zend_object_handlers.c - zend_object_handlers.c - tests/bug31683.phpt: - Fixed bugs #29767 and #31683 (__get and __set methods must not modify - property name). - - * tests/bug31683.phpt - tests/bug31683.phpt: - - file bug31683.phpt was initially added on branch PHP_5_0. - -2005-02-01 Stanislav Malyshev - - * zend_builtin_functions.c - zend_builtin_functions.c: - Fix debug_trace with eval (patch from Antony Dovgal) - - * tests/bug_debug_backtrace.phpt: - test for eval debug_backtrace bug - - * tests/bug_debug_backtrace.phpt - tests/bug_debug_backtrace.phpt: - - file bug_debug_backtrace.phpt was initially added on branch PHP_5_0. - -2005-01-31 Marcus Boerger - - * zend_reflection_api.c: - - Add ReclectionClass:hasProperty(), ReflectionClass::hasConstant() - to complete api (johannes@php.net) - -2005-01-28 Marcus Boerger - - * zend_execute_API.c: - - Fix severity (found by johannes) - -2005-01-25 Jani Taskinen - - * zend.h: - New versions of glibc support a RTLD_DEEPBIND flag to dlopen. The - effect of this flag when loading a "foo.so" with undefined symbols is - that the search that symbol starts at foo.so and its dependencies - *before* the loading process' global symbol table. - - This is an effective workaround for symbol namespace collisions between - various modules and the libraries on which they depend (where fixing the - respective modules or libraries is not possible e.g. due to API - constraints). - - (By: Joe Orton) - -2005-01-25 Marcus Boerger - - * (PHP_5_0) - zend_execute.c - zend_interfaces.c - tests/bug26229.phpt: - - MFH #26229 (getIterator() segfaults when it returns arrays or scalars) - - * zend_interfaces.c - zend_vm_def.h - zend_vm_execute.h - tests/bug26229.phpt: - - Bugfix #26229 (getIterator() segfaults when it returns arrays or scalars) - - * Makefile.frag: - - Fix dependency - - * zend_vm_def.h - zend_vm_execute.h: - - Use correct freeing (thx Dmitry) - -2005-01-24 Marcus Boerger - - * zend_vm_def.h - zend_vm_execute.h - tests/bug30725.phpt: - - Second and last part of #30725 fix - - * zend_interfaces.c: - - Allow getIterator() to fail - - * tests/bug30725.phpt: - - - Add new test - -2005-01-22 Jani Taskinen - - * (PHP_5_0) - Zend.m4 - configure.in - zend_strtod.c: - MFH: Compile fix for systems without uint32_t typedef - - * Zend.m4 - configure.in - zend_strtod.c: - - Compile fix for systems without uint32_t typedef - -2005-01-22 Marcus Boerger - - * zend_API.c - zend_API.h - zend_reflection_api.c: - - Fix #31651 (ReflectionClass::getDefaultProperties segfaults with arrays.) - -2005-01-22 Andi Gutmans - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_execute.h: - - Two new API calls for Derick (retreive CV name and value) by Dmitry - -2005-01-20 Jani Taskinen - - * zend.h - zend_constants.c: - - Revert the weird change of ZEND_STRS() macro and use the correct - ZEND_STRL() macro. - -2005-01-19 Jani Taskinen - - * zend_object_handlers.c: - - Fixed bug #29183 (Undefined symbol zend_check_private with Solaris CC) - -2005-01-19 Marcus Boerger - - * zend_ini_parser.y: - - Fix memleak - -2005-01-18 Dmitry Stogov - - * zend_compile.c: - Fixed patch for bug #31478 (SegFault/Memory Leak with empty()) - - * zend_execute.c: - Fixed bug #28444 (Cannot access undefined property for object with - overloaded property access). - - * (PHP_5_0) - zend_execute.c: - Fixed bug #28444 (Cannot access undefined property for object with - overloaded property access). (Dmitry) - -2005-01-18 Ilia Alshanetsky - - * (PHP_5_0) - zend_operators.h: - MFH: Fixed bug #30726 (-.1 like numbers are not being handled correctly). - - * zend_operators.h: - Fixed bug #30726 (-.1 like numbers are not being handled correctly). - -2005-01-17 Jani Taskinen - - * (PHP_5_0) - zend_language_scanner.l: - MFH: - Fixed bug #31444 (Memory leak in zend_language_scanner.c) - - * zend_language_scanner.l: - - Fixed bug #31444 (Memory leak in zend_language_scanner.c) - -2005-01-15 Andi Gutmans - - * (PHP_5_0) - zend_API.c: - - Fix WS - - * (PHP_5_0) - zend_API.c: - - Change to using DL_UNLOAD macro. - - * zend_API.c: - - Unload on MAC OS X (shouldn't be a reason not to) - -2005-01-14 Dmitry Stogov - - * zend_execute.c - zend_vm_def.h - zend_vm_execute.h - zend_vm_opcodes.h - tests/bug31098.phpt: - Restore behavior of $str["str"]. (Now $str["str"] is equivalent to $str[0] - again) - - * (PHP_5_0) - tests/bug31098.phpt: - Path -> pattern - - * (PHP_5_0) - zend_execute.c - tests/bug31098.phpt: - Revert to old behavior of $str["str"]. ($str["str"] is equivalent of - $str[0]) - -2005-01-13 Dmitry Stogov - - * zend_execute.c - zend_execute.c: - Additional fix for fix of bug #29883 - -2005-01-12 Dmitry Stogov - - * zend_execute.c - zend_execute.c - zend_vm_def.h - zend_vm_execute.h - zend_vm_opcodes.h - tests/bug31098.phpt - tests/bug31098.phpt: - Fixed bug #31098 (isset false positive) - -2005-01-11 Moriyoshi Koizumi - - * (PHP_5_0) - zend_execute.c - tests/bug31098.phpt: - - MFH: fix for bug #31098. - - * tests/bug31098.phpt - tests/bug31436.phpt: - - - Test renaming - - * zend_vm_execute.h - tests/bug31436.phpt: - - Fix bug #31436 (isset() incorrectly returns true in dereference of a - wrong type) - - * zend_compile.c: - - Fix bug #31478 (segfault with empty()) - -2005-01-10 Rasmus Lerdorf - - * zend.h - zend_API.c: - Fix OSX DL_UNLOAD macro and actually use it to make shared extensions - work on OSX. - -2005-01-10 Jani Taskinen - - * header - zend_arg_defs.c - zend_strtod.c - zend_vm_def.h - zend_vm_execute.h - zend_vm_gen.php - zend_vm_opcodes.h: - - Added missing header sections. - - * acinclude.m4 - configure.in: - - Added AC_ZEND_C_BIGENDIAN macro (as requested by Andi) - -2005-01-09 Jani Taskinen - - * (PHP_5_0) - zend.h: - MFH: - Fix outside-source-tree builds. Always include generated header - files - with #include to make sure the correct file is - used. - - * zend.h: - - Fix outside-source-tree builds. Always include generated header files - with #include to make sure the correct file is used. - - * zend.c: - MFB: - Rationalize code a bit - -2005-01-03 Stanislav Malyshev - - * (PHP_5_0) - zend_language_scanner.l: - MFH: - Fix the following nasty bug: - - if compile bails out from the middle of compiling, current_buffer is not - restored - - if current_buffer is not null, yy_switch_to_buffer will do: *yy_c_buf_p - = yy_hold_char; on - the next request - - which would lead to memory corruption on next request - - * zend_language_scanner.l: - Fix the following nasty bug: - - if compile bails out from the middle of compiling, current_buffer is not - restored - - if current_buffer is not null, yy_switch_to_buffer will do: *yy_c_buf_p - = yy_hold_char; on - the next request - - which would lead to memory corruption on next request - -2005-01-02 Ilia Alshanetsky - - * (PHP_5_0) - zend_highlight.c: - MFH: Fixed bug #31371 (highlight_file() trims new line after heredoc). - - * zend_highlight.c: - Fixed bug #31371 (highlight_file() trims new line after heredoc). - -2004-12-30 Jani Taskinen - - * (PHP_5_0) - zend_compile.c - zend_highlight.c - zend_indent.c - zend_ini_scanner.l - zend_language_scanner.l: - MFH: - Fixed bug #28930 (PHP sources pick wrong header files generated by - bison). - - * zend_compile.c - zend_highlight.c - zend_indent.c - zend_ini_scanner.l - zend_language_scanner.l: - - Fixed bug #28930 (PHP sources pick wrong header files generated by bison) - - * Zend.m4 - acinclude.m4: - MFB_4_3: Quote macro names in AC_DEFUN() - -2004-12-27 Zeev Suraski - - * zend_builtin_functions.c: - MFB - - * (PHP_5_0) - zend_builtin_functions.c: - Fix desc - -2004-12-27 Marcus Boerger - - * (PHP_5_0) - zend_reflection_api.c: - - MFH: Need to unmangle the class name here - - * zend_reflection_api.c: - - Need to unmangle the class name here - -2004-12-27 Zeev Suraski - - * (PHP_5_0) - zend_exceptions.c: - Add descriptions - -2004-12-27 Dmitry Stogov - - * zend_execute.c - zend_execute.c - zend_vm_def.h - zend_vm_execute.h - tests/bug22836.phpt - tests/bug22836.phpt - tests/unset_cv01.phpt - tests/unset_cv02.phpt - tests/unset_cv03.phpt - tests/unset_cv04.phpt - tests/unset_cv06.phpt - tests/unset_cv08.phpt - tests/unset_cv09.phpt - tests/unset_cv10.phpt: - "Undefined variable: %s" noticies were fixed to use one space - -2004-12-27 Marcus Boerger - - * zend_reflection_api.c: - - More proto/error message fixes - - * zend_reflection_api.c: - - Small fixlet (by Tony) - -2004-12-24 Dmitry Stogov - - * zend_vm_def.h - zend_vm_execute.h: - New sarbage collector's bug was fixed (the behavior should be the same as - in PHP_5_0) - - * zend_execute.c - tests/unset_cv01.phpt - tests/unset_cv02.phpt - tests/unset_cv03.phpt - tests/unset_cv04.phpt - tests/unset_cv06.phpt - tests/unset_cv08.phpt - tests/unset_cv09.phpt - tests/unset_cv10.phpt: - "Undefined variable: %s" noticies were fixed to be compatible with PHP_5_0 - -2004-12-21 Jani Taskinen - - * (PHP_5_0) - zend_strtod.c: - MFH: - Use correct header files (in c99 compliant way). uint32_t is - preferred. - - * zend_strtod.c: - - Use correct header files (in c99 compliant way). uint32_t is preferred. - -2004-12-20 Jani Taskinen - - * zend_strtod.c: - Better fix for endian compile problems. - -2004-12-17 Andi Gutmans - - * zend_object_handlers.c: - - Fixed Bug #30562 Segmentation fault with __call() - -2004-12-17 Derick Rethans - - * zend_strtod.c - zend_strtod.c: - - MF43: Fixed strtod for Irix and some other strange platform - -2004-12-16 Derick Rethans - - * zend_strtod.c - zend_strtod.c: - - MF43: Make it compile on HPUX on Itanium 2 - - * zend_strtod.c - zend_strtod.c: - - MF43: Fixed bug #31107 (strtod on solaris9/intel) - -2004-12-16 Jani Taskinen - - * (PHP_5_0) - ChangeLog: - - MFH: Fix typo (avaliable -> available). (bug #28725) - - * ChangeLog: - - Fix typo (avaliable -> available). (bug #28725) - -2004-12-16 Derick Rethans - - * zend_strtod.c: - - MF43: Fixed bug #31110 and #31111 (Zend/zend_strtod.c problems) - - * (PHP_5_0) - zend_strtod.c: - - Fixed bug #31110 and #31111 (Zend/zend_strtod.c problems) - -2004-12-15 Andi Gutmans - - * (PHP_5_0) - zend.h: - - 5.0.4-dev - - * (PHP_5_0) - zend.h: - - Redo 5.0.3 - - * (PHP_5_0) - zend.h: - - Back to -dev - - * (PHP_5_0) - zend.h: - - Roll PHP 5.0.3 - -2004-12-14 Derick Rethans - - * zend_strtod.c - zend_strtod.c: - - MFH: Fixed compile error related to bug #28605. - -2004-12-13 Derick Rethans - - * zend_operators.c: - - Added "G" modifier to ini setting number format. - -2004-12-10 Andi Gutmans - - * (PHP_5_0) - zend.h: - - Back to -dev - - * (PHP_5_0) - zend.h: - - 5.0.3RC2 - -2004-12-07 Dmitry Stogov - - * zend_exceptions.c - zend_exceptions.c: - Fixed bug #30904 (segfault when recording soapclient into session). - -2004-12-06 Stanislav Malyshev - - * tests/bug30998.phpt: - add test - - * zend.c - zend.c: - port fix for #30998: Crash when user error handler returns false on amd64 - -2004-12-06 Dmitry Stogov - - * zend_compile.c - zend_compile.c - tests/bug30922.phpt: - Fixed bug #30922 (reflective functions crash PHP when interfaces extend - themselves) - - * tests/bug30922.phpt - tests/bug30922.phpt: - - file bug30922.phpt was initially added on branch PHP_5_0. - -2004-12-06 Stanislav Malyshev - - * (PHP_5_0) - zend_builtin_functions.c: - if fetch called not from PHP function, ptr can be NULL - -2004-12-01 Ilia Alshanetsky - - * zend_strtod.c: - MFB: Removed extra space that causes problems for some compilers. - - * (PHP_5_0) - zend_strtod.c: - Removed extra space that causes problems for some compilers. - -2004-12-01 Derick Rethans - - * (PHP_5_0) - zend_strtod.c: - - revert unwanted change - - * zend_strtod.c - zend_strtod.c: - - Fixed MacOSX compilation (Patch by Christian) - - * (PHP_5_0) - zend.h: - - And in Zend/ too. - -2004-12-01 Dmitry Stogov - - * (PHP_5_0) - zend_execute.c - zend_vm_def.h - zend_vm_execute.h - tests/bug29883.phpt - tests/bug29883.phpt - tests/bug29883.phpt: - Fixed bug #29883 (isset gives invalid values on strings). - -2004-11-30 Andi Gutmans - - * (PHP_5_0) - zend.h: - - Go with 5.0.3RC1 - -2004-11-29 Derick Rethans - - * (PHP_5_0) - zend_operators.c: - - MF43: Revert Joe's work around a bug in GCC patch as it breaks too many - things. - - * zend_operators.c: - - MFH: Revert Joe's work around a bug in GCC patch as it breaks too many - things. - -2004-11-25 Zeev Suraski - - * (PHP_5_0) - zend_execute.c - zend_execute_API.c - zend_extensions.h - zend_object_handlers.c - zend_object_handlers.h: - Reverting get_method() signature change - -2004-11-24 Marcus Boerger - - * zend_reflection_api.c: - - Fix Bug #30856 (ReflectionClass::getStaticProperties segfaults) - - * tests/bug30856.phpt: - - - Add new test - -2004-11-17 Stanislav Malyshev - - * (PHP_5_0) - zend_execute_API.c: - fix #30543 - - * zend_execute_API.c: - fix crash - -2004-11-16 Derick Rethans - - * zend_strtod.c - zend_strtod.c: - - Make this compile for the Mac again - -2004-11-15 Derick Rethans - - * (PHP_5_0) - zend_strtod.c: - - MFH: Fixed bug #30779 (Compile of Zend/zend_strtod.c fails on Sparc) - - * zend_strtod.c: - - Fixed bug #30779 (Compile of Zend/zend_strtod.c fails on Sparc) - -2004-11-14 Marcus Boerger - - * (PHP_5_0) - zend_reflection_api.c: - MFH #30783 Apache crash when using ReflectionFunction::getStaticVariables() - MFH proto fixes - - * zend_reflection_api.c: - - Bugix #30783: Apache crash when using - ReflectionFunction::getStaticVariables() - -2004-11-09 Andrei Zmievski - - * zend_ini_parser.y: - Revert inadvertent commit. - - * zend_ini_parser.y: - .dylib extension are Mach-O shared libraries that meant for linking - against. Loadable modules (aka bundles) can have any extension, so we - should probably stick with .so - - http://fink.sourceforge.net/doc/porting/shared.php?phpLang=en#lib-and-mod - -2004-11-05 Derick Rethans - - * (PHP_5_0) - zend_execute_API.c: - - Fix for bug #30367, #30490 and possibly #30011. - -2004-11-04 Edin Kadribasic - - * Zend.dsp - ZendTS.dsp: - Added zend_strtod.* to the build - - * zend_strtod.c - zend_strtod.h: - Make zend_strtod compile on windows - -2004-11-04 Moriyoshi Koizumi - - * (PHP_5_0) - Makefile.am: - - MFH: Add entry for zend_strtod.c in belief that this is still active. - - * Makefile.am: - - Add entry for zend_strtod.c in belief that this is still active. - -2004-11-03 Moriyoshi Koizumi - - * Zend.m4: - - Don't show grep outputs - -2004-11-03 Derick Rethans - - * (PHP_5_0) - zend_execute_API.c - zend_globals.h - zend_ini.c - zend_language_scanner.l - zend_operators.c - zend_operators.h - zend_strtod.c - zend_strtod.h: - - MFH: Fixed bug #30630: Added a BSD based strtod function that is - locale-independent. - - * zend_execute_API.c - zend_globals.h - zend_ini.c - zend_language_scanner.l - zend_operators.c - zend_operators.h - zend_strtod.c - zend_strtod.h: - - Fixed bug #30630: Added a BSD based strtod function that is - locale-independent. - -2004-11-03 Moriyoshi Koizumi - - * Zend.m4 - zend.h - zend_execute.c: - - Checks for Darwin'ish systems that uses Mach-O, which apparently doesn't - support weak symbol aliasing at this time. - -2004-11-03 Marcus Boerger - - * zend_reflection_api.c: - - Trying to invoke function not methot here - - * zend_reflection_api.c: - - Fix invokeargs() with static methods - -2004-11-03 Dmitry Stogov - - * zend_vm_def.h - zend_vm_execute.h: - Fixed "isset() and the new VM" bug. - -2004-11-02 Sebastian Bergmann - - * (PHP_5_0) - zend_API.c: - MFH: Patch by Joe Orton . - - * zend_API.c: - Patch by Joe Orton . - -2004-10-31 Marcus Boerger - - * zend_reflection_api.c: - - Add ReflectionFunction::invokeArgs(array) - - Add ReflectionMethod::invokeArgs(obj, array) - -2004-10-31 Sebastian Bergmann - - * zend_reflection_api.c: - Invokation -> Invocation - -2004-10-30 Marcus Boerger - - * zend.h: - Bump version (as discussed with Andi) - - * (PHP_5_0) - zend_execute.c: - - Fix (readd function name which got lost during earlier comit) - - * zend_reflection_api.c: - - Be consistent and use names as keys (found by johannes) - - * zend_extensions.h - zend_modules.h: - - Bump API version - - * (PHP_5_0) - zend_extensions.h - zend_modules.h: - Bump api after latest changes - - * (PHP_5_0) - zend_execute.c - zend_object_handlers.c - zend_object_handlers.h: - MFH change zend_object_handlers->get_method() - - * zend_execute_API.c - zend_object_handlers.c - zend_object_handlers.h - zend_vm_def.h - zend_vm_execute.h: - - Change zend_object_handlers->get_method() to allow aggregation for - internal classes - - * Makefile.frag: - - New architecture needs one more dependency - - * zend_exceptions.c - zend_reflection_api.c: - - Fix protos - -2004-10-29 Andi Gutmans - - * zend_operators.c: - - For Ilia: - - MFH: Fixed bug #30572 (crash when comparing SimpleXML attribute to a - boolean). - - Hope this works well. I will MFH tomorrow if no one complains. - -2004-10-28 Dmitry Stogov - - * README.ZEND_VM - zend_vm_gen.php: - --without-lines changed to --with-lines - -2004-10-28 Andi Gutmans - - * zend_vm_execute.skl - zend_vm_gen.php: - - Fix typo - -2004-10-27 Andi Gutmans - - * zend_vm_opcodes.h: - - Oops missed this one - - * zend_operators.c: - - Revert Fixed bug #30228 (crash when comparing SimpleXML attribute to a - boolean). - - Need to discuss where the real problem is. - - * README.ZEND_VM: - - Tiny fixes - - * README.ZEND_VM - zend_compile.h - zend_vm_execute.h - zend_vm_gen.php: - - Improve comments, docs, code... - -2004-10-26 Andi Gutmans - - * zend_builtin_functions.c: - - Patch from Andrey Hristov: - I have cooked a small patch which allows is_subclass_of() the accept - not only an object as first parameter but a string as well. When string - is passed the function checks whether the class specified is subclass of - the second parameter - class a{} - class b{} extends a{} - is_subclass_of("a", "a") //false - is_subclass_of("b", "a") //true - currently only objects are allowed as first parameter - -2004-10-26 Ilia Alshanetsky - - * (PHP_5_0) - zend_operators.c: - MFH: Fixed bug #30572 (crash when comparing SimpleXML attribute to a - boolean). - - * zend_operators.c: - Fixed bug #30228 (crash when comparing SimpleXML attribute to a boolean). - -2004-10-23 Andi Gutmans - - * zend_vm_execute.h: - - Add missing file - -2004-10-22 Andi Gutmans - - * zend_vm_handlers.h - zend_vm_spec.h: - - Nuke another two files - - * Makefile.frag - zend_execute.c - zend_vm.h - zend_vm_def.h - zend_vm_execute.skl - zend_vm_gen.php: - - Commit new VM - - Old one is tagged as PRE_NEW_VM_GEN_PATCH - - Still doing work so more commits to come. Don't complain (yet) :) - - * (PRE_NEW_VM_GEN_PATCH) - zend_execute.c: - - Fix crash (MFB PHP5_0) - -2004-10-21 Andi Gutmans - - * (PHP_5_0) - zend_execute.c: - - Fix bug #30395 (Apache Child Segmentation fault in specific PHP-Code) - -2004-10-20 Andi Gutmans - - * zend_operators.c: - - If object handles are equal then save the comparison of properties in - - the == operator. - -2004-10-18 Anantha Kesari H Y - - * zend_modules.h: - including zend_compile.h for NetWare as NetWare uses MetroWerks Code - warrior compiler which does not allow declarations of following kind - before defining the types. - extern struct _zend_arg_info first_arg_force_ref[2]; - -2004-10-16 Andi Gutmans - - * zend_compile.c: - - One more test (WS) - - * zend_compile.c: - - WS fix to test commit - -2004-10-16 Anantha Kesari H Y - - * zend_compile.c - zend_compile.c: - Fix for 30457 - -2004-10-14 Marcus Boerger - - * zend_builtin_functions.c: - - Allow to omit object/classname in get_parent_class() which makes it - compatible with the signature and behavior of get_class() - -2004-10-13 Andi Gutmans - - * zend_compile.c: - - Don't allow access modifiers in interfaces. Explicitly stating public - - should also be disallowed but we don't have a way to detect it today. - -2004-10-12 Marcus Boerger - - * zend_builtin_functions.c: - Bug #30381 Strange results with get_class_vars() - - * (PHP_5_0) - zend_builtin_functions.c: - MFH Fix visibility of get_class_vars() and get_class_methods() - - * zend_builtin_functions.c: - - Fix visibility in get_class_vars() and get_class_methods() - - * zend_builtin_functions.c: - - Fix set_exception_handler - -2004-10-10 Sebastian Bergmann - - * .cvsignore - tests/.cvsignore: - Add *.gcda and *.gcno (from gcc -fprofile-{use|generate}) to .cvsignore. - -2004-10-08 Marcus Boerger - - * zend_compile.c - zend_compile.h - zend_vm_handlers.h: - - Revert automatic pass arg_info - -2004-10-08 Andi Gutmans - - * zend_compile.c: - - Fix BC break with default in switch() having to be at the end. - -2004-10-08 Anantha Kesari H Y - - * acconfig.h - zend_config.nw.h: - explicitly including sys/select.h as NetWare LibC sys/types.h does not - include sys/select.h implicitly as other LibC - -2004-10-06 Marcus Boerger - - * zend_reflection_api.c: - - Fix Bug #30344 - -2004-10-05 Marcus Boerger - - * zend_compile.c - zend_compile.h - zend_vm_handlers.h: - - Add arginfo ZEND_ARG_SEND_AUTOMATIC which lets the compiler automatically - determine whether pass by ref is possible or pass by value is needed. - -2004-10-05 Dmitry Stogov - - * tests/unset_cv06.phpt - tests/unset_cv07.phpt - tests/unset_cv07.phpt: - Test files are fixed. - - * zend_execute.c - zend_vm_handlers.h - tests/unset_cv11.phpt: - Fixed unset() bug that was introduced with CV optimization patch - - * zend_execute_API.c - zend_vm_handlers.h - tests/unset.inc - tests/unset_cv01.phpt - tests/unset_cv02.phpt - tests/unset_cv03.phpt - tests/unset_cv04.phpt - tests/unset_cv05.phpt - tests/unset_cv06.phpt - tests/unset_cv07.phpt - tests/unset_cv08.phpt - tests/unset_cv09.phpt - tests/unset_cv10.phpt: - Added test cases for CV optimization patch - -2004-10-04 Andi Gutmans - - * zend_API.h - zend_execute_API.c: - - Rename delete_global_variable() to zend_delete_global_variable() - - * Zend.m4 - zend_API.h - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_language_parser.y - zend_opcode.c - zend_vm.h - zend_vm_handlers.h - zend_vm_spec.h: - - Commit the variable fetch optimization. - - Extensions which delete global variables need to use new special - function - - delete_global_variable() (I'm about to rename it) to remove them. - - Will post to internals@ or via commit messages if there's anything else. - -2004-10-04 Marcus Boerger - - * zend_builtin_functions.c: - - Bugfix #27798 - - * tests/bug27798.phpt: - - - Add new test - -2004-10-02 Marcus Boerger - - * (PHP_5_0) - tests/bug28444.phpt - tests/bug29368.phpt: - - Add new tests - - * tests/bug28444.phpt - tests/bug29368.phpt: - - - Add new test - -2004-10-01 Marcus Boerger - - * Makefile.frag: - - Add makefile fragment which simplifies working on the executer - -2004-09-30 Andi Gutmans - - * zend_operators.c: - - Small improvement to DVAL_TO_ZVAL macro - -2004-09-29 Marcus Boerger - - * zend_API.c: - - MFB (synch correctly not only for one problem) - - * zend_API.c: - - Refix the fix - -2004-09-29 Andi Gutmans - - * bench.php - tests/bench.php: - - Move bench.php to Zend/ - -2004-09-28 Marcus Boerger - - * zend_API.c - zend_API.h - zend_object_handlers.c - zend_objects.c: - Simplify/Optmize magic method calls (__get/__set/__call/__clone/__destruct) - -2004-09-28 Andi Gutmans - - * zend_execute_API.c: - - Return the warning until we check if we can change the type of str.len - -2004-09-28 Marcus Boerger - - * zend_reflection_api.c - zend_reflection_api.h: - - publish reflection_class_factory() as zend_reflection_class_factory() - -2004-09-27 Marcus Boerger - - * (PHP_5_0) - zend_reflection_api.c: - MFH fix several property handling issues - - * zend_reflection_api.c: - - Make internally used properties read-only and fix default properties - - * zend_exceptions.c: - - Fix memeleak - - * zend_reflection_api.c: - - Declare properties - -2004-09-27 Andi Gutmans - - * README.ZEND_VM: - - Document zend_vm_use_old_executor() for Derick. - -2004-09-27 Marcus Boerger - - * zend_reflection_api.c: - Fix Reflection_Class to ReflectionClass in docu/messages - - * zend_execute_API.c: - - Fix warning - - * zend_compile.c - zend_stream.c: - - Fix warning - - * zend_builtin_functions.c - zend_reflection_api.c: - - Fix warnings - - * zend_interfaces.c: - Fix warnign - -2004-09-27 Andi Gutmans - - * zend_variables.c - zend_variables.h: - - Use zval_ctor_func() for wrapper and update the prototype to void - - * zend_variables.c - zend_variables.h: - - Make zval_copy_ctor() return void like dtor(). No one ever checks the - - return value which is SUCCESS always. - -2004-09-26 Marcus Boerger - - * zend.h - zend_variables.h: - - Fix build - -2004-09-26 Andi Gutmans - - * zend.h - zend_variables.c - zend_variables.h: - - Apply Thies and Sterling's patch which doesn't call ctor/dtor functions - - for types which don't require it (BOOL/NULL/LONG/DOUBLE) - - Breaks serialization!!! - -2004-09-24 Anantha Kesari H Y - - * zend_API.c: - selectively avoiding module cleanup code for apache 1 build and removing a - duplicate code - -2004-09-24 Dmitry Stogov - - * zend_vm_spec.h: - Fixed specializer bug. - -2004-09-23 Andi Gutmans - - * (PHP_5_0) - zend.h: - - PHP 5.0.3-dev - - * zend_compile.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_opcode.c - zend_vm.h: - - Commit new VM architecture. This one allows people (aka Derick) to - - ask the engine to use function handler mode. Will update the README - - about that. - - * (PHP_5_0) - zend.h: - - Roll 5.0.2 - -2004-09-23 Ilia Alshanetsky - - * tests/bug20240.phpt: - Fixed test. - -2004-09-23 Marcus Boerger - - * zend_reflection_api.c: - Bugfix # 30209 - -2004-09-23 Andi Gutmans - - * tests/bench.php: - - Commit synthetic benchmark - -2004-09-23 Anantha Kesari H Y - - * zend_execute.c - zend_execute_API.c - zend_globals.h: - Reverted the NetWare Specific Stack limit related patches as asked by Andi - -2004-09-22 Anantha Kesari H Y - - * zend_execute_API.c - zend_globals.h: - NetWare specific stack limit checks - - * zend_API.c: - Aligned the ifdef NETWARE blocks to first column. - - * zend_execute.c: - Stack limit will be checked while executing the script - - * zend_config.nw.h: - To avoid redefinition (of free, alloca etc.) compilation errors in Zend. - - * zend_API.c: - When Apache is unloaded, it calls dlclose on all the PHP extensions - that are loaded in memory. In the case of Apache 1.3, this call is - blocking indefinitely. As a work around, this call is bypassed for Apache - 1.3 build on NetWare only. This means that none of the loaded PHP - extensions are unloaded. They will have to be manually unloaded before - re-loading the Apache 1.3 again. - - * zend.h: - defined ZEND_PATHS_SEPERATOR to semicolon for NetWare - - * acconfig.h: - enabled macros to call the proper LibC functions - -2004-09-22 Dmitry Stogov - - * zend_vm_handlers.h - zend_vm_spec.h: - Specializer was updated with executor's fixes. - - * zend_execute.c - zend_execute.c: - Fixed bug #29566 (foreach/string handling strangeness (crash)). - - * zend_execute.c: - Fixed bug in fix for bug #29707 - -2004-09-21 Andi Gutmans - - * zend_execute.c - zend_execute.h: - - Fix for bug #29707 - -2004-09-19 Marcus Boerger - - * zend_reflection_api.c: - Bugfix #30146 (ReflectionProperty->getValue() requires instance for static - property) - - * zend_reflection_api.c: - Bugfix #30148 (ReflectionMethod->isConstructor() fails for inherited - classes) - -2004-09-17 Stanislav Malyshev - - * zend_execute_API.c - zend_objects_API.c - zend_objects_API.h: - fix crash when dtor is fialing on shutdown - -2004-09-16 Andi Gutmans - - * (PHP_5_0) - zend.h: - - Go with PHP 5.0.2RC1 - - * tests/bug27669.phpt: - - Add test for bug #27669 - -2004-09-16 Sebastian Bergmann - - * zend_language_parser.y: - ZTS fix. - -2004-09-16 Andi Gutmans - - * zend_compile.c - zend_compile.h - zend_language_parser.y: - - Fix bug #27669 (Dmitry). - Fixes: - - -2004-09-15 Ilia Alshanetsky - - * zend_operators.h: - MFH: Fixed a bug causing ".123" * "90" and alike to return a 0. - - * (PHP_5_0) - zend_operators.h: - Fixed a bug causing ".123" * "90" and alike to return a 0. - -2004-09-15 Derick Rethans - - * zend_config.w32.h: - - Windows support strcoll too. - -2004-09-13 Stanislav Malyshev - - * zend_execute.c: - Antony Dovgal's error message improvement - #27290 - -2004-09-11 Derick Rethans - - * zend_operators.c - zend_operators.h: - - MFB: Added the sorting flag SORT_LOCALE_STRING to the sort() functions - which - makes them sort based on the current locale. (Derick) - - * (PHP_5_0) - zend_operators.c - zend_operators.h: - - Added the sorting flag SORT_LOCALE_STRING to the sort() functions which - makes - them sort based on the current locale. (Derick) - -2004-09-11 Andi Gutmans - - * zend_operators.c: - - Resolve undefined behavior (joe at redhat) - -2004-09-10 Andi Gutmans - - * zend_compile.c: - - This one fixes rather strange problem - ZE allows multiple declarations - of the same class constant. - - It could be a minor BC break, but I'm sure it's a bug. (Antony Dovgal - aka tony2001) - -2004-09-09 Andi Gutmans - - * zend_extensions.h: - - Revert API bump - - * README.ZEND_VM: - - Commit VM explanation. - - * zend.c: - - Recommit - - * zend_API.c - zend_API.h - zend_compile.c: - - Recommit: - - Check signature of magic methods - - Register __get/__set/__call for internal classes - - * zend_extensions.h: - - Recommit: - - Bump the API number to work around this major breakage. - - * ChangeLog - zend.c - zend_API.c - zend_API.h - zend_builtin_functions.c - zend_compile.c - zend_compile.h - zend_exceptions.c - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_extensions.h - zend_opcode.c: - - Roll back VM commit - -2004-09-09 Marcus Boerger - - * zend.c: - - Drop namespace relict - - * (PHP_5_0) - zend_API.c - zend_API.h - zend_compile.c: - MFH signature check/method registration - - * zend_API.c - zend_API.h - zend_compile.c: - - Check signature of magic methods - - Register __get/__set/__call for internal classes - -2004-09-09 Derick Rethans - - * zend_extensions.h: - - Bump the API number to work around this major breakage. - -2004-09-09 Dmitry Stogov - - * zend_vm.h: - We will use CALL dispatch method for compilers other then GCC. It is more - safe. - -2004-09-09 Andi Gutmans - - * zend_API.c: - - Fix the fix. - -2004-09-06 Marcus Boerger - - * zend_objects.c: - - Fix handling of exceptions in dtors - -2004-09-05 Zeev Suraski - - * zend.c - zend.h - zend_ini_parser.y: - Fix reverse dependency - -2004-09-04 Andi Gutmans - - * zend_API.c: - - Don't destroy object when calling overloaded cast method in - - zend_parse_parameters() - -2004-09-02 Sebastian Bergmann - - * zend_compile.c: - Fugbix typo. - -2004-08-30 Marcus Boerger - - * (PHP_5_0) - ZEND_CHANGES: - MFH: Add some information about array overloading - - * ZEND_CHANGES: - Add some information about array overloading - -2004-08-30 Stanislav Malyshev - - * zend_execute.c: - fix crash #29893 - -2004-08-29 Marcus Boerger - - * zend_execute.c: - String offset starts with 0, fix isset($str[$len]) - - * (PHP_5_0) - zend_compile.c: - MFH: Bugfix #29882 isset crashes on arrays - - * zend_compile.c: - Bugfix #29882 isset crashes on arrays - -2004-08-27 Andi Gutmans - - * zend_alloc.c: - - Fix leak report for 0 byte allocations (Dmitry) - -2004-08-26 Marcus Boerger - - * (PHP_5_0) - zend_compile.c: - MFH: Enforce semantics: Classes cannot extend Interfaces - - * zend_compile.c: - Enforce semantics: Classes cannot extend Interfaces - - * tests/bug29828.phpt: - Fix test: Classes cannot extend Interfaces - - * zend_compile.c: - Drop doubled check - - * zend_compile.c: - - Bugfix #29828 Interfaces no longer work - - * tests/bug29828.phpt: - - Add new test - -2004-08-25 Andi Gutmans - - * zend_builtin_functions.c: - - Add interface_exists() and differentiate between classes and interfaces - (Andrey Hristov) - -2004-08-24 Marcus Boerger - - * zend_API.c: - - Add missing brackets - -2004-08-23 Marcus Boerger - - * zend_compile.c: - - Drop unused variable - - * zend_execute_API.c - zend_globals.h: - - Boost up __autoload() calls by caching the lookup - -2004-08-23 Andi Gutmans - - * zend_compile.c: - - Improve performance of switch() - -2004-08-23 Zeev Suraski - - * (PHP_5_0) - zend_reflection_api.c: - Fix names - -2004-08-21 Sara Golemon - - * zend_compile.c: - Bugfix#29777 Some compilers don't like // style comments - -2004-08-20 Sara Golemon - - * zend_ini_parser.y: - Fix compile - -2004-08-19 Andi Gutmans - - * zend_execute.c: - - Cleanup - - * zend.c - zend_execute_API.c - zend_globals.h: - - Second wave of garbage removal. - - * zend_compile.h - zend_execute.c: - - Stop using garbage. Please let me know if you find any bugs resulting - - of this patch (very likely). (Dmitry, Andi) - -2004-08-19 Marcus Boerger - - * zend_reflection_api.c: - - Implement #29728: Reflection API Feature: Default parameter value. - . ReflectionParameter::isDefaultValueAvailable() - . ReflectionParameter::getDefaultValue() - - * zend_reflection_api.c: - - Nedd to work on copy - -2004-08-18 Marcus Boerger - - * zend_reflection_api.c: - - Show default value of optional parameters of user defined functions. - -2004-08-18 Andrei Zmievski - - * zend_ini_parser.y: - Forgot to turn off debugging. - - * zend_ini_parser.y - zend_ini_scanner.l: - Re-add my patch for .ini variable access. - -2004-08-16 Marcus Boerger - - * (PHP_5_0) - zend_reflection_api.c: - MFH: Fix bug #29447: Reflection API issues - - * zend_reflection_api.c: - - Fix bug #29447: Reflection API issues - -2004-08-15 Marcus Boerger - - * zend_compile.c: - Remove unnecessary check - -2004-08-14 Marcus Boerger - - * zend_compile.c: - Add missing check - -2004-08-12 Andi Gutmans - - * (PHP_5_0) - zend.h: - - Back to 5.0.2-dev - - * (PHP_5_0) - zend.h: - - Roll 5.0.1 - - * (PHP_5_0) - zend.h: - - Back to -dev - - * (PHP_5_0) - zend.h: - - 5.0.1RC2 - - * zend_compile.c - zend_compile.h - zend_execute.c: - - Don't use magic numbers - - * zend_compile.c - zend_execute.c: - - Significantly improve performance of foreach($arr as $data). (Marcus) - -2004-08-11 Ilia Alshanetsky - - * zend_highlight.c: - MFH: Fixed bug #29607 (highlighting code with HEREDOC produces invalid - output). - - * (PHP_5_0) - zend_highlight.c: - Fixed bug #29607 (highlighting code with HEREDOC produces invalid output). - -2004-08-11 Marcus Boerger - - * zend_execute.c: - More meaningfull error message - -2004-08-11 Derick Rethans - - * (PHP_5_0) - zend_alloc.h: - - MFH: Patch to allow the Zend memory allocators to be disabled. - - * zend_alloc.h: - - Added missing defines. - -2004-08-10 Ilia Alshanetsky - - * (PHP_5_0) - zend_highlight.c: - MFH: Fixed bug #29606 (php_strip_whitespace() prints to stdout rather then - returning the value). - - * zend_highlight.c: - Fixed bug #29606 (php_strip_whitespace() prints to stdout rather then - returning the value). - -2004-08-10 Andi Gutmans - - * (PHP_5_0) - zend.h: - - Back to -dev - - * (PHP_5_0) - zend.h: - - 5.0.1RC1 - -2004-08-10 Marcus Boerger - - * zend_execute.c: - - Fix warnings - -2004-08-07 Andi Gutmans - - * zend_alloc.h: - - Commit Derick's patch for allowing Zend to use regular libc memory - - allocation functions. Mainly useful in conjunction with tools such as - - valgrind which enables us to find bugs we might not find with the - - current memory managers boundary protection. - -2004-08-05 Ilia Alshanetsky - - * zend_builtin_functions.c: - Eliminate unneeded variable. - -2004-08-04 Marcus Boerger - - * zend_reflection_api.c - tests/bug29523.phpt: - - Fix bug #29523 (ReflectionParameter::isOptional() is incorrect) - -2004-08-03 Marcus Boerger - - * ZEND_CHANGES: - Update - - * (PHP_5_0) - zend_builtin_functions.c - tests/bug29505.phpt: - - MFH Bug #29505 get_class_vars() severely broken when used with arrays - - * tests/bug29505.phpt: - - Add new test - - * zend_builtin_functions.c: - - Fixed Bug #29505 get_class_vars() severely broken when used with arrays - -2004-08-02 Marcus Boerger - - * zend_reflection_api.c: - - Add methods to check parameter count - - * (PHP_5_0) - zend_compile.c: - MFH Change to use memcmp instead of strcmp - - * zend_compile.c: - - Change to use memcmp instead of strcmp - -2004-08-02 Andi Gutmans - - * zend_compile.c: - - Fix typo - -2004-08-02 Marcus Boerger - - * zend_language_parser.y - zend_language_scanner.l: - - Remove all for now - - * zend_compile.c - zend_compile.h - zend_execute_API.c: - MFB: Enforce protocol on magic methods/functions - -2004-08-02 Ilia Alshanetsky - - * (PHP_5_0) - zend_execute.c: - MFH: A gentler (performance wise) allocation of buffer for temp variables. - - * zend_execute.c: - A gentler (performance wise) allocation of buffer for temp variables. - -2004-08-01 Marcus Boerger - - * (PHP_5_0) - zend_compile.c - zend_compile.h - zend_execute_API.c: - - Enforce protocol on magic methods/functions - -2004-07-30 Andi Gutmans - - * zend_execute.c - zend_execute_API.c - zend_ptr_stack.c - zend_ptr_stack.h: - - More ptr_stack optimizations and cleanups - - * zend_alloc.c - zend_alloc.h - zend_execute.c - zend_fast_cache.h - zend_ptr_stack.h: - - Improve performance by inlining zend_ptr_stack_n_push(). var_args can - usually not be inlined by compilers. - -2004-07-29 Marcus Boerger - - * zend_hash.c: - - Increase performance of *sort() and some internal sort operations. - -2004-07-29 Sara Golemon - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_language_parser.y - zend_language_scanner.l - zend_opcode.c: - Revert goto opcode - - * zend_execute.c: - &tmp and label are the same thing, don't free it till we're done with it. - - * zend_compile.c - zend_execute.c: - Plug some memory leaks and promote unknown label to E_ERROR. - If someone tries to jump to a non-existant label execution really - shouldn't try to carry on. - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_language_parser.y - zend_language_scanner.l - zend_opcode.c: - Add goto operator by popular request. - -2004-07-28 Wez Furlong - - * zend_ini.c: - Fix: ini entries for dl()'d modules now work under ZTS - Side-effect: avoid possible crashes when multiple threads load/unload - modules and mess with the global hash table. - -2004-07-28 Andi Gutmans - - * zend.h - zend.h: - - Fix MAC OSX to always use native DSO loading - -2004-07-27 Marcus Boerger - - * zend_exceptions.c: - - Be specific about visibility - -2004-07-27 Wez Furlong - - * zend_builtin_functions.c: - Fix two possible crashes. Latter is unlikely unless you are doing scary - things, but former looks nasty. - -2004-07-26 Stanislav Malyshev - - * zend_interfaces.c: - quick fix for #29382 - -2004-07-25 Marcus Boerger - - * zend_reflection_api.c: - - Show visibility errors (try to fix #29354) - - * (PHP_5_0) - zend_execute.c - zend_objects_API.c - zend_objects_API.h: - - MFH: Fix bug #29368 : The destructor is called when an exception is - thrown from the constructor - - * zend_execute.c - zend_objects_API.c - zend_objects_API.h: - - Fix bug #29368 : The destructor is called when an exception is thrown - from the constructor - - * zend.c - zend.h - zend_execute.h - zend_execute_API.c: - - Execute destructors earlier (Florian Schaper, fschaper at intux org) - - * zend_reflection_api.c: - - Add ReflectionParameter::isOptional() to test whether a parameter is - optional and also show this information in export. - - * zend_exceptions.c: - - Add optional parameters $filename and $lineno to ErrorException - constructor to allow overwriting automatically retrieved information. - -2004-07-23 Marcus Boerger - - * zend_execute.c: - Fix 0 Byte leak after alloca to emalloc change - -2004-07-22 Zeev Suraski - - * zend_object_handlers.c: - Fix bug in handling of protected properties - -2004-07-21 Edin Kadribasic - - * zend_builtin_functions.c: - Fixed build - -2004-07-21 Marcus Boerger - - * (PHP_5_0) - zend_builtin_functions.c: - MFH: Fixded #29291: get_class_vars() return names with NULLs - - * zend_builtin_functions.c: - - Fixded #29291: get_class_vars() return names with NULLs - -2004-07-20 Moriyoshi Koizumi - - * zend_alloc.c - zend_alloc.h: - - Add safe_pemalloc() - -2004-07-20 Marcus Boerger - - * zend_reflection_api.c: - - Fixed bug 28895 again (long live the dead) - -2004-07-20 Zeev Suraski - - * zend_exceptions.c: - Fix prototypes - - * zend_exceptions.c: - Add descriptions - -2004-07-20 Stanislav Malyshev - - * zend_compile.c: - add todo - - * (PHP_5_0) - zend_ini.h - zend_ini_parser.y: - export ini parser - -2004-07-19 Sebastian Bergmann - - * zend_reflection_api.c: - Fix prototypes: Reflection_* -> Reflection*. - - * zend_reflection_api.c: - Make ReflectionClass::getMethod() and ReflectionClass::getProperty() raise - an ReflectionException instead of returning NULL on failure. - - * zend_reflection_api.c: - Do not use contracted forms. - -2004-07-19 Stanislav Malyshev - - * zend_ini.h - zend_ini_parser.y: - export INI parser - - * zend_object_handlers.c: - __set and __get will be called not only when variable doesn't exist but - also when it's - invisible - -2004-07-19 Andi Gutmans - - * zend_extensions.h - zend_modules.h: - - Bump API number due to empty_string change - - * zend.c - zend.h - zend_API.h - zend_alloc.h - zend_execute.c - zend_object_handlers.c - zend_operators.c - zend_variables.c: - - Nuke empty_string. It is a reminanent from the time where RETURN_FALSE() - used to return "" and not bool(false). It's not worth keeping it because - STR_FREE() and zval_dtor() always have to check for it and it slows down - the general case. In addition, it seems that empty_string has been - abused - quite a lot, and was used not only for setting zval's but generally in - PHP code instead of "", which wasn't the intention. Last but not least, - nuking empty_string should improve stability as I doubt every place - correctly checked if they are not mistakenly erealloc()'ing it or - calling efree() on it. - NOTE: Some code is probably broken. Each extension maintainer should - check and see that my changes are OK. Also, I haven't had time to touch - PECL yet. Will try and do it tomorrow. - -2004-07-18 Wez Furlong - - * zend_execute_API.c: - No point allocating 0 bytes - -2004-07-16 Marcus Boerger - - * zend_language_parser.y - zend_language_scanner.l: - - Speed up by making null/false/true reserved word which allows to drop - an opcode (FETCH_CONSTANT) for every usage. - - * zend_execute.c: - Bugfix #28464 catch() does not catch exceptions by interfaces - -2004-07-16 Ilia Alshanetsky - - * zend_operators.h: - MFB: Fixed bug #28800 (strings beginning with "inf" improperly converted). - - * (PHP_5_0) - zend_operators.h: - Fixed bug #28800 (strings beginning with "inf" improperly converted). - -2004-07-15 Andi Gutmans - - * zend_alloc.c - zend_alloc.h: - - Improve performance of zend_alloc by stopping the size from being a bit - - field. - -2004-07-15 Marcus Boerger - - * zend_exceptions.c - zend_exceptions.h: - - Add new class ErrorException to encapsulate errors in exceptions - - * zend_dynamic_array.h: - - Fix prototype - -2004-07-14 Stanislav Malyshev - - * zend_object_handlers.c: - be consistent with write_dimension - - * zend_object_handlers.c: - fix #28957 - -2004-07-13 Andi Gutmans - - * zend.h: - - 5.0.1-dev - -2004-07-13 Marcus Boerger - - * zend_constants.c: - Bugfix #29116 Zend constant warning uses memory after free (jdolecek at - NetBSD dot org) - -2004-07-13 Andi Gutmans - - * (php_5_0_0) - zend.h: - - Roll PHP 5.0.0 - -2004-07-12 Ilia Alshanetsky - - * (php_5_0_0RC4) - zend_execute.c: - Fixed bug #29086 & #28064 (PHP crashes on extremly long scripts). - -2004-07-12 Andi Gutmans - - * (php_5_0_0RC4) - zend.c: - - Convert zend_class_entry -> zend_class_entry * - -2004-07-10 Jon Parise - - * zend.c: - DragonFly BSD is derived from FreeBSD and requires the same floating point - precision fix. - -2004-07-10 Andi Gutmans - - * zend_alloc.c - zend_hash.c - zend_variables.c: - - Better stability during premature shutdown of request startup - -2004-07-05 Andi Gutmans - - * zend_mm.h: - - Disable zend_mm for 5.0.0 - -2004-07-03 Andi Gutmans - - * zend_alloc.c: - - Should fix mem leak with ZEND_MM. I made this change a while ago and - - rolled it back but I don't remember why. Please test! - -2004-07-01 Ilia Alshanetsky - - * zend_constants.c: - Do not use alloca() where it can be easily abused by the users. - - -2004-06-25 Wez Furlong - - * zend_stream.c - zend_stream.h: - export zend stream functions for zend extensions under windows - -2004-06-24 Sara Golemon - - * zend_execute.c: - Ease off on severity of new error (Using Resources as array offsets) - -2004-06-23 Sara Golemon - - * zend_execute.c: - BugFix #28879 Inconsistent behavior between explicit and implicit array - creation. - - Changes: - - Throw E_WARNING "Illegal offset type" when explicitly creating - array elements with objects, arrays, or resorces as indexes. - This matches implicit creation w/ obj/arr indices. - - Throw E_WARNING "Resource ID#%ld used as offset, casting to integer (%ld)" - when implicitly creating array with resource as index. (BC) - -2004-06-19 Sebastian Bergmann - - * zend_reflection_api.c: - Reflection_* -> Reflection*. Patch by Timm Friebe. - -2004-06-18 Sara Golemon - - * zend_execute.c: - Another typo in converting array index doubles to long. - -2004-06-18 George Schlossnagle - - * zend_builtin_functions.c: - fix for 28213. - - class_name and call_type should be reinitialized on every loop iter. - -2004-06-17 Sara Golemon - - * zend_builtin_functions.c: - String length in parse_parameters should be int - -2004-06-15 Marcus Boerger - - * zend_reflection_api.c: - - -2004-06-14 Marcus Boerger - - * zend_language_scanner.l: - Need {} here - -2004-06-10 Marcus Boerger - - * zend_language_scanner.l: - - Require a single white-space char after /** to start a doc comment that - way we prevent /*** from becoming a doc comment (as requested Derick). - - * zend_API.h: - Add missing declaration - - * zend_reflection_api.c: - Small code layout change - - * zend_language_scanner.l: - Do not require NEWLINE at start of doccomment - - * zend_reflection_api.c: - Bugfix #28699: Reflection api bugs - -2004-06-09 Marcus Boerger - - * zend_reflection_api.c: - Fix Bug #28694 ReflectionExtension::getFunctions() crashes PHP - -2004-06-07 Andi Gutmans - - * zend.h: - - Go back to -dev (Shouldn't need another RC) - - * (php_5_0_0RC3) - zend.h: - - Roll RC3 - -2004-06-06 Stefan Esser - - * zend_compile.h - zend_opcode.c: - Fixed Zend Function Destructor to use correct TSRM handle. - -2004-06-05 Marcus Boerger - - * zend_API.c: - Fix #28641: Instance of Interface - -2004-06-03 Andi Gutmans - - * (php_5_0_0RC3RC2) - zend.h: - - Prepare for RC3RC2 - -2004-06-02 Andi Gutmans - - * zend_mm.h: - - Don't use ZEND_MM in Windows - -2004-06-02 Stanislav Malyshev - - * zend_execute.c: - fix incdec - make value's refcount non-zero when passing to - write_property - otherwise __set caller cleanup could kill it. - -2004-06-01 Andi Gutmans - - * zend.c: - - If user error handler returns "false" then we relay to the built in error - handler - -2004-05-31 Marcus Boerger - - * zend_reflection_api.c: - Refcount must not be set separatley again. - - * zend_reflection_api.c - zend_reflection_api.c: - Add missing initialization - - * zend_compile.c: - - -2004-05-28 Andrei Zmievski - - * zend.c: - Allow user-defined error handlers to indicate whether default error - handler should be re-invoked, by returning true or false. - -2004-05-28 Marcus Boerger - - * zend_execute.c: - Prevent possible problems with illegal properties - -2004-05-28 Derick Rethans - - * zend_builtin_functions.c: - - Make the default mask for user defined error handlers include ALL errors, - including E_STRICT. - -2004-05-27 Andi Gutmans - - * zend.h: - - Back to RC3-dev until we roll final - - * (php_5_0_0RC3RC1) - zend_execute.c: - - Fix problem with exceptions returning from include(). (Dmitry) - - * (php_5_0_0RC3RC1) - zend.h: - - RC3RC1 - -2004-05-26 Wez Furlong - - * zend_object_handlers.c: - Fix leak on systems where alloca isn't really alloca. - -2004-05-26 Andrei Zmievski - - * zend_constants.c: - Avoid unnecessary and silly copying of constant name when registering. - -2004-05-26 Andi Gutmans - - * zend_alloc.c: - - Fix memory manager problem - -2004-05-26 Sebastian Bergmann - - * ZEND_CHANGES: - Update Reflection API class names. Whitespace fixes. - -2004-05-25 Andi Gutmans - - * zend_objects_API.h: - - Nuke unused decleration - - * zend_alloc.c - zend_alloc.h: - - More fixes - - * zend_alloc.c - zend_alloc.h: - - Make fix compile. - - * zend_alloc.c - zend_alloc.h: - - Fix memory leak in mem cache in conjunction with Zend MM. How come no one - - noticed this? :) - -2004-05-23 Andi Gutmans - - * zend_objects_API.c: - - Fix problem with object being destroyed more than once - - * zend_builtin_functions.c: - - Fix the following script (it crashed): - - -2004-05-20 Wez Furlong - - * zend_exceptions.c - zend_exceptions.h: - Revert; obviously I missed the function at the bottom of the file... - - * zend_exceptions.c - zend_exceptions.h: - Export this, so extensions may throw their own exception objects that - they have already instantiated. - -2004-05-18 Marcus Boerger - - * zend_API.c: - - Need to operate on module pointer in hash table - -2004-05-18 Wez Furlong - - * zend_execute_API.c: - Fix bug #28438: win32 build fails in non-zts mode - -2004-05-18 Stanislav Malyshev - - * zend_API.c: - Z_TYPE_P is for zvals - -2004-05-18 Wez Furlong - - * zend_API.c: - Register according to the type specified by the module. - (Helps to fix dl() bug) - -2004-05-18 Sara Golemon - - * zend_execute.c: - Bugfix#28404 When type is double we need to access dval, not lval - -2004-05-17 Andrei Zmievski - - * zend_ini_parser.y - zend_ini_scanner.l: - Revert the .ini vars patch. Will have to try again next Christmas - apparently. - - * zend_ini_parser.y: - Fix the apparent bug (; at the end of parse rule block). - -2004-05-17 Wez Furlong - - * zend_objects_API.c - zend_objects_API.h: - As discussed with Andi, add this helper API for setting the object pointer - from - within the constructor. - - Please read the comment for notes about how to use it; in general, you - don't - need it, so don't use it. - -2004-05-14 Andrei Zmievski - - * zend_ini_parser.y - zend_ini_scanner.l: - Adding ability to refer to existing .ini variables from within .ini - files. Example: - - open_basedir = ${open_basedir} ":/new/dir" - -2004-05-12 Marcus Boerger - - * zend_API.c: - - Centralize register and hash operations for startup/register_module - in new zend_register_module_ex(). - - * zend_API.c: - - Revert to 1.249 - -2004-05-11 Andi Gutmans - - * zend_compile.c: - - Don't allow passing NULL to type hinted parameter. - -2004-05-10 Zeev Suraski - - * zend_operators.c: - - Fix comparison of objects - - Clarify convert_object_to_type() - -2004-05-10 Stefan Esser - - * zend_alloc.c: - Checking MEMORY_LIMIT before doing emalloc/erealloc solves several ugly - problems. - -2004-05-04 Wez Furlong - - * zend_iterators.c - zend_object_handlers.c - zend_object_handlers.h - zend_objects_API.c: - Add count_elements handler for overloaded objects. - -2004-05-02 Andi Gutmans - - * zend_operators.c: - - Fix comparison of two objects in non-compatibility mode. - -2004-05-01 Marcus Boerger - - * zend_API.c: - Don't load modules twice - -2004-04-29 Stanislav Malyshev - - * zend_execute.c: - Fix bug #27876 - -2004-04-28 Marcus Boerger - - * zend_exceptions.h: - Fix c++ builds - -2004-04-27 Marcus Boerger - - * zend_builtin_functions.c: - - Optional parameter to class_exists() that can be used to bypass - __autoload() which can be helpfull in __autoload() itself. - - * zend_interfaces.c: - - Fix warnings - - * zend_interfaces.c - zend_interfaces.h - zend_iterators.h: - - no unneccessary retval initialization - - new c-level iterator handler invalidate_current that is optionally - used to clear internal caching like in implementation of Iterator - -2004-04-27 Andi Gutmans - - * zend_reflection_api.c: - - Fix prototypes - -2004-04-26 Marcus Boerger - - * zend_reflection_api.c: - Fix prototype - -2004-04-25 Marcus Boerger - - * zend_builtin_functions.c: - Skip correct amount of stack entries - - * zend_interfaces.c: - Capture potential problem by error message - - * zend_reflection_api.c: - Show number of classes - -2004-04-25 Andi Gutmans - - * zend.h: - - RC3-dev - - * (php_5_0_0RC2) - zend.h: - - RC2 - -2004-04-23 Andi Gutmans - - * zend_compile.c: - - Fixed bug #27923. foreach() without a key should not check if the key - - is a reference (Adam) - -2004-04-21 Andi Gutmans - - * zend.h: - - RC2-dev - - * (php_5_0_0RC2RC2) - zend.h: - - Prepare for RC2RC2 (if everything is OK especially Zeev's interface - - patch I'll roll RC2 tomorrow). - -2004-04-21 Zeev Suraski - - * (php_5_0_0RC2RC2) - zend_compile.c: - Restore fatal error in case a method that's supposed to implement an - interface/abstract method, breaks its prototype - -2004-04-20 Andi Gutmans - - * zend_language_parser.y: - - Fix bug #27283 - Exceptions where the last catch() statement was - sometimes - - skipped. - -2004-04-19 Marcus Boerger - - * zend_reflection_api.c: - show ini entries and classes for extensions. - -2004-04-17 Marcus Boerger - - * zend.c: - Retval may not be set when zend_execute() is overloaded - -2004-04-15 Marcus Boerger - - * zend_execute.c: - Handle failure in get_current_data - -2004-04-14 Andi Gutmans - - * zend_extensions.h: - - Add comment - - * zend.h: - - RC2-dev - - * (php_5_0_0RC2RC1) - zend.h: - - RC2RC1 - -2004-04-13 Marcus Boerger - - * zend_exceptions.c: - Classnames shall start with an uppercase character - -2004-04-13 Zeev Suraski - - * zend_builtin_functions.c: - Fix debug_backtrace to show arguments again - We need to merge code from debug_backtrace & debug_print_backtrace at - some point! - -2004-04-13 Andi Gutmans - - * zend_extensions.h: - - Fix API no of Engine 2. The first number is the engine version and the - - rest is the API_NO. This way engine2_api_no is always greater than - - engine1_api_no. - - * zend.c - zend_exceptions.c - zend_exceptions.h: - - Add hook for exception handler (Derick) - -2004-04-12 Marcus Boerger - - * zend_API.h: - Fix order of macro parameter (synch with other macros) - -2004-04-12 Andi Gutmans - - * OBJECTS2_HOWTO - zend_extensions.h - zend_ini.c - zend_ini.h - zend_modules.h: - - modifyable -> modifiable - -2004-04-09 Andi Gutmans - - * zend_object_handlers.c: - - Fix bug #26441 (When __set() returned a value it corrupted it) - -2004-04-08 Marcus Boerger - - * zend_reflection_api.c: - Bugfix #27519 Reflection_Function constructor crashes with non-existant - function's name - -2004-04-07 Andi Gutmans - - * zend_builtin_functions.c: - - Hopefully fix the debug_backtrace() code. - - * zend_builtin_functions.c: - - Fix crash bug in zend_debug_backtrace(). No idea how come this survived - - for so long.... - -2004-04-04 Ilia Alshanetsky - - * zend_objects_API.c: - Removed unused variable. - -2004-04-03 Andi Gutmans - - * zend_builtin_functions.c: - Patch by Timm Friebe: - It changes - set_exception_handler() to accept the pseudo-type "callable" (instead of - a string referring to a global function). - - - Examples: - set_exception_handler('function_name'); - set_exception_handler(array('class_name', 'static_method')); - set_exception_handler(array($instance, 'instance_method')); - - - This also makes set_exception_handler() more consistent with all the - other callback functionality, e.g. set_error_handler(). - - * zend_operators.c: - - Nuke more old junk - - * zend.h - zend_operators.c - zend_operators.h: - - Nuke code which hasn't been in use for ages. - -2004-04-01 Ilia Alshanetsky - - * zend_builtin_functions.c: - MFB: Revert patch for bug #27782. - - * zend_execute.c - tests/bug27731.phpt: - Fixed reversed condition for error reporting. - -2004-03-31 Dmitry Stogov - - * zend_execute.c: - Fixed BUG in zend_post_incdec_property - -2004-03-31 Andi Gutmans - - * zend_reflection_api.c: - - Fix typo - -2004-03-30 Marcus Boerger - - * tests/bug26695.phpt: - Fix test - -2004-03-30 Ilia Alshanetsky - - * zend_builtin_functions.c: - Fixed bug #27782 (Wrong behaviour of next(), prev() and each()). - -2004-03-30 Marcus Boerger - - * zend_reflection_api.c: - TSRM fix - - * zend.c - zend.h - zend_API.c - zend_API.h - zend_globals.h - zend_reflection_api.c: - - Fix Reflection class names - - Add ability to get the extension an internal class was defined in - -2004-03-29 Marcus Boerger - - * acconfig.h: - NAN==NAN doest work (Ard) - - * zend_builtin_functions.c: - Allow mixed case search for extensions - -2004-03-29 Sebastian Bergmann - - * zend_execute.c: - -clonning+cloning - -2004-03-29 Dmitry Stogov - - * zend_execute.c: - Implicit clonning strict warning was added for ze1_compatibility_mode - -2004-03-29 Ilia Alshanetsky - - * zend_execute.c - tests/bug27731.phpt: - Fixed bug #27731 (error_reporting() inside @ block fails to set - error_reporting level). - -2004-03-28 Marcus Boerger - - * zend_API.c: - Use lowercasing here - - * zend.c: - Initialize the complete struct - -2004-03-28 Stanislav Malyshev - - * zend_language_parser.y: - check writability on =& too - - * zend_execute.c: - - call set handler if assigning to object having this handler - - cleanup: use macros to access object internal vars - - * zend_interfaces.c: - preserve ZEND_API in definition - - * zend_interfaces.h: - declare as extern - -2004-03-28 Marcus Boerger - - * zend_reflection_api.c: - Fix memleak found by Timm - -2004-03-28 Stanislav Malyshev - - * zend_operators.c: - centralize object-to-scalar conversion, make it work with get handler - - * zend.c: - try get handler on printable conversion - - * zend_object_handlers.h: - some more clear comments - - * zend_operators.c: - Use macros for object parts access - -2004-03-28 Dmitry Stogov - - * zend_execute_API.c: - fix of fix related to __autoload. (ext/standard/tests/network/bug20134.phpt - passes again) - -2004-03-27 Marcus Boerger - - * zend.c: - Even though it is uncommented it should be right - -2004-03-26 Marcus Boerger - - * zend_API.c - zend_compile.c: - Force destructors to have empty signatures - -2004-03-26 Andi Gutmans - - * zend_execute.c: - - Fix build (thanks to Timm) - -2004-03-25 Derick Rethans - - * zend_language_scanner.l: - - Remove old and deprecated scanner token. - -2004-03-25 Andi Gutmans - - * zend_compile.c: - - If __construct() is defined then it will always take precedence over - - old style constructors. - -2004-03-25 Stanislav Malyshev - - * zend_execute.c: - no need to use result for RECV's - as in PHP4 - - * zend_execute.c: - Use get/set handlers for increment.decrement ops on objects - -2004-03-25 Andi Gutmans - - * zend_execute_API.c: - /* The compiler is not-reentrant. Make sure we __autoload() only during - run-time - * (doesn't impact fuctionality of __autoload() - */ - -2004-03-25 Dmitry Stogov - - * zend_execute_API.c: - Using ALLOC_HASHTABLE/FREE_HASHTABLE instead of emalloc/free. - -2004-03-24 Dmitry Stogov - - * zend.c - zend_execute_API.c - zend_globals.h: - New autoload protection schema was implemented (Using HashTable instead of - boolean flag) - -2004-03-24 Derick Rethans - - * zend_operators.c: - - Revert bogus commit - - * zend_operators.c: - - Fixed NEWS - -2004-03-24 Dmitry Stogov - - * tests/bug27641.phpt: - Fixed bug #27641 (Object cloning in ze1_compatibility_mode was - reimplemented) - - * zend_execute.c - zend_variables.c: - Object cloning in ze1 compatibility mode (zend.ze1_compatibility_mode) was - reimplemented (Dmitry, Andi) - -2004-03-22 Andi Gutmans - - * zend_compile.c: - - Fix bug - - * zend_execute.c: - - Remove whitespace - -2004-03-21 Andi Gutmans - - * zend_execute.c: - - Improve consistency - -2004-03-21 Stanislav Malyshev - - * zend_objects_API.c - zend_objects_API.h: - return zval *, to make it useful for read_property - - * zend_objects_API.c: - update to new API - - * zend_execute.c - zend_object_handlers.c - zend_object_handlers.h: - API change for read_property: - instead of bool silent it now gets fetch type - This can be used for creating proxy objects for write contexts - -2004-03-21 Andi Gutmans - - * zend_execute.c: - - Nuke unused code - -2004-03-18 Andi Gutmans - - * zend.h: - - Back to RC2-dev - -2004-03-18 Zeev Suraski - - * (php_5_0_0RC1) - zend.h: - Prepare to roll RC1 - - * (php_5_0_0RC1) - zend_execute.c: - Fix possible data corruption with __set() - -2004-03-18 Stanislav Malyshev - - * zend_execute.c: - Improve error message - on E_STRICT, method is actually called, - so the error shouldn't say it cannot be called. - -2004-03-18 Andi Gutmans - - * (php_5_0_0RC1) - zend_compile.c: - - Change redefinition of constructor from E_COMPILE_ERROR to E_STRICT. - - * (php_5_0_0RC1) - ZEND_CHANGES: - - Update Changes - -2004-03-17 Sascha Schumann - - * zend_multiply.h: - Readd x86 implementation - -2004-03-17 Andi Gutmans - - * (php_5_0_0RC1RC2) - zend_multiply.h: - - Improved patch for support multiplication on 64bit machines - - * (php_5_0_0RC1RC2) - zend_execute.c: - - Fix tiny bug (one of the reasons we can't support __toString() for - - regular objects). - - * (php_5_0_0RC1RC2) - zend.c: - - Stop make_printable_zval() from calling __toString() - - * zend_execute.c: - - Fixed problem with __toString(). Due to the engine's architecture it is - - currently not possible to call __toString() anywhere besides print & - eval. - - Follow up will be on internals@ - -2004-03-17 Stanislav Malyshev - - * (php_5_0_0RC1RC2) - zend_compile.c: - fix typo - -2004-03-17 Andi Gutmans - - * zend_multiply.h - zend_operators.c: - - Apply Ard's patch to support multiplication & overflow on both 32bit - and 64bit machines - -2004-03-16 Derick Rethans - - * zend.c - zend.h - zend_API.h - zend_modules.h: - - Replaced the exec_finished hook by the zend_post_deactive hook for - extensions. The new hook will be run after the symbol table and - destructors - are run. (Derick) - - * zend_modules.h: - - Bump API number so that it actually differs from PHP 4. This is needed - because we don't want PHP 4 and PHP 5 extensions to be in the same - directory - when doing "make install" for shared, or phpize'd extensions. - -2004-03-16 Marcus Boerger - - * zend_execute_API.c: - Fix SEGV in certain conditions while calling static methods - -2004-03-16 Zeev Suraski - - * zend_compile.c - zend_compile.h: - Add ability to disable JIT for a particular auto global - -2004-03-16 Marcus Boerger - - * zend_execute_API.c: - TSRM fix - -2004-03-16 Sascha Schumann - - * zend.h: - Enable ptr format check for GCC 3.1 and higher - -2004-03-16 Ilia Alshanetsky - - * zend.h: - Do not allow 3.0.4 for __attribute__. - - * zend.h: - Fixed bug #27600 (GCC 3.0.4 does not like __attribute__ directive) - -2004-03-16 Andi Gutmans - - * zend_compile.c: - - Fix problem when using old-style constructors it wasn't being inherited - correctly. - -2004-03-16 Derick Rethans - - * zend_execute_API.c: - - Spaces to tabs - -2004-03-16 Andi Gutmans - - * zend_execute_API.c: - - If the called method is static then don't define $this - - * zend_execute.c - zend_execute_API.c: - - Error out if get_method() isn't defined. - - Use calling scope of internal function callee when calling a method - using static syntax (array("A", "func")); - -2004-03-16 Marcus Boerger - - * zend_execute.c - zend_execute.h - zend_execute_API.c: - Improve error message - -2004-03-15 Andi Gutmans - - * zend_operators.c: - - Restore E_NOTICE for longs and doubles. - -2004-03-15 Jani Taskinen - - * zend.h: - - Fixed bug #24582 (extensions can not be loaded dynamically in - Solaris/iPlanet) - -2004-03-15 Andi Gutmans - - * zend_operators.c: - - Nuke E_NOTICE. This caused a notice when doing if ($obj == NULL) - -2004-03-14 Marcus Boerger - - * zend_builtin_functions.c: - Make object parameter optional - -2004-03-14 Ilia Alshanetsky - - * zend.c: - Fixed bug #27590 (crash during shutdown when freeing persistent resources - in ZTS mode). - -2004-03-14 Andi Gutmans - - * zend_execute_API.c: - - Fix windows build - - * zend_execute_API.c: - - Fix for bug #27504 - - * zend_builtin_functions.c: - - Fixing bug #27123 - - * zend_operators.c: - - Improve compatibility mode and compare objects according to property - - comparison (sucky but this is how PHP 4 behaved). - - * zend.c: - - Fix flow of logic - - * zend_operators.c: - - Support old style of converting objects to long/double/bool. - - This is only enabled in compatibility mode, else it calls cast_object() - - and if that is not available we return 1 (true) so that the following - - code would work: - if ($obj) { - } - -2004-03-14 Marcus Boerger - - * zend_operators.c: - Fix: Add return type void - -2004-03-14 Andi Gutmans - - * zend.c - zend_object_handlers.c - zend_object_handlers.h - zend_operators.c: - - Support Cast operator in convert_to_* so that we support internal - - extensions such as SimpleXML. This is for Sterling. - - * zend_operators.c: - - Fix memory leak in the following code (Dmitry): - - - * zend_operators.c: - - Initial commit which allows comparing overloaded objects with native - - types (only for internal classes and not for user-land classes). - -2004-03-11 Andi Gutmans - - * zend_objects_API.c: - - Real fix for bug #27535 (Dmitry) - - * zend_objects_API.c: - - Attempt to fix bug #27535 - -2004-03-09 Marcus Boerger - - * ZEND_CHANGES: - Rename hasMore() to valid() as discussed. (Part VI) - - * zend_API.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_interfaces.c - zend_language_parser.y - zend_reflection_api.c: - Clearify the different method/class flags (as discussed with Andi). - - * zend.h: - No longer needed - -2004-03-09 Andi Gutmans - - * zend_constants.c: - - Fix crash: - - - * zend_compile.c - zend_compile.h - zend_execute.c: - - Nuke unused code. - -2004-03-08 Marcus Boerger - - * zend_execute.c - zend_interfaces.c - zend_iterators.h: - Rename hasMore() to valid() as discussed. (Part II) - - * zend_interfaces.c: - Rename hasMore() to valid() as discussed. (Part I) - - * zend_execute_API.c: - Check count. - - * zend_reflection_api.c: - Add another missing conversion - -2004-03-05 Andi Gutmans - - * zend_compile.c: - - Fix some small problems I introduce in last patch. - - * zend_compile.c: - - Finally fix the following: - $xml_mem = - simplexml_load_string('1'); - /* The following works fine */ - foreach ($xml_mem->part as $part) { - foreach($part->chapter->page as $page) { - print $page; - } - } - /* The following segfaults */ - foreach ($xml_mem->part as $part) { - foreach($part->chapter as $chapter) { // Difference here from previous - example - print $chapter; - } - } - -2004-03-04 Moriyoshi Koizumi - - * zend_language_scanner.l: - - Fix memleak when scanner is called from within tokenizer extension. - -2004-03-04 Stanislav Malyshev - - * zend_execute.h: - fix the fix - - * zend_execute.h: - oops, fix cut&paste gone bad - - * zend_execute.h: - Fix object true value: if we are in compat mode and it's Zend object - - use PHP4 rules. Otherwise, object is always true. - -2004-03-04 Derick Rethans - - * zend_constants.h - zend_operators.h: - - Fixed a 64bit issue (for zend_builtin_functions.c, module_number is an - int). - - Change the MAX_LENGTH_OF_LONG constant to 20, as LONG_MAX is 20 - characters. - (Patches by Ard Biesheuven) - - * tests/zend_operators.phpt: - - Added instance_of test (patch by Ard Biesheuvel) - -2004-03-04 Stanislav Malyshev - - * zend_compile.c: - Disallow redefining ctors and cleanup - - * zend_mm.c: - Handle out of memory/bad size situation gracefully, without getting into - loop - -2004-03-03 Andi Gutmans - - * zend_objects_API.c: - - Fix crash: - x as $x); - } - } - new foo(); - echo 'OK'; - ?> - -2004-03-02 Marcus Boerger - - * zend_API.c - zend_API.h: - Fix zend_parse_method_parameters_ex() and make it consistant with - zend_parse_method_parameters(). - -2004-03-02 Andi Gutmans - - * zend_compile.c: - - Fix leaks (although there might be still a problem here). - - * zend_execute.c: - - Fix leak (Dmitry) - - * zend_compile.c: - - Fix crash in: - attributes as $name => $attr) { - } - } - } - - $f= new Foo(); - $f->export(); - ?> - - * zend_objects.c: - - Improve fix for protecting destructor's from exceptions. - - I was killing the current exception completely which was wrong. - -2004-03-01 Andi Gutmans - - * zend_objects.c: - - Fix crash in destructors(). You can't throw an exception in destructors - as there is no guaranteed time when the destructor will be called. - - * zend_reflection_api.c: - - Fix leak - - * zend_reflection_api.c: - - Fix crash in reflection API (pierre) - - * zend.c - zend_exceptions.c - zend_execute_API.c: - - Fix crash in exception handling (zend_exception_error(...) and - zend_eval_string_ex() were buggy (Dmitry, Andi) - -2004-03-01 Derick Rethans - - * zend_compile.h: - - Typo fix (by Jan) - - * zend_builtin_functions.c: - - Fixed bug #27443 (defined() returns wrong type). - -2004-02-29 Andi Gutmans - - * zend_reflection_api.c: - - Apply fixes by Timm. - - * zend_compile.c: - - Change prototype isA check not to check the constructor. - - Only give an E_STRICT for non-isA compliant code as opposed to - E_COMPILE_ERROR. - -2004-02-29 Stanislav Malyshev - - * zend_compile.h: - add ZEND_API there too for opcode handlers - -2004-02-29 Derick Rethans - - * zend_execute.c: - - Initialize memory to \0 so that we can reliable detect whether a specific - opcode element is in use. - -2004-02-29 Stanislav Malyshev - - * zend_execute.c: - export opcode table - -2004-02-27 Marcus Boerger - - * zend_API.c - zend_compile.h: - Add some comments - - * zend_API.c - zend_compile.c - zend_execute.c: - Fixes for abstract classes/methods - -2004-02-26 Marcus Boerger - - * zend_language_parser.y - zend_language_scanner.l: - Fix __METHOD__ (noticed by Davey Sahfik) - - * zend_reflection_api.c: - Fix problem with Reflection_Property (patch from Timm slightly modified). - -2004-02-25 Marcus Boerger - - * zend_objects_API.c: - As Andi found out the dtor may increase the refcount. - -2004-02-25 Jani Taskinen - - * zend_builtin_functions.c: - ws + cs - -2004-02-25 Zeev Suraski - - * zend_compile.c - zend_execute.c: - Fix leak in foreach ($o->mthd()->arr) - - * zend_API.c - zend_API.h - zend_compile.c - zend_compile.h - zend_execute.c: - - Improve ARG_INFO() macros to support supplying required_num_args - - Initial fix for foreach($o->mthd()->arr) crash (now leaks) - -2004-02-25 Derick Rethans - - * zend_highlight.c: - - Use instead of in highlight_string(). (Patch by - mg@iceni.pl) - -2004-02-25 Jani Taskinen - - * zend_exceptions.c: - Improve error messages - -2004-02-25 Zeev Suraski - - * zend.c - zend_compile.c - zend_execute.c - zend_execute_API.c - zend_globals.h - zend_variables.c: - - Rename compatiblity mode to zend.ze2_compatibility_mode (it doesn't - only affect auto-clone). - - Perform implementation checks even with simple inheritance (off when - compatibility mode is enabled). - - Restore default arguments in interfaces and handle it correctly. - - Move registration of internal classes later in the startup sequence - in order to have INI options available. - -2004-02-25 Derick Rethans - - * zend_exceptions.c: - - Fixed bug #27391 (typo in Fatal Error message). - -2004-02-25 Zeev Suraski - - * zend_API.c - zend_compile.c - zend_compile.h - zend_opcode.c: - - Abstract methods cannot have defaults for arguments - - Make function foo($a, $b=null) satisfy both foo($a) and foo($a, $b) - prototypes - -2004-02-25 Sebastian Bergmann - - * zend_reflection_api.c: - Proto fixes. - -2004-02-25 Marcus Boerger - - * zend_objects_API.c: - Fix object destruction/free in shutdown - - set destructor_called even when no dtor is given - - use free_storage even when no dtor hat to be called - - * zend_objects_API.c: - Checking once for dtor is enough - -2004-02-24 Marcus Boerger - - * zend_API.c: - Fix class flags when handling abstract methods - -2004-02-23 Andi Gutmans - - * zend_language_parser.y: - - Improve precendence: - - foo = "Blah"; - - if (!$obj instanceof StdClass) { - print "No"; - } else { - print "Yes"; - } - - * zend_language_parser.y: - - Decrease precedence of instanceof so that the following is true: - php -r 'var_export((object)1 instanceof stdClass);'; - Patch by Jan Lehnardt - -2004-02-22 Derick Rethans - - * zend_operators.c: - - Fixed bug #27354 (Modulus operator crashes PHP). - -2004-02-22 Marcus Boerger - - * ZEND_CHANGES: - Add some more obviously needed information - -2004-02-20 Hartmut Holzgraefe - - * zend.h - zend_API.h - zend_iterators.h - zend_operators.h - zend_variables.h: - more EXTERN_C wrapping of ZEND_API prototypes - -2004-02-20 Jani Taskinen - - * zend_opcode.c: - ws fix - -2004-02-18 Hartmut Holzgraefe - - * zend.h - zend_builtin_functions.h - zend_extensions.h - zend_indent.h - zend_interfaces.h - zend_object_handlers.h - zend_objects.h - zend_objects_API.h - zend_ptr_stack.h - zend_stack.h - zend_stream.h: - wrap ZEND_API prototypes into BEGIN_EXTERN_C/END_EXTERN_C - for C++ extension support - -2004-02-18 Zeev Suraski - - * zend.c: - Forward-port fixlet from PHP 4 (thanks to Michael Sisolak) - -2004-02-17 Jani Taskinen - - * zend_list.c: - MFB: - Fix bug #26753 (zend_fetch_list_dtor_id() does not check NULL - strings) - -2004-02-16 Derick Rethans - - * ZEND_CHANGES: - - Clearify clone behavior, fixed clone example (Patch by Jan Lehnardt) - -2004-02-16 Marcus Boerger - - * zend_compile.c: - Bugfix #27227 Mixed case class names causes Fatal Error in Constructor call - -2004-02-14 Marcus Boerger - - * zend_iterators.c: - dtor's may not be called from free_storage handlers - -2004-02-12 Andi Gutmans - - * (php_5_0_0b4) - zend_execute.c: - - Remove old code - -2004-02-12 Hartmut Holzgraefe - - * (php_5_0_0b4) - ZEND_CHANGES: - making sure that the provided examples actualy work (or at least do not - generate no parse errors) unless they are really expected to fail - -2004-02-12 Andi Gutmans - - * (php_5_0_0b4) - zend_object_handlers.c: - - This was too strict. - -2004-02-12 Zeev Suraski - - * (php_5_0_0b4) - zend_API.c - zend_API.h - zend_compile.c - zend_compile.h - zend_interfaces.c - zend_object_handlers.c: - - Check return-by-reference bit when implementing interface prototypes - - Add infrastructure for built-in functions to hint whether they - return by reference or not. It is NOT currently used for anything, - except for interface prototypes (you can use it to request that the - function that implements your prototype returns by reference or - doesn't return by reference). - For downwards compatibility - by default, interface prototypes are - agnostic as to whether the function that implements them returns - by reference or not. Use ZEND_BEGIN_ARG_INFO_EX() with - ZEND_RETURN_VALUE/ZEND_RETURN_REFERENCE to change that. - - Fix ArrayAccess::getOffset() to conduct additional checks. - If your getOffset() should work with multidimensional arrays - it - must return by reference. - -2004-02-12 Andi Gutmans - - * (php_5_0_0b4) - zend_object_handlers.h: - - Add comments to read/write property/dimension for extension authors - -2004-02-12 Zeev Suraski - - * zend_default_classes.h: - zend_default_classes.h -> zend_exceptions.h - -2004-02-12 Andi Gutmans - - * (php_5_0_0b4) - Makefile.am: - - Add zend_exceptions.c - -2004-02-12 Zeev Suraski - - * (php_5_0_0b4) - ZendTS.dsp - zend.c - zend_default_classes.c - zend_exceptions.c - zend_exceptions.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_reflection_api.c: - Centralize exceptions code in zend_exceptions.[ch]. - Remove zend_default_classes.h (use zend_exceptions.h instead) - - NOTE: This currently breaks the build, fixes to php-src and pecl coming - soon - -2004-02-12 Andi Gutmans - - * zend_execute.c: - - Use zend_throw_exception_object() in throw_handler to make sure it - - does all the checks - -2004-02-12 Zeev Suraski - - * zend_default_classes.c - zend_default_classes.h - zend_exceptions.c - zend_exceptions.h - zend_execute.h - zend_execute_API.c: - Exceptions updates: - - - Enforce exceptions to be derived from class Exception. This allows - users to perform catch-all. It's not yet complete, so don't get - comfortable with it just yet :) Updates are coming soon. - - Implement zend_throw_exception() using zend_throw_exception_ex() - -2004-02-12 Andi Gutmans - - * zend_execute.h - zend_execute_API.c: - - Add API function to throw exception by using an object - -2004-02-11 Marcus Boerger - - * zend.c: - Must be initialized in ZTS mode - - * ZEND_CHANGES - ZEND_CHANGES: - Update - - * zend_compile.c - zend_language_parser.y: - Fix: [extends [, ]* ] - -2004-02-11 Zeev Suraski - - * zend_execute.c: - Fix leaks in assignments to overloaded objects - - * zend_execute.c: - Fix leak with overloaded objects, when they're used just "for the hell - of it" :) - - * zend_execute.c: - Fixed a bug the caused overloaded array indices to be converted to strings - - * zend_execute.c: - Turn off bogus warnings with overloaded dimensions and += (and friends) - - * zend_execute.c: - Improve the implementation of unset() on array dimensions to be more - consistent with that of regular variables and string offsets - - * zend_execute_API.c: - Fix bug #25038 - - * zend_reflection_api.c: - Fix crash (patch by Rob Richards) - - * zend.c - zend_execute_API.c: - Fix exceptions thrown without a stack frame - Always enable set_exception_handler() - - * zend_list.h: - Change FETCH_RESOURCE to return false on error instead of null, for - consistency with other error situations - - * zend_compile.c: - Fix bug #26802 (the right aspects of it found by Marcus, anyway :) - - * tests/bug26802.phpt: - Fix and clarify the test case - - * zend_execute_API.c: - Complete the fix for handling of exceptions happening during the - argument passing phase of function calls (fixes bug #26866) - - * zend_execute_API.c: - whitespace - -2004-02-10 Zeev Suraski - - * tests/bug26698.phpt: - Ignore the memleak in this test - - * zend_execute.c: - Fix bug #26698 (exceptions handled properly during argument passing to - functions) - - * zend_default_classes.c: - Fix bug #27186 - - * zend_execute_API.c: - Fix bug #26869 - - * zend_execute.c: - Fix refcounting of ++/+= overloading (fix leak in __get()/__set() - based classes) - -2004-02-10 Andi Gutmans - - * zend_compile.c: - - Nuke more unused code - -2004-02-10 Zeev Suraski - - * zend_execute.c: - Fix handling in assignment using multidimensional array syntax to string - offset ($s = "FUBAR"; $s[0][0] = 1;) - -2004-02-10 Andi Gutmans - - * ZEND_CHANGES: - - We will go with PHP 4 behavior. With the new object model assigning by - reference has lost a lot of its importance. - - * zend_compile.c: - - Remove junk - -2004-02-10 Zeev Suraski - - * zend_execute.c: - Fix exception handling in opcodes spanned across multiple oplines (fixes - the crash in __set()) - - * zend_execute.c: - - Fix pre/post increment for overloaded objects - - Fix binary-assign-op for overloaded objects - - NOTE: This requires the implementation of the 'get' callback! - -2004-02-10 Moriyoshi Koizumi - - * tests/bug22836.phpt: - - Correcting test. - -2004-02-08 Zeev Suraski - - * zend_execute.c - zend_object_handlers.c - zend_object_handlers.h: - Fix write-mode of overloaded objects when using array dimensions - -2004-02-08 Andi Gutmans - - * zend_objects_API.c: - - Check if free_storage exists - -2004-02-05 Sebastian Bergmann - - * ZEND_CHANGES: - Committing for Jan. - -2004-02-05 Ilia Alshanetsky - - * zend_compile.c - tests/bug27145.phpt: - Fixed bug #27145 (Unmangle private/protected property names before printing - then inside error messages). - -2004-02-04 Zeev Suraski - - * zend_execute_API.c: - Fix exceptions happening inside internal functions called through - zend_user_function() - - * zend_execute_API.c: - Remove double initialization - -2004-02-04 Marcus Boerger - - * zend_objects.h: - Add new prototype - - * zend_reflection_api.c: - Fix reflection - - * zend_iterators.c: - Fix warnings - -2004-02-04 Zeev Suraski - - * zend_compile.c: - Fixlet - - * zend_compile.c: - Fix handling of $this in some cases - - * zend_compile.c: - Handle additional cases - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_language_parser.y: - Reinstate early-binding for classes. - - Note that this is available for downwards compatibility only - and it - doesn't - work if you use new features (namely, interfaces). Generally, people - should - declare their classes before using them, but we just didn't want hell to - break - loose (c) - - * zend_opcode.c: - Optimize - - * zend_compile.c: - - Improve $this assignment detection and generalize some code in - zend_compile.c - - * zend_compile.c: - -Error out when trying to re-assign $this - - * zend_objects_API.c - zend_objects_API.h: - The valid bit was necessary after all - restored - - * zend_objects_API.c: - Fixlets - - * zend_compile.c - zend_objects.c: - - Small fixes - - * zend_execute.c: - - Improve wording - - * zend_execute_API.c - zend_iterators.c - zend_objects.c - zend_objects_API.c - zend_objects_API.h - zend_reflection_api.c: - Change destructor implementation (details will follow on internals@) - -2004-02-03 Marcus Boerger - - * tests/bug24884.phpt: - Update tests - - * zend_objects.c: - Nuke unused variable - - * zend_compile.c: - Fix Warning - -2004-02-03 Sebastian Bergmann - - * ZEND_CHANGES: - clone/__clone() related changes. - -2004-02-03 Zeev Suraski - - * zend_compile.c: - Remove unused variable - - * zend_objects_API.c - zend_objects_API.h: - Remove more garbage - valid bit was not really necessary - - * zend_execute_API.c - zend_object_handlers.c - zend_object_handlers.h - zend_objects_API.c - zend_objects_API.h: - - Clean garbage (delete was nuked a long time ago) - -2004-02-03 Ilia Alshanetsky - - * zend_execute.c: - More unneeded code removed. - -2004-02-03 Zeev Suraski - - * zend_execute.c - zend_language_scanner.l: - Abort on parse error in an include file (patch by Ilia) - - * zend_compile.c: - Remove redundant code - - * zend_execute.c: - Fix try/catch block logic - - * zend_compile.c - zend_objects.c: - Perform a bitwise copy of the object even when __clone() is defined. - __clone() is back to not requiring any arguments, as $that is no longer - needed ($this already contains a copy of the original object, by the time - we __clone() is executed). - Calling the parent clone is done using parent::__clone() - - * zend_compile.c - zend_compile.h - zend_default_classes.c - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_globals.h - zend_language_parser.y - zend_language_scanner.l - zend_opcode.c: - Rewrote exception support. Fixes a few limitations and bugs in the old - implementation, and allows exceptions to 'fire' much earlier than before. - - Instructions on how to use the new mechanism will follow on internals@ - shortly... - - Note - this (most probably) breaks the current implementation of - set_exception_handler() - -2004-02-02 Zeev Suraski - - * zend_compile.c - zend_compile.h - zend_language_parser.y - zend_language_scanner.l - zend_objects.c: - Redesign the clone() feature to fix some fundamental flaws in the previous - implementation. - - Using clone directly is now done using - $replica = clone $src; - - Clone methods must now be declared as follows: - function __clone($that) - { - } - - Clone methods in derived classes can call the __clone method of their - parent - classes using parent::__clone($that) - -2004-01-31 Marcus Boerger - - * zend_reflection_api.c: - Throw an exception in case a reflection object cannot be found and do not - override the exception from constructors in static method calls. - -2004-01-30 Ilia Alshanetsky - - * zend_execute.c: - Apply the same parse error handling to (include|require)_once as the one - for - their non-once counterparts. - -2004-01-28 Zeev Suraski - - * zend_compile.c: - Tweak checks to detect some additional cases. - Reorder checks to make more sense. - - * zend_compile.c: - - Error message fix - - Prevent inheritance of the same constant from two interfaces - - * zend_compile.c: - Fixlets - - * zend_compile.c - zend_compile.h: - Prevent classes from implementing interfaces that have the same function - - * zend_execute.c: - Whitespace - - * zend_compile.c: - Code relayout - - * zend_execute_API.c: - Forward-port fix for timeouts under Windows - -2004-01-26 Marcus Boerger - - * zend_interfaces.c - zend_interfaces.h: - - Export struct zend_user_iterator - - Ad 'it' to function prefix to prevent naming clashes - - Export zend_user_it_free_current - -2004-01-25 Ilia Alshanetsky - - * zend_execute.c: - Fixed bug #26814 (On parse error include included file, terminate - execution script). - -2004-01-25 Marcus Boerger - - * zend_execute.c - zend_iterators.c - zend_iterators.h: - Respect proeprty visibility in foreach - - * tests/bug26696.phpt: - Update test - -2004-01-24 Marcus Boerger - - * zend_API.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c: - Switch from ZEND_ACC_DYNAMIC to ZEND_ACC_ALLOW_STATIC and disallow calling - internal non-static methods statically. - -2004-01-24 Sebastian Bergmann - - * zend_execute.c - zend_execute_API.c: - Change message as proposed by Jon. - -2004-01-23 Marcus Boerger - - * zend_API.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c: - Simplify detection of methods that must be called dynamic (with object) - - * zend_execute.c - zend_execute_API.c: - Disallow calling __clone/__construct/__destruct static - Send an E_STRICT when calling a non static method static - - * zend_API.c - zend_compile.c - zend_compile.h: - Disallow static declaration of clone - -2004-01-23 Jani Taskinen - - * zend_constants.h - zend_ini.h: - Silence some compile warnings - -2004-01-22 Marcus Boerger - - * zend_default_classes.c: - Fix internal access to exception properties - -2004-01-19 Andi Gutmans - - * zend_execute.c - zend_execute.h: - - Hopefully fix bug #26696. - - Please let me know if hell-breaks loose - -2004-01-19 Marcus Boerger - - * zend_API.c - zend_API.h: - Add zend_get_module_started() to quickly check whether a module is present - and its MINIT function has been called. - -2004-01-18 Marcus Boerger - - * zend_execute.h - zend_execute_API.c: - Improove debug capabilities - - * zend_reflection_api.c: - Fix some casing issues - -2004-01-17 Marcus Boerger - - * zend_interfaces.c: - - - * zend_interfaces.c: - Fix inheritance rule for interface Traversable - -2004-01-17 Jani Taskinen - - * tests/bug26802.phpt: - - Renamed all *php4* files to *php5*, changed all php4/PHP4 to php5/PHP5 - -2004-01-17 Ilia Alshanetsky - - * zend_object_handlers.c - zend_object_handlers.h: - Expose zend_std_call_user_call(), needed for implementation of things like - __call handlers. - -2004-01-17 Jani Taskinen - - * zend_compile.c - zend_language_scanner.h - zend_language_scanner.l: - Nuke compile warning by using the LANG_SCNG macro instead - -2004-01-16 Jani Taskinen - - * zend_reflection_api.c: - - Fixed bug #26640 (__autoload() not invoked by Reflection classes) - - -2004-01-15 Zeev Suraski - - * zend.c: - Nice patch Christian, but it wasn't at all enabled? :) - - Fix bug #26883 - -2004-01-14 Zeev Suraski - - * zend_compile.c: - Don't allow interfaces to implement anything - -2004-01-14 Andi Gutmans - - * zend_operators.h: - - Remove bogus macros - -2004-01-13 Wez Furlong - - * zend_ini_parser.y: - Don't treat strings containing : as potential constant names in - the .ini parser. - This fixes Bug #26893 - -2004-01-12 Andi Gutmans - - * zend_compile.c: - - Return the PHP 4 behavior of not allowing class declerations within - - class declerations. This happened when declaring a class within a - - method. - class A { - function foo() { - class B { - } - } - } - -2004-01-12 Marcus Boerger - - * zend_API.h: - Add missing macro - -2004-01-11 Wez Furlong - - * zend_compile.c - zend_language_scanner.h - zend_language_scanner.l: - TSRMLS fix - -2004-01-11 Andi Gutmans - - * zend_language_parser.y: - - Re-allow conditional class declerations. Needless to say that I also - - think it's not great coding.. Use polymorphism instead :) - - * zend_compile.c - zend_language_scanner.h - zend_language_scanner.l: - - This should fix the problem of conditional function decleration on the - - same line of code not to work. You should re-evaluate your coding style - - if you really code this way :) - -2004-01-10 Zeev Suraski - - * zend_operators.c: - Remove conflict - - * zend_builtin_functions.c - zend_execute_API.c - zend_globals.h - zend_operators.c: - Added error mask to set_error_handler() - Patch by Christian Schneider - -2004-01-09 Wez Furlong - - * acconfig.h: - support for building asm in the unix buildsys. - Also, when ZEND_ACCONFIG_H_NO_C_PROTOS is defined, - omit the C prototypes from the configuration header - so that it can be included into asm files. - -2004-01-09 Marcus Boerger - - * RFCs/002.txt: - this one is declined - -2004-01-09 Wez Furlong - - * zend_object_handlers.h: - must be extern to avoid problems with some compilers - -2004-01-09 Stanislav Malyshev - - * tests/bug26077.phpt: - fix expect - - * zend_compile.c: - Bug #25816 - disallow arrays in class constants - - * tests/bug26077.phpt: - add test - - * zend_compile.c - zend_execute.c: - Fix Bug #26077 - memory leak when new() result is not assigned - and no constructor defined - -2004-01-08 Jani Taskinen - - * acconfig.h - zend.c - zend.h - zend_API.c - zend_API.h - zend_alloc.c - zend_alloc.h - zend_builtin_functions.c - zend_builtin_functions.h - zend_compile.c - zend_compile.h - zend_config.nw.h - zend_config.w32.h - zend_constants.c - zend_constants.h - zend_default_classes.c - zend_default_classes.h - zend_dynamic_array.c - zend_dynamic_array.h - zend_errors.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_extensions.c - zend_extensions.h - zend_fast_cache.h - zend_globals.h - zend_globals_macros.h - zend_hash.c - zend_hash.h - zend_highlight.c - zend_highlight.h - zend_indent.c - zend_indent.h - zend_ini.c - zend_ini.h - zend_ini_scanner.h - zend_interfaces.c - zend_interfaces.h - zend_istdiostream.h - zend_iterators.c - zend_iterators.h - zend_language_scanner.h - zend_list.c - zend_list.h - zend_llist.c - zend_llist.h - zend_mm.c - zend_mm.h - zend_modules.h - zend_multibyte.c - zend_multibyte.h - zend_multiply.h - zend_object_handlers.c - zend_object_handlers.h - zend_objects.c - zend_objects.h - zend_objects_API.c - zend_objects_API.h - zend_opcode.c - zend_operators.c - zend_operators.h - zend_ptr_stack.c - zend_ptr_stack.h - zend_qsort.c - zend_qsort.h - zend_reflection_api.c - zend_reflection_api.h - zend_sprintf.c - zend_stack.c - zend_stack.h - zend_static_allocator.c - zend_static_allocator.h - zend_stream.c - zend_stream.h - zend_ts_hash.c - zend_ts_hash.h - zend_types.h - zend_variables.c - zend_variables.h: - - Happy new year and PHP 5 for rest of the files too.. - -2004-01-08 Andi Gutmans - - * zend_ini_parser.y - zend_ini_scanner.l - zend_language_parser.y - zend_language_scanner.l: - - - A belated happy holidays (by two years) - -2004-01-07 Marcus Boerger - - * zend_execute.c: - Reimplement part of Bug #24608 that was reverted too - - * zend_execute.c: - Revert patch that allowed to call sttaic methods via $method() - -2004-01-06 Ilia Alshanetsky - - * zend_mm.c: - Check if realloc() succeeds or not. (Noticed by Andrey) - -2004-01-06 Marcus Boerger - - * tests/bug26802.phpt: - Update - -2004-01-05 Marcus Boerger - - * zend_execute.c - tests/bug26802.phpt: - Fixed bug #26802 - - * tests/bug26802.phpt: - Fix test - - * tests/bug26801.phpt - tests/bug26802.phpt: - Add new test - - * tests/bug26696.phpt: - Update test - -2004-01-05 Stanislav Malyshev - - * zend_API.c: - Fix bug #26543 - check parent:: and self:: in class names - - * zend_execute.c - zend_object_handlers.c: - Bug #24608 - fix interaction between __accessors and get_property_ptr - -2004-01-03 Derick Rethans - - * zend.c - zend_API.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_object_handlers.c - zend_reflection_api.c: - - Fixed var_export() to show public, protected and private modifiers - properly. - - Exported (un)mangle_property_name. - -2004-01-02 Andrei Zmievski - - * zend_default_classes.c: - Do not show exception message if it's empty. - - -2003-12-31 Andrei Zmievski - - * zend_default_classes.c: - Make default message look better. - -2003-12-30 Andi Gutmans - - * ZEND_CHANGES: - - Fix typos - -2003-12-30 Marcus Boerger - - * ZEND_CHANGES: - Update - -2003-12-30 Ilia Alshanetsky - - * tests/bug26696.phpt: - Added test case for bug #26696. - -2003-12-29 Marcus Boerger - - * zend_execute.c: - Fix (string) conversion - - * zend.c: - Add missing notice - - * zend_execute_API.c: - Fix __autoload() with derived classes - -2003-12-28 Marcus Boerger - - * zend_API.c: - WS - - * zend_API.h - zend_compile.c: - Fix order of class_entry member initialization (needed for example for DOM) - -2003-12-27 Marcus Boerger - - * zend_language_parser.y: - Fixed bug #26065 (Crash when nesting classes) - - * tests/bug26698.phpt: - Add new test - - * zend_objects.c: - Simplify - - * zend_object_handlers.c: - Fix __tostring() and concatenation - -2003-12-25 Marcus Boerger - - * zend_execute.c - zend_execute.c: - Fix warning - -2003-12-25 Ilia Alshanetsky - - * zend_highlight.c: - Fixed Bug #26703 (Certain characters inside strings incorrectly treated as - keywords). Original patch by vrana@php.net. - -2003-12-23 Marcus Boerger - - * zend.c - zend_execute_API.c - zend_globals.h - tests/bug26697.phpt: - Fixed bug #26697 (calling class_exists on a nonexistent class in __autoload - results in segfault). - -2003-12-22 Marcus Boerger - - * tests/bug26229.phpt - tests/bug26695.phpt: - Add more tests - - * tests/bug24884.phpt - tests/bug26166.phpt: - Fix tests now that class names are shown in correct casing - - * zend_compile.c: - Preserve class name casing. - - * zend_reflection_api.c: - Fixed bug #26695 (Reflection API does not recognize mixed-case class hints) - - * zend_object_handlers.c: - Fixed bug #26675 (Segfault on ArrayAccess use) - Update NEWS - -2003-12-22 Wez Furlong - - * zend_API.c - zend_API.h - zend_object_handlers.c - zend_object_handlers.h: - export these symbols for use by SPL as a shared extension - -2003-12-19 Andi Gutmans - - * (php_5_0_0b3RC2) - zend_language_parser.y: - - Nuke another rule (thanks to Jan for noticing this) - -2003-12-19 Dmitry Stogov - - * (php_5_0_0b3RC2) - zend.c: - Bug #25547 (error_handler and array index with function call) was fixed - tests/lang/bug25547.phpt - -2003-12-19 Andi Gutmans - - * zend_language_parser.y: - - Nuke unused code - -2003-12-19 Dmitry Stogov - - * (php_5_0_0b3RC2) - zend_execute.c: - Error reporting on unset string offset was added (Bug #24773 - Zend/tests/bug24773.phpt) - - * zend_execute.c: - Assign_op operators (+=) were fixed for elements of overloaded objects - -2003-12-18 Andi Gutmans - - * zend_execute.c: - - Nuke C++ comment - - * zend_execute.c: - - Revert patch 1.566 - -2003-12-18 Marcus Boerger - - * zend_execute.c - zend_object_handlers.c - zend_object_handlers.h: - Fixed bug #24837 Incorrect behaviour of PPP using foreach. - -2003-12-17 Zeev Suraski - - * (php_5_0_0b3RC1) - zend_execute.c: - This part of the if was necessary after all. - Refix bug #22510 - -2003-12-17 Dmitry Stogov - - * (php_5_0_0b3RC1) - zend_execute_API.c: - -** empty log message *** - - * (php_5_0_0b3RC1) - zend_compile.c: - Dynamic function call from object's property was fixed - (See "tests/lang/bug24926.phpt" and "tests/lang/bug25652.phpt") - - * zend_execute_API.c: - Access to globals/autoglobals from class __destructor was fixed. - (see "tests/lang/bug24908.phpt" and - "tests/classes/destructor_and_globals.phpt") - -2003-12-16 Sebastian Bergmann - - * zend_compile.h - zend_object_handlers.h - zend_stream.h: - Sync: Export externally used functions. - -2003-12-16 Stanislav Malyshev - - * zend_compile.c: - export class initialization function - - * zend_object_handlers.c: - export externally used functions - - * zend_stream.c: - export function - -2003-12-15 Marcus Boerger - - * zend.c - zend_object_handlers.c - zend_object_handlers.h: - Reenable __tostring() magic for print,echo,concatenation,function naming... - but not for other internal things. - -2003-12-15 Jani Taskinen - - * zend_execute.c: - ws + cs (no c++ comments in c code) - -2003-12-15 Dmitry Stogov - - * zend_execute.c: - Bug #24773 was fixed (Zend/tests/bug24773.phpt) - Assign_op operators (+=) were fixed for elements of overloaded objects - Memory leaks during accessing ptoperies/elements of overloaded objects - were fixed - - * zend_execute_API.c - zend_reflection_api.c: - Memory corruptions were fixed in zend_str_tolower_copy() - -2003-12-14 Zeev Suraski - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_execute.h: - Fix behavior of return-by-reference functions. Remove erroneous warnings, - add E_STRICT warnings in case you return something by reference that - you're - not supposed to (anything that's not a variable, or a return-value of a - function that returned by reference). - - * zend.h - zend_execute.c - zend_execute.h: - Some cleanup - -2003-12-13 Moriyoshi Koizumi - - * zend_operators.c: - Fixes for POSIX compliancy. - -2003-12-12 Marcus Boerger - - * zend.c: - Free is needed in non ZTS too - - * zend.c: - Fix memleaks in ZTS mode - - * zend.c: - Fix memleaks - -2003-12-12 Ilia Alshanetsky - - * zend_constants.c: - Do not copy extra byte. - -2003-12-11 Ilia Alshanetsky - - * zend.h: - Fixed extra byte allocation for TRUE/FALSE/ZEND_THREAD_SAFE/NULL constants. - -2003-12-11 Marcus Boerger - - * zend_execute_API.c: - Bugfix: #26591 [NEW]: "__autoload threw an exception" during an uncaught - Exception - -2003-12-11 Andi Gutmans - - * zend_execute.c: - - Refix bug #24773 - -2003-12-11 Marcus Boerger - - * zend_object_handlers.c: - Handle getter failure and allow to bypass thrown exceptions. - - * zend_execute.c: - read_dimension() handler might return 0, handle this. - -2003-12-10 Marcus Boerger - - * zend_execute_API.c: - Do not double copy the string - -2003-12-09 Jani Taskinen - - * zend_operators.c - zend_operators.h: - - Brought ext/bcmath to the new millennium - -2003-12-09 Andi Gutmans - - * zend_constants.c: - - Fix overallocation (thanks to Ilia) - -2003-12-08 Derick Rethans - - * zend_builtin_functions.c: - - Make it compile again - -2003-12-07 Stanislav Malyshev - - * zend_builtin_functions.c: - Apply Andrey Hristov's patch adding get_declared_interfaces() - -2003-12-06 Marcus Boerger - - * zend_compile.c: - This test is against interfaces not abstract classes. - - * zend_default_classes.c: - Show the exception message again after __toString() magic has been dropped. - -2003-12-05 Andi Gutmans - - * zend_compile.c - zend_execute.c: - - Remove two unneeded convert_to_string() (found by Marcus) - - Change illegal use of string offset to E_ERROR - -2003-12-05 Ilia Alshanetsky - - * zend_default_classes.c: - Fixed crash demonstrated with ext/dom/tests/dom003.phpt test case. - -2003-12-04 Moriyoshi Koizumi - - * zend_execute.c: - Revert crap. - - * zend_execute.c: - Raise error in case dereference is performed on a scalar value. - -2003-12-03 Ilia Alshanetsky - - * tests/bug24773.phpt: - Test case for bug #24773. - -2003-12-03 Moriyoshi Koizumi - - * zend_execute.c: - This kind of error should be caught. (suggested by Andi, thanks) - - * zend_execute.c: - Fix bug #24773 (unset()ing string offsets crashes PHP) - -2003-12-03 Derick Rethans - - * zend_execute.c: - - Remove newline from error message - -2003-12-02 Marcus Boerger - - * zend_object_handlers.c: - Remove automatic call to __toString() since it is supposed to cause too - much trouble. See discussion on the mailing list. - -2003-12-02 Andi Gutmans - - * zend_API.c - zend_operators.c: - - Revert the revert of these patches. This overloading can only be used - - by C extensions such as SimpleXML and *NOT* PHP code. Reasons given - - on the mailing list and problem with reentrancy inside the opcodes. - - * zend_compile.c: - - Fix for bug #26182 - - * zend_errors.h: - - Don't include E_STRICT in E_ALL. - -2003-12-02 Marcus Boerger - - * zend_API.h: - Free the zval container only if it should be freed and was not copied. - -2003-12-01 Andi Gutmans - - * zend_execute.c: - - Change to E_STRICT so as not to break existing scripts. - - Thanks Edin - - * zend_builtin_functions.c: - - Nuke property_exists(). We need to fix isset() and this is already - - supported in reflection API. In any case, it's best not to add new - - functions in the general namespace except for keeping engine consistency - (which would have been true in this case) - - * zend_API.c: - - Revert auto-conversion in parameter API - - * zend_operators.c: - - Don't automatically call __toString() in convert_to_string_ex(). - - use __toString() in your code. - - Keep the auto-case in make_printable_zval. - -2003-11-30 Marcus Boerger - - * zend_default_classes.c: - Check return value of exception::__tostring() - - * tests/bug20240.phpt: - Fix test - -2003-11-29 Marcus Boerger - - * zend_compile.c - zend_iterators.c: - Fix memleak - -2003-11-29 Ilia Alshanetsky - - * zend_highlight.c - zend_language_scanner.l: - Fixed bug #26463 (Incorrect handling of semicolons after heredoc) - -2003-11-29 Marcus Boerger - - * zend_API.h: - This takes the address of a zval ptr - - * zend_API.h: - Add macros to return values of other zvals. - This is needed because one cannot use REPLACE_ZVAL_VALUE with - return_value. - -2003-11-29 Ilia Alshanetsky - - * zend_execute.c: - Restore original patch for bug #26281. - - -2003-11-29 Marcus Boerger - - * zend_compile.c: - Revert accidential commit until decision - - * zend_compile.c - zend_default_classes.c: - Make exception code more robust: - - Fix error in calculation of trace-string length - - Allow to overload __strostring() and make it work for uncaught - exceptions - - Show exception thrown while displaying exceptions - -2003-11-28 Ilia Alshanetsky - - * zend_API.c: - Add removed lcname, it is still needed. - -2003-11-27 Marcus Boerger - - * zend_API.c: - Convert objects to string if string is required by newer parameter parsing - since we do this for older parameter parsing does so too. - - * zend_object_handlers.c: - The macro REPLACE_ZVAL_VALUE cannot be used since we only have zval * - writeobj. to allow it the api needs to be changed to zval **writeobj. - - * zend_builtin_functions.c: - Add a support function to check for property existance which is different - from checking a property from being empty/set. - Update test #26182. - -2003-11-24 Marcus Boerger - - * zend_execute.c - zend_interfaces.c - zend_interfaces.h - zend_object_handlers.c - zend_operators.c - zend_operators.h: - Add new interface ArrayAccess to use objects as Arrays - -2003-11-24 Andi Gutmans - - * zend_constants.c: - - Fix newly introduced bug which stopped class constants from working. - - Thanks to Jan Lehnardt for reporting it. - -2003-11-24 Sebastian Bergmann - - * RFCs/004.txt: - No longer needed. - -2003-11-24 Andi Gutmans - - * zend_API.c - zend_builtin_functions.c - zend_compile.c - zend_compile.h - zend_constants.c - zend_execute.c - zend_execute_API.c - zend_reflection_api.c: - - Fix __autoload() to preserve class case. - - Heads up, this patch might break stuff so please let me know if you - - bump into any problems. - -2003-11-23 Andi Gutmans - - * zend_reflection_api.c: - - Allocation optimizations by Timm Friebe - -2003-11-21 Ilia Alshanetsky - - * zend_execute.c: - Cleaner patch for bug #26281. - -2003-11-19 Ilia Alshanetsky - - * zend_execute.c - tests/bug26281.phpt: - Possible fix for bug #26281 & test case. - -2003-11-18 Marcus Boerger - - * zend_API.h: - Add method alias macro - -2003-11-18 Andi Gutmans - - * zend.c - zend_builtin_functions.c - zend_constants.c - zend_errors.h - zend_language_parser.y: - - Add E_STRICT, to be used to warn purists (like Jani :) - -2003-11-18 Marcus Boerger - - * zend_compile.c: - Backpatch the correct opcode for list(), property overloading needs more - opcodes (Bugfix #26257). - - * zend_interfaces.c: - Use correct order - - * zend_interfaces.c: - Use correct macro/function - -2003-11-17 Marcus Boerger - - * zend_interfaces.c: - Correct destruction - -2003-11-13 Moriyoshi Koizumi - - * zend_operators.c: - Bugfix #26156 (REPLACE_ZVAL_VALUE works on uninit stack-based zvals) - -2003-11-13 Marcus Boerger - - * ZEND_CHANGES - zend_interfaces.c: - IteratorAggregate::getIterator() cannot return anythingy else than objects - -2003-11-13 Andi Gutmans - - * zend_compile.c: - - Make sure internal clasess are malloced - -2003-11-10 Marcus Boerger - - * zend_iterators.c: - Don't use zend_class_entry indirection - - * zend_builtin_functions.c: - Bugfix #26010 (Bug on get_object_vars() function) - - * zend_object_handlers.c: - Correct default handlers - - * zend_iterators.c: - Need to update iterators handler table too. - - * zend_execute.c - zend_object_handlers.c: - Fix those warnings - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_object_handlers.c - zend_object_handlers.h - zend_objects_API.c: - Split isset/isempty for object property and object dimension hooking. - - * zend_interfaces.c: - Little iterator improvement: ability to store index in iterator - -2003-11-08 Marcus Boerger - - * zend_reflection_api.c: - Add method reflection_class::implementsInterface() - Allow string & reflection_class in isSubclassOf() - - * zend_reflection_api.c: - Fix reflection_class::isSubclassOf() - - * zend.c - zend_object_handlers.c - zend_operators.c - tests/bug26166.phpt: - Handle exceptions in casting more gracefully. - This fixes bug #26166 - -2003-11-07 Marcus Boerger - - * zend_execute_API.c: - Make __autoload() faster - - * zend_execute.c - zend_iterators.h: - Update Iterators: Call next at the correct point in time. - - * zend_compile.c: - Add missing initialization. - - * zend_interfaces.h: - Make these class entries available for inheriting classes - -2003-11-06 Ilia Alshanetsky - - * zend_operators.c: - Fixed bug #26148 (Print the notice before modifying variable on type - mismatch). - - - Patch by: morten-bugs dot php dot net at afdelingp dot dk - -2003-11-04 Marcus Boerger - - * zend_execute.c - zend_interfaces.c: - Prevent some SEGV's when Exceptions are thorown inside iterators. - - * zend_builtin_functions.c: - Removedouble efree call - -2003-11-04 Moriyoshi Koizumi - - * zend_object_handlers.c: - __tostring() handler should be binary-safe - - * tests/bug26010.phpt: - Fix one more test - -2003-11-04 Stanislav Malyshev - - * Makefile.am: - add zend_iterators.c zend_interfaces.c to make - -2003-10-31 Moriyoshi Koizumi - - * tests/bug26010.phpt: - Add test case for bug #26010 - -2003-10-30 Stanislav Malyshev - - * zend_compile.c: - make CATCH opcode use "class" T like other opcodes do - via IS_CONST - -2003-10-30 Andi Gutmans - - * (php_5_0_0b2) - ZEND_CHANGES: - - Beta 2 - -2003-10-29 Moriyoshi Koizumi - - * zend_operators.h: - Use pretty macro instead. - -2003-10-28 Andi Gutmans - - * zend_language_parser.y: - - Head up! I'm reverting the patch which allows for expressions in constant - - declerations. Allowing the access of other constants in this code is - - flawed. We are reverting back to PHP 4's static scalars. - - Don't worry if you get the following msg when compiling: - - "zend_language_parser.y contains 3 useless nonterminals and 22 useless - rules" - - I didn't nuke the code in case we have some brilliant ideas after beta 2 - -2003-10-28 Marcus Boerger - - * zend_interfaces.c: - Give some freedon to c iterators but not in userspace. - -2003-10-28 Shane Caraveo - - * zend_compile.c: - fix crash in do_implement_interface when compiling - pear/PHPUnit/Framework/TestCase.php line 63 - while only interface_gets_implemented is the issue in this instance, both - these vars were unitialized, causing potential other issues - -2003-10-25 Marcus Boerger - - * zend_API.c - zend_API.h: - Add zend_make_callable() which allows to make zval's callable zval's. - At the moment this function only converts strings of the form - class::method - to an array(class,method). - - * zend_default_classes.c - zend_reflection_api.c: - This forces a better error message for non working clone calls. - - * zend_default_classes.c: - And use things to throw an exception here - - * zend_default_classes.c: - You shall not clone Exception instances - - * zend_reflection_api.c: - You shall not clone reflection_xx instances - - * ZEND_CHANGES - ZEND_CHANGES: - Update - -2003-10-25 Sebastian Bergmann - - * ZEND_CHANGES: - Fugbix typo. - - * ZEND_CHANGES: - s/Throwable/Printable: Exception has become an internal class since I - initially documented interfaces. - -2003-10-24 Andi Gutmans - - * ZEND_CHANGES: - - Fix typo - -2003-10-24 Marcus Boerger - - * zend_API.c - zend_execute_API.c: - Revert accidental commit - - * ZEND_CHANGES - zend_API.c - zend_execute_API.c: - Zend/ZEND_CHANGES - -2003-10-23 Sebastian Bergmann - - * Zend.dsp - ZendTS.dsp: - Add zend_interfaces.{c|h}. - -2003-10-22 Ilia Alshanetsky - - * zend.c: - Fixed bug #25922 (Crash in error handler when 5th argument is modified). - -2003-10-22 Marcus Boerger - - * zend_default_classes.c - zend_interfaces.c - zend_interfaces.h: - Impement userspace iterator interfaces and tests. See tests for details - on the names. - - * zend.h - zend_API.c - zend_API.h - zend_compile.c - zend_compile.h - zend_execute.c: - Expand Interface C API. - In short: zend_class_entry->interface_gets_implemented() allows to modify - the class entry of a class when an interface gets implemented. - - * zend_default_classes.c: - The string conversion method should be named __toString() - -2003-10-21 Marcus Boerger - - * ZEND_CHANGES: - Make this clear - -2003-10-20 Andi Gutmans - - * ZEND_CHANGES: - - Add comment from Timm - -2003-10-20 Marcus Boerger - - * ZEND_CHANGES - ZEND_CHANGES: - Update - -2003-10-19 Andi Gutmans - - * zend_language_parser.y: - - Nuke const in function parameters. I just can't remember why this exists - - and it seems no one else remembers either. It has no semantic meaning. - -2003-10-18 Marcus Boerger - - * zend.h - zend_API.h - zend_compile.c - zend_iterators.h: - Fix class/iterator relationship & handling - - * zend_iterators.c: - Fallback to old behavior until we have a default iterator that respects - visibility we do the array trick. - - * zend_iterators.h: - Change order: Optional rewind() to end of structure - -2003-10-17 Marcus Boerger - - * ZendTS.dsp: - WS - - * zend_reflection_api.c: - Show if a class/object is iterateable - - * ZendTS.dsp - zend.h - zend_API.h - zend_default_classes.c - zend_execute.c - zend_iterators.c - zend_iterators.h: - Added c-api for iterators - - * zend_reflection_api.c: - Fix showing final/abstract for classes - -2003-10-17 Ilia Alshanetsky - - * zend_ini_parser.y: - Fixed formatting issue. - - * zend_alloc.c: - Fixed if() condition. - -2003-10-15 Marcus Boerger - - * zend_API.c - zend_API.h: - Add oo support function zend_class_implements() - - * zend_default_classes.c: - Fix cast function - -2003-10-14 Andi Gutmans - - * zend_mm.c: - - Argh, the suffering copy&paste can cause - - * zend_alloc.c: - - Fix compile problem. - - * zend_mm.c: - - Fix the fix by making sure the new block is in the right free list. - -2003-10-14 Stanislav Malyshev - - * zend_execute_API.c: - The freed one is a hashtable - may matter if Hashtables are allocated - differently - -2003-10-14 Andi Gutmans - - * zend_mm.c: - - Support merging free block which was created by reallocing to smaller - - size. This should fix some performance issues. This code is still not - - thoroughly tested. - -2003-10-09 Zeev Suraski - - * zend_compile.c - zend_execute.c - zend_language_parser.y: - Allow foo::$bar() - -2003-10-07 Rasmus Lerdorf - - * Zend.m4: - MFB bison configure test fix - -2003-10-07 Zeev Suraski - - * zend_execute.c: - Fix bug #17997 (Warning when switch & reference are combined) - - * zend_ini_parser.y: - Fix the fix :) - Not thoroughly tested, but appears to work fine - -2003-10-07 Marcus Boerger - - * zend_ini_parser.y: - Bugfix #25770 Segfault with PHP and bison 1.875 - -2003-10-05 Zeev Suraski - - * zend_object_handlers.c: - Remove unused callback - - * zend_execute.c - zend_object_handlers.c - zend_object_handlers.h - zend_objects_API.c: - Remove redundant callback, simplify API - -2003-10-05 Shane Caraveo - - * (BEFORE_HANDLERS_RESHUFFLE) - zend_API.h: - this little piggy broke lots of things...eg. _function_check_flag in - reflection api. - -2003-10-03 Moriyoshi Koizumi - - * zend_API.c: - Fixed bug #24766 (strange result array from unpack()) - - * zend.h: - Bug #25738 (alloca() related problems on the Darwin platform) - - * zend_API.h: - Ensure lval to have a *boolean* value. - -2003-10-03 Jani Taskinen - - * Zend.m4: - Aligned configure help texts. - -2003-09-30 Moriyoshi Koizumi - - * zend_compile.c: - Remove redundant '\n' - -2003-09-26 Hartmut Holzgraefe - - * zend_alloc.c: - signed/unsigned compiler warning fixes - -2003-09-25 Georg Richter - - * zend_alloc.c: - fixed compiler warning - removed dead code - - * zend_hash.h: - changed ulong to long to avoid compiler warnings (comparison between signed - and unsigned) - -2003-09-22 Ilia Alshanetsky - - * zend.c - zend_language_scanner.l: - Added missing format. - -2003-09-20 Marcus Boerger - - * zend_reflection_api.c: - Add public array Reflection_Class::getDefaultProperties() - -2003-09-18 Marcus Boerger - - * zend_builtin_functions.c: - Nuke vars no longer needed - - * zend_builtin_functions.c - zend_reflection_api.c: - Go with studlyCaps - - * zend_reflection_api.c: - Change tostring() into __toString() to match method name used in casting. - - * zend.c - zend_operators.c: - Fallback to default behaviour for unsupported object type conversions - - * zend_object_handlers.c - zend_object_handlers.h - zend_operators.c: - - Allow partial type conversion support for objects. - - Add support for object to string conversion from userspace by method - __toString() and add a test. - - * zend_API.c: - Add missing check - -2003-09-17 Marcus Boerger - - * zend_compile.c - zend_execute.c: - Show name of missing function as typed - - * zend_default_classes.c: - Use studlyCaps in exception class - - * zend_compile.c: - Go with studlyCaps in error messages/backtrace/reflection output - -2003-09-16 Marcus Boerger - - * zend_reflection_api.c: - - Make it clear whether it is an interface or a class - - Fix static properties - -2003-09-15 Marcus Boerger - - * zend_execute.c: - Revert - need to look for a better solution - - * zend_execute.c: - Bugfix #25547 - -2003-09-15 Zeev Suraski - - * zend_operators.c: - Simplify / fix - -2003-09-14 Marcus Boerger - - * zend.c: - Bugfix #25335 - -2003-09-14 Zeev Suraski - - * zend_operators.c: - Commit 64-bit fixes to the standard operators - by Ard Biesheuvel (abies@php.net) - -2003-09-14 Marcus Boerger - - * zend.h: - Bugfix #25528 (by Ard Biesheuvel) - -2003-09-13 Marcus Boerger - - * zend_alloc.c: - Fix warnings - -2003-09-11 Stanislav Malyshev - - * tests/dtor_scope.phpt: - add test - - * zend_execute_API.c: - ws - - * zend_execute_API.c: - Use scope from method, not from object - -2003-09-11 Marcus Boerger - - * zend_default_classes.c: - Use type instead of constant - -2003-09-08 Marcus Boerger - - * zend_compile.c: - Fix property inheritance where a derived class inherits a public property - and owns it as an implicit public property already (noticed by Brad). - - * zend.c: - Fix registering/derigistering of stdClass in ZTS and NON ZTS mode - -2003-09-07 Marcus Boerger - - * zend_execute.c: - Fix foreach() called with non array - -2003-09-07 Stanislav Malyshev - - * Zend.m4: - check for mach-o/dyld.h - needed for non-PHP ZE build - -2003-09-06 Marcus Boerger - - * zend_default_classes.c: - Disallow to changing the backtrace - - * zend_reflection_api.c: - Add missing newline if no static methods are available - - * zend_reflection_api.c: - - Internal functions shall be static - - Fix more nesting - - * zend_reflection_api.c: - Fix logic - - * zend_reflection_api.c: - - Fix CS: {{{ / }}} - - Fix static reflection_*::export() - - Add class reflection_object which allows to show dynamic properties - - * zend_reflection_api.c: - Use %s where it makes more sense - -2003-09-05 Marcus Boerger - - * zend_reflection_api.c: - Simplify reflection_property::__constructor() and fix property factory - - * zend_reflection_api.c: - - Don't use resorved words as variable names. - - Improve several exception messages. - - Fix Reflection_Property::_construct() / getDeclaringClass() - - * zend_reflection_api.c: - Fix reflection_api::__construct() (noticed by Andrey) - - * zend_default_classes.c: - Provide string casting for exceptions by calling toString() - -2003-09-04 Marcus Boerger - - * zend_API.c - zend_execute.c - zend_object_handlers.c: - Tests show updating consts must happen once at runtime (revert - optimization). - Add tests for static properties. - - * zend_reflection_api.c: - Add reflection_class::getstaticproerties() - -2003-09-03 Marcus Boerger - - * zend_compile.c: - Partly revert and reintroduce hash table entries for the ctor. - - * zend_compile.c: - Nuke unused variable, too - - * zend_compile.c: - - Inheritance applies to __clone() too. - - No need to add additional functions for the constructor. - The handler uses the pointer as intended and doesn't look the the name. - - * zend_compile.c: - Cannot turn a static property into a non static one and vice versa - - * zend_API.c - zend_API.h - zend_compile.c - zend_default_classes.c: - Fix handling of static properties initialized to arrays - - * zend_compile.c: - Add missing error messages when violating static property inheritance - rules. - - * zend_API.c - zend_compile.c - zend_execute.c - zend_object_handlers.c: - Fix static properties. - - * zend_compile.c: - Allow redeclareing a protected property as public. - -2003-09-03 Zeev Suraski - - * zend_compile.c: - Revert bogus patch - One must *never* use E_CORE_* error levels! - -2003-09-03 Marcus Boerger - - * zend_reflection_api.c: - Clearly distinguish between Const, Static and Other members. - -2003-09-02 Marcus Boerger - - * zend_compile.c: - Fix error messages - - * zend_API.c: - Allow redeclaring of protected properties as public (for internal classes). - - * zend_reflection_api.c: - Use appropriate function for property name unmangling. - - * zend_reflection_api.c: - Make these static as noticed by Andrey - - * zend_execute.c - zend_object_handlers.c - zend_objects.c: - Synch/Unify error messages related to function/method calls - - * zend_compile.c: - Fix error level - - * zend_API.c - zend_compile.c: - Currently we cannot support static ctor/dtor - - * zend_reflection_api.c: - These are implicit properties as denoted by the flag. Dynamic properties - only - exist in one single object and currently reflection api is not capable of - showing those. - -2003-08-31 Marcus Boerger - - * zend_reflection_api.c: - Don't repeat first const count(consts) time - - * zend_reflection_api.c: - Beautify output - - * zend_reflection_api.c: - Add reflection_parameters, patch by Timm Friebe - - * zend_default_classes.c: - Excluded chars < 32 when displaying string parameters that would obliterate - output. - -2003-08-31 Zeev Suraski - - * zend_arg_defs.c - zend_builtin_functions.c - zend_modules.h: - Attempt at fixing the linkage problem in Win32 - -2003-08-31 Marcus Boerger - - * zend_execute.c: - Synch error message with other one to fix tests - - * zend_reflection_api.c: - Check whether we may access tat union - - * zend.c: - Revisited: Replace the non portable code by spprintf - - * zend_reflection_api.c: - Using zend_spprintf should be faster here - - * zend.c - zend.h - zend_default_classes.c: - Make vspprintf available as zend utility function. Use it in exception - output. - -2003-08-30 Marcus Boerger - - * zend_default_classes.c: - Actually fetch the parameter - - * zend_default_classes.c - zend_default_classes.h - zend_execute.c - zend_reflection_api.c: - - Calling abstract methods should be a error for consistency reason. - - So in reflection_api we use the reflection_exception again. - -2003-08-30 Andi Gutmans - - * zend_default_classes.c: - - PLEASE stop commiting ^M's - -2003-08-30 Marcus Boerger - - * zend_default_classes.c: - Even though it is ignored this should be correct - - * zend_default_classes.c: - Add frame numer and finally display stack trace in the message. - - * zend_default_classes.c: - Add exception::traceAsString() and exception::toString() - - * zend_reflection_api.c: - fci.function_table & fci.function_name are not needed since we use - zend_fcall_info_cache - - * zend_reflection_api.c: - Be precise - - * zend_reflection_api.c: - Actually using fcc would be a good idea - - * zend_default_classes.c - zend_default_classes.h - zend_execute.c: - - The compiler can't detect all abstract function calls so we need to - check. - - * zend_default_classes.c: - Make those final (see comment) - -2003-08-29 Marcus Boerger - - * zend_API.c - zend_API.h: - - Add zend_merge_properties() which is designed to serve *_fetch_object(). - - Explain drawbacks of object_and_properties_init and - zend_merge_properties. - - * zend_reflection_api.c: - - Use zend_fcall_info_cache in invoke() to improve speed. - -2003-08-29 Zeev Suraski - - * zend_compile.c: - Fix a problem in implicit public properties and inheritance - -2003-08-29 Sascha Schumann - - * zend_hash.c: - improve a number of zend_debug format strings - -2003-08-29 Marcus Boerger - - * zend_builtin_functions.c - zend_builtin_functions.h - zend_default_classes.c: - Need to tell zend_fetch_debug_backtrace() whether to skip top function or - not. - -2003-08-28 Marcus Boerger - - * zend_default_classes.c: - Add public read access to protected - - * zend_default_classes.c - zend_default_classes.h: - Add zend_throw_exception_ex() which allows to format exception messages. - - * zend.c: - Classe tables work this way - - * zend_builtin_functions.c - zend_builtin_functions.h - zend_default_classes.c: - - Split debug_backtrace() into lowlevel c function and php function wrapper - - Add trace property to default method based on new - zend_fetch_debug_backtrace - -2003-08-28 Sascha Schumann - - * zend.h: - older gccs don't understand attribute((format)) on function pointers - - * zend.h: - ZEND_GCC_VERSION should always be defined to a number so we can use - simple comparisons all the time. - - * zend.h - zend_alloc.c - zend_builtin_functions.c - zend_compile.c - zend_execute.c: - Add format attribute to a number of functions - - Kill a few warnings - - * zend.h - zend_alloc.h: - cleanup & centralize ZEND_GCC_VERSION and ZEND_ATTRIBUTE_MALLOC so that - they can be used by downstream applications - - * zend_alloc.h: - Enable attribute((malloc)) for GCC 2.96 - - * zend_alloc.h: - GCC 2 does not know about malloc yet. - - * zend_alloc.h: - provide attribute((malloc)) where appropiate - -2003-08-27 Marcus Boerger - - * zend_reflection_api.c: - Nuke unused variable - - * zend_reflection_api.c: - Fix reflection_class::newInstance() - -2003-08-25 Jani Taskinen - - * zend.h: - - Fixed bug #25240 (spaces before pre-processor directives) - -2003-08-24 Marcus Boerger - - * zend_API.c: - Add missing check - - * zend_API.c: - Fix memory source of string duplication for non internal properties - - * zend_API.c - zend_API.h - zend_compile.c - zend_default_classes.c - zend_execute_API.c - zend_variables.c - zend_variables.h: - - Provide appropriate way to destroy internal zval's. - - Allow internal zval's of type string and disallow complex types. - - Define the default string for extensions at class level instead of ctor. - - * zend_API.h - zend_compile.h - zend_reflection_api.c: - Don't identify alias'ed functions - -2003-08-24 Zeev Suraski - - * zend_API.c: - Use ""'s if you want empty strings. We want to crash on errors. - - * zend_compile.c: - Use pemalloc() - -2003-08-24 Marcus Boerger - - * zend_API.c: - Allow NULL, too - -2003-08-24 Zeev Suraski - - * zend_API.c: - Get rid of more ^M's - Marcus, please check your CVS client! - - * zend_default_classes.c: - Get rid of more ^M's - - * zend_compile.c: - line endings fix - - * zend_execute.c: - Never, ever, overwrite the refcount element of a connected zval! - -2003-08-24 Marcus Boerger - - * zend_reflection_api.c: - Add dedicated reflection_exception - - * zend_default_classes.c - zend_default_classes.h: - Allow to throw instances of classes derived from exception - - * zend.c - zend_default_classes.c - zend_default_classes.h - zend_execute.h - zend_execute_API.c: - - Provide a unified way to display uncaught exceptions, which shows - file/line/message info if possible. - - Add zend_eval_string_ex() to be able to handle exceptions in eval'd - code. - - Use above function to fix memleaks in CLI. - - * zend_reflection_api.c: - Make invoke() work - - * zend_reflection_api.c: - zend_parse_parameters 'O' works the way we need here - - * zend_reflection_api.c: - Not needed - - * zend_default_classes.c: - Make use method macros - - * zend_API.h: - One of PPP is needed, too - - * zend_reflection_api.c: - - Add Reflection_Function::isAlias - - Use ZEND_ME/ZEND_METHOD - - Fix static entries - - * zend_API.h - zend_compile.h: - - Add fn_flag ZEND_ACC_ALIAS - - Unify way of function_entry generation by new macro ZEND_FENTRY - - * zend_API.c: - Fix fn_flags handling - - * zend_API.c - zend_API.h - zend_default_classes.c: - Add property read code and use that in default exception class - -2003-08-23 Marcus Boerger - - * zend_default_classes.c - zend_default_classes.h - zend_reflection_api.c: - Allow zend_throw_exception() to also set the exception code - - * zend_default_classes.c: - Exception has 4 protected default properties (message,code,file,line). - They are all initialized at c-level constructor correctly. - - * zend_API.c - zend_API.h - zend_compile.c - zend_compile.h: - Internal classes can now have default properties. - - * zend_reflection_api.c: - Show ctor/dtor information and those don't return anything - - * zend_API.c - zend_compile.c - zend_compile.h - zend_execute.c: - - Flag ctor/dtor methods - - Use this to prevent memleaks when an exception gets thrown in ctors. - - * zend_default_classes.c: - Make exception code more robust - -2003-08-22 Ilia Alshanetsky - - * zend_builtin_functions.c - zend_constants.h: - Replace *magic number* with a much nicer define. - - * zend_builtin_functions.c: - Set 2147483647 as the module number of user defined constants - Fixed a few bugs and cleaned up get_defined_constants(). - -2003-08-21 Marcus Boerger - - * zend_default_classes.c - zend_default_classes.h - zend_reflection_api.c: - Add function 'zend_throw_exception(char *message, int duplicate - TSRMLS_DC);' - to provide an easy way to throw exceptions for extension developers. - - * zend_API.c: - If ce not given than any object would do - - * zend_API.c: - Paramspec 'O' / zend_parse_method_params(): only if given check the class - type - -2003-08-20 Zeev Suraski - - * zend_alloc.c: - adhere to silence - -2003-08-20 Marcus Boerger - - * zend_alloc.c: - Fix counting number of leaks - -2003-08-19 Wez Furlong - - * zend_execute.c: - fix build - -2003-08-18 Wez Furlong - - * zend_ini.h: - linkage for C++ - -2003-08-18 Zeev Suraski - - * ZendTS.dsp - zend_execute.c - zend_execute_locks.h: - Prevent access to internal engine functionality - - * zend.h - zend_alloc.c - zend_compile.h - zend_execute.c: - - Improve tracking - - Fix several overloading issues - - * zend_API.c - zend_alloc.h - zend_hash.c - zend_hash.h - zend_ts_hash.c - zend_ts_hash.c - zend_ts_hash.h - zend_ts_hash.h: - Improve tracking - - * zend_compile.c: - ws - -2003-08-17 Marcus Boerger - - * zend_API.h - zend_builtin_functions.c - zend_execute.c - zend_object_handlers.c - zend_operators.c - zend_reflection_api.c: - Fix warnings - -2003-08-17 Sascha Schumann - - * zend.h: - One bit fields need to be unsigned, otherwise there is no storage for - the sign bit - - "A signed bit field has a length of 1 bit." - - * zend_API.h: - explicitly cast size_t to zend_uint to avoid warnings on 64 bit platforms. - -2003-08-17 Marcus Boerger - - * zend_execute.c: - Remove unnecessary if - - * zend_execute.c: - Put the code where it belongs - fixes a warning and confusion - - * zend_compile.c - zend_execute.c: - Implement a TBD: JMP to the end of foreach - - * zend_compile.c: - WS - - * zend_API.c: - - Show class names in error messages when dealing with methods - - Mark class as abstract if it gets an abstract method - -2003-08-16 Marcus Boerger - - * zend_API.c - zend_API.h - zend_reflection_api.c: - Simplify abstract method declaration - - * zend_object_handlers.h: - WS - -2003-08-15 Sascha Schumann - - * zend_execute.c - zend_object_handlers.c: - Restrict scope of inline functions to compile unit - - Submitted by: Jason Greene - -2003-08-13 Marcus Boerger - - * zend_objects_API.c: - Add missing entry - - * zend_API.c: - - Show classes in case of methods - - Using sprintf here was a bad idea - -2003-08-12 Zeev Suraski - - * zend_hash.c: - Remove bogus patch - the number of elements is unrelated - -2003-08-12 Zeev Suraski - - * zend_hash.c: - Remove bogus patch - the number of elements is unrelated - -2003-08-12 Zeev Suraski - - * zend_hash.c: - Remove bogus patch - the number of elements is unrelated - -2003-08-12 Zeev Suraski - - * zend_hash.c: - Remove bogus patch - the number of elements is unrelated - -2003-08-12 Zeev Suraski - - * zend_hash.c: - Remove bogus patch - the number of elements is unrelated - -2003-08-11 Marcus Boerger - - * zend_hash.c - zend_hash.h: - Bugfix 21918 - -2003-08-11 Masaki Fujimoto - - * Zend.m4 - flex.skl - zend_compile.c - zend_globals.h - zend_highlight.c - zend_language_scanner.h - zend_language_scanner.l - zend_multibyte.c - zend_multibyte.h: - - added script encoding support to Zend Engine 2. - this enables ZE2 to gracefully parse scripts written in UTF-8 (with - BOM), - UTF-16, UTF-32, Shift_JIS, ISO-2022-JP etc... (when configured with - '--enable-zend-multibyte' and '--enable-mbstring') - -2003-08-10 Marcus Boerger - - * zend_compile.c: - Bugfix #24637 __destruct not called - -2003-08-09 Moriyoshi Koizumi - - * zend_compile.c: - Fix segfault when a referenced parameter is specified with typehint. - Result of the node will never be used because verify_instanceof handler - has - been eliminated. - -2003-08-09 Marcus Boerger - - * zend_objects.c: - Precise destructor errors - -2003-08-07 Moriyoshi Koizumi - - * tests/bug21478.phpt: - Add missing right parensis - -2003-08-07 Zeev Suraski - - * zend_execute_API.c: - Clarify use of original_function_state_ptr - -2003-08-07 Marcus Boerger - - * zend_execute_API.c: - - Fix warnings - - Fix code - -2003-08-06 Zeev Suraski - - * zend_execute_API.c: - clarify :) - -2003-08-05 Jani Taskinen - - * zend_execute_API.c: - Fix the build - -2003-08-05 Zeev Suraski - - * zend_API.h - zend_execute_API.c - zend_reflection_api.c: - Try to put an end to the endless number of call_user_function variants. - zend_call_function() now takes a structure that should contain all of the - necessary information. If further information is necessary in the future, - then we'll be able to add it without having to introduce a new function. - - As for caching - the 2nd, optional argument is a struct that can hold all - of the information that's necessary to invoke the function, including its - handler, scope and object it operates on (if any). Note that you may only - use a cache if the arguments you provide to zend_call_function() are - identical to the ones of the last call, except for the argument and return - value information. - - - The recently introduced fast_call_user_function() was removed - - I fixed most of the places that used fast_call_user_function() to use - caching - but there are still some that need to be fixed (XML and reflection) - -2003-08-05 Stanislav Malyshev - - * tests/bug24699.phpt: - fix syntax - - * zend_execute_API.c: - remove stack clean - it makes trouble - -2003-08-04 Marcus Boerger - - * zend_execute.c: - Fix ZTS - - * zend_execute_API.c: - Nuke unused variables - - * zend_reflection_api.c: - Add function/method parameter reflection - -2003-08-04 Ilia Alshanetsky - - * zend_execute_API.c - tests/bug23104.phpt: - Fixed bug #23104 (hash position of static arrays not being reset) - -2003-08-04 Stanislav Malyshev - - * zend_execute_API.c: - oops. forgot function - - * zend_execute_API.c: - fix crash #24842 - - * zend_compile.c: - fix leaks: bug #24831 - - * zend_execute.c: - use get_obj_zval_ptr - - * tests/bug24884.phpt: - add test - - * zend_execute.c: - Fix #24884 - clone $this - -2003-08-04 Zeev Suraski - - * zend_compile.c: - Simplify code using XOR - - * zend.h: - Add logical XOR, proves to be quite useful lately - - * zend_opcode.c: - This check shouldn't be necessary - -2003-08-03 Marcus Boerger - - * zend_opcode.c: - Fix crash - - * zend_compile.c: - Fix test and add missing initialization - -2003-08-03 Zeev Suraski - - * zend_API.c: - Ensure functions have a valid access level - - * zend_API.c: - Default to public - -2003-08-03 Marcus Boerger - - * zend_API.c: - Not needed, will be copied from ptr->flags later - - * zend_builtin_functions.c: - Add missing arg info - -2003-08-03 Moriyoshi Koizumi - - * tests/bug24635.phpt - tests/bug24699.phpt: - Style & WS fixes - -2003-08-03 Zeev Suraski - - * (BEFORE_ARG_INFO) - zend_API.c: - No need for this initialization - this function initializes all of the - elements of zend_internal_function - - * (BEFORE_ARG_INFO) - zend_execute.c: - Clean up. extended_value can only contain either ZEND_UNSET_DIM or - ZEND_UNSET_OBJ. - - * (BEFORE_ARG_INFO) - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute.h - zend_execute_API.c: - Generalize fetch_class - -2003-08-02 Marcus Boerger - - * zend_API.c: - Initialize all struct members: Necessary for reflection - - * zend_reflection_api.c: - Show interfaces - -2003-08-02 Wez Furlong - - * zend_API.c: - fix usage of instanceof here too - -2003-08-02 Marcus Boerger - - * zend_execute.c: - Fix warning - -2003-08-01 Wez Furlong - - * zend_API.c: - better fix... - - * zend_API.c: - Fix "O" format for zend_parse_parameters - -2003-07-31 Zeev Suraski - - * zend_API.c: - Use instanceof_function() - - * zend_compile.c - zend_execute.c: - Finish the array overloading patch - - * zend_execute.c: - Cleanup - -2003-07-31 Andi Gutmans - - * zend_hash.c: - - Fix logic. It was the wrong way around. - -2003-07-30 Andi Gutmans - - * zend_execute.c - zend_hash.c: - - Fix problem with hash when updating same bucket with data of different - sizes one after another. - - Fix number of arguments to read_dimension. - -2003-07-30 Zeev Suraski - - * zend_compile.c - zend_compile.h - zend_execute.c: - Get rid of an opcode - - * zend_compile.c - zend_execute.c: - Support overloading of $foo["bar"] += "baz" - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_object_handlers.c - zend_object_handlers.h: - Improve array overloading - support unset($foo["bar"]) - - * zend_compile.h: - Remove garbage - - * zend.c - zend.h - zend_API.c - zend_API.h - zend_compile.h - zend_modules.h: - Add exec_finished() callback for modules - this is the last place where the - modules may touch the symbol table reliably - -2003-07-29 Ilia Alshanetsky - - * tests/bug22836.phpt: - Test case for bug #22836. - -2003-07-29 Jani Taskinen - - * zend.c: - Remove the obfuscation caused by the double "#ifdef ZTS" - -2003-07-27 Stanislav Malyshev - - * zend_compile.c: - fix compare - - * zend_compile.c: - use zend_binary_strncasecmp - - * zend_execute_API.c: - change shutdown order so that dtors would coexist with object error - handlers - - * zend_execute.c: - clean the right one - - * zend_execute_API.c: - make shutdown more granular so in case some dtor goes ape we still - can shut down cleanly - - * zend_compile.c - zend_execute.c - zend_objects.c: - make clone and throw coexist peacefully - - * tests/bug24635.phpt - tests/bug24699.phpt: - add test - - * zend_execute.c: - fix #24635: clean hash before putting into cache - - * zend_language_scanner.l: - fix crash #24550 - - * zend_compile.c - zend_constants.c: - fix leaks with class constants (bug #24699) - - * zend_compile.c: - make __clone call case insensitive, just as other calls are - -2003-07-24 Jani Taskinen - - * tests/bug19859.phpt - tests/bug20240.phpt - tests/bug20242.phpt - tests/bug21478.phpt - tests/bug21888.phpt - tests/bug22725.phpt - tests/bug24436.phpt: - cleanup (CS+ws) - -2003-07-24 Zeev Suraski - - * tests/bug24436.phpt: - Fix expectations :) - - * zend_execute.c: - Fix logic and comments in ASSIGN_DIM - - * zend_compile.c: - Fix another HANDLE_NUMERIC bug. Looks like you opened Pandora's box, - Sterling ;) - - * zend_builtin_functions.c: - Fix each() binary safety for keys - - * zend_execute.c: - Fix assignments to numeric array indices - - * zend_compile.c: - Remove useless code - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_language_parser.y: - Support references in foreach() - Syntax: - foreach ($arr as &$val) - foreach ($arr as $key => &$val) - - * zend_execute.c: - Fix binary safety in foreach() keys (fixes bug #24783) - - * zend.c: - Make print_r() binary safe with keys - -2003-07-23 Stanislav Malyshev - - * zend.h - zend_compile.c - zend_compile.h - zend_execute.c - zend_globals.h - zend_opcode.c: - Remove namespace leftovers - -2003-07-23 Zeev Suraski - - * zend_hash.c - zend_hash.h: - Go back to ZE1-like code - -2003-07-23 Sebastian Bergmann - - * zend_reflection_api.c: - Fix segfault. Patch by Timm Friebe . - -2003-07-22 Marcus Boerger - - * zend_hash.h: - Fix for the moment - -2003-07-22 Zeev Suraski - - * zend_execute.c - zend_hash.c - zend_hash.h - zend_operators.c - zend_operators.h: - Improve infrastructure of numeric handling of elements in symbol tables. - - When you want to work with a symbol table, and you don't know whether you - have a numeric ("string that looks like a number") or a string element in - your hands, use zend_symtable_*() functions, in place of zend_hash_*() - functions. - - * zend_execute.c - zend_object_handlers.c - zend_object_handlers.h - zend_objects_API.c: - Fix isset()/empty() for non-trivial object elements - (API change - read_property now accepts an extra element) - Fixes bug #24436 - -2003-07-21 Zeev Suraski - - * zend_object_handlers.c: - Fix bug #24499 - - * zend_execute.c: - Revert fix for #24729, and refix - -2003-07-21 Marcus Boerger - - * zend_execute.c: - Go with a better fix for #24729 - -2003-07-21 George Schlossnagle - - * zend_API.h: - reverted at Andi's request. replaced with more generic wrapper. - -2003-07-20 Marcus Boerger - - * zend_execute.c: - Bugfix #24729 = new ; causes crash when is not set - -2003-07-20 George Schlossnagle - - * zend_reflection_api.c: - should nt here - -2003-07-20 Marcus Boerger - - * zend_reflection_api.c: - Fix warnings and whitespace in output - - * zend_reflection_api.c: - Add support for instances in Reflection_Class. - -2003-07-20 George Schlossnagle - - * zend_reflection_api.c: - removed references to smart_str, replaced with private string management - function. When snprintf is integrated into the engine, string_printf - should be altered to use that. - -2003-07-20 Marcus Boerger - - * zend_objects_API.c: - More informative errors here and these are real core errors - - * zend_execute.c: - Fix uncloneable objetcs - -2003-07-20 George Schlossnagle - - * zend_reflection_api.c: - more of Timm's implementation. - -2003-07-20 Marcus Boerger - - * zend_hash.c - zend_hash.h: - Make it a macro - -2003-07-19 Marcus Boerger - - * zend_hash.c: - This is meant to be used in for(;has_more;next) - - * zend_hash.c - zend_hash.h: - Add missing function to ease implementations - -2003-07-19 Jani Taskinen - - * zend.h: - Fix the HPUX alloca fix as suggested by Sascha - -2003-07-19 Marcus Boerger - - * zend_objects.c - zend_objects.h: - Shuffle code to ease writing clone handlers - -2003-07-19 Andi Gutmans - - * zend.h: - - Don't use alloca on HP-UX (Moriyoshi Koizumi ) - -2003-07-16 Zeev Suraski - - * zend_compile.c: - Fix bug in the verification of interface-function implementation - - * zend_compile.c - zend_compile.h - zend_execute.c: - More cleanup for assign-op handling of objects - - * zend_alloc.c: - Fix warning - -2003-07-12 Andi Gutmans - - * zend_API.c: - - WS - -2003-07-11 Andi Gutmans - - * zend_API.c: - - Add support for Z in zend_parse_parameters(). It will allow the extension - - to retreive the zval **, thus allowing it to use the convert_to_*_ex() - - family of functions to do type conversions without effecting the value - in - - the engine itself. (Josh Fuhs ) - -2003-07-08 Zeev Suraski - - * zend_execute.c: - initial refactoring for assign-op handling of objects - -2003-07-07 Zeev Suraski - - * zend_API.c - zend_API.h - zend_compile.c - zend_compile.h: - Rework zend_do_declare_property and related code into one code base - - * zend_API.c: - Fix bug - - * zend_execute.c - zend_object_handlers.c - zend_object_handlers.h - zend_objects_API.c: - Add get_dim callback - - * zend_execute.c: - Fix naming convention - -2003-07-07 Derick Rethans - - * zend_execute.c: - - Help Zeev fixing ghosts :) - -2003-07-07 Zeev Suraski - - * zend_object_handlers.c - zend_object_handlers.h: - whitespace - - * zend_objects_API.c: - Fix & whitespace - - * zend_object_handlers.c: - fixlet - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_object_handlers.c - zend_object_handlers.h: - Initial support for overloading of array syntax for objects (very initial) - -2003-07-06 George Schlossnagle - - * zend_API.c - zend_API.h: - add convenience functions or adding class properties. Ok'd for commit by - Andi. - -2003-07-04 Andi Gutmans - - * zend_alloc.c - zend_mm.c - zend_mm.h: - - Add heap to memory manager. This should improve performance. - - Enabling it by default so that it gets tested. We should decide before - beta 2 if we want to revert back to malloc or not. - - Thanks to Sebastian for benchmarking it - -2003-07-04 Sebastian Bergmann - - * zend_reflection_api.c: - 2 * TSRMLS_FETCH() -> 1 * TSRMLS_DC - -2003-07-04 George Schlossnagle - - * zend_reflection_api.c: - ws fix - -2003-07-03 Marcus Boerger - - * zend_compile.c: - Allow final private methods - -2003-07-03 George Schlossnagle - - * zend_reflection_api.c: - win build fixes (Rob Richards) - - * zend_reflection_api.c: - can't forget Andrei - -2003-07-03 Stanislav Malyshev - - * zend_compile.c - zend_execute.c: - enable Classname() constructor to be called via parent::__constructor() - - * tests/bug19859.phpt: - add test for Bug #19859 - - * zend_API.c - zend_execute_API.c: - Fix bug #19859 - allow fast_call_user_function to support __call - - * zend_builtin_functions.c: - fix the get_parent_class fix - -2003-07-03 George Schlossnagle - - * zend_reflection_api.c: - more of Timm's patches, and mod authors line to give credit where credit is - due. - -2003-07-02 Marcus Boerger - - * zend_objects.c: - Temporairy solution to overcome shutdown propbelms with objects that have - hidden destructors. - - * zend_objects.c: - Reorganize this a bit to ensure the object memory is destructed before - showing the error. - - * zend_builtin_functions.c: - Bug #24399: is_subclass_of(): fix memleak, too - -2003-07-02 Zeev Suraski - - * zend_execute.c: - Throughly fix scoping change. Fixes, among other things, bug #24403 - -2003-07-02 Andi Gutmans - - * zend_compile.c - zend_globals.h: - - Nuke CG(in_clone_method) - -2003-07-02 Zeev Suraski - - * zend_execute.c: - Fix for bug #22367. - Heads up - this will break syntactical compatiblity, return($foo) will - not work with functions that return references - return $foo should be - used - instead. It never worked well before, and caused all sorts of odd bugs. - It *might* be possible to support this specifically, albeit unlikely - -2003-07-02 Sterling Hughes - - * zend_execute_API.c: - optimize the case where the object is really a class name, as we don't need - to set EX(object) here. - - * zend_execute_API.c: - Timm Friebe points out that object detection should be done regardless of - the function pointer - -2003-07-02 Marcus Boerger - - * zend_objects.c: - Finally fix property cloning and fix the tests accordingly. - - -2003-07-02 Sterling Hughes - - * zend_builtin_functions.c: - Fix bug #24445 - -2003-07-01 Marcus Boerger - - * zend_objects.c: - Fix __clone(). - - - * tests/bug20240.phpt: - Use both destructor and shutdown - - * zend_execute_API.c: - small bugfix - - * tests/bug24436.php - tests/bug24436.phpt: - Rename test to correct extension - - * zend_execute.c: - __clone might not be defined - - * zend_execute.c: - Fix __clone visibility - - * zend_object_handlers.c - zend_object_handlers.h - zend_objects.c: - Fix destructor visibility - -2003-07-01 Derick Rethans - - * tests/bug24436.php: - - Added test for bug #24436 - -2003-07-01 George Schlossnagle - - * zend_reflection_api.c: - Timm Friebe's patches for code celanup and additional functions. - -2003-07-01 Jani Taskinen - - * tests/.cvsignore - tests/bug21478.phpt - tests/zend2.php - tests/zend2.php.txt: - Missing .cvsignore, broken test, renamed zend2.php -> zend2.php.txt - -2003-07-01 Sebastian Bergmann - - * zend_reflection_api.c: - ZTS fixes. - -2003-07-01 George Schlossnagle - - * zend_reflection_api.c: - more incremental changes. add anything that needs a class factory. - - * zend_reflection_api.c: - all the easy parts of Reflection_Class - -2003-06-30 Shane Caraveo - - * zend_operators.h: - this fixes including this header in a c++ file (vs6) - -2003-06-30 Sterling Hughes - - * zend_compile.c: - nuke "main" as a reserved keyword - -2003-06-30 Andi Gutmans - - * zend.c - zend_API.c - zend_compile.c - zend_constants.c - zend_execute.c - zend_execute_API.c - zend_mm.c - zend_opcode.c - zend_reflection_api.c: - - ZE coding style requires if ( instead of if( - -2003-06-30 Sebastian Bergmann - - * zend_reflection_api.c: - ZTS fixes. Remove unused local variables. - -2003-06-30 George Schlossnagle - - * Makefile.am - Zend.dsp - ZendTS.dsp - zend_default_classes.c - zend_reflection_api.c - zend_reflection_api.h: - added support for Reflection_Function, the first part of - the reflection api - -2003-06-30 Sterling Hughes - - * zend_builtin_functions.c: - move the check down a little so it catches all cases - - * zend_builtin_functions.c: - Fix bug #24399 from an excellent test case by edin - -2003-06-30 Zeev Suraski - - * zend_execute.c: - Semantically it's a refcount increase, not a lock... - - * zend_execute.c: - Fix 'global' implementation (fixes, at least, bug #24396 - -2003-06-30 Sterling Hughes - - * zend_operators.c: - revert back the optimization for now. - -2003-06-29 Ilia Alshanetsky - - * zend_object_handlers.c: - Fixed bug #24279 (__get() crash when no value is returned) - -2003-06-29 Sebastian Bergmann - - * ZEND_CHANGES: - Remove namespace references. - -2003-06-29 Sterling Hughes - - * zend_operators.c: - Very simple, but very effective optimization. Provides a signifigant speed - improvement to matches done via '=='. This checks that the lengths of two - strings are equal before performing a memcmp() on them. - -2003-06-23 Zeev Suraski - - * zend_execute.c: - Fix crash :) - -2003-06-23 Stanislav Malyshev - - * zend_execute.c: - FIx leak - -2003-06-22 Zeev Suraski - - * zend_execute.c - zend_language_parser.y: - Fix complex expressions for class names in NEW - - * zend_language_parser.y: - Simplify - -2003-06-21 Marcus Boerger - - * zend_language_parser.y: - WS - - * zend_compile.c - zend_compile.h - zend_language_parser.y: - Add final classes - -2003-06-16 Stanislav Malyshev - - * zend_execute.c: - no need to init zval - assignment will init - - * zend_execute.c: - Fix bug #22592 - cascading assignments to string offsets - - * zend_constants.c: - support for self:: and parent:: constants - - * zend_builtin_functions.c: - fix lambda function static vars (related to #17115) - -2003-06-15 Sebastian Bergmann - - * zend_constants.c: - Fix ZTS build. - -2003-06-15 Stanislav Malyshev - - * zend.c: - Fix bug #23279 - exception handler exits after first function call - - * zend_execute_API.c: - No need to duplicate code - zend_get_constant() knows to - handle class constants now - - * zend_execute_API.c: - Fix bug #18872 - Improper handling of class constants used as default - function argument values - - * zend_constants.c: - set ending \0 for string - - * zend_compile.c - zend_constants.c - zend_language_parser.y: - Fix bug #23384 - static class::constant constants should now - work in static & array expressions. - - * zend_execute_API.c: - Fix bug #21800 - initialize opcode handlers in interactive mode - -2003-06-14 Marcus Boerger - - * zend_hash.c: - ecalloc doesn't return NULL - - * zend.c: - Bugfix #24182: va_arg macro error in Zend/zend.c - -2003-06-10 Jani Taskinen - - * zend_multiply.h: - - Missing $Id$ tag - -2003-06-10 James Cox - - * acconfig.h - zend.c - zend.h - zend_API.c - zend_API.h - zend_alloc.c - zend_alloc.h - zend_builtin_functions.c - zend_builtin_functions.h - zend_compile.c - zend_compile.h - zend_config.nw.h - zend_config.w32.h - zend_constants.c - zend_constants.h - zend_default_classes.c - zend_default_classes.h - zend_dynamic_array.c - zend_dynamic_array.h - zend_errors.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_execute_locks.h - zend_extensions.c - zend_extensions.h - zend_fast_cache.h - zend_globals.h - zend_globals_macros.h - zend_hash.c - zend_hash.h - zend_highlight.c - zend_highlight.h - zend_indent.c - zend_indent.h - zend_ini.c - zend_ini.h - zend_ini_parser.y - zend_ini_scanner.h - zend_ini_scanner.l - zend_istdiostream.h - zend_language_parser.y - zend_language_scanner.h - zend_language_scanner.l - zend_list.c - zend_list.h - zend_llist.c - zend_llist.h - zend_mm.c - zend_mm.h - zend_modules.h - zend_multiply.h - zend_object_handlers.c - zend_object_handlers.h - zend_objects.c - zend_objects.h - zend_objects_API.c - zend_objects_API.h - zend_opcode.c - zend_operators.c - zend_operators.h - zend_ptr_stack.c - zend_ptr_stack.h - zend_qsort.c - zend_qsort.h - zend_sprintf.c - zend_stack.c - zend_stack.h - zend_static_allocator.c - zend_static_allocator.h - zend_stream.c - zend_stream.h - zend_ts_hash.c - zend_ts_hash.h - zend_types.h - zend_variables.c - zend_variables.h: - updating license information in the headers. - -2003-06-09 Wez Furlong - - * zend_execute_API.c: - Fix for Bug #23951 - -2003-06-09 Stanislav Malyshev - - * zend_execute.c: - remove NS leftover - -2003-06-09 Zeev Suraski - - * zend_compile.c - zend_compile.h - zend_language_parser.y: - Fix bogus implicit declarations of properties (squash bug #23671) - -2003-06-09 Stanislav Malyshev - - * zend_API.c - zend_execute_API.c: - Support 'self' and 'parent' in call_user_func() - -2003-06-09 Zeev Suraski - - * zend_execute.c: - Fix indirect reference calls to bogus function names - -2003-06-09 Jani Taskinen - - * zend_builtin_functions.c: - ws - -2003-06-08 Zeev Suraski - - * zend_object_handlers.c: - Fix casing issues in access level checks - - * zend.c - zend_compile.c - zend_compile.h: - Nicer handling of protected/private members in print_r() - - * zend_execute.c: - Fix handling of object property assignments in switch expressions - (bug #23925) - - * zend_builtin_functions.c: - Fix set_error_handler() - -2003-06-06 Sascha Schumann - - * zend_multiply.h: - mfb #24025 fix - -2003-06-04 Stanislav Malyshev - - * zend.c: - fix non-ZTS build - -2003-06-04 Sebastian Bergmann - - * zend.c: - Fix segfault. Again. - -2003-06-04 Stanislav Malyshev - - * zend.c - zend.h - zend_API.c - zend_API.h - zend_builtin_functions.c - zend_object_handlers.c: - rm namespace leftovers - -2003-06-04 Sebastian Bergmann - - * zend.c: - Fix segfault. #Hopefully not a Voodoo Fix[TM]. - -2003-06-02 Sebastian Bergmann - - * zend.c - zend_execute.h: - Leftover. - -2003-06-02 Stanislav Malyshev - - * zend.c - zend.h - zend_API.c - zend_API.h - zend_builtin_functions.c - zend_compile.c - zend_compile.h - zend_constants.c - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_globals.h - zend_language_parser.y - zend_language_scanner.l - zend_object_handlers.c - zend_opcode.c: - MEGA-patch: namespaces are R.I.P. - -2003-06-01 Marcus Boerger - - * tests/zend2.php: - No nested classes - - * tests/bug20240.phpt - tests/bug20242.phpt - tests/bug21478.phpt - tests/bug21888.phpt - tests/bug22725.phpt: - Add some ZE2 bug tests - - * zend_opcode.c: - Bugfix #23670: implements and extends cause Apache 2 crash - - * zend_constants.c: - Do it correct always - - * zend_compile.h: - Defining it once is enough - -2003-05-31 Marcus Boerger - - * zend.c: - Fix init shutdown - -2003-05-31 Sterling Hughes - - * zend_compile.c - zend_execute.c: - revert the function call caching patch until a new solution is decided - upon. - -2003-05-31 Marcus Boerger - - * zend_constants.c: - Fix constants (noticed by David Brown ) - - * zend_constants.c: - c->name_len already contains the '\0' - -2003-05-30 Stanislav Malyshev - - * zend_execute.c: - fix crash on exceptions when return value of the inside function is used - -2003-05-29 Marcus Boerger - - * zend_compile.c - zend_language_parser.y: - Fix ~ operator in class constants. - - * zend_compile.c - zend_compile.h - zend_operators.c: - Faster interface inheritance & faster inheritance checks - - * zend_language_scanner.l: - CS - -2003-05-29 Wez Furlong - - * zend_compile.c: - Fix Bug #23285 (Potential Stack Overflow in zendlex). - -2003-05-28 Sterling Hughes - - * zend_alloc.c: - no reason to do this at runtime - - * zend_compile.c - zend_execute.c: - Cache function call lookups with loops (store in a temporary variable on - the - result opline). - Assuming lazy concensus on message that GeorgeS sent to the list last week - -2003-05-27 Sterling Hughes - - * zend.c - zend_object_handlers.c - zend_object_handlers.h - zend_operators.c: - Assume lazy consensus regarding the cast_object() patch. *Only* - implemented - from a internals perspective. This callback has been very useful for both - ext/mono and ext/simplexml - -2003-05-26 Marcus Boerger - - * zend_language_scanner.l: - Add pseudo constant __METHOD__ to easily report namespace::class::method. - - -2003-05-23 Marcus Boerger - - * zend_API.h: - Revert to sizeof() - -2003-05-23 Sterling Hughes - - * zend_execute.c - zend_hash.c - zend_operators.c - zend_operators.h: - move HANDLE_NUMERIC() from the hash table implementation upstream to the - places that actually need to use it. - -2003-05-22 Marcus Boerger - - * zend_execute.c: - No need to copy here unless implicit_clone is active (noticed by rob) - -2003-05-21 Marcus Boerger - - * zend_API.c - zend_builtin_functions.c - zend_constants.c - zend_object_handlers.c: - Make use optimized string lowering - - * zend_operators.c - zend_operators.h: - Use same parameter order as strcpy() - - * zend_API.c - zend_execute.c - zend_execute_API.c - zend_operators.c - zend_operators.h: - Make zend_str_tolower_copy() a copy function (like stccpy). - Supply a dup version (like estrdup). - Fix tolower() handling. - -2003-05-21 Jani Taskinen - - * zend_builtin_functions.c: - Fixed bug #23619 (set_error_handler() registered handler not called for - object instances). (Jani, waboring@qualys.com) - -2003-05-21 Sterling Hughes - - * zend_operators.c: - optimize loops. The check only exists for integers because that's the more - common optimization, and you actually lose performance if you check for - a double too (wierd but true). - - * zend_mm.h: - add some logic to detect zend_mm, which is really only useful when thread - safety support is enabled. - - * zend_mm.h: - leave this off until its more ready/stable - php5 actually beats php4.3.* in my benchmarks now - - - * zend_API.c: - use zend_str_tolower_copy() - - * zend_execute.c: - Bottom drawer optimization to avoid this comparison, but this OP is - executed - quite often (all of the fetch_* ops) - -2003-05-20 Sterling Hughes - - * zend_operators.c: - bah humbug, use the pointer based version, which turns out to be an - instruction - faster - - * zend_operators.c: - use pointer arithmetic for the normal zend_str_tolower() - -2003-05-20 Marcus Boerger - - * zend_execute.c: - No need to copy the zval unless __clone() is called - -2003-05-20 Sterling Hughes - - * zend_operators.c: - make this faster and sexier - - * zend_execute.c: - use the new zend_str_tolower_copy() function - - * zend_operators.c: - doesn't need to be register - - * zend_execute_API.c - zend_operators.c - zend_operators.h: - optimize the lookups by avoiding a copy and then another pass - - Naked Dancing Girls should be given to: Myself, Zeev, Marcus, - and George Schlossnagle (in no particular order) - - * zend_API.h - zend_execute_API.c: - add fast_call_user_function() - -2003-05-20 Hartmut Holzgraefe - - * zend_API.h - zend_constants.h - zend_operators.h: - C++ compile fixes - -2003-05-19 Marcus Boerger - - * zend_execute.c: - Fix exception memleak - -2003-05-19 Stanislav Malyshev - - * zend_compile.c - zend_execute.c: - fix __clone - -2003-05-12 Marcus Boerger - - * zend_execute_API.c: - One function call is enough - -2003-05-08 Marcus Boerger - - * zend_compile.c: - Inheritance fix - -2003-05-07 Edin Kadribasic - - * zend_compile.c: - Reverting Marcus' incomplete patch which broke the build. - -2003-05-07 Marcus Boerger - - * zend_compile.c: - Inheritance fixes - -2003-05-04 Marcus Boerger - - * zend_API.c: - Fix namespace issue: Only CG is needed here - - * zend_API.c - zend_API.h: - Allow functions in internal namespaces (for example factories) - - * zend_execute.c: - Modify the abstract error message so that it shows up to three methods not - implemented. - - * zend_execute.c: - Fix warnings - - * zend_compile.c: - Don't inherit twice what is needed only once - - * zend.c: - Fix bug #23162 user_error() crashs if > 1024 bytes (Marcus, Moriyoshi) - -2003-05-04 Sterling Hughes - - * zend_default_classes.h: - semicolon - -2003-05-03 Sterling Hughes - - * zend_default_classes.h: - proto - - * zend_default_classes.c: - add an accessor for the default exception - -2003-04-29 Sascha Schumann - - * zend_multiply.h: - Fix the *= operator - - Slightly modified patch by Wez Furlong - -2003-04-25 Jani Taskinen - - * zend_language_scanner.l: - Fixed bug #21820 ("$arr[foo]" generates bogus E_NOTICE, should be E_PARSE) - -2003-04-24 Sascha Schumann - - * zend_alloc.c - zend_alloc.h - zend_multiply.h: - add safe_emalloc - -2003-04-21 Stanislav Malyshev - - * zend.c - zend_API.c - zend_API.h - zend_builtin_functions.c - zend_object_handlers.c: - Change get_class() so that it returns qualified names for namespaced - classes. - - *HEADS UP*: get_class_name() handler interface is changed, now it should - allocate the space it returns with emalloc, and the users free it. If - anyone has problems with it or has suggestions how to do it without this - - please tell. - - Also: make function_exists() understand namespaces. - - * zend_execute.c: - make import * fail if such classes or functions already there - -2003-04-20 Sterling Hughes - - * zend_compile.c: - Add check for final properties - -2003-04-20 Stanislav Malyshev - - * zend_execute_API.c: - Check name before '::' so that it would be a namespace in - zend_lookup_ns_class - - * zend_builtin_functions.c: - refine the set_error_handler fix - - * zend_builtin_functions.c: - Fix for bug #21094 (set_error_handler can not accept methods), - by Timm Friebe - -2003-04-19 Sebastian Bergmann - - * zend.c: - Corrected patch by Marcus Börger . - -2003-04-18 Sterling Hughes - - * zend.c - zend_opcode.c: - Patch by Marcus Börger to fix some memleaks - -2003-04-18 Derick Rethans - - * zend.h - zend_extensions.c: - - Revert my symbol fix patch, and merge in Stas' fixes to Zend Engine 1. - - * zend.h: - - MacOSX also prepends the _ before symbols in bundles - -2003-04-17 Sebastian Bergmann - - * zend.c: - Patch by Marcus Börger . - -2003-04-11 Sebastian Bergmann - - * zend_compile.c - zend_compile.h: - Fix warnings. - -2003-04-10 Sterling Hughes - - * zend_compile.c: - satisfy andi's switch fetish ;-) - -2003-04-10 Sebastian Bergmann - - * zend_compile.c: - Fix ZTS build. Fix warning. - - * ZEND_CHANGES: - Document 'const' keyword. - -2003-04-10 Sterling Hughes - - * zend_compile.c - zend_compile.h - zend_language_parser.y: - allow expressions within constants, so the following is possible - - class foo { - const a = 1<<0; - const b = 1<<1; - const c = a | b; - } - - this makes const a compile-time expression. all other operators are - unaffected. - -2003-04-10 Zeev Suraski - - * zend_language_parser.y - zend_language_scanner.l: - Revert Harald's commit - -2003-04-10 George Schlossnagle - - * zend_language_parser.y: - One line fix so that it will compile - -2003-04-09 Harald Radi - - * zend_language_parser.y - zend_language_scanner.l: - removing the *syntactical sugar* again - - -2003-04-08 Andrei Zmievski - - * zend_builtin_functions.c: - Switch some functions to use new zend_lookup_ns_class() methods. This - means that they will accept both simple and fully qualified class names. - - * zend_API.c - zend_API.h: - Rename zend_register_internal_class_in_ns() to a better, less filling, - but with the same great taste zend_register_internal_ns_class(). - - * zend_execute.h - zend_execute_API.c: - Add zend_lookup_ns_class() function. - - * zend_operators.h: - Move memnstr into Zend and make an alias for BC in PHP. - -2003-04-07 Jani Taskinen - - * zend_language_scanner.l: - Fixed bug #23093 (highlight_string() crashed with __FUNCTION__) - -2003-04-07 Sterling Hughes - - * zend_compile.h: - add markers that make this file easy to parse for external sources - -2003-04-04 Andrei Zmievski - - * zend_API.h: - Introduce ZEND_ME() and ZEND_METHOD() macros. Use these for declaring - class methods to avoid name collisions. - -2003-04-04 Stanislav Malyshev - - * zend_API.c - zend_API.h: - Fix namespace issues - -2003-04-03 Andrei Zmievski - - * zend_API.c: - Patch from Timm Friede for when EG(active_namespace) is NULL initially. - - * zend.c - zend_API.c - zend_compile.c: - Initialize all relevant zend_class_entry fields to avoid accidental - crashes. - -2003-04-03 Sebastian Bergmann - - * zend_list.c: - Leftover. - -2003-04-03 Sterling Hughes - - * zend_list.c - zend_list.h: - i will not commit before 12:00 - i will not commit before 12:00 - i will not commit before 12:00 - i will not commit before 12:00 - i will not commit before 12:00 - i will not commit before 12:00 - i will not commit before 12:00 - i will not commit before 12:00 - i will not commit before 12:00 - i will not commit before 12:00 - i will not commit before 12:00 - i will not commit before 12:00 - i will not commit before 12:00 - i will not commit before 12:00 - i will not commit before 12:00 - i will not commit before 12:00 - i will not commit before 12:00 - i will not commit before 12:00 - i will not commit before 12:00 - i will not commit before 12:00 - -2003-04-02 Andrei Zmievski - - * zend_API.c - zend_API.h: - - Add zend_register_internal_namespace() API function. - - Add zend_register_internal_class_in_ns() API function. - - * zend_compile.h: - Simplify. - -2003-04-02 Derick Rethans - - * zend_list.c: - - Fix whitespace - -2003-04-02 Sterling Hughes - - * zend_list.c - zend_list.h: - add the ability for curl_multi_info to introspect the handles. - - -2003-04-02 Andrei Zmievski - - * zend_compile.c - zend_compile.h - zend_globals.h - zend_language_parser.y - zend_language_scanner.l: - Implement a different way to catch documentation comments. - - * zend_compile.c - zend_compile.h - zend_highlight.c - zend_language_parser.y - zend_language_scanner.l: - Revert portions of the doc comment patch. There should be no parser - errors now. - -2003-04-02 Stanislav Malyshev - - * zend_builtin_functions.c - zend_compile.h - zend_execute.c: - allow class_exists() to work with namespaces too. - add CLASS_IS_NAMESPACE macro - - * zend_builtin_functions.c: - fix typo - - * zend_builtin_functions.c: - fix parameterless get_declared_classes call - -2003-04-01 Andrei Zmievski - - * zend_execute.c: - Stas's patch on zend_execute.c (1.448 -> 1.449) resulted in a bug where - the namespaced member accesses didn't work. This should hopefully - correct it. - - * zend_builtin_functions.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_object_handlers.c - zend_opcode.c: - Split ZEND_NAMESPACE into user and internal namespaces. Hope this is - okay with engine folks. - -2003-04-01 Stanislav Malyshev - - * zend_builtin_functions.c: - improve namespace name hanfling - - * zend_builtin_functions.c: - fix get_declared_classes() - - * zend_language_parser.y - zend_language_scanner.l: - Add __NAMESPACE__ auto-constant. - - * zend_builtin_functions.c: - make get_declared_classes() work with namespaces (based on Tal Peer's - patch) - -2003-03-31 Andrei Zmievski - - * zend.h - zend_compile.c - zend_compile.h - zend_globals.h - zend_language_parser.y - zend_language_scanner.l - zend_opcode.c: - Multi-purpose patch: - - The fields of zend_namespace were not completely initialized which - led to a variety of problems. - - The occurrence of class/interface/namespace definition is now - captured. - - Functions/classes/interfaces/namespaces can be preceded by doc - comments which are stored for use by extensions. - -2003-03-31 Stanislav Malyshev - - * zend.c: - Use strncpy instead of sprintf - -2003-03-30 Andrei Zmievski - - * zend_language_parser.y: - Since zend_do_begin_class_member_function_call assumes the previous - opcode is FETCH_CONSTANT, swap the calls around. - -2003-03-30 Sebastian Bergmann - - * zend_execute.c: - ZTS fix. - -2003-03-30 Stanislav Malyshev - - * zend.c: - Try to report class name of the exception - - * zend_execute.c: - Fix namespace switch - -2003-03-29 Zeev Suraski - - * zend_compile.c: - Add missing initialization - - * zend_compile.c: - Fix crash - - * zend_API.c - zend_compile.c - zend_compile.h: - Initial support for enforcing prototype of abstract/interface method - implementations - -2003-03-29 Sterling Hughes - - * zend.c: - remove unused variable - -2003-03-27 Stanislav Malyshev - - * zend_execute.c: - fix fetch_class buglet - -2003-03-26 Stanislav Malyshev - - * zend_execute.c - zend_language_parser.y: - Un-nest namespaces - now namespace X { namespace Y {} } is a parse error - Also refine namespaced includes - -2003-03-26 Ilia Alshanetsky - - * zend_compile.c: - Fixed bug #22900 (declaration of namespaces with same name results in - leaks). - -2003-03-26 Sebastian Bergmann - - * zend.c - zend_API.c - zend_API.h - zend_builtin_functions.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_opcode.c - zend_operators.h: - Eliminate TSRMLS_FETCH() calls in destroy_op_array() and - zend_get_class_entry(). - - * zend_API.c - zend_object_handlers.c - zend_objects.c - zend_objects.h: - Eliminate TSRMLS_FETCH() calls in zend_objects_new() and - zend_objects_get_address(). - -2003-03-25 Andi Gutmans - - * zend_compile.c: - - Temporarily fix problem with inheriting from an internal class. This - might - - need some rework in the future (thanks to Marcus) - -2003-03-24 Stanislav Malyshev - - * zend_execute.c: - Fix {include|require}_once error message - if open - fails, don't use tream, use original name. - -2003-03-23 Andi Gutmans - - * zend.c: - - Fix win32 build - -2003-03-23 Stanislav Malyshev - - * zend.c: - resore namespace on shutdown - since some functions use - EG() and CG() pointers - -2003-03-23 Sebastian Bergmann - - * zend_default_classes.c: - ZTS fix. - -2003-03-23 Zeev Suraski - - * zend_compile.c: - Another fix for implicit public, perhaps it was not such a good idea :I - -2003-03-23 Sebastian Bergmann - - * Zend.dsp - ZendTS.dsp - zend_default_classes.c: - Add new files to ZendTS.dsp. Sync list of files in Zend.dsp with - ZendTS.dsp. ZTS fixes. - -2003-03-23 Sterling Hughes - - * zend_default_classes.h: - DEFAULT_CLASSES_H not DEFAULT_INTERFACES_H - - * Makefile.am - zend.c - zend_default_classes.c - zend_default_classes.h: - add a standard Exception class. - -2003-03-22 Shane Caraveo - - * zend_compile.h: - export functions needed by cli - - * zend_language_scanner.l: - fix crash in win32 debug build - -2003-03-20 Stanislav Malyshev - - * Zend.m4: - Add stdlib.h too - it is needed fot strto{ld} - -2003-03-19 Andrei Zmievski - - * zend_compile.c - zend_compile.h - zend_globals.h - zend_highlight.c - zend_language_parser.y - zend_language_scanner.l: - - Keep track of starting/ending line numbers for user functions. - - Store last parsed doc comment in a compiler global for future use. - - * zend_API.c: - Lowercase the function name when used as key in the function name. The - original case is still preserved in zend_function structure. - -2003-03-18 Zeev Suraski - - * zend_compile.c - zend_object_handlers.c: - - Fix situation where a derived class declares a public (or implicit - public) - with the same name as a private in the parent - - Optimize 'static binding' of private properties a bit - -2003-03-18 Stig Bakken - - * RFCs/002.txt: - - email address change - -2003-03-17 Stanislav Malyshev - - * zend_extensions.c: - MFZE1 - -2003-03-17 Jani Taskinen - - * Makefile.am: - Added missing zend_mm.c file and renamed zend_object_API.c -> - zend_objects_API.c - -2003-03-13 Andrei Zmievski - - * zend_API.c: - Fix warning in va_start(). - -2003-03-12 Andrei Zmievski - - * zend_API.c: - Initialize the namespace when registering functions. - -2003-03-12 Zeev Suraski - - * zend_compile.c: - Fix a crash bug in the implicit public declaration - -2003-03-11 Zeev Suraski - - * zend_execute.c - zend_object_handlers.c: - Fix handling of ::func() - -2003-03-10 Zeev Suraski - - * zend_compile.c: - Clean redundant code - -2003-03-10 Jani Taskinen - - * zend_compile.c: - Fixed some leaks. Patch by Moriyoshi - -2003-03-10 Shane Caraveo - - * zend_config.w32.h: - fix isinf for win32 - -2003-03-09 Zeev Suraski - - * zend_language_parser.y: - Optimize - - * zend_compile.c - zend_compile.h - zend_language_parser.y: - Fix handling of ::foo - - * zend_compile.c: - Cleanup - -2003-03-09 Andi Gutmans - - * zend_language_scanner.l: - - Nuke junk - -2003-03-09 Zeev Suraski - - * zend_compile.c - zend_compile.h - zend_language_parser.y: - Fix parsing rules of namespaces/classes - - * zend_language_parser.y: - Add ability to use ::interface_name in implements - - * zend_compile.c: - Fix :: handling - -2003-03-07 Sebastian Bergmann - - * ZEND_CHANGES: - Dedicated to Greg Beaver . - - * ZEND_CHANGES: - Document 'final'. - - * ZEND_CHANGES: - Fix class type hints example. - - * ZEND_CHANGES: - Update 'abstract' section. - -2003-03-07 Jani Taskinen - - * zend_ini.c - zend_ini.h: - Renamed OnUpdateInt -> OnUpdateLong to prevent further misunderstandings. - - * zend_execute.c: - Better fix for the memleaks (bug 19943) by Moriyoshi - -2003-03-06 Zeev Suraski - - * zend_compile.c - zend_execute.c: - Fix warnings - - * zend_execute.c: - Fix error message - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_language_parser.y: - Require abstract classes to be explicitly declared 'abstract', in order to - avoid making developers traverse the entire class/interface hierarchy - before they can figure out whether a class is instantiable - (ok, so it makes sense :) - -2003-03-06 Sebastian Bergmann - - * ZEND_CHANGES: - -german+english+. - - * ZEND_CHANGES: - D some TBDs - -2003-03-06 Jani Taskinen - - * zend_execute.c: - Fixed bug #19943 (the memleaks) - -2003-03-06 Ilia Alshanetsky - - * zend_highlight.c: - More cleanup of the zend_strip() function. - No longer strip __LINE__, since while it may become useless it could break - code where __LINE__ is passed as a function parameter. - - * zend_highlight.c: - Fixed in zend_strip() that corrupted heredoc. - Optimized the writing routine by moving from putchar() to fwrite(). - Changed hardcoded opcode # to it's defined name. - -2003-03-06 Zeev Suraski - - * zend_compile.c - zend_compile.h - zend_execute.c: - Change opcode name - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_language_parser.y: - Add class type hints - -2003-03-05 Zeev Suraski - - * zend_compile.c: - Fix auto globals - - * zend_compile.c - zend_execute.c - zend_language_parser.y: - Implement $obj::static_func() - - * zend.h - zend_builtin_functions.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_globals.h - zend_language_parser.y - zend_language_scanner.l - zend_opcode.c - zend_operators.c - zend_operators.h: - Add support for interfaces - -2003-03-04 Zeev Suraski - - * zend_compile.c - zend_language_parser.y: - Remove legacy code - - * zend_compile.c: - Remove redundant code - -2003-03-03 Harald Radi - - * zend_API.c: - add missing strtolower - - * zend_API.c - zend_API.h: - commiting zend_disable_class patch for George: - disabled classes will be replaced by dummy classes - that print a warning upon instanciation - -2003-03-02 Zeev Suraski - - * zend_execute_API.c: - Fix destructors some more - - * zend_compile.c - zend_compile.h: - Improve infrastructure - - * zend.c - zend_compile.c - zend_compile.h: - Add infrastructure for JIT initialization of auto globals - -2003-03-01 Zeev Suraski - - * zend_compile.c: - Fix mem leak - -2003-03-01 Andi Gutmans - - * zend_compile.c: - - Make __construct() have higher priority than class name functions - - for constructors. - - Fix problem with the engine allowing final/abstract for the same method. - - Both patches are by Marcus Börger. - -2003-02-27 Rasmus Lerdorf - - * zend_ini_scanner.l: - MFB: We know ini file scanning will never be interactive, so speed it up a - bit. Need a dynamic check for the language scanner. - -2003-02-26 Sebastian Bergmann - - * ZEND_CHANGES: - Syntactic sugar is sweet. - -2003-02-25 Zeev Suraski - - * zend_compile.c: - Get the bits right - final/private fix - -2003-02-25 Jani Taskinen - - * acconfig.h: - Do not redefine zend_isnan if it is already defined. - - * Zend.m4: - - Fixed bug #14245 ('make install' fails on AIX when using --with-apxs). - -2003-02-24 Stanislav Malyshev - - * zend_compile.c: - fix exception handling - -2003-02-24 Zeev Suraski - - * zend_compile.c - zend_compile.h - zend_language_parser.y - zend_language_scanner.l: - Add 'final' - -2003-02-24 Sebastian Bergmann - - * ZEND_CHANGES: - Remove obsolete not on redeclaring protected members. - - * ZEND_CHANGES: - Leftover. - - * ZEND_CHANGES: - Initial documentation of namespace {}. - -2003-02-23 Zeev Suraski - - * zend_compile.c: - Move abstract inheritance logic to the right spot - - * zend_compile.c: - Fixed abstract handling in inheritence - -2003-02-20 Wez Furlong - - * zend_stream.c: - -cough* - Fix another stupid mistake. - -2003-02-20 Stanislav Malyshev - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_language_parser.y - zend_opcode.c: - Allow namespaces to have a number of parts. I.e., now you can do: - namespace foo { - function abc() {} - } - ... - namespace foo { - functio def() {} - } - -2003-02-19 Wez Furlong - - * zend_stream.c: - Fix stupid mistake that only affected interactive mode. - -2003-02-18 Rasmus Lerdorf - - * zend_stream.c: - fileno() needs a FILE * here, and at least on FreeBSD with gcc-2.95.3 - it is unable to figure out that this is indeed a FILE * and hence it - won't compile without this cast. - -2003-02-18 Zeev Suraski - - * zend.h - zend_compile.c - zend_compile.h - zend_execute.c - zend_language_scanner.l - zend_opcode.c: - Avoid using a C++ reserved word - -2003-02-18 Wez Furlong - - * ZendTS.dsp - flex.skl: - Fixup build for win32 - - * Makefile.am - flex.skl - zend.c - zend.h - zend_compile.h - zend_execute.c - zend_globals.h - zend_ini_scanner.l - zend_language_scanner.h - zend_language_scanner.l - zend_stream.c - zend_stream.h: - Implement simple stream support in the ZE scanners. - -2003-02-17 Zeev Suraski - - * zend_language_parser.y: - Whitespace & minor renames - - * zend_language_parser.y: - whitespace - - * zend_execute.c - zend_object_handlers.c - zend_object_handlers.h: - Improve handling of static member variables - - * zend_config.w32.h - zend_ini_parser.y: - Improve Win32 build performance - -2003-02-16 Zeev Suraski - - * zend_execute.c: - Fix complex cases of self-assignments (bugs #21600, #22231) - - * zend_execute.c: - Make EG(This) and EG(scope) available to internal methods - - * zend_execute.c: - Revert patches - they weren't ready yet! - - * zend.c: - Fix initialization - -2003-02-16 Georg Richter - - * zend_execute.c: - fixed compiler warning - - * zend_execute.c: - tested patch from Zeev (fixes oo-bug in ext/mysqli) - -2003-02-16 Stanislav Malyshev - - * zend_compile.c - zend_language_parser.y: - add support for ::foo syntax meaning "global one" - - * zend_compile.c: - remove debug prints - -2003-02-16 Sebastian Bergmann - - * zend.c - zend_API.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c: - ZTS fixes - -2003-02-16 Stanislav Malyshev - - * zend_object_handlers.c: - namespace patch - static variable access - - * zend.c - zend.h - zend_compile.c - zend_compile.h - zend_constants.c - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_globals.h - zend_language_parser.y - zend_language_scanner.l - zend_opcode.c: - Namespace patch. Big changes: - 1. Nested classes are gone. - 2. New syntax for namespaces: - namespace foo { - class X { ... } - function bar { ... } - var x = 1; - const ZZ = 2; - } - 3. Namespaced symbol access: $x = new foo::X; - etc. - For now, namespaces are case insensitive, just like classes. - Also, there can be no global class and namespace with the same name - (to avoid ambiguities in :: resolution). - -2003-02-15 Ilia Alshanetsky - - * zend_ini_scanner.l: - Added feature #19645 (ini parser can now handle quoted multi-line values). - -2003-02-14 Thies C. Arntzen - - * zend_execute_API.c: - init current_execute_data befor we start executing - - * Makefile.am: - ups - - * Makefile.am: - add really nice dump_bt function for debugging in gdb - -2003-02-13 Zeev Suraski - - * zend_object_handlers.c: - Fix error handling in illegal property access - -2003-02-13 Harald Radi - - * zend_language_scanner.l: - MFB PHP_4_3 - -2003-02-12 Ilia Alshanetsky - - * zend_API.c - zend_API.h: - Removed zend_get_module(), this function is not used by anything and more - importantly. it does not work. It tries to find data based on numeric keys - in hash table using string keys. - -2003-02-12 Zeev Suraski - - * zend_compile.c: - Fix declaration of class members that don't have an explicit access - modifier - -2003-02-11 Zeev Suraski - - * zend_compile.c: - Fix require() handling - that's an old bug! - - * zend_compile.c - zend_compile.h - zend_language_parser.y: - Improve parser handling of 'abstract' - -2003-02-10 Zeev Suraski - - * zend_compile.c: - Fix zend_initialize_class_data() - - * zend.c - zend.h - zend_API.c - zend_compile.c - zend_compile.h: - Centralize class initialization - - * zend_compile.c - zend_compile.h - zend_language_parser.y: - - Treat $this->foo inside class X as an implicit 'public $foo' if X::$foo - is not explicitly declared - - Forbid multiple declaration of the same variable - - * zend_execute.c: - whitespace - - * zend_API.c - zend_compile.c: - Add missing destructors - -2003-02-10 Stanislav Malyshev - - * zend_object_handlers.c: - update static constants too - -2003-02-10 Zeev Suraski - - * zend_builtin_functions.c: - Fix get_parent_class() - - * zend_object_handlers.c: - Restore missing check - - * zend_execute.c - zend_execute_API.c: - Add ability to reference self:: and parent:: in constant initializers - (bug #21849) - - * zend_execute.c: - Remove redundant code - -2003-02-09 Zeev Suraski - - * zend_execute.c: - Fix the array() problem (and probably some other problems too) - -2003-02-08 Georg Richter - - * zend_API.c - zend_API.h: - fixed zend_parse_method_param - -2003-02-08 Sebastian Bergmann - - * zend_builtin_functions.c: - zend_config.h (and its Win32 version) is already included by zend.h - -2003-02-08 Ilia Alshanetsky - - * zend_builtin_functions.c: - The string.h is already available through zend.h, so the manual inclusion - is not necessary. - -2003-02-07 Ilia Alshanetsky - - * zend_builtin_functions.c: - Added a check to ensure that string.h is available before trying to use it. - - Thanks Andi. - - * zend_builtin_functions.c: - Added missing header. - -2003-02-07 Zeev Suraski - - * zend_globals.h - zend_object_handlers.c: - Improve PPP handling of properties - - * zend_config.w32.h: - Better fix - - * zend_config.w32.h: - Fix Windows build - -2003-02-07 Ilia Alshanetsky - - * zend_builtin_functions.c: - Fixed bug #15734 (Added an optional parameter to get_defined_constants(), - which if passed, will include information regarding who created the - constant). - -2003-02-06 Ilia Alshanetsky - - * zend_builtin_functions.c: - Fixed bug #19506 (get_extension_funcs() can now retrieve a list of built-in - Zend Engine functions, if "zend" is specified as the module name). - Made get_extension_funcs() on failure. - -2003-02-06 Zeev Suraski - - * zend_compile.c: - Fix the 2nd buglet in the error message :) - - * zend_object_handlers.c: - Fix check - - * zend_hash.c - zend_hash.h: - Fix prototype (may have caused stack corruption) - -2003-02-05 Zeev Suraski - - * zend_execute.c - zend_object_handlers.c - zend_object_handlers.h - zend_objects_API.c: - - read_property cleanup - - Implement unset/isset/empty for PPP - - * zend.c - zend.h - zend_API.c - zend_compile.c - zend_execute.c - zend_object_handlers.c - zend_object_handlers.h - zend_opcode.c: - Rework static class properties - now supports access restrictions - - * zend_hash.c - zend_hash.h: - Add quick_exists() - - * zend_object_handlers.c: - Add PPP support for arrays - - * zend_compile.c: - Fix buglet in error message - -2003-02-04 Zeev Suraski - - * zend_object_handlers.c: - Missing update - - * zend.c - zend.h - zend_API.c - zend_compile.c - zend_compile.h - zend_globals.h - zend_hash.c - zend_hash.h - zend_object_handlers.c - zend_opcode.c - zend_ts_hash.c - zend_ts_hash.h: - Reimplement PPP properties - -2003-02-03 Sebastian Bergmann - - * zend_API.h: - Build fix. - -2003-02-02 Harald Radi - - * zend_API.c - zend_API.h: - extend the parameter parsing API by two functions - for parsing method parameters with automatic - detection if the function was called as such or as - a class method (with a valid this ptr). - if called as a function the first parameter has to be - the object it is operating on, if called as a method - this is used. - - -2003-02-02 Zeev Suraski - - * zend.h - zend_operators.h: - whitespace - - * zend_execute.c - zend_object_handlers.c - zend_object_handlers.h: - Core rearrangements - move Zend Objects specific code to their - specific implementation file - -2003-02-02 Andi Gutmans - - * zend_compile.c: - - Fix warning - -2003-02-01 Sebastian Bergmann - - * zend_ini_scanner.l - zend_language_scanner.l: - Fix build. - -2003-02-01 Jani Taskinen - - * acconfig.h - zend.c - zend.h - zend_API.c - zend_API.h - zend_alloc.c - zend_alloc.h - zend_builtin_functions.c - zend_builtin_functions.h - zend_compile.c - zend_compile.h - zend_config.nw.h - zend_config.w32.h - zend_constants.c - zend_constants.h - zend_dynamic_array.c - zend_dynamic_array.h - zend_errors.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_execute_locks.h - zend_extensions.c - zend_extensions.h - zend_fast_cache.h - zend_globals.h - zend_globals_macros.h - zend_hash.c - zend_hash.h - zend_highlight.c - zend_highlight.h - zend_indent.c - zend_indent.h - zend_ini.c - zend_ini.h - zend_ini_parser.y - zend_ini_scanner.h - zend_ini_scanner.l - zend_istdiostream.h - zend_language_parser.y - zend_language_scanner.h - zend_language_scanner.l - zend_list.c - zend_list.h - zend_llist.c - zend_llist.h - zend_mm.c - zend_mm.h - zend_modules.h - zend_object_handlers.c - zend_object_handlers.h - zend_objects.c - zend_objects.h - zend_objects_API.c - zend_objects_API.h - zend_opcode.c - zend_operators.c - zend_operators.h - zend_ptr_stack.c - zend_ptr_stack.h - zend_qsort.h - zend_sprintf.c - zend_stack.c - zend_stack.h - zend_static_allocator.c - zend_static_allocator.h - zend_ts_hash.c - zend_ts_hash.h - zend_types.h - zend_variables.c - zend_variables.h: - - Added some missing CVS $Id$ tags, headers and footers. - -2003-01-30 Ilia Alshanetsky - - * zend_operators.c: - Fixed compiler warning regarding signed/unsigned int comparisons. - -2003-01-30 Harald Radi - - * zend_ts_hash.c - zend_ts_hash.h: - fix non-zts build for wez - -2003-01-30 Ilia Alshanetsky - - * zend_execute_API.c: - Fix ZTS build. - -2003-01-29 Stanislav Malyshev - - * zend_compile.h - zend_execute_API.c - zend_opcode.c: - Add additional stage to post-session cleanup. - We need separate cleanup stage because of the following problem: - Suppose we destroy class X, which destroys function table, - and in function table we have function foo() that has static $bar. Now if - object of class X was assigned to $bar, its destructor will be called and - will - fail since X's function table is in mid-destruction. - So we want first of all to clean up all data and then move to tables - destruction. - Note that only run-time accessed data need to be cleaned up, pre-defined - data can not contain objects and thus are not probelmatic. - -2003-01-29 Zeev Suraski - - * zend_execute.c - zend_object_handlers.c: - Code rearrangements - -2003-01-29 Stanislav Malyshev - - * zend_execute_API.c: - Fix object destructors: - zend_objects_store_call_destructors is not used anymore, we rely on - symbol tables cleaners to destroy all objects. - - * zend_objects_API.c: - extra safety - - * zend_compile.c: - fix memory leak - -2003-01-29 Zeev Suraski - - * zend_execute.c - zend_object_handlers.c: - Fix assignments to $this. - Fixes the 'make install' problem reported on php-dev - -2003-01-28 Zeev Suraski - - * zend_compile.c: - Fix a ticks related crash - - * (PHP_5_0_dev_before_13561_fix) - zend_execute.c: - Allow methods in parent classes to call protected methods in derived - classes - -2003-01-27 Stanislav Malyshev - - * zend_compile.c - zend_compile.h - zend_execute.c: - Replace MAKE_VAR opcode with special 'data' opcode - This opcode is not executeable but only holds data for opcodes - that need more than two arguments (presently only ASSIGN_OBJ and the ilk - but - in the future also ASSIGN_DIM) - -2003-01-26 Sascha Schumann - - * zend_API.c: - Replace snprintf() call using zend_error's capabilities - -2003-01-23 Zeev Suraski - - * zend_execute.c: - Let the scope propagate to internal functions - -2003-01-23 Jani Taskinen - - * zend_execute_API.c: - Fixed bug: #14542, register_shutdown_function() timeout problem - -2003-01-22 Stanislav Malyshev - - * OBJECTS2_HOWTO: - some small refinements for get_class_* - -2003-01-22 Ilia Alshanetsky - - * zend_execute.c: - Fixed bug #21814 (Allow booleans to be used as array keys). - -2003-01-21 Sterling Hughes - - * zend_objects_API.c: - fix by phanto to the cloning - -2003-01-19 Zeev Suraski - - * Zend.m4: - relabel - -2003-01-19 Stanislav Malyshev - - * zend_compile.c: - Restore for now old statics behaviour (so that indirect $$var references - would work again). Comprehensive fix will follow later. - -2003-01-19 Harald Radi - - * zend_ini.h - zend_ini_parser.y - zend_ini_scanner.l: - ini patch to allow 'entry[] = value' entries - -2003-01-17 Harald Radi - - * zend_objects.c - zend_objects.h: - export zend_objects_destroy_object() - static inline was meaningless anyways as the function - was only used as a callback handler and was never - called directly - - * zend_objects_API.c - zend_objects_API.h: - make std_object_handlers struct available for shared modules - -2003-01-16 Ilia Alshanetsky - - * zend_execute.c: - Fixed bug #20933 (isset/empty didn't work when used on string offsets). - -2003-01-15 Andi Gutmans - - * zend_compile.c: - - Revert int -> unsigned int change for str.len - -2003-01-15 Sascha Schumann - - * zend.h: - Revert commit which turned the lengths of strings into zend_uint. - -2003-01-14 Andi Gutmans - - * ZEND_CHANGES - zend_compile.c - zend_compile.h - zend_execute.c - zend_language_parser.y - zend_language_scanner.l - zend_operators.c - zend_operators.h: - - Change "is" to "instanceof" as it explains better what the operator - means. - - "is_a" was also appropriate but ugly. - -2003-01-14 Stanislav Malyshev - - * zend_API.c: - fix memory leaks and key size - -2003-01-14 Ilia Alshanetsky - - * zend_ini_parser.y: - MFZE2 - -2003-01-14 Stanislav Malyshev - - * zend_compile.c: - fix warning - - * zend_API.c - zend_API.h: - Make add_property_ functions work via write_property handler - - * zend.c - zend_object_handlers.c: - ws - -2003-01-14 Ilia Alshanetsky - - * zend_ini_parser.y: - Reverting previous patch. - -2003-01-13 Ilia Alshanetsky - - * zend_ini_parser.y: - MFZE2 - -2003-01-13 Andi Gutmans - - * zend_objects_API.c: - - Don't check if the handle is bogus. We should crash. - -2003-01-12 Harald Radi - - * zend_modules.h: - fix wrong dereferenciation - -2003-01-12 Stanislav Malyshev - - * zend_compile.c: - fix inheritance - - * zend_API.h: - Remove handle_property from here too - - * zend.c - zend.h - zend_compile.c: - RIP handle_* functions. ZE2 will use __ handlers instead. - - * zend_object_handlers.c: - Move Z_OBJ_P here. - - * zend_operators.h: - Remove Z_OBJ - it's internal to Zend objects, no generic function except - those in zend_object_handlers.c should use it. - Add Z_OBJ_HANDLER macro for easy access to handlers - -2003-01-12 Sebastian Bergmann - - * zend.c - zend.h - zend_builtin_functions.c: - ZTS fixes. - -2003-01-12 Stanislav Malyshev - - * zend_object_handlers.c: - add get_class_name handler - - * zend.c: - Use generic handlers instead of Z_OBJ - -2003-01-12 Harald Radi - - * zend_modules.h: - - - * zend_ini.h - zend_ini_entry.h - zend_modules.h: - partially revert previous commit and - change zend_modules.h to include - a forward declaration to zend_ini_entry - - * zend_ini.h - zend_ini_entry.h - zend_modules.h: - added zend_ini_entry to zend_modules_entry as - discussed with zeev - - * zend_builtin_functions.c: - fix 'use of uninitialized variable' warning - -2003-01-12 Stanislav Malyshev - - * zend_objects_API.c: - validate handle - -2003-01-12 Zeev Suraski - - * zend.c - zend_compile.c - zend_execute.c - zend_execute_API.c - zend_globals.h - zend_ini.c - zend_ini.h - zend_variables.c: - Implemented compatibility mode - To enable - zend2.implicit_clone = on in php.ini or using ini_set() - -2003-01-11 Andi Gutmans - - * zend_execute.c: - - Fix typo and whitespace - -2003-01-11 Derick Rethans - - * zend.c - zend_execute.c - zend_execute.h - zend_execute_API.c: - - Ported the zend_execute_internal hook to ZendEngine2. - -2003-01-11 Harald Radi - - * zend_ts_hash.c: - freed reader twice instead of writer and reader - -2003-01-10 Ilia Alshanetsky - - * zend_alloc.c: - MFZE2 - -2003-01-10 Andrei Zmievski - - * zend_API.c: - Automatically register constructor, destructor, and clone function when - class methods are registered. - -2003-01-09 Zeev Suraski - - * zend_compile.c: - Found some more occurences of that elusive bug... - - * zend_compile.c: - Fix one lousy, annoying lurking bug (memory corruption) - Sebastian - try coWiki again please... - - * zend_API.h: - Unify and make it easy to add code into the broken-string error handler - - * zend_language_parser.y: - Fix writability checks - - * zend.c: - Fix leak - -2003-01-08 James Cox - - * zend.h: - cvs is dev not alpha. - -2003-01-08 Ilia Alshanetsky - - * zend_builtin_functions.c: - MFZE2 - -2003-01-05 Zeev Suraski - - * zend_compile.c - zend_globals.h - zend_language_scanner.l: - MFZE1 - lineno fix - -2003-01-02 Zeev Suraski - - * zend_compile.c - zend_compile.h - zend_execute.c: - Fix incorrect linkage of access-levels, when using private methods - -2003-01-01 Zeev Suraski - - * zend_API.c - zend_operators.h: - Win32 build fix - -2003-01-01 Stanislav Malyshev - - * zend_operators.h: - use handler for Z_OBJPROP - -2003-01-01 Zeev Suraski - - * zend_API.c: - Fix Wez's problem - -2002-12-31 Sebastian Bergmann - - * LICENSE - zend.c - zend.h - zend_API.c - zend_API.h - zend_alloc.c - zend_alloc.h - zend_builtin_functions.c - zend_builtin_functions.h - zend_compile.c - zend_compile.h - zend_config.nw.h - zend_config.w32.h - zend_constants.c - zend_constants.h - zend_dynamic_array.c - zend_dynamic_array.h - zend_errors.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_extensions.c - zend_extensions.h - zend_fast_cache.h - zend_globals.h - zend_globals_macros.h - zend_hash.c - zend_hash.h - zend_highlight.c - zend_highlight.h - zend_indent.c - zend_indent.h - zend_ini.c - zend_ini.h - zend_language_scanner.h - zend_list.c - zend_list.h - zend_llist.c - zend_llist.h - zend_mm.c - zend_mm.h - zend_modules.h - zend_opcode.c - zend_operators.c - zend_operators.h - zend_ptr_stack.c - zend_ptr_stack.h - zend_qsort.c - zend_qsort.h - zend_sprintf.c - zend_stack.c - zend_stack.h - zend_static_allocator.c - zend_static_allocator.h - zend_ts_hash.c - zend_ts_hash.h - zend_types.h - zend_variables.c - zend_variables.h: - Bump year. - -2002-12-31 Stanislav Malyshev - - * zend_object_handlers.h: - fix level of indirection - -2002-12-30 Andrei Zmievski - - * zend_execute_API.c: - Adjust the error message. - -2002-12-30 Stanislav Malyshev - - * zend_object_handlers.h: - Oops, fix it indeed - - * zend_object_handlers.h: - Better check - -2002-12-26 Andrei Zmievski - - * zend_compile.c: - do_inherit_method_check() is supposed to return 0 or 1, not SUCCESS or - FAILURE. - -2002-12-14 Ilia Alshanetsky - - * zend_language_scanner.l: - MFZE2 - -2002-12-10 Zeev Suraski - - * zend_compile.c: - Fix check to allow for static+access level modifiers - - * zend_compile.c - zend_compile.h - zend_language_parser.y: - - Allow variables to have both 'static' modifier and an access level. - NOTE: This only works at the syntax level right now (parser). It - doesn't actually work as of yet - all statics are considered - public for now - - Prevent users from putting more restrictions on methods in derived - classes - (i.e., you cannot make a public method private in a derived class, etc.) - -2002-12-09 Andi Gutmans - - * zend_mm.c: - - Fix a bug which I just introduced. - - * zend_mm.c: - - Fix typo - - * zend_mm.c: - - Improvements - - * zend_mm.c - zend_mm.h: - - First attempt to improve memory manager during realloc()'s - -2002-12-08 Zeev Suraski - - * zend_compile.c: - Remove comment - - * zend_compile.c - zend_compile.h - zend_language_parser.y: - Treat the absence of an access type just as if 'public' was supplied - - * zend_compile.c: - Simplify/fix inheritance checks - - * zend_execute.c: - Support private/protected constructors - -2002-12-07 Sebastian Bergmann - - * ZEND_CHANGES: - Update. - -2002-12-07 Zeev Suraski - - * zend_execute.c: - Fix error messages - - * zend_language_parser.y - zend_language_scanner.l: - Remove unintentional code - -2002-12-07 Andi Gutmans - - * zend_compile.c: - - Dissallow using parent, self and main as class names - -2002-12-06 Zeev Suraski - - * zend.c - zend.h - zend_API.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_globals.h - zend_hash.h - zend_language_parser.y - zend_language_scanner.l: - - Implement public/protected/private methods. - - Prevent instantiation of classes with abstract methods. - Based in part on Marcus's patch. - -2002-12-01 Andi Gutmans - - * zend_alloc.c: - - Allow enabling of memory cache with zend_mm - - * zend.c - zend.c - zend.h - zend.h - zend_builtin_functions.c - zend_builtin_functions.c: - - MFZE1 - - * zend.c - zend.h - zend_builtin_functions.c: - - Revert as the patch doesn't compile - - * zend.c - zend_API.c - zend_builtin_functions.c - zend_compile.c - zend_execute.c - zend_execute_API.c - zend_indent.c - zend_object_handlers.c - zend_opcode.c - zend_operators.c - zend_operators.h - zend_variables.c: - h WHitespace - - * zend.c: - - Initialize constants_updated (by Marcus) - - * zend_builtin_functions.c: - - Nuke use of deprecated macro - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_language_parser.y: - - FN_IS_STATIC -> FN_STATIC - - * zend.c: - - Fix crash - - * zend_compile.c - zend_compile.h: - - My personal cleanups - - * zend_API.c - zend_API.h - zend_builtin_functions.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute.h - zend_language_parser.y - zend_object_handlers.c: - - Commit Marcus' cleanup of abstract and static inheritance and improve - - error messages - -2002-11-22 Derick Rethans - - * zend_API.c: - - Initialize all functions to non-static (patch by Marcus Börger - . - -2002-11-22 Sebastian Bergmann - - * zend_execute.c: - Show class name as well. Patch by Marcus Börger. - - * zend_execute.c: - Show the name of the abstract method in the error. - - * zend_compile.h: - Fix prototype. - -2002-11-20 Derick Rethans - - * zend_builtin_functions.c: - - MFZE1: Disable leak() and crash() when not using debug mode - -2002-11-20 Andi Gutmans - - * ZEND_CHANGES: - - Add abstract methods - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_language_parser.y - zend_language_scanner.l: - - Fix build (thanks Marcus) - - Implement abstract methods, syntax: - - abstract function foo($vars); - - I don't see any reason why modifiers such as static/public need to be - - used with abstract. PHP is weakly typed and there would be no meaning to - - this anyway. People who want a strictly typed compiled language are - - looking in the wrong place. - -2002-11-19 Zeev Suraski - - * zend.c - zend.h - zend_builtin_functions.c - zend_execute.c - zend_execute_API.c: - MFZE1 - error_reporting fix - -2002-11-18 Andi Gutmans - - * zend_language_scanner.l: - - MFZE1 - -2002-11-17 Stanislav Malyshev - - * zend_execute.c: - fix the leak - -2002-11-16 Andi Gutmans - - * zend_language_scanner.l - zend_language_scanner.l: - - MFZE1 - - * Zend.m4 - configure.in: - - MFZE1 - - * zend_hash.c: - - Commit fix for bug #19566 (I think it's by Marcus :) - -2002-11-14 Andrei Zmievski - - * zend_llist.h: - MFZE1 - -2002-11-13 Stanislav Malyshev - - * zend_execute.c: - semi-fix string offsets crash - now it doesn't crash, but still leaks - - * zend_object_handlers.c: - fix static - -2002-11-11 Andi Gutmans - - * ZEND_CHANGES: - - Update with statics - -2002-11-11 Sebastian Bergmann - - * zend_execute.c: - Fugbix typo. - -2002-11-11 Ilia Alshanetsky - - * zend.h: - MFZE1 - -2002-11-10 Andi Gutmans - - * zend_compile.c: - - MFZE1 - -2002-11-10 Stanislav Malyshev - - * zend_compile.c - zend_compile.h - zend_language_parser.y: - fix statics - make it behave like $this (fetch type "static") - Side effect: indirect references to statics won't work. - -2002-11-06 Sebastian Bergmann - - * zend_execute.c: - Fix ZTS build. - -2002-11-06 Stanislav Malyshev - - * zend_execute.c: - fix zend_assign_to_object_op - -2002-11-05 Ilia Alshanetsky - - * zend_language_scanner.l: - MFZE1 - -2002-11-05 Andi Gutmans - - * zend_compile.h: - - Shift around zend_op members - - * ZEND_CHANGES: - - A couple of updates - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_language_parser.y: - - Add support for static methods. Basically methods which are defined as - - static don't have $this. That's the whole difference. - - * tests/zend2.php: - - $clone -> $that - - * zend_execute_API.c: - - Fix bug introduced with type change of free_op1/2 - - * zend_language_parser.y - zend_language_scanner.l: - - ATTENTION: Finally nuke old_function and cfunction. I think it is time - - to get rid of these BC notations. This is from the days of the move from - - PHP/FI 2 -> PHP 3 - -2002-11-05 Ilia Alshanetsky - - * zend_hash.c: - Revert of previous patch. - -2002-11-05 Andi Gutmans - - * zend_compile.c - zend_objects.c: - - Change the automatically created variable $clone in __clone() to - - $that as discussed at the PHP Conference. If there are any objections - - alternative names please let me know. The reason for changing it from - - $clone is because $clone sounds as if it's the newly cloned object and - - not the old one. - -2002-11-05 Stanislav Malyshev - - * zend_compile.c - zend_compile.h: - avoid using 'class' in exported functions - it annoys c++ - -2002-11-05 Stig Bakken - - * zend.c: - Fixed some special cases that were crashing for the exception default - handler. - -2002-11-04 Ilia Alshanetsky - - * zend_compile.c: - Silence compiler warnings. - - * zend_hash.c: - If ordered is not set a random compiler assigned value of *p2 would be - used, - this patch fixes the problem by initializing *p2 to NULL. - - * zend_operators.c: - Silence compile warning, ctype.h is needed for tolower() function. - - * zend_language_scanner.l: - MFZE1 - -2002-11-02 Derick Rethans - - * zend_language_scanner.l: - - Fix segfault when __CLASS__ was used outside a class definition - - * zend.c: - - MFZE1 - -2002-11-02 Ilia Alshanetsky - - * zend_language_scanner.l: - MFZE1 (20214). - -2002-11-01 Andi Gutmans - - * zend_execute.c: - Fix unset($this->foo) - -2002-10-24 Andi Gutmans - - * zend_execute.c - zend_opcode.c: - Also tune jmpz_ex - - * zend_execute.c - zend_opcode.c - zend_compile.h: - - Improve performance of part of the jmps. More to follow. - -2002-10-23 Andi Gutmans - - * zend_execute.c - zend_compile.c: - - This might improve performance. Commiting it so that I can check it on - - Linux - - * zend_execute.c: - - Make Ts access a macro. I need this for my next patch which should - - improve performance but not sure yet if it will. - -2002-10-22 Andi Gutmans - - * zend_execute.c: - Nuke unused get_incdec_op() - - Nuke old comment - - * zend_compile.h - zend_execute.c - zend_globals.h: - Improve overall engine performance - - * zend_execute.c: - Fix bug reported by Daniel T. Gorski - -2002-10-21 Thies C. Arntzen - - * zend_builtin_functions.c: MFZE1 - -2002-10-20 Stanislav Malyshev - - * zend_object_handlers.c: looks like this message should go - - * zend_compile.c: Fix private handling - -2002-10-20 Sebastian Bergmann - - * zend_highlight.c - zend_highlight.h: Sync zend_html_puts parameter list with Zend Engine 1. - -2002-10-19 Andi Gutmans - - * zend_compile.h: - Fix compile warning. - - * zend_opcode.c - zend_compile.h - zend_execute.c: - Improve opcode dispatching - -2002-10-18 Andi Gutmans - - * zend.c - zend_compile.c - zend_execute.c: - - Change opcode dispatch mechanism to use a function per opcode and use - - a lookup table using the opcode # to call the correct function. - - Still have lots of tuning to do. - - * zend_execute.c: - Cleanup - -2002-10-16 Sebastian Bergmann - - * zend_execute.c: Fix ZTS build. - -2002-10-16 Stanislav Malyshev - - * zend_compile.c - zend_execute.c: Fix class static members: now the following code works: - - and returns "Hello" (class statics are not copied anymore, but looked up in - runtime) - - * zend_compile.c - zend_compile.h - zend_execute.c: Fix and generalize $this handling. - ZEND_FETCH_FROM_THIS is removed, IS_UNUSED type on class variables will be - used instead as the sign that it's a fetch from $this - -2002-10-14 Ilia Alshanetsky - - * zend_ini_parser.y - zend_ini_scanner.l - zend_globals.h: MFZE1 - -2002-10-14 Andi Gutmans - - * zend_execute.c - zend_language_parser.y: - Support new classname::$class_name, e.g.: - hello; - ?> - -2002-10-13 Ilia Alshanetsky - - * zend_extensions.h: Increased the API number. (re: floats patch) - -2002-10-12 Ilia Alshanetsky - - * zend_operators.c - zend_operators.h - zend.c - zend_execute_API.c - zend_globals.h: MFZE1 (floats & locale issue) - -2002-10-10 Sebastian Bergmann - - * ZEND_CHANGES: Fugbix typo. - -2002-10-10 Stanislav Malyshev - - * zend_object_handlers.c: add comment - - * zend_object_handlers.c: fix memory leaks - -2002-10-09 Stanislav Malyshev - - * zend_object_handlers.c: Fix object write handler behaviour: - * If this value is already set to given value, don't try to set it again. - * If we have reference, we should not move it. - * If we are assigning referenced variable, we should separate it. - -2002-10-09 Ilia Alshanetsky - - * zend_API.c - zend_builtin_functions.c - zend_compile.c - zend_constants.c - zend_execute.c - zend_execute_API.c - zend_language_parser.y - zend_object_handlers.c - zend_operators.c - zend_operators.h: MFZE1 zend_str_tolower issue. - -2002-10-07 Andi Gutmans - - * tests/zend2.php: - Fix test - - * zend_execute.c: - - Require $this-> when calling a methods. This whole automatic lookup - - first in the class and then in the global scope is confusing, slow and - - not quite BC compatible. - - * zend.c - zend_compile.c - zend_globals.h: - - Allow access to private/protected variables of $clone inside the __clone() - - method - -2002-10-06 Andi Gutmans - - * zend_execute.c: - Fix problem with unsetting object members. - -2002-10-01 Andi Gutmans - - * zend_language_parser.y: - - Fix problem when crashing on illegal tokens in class name during class - - definition. - -2002-09-30 Derick Rethans - - * ZEND_CHANGES: - No tabs :) - -2002-09-28 Derick Rethans - - * zend_builtin_functions.c: - Fix for defines... - - * zend_builtin_functions.c: - Fix build in non-ZTS mode - -2002-09-26 Ilia Alshanetsky - - * zend_API.c - zend_builtin_functions.c - zend_compile.c - zend_constants.c - zend_execute.c - zend_execute_API.c - zend_language_parser.y - zend_object_handlers.c - zend_operators.c - zend_operators.h: MFZE1 - -2002-09-25 Stanislav Malyshev - - * zend_extensions.h: - Propmote API NO year, so that it will never be the same as ZE1 API NO - -2002-09-24 Andi Gutmans - - * zend_compile.c: - Fix leak - - * zend_language_parser.y - zend_compile.c - zend_compile.h - zend_execute.c: - - Megapatch to try and support inheritance from sub-classes. Things might - - be *very* buggy now so don't get too upset if that happens. - - I still need to improve some stuff but it's a good step (hopefully). - -2002-09-23 Andi Gutmans - - * zend_globals.h - zend_ini.c - zend_language_parser.y: - MFZE1. - -2002-09-21 Andi Gutmans - - * zend_extensions.h: - Someone screwed this up. - -2002-09-19 Derick Rethans - - * zend_ini.c: - Make Colin happy - -2002-09-19 Zeev Suraski - - * zend.c - zend.h - zend_execute_API.c: MFZE1 - connection_status() fix - - * zend.c: Fix non ZTS build - - * zend.c: Fix that obscure crash in Debug_TS mode - -2002-09-18 Zeev Suraski - - * zend.c: - Fix the thread-safe initialization of the ZE2. This should solve some - sporadic crashes, as well as the problem with the built-in constants. - - * zend_constants.c: Remove dead code - - * zend_builtin_functions.c: Add useful debugging function - -2002-09-17 Zeev Suraski - - * zend_hash.c - zend_hash.h: Add tracking for hashtable allocation - - * zend.c: ZE2 fix - - * zend_compile.c: whitespace - - * zend.c - zend.h: MFZE1 - threading fix - -2002-09-16 Andrei Zmievski - - * zend_API.h - zend_builtin_functions.c - zend_API.c - zend_execute_API.c: MFZE1 - -2002-09-15 Ilia Alshanetsky - - * zend_highlight.c: Make zend actually strip comments. Bug #18151 - - * zend.c: - Make zend return a proper exit error code when it encounters a parse error. - -2002-09-15 Andi Gutmans - - * zend_compile.c: - - Hopefully fix problem with __autoload not working well with inherited classes. - - There might still be some weird situations I haven't thought of. - - * zend_list.c - zend_execute.c: - WS fix - "while (" instead of "while(" - - * zend_execute_API.c - zend_ini.c - zend_list.c - zend_object_handlers.c - zend_objects_API.c - zend_operators.c - zend_API.c - zend_builtin_functions.c - zend_compile.c - zend_execute.c: - WS - Always use "if (" and not "if(" - - * zend_execute_API.c: - WS - -2002-09-10 Stanislav Malyshev - - * zend_execute_API.c - zend_variables.c: MFZE1 - -2002-09-09 Stanislav Malyshev - - * zend_object_handlers.c: remove comment - -2002-09-08 Andi Gutmans - - * zend.h: - Prepare for alpha 3 - -2002-09-05 Stanislav Malyshev - - * zend_compile.c: quick-n-dirty inheritance support for __handlers - -2002-09-04 Sebastian Bergmann - - * ZEND_CHANGES: Whitespace fixes. - -2002-09-04 Stanislav Malyshev - - * zend_object_handlers.c: remove dead code - - * ZEND_CHANGES - zend_object_handlers.c: Fix __call and add some docs - -2002-09-04 Sebastian Bergmann - - * zend_object_handlers.c: Fix ZTS build. - - * ZEND_CHANGES: TBD: __call(), __get(), __set(). - -2002-09-04 Stanislav Malyshev - - * zend.h - zend_compile.c - zend_compile.h - zend_execute.c - zend_extensions.h - zend_object_handlers.c - zend_objects.c: Support for __get, __set and __call in classes. - This should work as follows: if class hasn't member with given name, - __get/__set is called. If class has no method with given name, __call is called. - __get/__set are not recursive, __call can be. - -2002-09-04 Sebastian Bergmann - - * ZEND_CHANGES: Workaround for superfluous comma in var_export() result. - - * ZEND_CHANGES: - Let debug_backtrace() example print out the class name, if applicable, and the function/method arguments. - -2002-09-03 Thies C. Arntzen - - * zend_builtin_functions.c: nuke warning - - * zend_builtin_functions.c: nuke unneeded stuff - -2002-09-03 Zeev Suraski - - * zend.c - zend.h - zend_ini.c: MFZE1 - -2002-09-03 Derick Rethans - - * zend_ini.c: - Revert - - * zend_ini.c: - - MFH for: Apply rest of html errors fix (Patch by Jan Lehnardt ) - -2002-09-03 Sebastian Bergmann - - * zend.h: - Add html_errors to zend_utility_values. Patch by Jan Lehnardt . - -2002-09-03 Andi Gutmans - - * zend_builtin_functions.c: - Fix typo - -2002-09-02 Thies C. Arntzen - - * zend_builtin_functions.c: - refine last patch. if the argument-stack is not consistent don't try to show - arguments. no call to zend_error is made as we might end up in an infinite - recursion if called from an error_handler. - so: if the arguments to functions aren't shown in debug_backtrace this is 'cause - the arument stack was not consistent when debug_backtrace was called. - - * zend_builtin_functions.c: - debug_backtrace() now checks the complete argument-stack for consistency. - -2002-09-02 Stanislav Malyshev - - * zend_execute.c: MFZE1 - -2002-09-01 Andi Gutmans - - * zend_llist.c: - Fix leak reported by "l0t3k" - -2002-09-01 Stanislav Malyshev - - * zend_operators.c: MFZE1 - -2002-08-28 Thies Arntzen - - * zend_builtin_functions.c - zend_execute_API.c: debug_backtrace() - - make args passed to functions called vy call_user_function available again. - - * zend_builtin_functions.c: debug_backtrace(): - - make args work if called from the error_handler - - fix refcount for args - - * zend.c: - clear current_execute_data on bailout as it would point into some freed area - on the stack. - -2002-08-28 derick - - * zend.c: - MFZE1 - -2002-08-26 Thies Arntzen - - * zend_builtin_functions.c: - debug_backtrace(): show name of included file for include and require calls - plus some small fixes suggested by andi. - -2002-08-24 Andi Gutmans - - * zend_builtin_functions.c: - Whitespace - - * zend_builtin_functions.c: - Whitespace and better variable name - -2002-08-24 Thies Arntzen - - * zend_builtin_functions.c: fix warning - -2002-08-23 Andi Gutmans - - * Zend.m4: - Add \n to configure fprintf - - * zend_extensions.c: - dlerror -> DL_ERROR - -2002-08-23 Thies Arntzen - - * zend_builtin_functions.c: - debug_backtrace: show include/require/eval as normal functions on the stack - -2002-08-23 derick - - * zend_builtin_functions.c: - No spaces :) - -2002-08-23 Thies Arntzen - - * zend_builtin_functions.c: - - debug_backtrace now also returns an array containing the arguments of the - called function. - - zeev, andi - is knowing the structure of the stack considered a bad thing in - zend_builtin_function? if yes i would have to create a new function in - zend_ptr_stack.c (but i think we are save this way) - - * zend_builtin_functions.c - zend_execute_API.c: - debug_backtrace: - added "type" ('->' or '::') for object calls. - made calls done thru call_user_func show-up correct in backtraces. - - andi, - does this look correct to you? - - * zend_execute.c: those are set by RETURN_FROM_EXECUTE - -2002-08-21 Thies Arntzen - - * zend_execute.c: - zend_execute: make sure that current_execute_data points to the right thing - after coming back from recursion. - -2002-08-19 Zeev Suraski - - * zend_operators.c: MFZE1 - -2002-08-17 Andi Gutmans - - * zend_execute.c: MFZE1 - -2002-08-17 Zeev Suraski - - * zend_execute.c - zend_hash.c: MFZE1 - -2002-08-16 Stig Bakken - - * zend.c: * append emacs footer - - * zend.c: * remove builtin exception class - -2002-08-16 Andi Gutmans - - * zend.c: - Fix whitespace - -2002-08-16 Stig Bakken - - * zend_execute_API.c - zend_globals.h - zend.c - zend_builtin_functions.c: - - Added set_exception_handler() function for registering a global, - catch-all exception handling function - - Added set_exception_handler() function for registering a global, - catch-all exception handling function (Stig) - -2002-08-15 Zeev Suraski - - * flex.skl - zend.c - zend_globals.h - zend_language_scanner.l: MFZE1 - -2002-08-14 jason - - * zend_compile.c - zend_compile.h - zend_globals.h - zend_language_parser.y: - MFZE1 (use token instead of global for opcode counting) - -2002-08-13 Andi Gutmans - - * zend_execute_API.c: - - Fix crash when exception is raised in __autoload function - -2002-08-13 Zeev Suraski - - * zend.h: MFZE1 - -2002-08-08 sebastian - - * zend_objects.c: Fix warning. - -2002-08-08 stas - - * zend_objects.c - zend_objects.h - zend_objects_API.c - zend_objects_API.h: Add ZEND_API to functions - -2002-08-08 Andi Gutmans - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_language_parser.y - zend_language_scanner.l - zend_operators.c - zend_operators.h: - - Make new 'is' operator work with classes only and return false when - - the object isn't of the said class or the value isn't an object. - - * zend_static_allocator.c: - Bad Harald! :) - -2002-08-08 Zeev Suraski - - * zend_alloc.c: MFZE1 - -2002-08-07 phanto - - * zend_static_allocator.c - zend_alloc.c - zend_config.w32.h - zend_hash.c - zend_ini.c - zend_llist.h - zend_mm.c - zend_operators.c: make win32 debug output more verbose - -2002-08-03 Andi Gutmans - - * tests/zend2.php: - Small fix - -2002-08-03 Zeev Suraski - - * zend_execute.c: MFZE1 - -2002-08-01 stas - - * zend_execute.c - zend_hash.c: MFZE1 - -2002-07-30 jason - - * zend_compile.c - zend_execute.c - zend_globals.h: MFZE1 global declare - - * zend_compile.c: Fix segfault - -2002-07-30 Andrei Zmievski - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_language_parser.y - zend_language_scanner.l - zend_operators.c - zend_operators.h: - - Adding 'is' operator that can be used to check the type of a variable, - or its class. - -2002-07-28 phanto - - * OBJECTS2_HOWTO: update the handlers struct - -2002-07-27 Andi Gutmans - - * zend_compile.c - zend_execute_API.c: - - Make sure classes are first looked for in the current scope. - - Make sure that during inheritance the global scope is searched if the - - current one doesn't work. - -2002-07-26 Andi Gutmans - - * zend_execute.c - zend.c - zend_builtin_functions.c - zend_compile.h: - - Fix problem with debug_backtrace() reported by Stig. We weren't reporting - - global function information because it wasn't available. We have to do - - an additional assignment per-function call so that it'll be available. - - Also don't define the global scope as function name _main_ but leave it - - empty so that frameworks like Pear can decide what they want to do. - -2002-07-25 sniper - - * Zend.m4: Fixed 3 major failures in this test: - - 1. Tests work better when they are actually run.. - 2. When file is opened, it should be closed sometime too. - 3. AC_TRY_RUN cleans after itself (rm -f conftest.*), so it's - good idea to read the values while the file still exists. - - -2002-07-24 Andi Gutmans - - * zend_mm.c: - Fix some compile problems with the new configure checks. - -2002-07-24 James Cox - - * Zend.m4 - zend_mm.c: move testing for the alignment values into configure. - - * Zend.m4: ws fixes. - -2002-07-23 Andi Gutmans - - * zend_hash.c: - Fix WS. - -2002-07-21 Andi Gutmans - - * zend_compile.c: - - Fix bug reported by Sebastian where old constructors didn't work in - - nested classes. - -2002-07-18 derick - - * zend.h - zend_extensions.c: - MFZE1 - MacOSX fixes by Marko Karppinen - -2002-07-17 Andi Gutmans - - * zend_compile.c: - - Remove code which wasn't supposed to go into the patch. - - * zend_compile.c - zend_language_parser.y: - Rejuggle some code. - -2002-07-17 sniper - - * ZEND_CHANGES: This was mentioned already above (with an example too :) - -2002-07-16 Andi Gutmans - - * ZEND_CHANGES: - Before I forget to list it, this was also added. - - * zend_language_scanner.l: - - Syntactic sugar - Add "public" as a synonym for "var". - - Now we have the three P's. - You can do: - - - -2002-07-15 derick - - * zend_operators.c: - MFH of the crap removal - -2002-07-15 Andi Gutmans - - * ZEND_CHANGES - zend.c - zend.h - zend_API.c - zend_compile.c - zend_language_parser.y - zend_language_scanner.l - zend_opcode.c: - - Commit patch to support protected member variables (by Timm Friebe w/ - - some fixes by me). - - You can't access protected variables from outside the object. If you want - - to see a protected member from your ancestors you need to declare the - - member as protected in the class you want to use it in. You can't - - redeclare a protected variable as private nor the other way around. - - * zend_operators.c: - - Really implement bool increment/decrement as flip-flop. - -2002-07-14 Andi Gutmans - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_language_parser.y - zend_language_scanner.l - ZEND_CHANGES: - - Nuke delete(). It was a big mistake to introduce it and I finally - - understand why Java didn't do so. - - If you still want to control destruction of your object then either make - - sure you kill all references or create a destruction method which you - - call yourself. - - * zend_execute.c: - Nuke some unused code - -2002-07-14 derick - - * zend_operators.c: MFZE1 - - * zend_operators.c: - MFZE1 - -2002-07-07 Andi Gutmans - - * zend_objects_API.c: - Path which should improve previous fix. - - * zend_objects_API.c: - - First try at solving problem with different objects being allocated the - - same id. - -2002-07-07 Stanislav Malyshev - - * zend_object_handlers.c: name length should be strlen+1 - -2002-07-07 Sebastian Bergmann - - * zend_language_parser.y: - Allow for 'class Namespace::Bar extends Foo' syntax. Patch by Timm Friebe . - -2002-07-06 Andi Gutmans - - * zend_execute.c: - - Fix problem where scope was lost in nested function calls. - - Thanks to Timm Friebe for diving into this one. - -2002-07-06 Zeev Suraski - - * zend_language_parser.y: spelling fix - -2002-07-05 Stig Bakken - - * zend_builtin_functions.c: * folding fixes - -2002-07-01 Andi Gutmans - - * zend_compile.c: - Fix bug when acccessing $this not in class scope. - - * zend_objects.h - zend_objects.c: - Export zend_object_get_address() - -2002-06-30 Andi Gutmans - - * ZEND_CHANGES: - Remember to document autoload when I have time. - -2002-06-30 Derick Rethans - - * zend_modules.h: - MFZE1 - -2002-06-29 Andi Gutmans - - * zend.h: - Get ready for alpha2 - - * zend_execute_API.c: - Invalid -> Undefined - - * zend_language_parser.y: - Add missing semi-colon. - - * zend_execute_API.c - zend_execute.c: - Improve some error messages. - - * zend_compile.c: - Revert previous fix. - - * zend_compile.c: - Change E_ERROR -> E_COMPILE_ERROR where needed. - - * zend_compile.c: - - Fix for bug #17882. We complain if the same method is declared twice. - - * zend.h - zend_operators.c: - Fix bug 15037 - - Bump version to alpha2-dev - -2002-06-28 Andi Gutmans - - * zend_operators.c: - WS fix - -2002-06-26 Andi Gutmans - - * zend_execute_API.c: - - Autoloading support based on patch from Ivan Ristic. - - Again I hope this feature ends up working well because if it doesn't we - - might need to nuke it. This only works for global scoped classes and it - - will never work for sub-classes so don't even ask!!!!! - - Just define an __autoload() function in the global scope and it will be - - called with the class name as the parameter if it doesn't manage to find - - the class. - - * zend_API.c - zend_builtin_functions.c - zend_mm.h: - Centralize global class fetch - - * zend_alloc.c - zend_execute.c: - - Fix problem with scope's not changing correctly during method calls. - - Reapply a tiny optimization to the allocator so that in non-debug mode - - we clean memory without detecting leaks. - -2002-06-24 Andi Gutmans - - * zend_fast_cache.h: - - MFZE1 (Turn off fast cache until we make sure it performs well.) - - * zend_alloc.c: - More fixes (warnings, bug fixes etc.) - - * zend_execute.c: - - Revert patch which checks at run-time if you're allowed to assign - - certain values by reference. - - We still need to find a solution for cases when this shouldn't be allowed - - as it might cause leaks. - - * zend_alloc.c: - Fix crash bug and clean up a bit. - -2002-06-24 Sebastian Bergmann - - * Zend.m4: IMHO, ZTS should no longer be labeled experimental. - -2002-06-24 Andi Gutmans - - * zend_alloc.c: - MFZE1 - - * zend_alloc.c: - Don't use cache if we're using ZEND_MM - - * zend_mm.c: - - Hardcode alignment to 8. We might need a configure check for this. - - * zend_mm.c - zend_mm.h: - Improve memory manager to allocate small blocks quickly. - - * zend_alloc.h - zend_mm.h - zend_alloc.c: - - Don't keep allocated blocks in a linked list if we're in non-debug mode - - as now the memory manager takes care to nuke all leaking blocks. - - * zend.h - zend_types.h: - MFZE1 - -2002-06-23 Andi Gutmans - - * zend_compile.c - zend_execute.c: - - Fix problem with constructor not being inherited and called correctly. - - * zend_mm.c: - Fix small bug - - * zend_mm.c: - - Almost completely implement realloc(). It now resizes in place when - - possible. - -2002-06-22 Andi Gutmans - - * zend_alloc.c - zend_mm.c: - Fix crash when zend_mm_shutdown is called more than once. - - * zend_alloc.c - zend_alloc.h - zend_globals.h - zend_language_parser.y: - MFZE1 - - * zend_constants.h - zend_objects.c - zend_variables.c - zend_variables.h - zend_constants.c - zend_alloc.c - zend_alloc.h: - Nuke persist_alloc(). - -2002-06-19 Andi Gutmans - - * zend_globals.h: - - This was also supposed to be part of the previous ZEND_MM commit :) - - * zend_alloc.c: - - Oops, this was supposed to be part of the previous #ifdef ZEND_MM change - - * zend_mm.h: - Use #ifdef for ZEND_MM - - * zend_mm.c: - Make sure MAX is defined - - * zend_constants.c: - - Fix problem where you couldn't define constants with different cases but - - the same name. - -2002-06-18 Derick Rethans - - * zend.c: - MFZE1 - -2002-06-17 Andi Gutmans - - * zend_mm.c: - Improve speed of alignment calculation - - * zend_mm.c - zend_mm.h - zend_alloc.c: - - Fix a bug and add code which frees actual allocated segments at the end - - of execution (this still doesn't work because some blocks remain - - referenced after the memory manager is killed. - - * zend_mm.c - zend_mm.h: - Save space per-allocated block. - -2002-06-16 Andi Gutmans - - * zend_execute.c - zend_execute.h - zend_execute_API.c: - Fix bug in class constants - - Start centralizing main class lookups. This will help implement - - __autload() - - * zend_mm.c - zend_mm.h: - - Remove debug code which doesn't work anymore and add headers. - - * zend_globals.h - zend_mm.c - zend_mm.h - zend_alloc.c - ZendTS.dsp: - Commit an initial version of a home made memory manager. - - It's just for seeing if this would be an advantage to PHP in MT - - environments. If this is to become production material there is still - - a long way to go. - -2002-06-15 Andi Gutmans - - * zend_objects.h - zend_objects_API.c: - - Fix copy&paste problem where we allocated according to an old structure - - decleration and not the new one. - -2002-06-11 Andi Gutmans - - * zend_builtin_functions.c: - - Don't show debug_backtrace() in the trace itself. - - This patch is a bit ugly because the whole code itself is pretty complex - - and hard to re-order. - - * zend_execute.c - zend_language_parser.y: - - Fix problem with assigning functions by reference. - -2002-06-11 Sebastian Bergmann - - * RFCs/004.txt: Add __delegate(). - -2002-06-10 Harald Radi - - * zend_ts_hash.h - zend_ts_hash.c: added TS_HASH macro - -2002-06-10 Stanislav Malyshev - - * zend_execute.c: Fix leak - -2002-06-09 Harald Radi - - * zend_API.h - zend_builtin_functions.c - zend_object_handlers.h: - only check for an available class entry instead of - the std_object_handlers on some places - - -2002-06-08 Andi Gutmans - - * zend_hash.h - zend.h: - This should improve performance on Windows - - * zend_hash.h: - - Add a loop unrolled version of the hash function and a bit of an - - explanation about our hash function (Ralf S. Engelschall) - -2002-06-06 Sebastian Bergmann - - * RFCs/004.txt: Add RFC on delegation. - -2002-06-05 Sebastian Bergmann - - * zend_execute.c: Remove unused local variable. - -2002-06-05 Andi Gutmans - - * zend_compile.c - zend_execute.c - zend_object_handlers.c: - - Allow overloaded objects to receive the method name in its original - - case. - -2002-06-05 Derick Rethans - - * zend_llist.c: - Fix memleak (patch by Stefan Sesser) - -2002-06-04 Derick Rethans - - * zend_ini_scanner.l: - Fix for bug #17462 (Patch by Edin Kadribasic) - -2002-05-31 Andi Gutmans - - * ZendTS.dsp: - Add zend_objects_API.* to dsp - - * zend_objects_API.c: - Fix build (one more coming up) - - * zend_objects.c: - Fix build - -2002-05-31 Sebastian Bergmann - - * Zend.dsp: Add zend_objects_API.c to project. - -2002-05-31 Stanislav Malyshev - - * Makefile.am - zend_execute_API.c - zend_globals.h - zend_object_handlers.c - zend_objects.c - zend_objects.h - zend_objects_API.c - zend_objects_API.h: Generalize object storage and reference bookkeeping - -2002-05-30 Venkat Raghavan S - - * zend.h - zend_config.nw.h - acconfig.h: NetWare changes - -2002-05-26 Andi Gutmans - - * zend_multibyte.c: - - Add empty zend_multibyte.c to allow build with 4.3.0-dev. - -2002-05-24 Sebastian Bergmann - - * ZEND_CHANGES: Fugbix typo. - -2002-05-24 Andi Gutmans - - * ZEND_CHANGES: - Add a bit of information. - -2002-05-20 Zeev Suraski - - * zend_API.h - zend_execute.h - zend_list.h: MFZE1 (Expose more C++ APIs) - -2002-05-14 Andi Gutmans - - * zend_objects.c - zend_objects.h: - constructor_called is supposed to be destructor_called - -2002-05-13 Sterling Hughes - - * zend_qsort.c: MFZE1 - -2002-05-13 Derick Rethans - - * zend_builtin_functions.c: - MFZE1 - -2002-05-12 Zeev Suraski - - * zend_highlight.c: MFZE1 - -2002-05-12 Sebastian Bergmann - - * ZEND_CHANGES: Rephrase. - - * ZEND_CHANGES: Beautify. - - * ZEND_CHANGES: Start documenting the debug backtracing. - - * ZEND_CHANGES: Whitespace fixes. - -2002-05-11 Zeev Suraski - - * zend_highlight.c - zend_highlight.h: MFZE1 - -2002-05-10 Andi Gutmans - - * zend_builtin_functions.c: - Nuke C++ comment - - * zend_builtin_functions.c: - - Make debug_backtrace() return an array. Still not finished because I - might want to differentiate between method calls and static methods. - - Example: - $bt = debug_backtrace(); - foreach ($bt as $frame) { - if (isset($frame['class'])) { - print $frame['class']; - print "::"; - } - print $frame['function']; - print " ["; - print $frame['file']; - print ":"; - print $frame['line']; - print "]\n"; - } - -2002-05-08 Andi Gutmans - - * zend_execute.c - zend_builtin_functions.c: - - Hopefully fix problems with debug_backtrace() - -2002-05-08 Derick Rethans - - * zend_builtin_functions.c: - MFZE1 - -2002-05-07 Andi Gutmans - - * zend.c - zend_builtin_functions.c - zend_compile.h - zend_execute.c: - - More debug backtrace work. It still doesn't work very well... - -2002-05-02 Andi Gutmans - - * zend.h - zend_builtin_functions.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_globals.h: Initial support for built-in backtracing. - There are still a few problems such as includes and calling other functions - from internal functions which aren't seen (will have to think if and how to - fix this). - Also the main scripts filename isn't available. Need to think about that. - -2002-04-30 Stanislav Malyshev - - * zend_API.h - zend_builtin_functions.c - zend_object_handlers.c - zend_object_handlers.h - zend_operators.h - zend_API.c: Make OBJCE return zend_class_entry*, also some cleanups - -2002-04-28 Sebastian Bergmann - - * zend_alloc.c - zend_alloc.h: Revert. - -2002-04-27 Sebastian Bergmann - - * zend_alloc.c - zend_alloc.h: - MFZE1: If the size-operands of memset are constants, the compiler can turn them into fast inline code. So, instead of using ecalloc, we use emalloc + memset in macro form now. emalloc will not return NULL, so the chosen macro form is safe. This is not true for malloc(3). An inline function accomodates our needs here. Suggested by: http://www.mail-archive.com/dev%40httpd.apache.org/msg02492.html (Sascha) - -2002-04-25 Harald Radi - - * zend_config.w32.h: unbreak the win32 build - -2002-04-24 Harald Radi - - * zend_API.c: MFZE1 saschas 'Avoid exceeding buffer limits' patch - -2002-04-23 Harald Radi - - * zend_hash.c - zend_hash.h - zend_opcode.c - zend_operators.c - zend_operators.h - zend_ts_hash.c - zend_ts_hash.h - zend_builtin_functions.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_API.c - zend_API.h - zend.h: some type cleanup work - -2002-04-22 Harald Radi - - * zend_object_handlers.c - zend_object_handlers.h - zend_objects.h - zend_operators.h - zend_API.c - zend_API.h - zend_builtin_functions.c: added get_class_entry callback handler to the - object handlers structure - -2002-04-22 Sebastian Bergmann - - * Zend.m4: MFZE1: Change default value of inline-opt to yes (Sascha). - -2002-04-22 Harald Radi - - * zend_config.w32.h - acconfig.h - flex.skl: fixed linkage warning under win32 - -2002-04-20 Zeev Suraski - - * zend_execute_API.c: MFZE1 - -2002-04-19 Sebastian Bergmann - - * zend_list.c - zend_hash.c - zend_hash.h: - MFZE1: make sure the resource-list is always consistent during shutdown (Thies). - - * zend_hash.c: MFZE1: Fix imbalance bug (Zeev). - -2002-04-10 Jani Taskinen - - * zend_language_scanner.l - zend_language_parser.y: MFZE1 - -2002-04-07 Stanislav Malyshev - - * zend.h: make compatible with current PHP - - * zend_compile.c: sync - -2002-03-29 Derick Rethans - - * zend_compile.c: - revert patch - -2002-03-25 Derick Rethans - - * zend_compile.c: - MFZE1 - -2002-03-23 Andi Gutmans - - * zend_ts_hash.c - zend_ts_hash.h: - - Fix build without ZTS. If someone has a nicer fix let me know. - -2002-03-21 Andi Gutmans - - * zend_language_parser.y: - - No idea how this slipped in. Fix delete $obj statement. - -2002-03-20 Harald Radi - - * ZendTS.dsp - zend.h - zend_ts_hash.c - zend_ts_hash.h: added thread safe hashtable which allows concurrent - reads but only exclusive writes - -2002-03-19 Andi Gutmans - - * zend_language_parser.y - zend.h: - - Finish covering all parsed methods to check for validity in parser. - - Change zval's refcount to zend_uint (If it doesn't slow down the Engine - - too much it should probably stay this way). If anyone has time to test - - the difference in speed between zend_ushort & zend_uint in zend.h of - - the struct _zval_struct (one line change) I'd be glad to get some - - figures. - -2002-03-18 Andi Gutmans - - * zend_compile.c - zend_language_parser.y: - - More fixes to check for member/function call legality. - -2002-03-17 Andi Gutmans - - * zend_language_parser.y - zend_compile.c: - - Start putting error handling where method calls are being used in a - - context where only writable variables should be used. - -2002-03-15 Andi Gutmans - - * zend_execute.c - zend_object_handlers.h - zend_objects.c - zend_objects.h - zend_variables.c: - Pass TSRMLS to callbacks. - - * zend_execute.c: - - Scope fix. When calling an imported function the scope will change - - correctly to the scope of the functions class. - - - * zend_opcode.c - zend_execute.c - zend_compile.h - zend_compile.c: - - Fix issues with $this when using it by itself without indirection such as - - $this->foo. - -2002-03-14 Stanislav Malyshev - - * OBJECTS2_HOWTO: more cleanup - - * OBJECTS2_HOWTO: Update howto - - * zend_execute.c: fix for delete $this and unset $this - - * zend_execute_API.c: Fix call_user_function - -2002-03-12 Andi Gutmans - - * zend.h: - Forgot to close comment. - - * zend.h: - Macro for duality between Engine 1 and 2 - - * zend.c - zend.h - zend_API.c - zend_compile.c - zend_opcode.c - zend_operators.c: - Another couple of indirection fixes. - - Make class_entry->refcount be part of the structure and not allocated. - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_opcode.c: - Fix bug introduced with latest class hash table change. - -2002-03-12 Stanislav Malyshev - - * zend_API.c: Fix standard object creation - - * zend_API.c - zend_builtin_functions.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_opcode.c - zend.c - zend.h: - make class tables contain class_entry *, not class_entry - - fix isset($this) - -2002-03-10 Andi Gutmans - - * zend_execute.c: - Fix build in ZTS mode. - -2002-03-10 Stanislav Malyshev - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_object_handlers.c - zend_object_handlers.h: New stuff for objects API: - - Better assignment handling - - More flexible operations with zval-containing objects - -2002-03-09 Andi Gutmans - - * tests/zend2.php: - - Add the original example script to the CVS so that it's always available. - -2002-03-08 Sebastian Bergmann - - * ZEND_CHANGES: Add 'import const' example. - -2002-03-08 Andi Gutmans - - * zend_execute.c: - Support importing constants. e.g.: - - - * ZEND_CHANGES: - Add another 'import' example and merge 'import' section into 'Namespaces' section. - -2002-03-06 Andi Gutmans - - * zend_execute.c: - - Add function * and class * functionality. Only constants are left. - - - * ZEND_CHANGES: Consistency. - - * ZEND_CHANGES: Add 'import statement' section. - -2002-03-02 Andi Gutmans - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_globals.h - zend_language_parser.y - zend_language_scanner.l: - - Initial patch to support importing from class scopes (for Stig). - - It isn't complete yet but I want to work on it from another machine. It - - shouldn't break anything else so just don't try and use it. - - The following is a teaser of something that already works: - - -2002-03-02 Derick Rethans - - * zend_builtin_functions.c: - MFZE1 - -2002-03-01 Andrei Zmievski - - * zend_API.c: MFZE1 - -2002-03-01 Andi Gutmans - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_globals.h - zend_language_parser.y - zend_language_scanner.l: - - Remove use of C++ reserved words namespace/this - - * zend_opcode.c - zend_language_parser.y - zend_compile.h - zend_compile.c - zend_API.c: - Fix bug in nested try/catch's - - Infrastructure for implementing imports of methods. - - * zend_objects.c: - - Fix crash reported by Sebastian when destructor function causes a fatal - - error. I hope this does it and we don't find any other problems. - -2002-02-26 Andi Gutmans - - * zend_alloc.h - zend_alloc.c - zend.c: - MFZE1 - -2002-02-21 Sebastian Bergmann - - * ZEND_CHANGES: - Maintain ZEND_CHANGES to account for the addition of private member variables. - -2002-02-21 Andi Gutmans - - * zend_object_handlers.c - zend_opcode.c - zend_language_parser.y - zend_language_scanner.l - zend_compile.c - zend.c - zend.h - zend_API.c: - Experimental support for private members. - Hello; - } - } - - class MyClass2 extends MyClass { - function printHello() - { - MyClass::printHello(); /* Should print */ - print $this->Hello; /* Shouldn't print out anything */ - } - } - - $obj = new MyClass(); - print $obj->Hello; /* Shouldn't print out anything */ - $obj->printHello(); /* Should print */ - - $obj = new MyClass2(); - print $obj->Hello; /* Shouldn't print out anything */ - $obj->printHello(); - ?> - -2002-02-14 Stanislav Malyshev - - * zend.h - zend_API.c: Pass TSRM to create_object - -2002-02-14 Andrei Zmievski - - * zend_compile.c: - Fix the bug where the declared properties without init values were not - entered into the table. - -2002-02-13 Andi Gutmans - - * zend_compile.c - zend_compile.h - zend_language_parser.y: - - * zend_compile.h: - Export lex_scan(). Both the PHPDoc and tokenizer extension need this. I hope this is okay with Z&A. - -2002-02-08 Andi Gutmans - - * zend_objects.c: - Remove object debug messages. - -2002-02-07 Stanislav Malyshev - - * Makefile.am - OBJECTS2_HOWTO - ZendTS.dsp - configure.in - zend.h - zend_API.c - zend_API.h - zend_builtin_functions.c - zend_compile.c - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_globals.h - zend_object_handlers.c - zend_object_handlers.h - zend_objects.c - zend_objects.h - zend_operators.c - zend_operators.h - zend_variables.c: Mega-commit: Enter the new object model - Note: only standard Zend objects are working now. This is definitely going to - break custom objects like COM, Java, etc. - this will be fixed later. - Also, this may break other things that access objects' internals directly. - -2002-02-04 Andi Gutmans - - * zend_execute.c: - - This small patch should also take care of allowing unseting of $this->foo - - and static members. The unset() opcode was luckily already suitable for - - object overloading. - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_objects.c: - - Fix problem with the objects_destructor called during shutdown. It was - - freeing objects from id 0 instead of id 1. id 0 is not used. - - Change isset/empty opcodes to support static members and the new way of - - doing $this->foobar. Also the opcodes operate now on the hash table - - combined with the variable names so that they can be overloaded by the - - soon to be added overloading patch. - -2002-02-03 Adam Dickmeiss - - * Makefile.am - configure.in: - Zend config sets ZEND_EXTRA_LIBS. Bugs 14452, 14602, 14616, 14824 - -2002-02-02 Sebastian Bergmann - - * zend_builtin_functions.c: Revert per Andi's request. Sorry :-( - - * zend_builtin_functions.c: Fix warning. Again :-) - -2002-02-02 Andi Gutmans - - * zend_builtin_functions.c: - - Please don't use strcmp() and friends in Zend but only the mem* - - functions. I didn't check this patch so please check that it works. - -2002-02-02 Sebastian Bergmann - - * zend_builtin_functions.c: Fix a warning. - -2002-02-02 Andi Gutmans - - * zend_modules.h: - Nice catch by Derick. GINIT is dead. - -2002-02-01 Sebastian Bergmann - - * zend_builtin_functions.c: MFZE1: is_a() - -2002-01-27 Sebastian Bergmann - - * zend_config.w32.h: - MFZE1: define a couple of macros under win32. (Patch By: Jon Parise ) - -2002-01-25 Andi Gutmans - - * zend_compile.c - zend_execute_API.c - zend_objects.c - zend_objects.h - zend_opcode.c: - - First destructor hell fix. There was a situation where an object's - - destructor could be run after its class was already dead. Right now - - object destructors is the first thing whic happens during shutdown in - - order to prevent this problem. It's very likely that destructors will - - cause more grief and we'll have to outline exactly when you should use - - them and what kind of logic you're allowed to do inside of them. - - This bug was reported by sebastian. - -2002-01-22 Andi Gutmans - - * zend_execute.c: - - Fix a bug reported by Sebastian with indirect class names not working. - -2002-01-20 Andi Gutmans - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_language_parser.y - zend_opcode.c: - Improve performance of functions that use $GLOBALS[] - - Please check this and make sure it doesn't break anything. - -2002-01-19 Thies C. Arntzen - - * zend_language_parser.y: MFZE1 - -2002-01-14 Andi Gutmans - - * zend_execute_API.c: - - Fix crash bug in call_user_function_ex(). Thanks to Sebastian for the - - very nice and short reproducing script. - - -2002-01-14 Sebastian Bergmann - - * ZEND_CHANGES: Update Exceptions example. - -2002-01-13 Andi Gutmans - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_globals.h - zend_language_parser.y: - - Change exception handling to use the Java-like catch(MyException $exception) - - semantics. Example: - exception = $exception; - } - - function Display() - { - print "MyException: $this->exception\n"; - } - - } - class MyExceptionFoo extends MyException { - function __construct($exception) - { - $this->exception = $exception; - } - function Display() - { - print "MyException: $this->exception\n"; - } - } - - try { - throw new MyExceptionFoo("Hello"); - } catch (MyException $exception) { - $exception->Display(); - } - ?> - - * zend_ini_scanner.l: - MFZE1 - -2002-01-06 Andi Gutmans - - * zend.c: - - Output error when there's an uncaught exception (by Timm Friebe) - - * zend_execute.c: - Make sure $this is passed on to methods - -2002-01-06 Sebastian Bergmann - - * zend_ini.h - zend_ini_parser.y - zend_ini_scanner.l - zend_language_parser.y - zend_language_scanner.h - zend_language_scanner.l - zend_list.c - zend_list.h - zend_llist.c - zend_llist.h - zend_modules.h - zend_opcode.c - zend_operators.c - zend_operators.h - zend_ptr_stack.c - zend_ptr_stack.h - zend_qsort.c - zend_qsort.h - zend_sprintf.c - zend_stack.c - zend_stack.h - zend_static_allocator.c - zend_static_allocator.h - zend_variables.c - zend_variables.h - zend.c - zend.h - zend_API.c - zend_API.h - zend_alloc.c - zend_alloc.h - zend_builtin_functions.c - zend_builtin_functions.h - zend_compile.c - zend_compile.h - zend_config.w32.h - zend_constants.c - zend_constants.h - zend_dynamic_array.c - zend_dynamic_array.h - zend_errors.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_extensions.c - zend_extensions.h - zend_fast_cache.h - zend_globals.h - zend_globals_macros.h - zend_hash.c - zend_hash.h - zend_highlight.c - zend_highlight.h - zend_indent.c - zend_indent.h - zend_ini.c: Happy New Year. - -2002-01-05 Andi Gutmans - - * zend_compile.c: - Small fix - - * zend_compile.c - zend_compile.h - zend_execute.c: - Allow passing of $this as function arguments. - - Fix a bug which I introduced a couple of months ago - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_globals.h: - - Significantly improve the performance of method calls and $this->member - - lookups. - -2002-01-04 Andi Gutmans - - * zend_execute.c: - - Improve performance of indirect-referenced function calls - - * zend_compile.c: - Nuke C++ comments - - * zend_compile.c - zend_compile.h - zend_execute.c: - Separate other kinds of function calls too. - - Significantly improve performance of function calls by moving lowercasing - - the function name to compile-time when possible. - - * zend_compile.c - zend_compile.h - zend_execute.c: - - Start splitting up different kinds of function calls into different - - opcodes. - -2002-01-03 Derick Rethans - - * zend_API.c - zend_API.h - zend_execute.c - zend_list.c: - - MFZE1 for exit fix, exposing current function name in error messages and - exposing zend_zval_type_name(). - -2001-12-31 Sebastian Bergmann - - * ZEND_CHANGES: Consistency. - -2001-12-31 Andi Gutmans - - * ZEND_CHANGES: - - Add example of default argument for argument passed by-ref - -2001-12-30 Sebastian Bergmann - - * ZEND_CHANGES: Typo. - -2001-12-29 Andi Gutmans - - * zend.h: - - #define to help #ifdef stuff in PHP sources to make them work w/ ZE1 and - - 2 - - * ZEND_CHANGES: - A few clarifications - -2001-12-29 Sebastian Bergmann - - * ZEND_CHANGES: Integrate Andi's examples and some notes by Stig. - - * ZEND_CHANGES: Update Exceptions example. - -2001-12-28 Andi Gutmans - - * zend_compile.c - zend_compile.h - zend_language_parser.y: - - Fix some case insensitivity stuff in respect to classes - - * zend_execute.c - zend_language_parser.y: - - Support default arguments for reference parameters - - Fix two compile warnings - - * zend_compile.c: - - Wasn't adding the lower case version of the class name to the hash - -2001-12-27 Andi Gutmans - - * zend_compile.c - zend_objects.c: - - Use two underscores for __construct(), __clone and friends... - - * zend_objects.c: - - Only check refcount of object if the destructor was called. - - * zend.c - zend.h - zend_API.h - zend_compile.c - zend_objects.c - zend_objects.h: - - Experimental support for destructors. We need to see if destructors - - will actually work well in the context of PHP so we should consider this - - as experimental. Possible problems might be that when the constructor is - - run PHP might not be in a stable state. - - * zend_compile.c - zend_compile.h - zend_execute.c: - Support parent:: again - - * zend_compile.c: - Support unified constructor name _construct() - -2001-12-26 Andi Gutmans - - * zend_execute.c - zend_execute_API.c: - Fix scoping issue. The following works now: - id = self::$id++; - } - - function _clone() - { - $this->name = $clone->name; - $this->address = "New York"; - $this->id = self::$id++; - } - } - - - - $obj = new MyClass(); - - $obj->name = "Hello"; - $obj->address = "Tel-Aviv"; - - print $obj->id; - print "\n"; - - $obj = $obj->_clone(); - - print $obj->id; - print "\n"; - print $obj->name; - print "\n"; - print $obj->address; - print "\n"; - - * zend.c: - Print out object id for easier debugging - - * zend.c - zend.h - zend_API.h - zend_compile.c - zend_objects.c: - Pretty much finish _clone() support - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_language_parser.y: - Initial support for _clone() - - * zend_compile.c - zend_language_parser.y: - - Start fixing the parsing rules so that function and method calls - - can't be used in a write context. - - * zend.c: - Fix crash correctly. - -2001-12-25 Andi Gutmans - - * zend_language_parser.y: - Revert delete syntax patch - - * zend.c - zend_execute.c: - Fix a crash (not a thorough fix). - - Commented old code - -2001-12-24 Andi Gutmans - - * zend_execute.c: - - Fixed bug where global functions weren't called if they didn't exist - - in the class scope - -2001-12-23 Andi Gutmans - - * zend.c: - - Fix a bug where function's didn't work anymore in multi-threaded - - servers after the latest startup changes. - -2001-12-22 Andi Gutmans - - * zend_compile.c - zend_execute_API.c - zend_language_parser.y: - - Add initial capability of defining nested classes as class foo::bar - -2001-12-18 Zeev Suraski - - * zend_language_scanner.h - zend_language_scanner.l: MFZE1 - -2001-12-16 Sebastian Bergmann - - * ZEND_CHANGES: I'm too trigger-happy. - - * ZEND_CHANGES: delete is now function - -2001-12-16 Andi Gutmans - - * zend_language_parser.y: - - Seems like most people prefer delete($obj) over delete $obj. - - * zend_compile.c - zend_compile.h - zend_language_parser.y: - Start adding parsed variable checks. - - * zend_compile.h - zend_language_parser.y: - - Framework for knowing what kind of variable we just parsed. - - This will be used in compile-time error checking which couldn't be done - - at the level of the grammar. - -2001-12-13 Andi Gutmans - - * zend_language_parser.y: - - Rearrange grammar to allow dereferencing of objects returned from - - functions. It still crashes though. - - * zend.c - zend.h - zend_API.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_globals.h - zend_opcode.c: - Fix crash bug in startup code. - - Start work on being able to reference global and local scope - -2001-12-12 Andi Gutmans - - * Zend.dsp - zend.c - zend_constants.c - zend_globals.h: - - Infrastructure changes for allowing to access the global scope from - - within a class scope. - - Fix the Zend.dsp project a bit. It seems someone pretty much killed it - - when commiting their own personal configuration. Please be careful in - - future. - - * zend.h - zend_API.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_globals.h - zend_language_parser.y: - - Make classes have scope and function/constant lookups default to the class - -2001-12-11 Andi Gutmans - - * zend.c: - Merge from ZE1 - - * zend.c - zend.h - zend_API.c - zend_compile.c - zend_execute.c - zend_execute_API.c - zend_opcode.c: - - Rename zend_class_entry.constants -> zend_class_entry.constants_table - - * zend_execute.c: - - Start making scope change correctly when calling namespace functions. - - When inside a namespace fallback to global namespace when function - - or constant is not found. - -2001-12-11 Sebastian Bergmann - - * LICENSE: Forgot to update the LICENSE. - - * LICENSE - zend.c - zend.h - zend_API.c - zend_API.h - zend_alloc.c - zend_alloc.h - zend_builtin_functions.c - zend_builtin_functions.h - zend_compile.c - zend_compile.h - zend_config.w32.h - zend_constants.c - zend_constants.h - zend_dynamic_array.c - zend_dynamic_array.h - zend_errors.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_extensions.c - zend_extensions.h - zend_fast_cache.h - zend_globals.h - zend_globals_macros.h - zend_hash.c - zend_hash.h - zend_highlight.c - zend_highlight.h - zend_indent.c - zend_indent.h - zend_ini.c - zend_ini.h - zend_ini_parser.y - zend_ini_scanner.l - zend_language_parser.y - zend_language_scanner.h - zend_language_scanner.l - zend_list.c - zend_list.h - zend_llist.c - zend_llist.h - zend_modules.h - zend_opcode.c - zend_operators.c - zend_operators.h - zend_ptr_stack.c - zend_ptr_stack.h - zend_qsort.c - zend_qsort.h - zend_sprintf.c - zend_stack.c - zend_stack.h - zend_static_allocator.c - zend_static_allocator.h - zend_variables.c - zend_variables.h: Update headers. - - * Zend.m4 - zend.h: MFZE1 (AIX fixes) - - * zend_highlight.h - zend_highlight.c: MFZE1 (added zend_strip mode in the highliter) - -2001-12-10 Andi Gutmans - - * zend.h - zend_API.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_language_parser.y: - More namespaces work. - - Nuke memory leak. - -2001-12-08 Andi Gutmans - - * zend.c: - Fix crash with unhandled exceptions - -2001-12-06 Andi Gutmans - - * zend_execute.c: - Support constants. The following works now: - - - * zend_language_parser.y - zend_compile.c - zend_execute.c - zend_execute_API.c - zend_globals.h: - - Initial work on changing namespace scope. Only methods & variables - - right now. - - - * zend.c - zend_compile.c - zend_execute.c - zend_execute_API.c - zend_globals.h - zend_language_parser.y: - - Nuke the namespace work I did. It'll be redone differently. - -2001-12-05 Sebastian Bergmann - - * ZEND_CHANGES: Document recent changes. - -2001-12-04 Andi Gutmans - - * zend_builtin_functions.c: - Damn Zeev :) - -2001-12-01 Andi Gutmans - - * zend_API.c: - - Revert one of the changes because it might be before the memory - - manager has started. - - * zend_API.c - zend_constants.c: - Use alloca() when possible. - -2001-11-30 Andi Gutmans - - * zend.c - zend.h - zend_API.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_language_parser.y - zend_opcode.c: - - Initial support for class constants. There are still a few semantic - - issues which need to be looked into but basically it seems to work. - - Example: - - - * Zend.m4: - Fix typo - -2001-11-27 Andi Gutmans - - * zend_language_parser.y: - - Support syntax for class constants (doesn't do anything yet but - - required some reworking of the grammar). - -2001-11-26 Andi Gutmans - - * zend_compile.c - zend_compile.h - zend_language_parser.y: - - Support static $var = 0; style initialization of static class - - members. For example: - - class foo { - - static $my_static = 5; - - - - } - - - - print foo::$my_static; - -2001-11-25 Andi Gutmans - - * zend.c - zend_compile.c: - Fix crash and leak - - * zend_compile.c: - Whitespace - - * zend.c - zend.h - zend_API.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_language_parser.y - zend_opcode.c: - Support static members. The following script works: - - -2001-11-24 Andi Gutmans - - * zend_compile.c - zend_compile.h - zend_execute.c: - MFZE1 - -2001-11-15 Zeev Suraski - - * zend_compile.c: MFZE1 - -2001-11-05 stig - - * zend_objects.h: add newline at end of file to avoid warnings - - * zend_language_parser.y: non-zts compile fix - -2001-11-04 Andi Gutmans - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_language_parser.y: - - Support instantiation of nested class. The following script now should - - work: - -bar(); - - - - $obj = new foo::barbara(); - - $obj->bar(); - - - -2001-11-03 Andi Gutmans - - * zend.h: - RISC OS patch by Alex Waugh - - * zend.c - zend_API.h - zend_compile.c: - Add some initializations - - * zend_compile.c - zend_execute.c - zend.h: - - Add constructor to the zend_class_entry instead of looking it up each - - time by name. - - This will allow the next patch of being able to instantiate nested - - classes such as new foo::bar::barbara(); - -2001-10-29 Andi Gutmans - - * zend_API.c - zend_opcode.c: - Fix internal classes - - * zend.h - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute.h - zend_globals.h - zend_language_parser.y - zend_opcode.c: - Initial support for nested class definitions - -2001-10-27 Zeev Suraski - - * zend_execute.c: MFTGZE1 - -2001-10-26 Andi Gutmans - - * zend_execute_API.c: - Fix Zeev's MFZE1 - -2001-10-23 Zeev Suraski - - * zend_constants.c - zend_execute_API.c - zend_globals.h: MFZE1 - -2001-10-20 Andrei Zmievski - - * zend_API.c: MFHZ1 - -2001-10-12 Sebastian Bergmann - - * zend_API.c - zend_API.h - zend_modules.h: MFZE1: Introduced extension version numbers (Stig) - -2001-10-04 Sebastian Bergmann - - * zend_hash.c: MFZE1 - -2001-09-30 Andi Gutmans - - * zend.c - zend.h - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_globals.h - zend_language_parser.y - zend_language_scanner.l: - - Merge the NAMESPACES_BRANCH. It wasn't a good idea to have a branch when - - the whole CVS tree is work in progress - - * zend_compile.h - zend_execute.c: - - At last I've had some time to move all execute() locals into one struct. - - No immediate gain but it makes it more clear what variables are temps - - and which ones are execute() locals. - -2001-09-27 Andi Gutmans - - * zend_modules.h: - Bump it up in the right place - - * zend_modules.h: - Increase API number - -2001-09-26 Andi Gutmans - - * zend.c - zend.h - zend_compile.c - zend_execute.c: - Good catch by Sterling - -2001-09-24 Andi Gutmans - - * zend_execute.c - zend_execute_API.c - zend_globals.h: - More namespaces work - -2001-09-22 Sebastian Bergmann - - * ZEND_CHANGES: Keep ZEND_CHANGES up-to-date. - -2001-09-22 Zeev Suraski - - * zend_globals.h - flex.skl - zend.c - zend_ini_scanner.l - zend_language_scanner.l: MFZE1 - -2001-09-20 Andi Gutmans - - * zend.c - zend_compile.c: - Fix build on Win32 - - * zend.h - zend_compile.c - zend_compile.h - zend_execute.c - zend_globals.h - zend_language_parser.y - zend_language_scanner.l - zend.c: - - Create a branch for namespaces. This isn't even remotely close to - - working. - - * zend_list.h: - Nuke unused enum - -2001-09-19 Zeev Suraski - - * flex.skl - zend.c - zend_globals.h - zend_ini_scanner.l - zend_language_scanner.l: MFZE1 - -2001-09-19 Andi Gutmans - - * Makefile.am: - MFZE1 - -2001-09-19 Sebastian Bergmann - - * Makefile.am - zend_hash.c - zend_hash.h - zend_ini.c - zend_llist.c - zend_llist.h - zend_qsort.c - zend_qsort.h - Zend.dsp - ZendTS.dsp: MFZE1 - -2001-09-17 Brian L. Moon - - * RFCs/003.txt: adding RFC for loose type requirements for functions - -2001-09-16 Zeev Suraski - - * zend_compile.c: MFZE1 - -2001-09-10 Zeev Suraski - - * zend_compile.h - zend_globals.h - zend_ini_scanner.h - zend_ini_scanner.l - zend_language_scanner.h - zend_language_scanner.l: MFZE1 (nuke cplusplus code) - - * zend.c - zend_execute_API.c - zend_globals.h: MFZE1 (support return value in execute_scripts) - -2001-09-08 stig - - * RFCs/002.txt: remove bogus comment :) - - * RFCs/002.txt: RFC document for namespaces - - * RFCs/001.txt: wrapped to 80 columns :) - -2001-09-07 Andi Gutmans - - * zend_compile.c - zend_language_parser.y: - - Shift around the variable parsing code to make it simpler. - - * zend_llist.c: - - Fix warning (was fixed in ZE1 and not merged at some point). Please make - sure you merge patches! - -2001-09-05 Stanislav Malyshev - - * zend_operators.c: MFZE1 - -2001-09-03 Andi Gutmans - - * zend_language_parser.y: - CLS_CC -> TSRMLS_CC - -2001-08-31 Sterling Hughes - - * zend_llist.h: spaces->tabs - - * zend_llist.c - zend_llist.h - zend_execute_locks.h: MFZE1 - -2001-08-31 Zeev Suraski - - * zend.c - zend_compile.h: MFZE1 - -2001-08-30 Andi Gutmans - - * zend_compile.h - zend_compile.c: - Make it compile in thread-safe mode. - - * zend_compile.c - zend_compile.h - zend_execute.c: - Get rid of warning and C++ comments - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_globals.h - zend_language_parser.y - zend_language_scanner.l: - Initial support for exceptions. - -2001-08-30 Zeev Suraski - - * zend_execute.c: MFZE1 - -2001-08-28 Zeev Suraski - - * zend_language_scanner.l: MFZE1 - -2001-08-27 Andi Gutmans - - * RFCs/001.txt: - Add sample RFC - -2001-08-26 Stanislav Malyshev - - * Zend.m4 - zend.h: Add dlsym underscore detection, by Jani Taskinen - -2001-08-26 Andi Gutmans - - * zend_operators.c: - MFZE1 - - * zend_API.c: - - Merge Andrei's fix from Engine 1. Please commit patches to both trees! - -2001-08-21 Zeev Suraski - - * zend.c - zend_execute_API.c: MFZE1 - -2001-08-20 Zeev Suraski - - * zend_hash.c - zend_hash.h: MFZE1 - -2001-08-19 Andi Gutmans - - * zend.h: - Fix compile problem - -2001-08-19 Zeev Suraski - - * zend_compile.c: MFZE1 - -2001-08-18 Andi Gutmans - - * zend_execute.c - zend_llist.c - zend_llist.h: - Merge Sterling's patches from ZE1 - -2001-08-17 Andrei Zmievski - - * zend_execute.c: MFZE1 - -2001-08-17 Zeev Suraski - - * zend_alloc.c: MFZE1 - -2001-08-16 Zeev Suraski - - * flex.skl - zend_ini_scanner.l - zend_language_scanner.l: MFZE1 - -2001-08-16 Andi Gutmans - - * zend_execute.c: - Try and nuke get_object_zval_ptr() - - * zend_objects.c: - Remove bogus notice - - * zend_variables.c: - Sync with ZE1 - - * zend.h - zend_execute.c - zend_objects.c - zend_objects.h - zend_operators.c - zend_operators.h - zend_variables.c: - Fix a bug in method calls. - - Try to get the old copying behavior of objects to work (doesn't work yet). - -2001-08-15 Zeev Suraski - - * zend_extensions.c: MFZE1 - -2001-08-14 Zeev Suraski - - * zend_constants.c - zend_constants.h - zend_variables.c - zend_variables.h: MFZE1 - -2001-08-13 Andi Gutmans - - * zend_execute.c: - MFZE1 - - * zend_execute.c: - Merge from Engine 1 - -2001-08-13 Zeev Suraski - - * zend_API.c - zend_operators.c - zend_operators.h: MFZE1 - -2001-08-12 Stanislav Malyshev - - * zend_API.h: _FUNCTION is used in definition, so use _D - -2001-08-11 Andi Gutmans - - * zend_API.c - zend_API.h - zend_objects.c - zend_operators.c: - More work on making objects work - - * zend_API.c - zend_objects.c - zend_objects.h - zend_operators.c: - - Fix some places which create objects. The fixes are ugly and will be - revised when things start working well - -2001-08-11 Zeev Suraski - - * zend.c - zend.h - zend_API.c - zend_API.h - zend_alloc.c - zend_alloc.h - zend_builtin_functions.c - zend_compile.c - zend_constants.c - zend_constants.h - zend_execute_API.c - zend_hash.c - zend_hash.h - zend_ini.h - zend_ini_scanner.l - zend_language_parser.y - zend_language_scanner.l - zend_list.c - zend_list.h - zend_llist.c - zend_operators.c: Whitespace - -2001-08-11 Andi Gutmans - - * Makefile.am - zend_objects.c: - Fix UNIX build. - - * zend_compile.c: - - Need to do some rewriting in the parser instead of this. - - * zend.h: - - For Sebastian. Will allow to see you're using the Engine 2 CVS via - phpinfo() - -2001-08-10 Andi Gutmans - - * zend_API.h: - Merge from Engine 1 - - * zend_compile.c: - A couple of fixes - - * zend_API.h: - Merge from Engine 1 CVS - -2001-08-09 Andi Gutmans - - * zend.c: - Merge from Engine 1 tree - -2001-08-08 Andi Gutmans - - * zend.c - zend_compile.c - zend_compile.h - zend_globals.h: - Merge new $_GET, $_POST etc. patch from Engine 1 tree - - * zend_compile.c - zend_compile.h - zend_language_parser.y: - Preliminary patch for method() dereferencing - - * zend.c - zend.h: - Merge zend_try fix from Engine 1 - -2001-08-07 Zeev Suraski - - * ZendTS.dsp: Migrate .dsp patches - -2001-08-07 Andi Gutmans - - * ZendTS.dsp: - Forgot to commit the updated dsp - - * ZendTS.dsp: - More sync with latest CVS - - * zend_objects.c - zend_objects.h - zend_operators.h - zend_variables.c - ZendTS.dsp - zend.h - zend_API.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_globals.h - zend_language_parser.y - zend_language_scanner.l: - Sync Engine2 CVS with latest Engine CVS - -2001-08-06 Zeev Suraski - - * zend_indent.c: Commit uncommitted build fix - - * zend_compile.c - zend_globals.h - zend_language_scanner.l: - Fix an off by one lineno issue, in case of an implicit ; - - * flex.skl - zend_highlight.c: Better shared code - - * Makefile.am - Zend.dsp - Zend.m4 - ZendTS.dsp - flex.skl - zend.c - zend_globals.h - zend_globals_macros.h - zend_highlight.c - zend_indent.c - zend_ini.h - zend_ini_parser.y - zend_ini_scanner.h - zend_ini_scanner.l - zend_language_scanner.h - zend_language_scanner.l: - Merge from branch - move to standard C scanners in thread safe mode - - * Makefile.am - Zend.m4 - flex.skl - zend_ini_scanner.l - zend_language_scanner.l: Make the C++less scanner compile under UNIX - -2001-08-06 Andi Gutmans - - * zend_execute.c: - Move to using Z_ macros - - * zend_API.h: - Use Z_ macros - -2001-08-05 Zeev Suraski - - * zend_globals_macros.h: More nulled-out macros - - * zend.c - zend_API.c - zend_API.h: TSRMLS_FETCH work - -2001-08-04 stig - - * .cvsignore: added some more stuff to .cvsignore - -2001-08-03 Zeev Suraski - - * zend_alloc.c: Fix buglet - - * zend_alloc.c: Fix macro - - * zend.c - zend_alloc.c - zend_globals.h: - Implement fast memory allocation and reduced fragmentation under Windows. - - * zend_globals_macros.h: Some compat macros - -2001-08-02 Zeev Suraski - - * zend_execute.c: - require_once()/include_once will return true in case a file was not included - because it was already included earlier. - Changed the default return value type of the include() family from long to - boolean - - * zend_constants.c - zend_execute_API.c - zend_hash.c - zend_hash.h: - Avoid going over huge lists of functions, classes and constants. - Special thanks to the guys from the MS lab for the profiling tools :) - - * zend.c - zend_execute_API.c - zend_hash.c - zend_hash.h - zend_list.c - zend_list.h: Some cleanup - - * zend_builtin_functions.c - zend_hash.c - zend_hash.h: TSRMLS fixes - - * zend_ini_parser.y: non ZTS build fix - - * Zend.dsp - ZendTS.dsp - flex.skl - zend.c - zend_globals.h - zend_globals_macros.h - zend_highlight.c - zend_indent.c - zend_ini.h - zend_ini_parser.y - zend_ini_scanner.h - zend_ini_scanner.l - zend_language_scanner.h - zend_language_scanner.l: - Implement a standard C thread safe scanner within flex - -2001-08-01 Zeev Suraski - - * flex.skl - zend_language_scanner.l: - Implement fast scanning in the multithreaded environment - -2001-07-31 Zeev Suraski - - * zend_language_scanner.l: the make Sebastian happy part of the day :) - - * zend_ini.c - zend_ini.h - zend_ini_parser.y - zend_ini_scanner.h - zend_ini_scanner.l: More TSRMLS_FETCH work - - * zend_list.c - zend_list.h: More TSRMLS_FETCH annihilation - - * zend.c - zend.h - zend_API.c - zend_API.h - zend_builtin_functions.c - zend_compile.c - zend_compile.h - zend_constants.c - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_extensions.c - zend_extensions.h - zend_hash.c - zend_hash.h - zend_ini.c - zend_list.c - zend_list.h - zend_llist.c - zend_llist.h - zend_modules.h - zend_opcode.c: More TSRMLS_FETCH work - -2001-07-30 Zeev Suraski - - * zend_language_scanner.l: Compile fix - - * zend.c - zend_API.c - zend_API.h - zend_builtin_functions.c - zend_compile.c - zend_compile.h - zend_constants.c - zend_constants.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_highlight.c - zend_highlight.h - zend_ini.c - zend_ini.h - zend_ini_parser.y - zend_language_scanner.l - zend_modules.h: More TSRMLS_FETCH work - - * zend_API.c - zend_API.h - zend_builtin_functions.c - zend_modules.h: - More TSRMLS_FETCH work, and get rid of redundant ParametersPassedByRef - -2001-07-30 Andrei Zmievski - - * zend_API.c - zend_API.h: - Let's be consisten and keep TSRMLS_DC declaration after num_args. - -2001-07-30 Zeev Suraski - - * zend_API.c - zend_API.h - zend_builtin_functions.c - zend_execute.c - zend_execute_API.c - zend_globals.h - zend_hash.c - zend_hash.h - zend_highlight.h - zend_ini_parser.y - zend_ini_scanner.h - zend_ini_scanner.l - zend_language_parser.y - zend_language_scanner.l - zend_list.c - zend_list.h - zend_operators.c - zend_operators.h - zend_variables.c: More TSRMLS_FETCH annihilation - - * zend_API.c - zend_API.h: Get rid of more TSRMLS_FETCH's - - * zend.c - zend_API.c - zend_API.h - zend_builtin_functions.c - zend_builtin_functions.h - zend_compile.h - zend_constants.c - zend_execute.c - zend_execute_API.c - zend_opcode.c: Avoid TSRMLS_FETCH()'s (still lots of work left) - -2001-07-29 Andi Gutmans - - * zend_execute.h: - More object junk - - * zend.c: - Object macros... - -2001-07-28 Andi Gutmans - - * zend_operators.c: - Fix build - - * zend_operators.c: - More object macros. - - * zend_builtin_functions.c: - Use the Z_OBJ* macros for accessing objects - - * zend.h - zend_operators.h: - - Small patch to allow fixing the PHP tree to be compatible w/ the initial - - Zend 2 objects patch. Hopefully I can commit that this week. - -2001-07-28 Zeev Suraski - - * Zend.dsp - ZendTS.dsp - zend.c - zend.h - zend_API.c - zend_alloc.c - zend_alloc.h - zend_builtin_functions.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_fast_cache.h - zend_globals_macros.h - zend_highlight.c - zend_indent.c - zend_ini_parser.y - zend_ini_scanner.l - zend_language_parser.y - zend_language_scanner.h - zend_language_scanner.l - zend_opcode.c: Redesigned thread safety mechanism - nua nua - -2001-07-28 sascha - - * zend.h: Fix build - -2001-07-27 Zeev Suraski - - * zend.h - zend_API.c - zend_API.h - zend_builtin_functions.c - zend_compile.c - zend_compile.h - zend_constants.c - zend_constants.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_execute_locks.h - zend_globals_macros.h - zend_ini.c - zend_ini.h - zend_language_parser.y - zend_language_scanner.l - zend_list.c - zend_list.h - zend_modules.h - zend_operators.c - zend_variables.c - zend.c: Get rid of ELS_*(), and use TSRMLS_*() instead. - This patch is *bound* to break some files, as I must have had typos somewhere. - If you use any uncommon extension, please try to build it... - -2001-07-23 sascha - - * zend_alloc.c: tsrm_error is only available, if TSRM_DEBUG is defined. - -2001-07-21 Zeev Suraski - - * zend.c - zend.h: Always track bailout file/lineno - - * zend.c: Fix Release builds - - * zend.c - zend.h - zend_execute_API.c - zend_globals.h - zend_list.c: - Improve bailout mechanism, supports nesting of bailouts a-la try..catch - - * zend_hash.c: Fix compile warning - -2001-07-21 Andrei Zmievski - - * zend_compile.c: - Fix certain cases where inheritance of base class's overloaded handlers wasn't - being done. - -2001-07-20 Zeev Suraski - - * zend.c - zend_execute_API.c - zend_list.c: - Implement a more granular shutdown mechanism for the executor - - prevent corruption of constants and missing destructions of resources - -2001-07-19 Zeev Suraski - - * zend_compile.c: Unfix, it has too strong effects - - * zend_compile.c: Catch all cases - - * zend_compile.c: Fix bug #11970, strike 2 - - * zend_execute.c: Revert bogus patch - -2001-07-18 Stanislav Malyshev - - * zend_operators.c: fix double->long conversion - -2001-07-17 Andi Gutmans - - * zend_hash.c: - Remove unused code - -2001-07-16 Zeev Suraski - - * zend_API.h - zend_compile.c - zend_globals.h - zend_variables.c: - Fix bug #10287 - avoid crashing under a bogus usage of list() - - * zend.h - zend_compile.c - zend_execute_API.c: Fix bug #10467 - -2001-07-15 Zeev Suraski - - * zend_hash.h: Minor cleaning - - * zend_language_parser.y: Optimize the parser a bit - - * zend_language_scanner.h - zend_language_scanner.l: Fix an inline - - * zend_variables.c - zend_variables.h: - Time to bid this old timer goodbye - get rid of var_uninit() - - * zend_hash.c: Fix bug #6239 - - * zend_language_parser.y: - Allow indirect reference to method names in class::method() construct - - * zend_execute_API.c: Fix bug #10257 - - * zend_execute.c: Fix bug #11970 - - * zend_compile.c: Fix bug #9884 - - * zend.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_globals.h - zend_language_scanner.l - zend_opcode.c: - Improved interactive mode - it is now available in all builds, without any significant slowdown - - * zend.c: Early initialization - -2001-07-13 Zeev Suraski - - * zend_hash.c: layout - -2001-07-13 Thies C. Arntzen - - * zend_hash.c - zend_hash.h - zend_list.c: - the resource-lists are now destroyed backwards. this will make sure that - resources get destroyed in the opposite order they were created and thereby - db-cursors will always be released before their corresponding connection etc. - this sould not break anything! - -2001-07-11 Zeev Suraski - - * zend_API.c - zend_ptr_stack.c - zend_ptr_stack.h: Remove the last couple of bogus inlines - -2001-07-11 Andi Gutmans - - * zend_hash.c - zend_hash.h: - Move inline_zend_hash_func() to header file - -2001-07-11 Thies C. Arntzen - - * zend_API.h: fixed ZVAL_FALSE and ZVAL_TRUE - -2001-07-11 Stanislav Malyshev - - * zend_hash.h: No hashpjw anymore, but we have zend_hash_func - -2001-07-11 Zeev Suraski - - * zend_operators.c - zend_variables.h: Get rid of ZVAL_RESET... - - * zend_API.c - zend_operators.c - zend_variables.c - zend_variables.h: Get rid of some inlines - -2001-07-10 Andi Gutmans - - * zend_extensions.h - zend_hash.c - zend_hash.h: - Merge faster hash implementation. - - The hash function parameter in hash_init(...) is not used anymore. - - It should be removed but it is "to be decided" if we want to do that now - - or in a major version as it means changing MANY places and third party - - modules might stop working. - -2001-07-10 Thies C. Arntzen - - * zend_API.h - zend_variables.c: cleaned up the RETVAL_ RETURN_ and ZVAL_ macros - - added check for \0 at end-of-string at some places. all strings in PHP - have to be terminated with \0 because 3th party libraries might not be - binary-safe. - -2001-07-10 Andi Gutmans - - * zend_compile.c: - Commit Thies' patch. str.len was too long. - -2001-07-09 Andrei Zmievski - - * zend_API.c - zend_API.h: Adding new parameter parsing API. - -2001-07-09 Andi Gutmans - - * zend_hash.c - zend_hash.h: - - Significantly improve hash table performance by using djb's hash function - instead of hashpjw() and by using power of two sizes of hash tables (this - saves the % and isn't necessary with a good hash function). - Please try this patch. - -2001-07-03 Rasmus Lerdorf - - * zend_API.c: Trivial fix - but the period looks odd in error messages - -2001-06-30 Andi Gutmans - - * zend_alloc.c: - Fix the memory limit fix. - -2001-06-29 Andi Gutmans - - * zend_operators.c: - Remove bogus comment. - -2001-06-29 Zeev Suraski - - * zend_alloc.c: Fix memory_limit, kill warning - -2001-06-28 Zeev Suraski - - * zend_execute_locks.h: Fix warnings - -2001-06-27 Zeev Suraski - - * zend_execute.c: - Fix leak in the patch, and revert a couple of lines I didn't mean to commit - - * zend_execute.c: - Warn about illegal offsets - - Allow assignments to uninitialized string offsets (automatically pads the - string with spaces) - -2001-06-26 Zeev Suraski - - * zend_operators.c: - Fixed autoconversion of negative values to double (Fix bug #11685) - -2001-06-26 Andi Gutmans - - * zend_builtin_functions.c: - Fix crash bug (fix by Jani). - -2001-06-24 Andi Gutmans - - * zend.h: - Bump Zend version - -2001-06-21 Andi Gutmans - - * zend_execute.c - zend_execute_locks.h - zend_globals.h: - - Hopefully fix bug #11476 and improve garbage to be freed very quickly. - Tree tagged as PRE_GRANULAR_GARBAGE_FIX before commiting. - - * zend_execute_locks.h: - - Use inline instead of macro for PZVAL_LOCK()/PZVAL_UNLOCK() so that it - can be debugged. - - * zend_execute.c - zend_execute.h - zend_execute_API.c: - - Nuke dependency of all of PHP on zend_execute_locks.h. - -2001-06-21 Zeev Suraski - - * zend_execute.c: - Eliminate the leak that the original bogus code tried to solve - - * zend_compile.c - zend_execute.c - zend_globals.h: - parent::methodname() now works better with runtime classes (fix bug #11589) - - * zend_execute.c: - Fix bug #11590 (I want Andi to also review this patch before it goes into 4.0.6) - -2001-06-20 Andi Gutmans - - * zend_execute.c: - MFH - - * zend_execute.c: - Fix string offsets crash. - -2001-06-19 Andi Gutmans - - * zend_alloc.c: - Real MFH of memory fragmentation patch - - * zend_alloc.c: - Bad merge. Revert the previous patch (damn CVS). - - * zend_alloc.c: - MFH - - * zend_alloc.c: - - Fix memory fragmention problem which could lead to web server processes - growing much more than they should. (bug #11344?) - - * zend_execute.c - zend_execute.h: - MFH - -2001-06-19 Zeev Suraski - - * zend_execute.c - zend_execute.h: Add missing exports - - * zend_execute.c: Fix warning - -2001-06-13 Zeev Suraski - - * zend.c: MFH - - * zend.c: - Avoid crashing if the error reporting function is called after a bailout during shutdown - -2001-06-12 Zeev Suraski - - * zend_highlight.c: - Improve XHTML compliance (suggested by Anil Madhavapeddy) - -2001-06-10 Zeev Suraski - - * zend.c: Fix ZTS build problem - -2001-06-07 Andi Gutmans - - * zend_compile.h: - Avoid breaking op_array compatibility for 4.0.6 - -2001-05-30 Zeev Suraski - - * Zend.m4 - zend_execute_API.c: Add missing check - -2001-05-25 Andi Gutmans - - * zend_compile.c: - - Change if() to while() to make sure we skip enough opcodes - - * zend_compile.c: - MFH - - * zend_compile.c: - Fix memory leak - -2001-05-23 Andrei Zmievski - - * zend_builtin_functions.c: - Fix segfault -- need to copy-construct constant value. - -2001-05-21 Andrei Zmievski - - * zend_builtin_functions.c: Moving some functions into Zend. - -2001-05-20 sascha - - * .cvsignore: ignore ylwrap - -2001-05-20 Andi Gutmans - - * zend_list.h: - The previous name could be confused with resource # - - * zend_list.c - zend_list.h: - - Whitespace and change the name of the macro to something more verbose - ZEND_GET_RESOURCE_ID(...) - -2001-05-20 James Moore - - * zend_list.c - zend_list.h: - Add new ZEND_GET_LE macro for retrieving destructor - id's from remote extensions. (Jmoore, Zend Engine) - -2001-05-20 Andi Gutmans - - * zend_list.c: - Don't allow resource types of 0 - -2001-05-19 sascha - - * zend_hash.c: Fix segfault when using zend_hash_add_empty_element - -2001-05-18 Thies C. Arntzen - - * zend_alloc.c: reset allocated_memory_peak after each request. - -2001-05-17 Zeev Suraski - - * zend_language_scanner.l: That's slightly clearer that way :) - - * zend_alloc.c: Fix build - - * zend.c: MFH - - * zend.c: Fix corruption issue - -2001-05-16 Zeev Suraski - - * zend_hash.c - zend_hash.h: - Implement zend_hash_add_empty_element() using the existing infrastructure - - * zend_globals.h: Commit missing fix - - * Zend.m4 - zend_alloc.c - zend_globals.h: Merge memory usage into memory limit - -2001-05-14 sascha - - * zend_hash.c: - Initialize empty pDataPtr to a pseudo value to prevent a pefree on - pData. - -2001-05-12 Andi Gutmans - - * zend_variables.c: - Remove check for ht == NULL in copy_ctor. - If ht is NULL at this point then we are better off crashing and fixing - the bug that caused it. - -2001-05-11 sascha - - * zend.h: add missing closing paranthesis - - * zend_hash.c: Some extensions don't associate any data with hash entries, - except the key. Prior to this change, a separate chunk of memory - was allocated in that case to store exactly zero bytes (plus - memory manager overhead). We treat that case similar to the - pointer case, but don't copy any data at all (because the pointer - is usually the NULL pointer). - - * zend_constants.c: - Fix a memory leak which occured upon registering an already existing - constant. - -2001-05-11 Thies C. Arntzen - - * Zend.m4 - zend_alloc.c - zend_globals.h: added --enable-memory-usage-info - -2001-05-11 Andi Gutmans - - * zend_opcode.c: - MFH - - * zend_opcode.c: - - Fix crash bug when opcodes array is erealloc()'ed to a different memory - area before it reaches the loop. - - Some whitespace stuff - -2001-05-10 Zeev Suraski - - * zend_operators.c: - Treat numeric strings as numbers in the increment operator - -2001-05-09 Andrei Zmievski - - * zend_API.c: Nuke unused variable. - - * zend_API.c: Fix a few bugs in zend_is_callable() and make it stricter. - -2001-05-08 Andi Gutmans - - * zend_language_scanner.l: - Fix line numbers when some lines end with \r - - * zend_opcode.c: - Fix crash bug reported by DBG author Dmitri Dmitrienko. - -2001-05-07 Zeev Suraski - - * zend.c: Make zend_execute_scripts() reentrant - -2001-05-06 Zeev Suraski - - * zend.c - zend_compile.c - zend_compile.h: - Recover from a parse error in include files (before, it could result in a crash under certain circumstances). Fix bug #8663 - -2001-05-06 Andi Gutmans - - * .cvsignore: - .cc files were renamed. Update .cvsignore. - -2001-05-06 Zeev Suraski - - * zend_operators.h: Yikes, that would have been a very bad bug :) - - * zend_execute.c: - Floating point keys didn't work in array() (fix bug #6662) - - * zend_compile.c - zend_execute_API.c: - Hear hear, interactive mode is finally showing some progress: - - Support function calls - - Fix crash bug - - * zend_compile.h - zend_language_parser.y - zend_language_scanner.l: Support interactive mode in thread-safe builds - - * zend_operators.h: Fix autoconversion of hexadecimal strings - It's time to close bug #5404 :) - - * zend_highlight.c: Retain single spaces as spaces to condense HTML - -2001-05-02 Andi Gutmans - - * zend_ini_scanner.l: - Support \r as newline in the ini scanner - - * zend_language_scanner.l: - Handle MAC OS X \r line endings - - * zend_execute.c: - - Patch by Andrei to prevent crash in error situation when not all - object overloading handles are defined. - -2001-05-01 Andi Gutmans - - * zend.h: - Bump up Zend version - -2001-04-30 Andi Gutmans - - * zend_builtin_functions.c: - Add mistakenly removen closing bracket - - * zend_builtin_functions.c: - Get rid of warning - - * zend_alloc.c: - - Try to solve crash on OS400. There is actually no reason I can see for - why his fix should solve a crash but it doesn't harm. - - * zend_execute_API.c: - Fix crash bug in interactive mode - -2001-04-29 Andi Gutmans - - * zend_alloc.h: - Whitespace - - * zend_alloc.c - zend_alloc.h: - Improve overwrite detection in debug mode. - - * zend_operators.c: - - Previous patch for too early freeing of resources seemed to have worked. - - Clean it up a bit. - - * zend_operators.c: - - Try and solve the too early resource destruction problem. - -2001-04-28 Zeev Suraski - - * zend.h - zend_hash.c - zend_language_scanner.l - zend_operators.c: include limits.h if available - - * zend.h: Fix bug 5661 - -2001-04-28 Andi Gutmans - - * zend_operators.c: - Move all cases into switch(). - - * zend_alloc.c: - Just some little whitespace stuff. - - * zend_alloc.c: - - Don't add/remove cached memory blocks from blocks list as this will slow - - down performance a bit. - -2001-04-28 Zeev Suraski - - * zend_operators.c: - Resources weren't being properly destroyed by the convert_to_*() functions - -2001-04-27 Andi Gutmans - - * zend_API.c - zend_builtin_functions.c - zend_hash.c - zend_language_scanner.l - zend_operators.c - zend_operators.h: - More whitespace fixes while I'm at it. - - * zend.h - zend_alloc.c - zend_builtin_functions.c - zend_execute_API.c - zend_extensions.c - zend_language_scanner.l: - - Whitespace changes to be standard like the rest of Zend - -2001-04-24 Andi Gutmans - - * zend_execute.c: - Due to popular demand merge the foreach() crash fix. - -2001-04-24 Andrei Zmievski - - * zend_builtin_functions.c: MFH. - -2001-04-21 Andi Gutmans - - * zend_llist.c - zend_llist.h: - Add typedef for function pointer of llist dtor - -2001-04-20 Andi Gutmans - - * zend_execute.c: - - Fix for crash bug when using invalid arguments in the foreach() loop. - - Reported by Yasuo Ohgaki - -2001-04-19 Andi Gutmans - - * zend_API.h: - Patch from Jason Greene. - - Make it easier to write PHP function definitions in more than just one .c - file while accessing the same module globals. - -2001-04-17 Zeev Suraski - - * zend_alloc.c: small beautification - -2001-03-28 Zeev Suraski - - * zend_list.c: Fix warning - - * zend_list.c: Make Windows happy - - * zend_list.c: Get rid of more redundant code - - * zend_list.c: - Cleaner way of making sure resources start at 1 and not 0... - - * zend_list.c - zend_list.h: Remove redundant code - -2001-03-27 Zeev Suraski - - * zend_list.c - zend_list.h: God knows what this code was doing... - -2001-03-26 Andrei Zmievski - - * zend_builtin_functions.c: - Updated get_class_methods() to take class instance as well as class name. - - * zend_builtin_functions.c: - Making it possible to pass a class name to get_parent_class() as well - as a class instance. - -2001-03-23 Andrei Zmievski - - * zend_builtin_functions.c: Fixing function name length. - -2001-03-19 Andi Gutmans - - * zend_language_parser.y: - - Add support for isset($var1, $var2, $var3); - Will be true only if all - - variables are set. - -2001-03-15 Andi Gutmans - - * zend_language_parser.y: - Nuke commented code - -2001-03-12 Andrei Zmievski - - * zend_API.c: Name length is already known. - -2001-03-12 Andi Gutmans - - * zend_API.c: - Missed second place. - - * zend_API.c: - Nuke snprintf() - - * zend_language_scanner.l: - White space - - * zend_language_scanner.l: - - Fix by Jani Taskinen for whole path also to work - with include_once()/require_once(). - -2001-03-12 Andrei Zmievski - - * zend_API.c - zend_API.h: - Improve zend_is_callable() to the point where it's actually useful. - Now it just needs to be invoked everywhere in PHP where a callback is - expected. - -2001-03-11 Andi Gutmans - - * Zend.m4 - acconfig.h: - Fix for Solaris. - -2001-03-10 Andi Gutmans - - * zend_execute.c: - Whitespace - -2001-03-07 Zeev Suraski - - * zend_ini.h: Add missing #define's - - * zend_compile.c - zend_execute.c: Make parent:: work in runtime bindings as well - -2001-03-06 sascha - - * Zend.m4: We actually only need AC_PROG_LEX here. - -2001-03-04 Zeev Suraski - - * zend_execute.c: Fix bug #8899 (thanks Jani) - -2001-03-03 sascha - - * Zend.m4: -Os is a valid GCC optimization level. - -2001-03-02 Zeev Suraski - - * zend_compile.c: Whitespace fix - -2001-02-28 Andrei Zmievski - - * zend_execute_API.c: Do case-insensitive class name matching when parsing - array('Class', 'method') structure. - You guys can clean it up, if there is a better way. - -2001-02-27 Andi Gutmans - - * zend_variables.c - zend_variables.h: - Nuke zval_del_ref() - -2001-02-27 Andrei Zmievski - - * zend_compile.c: Don't overwrite existing handlers with parent ones. - -2001-02-26 Andi Gutmans - - * Zend.dsp - ZendCore.dep - ZendTS.dsp - zend.c - zend_API.c - zend_API.h: - Rename modules.h to zend_modules.h - - * LICENSE: - One more copyright year update - - * zend_ini.h - zend_ini_parser.y - zend_ini_scanner.l - zend_language_parser.y - zend_language_scanner.h - zend_language_scanner.l - zend_list.c - zend_list.h - zend_llist.c - zend_llist.h - zend_opcode.c - zend_operators.c - zend_operators.h - zend_ptr_stack.c - zend_ptr_stack.h - zend_sprintf.c - zend_stack.c - zend_stack.h - zend_static_allocator.c - zend_static_allocator.h - zend_variables.c - zend_variables.h - zend.c - zend.h - zend_API.c - zend_API.h - zend_alloc.c - zend_alloc.h - zend_builtin_functions.c - zend_builtin_functions.h - zend_compile.c - zend_compile.h - zend_config.w32.h - zend_constants.c - zend_constants.h - zend_dynamic_array.c - zend_dynamic_array.h - zend_errors.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_extensions.c - zend_extensions.h - zend_fast_cache.h - zend_globals.h - zend_globals_macros.h - zend_hash.c - zend_hash.h - zend_highlight.c - zend_highlight.h - zend_indent.c - zend_indent.h - zend_ini.c - zend_modules.h: - Update copyright year - -2001-02-25 Andi Gutmans - - * zend_modules.h: - Fix dll linkage warnings - -2001-02-24 Andi Gutmans - - * zend_builtin_functions.c - zend_modules.h: - Add exports from Daniel Beulshausen - -2001-02-14 Stanislav Malyshev - - * zend.h: allow more extensions with resources - -2001-02-13 Zeev Suraski - - * zend_extensions.c: Move version registration to a more correct place - -2001-02-12 Andi Gutmans - - * zend_operators.c - zend_operators.h: - Remove two unused functions - - * zend_execute_API.c: - Fix whitespace. - -2001-02-12 Zeev Suraski - - * zend_execute_API.c: - Fix a bug that could cause corruption in case of an error during - get_zval_ptr() - -2001-02-09 Andi Gutmans - - * zend_execute.c: - - Remove duplicate code and do a tiny optimization in DO_FCALL - -2001-02-05 Zeev Suraski - - * zend_execute.c: Fix string offset data corruption - -2001-02-04 Andrei Zmievski - - * zend_execute_API.c: - Allow passing class name as well as an object instance to call methods. - -2001-02-03 Andrei Zmievski - - * zend_execute_API.c: - Set the correct function state during execution. This is mainly to have - get_active_function_name() to return proper value. - - * zend_compile.c: Inherit overloaded handlers. - -2001-02-01 Andrei Zmievski - - * zend_API.c - zend_API.h: - Added zend_is_callable() function that checks whether passed zval - represents a valid and exiting callable construct. - -2001-01-31 Andi Gutmans - - * zend_API.h - zend_API.c: - Change unset() functions to null(). unset() is legacy - - * zend_API.h: - - Quick fix. I'm for changing these to add_property_null() as we've nuked - - unset. - -2001-01-27 Andi Gutmans - - * zend_execute.c: - That doesn't seem like a smart thing to do :) - - I wonder if gcc optimized it out. - -2001-01-23 Thies C. Arntzen - - * zend_extensions.h - zend_ini_scanner.h - zend_list.c - zend_list.h: fix a couple of warnings - - * zend_API.c: fixed crash in add_index_bool. - -2001-01-22 Andrei Zmievski - - * zend_API.h: Make add_index_zval() available to the outside world. - -2001-01-21 Andi Gutmans - - * zend.h: - - Make people happy who like the Zend version number bumped up in parallel - with PHP. - -2001-01-20 Andi Gutmans - - * zend_API.c - zend_API.h: - - Patch from Sterling. Add API calls to add zval's as array indeces/ - object properties. Add _ex functions which take the string length as an - argument for better performance. - -2001-01-19 Andi Gutmans - - * zend_API.h - zend_API.c: - - For Sterling. I wonder if not all of the API functions should take the - - key_length as a parameter in order to save that strlen(). - -2001-01-17 Andi Gutmans - - * zend_execute.c: - - Fix leak in fetch_dim_address() which was already fixed in - - fetch_dim_object(). Take the oppertunity to make both use the same - - function and not duplicate the code. - -2001-01-16 Zeev Suraski - - * zend_list.c: Fix persistent resources, once and for all... - -2001-01-15 Zeev Suraski - - * zend.c - zend.h - zend_compile.c: Add free_estring() - -2001-01-12 Zeev Suraski - - * zend_istdiostream.h: Add newline - -2001-01-12 Rasmus Lerdorf - - * zend_highlight.c: Fix for bug number 8666 - -2001-01-07 Zeev Suraski - - * zend_ini.c: Fix mismatch in return values - - * zend.c - zend.h - zend_alloc.c - zend_ini.c - zend_ini.h: - Remove backward dependency from PHP -> Zend - - Rename get_ini_entry() as get_configuration_directive() for clarity - (it doesn't use the INI subsystem, but the module-supplied function for - retrieving configuration directives) - - * Zend.dsp - ZendTS.dsp: Remove -S option on all bison calls - - * zend.c: - Fix possibility of a crash during startup (very unlikely, but possible) - -2001-01-06 Zeev Suraski - - * ZendTS.dsp: Remove -S - -2001-01-06 Andi Gutmans - - * zend_ini.c: - This slipped in by mistake. - -2001-01-05 Zeev Suraski - - * zend_ini.c - zend_ini.h: - Merge in some ZEND_API additions from Daniel Beulshausen (needed for the - Win32 Apache module) - -2001-01-04 Andi Gutmans - - * zend_list.c: - - Make plist_destructor work like list_destructor to allow it to call - extended destructors. - -2001-01-03 Zeev Suraski - - * zend.h: Fix Zend version while we're at it - - * zend_execute_API.c: Merge call_user_function_ex() fixes - - * zend_language_scanner.l: Merge line number corruption bug fix - - * zend_language_scanner.l: - Fix another case of possible line number corruption - - * zend.h: Commit missing declaration - -2001-01-01 Andi Gutmans - - * zend_execute.c: - Remove unreachable code - -2000-12-30 Zeev Suraski - - * zend_language_scanner.l - zend_opcode.c: Fix possible corruption in line number information - -2000-12-27 Zeev Suraski - - * zend.c - zend_globals.h - zend_ini.c - zend_ini.h - ZendTS.dsp: - Make the INI mechanism thread safe (or at least thread safer :) - -2000-12-26 Zeev Suraski - - * zend_compile.h: - Use iostream.h instead of istream.h (IBM's compiler doesn't come with istream.h, - and iostream.h should include it) - - * ZendTS.dsp - zend_ini_scanner.l - zend_istdiostream.h - zend_language_scanner.l: - - Use supplied istdiostream definition for the INI scanner too - - Add Release_TSDbg configuration - -2000-12-24 Zeev Suraski - - * zend_extensions.h: This needs updating as well - - * zend_execute_API.c: - More aggressive protection in call_user_function_ex() - -2000-12-23 Zeev Suraski - - * zend_execute_API.c: - Fix a possible crash bug in call_user_function_ex(), if the function is - in fact not a user function - -2000-12-22 sascha - - * zend.c - zend_modules.h: - Set the floating-point exception mask on FreeBSD to 0 (as do other - FreeBSD system applications). Also bump up the module API number - as the zend_hash_get_current_key change affects source and binary - compatibility. - -2000-12-22 Zeev Suraski - - * zend.c - zend_builtin_functions.c - zend_execute.c - zend_hash.c - zend_hash.h: - Allow get_current_key() not to return the key itself, instead of a duplicate - - * zend_hash.c: * Fixed a possible crash in get_class_methods() - -2000-12-19 Stanislav Malyshev - - * zend_language_scanner.l: Add support for ASP tags in one-line comment - -2000-12-18 Andi Gutmans - - * flex.skl: - Success! Yay! - - * flex.skl: - Yet another one. - - * flex.skl: - Testing - - * flex.skl: - No luck - - * flex.skl: - Make this damn commit stuff work. - - * flex.skl: - Testing - -2000-12-18 Stanislav Malyshev - - * zend.c: - Use HashPosition iterator instead of saving/restoring internal pointer - - * zend.c: Preserve internal pointer over print_r (fix #8289) - -2000-12-18 Andi Gutmans - - * zend_compile.c: - Fix leak with useless statements such as "foo"; - - * flex.skl: - - Testing Sascha's CVS commit script which should work with branches. - - * flex.skl: - Testing - - * flex.skl: - Testin - -2000-12-18 Zeev Suraski - - * flex.skl: Test, ignore - -2000-12-18 Stanislav Malyshev - - * zend_operators.c: Add notice when auto-converting array to string - -2000-12-17 Andi Gutmans - - * zend_language_scanner.l: - - Clean up the scanner a tiny bit while messing with it. - - * zend_language_scanner.l: - - %> without asp_tags should not be treated as inline_html but as regular - tokens. Of course the parser will die with a parse error which is the - correct behavior. - - * zend_language_scanner.l: - - Fix problem in one line comments with line endings such as ??> - -2000-12-17 Stanislav Malyshev - - * zend_operators.c: Fix #8279 (-2147483647 > 2147483647). - -2000-12-14 Zeev Suraski - - * zend_modules.h: Update module_api_no - -2000-12-13 Zeev Suraski - - * zend_API.h - zend_execute_API.c: - Fix call_user_function() with objects - it could leak under certain circumstances - -2000-12-12 Stanislav Malyshev - - * zend_operators.c: Fix #8195: strncasecmp returns incorrect value - -2000-12-07 sascha - - * zend_builtin_functions.c: - Hardcode strlen due to problems on SCO OpenServer 5.0.4 which defines - strlen to __std_hdr_strlen. - -2000-12-07 Stanislav Malyshev - - * zend_compile.c: Whitespace fix - - * zend_compile.c: Allow var $foo = array(ABC => 1) constructs - - * zend_builtin_functions.c: - Fix memory leak - get_current_key mallocs it's result, no need to - copy it. - -2000-12-06 sascha - - * zend_hash.c: - INIT_DATA/UPDATE_DATA assumed that pData elements of the size of a void - pointer would actually be aligned like a void pointer. This lead - to bus errors on architectures which don't allow unaligned 32-bit accesses. - -2000-12-05 Andi Gutmans - - * zend_language_parser.y: - - Support for $var =& new foo() syntax. This allows you to use objects - which create extra references to themselves in the constructor. - -2000-12-05 Zeev Suraski - - * zend_execute.h: Expose all timeout functions - -2000-12-02 sascha - - * acconfig.h - configure.in: - Use the hardly-documented third parameter of AM_INIT_AUTOMAKE to suppress - defining PACKAGE/VERSION. - -2000-11-27 Andi Gutmans - - * zend_compile.c - zend_compile.h - zend_execute.c: - - Allow passing references which are returned from functions and new - - statements to be passed by reference. - -2000-11-27 Andrei Zmievski - - * zend_builtin_functions.c: - Update class constants before trying to get default properties. - -2000-11-22 Andi Gutmans - - * zend_compile.c: - Remove code which has been commented out for ages. - -2000-11-22 sascha - - * zend_execute.c - zend_globals.h: Pass on the exit status - -2000-11-21 Zeev Suraski - - * zend_operators.c - zend_operators.h: Fix build - -2000-11-21 Andi Gutmans - - * zend_execute.c: - The baby patch wasn't that innocent :) - -2000-11-21 Andrei Zmievski - - * zend_builtin_functions.c: - Sterling's patch to make get_defined_vars() simpler and better. - -2000-11-20 Andi Gutmans - - * zend_execute.c: - NEVER copy and paste :) - - * zend_compile.c - zend_execute.c: - Baby patch towards making the damn pass-by-ref work. - -2000-11-20 Zeev Suraski - - * zend_extensions.h: Update API number - -2000-11-20 Stanislav Malyshev - - * zend.h: - Add macro to replace value of zval with another value while preserving - referencing structure - -2000-11-20 Andi Gutmans - - * zend_execute.c: - This patch is broken and needs more thorough fixing. - -2000-11-19 Andi Gutmans - - * zend_execute.c: - - Try and fix the problem when sending references returned from a function by reference. - -2000-11-19 Zeev Suraski - - * zend_alloc.h: Fix Zend build for non ZTS - -2000-11-18 Zeev Suraski - - * zend_alloc.c: Forgot to commit the non-debug build fix yesterday... - - * zend_alloc.c - zend_alloc.h: - Add thread-safety debugging information (idea - Dmitri Dmitrienko) - -2000-11-14 Stanislav Malyshev - - * zend_language_scanner.l: Restore compatibility with old broken way - - * zend_language_scanner.l: - Better 0x handling - not change non-0x number behaviour - - * zend_language_scanner.l: - Attempt at better handling long 0x-numbers, like 0xffffffff - -2000-11-13 Andi Gutmans - - * zend_extensions.c - zend_extensions.h: - Remove unused function - - * zend_extensions.h: - - Use typedef's for function pointers so that we can easily define arrays - - of these function pointers. - -2000-11-13 Stanislav Malyshev - - * zend_llist.c: - Fix zend_llist_apply_with_del - it should remove from list, - not only call dtor - -2000-11-12 Zeev Suraski - - * ZEND_CHANGES: Test, ignore - -2000-11-11 Andi Gutmans - - * zend_compile.c - zend_compile.h: - Move SET_UNUSED() to header - - * zend_opcode.c: - Beautify by using the standard #define. - -2000-11-10 Andi Gutmans - - * zend_compile.h - zend_compile.c: - Remove this damn thing once again. - - * .cvsignore: - Add files to .cvsignore thanks to Jon Parise - -2000-11-09 Andi Gutmans - - * zend_compile.c - zend_compile.h: - Maybe it's OK now? :) - - * zend_compile.c - zend_compile.h: - Undo the previous commit for fixing $obj = new foo(). - - * zend_compile.c - zend_compile.h: - - Commit experimental patch to fix the problem when doing $a = new foo() - and the constructor assigns $this by reference to other symbol table - elements. Thanks to Daniel J. Rodriguez on this one. - -2000-11-08 Zeev Suraski - - * zend_extensions.c - zend_extensions.h: Add ability to find extensions by name - -2000-11-06 sascha - - * zend_ini.c: Kill a misleading warning which is intended for old code - which assumes sizeof(int) == sizeof(void *). - -2000-11-03 Andi Gutmans - - * zend_ini_scanner.h: - Add trailing \n? - -2000-11-03 Zeev Suraski - - * zend_ini_scanner.l: Fix for bug #5571 (by mookid@sigent.ru) - -2000-11-03 Andi Gutmans - - * Makefile.am: - Fix dependency. - -2000-11-03 Zeev Suraski - - * zend_operators.h: Fix build - - * zend_operators.h: Add RESVAL macros - -2000-11-02 Zeev Suraski - - * zend.c: Fix bug #7599 - - * zend_language_parser.y - zend_language_scanner.l: Missed those - - * zend_API.c - zend_compile.c - zend_compile.h: Maintain consistency - -2000-11-02 Andi Gutmans - - * zend_compile.c - zend_compile.h - zend_language_parser.y: - Replace do_exit() with zend_do_exit(). - - Problem reported by David Hedbor - -2000-11-02 Zeev Suraski - - * zend_ini_parser.y: Remove unnecessary variables - - * zend_ini.c: - explicit declaration here too - sigh, way too early in the morning - - * zend_ini.h: oops - - * zend_ini.h: explicit declaration - -2000-10-31 Zeev Suraski - - * zend_highlight.h: Fix Apache build - - * zend_ini.c - zend_ini.h: Remove unnecessary code, fix phpinfo() - - * Zend.m4: Require bison 1.28 - -2000-10-30 Zeev Suraski - - * Zend.dsp: Fix non-thread-safe Windows build - - * zend_globals.h - zend_ini.h - zend_ini_parser.y - zend_ini_scanner.h - zend_ini_scanner.l: Final touches on the INI parser - -2000-10-30 Stanislav Malyshev - - * Makefile.am: Another attempt to make it build - - * Makefile.am - zend_ini_scanner.l: Fix build - -2000-10-29 Zeev Suraski - - * zend_ini_parser.y - zend_ini_scanner.h - zend_ini_scanner.l: Fix leaks - - * zend_alloc.h - zend_ini.h - zend_ini_parser.y - zend_ini_scanner.h - zend_ini_scanner.l: The new INI parser is showing some signs of life - - * zend_compile.c - zend_compile.h - zend_execute.c: - Fix a corruption bug, when erroneously allowing to send non-variables by reference (several - bug-db reports seem to originate in this bug) - - * zend_extensions.c - zend_ini_parser.y: Fix build - - * zend_ini_scanner.h: Forgot this one - - * Makefile.am - ZendTS.dsp - zend_globals.h - zend_ini.h - zend_ini_parser.y - zend_ini_scanner.l: Generalization work - -2000-10-29 Stanislav Malyshev - - * zend_extensions.c - zend_extensions.h: - Allow module to proclaim compatibility with any Zend version - -2000-10-29 Zeev Suraski - - * Makefile.am - ZendTS.dsp - zend_ini_parser.y - zend_ini_scanner.l - zend_language_scanner.l: Some more work on the INI parser/scanner - - * Makefile.am - zend_ini_parser.y - zend_ini_scanner.l: Initial step in rewriting the INI parsing mechanism - - * .cvsignore - Makefile.am - Zend.dsp - ZendCore.dep - ZendTS.dsp - zend-parser.y - zend-scanner.h - zend-scanner.l - zend_compile.c - zend_compile.h - zend_highlight.c - zend_indent.c - zend_language_parser.y - zend_language_scanner.h - zend_language_scanner.l: Unify the names of these last 3 files... - - * Zend.dsp - ZendTS.dsp: Fix Windows build - - * Makefile.am - zend_ini.c - zend_ini.h - zend_operators.c - zend_operators.h: - Initial steps to move the INI mechanism to the Zend engine - -2000-10-27 Andrei Zmievski - - * zend_operators.h: Added macros for object properties and class entry. - -2000-10-26 Andi Gutmans - - * zend_API.c - zend_modules.h: - Fix new -m on Windows - -2000-10-25 Andrei Zmievski - - * zend_list.h: Remove the patch to register_list_destructors(). - -2000-10-20 Andrei Zmievski - - * zend_list.c - zend_list.h: - Fixed a bug in zend_rsrc_list_get_rsrc_type() - - Switched register_list_destructors() to use - zend_register_list_destructors_ex() instead - -2000-10-19 Andi Gutmans - - * zend_compile.c: - - Constant expressions which are used multiple times need to be copy_ctored - -2000-10-18 Andi Gutmans - - * zend_llist.c: - Fix whitespace - - * zend_extensions.c - zend_llist.c - zend_llist.h: - - Try #2. Wasn't allowed to delete in the previous manner because we were - in the middle of an llist_apply() - -2000-10-18 sascha - - * zend_fast_cache.h: - Add explicit conversion from 'void *', otherwise ANSI C++ compilers - will break out. - -2000-10-18 Andi Gutmans - - * zend_extensions.c: - Fix crash - -2000-10-17 Andi Gutmans - - * zend_builtin_functions.c: - Fix copy&paste bug - -2000-10-15 Andi Gutmans - - * zend_opcode.c: - - Increase op_array size faster and make eralloc() it in the end to save - memory. - -2000-10-14 Andi Gutmans - - * zend_builtin_functions.c: - Add another patch from Sterling. - - * zend_builtin_functions.c: - - Preliminary commit of Sterlings get_defined_functions()/get_defined_vars - functions - - * zend_extensions.c: - - Only run startup() if ZEND_EXTENSIONS is defined to 1. - This fixes a link error on platforms which don't support libdl - -2000-10-13 Andi Gutmans - - * zend_operators.c: - Make increment of "" become "1" - -2000-10-11 Andi Gutmans - - * zend_hash.c - zend_hash.h: Don't use 'new' symbol - -2000-10-11 Zeev Suraski - - * zend_execute.c - zend_execute_API.c: - Fix -a interactive mode (no idea how the previous commit got committed) - - * zend_execute.c: *** empty log message *** - - * zend.h: Update version - - * zend_hash.c - zend_hash.h: Add zend_hash_merge_ex(), for selective merging - -2000-10-06 Andi Gutmans - - * zend_execute.h: - Fix Bug #7061 - -2000-10-05 Andi Gutmans - - * zend-scanner.l: - - Updated included_files() also for plain include()/require(). - -2000-10-04 Andi Gutmans - - * zend_alloc.c: - Fix fprintf - -2000-10-02 Andi Gutmans - - * zend_extensions.h: - Change zend_extension_api_no - -2000-09-30 Andi Gutmans - - * zend_builtin_functions.c: - Cleanup error output - -2000-09-28 Andi Gutmans - - * zend_hash.c: - - Another has optimization/fix like the hash_copy one from earlier on - -2000-09-28 Stanislav Malyshev - - * zend_hash.c: - Make hash_copy call copy constructor on a real copy, not on a temp - -2000-09-28 Andi Gutmans - - * ZendTS.dsp: - Remove zend_gcc_inline.c - -2000-09-26 sascha - - * Makefile.am - Zend.m4 - zend_execute.h - zend_gcc_inline.c - zend_operators.h: - Remove --enable-c9x-inline option. We now use a syntax which is compatible - with all compilers by providing the function with static linkage in every - compilation unit. - -2000-09-25 Zeev Suraski - - * zend.c - zend_extensions.c - zend_extensions.h: - Fix previous update - move extension startup further down the startup sequence - - * zend.c: Move extension startup further down the startup sequence - -2000-09-19 Andi Gutmans - - * zend_operators.h: - Add Z_BVAL* macros - -2000-09-19 Stanislav Malyshev - - * zend_execute_locks.h: - Fix crash on Solaris with function parameter destruction - -2000-09-18 Stanislav Malyshev - - * zend_builtin_functions.c: - Made get_included_files() work again, in somewhat different way - -2000-09-17 Stanislav Malyshev - - * zend_compile.c: Set filename even on recursive include - -2000-09-14 Andi Gutmans - - * zend_execute.c: - - Fix NULL handling in ARRAY opcode and resolve memory leak - -2000-09-12 Zeev Suraski - - * zend-scanner.l - zend.c - zend_builtin_functions.c - zend_compile.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_highlight.h: Make compile_string() accept a description of the code - -2000-09-11 Andi Gutmans - - * zend_compile.c: - - Forgot to create extended info in include()/require() call - -2000-09-10 Stanislav Malyshev - - * zend-parser.y: Allow require_once to take expressions, just like require - - * ZEND_CHANGES: Try once more to remove dups - - * ZEND_CHANGES: Test commit - weed out duplicate messages - -2000-09-09 Zeev Suraski - - * zend.c: Don't use unsafe sprintf() - -2000-09-08 Stanislav Malyshev - - * zend.c: Don't trust snprintf return - -2000-09-06 Andi Gutmans - - * zend_config.w32.h: - Save two lines - - * zend_config.w32.h: - Fix header - -2000-09-06 sascha - - * Zend.m4: Unless overwritten, default to no optimization in debug mode. - -2000-09-05 Andi Gutmans - - * zend_operators.h - zend_operators.c: - Commiting Sterling's new multi_convert* functions - -2000-09-05 Andrei Zmievski - - * zend_builtin_functions.c: Fix memory overrun. - -2000-09-05 Stanislav Malyshev - - * zend_builtin_functions.c: - Fix crash with trigger_error having no args (#6549) - -2000-09-04 Andi Gutmans - - * Makefile.am: - Remove two tabs - -2000-09-02 Andi Gutmans - - * ZendTS.dsp: - - Defining TSRM_WIN32 in each and every dsp sucked. Revert this change - - * ZendTS.dsp: - Fix windows build - -2000-08-31 Andi Gutmans - - * ZendTS.dsp: - - This should fix the performance problem with Release builds - - * zend-scanner.l - zend.c - zend_execute.c: - - Use emalloc() for opened_path now. This was a potential leak before. - - This patch has potential to break stuff but I tested it as much as I - - could. Fixes should be easy. - - * zend.c: - Remove support for __string_value() in print $obj - -2000-08-31 Zeev Suraski - - * zend.c: Safer shutdown process - -2000-08-29 Andi Gutmans - - * zend.h: - Update Zend version. - -2000-08-26 Andi Gutmans - - * zend_builtin_functions.c: - Don't define this function in non-debug mode - -2000-08-24 Andi Gutmans - - * zend_execute.c: - - Revert patch from 9/7/2000 which seems to have broken unset(). - - I hope what made me do this patch doesn't appear again. - -2000-08-22 Andi Gutmans - - * zend_execute_API.c: - - Fix bug report by Andrei when using a method as a sort user function - - parameter in usort() like functions - -2000-08-20 Zeev Suraski - - * zend_config.w32.h: Fix Win32 build - -2000-08-20 sascha - - * zend_config.w32.h: - _isnan seems to be supported on Win32, add an appropiate macro. - - * acconfig.h: If available, use fpclassify for substituting zend_finite. - - * acconfig.h: - Including math.h before using macros defined there will work better :) - - * acconfig.h: Add zend_isinf and zend_isnan. - -2000-08-19 Andrei Zmievski - - * zend-scanner.l: One more fix to C compile. - -2000-08-19 Zeev Suraski - - * zend-scanner.l: Fix C build - - * zend-scanner.l: Fix eval() leakage in ZTS mode - - * zend_compile.c - zend_globals.h: Eliminate run-time leak with eval()'s - - * zend_alloc.c: Fix build with no memory_limit - - * zend_alloc.c: Fix memory_limit - -2000-08-19 Andi Gutmans - - * zend_execute.c: - Beautify - -2000-08-17 Stanislav Malyshev - - * zend_API.h: Fix EMPTY_STRING macros - -2000-08-15 Zeev Suraski - - * zend_extensions.h - zend-scanner.l - zend.c - zend_compile.c - zend_compile.h - zend_execute.c: - Fix warning issue (compile errors inside require()'d files were incorrectly supressed) - -2000-08-14 Zeev Suraski - - * zend_execute.c: - Fix leak and some logic - -2000-08-14 Andi Gutmans - - * zend_compile.c - zend_execute.c: - - This patch should hopefully fix situations where a constructor uses - - the $this pointer as a reference. - -2000-08-14 Stanislav Malyshev - - * zend_execute.c: Fix crash - -2000-08-14 Andi Gutmans - - * zend_compile.c - zend_execute.h: - - Unused results should be marked with EXT_TYPE_UNUSED and not IS_UNUSED - -2000-08-13 Stanislav Malyshev - - * zend-scanner.l - zend.c - zend_compile.c - zend_compile.h - zend_execute.c: Fix zend_fiel_handle handling. Should fix URL include - and various opened_path inconsistencies. - -2000-08-13 Andi Gutmans - - * zend-parser.y: - - Revert foreach() change which only allowed variables and array(...) - -2000-08-11 Andi Gutmans - - * zend-parser.y: - Only support variables and array(...) in foreach loops - -2000-08-10 Andi Gutmans - - * zend-parser.y - zend_compile.c - zend_compile.h - zend_execute.c: - Fix problem with nested foreach()'s (Andi, Zend Engine) - - * zend_compile.c: - Fix switch which only has a default rule (Andi, Zend Engine) - Change require_once() to use the same file list as include_once(). - Patch includes making require() & include() to behave the same when it - comes to scoping. require() is now an include() which isn't allowed to fail. - require() caused too many memory reallocations which ended up being quite - slow for sites that required lots of files. (Andi & Zeev, Zend Engine) - - Fix switch() which only has default rule (bug #5879, - -2000-08-09 Zeev Suraski - - * zend_modules.h: that too - - * zend_extensions.h: Update API number - - * zend-parser.y - zend-scanner.l - zend.c - zend_builtin_functions.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_globals.h - zend_opcode.c: - The patch we promised - redesigned the compilation/execution API: - Advantages: - - Smaller memory footprint for the op arrays - - Slightly faster compilation times (due to saved erealloc() calls and faster zend_op - initialization) - - include_once() & require_once() share the same file list - - Consistency between include() and require() - this mostly means that return() - works inside require()'d files just as it does in include() files (it used to - be meaningless in require()'d files, most of the time (see below)) - - Made require() consistent with itself. Before, if the argument was not a constant - string, require() took the include() behavior (with return()). - - Removed lots of duplicate code. - Bottom line - require() and include() are very similar now; require() is simply an include() - which isn't allowed to fail. Due to the erealloc() calls for large op arrays, require() - didn't end up being any faster than include() in the Zend engine. - -2000-08-05 Andi Gutmans - - * zend_execute.c: - - Use some more SEPARATE_ZVAL macros instead of replicated code. - -2000-08-05 Stanislav Malyshev - - * zend_execute.c: Fix memory leak - -2000-08-04 Andi Gutmans - - * zend.h - zend_execute.c: - - Beautify code. Try and use more macros for splitting instead of - - replicating the code everywhere. - -2000-08-02 Andi Gutmans - - * zend_execute.c: - Remove commented code - -2000-07-29 Zeev Suraski - - * zend-scanner.l - zend_execute.c: Fix filename issues - -2000-07-28 Stanislav Malyshev - - * zend_builtin_functions.c - zend_constants.c - zend_constants.h: - Make define return false and issue E_NOTICE when trying to redefine constant - -2000-07-27 Andi Gutmans - - * zend-scanner.l - zend_execute.c: Always store full filename as compiled file name - -2000-07-26 Zeev Suraski - - * zend_compile.c: - Fix a possible issue with runtime inheritence under fairly rare circumstance - and optimize a tiny bit - -2000-07-26 Stanislav Malyshev - - * zend_builtin_functions.c - zend_operators.c - zend_operators.h: Add strncasecmp function - -2000-07-18 Zeev Suraski - - * zend_builtin_functions.c: Forgot to link this function... - - * zend_hash.c: This is probably the oldest bug in PHP :) - Luckily it's unlikely we're ever actually bitten by this bug. - -2000-07-16 Andi Gutmans - - * zend_compile.c: - Beautify Zeev's patch a bit. - -2000-07-16 Zeev Suraski - - * zend_compile.c: Implement parent::foo() - -2000-07-15 Zeev Suraski - - * zend-parser.y - zend_compile.c: Add more extended_info calls - -2000-07-14 Zeev Suraski - - * zend_builtin_functions.c - zend_list.c - zend_list.h: Improve register_resource_ex() infrastructure - -2000-07-12 Thies C. Arntzen - - * zend.c: fix ZTS startup without filename (thanx purify!) - - * zend.c: unset active_symbol_table on zend-shutdown. - -2000-07-11 Zeev Suraski - - * zend_list.c: Another persistent hash - disable apply protection - - * zend.c - zend_hash.c - zend_hash.h: - Disable the hash_apply() protection on hashes that persist across requests - it's unsafe - because we may be aborted at any point - -2000-07-11 Stanislav Malyshev - - * zend_execute.c: - Fix a bug in passing second parameter of RECV_INIT with is_ref set - -2000-07-11 Andi Gutmans - - * zend_compile.h: - Oops. Too early in the morning - - * zend_compile.h: - Include iostream.h in C++. - -2000-07-09 Andi Gutmans - - * zend_execute.c: - Fix memory leak. - - * zend_execute.c: - Need to seperate if the hash isn't a reference - -2000-07-08 Andi Gutmans - - * zend.h: - Add zend_ulong - -2000-07-07 Stanislav Malyshev - - * zend_execute.c: Remove C++ commennts. - -2000-07-06 Andi Gutmans - - * zend-scanner.l: - - Remove code which has never been used (neither in PHP 3) - - * zend_compile.c: - - Make is_method_call() static and remove a couple of old lines - - * zend_execute.c - zend_extensions.h: - Yet another fix... - - * zend_execute.c: - One more... - - * zend_compile.c: - One more fix for the latest patch - - * zend_compile.c: - One dumb bug in my latest patch - - * zend-parser.y - zend_compile.c - zend_execute.c: - - Complex fix for solving a problem with objects & method calls. - - Previous version is tagged PRE_METHOD_CALL_SEPERATE_FIX_PATCH. - - I need to check this fix on a server so if it doesn't work I will revert - - it. - - * zend-scanner.l: - - Fix problem with newlines not being recognized under certain conditions - -2000-07-03 Andi Gutmans - - * zend_compile.c: - Fix bug #4120 - -2000-07-03 Stanislav Malyshev - - * zend_execute_API.c: Unblock SIGPROF signal when starting timer. - On Linux, this signal is blocked by default after first signal is run - -2000-07-03 sascha - - * FlexLexer.h - zend-scanner.h - zend_alloc.h - zend_compile.h - zend_constants.h - zend_dynamic_array.h - zend_execute.h - zend_globals.h - zend_hash.h - zend_highlight.h - zend_list.h - zend_operators.h - zend_static_allocator.h - zend_variables.h: - Replace macros which begin with an underscore through an appropiately - named macro. - -2000-07-02 sascha - - * zend.h - zend_API.h - zend_builtin_functions.h - zend_config.w32.h - zend_dynamic_array.h - zend_errors.h - zend_execute_locks.h - zend_extensions.h - zend_fast_cache.h - zend_globals_macros.h - zend_indent.h - zend_llist.h - zend_modules.h - zend_ptr_stack.h - zend_stack.h: Change header protection macros to conform to standard. - - Draft 3 of IEEE 1003.1 200x, "2.2 The Compilation Environment" - - All identifiers that begin with an underscore and either an uppercase - letter or another underscore are always reserved for any use by the - implementation. - -2000-07-02 Andi Gutmans - - * zend-parser.y: - Take #2 with tab size 4 - - * zend-parser.y: - - Beautify parser a bit. It still could do with some more at some point - - * zend_execute.h - zend_execute_API.c: - Forgot ZEND_API - -2000-06-30 Zeev Suraski - - * zend_config.w32.h: - Add a messagebox style that's safe to use from an ISAPI filter - - * zend_builtin_functions.c - zend_execute_API.c - zend_globals.h: error_reporting fix - -2000-06-29 Zeev Suraski - - * zend.c - zend.h: Add $context argument to error handler - -2000-06-28 Zeev Suraski - - * zend.c: Improve error handling code - - * zend-scanner.l: Be HTML friendly - -2000-06-28 Andi Gutmans - - * zend.h: version update - -2000-06-26 Zeev Suraski - - * zend.h - zend_constants.c - zend_extensions.h: - Make it possible to detect whether we're thread safe or not from PHP scripts and the php.ini - file - -2000-06-26 Andi Gutmans - - * zend_extensions.c: - Add another "\n" at the end of error messages. - -2000-06-26 Zeev Suraski - - * zend_execute_API.c: - Make max_execution_time work properly when set to 0 under Win32 (disable) - -2000-06-25 Andi Gutmans - - * zend.c: - I wrote a long msg but the commit didn't go through. - - So here is the short version: - - a) Start moving to binary opens in Windows - - b) Give checkuid_mode() a small face lift including the fopen-wrappers.c - - The mode to this function should at least be a #define but that is for - - another day. Anyway this whole stuff should be given more face lifts in - - the future. - -2000-06-24 Zeev Suraski - - * zend_alloc.c: Nuke a warning - -2000-06-23 Andi Gutmans - - * zend_static_allocator.c - zend_static_allocator.h: - Not returning a value anymore - - * zend_static_allocator.h: - Don't need SUCCESS/FAILURE anymore - - * zend_static_allocator.c - zend_static_allocator.h: - Add license - - * zend_static_allocator.c - zend_static_allocator.h: - - Commit static allocator structure which we might use in an upcoming Zend - - change - -2000-06-22 Andi Gutmans - - * zend-scanner.l: - Fix asp_tags. - - * zend_extensions.c: - Oops I miss-wrote that field - - * zend_extensions.c - zend_extensions.h: - - Change API version and make the error messages more meaningful. - - * zend_alloc.c - zend_alloc.h: - Change cache size and only initialize part of it. - -2000-06-22 Stanislav Malyshev - - * zend_alloc.c: - Cached-freed memory blocks should not be in "occupied" list - - * zend_alloc.c - zend_globals.h: Make cache counters to be unsigned int - Start collecting statistics after cache pre-fill - -2000-06-18 sascha - - * Zend.m4 - acinclude.m4 - zend.c: fp_except check for FreeBSD 1.0-2.2.5 - - * Zend.m4 - acconfig.h - zend_config.w32.h - zend_operators.h: Welcome zend_finite(n). - - This chooses the best combination of what is available: - - finite, isfinite, isinf, isnan - -2000-06-18 Stanislav Malyshev - - * zend.h - zend.c: Make error callback be publicly accessible - -2000-06-18 Andi Gutmans - - * zend.c: - Better FreeBSD fix. Does fp_except_t exist on 3.4? - - * zend.c: - - I don't know how this happened. I tested the bloody thing and I remember - - copy&pasting from code which used ~. - -2000-06-17 Zeev Suraski - - * zend_builtin_functions.c - zend_execute_API.c - zend_globals.h - zend_ptr_stack.c - zend_ptr_stack.h: - Add restore_error_handler() - error_handler's are now stored in a stack - - * zend-scanner.l - zend.c - zend_API.h - zend_execute_API.c: - Allow the symbol_table to be passed to call_user_function_ex() - - * zend-scanner.h - zend-scanner.l: Fix filenames and line numbers in ZTS mode - - * zend_hash.c - zend_hash.h: - Avoid crashing with recursive applies - limit apply nest level to 3 (I'm not aware of a place - in which applying recursively on the same hash makes sense with more than one nest level, but - 3 should be enough) - -2000-06-16 Zeev Suraski - - * zend.c - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_globals.h: - Ok, this time here's some real Win32 system programming :) - Redesigned the timeout system using a single timeout thread and a single window, - and used a much quicker check. - -2000-06-16 Andi Gutmans - - * zend_execute_API.c: Fix UNIX build - -2000-06-16 Zeev Suraski - - * zend_execute.c: Macro it up the right way - - * zend_execute.c: Macro this up, so it can be moved to other places - - * zend.c - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_globals.h: - Move timeout code to Zend - - Implement timeouts in Win32 - -2000-06-15 Zeev Suraski - - * Zend.dsp - zend.c: - Fix non thread-safe mode - asp_tags/short_tags etc weren't getting initialized properly - -2000-06-15 Andi Gutmans - - * zend_list.c: *** empty log message *** - - * zend-parser.y: - Support multiple arguments to unset() - -2000-06-15 Thies C. Arntzen - - * zend_list.h: ups. - - * zend_list.h: - changed return type of ZEND_VERIFY_RESOURCE from FALSE to NULL - -2000-06-14 sascha - - * zend_operators.h - zend_operators.c: - Move some stuff to zend_operators.h which is required by the - moved inline functions. - -2000-06-14 Andi Gutmans - - * zend_alloc.c - zend_alloc.h: - More correct way of doing bit mask - -2000-06-14 sascha - - * Zend.m4: Only replaced C0X and C0x, but not c0x.. - - * Zend.m4 - zend_execute.h - zend_gcc_inline.c - zend_operators.h: - Rename C0x-inline to C9x-inline, and frame preprocessor directives in - zend_gcc_inline.c with #ifndef C9X_INLINE_SEMANTICS..#endif. - -2000-06-14 Andi Gutmans - - * ZendTS.dsp: - Make Win32 build - -2000-06-13 Andi Gutmans - - * zend_compile.c - zend_compile.h: Add to the API - -2000-06-13 sascha - - * Makefile.am - Zend.m4 - zend_API.h - zend_compile.h - zend_execute.h - zend_execute_API.c - zend_gcc_inline.c - zend_globals.h - zend_operators.c - zend_operators.h: Add optional support for C0x inline semantics. - - These are enabled by specifying `--enable-c0x-inline' on the command - line. We might add an autoconf check for this particular feature - later. - - * zend_llist.h: - Add llist_apply_func_t and make prototypes use the typedefs. - -2000-06-12 Zeev Suraski - - * zend_builtin_functions.c: Make Egon happy :) - - * zend_builtin_functions.c: - Return the previous error handler from set_error_handler() - - * zend_API.c - zend_API.h - zend_builtin_functions.c: - Avoid using E_CORE_* errorlevels in any place which is not in the global startup sequence - - * zend-parser.y - zend-scanner.l - zend.h - zend_compile.c: Get rid of - -2000-06-11 Andi Gutmans - - * zend.c: - Solve floating point precision crash on FreeBSD. - - * zend.c: - - Fixes crash problem on FreeBSD when losing precision. Need to still see - - how to detect we're on FreeBSD - -2000-06-11 Zeev Suraski - - * zend_API.c: Fix zend_get_parameters() - -2000-06-10 Andi Gutmans - - * zend_operators.c: - - Fixed problem when using uninitialized values in comparisons with strings. - - They behave as empty strings again just like in PHP 3. - -2000-06-10 Zeev Suraski - - * zend_execute.c: - I can't think of a reason of why it should just be a notice... Make it a warning, like it was in PHP 3. - - * zend_API.c - zend_builtin_functions.c: Fix bug #4768 - -2000-06-09 Andrei Zmievski - - * zend_builtin_functions.c - zend_hash.h: Made an alias for hash apply with arguments. - -2000-06-09 Andi Gutmans - - * zend_alloc.c: - Forgot to remove the FIXME - - * zend_alloc.c: - Make the memory limit accurate - - * zend_alloc.c: - Fix cache initialization - - * zend_alloc.c - zend_alloc.h: - - Allocate and cache in 8 byte blocks. Most allocators anyway use 8 byte - - blocks. This should help fragmentation and cache hits. - - The old tree is tagged as PRE_EIGHT_BYTE_ALLOC_PATCH - -2000-06-09 Zeev Suraski - - * zend_execute.c: Fix bug #4933 - - * zend_builtin_functions.c: Fixed bug #4819 - -2000-06-09 Andi Gutmans - - * zend_modules.h: - - Time to change it. We changed register_internal_class() -> - - zend_register_internal_class() - - * zend_API.c - zend_API.h - zend_compile.c - zend_compile.h: - Andrei, this is for you! - - Add zend_register_internal_class_ex() which allows you to specify a - - parent to inherit from. You can either specify the parent directly or via - - its name. - - * zend-parser.y - zend-scanner.l: - Typo - - * zend_execute.c: - Remove old obsolete code. - - * zend_execute.c: - Make unset consistent with the way array offsets work - -2000-06-09 Stanislav Malyshev - - * zend_execute.c: Handle unset with empty key - -2000-06-09 Andi Gutmans - - * zend_API.c - zend_API.h: - - Change register_internal_class to zend_register_internal_class for - - consistency. - - Andrei: I'm still thinking about the _ex you want me to implement - -2000-06-08 sascha - - * Zend.m4 - acconfig.h: Clean up acconfig.h - - * zend_execute_API.c - zend_operators.c: Add a couple of casts - -2000-06-06 Zeev Suraski - - * zend.c - zend.h - zend_compile.c: - Enable asp_tags/short_tags/allow_call_time_pass_by_reference to work on a per-directory - basis as well - -2000-06-06 sascha - - * zend_API.c: - Add newline at the end of the file (breaks at least SCO and Tru64 C compiler). - -2000-06-05 Andi Gutmans - - * zend-scanner.l: - Revert internazionalization fix. - - * zend_builtin_functions.c: - Complete change to create_function() - -2000-06-04 Zeev Suraski - - * zend_compile.c - zend_execute_API.c: - Change shutdown order to sort out a crash when assigning a resource id to a static. - - * zend_hash.c - zend_hash.h - zend_operators.c: - Support unordered hash comparisons - - Make == perform an unordered comparison with arrays/objects, and === perform an ordered comparison - - * zend_builtin_functions.c: Rename lambda() - -2000-06-03 Zeev Suraski - - * zend_hash.c - zend_hash.h - zend_operators.c - zend_operators.h: - Support comparisons of arrays (with arrays) and objects (with objects) - -2000-06-03 Andi Gutmans - - * zend.c: - Change #if to #ifdef. - -2000-06-03 Zeev Suraski - - * ZendTS.dsp - zend.c: Don't take chances with new include files - - * zend_execute_API.c: - Improve call_user_function() to support array($obj, $method) - - * zend-parser.y - zend.h - zend_operators.c: - Export normalize_bool - - This global/static syntax fix brought us back to the 4 documented conflicts - - * zend_builtin_functions.c: Fix a lambda() bug - - * zend_builtin_functions.c: Add missing { - - * zend_globals.h - zend_hash.c - ZendTS.dsp - zend-scanner.l - zend.c - zend.h - zend_builtin_functions.c - zend_compile.c - zend_compile.h: - Fix Win32 compilation (Use winsock2.h from now on) - - Add lambda() support - -2000-06-02 Andi Gutmans - - * zend-parser.y: - global/static require a trailing ';' - -2000-06-02 Zeev Suraski - - * zend_builtin_functions.c: Update error code - - * zend.c - zend.h - zend_config.w32.h: Nuke the old error code, use the new one - -2000-05-31 Zeev Suraski - - * zend.h: IS_BC isn't really being used, but still... - - * zend-parser.y - zend.h - zend_API.c - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_extensions.h - zend_variables.c: - Fix a bug in static initializers/default values/class member variables that contained - array values - -2000-05-29 Zeev Suraski - - * zend_API.c - zend_API.h: Allow disabling of functions for security reasons - -2000-05-28 Andi Gutmans - - * zend_operators.c: - - Use pointer arithmetic to speed up the function a bit - - * Zend.m4: - This should have been done for 4.0.0. - - Default build is without debug now. Use --enable-debug if you want a - - debug build which includes leak/memory overwrite etc. detection - -2000-05-26 Andi Gutmans - - * zend-scanner.l - zend_operators.c - zend_operators.h: - - Fixed scanning decimal numbers in internationalized environments. They should - - always be in standard US format e.g. 23.3 - -2000-05-25 Zeev Suraski - - * zend_compile.c: - Fix a crash bug in certain situations of class redeclarations - -2000-05-24 Thies C. Arntzen - - * zend_hash.h: rename hastable -> _hashtable to avoid clashes - - * zend-scanner.l: - add rdbuf() to our own istdiostream implementation, allowing C++ compile - using SUN and SGI native compilers. (by Jayakumar Muthukumarasamy ) - -2000-05-22 Zeev Suraski - - * zend.c: - Remove ugly Ltd. - -2000-05-21 Sam Ruby - - * zend.c: Windows build failure - -2000-05-21 Andi Gutmans - - * zend.c - zend_compile.h: - - Fix Apache php source highlighting mode. It was crashing due to the - - module shutdown functions being called when the startup functions weren't - - being called. - - * zend.h - zend_extensions.h: - Get ready for release - -2000-05-19 Zeev Suraski - - * zend_highlight.c - zend_highlight.h: Open these up for the API - -2000-05-18 Zeev Suraski - - * zend_alloc.c: Do it in thread unsafe mode for now. - -2000-05-18 sascha - - * zend_alloc.c: Kill warnings - -2000-05-18 Andi Gutmans - - * zend_alloc.c: - Do this someplace else. - - * zend_execute.c - zend_operators.c: - - Fix include() when used on resources (shouldn't work but shouldn't crash - either). - -2000-05-18 Andrei Zmievski - - * zend_operators.c: - Update for sort functions - user can now specify sort type. - -2000-05-17 Andi Gutmans - - * zend_operators.h - zend_operators.c: - - Add support for string_compare_function() and number_compare_function(). - UNTESTED! - -2000-05-17 Zeev Suraski - - * zend_operators.c: Normalize results of compare_function() - - * zend-scanner.l: - Fix crash if %> is encountered in HTML while ASP-tags are disabled - -2000-05-17 Andi Gutmans - - * zend_opcode.c: Fix order - -2000-05-17 sascha - - * zend_operators.h: Add missing prototype - -2000-05-16 Zeev Suraski - - * zend_alloc.c: - - Small optimization. Filling up the Cache helps performance. - -2000-05-12 sascha - - * Makefile.am: Fix parallel makes on BSD - -2000-05-11 Zeev Suraski - - * zend-parser.y - zend-scanner.l - zend.h - zend_operators.c: - Get rid of chval - it's really not necessary and seems to be confusing people - - * zend_compile.c: Refined fix - - * zend_compile.c: - Fix a memory corruption bug with by-ref function arguments - -2000-05-10 Andi Gutmans - - * zend_extensions.h: - Bump up Zend extension version number - -2000-05-10 Thies C. Arntzen - - * zend_compile.c: make waning readable - -2000-05-08 Andi Gutmans - - * zend-parser.y - zend_compile.c - zend_opcode.c: Thoroughly initialize IS_UNUSED for proper cleanup - - * zend.h: - Change Zend Engine version number - - * zend_alloc.c: - Return real size allocated - -2000-05-08 Zeev Suraski - - * zend_operators.c: Make zend_binary_strcasecmp compile again - -2000-05-08 sascha - - * zend_operators.c: Make strcasecmp() act correctly WRT SUS II. - - Patch by: hholzgra@php.net - PR: #3556 - -2000-05-06 Andi Gutmans - - * zend_execute.h - zend_execute_API.c: - Make zend_eval_string() return SUCCESS/FAILURE - - * zend_execute.c: - - Make $obj->test = 5; work again (assigning to uninitialized objects) - -2000-05-05 sascha - - * Zend.m4: - Linking directly against libc might result in unexpected behaviour. - We check for dlopen in libdl first, and check then whether dlopen exists. - -2000-05-03 Andi Gutmans - - * zend_compile.h: - Change fetch_type to be zend_uint - - * zend_compile.c - zend_execute.c: - Change the place CAST uses for the op_type - -2000-05-02 Zeev Suraski - - * zend_hash.c - zend_hash.h: - Change zend_hash_get_current_key_ex() to also return the string length - -2000-05-02 sascha - - * zend_API.c: - Fix segfault occuring when a temporary module was unloaded and if this - module did not have a request shutdown function. - - * zend_API.h: - Add ZEND_GET_MODULE(name). This is a short-cut for the common - get_module function. - -2000-05-01 sascha - - * zend.c: - Source file does not end with a newline. Some old compilers don't like that. - -2000-05-01 Andrei Zmievski - - * zend_builtin_functions.c: Added a way to get all declared classes. - -2000-05-01 sascha - - * Makefile.am: Fix dependency - -2000-04-29 Zeev Suraski - - * zend_extensions.h - zend_opcode.c: - Pass the op_array to the ctor/dtor, instead of just the resource - - * zend_extensions.c: crash fix - - * zend_extensions.c - zend_extensions.h - zend_llist.c - zend_llist.h: - Add zend_llist_apply_with_arguments() - - Add a message handler to the extensions - - * zend_compile.h - zend_opcode.c: - Fix possible bug with extension dtors being called without the ctors being called first - - * zend-scanner.l - zend_compile.c - zend_compile.h - zend_opcode.c: Beautify - -2000-04-28 Zeev Suraski - - * zend.c - zend_extensions.c - zend_extensions.h: Fix a bug in the resource dispencer - - * zend_operators.c - zend_operators.h: Make convert_to_string() allocations traceable - -2000-04-27 Zeev Suraski - - * zend_extensions.h - zend-scanner.l - zend.c - zend_compile.c - zend_compile.h - zend_execute.c: *** empty log message *** - - * zend-scanner.l - zend_compile.c - zend_compile.h - zend_execute.c: Change to using the #define's - - * zend.c - zend.h: More error handling work (still completely disabled) - -2000-04-26 Zeev Suraski - - * zend_execute_API.c - zend_variables.c: Fix - forgot to split away if refcount>1 - -2000-04-25 Zeev Suraski - - * zend_extensions.c: Fix bug - - * zend.h: We'll need two... - - * zend_hash.h: Add useful macros - -2000-04-25 Andi Gutmans - - * zend_llist.c: - Fix persistence of llist - -2000-04-24 Zeev Suraski - - * zend_compile.c: - Forgot to keep the ':' in the class_name - - * zend_API.c: Correct fix - -2000-04-24 Thies C. Arntzen - - * zend_API.c: MODULE_TEMPORARY should get a call to RSHUTDOWN as well! - - * zend.c: - fixed shutdown crash if MSHUTDOWN tries to php_error() something. - -2000-04-21 Thies C. Arntzen - - * zend_variables.c - zend_variables.h: export zval_add-ref and zvale_del_ref - -2000-04-20 Zeev Suraski - - * zend_operators.h: - Change macro names from Z to Z_ - - * zend_operators.h: Add some macros for nicer zval handling - -2000-04-20 Andrei Zmievski - - * zend_operators.c: Do proper ieeefp.h check. - -2000-04-20 Thies C. Arntzen - - * zend_operators.c: - compile before commit! compile before commit! compile before commit! - - * zend_operators.c: - revert andrei's path (i can't compile anymore on linux) - we're always using #ifndef HAVE_BLA instead of if !HAVE_BLA and if we need ieeefp.h for some weird platform (which one is that?) we need an autoconf check for it. - -2000-04-19 Andrei Zmievski - - * zend_operators.c: Include proper files for finite. - -2000-04-19 Zeev Suraski - - * zend.c - zend.h - zend_builtin_functions.c - zend_execute_API.c - zend_globals.h: - Initial support for trapping errors (not complete and disabled; will be enabled only - post-PHP 4.0.0) - - * zend_builtin_functions.c - zend_constants.c - zend_errors.h: - - Renamed get_used_files() to get_required_files() for consistency - - Documented some functions - - Added user-level warning messages - - Added user_error() - -2000-04-19 Andi Gutmans - - * zend_opcode.c - zend_compile.h: - Export pass_include() for Windows - -2000-04-18 Zeev Suraski - - * zend_operators.h: - Add convert_to_writable_*_ex() macros (unused at this time) - -2000-04-17 Andi Gutmans - - * zend_compile.c - zend_execute.c: - Fix order of JMPZNZ arguments - -2000-04-17 Thies C. Arntzen - - * zend_operators.c: ups, finite is already a macro on Win32 - - * Zend.m4 - zend_operators.c: HPUX11 only has isfinite() - -2000-04-15 Andi Gutmans - - * zend-scanner.l: - Fix leak in require_once() - -2000-04-15 Thies C. Arntzen - - * zend_extensions.c: fixes compile on platforms without dl() support. - -2000-04-15 Zeev Suraski - - * zend.c: Fix ZTS - -2000-04-15 Andi Gutmans - - * zend-scanner.l: - "use" is not yet supported; instead use include_once() or require_once() - for the time being (Andi, Zend library) - -2000-04-15 Zeev Suraski - - * zend.c - zend_API.c - zend_compile.c - zend_execute_API.c - zend_list.c - zend_list.h: - Clean up resource lists namespace - - Prepare extended resource list destructor APIs (currently unused) - -2000-04-13 Zeev Suraski - - * zend_operators.c: - Fix a memory leak when using assign-op bitwise operators on strings - -2000-04-12 Zeev Suraski - - * zend_execute.c: *** empty log message *** - -2000-04-11 Andi Gutmans - - * zend_execute_API.c: - Fix memory leak - -2000-04-11 Zeev Suraski - - * zend_execute.c: Fix warnings - - * zend_execute.c: Fix fd leak in include_once() - -2000-04-10 Andi Gutmans - - * zend-scanner.l - zend_execute.c: - - -2000-04-10 Zeev Suraski - - * zend.h - zend_compile.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_globals.h - zend_operators.c: Fix object overloading support - -2000-04-10 Andi Gutmans - - * zend_execute.c: - Add warnings - - * zend_compile.c: - Two more places needed changing - -2000-04-10 Zeev Suraski - - * zend-parser.y - zend_compile.c - zend_compile.h - zend_execute.h: Clean up last/size definitions - -2000-04-09 Zeev Suraski - - * zend_compile.h: *** empty log message *** - -2000-04-07 Zeev Suraski - - * zend_execute.c: Thoroughly fix include_once() - - * zend_execute.c: Fix include_once() - -2000-04-06 Andi Gutmans - - * zend-parser.y: *** empty log message *** - - * zend_execute.c - zend_execute.h: Initial preparation for OO overloading patch - -2000-04-05 Andi Gutmans - - * zend_extensions.h: - Bump up version number - - * zend_compile.c - zend_execute.c: - FIx JMPZNZ - -2000-04-03 Zeev Suraski - - * zend_list.c: - Fix the problem with dl()'d modules not freeing their resources properly - -2000-04-01 Zeev Suraski - - * zend_API.h - zend_config.w32.h: *** empty log message *** - - * acconfig.h: Have a standard way of exporting symbols - - * zend_modules.h: Use int - - * zend_API.h: Generalize some common thread-safety stuff - - * zend_modules.h: Have a standard entry for the globals id - -2000-03-31 Zeev Suraski - - * zend_compile.c: - The previous fix ended up being broken, this one should do it - -2000-03-31 Andi Gutmans - - * zend_compile.c: - Fix bug - -2000-03-30 Zeev Suraski - - * zend_extensions.c: Fix zend_register_extension() - -2000-03-30 Andi Gutmans - - * zend_extensions.h: - Bump up API number after Lars' change - -2000-03-30 sascha - - * Makefile.am: Give another hint to BSD makes - - * Makefile.am: - Specifically mention $(srcdir), so that OpenBSD's make gets it - -2000-03-29 Zeev Suraski - - * zend_stack.c - zend_stack.h - zend_compile.c: - - Make the argument order for the stack applies more consistent with other Zend - data structures - - Fix a possible corruption problem due to switch() C-level optimization - -2000-03-29 Torben Wilson - - * zend-parser.y - zend-scanner.l - zend_compile.h - zend_execute.c - zend_opcode.c - zend_operators.c - zend_operators.h: - - Added !== (is not identical) operator. - -2000-03-29 Zeev Suraski - - * zend_extensions.c - zend_extensions.h: *** empty log message *** - -2000-03-29 Andi Gutmans - - * zend_API.h: - - Make sure zend_API.h has Zend'ish versions of the ZEND macros so that - Zend'ish modules don't need to mix PHP & Zend notation. - -2000-03-28 Zeev Suraski - - * zend_builtin_functions.c: - The checks for func_num_args() and friends were broken - fixed - -2000-03-27 Sam Ruby - - * Zend.dsp: Remove debug libraries from debug build - -2000-03-26 Andi Gutmans - - * zend_execute.c - zend_execute_API.c - zend_API.c - zend_builtin_functions.c: - Stop zend_func_args() and co. from crashing - - * zend.h: - - Didn't see Thies' commit message although I can't really see how it would - make a difference - - * zend.h - zend_opcode.c: - Include Andrea's fix for alloca.h - -2000-03-26 Thies C. Arntzen - - * zend.h - zend_execute.c: - needs to be included before we define macros calling alloca() - atleast using SGI's cc - should not harm other platforms (i hope) - - * zend_opcode.c: fix cast - -2000-03-25 Andi Gutmans - - * zend_alloc.c - zend_alloc.h: *** empty log message *** - -2000-03-25 Zeev Suraski - - * zend-parser.y - zend.c - zend.h - zend_API.c - zend_API.h - zend_builtin_functions.c - zend_compile.c - zend_execute.c - zend_execute_API.c - zend_opcode.c - zend_variables.c: - Some header dependencies cleanup - - Generalize zval_print() and zval_print_r() - -2000-03-25 Sam Ruby - - * zend.h: RTLD_NOW => RTLD_LAZY|RTLD_GLOBAL - -2000-03-25 Zeev Suraski - - * Zend.dsp: Update dsp's - -2000-03-24 Zeev Suraski - - * zend_execute.c: - - Fixed a crash when sending a non-variable expression to a runtime-bound function - that expected a reference. - -2000-03-24 Andi Gutmans - - * zend_API.c - zend_builtin_functions.c - zend_compile.c - zend_execute.c - zend_execute_API.c - zend_hash.c - zend_hash.h: - Nuke hash_*_ptr functions - -2000-03-23 Andrei Zmievski - - * zend_builtin_functions.c: Use WRONG_PARAM_COUNT. - -2000-03-23 Zeev Suraski - - * zend_builtin_functions.c: - Make it compile - -2000-03-23 Andrei Zmievski - - * zend_builtin_functions.c: Added get_class_methods(). - -2000-03-22 Andi Gutmans - - * zend.h: - Change Zend version as API has changed - -2000-03-22 Zeev Suraski - - * zend_operators.c: - Wrong fix - - * zend_operators.c: - Only free when result != op1 - -2000-03-21 Andi Gutmans - - * zend.c - zend.h: - - Change zend_startup to accept a flag for starting builtin functions - - * zend.h - zend_API.h: - Move #defines - -2000-03-19 Thies C. Arntzen - - * zend_compile.h: kill warning - -2000-03-18 Andi Gutmans - - * zend.h: - Fix compile problem on FreeBSD - - * zend.h: - - No reason for refcount to be signed and move to zend_* typedefs - -2000-03-18 Thies C. Arntzen - - * zend.c: renamed _string_value_() to __string_value(). - -2000-03-18 Zeev Suraski - - * zend_builtin_functions.c: - The third argument to define() wasn't working right, fixed - - * zend_execute.c: - false wouldn't automaticaly switch to an array type, which resulted in an - incompatibility with PHP 3. Fixed. - -2000-03-16 Thies C. Arntzen - - * zend.c: renamed "to_string" -> "_string_value_" - -2000-03-15 Zeev Suraski - - * zend-scanner.l - zend.h - zend_execute.c: - Fix newly introduced problem reported by Sam Ruby - -2000-03-15 Andrei Zmievski - - * zend_hash.c - zend_hash.h: - Make zend_hash_move_forward()/zenv_hash_move_backwards() a little smarter. - -2000-03-15 Zeev Suraski - - * zend_opcode.c: - Fix warning (I thought I fixed this one before) - -2000-03-14 Andrei Zmievski - - * zend_llist.c - zend_llist.h: Implemented external list traversing. - -2000-03-14 Andi Gutmans - - * zend-parser.y: - - Allow array(1,2,3,) i.e. with trailing comma. You can only have one - trailing comma. - -2000-03-13 Zeev Suraski - - * zend_compile.c: - - - * zend_compile.c: - Spare a byte :) - -2000-03-13 Andi Gutmans - - * zend_compile.h - zend_modules.h: - Another zend_uchar - - * zend_compile.c: *** empty log message *** - - * zend.h - zend_compile.h: - - define zend_uint and zend_uchar and use them in a few places - -2000-03-13 Andrei Zmievski - - * zend_hash.c - zend_hash.h: - Introduced a way to traverse hashes through external pointers. - -2000-03-13 Andi Gutmans - - * zend_compile.h: - Change type from int -> char - -2000-03-13 Zeev Suraski - - * zend-scanner.l: - Fix filename/lineno initialization for do_return - -2000-03-12 Zeev Suraski - - * zend_builtin_functions.c - zend_modules.h: - - -2000-03-11 Andi Gutmans - - * zend_execute.c: - - Remove inline from functions which are pretty large and besides eating up - memory in compile time probably doesn't boost performance. - -2000-03-10 Andi Gutmans - - * zend_operators.c: - - Seems to be a problem here with the return value not being set - - * zend-parser.y - zend_builtin_functions.c - zend_execute.c - zend_execute_API.c - zend_globals.h: - Quick way of supporting include_once(). - Good enough for RC1. - - * zend-parser.y - zend-scanner.l - zend_compile.c - zend_compile.h: - Support require_once(). - - * zend_compile.h - zend_execute.c: - Cleanup old IMPORT stuff - - * zend-parser.y - zend-scanner.l: - - Nuke import, add include_once and include_require scanner/parser rules. - Hope to nuke use too :) - - * zend_modules.h: - That broke the Win32 build - - * zend_modules.h: - Fix a bug and define an API_NO for the ZEND_MODULE_API - - * zend_modules.h: - zend_config.h is enough - - * zend_modules.h: - Save ZEND_DEBUG, ZTS, ZEND_API information - -2000-03-09 Andi Gutmans - - * zend_highlight.c: - Fix bug in syntax highlighter - -2000-03-06 stig - - * zend_modules.h: added GINIT_FUNC_ARGS and GINIT_FUNC_ARGS_PASSTHRU - -2000-03-06 Zeev Suraski - - * zend_extensions.h: - Bump up Zend's API version - -2000-03-06 stig - - * zend_modules.h: Added ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU. - -2000-03-06 Andi Gutmans - - * zend-scanner.l: - Fix memory leak - - * zend.c: - Missed one - -2000-03-06 Sam Ruby - - * zend.c - zend.h: Unresolved externs - -2000-03-06 Zeev Suraski - - * zend_extensions.c - zend_extensions.h - zend_fast_cache.h - zend_globals.h - zend_globals_macros.h - zend_hash.c - zend_hash.h - zend_highlight.c - zend_highlight.h - zend_indent.c - zend_indent.h - zend_list.c - zend_list.h - zend_llist.c - zend_llist.h - zend_opcode.c - zend_operators.c - zend_operators.h - zend_ptr_stack.c - zend_ptr_stack.h - zend_sprintf.c - zend_stack.c - zend_stack.h - zend_variables.c - zend_variables.h - LICENSE - zend-parser.y - zend-scanner.h - zend-scanner.l - zend.c - zend.h - zend_API.c - zend_API.h - zend_alloc.c - zend_alloc.h - zend_builtin_functions.c - zend_builtin_functions.h - zend_compile.c - zend_compile.h - zend_config.w32.h - zend_constants.c - zend_constants.h - zend_dynamic_array.c - zend_dynamic_array.h - zend_errors.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_modules.h: It's official now... - -2000-03-05 Zeev Suraski - - * ZendTS.dsp - zend.c - zend.h: Wrap some commonly unused callbacks - -2000-03-04 Zeev Suraski - - * zend-scanner.l: - The default return value from include() and eval() changed from 1 to 0 - unintentionally after the old return-reference patches - fixed - -2000-03-02 Sam Ruby - - * zend_config.w32.h: Fix Win32 build breakage - -2000-03-01 Andi Gutmans - - * zend.c: - Upgrade to year 2000 - - * ZEND_CHANGES - zend_compile.c - zend_execute.c: - Fix typos - -2000-03-01 Thies C. Arntzen - - * zend_operators.c: now - -2000-02-27 Egon Schmid - - * zend_builtin_functions.c: Fixed some protos. - -2000-02-26 Sam Ruby - - * zend_builtin_functions.c: compilation error - Win32 - -2000-02-26 Andrei Zmievski - - * zend_builtin_functions.c: - Added get_class_vars() and get_object_vars() functions. - - * zend_execute.c: Fix typo. - -2000-02-26 Zeev Suraski - - * zend_operators.c: Fix comparisons of "inf"=="inf" and "-inf"=="-inf" - -2000-02-25 Zeev Suraski - - * zend_fast_cache.h - zend_variables.c: Use the fast cache here too - -2000-02-19 Zeev Suraski - - * zend-parser.y - zend-scanner.h - zend-scanner.l - zend.c - zend.h - zend_API.c - zend_API.h - zend_alloc.c - zend_alloc.h - zend_builtin_functions.c - zend_builtin_functions.h - zend_compile.c - zend_compile.h - zend_config.w32.h - zend_constants.c - zend_constants.h - zend_dynamic_array.c - zend_dynamic_array.h - zend_errors.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_extensions.c - zend_extensions.h - zend_fast_cache.h - zend_globals.h - zend_globals_macros.h - zend_hash.c - zend_hash.h - zend_highlight.c - zend_highlight.h - zend_indent.c - zend_indent.h - zend_list.c - zend_list.h - zend_llist.c - zend_llist.h - zend_modules.h - zend_opcode.c - zend_operators.c - zend_operators.h - zend_ptr_stack.c - zend_ptr_stack.h - zend_sprintf.c - zend_stack.c - zend_stack.h - zend_variables.c - zend_variables.h: (c) patch - - * zend_API.c - zend_API.h - zend_fast_cache.h - zend_hash.c: - - Fix a nasty bug in the hash, introduced in the recent migration to macros - - Make array_init() and friends trackable - - * zend_API.c - zend_API.h - zend_execute.c - zend_operators.c - zend_operators.h: Generalize macros - -2000-02-18 Zeev Suraski - - * zend-scanner.l: *** empty log message *** - -2000-02-18 sascha - - * zend_llist.c - zend_llist.h: - Get rid of second declaration of compare_func_t. Either put in a common - header file or prefix it with i.e. zend_llist_ - -2000-02-18 Andi Gutmans - - * zend_llist.c - zend_llist.h: - - Quick and dirty hack for supporting sorts. Improve later on when I wake up. - - * ZendTS.dsp - zend_dynamic_array.c: - Didn't compile on Win32 - - * zend_dynamic_array.c: - - Tiny change (I know I don't have to cast malloc() to void * but I like - casting my malloc()'s) - - * Makefile.am - zend_dynamic_array.c - zend_dynamic_array.h: - - Preliminary support for dynamic arrays. I need it on order to try out a - new hash implementation. It isn't used anywhere. - -2000-02-17 Andi Gutmans - - * zend.c - zend.h: - Add ZEND_API - -2000-02-16 Andi Gutmans - - * zend_execute.c: -Fix bug 3504 concerning leaks with unset() - - * zend_execute.c - zend.h - zend_compile.h: - Hopefully fix Thies' bug report. - -2000-02-16 Zeev Suraski - - * zend_builtin_functions.c: - ZEND_TEST_EXCEPTIONS should be defined/undefined before it's checked - -2000-02-16 Andi Gutmans - - * zend_execute.c: - Fix bug #3309 - -2000-02-14 Andi Gutmans - - * zend-parser.y - zend_compile.c - zend_compile.h - zend_execute.c: - - Put in the infrastructure for the unset() fix. Right now it has the old - behavior but I just need time tomorrow to add the correct behavior. - - * zend_builtin_functions.c: - Fix bug in func_get_arg() - - Get rid of compiler warnings for unused function crash() - -2000-02-13 Zeev Suraski - - * zend_constants.c: Fix a memory leak - -2000-02-13 Andi Gutmans - - * zend_hash.c: - Save a function call one very hash_add - - * zend_hash.c - zend_hash.h: - - Make startup a bit faster by changing some hash_update()'s and hash_add()'s - to hash_update_ptr()/hash_add_ptr() - - * zend_hash.c: - - Fix a couple of potential bugs where we were using emalloc/efree instead - of pemalloc/pefree. - - Fix a bug were we potentially would be freeing the key by mistake - -2000-02-13 Zeev Suraski - - * zend_builtin_functions.c: *** empty log message *** - - * zend_operators.c: Make (array) false == array() and not array(false) - -2000-02-11 Andrei Zmievski - - * zend_hash.c - zend_hash.h: Made a couple of typedefs for zend_hash_apply_*() calls. - -2000-02-11 Zeev Suraski - - * Zend.dsp - ZendTS.dsp - zend_config.w32.h: Update .dsp's - - * zend-scanner.l - zend.h - zend_API.h - zend_alloc.c - zend_config.w32.h - zend_constants.c - zend_execute.c - zend_extensions.c: Fine tune Andi's patch - -2000-02-10 Andi Gutmans - - * zend.h: - #define ZEND_WIN32 differently - - * zend-scanner.l - zend.h - zend_API.h - zend_alloc.c - zend_constants.c - zend_execute.c - zend_extensions.c: - Finally beautify those WIN32|WINNT checks - - * zend_execute.c: - Shouldn't be there - - * zend_execute.c: - Cleanup the code - -2000-02-09 Zeev Suraski - - * zend-parser.y - zend_execute.c: - Fix last known nasty bugs in Zend. It'll be cool if there are no new ones :) - -2000-02-09 Thies C. Arntzen - - * zend_execute.c: foreach() works now for objects as well. - -2000-02-08 Zeev Suraski - - * zend_operators.c: Fix declaration - - * zend_execute.c: Fix an elusive bug - -2000-02-08 Andrei Zmievski - - * zend_operators.c: Fix up the patch. - - * zend_builtin_functions.c - zend_operators.c - zend_operators.h: Patches from Walter for strncmp() stuff. - -2000-02-07 Zeev Suraski - - * zend_highlight.c: Remove old unnecessary check - - * zend-parser.y - zend-scanner.l - zend_compile.c - zend_highlight.c: - Syntax highlighting was erronously emitting more than one semicolon and/or garbage with heredocs - -2000-02-06 Andi Gutmans - - * zend_compile.c: - - Support the string offset syntax $a{2} with the regular array opcodes. - Will need to write new opcodes sometime but right now it's good enough - to announce the change to this string offset syntax for beta 4. - -2000-02-05 Andi Gutmans - - * zend-parser.y - zend_compile.c: - - This hopefully fixes the list($a, $a) = array(1,2) crash, i.e. when list - by mistake contains the same variable twice. - - BTW, there is no defined order of assignment. The value of $a after the - previous example is undefined, and should not be assumed to be either 1 - nor 2. - -2000-02-05 Zeev Suraski - - * zend_execute.c: More cleanup - - * zend.h - zend_builtin_functions.c - zend_execute.c - zend_execute_API.c: Pass the executor globals to internal functions - - * zend.c - zend.h - zend_API.c - zend_compile.c - zend_constants.c - zend_execute.c - zend_execute_API.c - zend_hash.c - zend_hash.h - zend_modules.h - zend_variables.c: - Stop passing list/plist to internal functions - - Add a typedef for the pCopyConstructor function pointer - - Minor hacks - - * zend-scanner.l: - That was the broken downcasting that prevented the interactive C++ mode from working properly under UNIX - -2000-02-04 Zeev Suraski - - * zend-scanner.l - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_globals.h - zend_opcode.c: - Maintain a state of whether we're compiling and/or executing - -2000-02-03 Andrei Zmievski - - * zend_API.c - zend_API.h: *** empty log message *** - -2000-02-02 Zeev Suraski - - * zend_API.c: - Fix built-in classes with more than 5 methods - - * zend_compile.c: - - Fix the annoying problem with list(), that surfaced up after our recent cleaning - patches - -2000-02-01 Andrei Zmievski - - * zend_API.c - zend_API.h: Added add_property_unset() and add_property_bool(). - -2000-02-01 Zeev Suraski - - * ZendTS.dsp - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_execute_locks.h: Improve dependencies - - * zend_execute.c: Sort out a gdb problem - - * zend_execute.c: Fix warning - -2000-02-01 Andi Gutmans - - * zend_compile.c - zend_execute_API.c - zend_globals.h: - Get rid of remains of garbage. - - This should fix Thies' UMR - -2000-02-01 Thies C. Arntzen - - * zend_execute_API.c: - moved destroying of garbage before resource-list gets destroyed - (see my previous mail) - zeev, andi - please comment! - - * zend.c: added missing break. - - * zend_hash.c - zend_hash.h: - took out zend_hash_pointer_update() & zend_hash_pointer_index_update_or_next_insert() - i really prefer link-errors instead of runtime-errors, don't you? - -2000-01-31 Andi Gutmans - - * zend_compile.h: - This has to always be done. - -2000-01-31 Zeev Suraski - - * zend-parser.y - zend_compile.h - zend_execute.c - zend_execute_API.c: - Optimized garbage mechanism - - Fixed another buglet in the parser - - * zend-parser.y - zend_alloc.c - zend_execute.c - zend_fast_cache.h: - Fix foreach() - - Fix indirect reference with object properties - -2000-01-30 Andi Gutmans - - * zend_execute.c: - - Fix the bug Thies found where I forgot to change a break; to NEXT_OPCODE(); - - If you find anymore let me know - - * zend_alloc.h: - Run it on align_test - -2000-01-29 Zeev Suraski - - * zend_compile.c: Fix ``'s - - * zend-parser.y - zend-scanner.l - zend_compile.h: Fix require() - -2000-01-29 Andi Gutmans - - * zend-parser.y: - Get rid of another rule which isn't needed. - - * zend-parser.y - zend_compile.c - zend_compile.h: - - Add parser support for string offsets. This added three shift/reduce - conflicts but they all seem to be fine. - - Cleaned up the parsing rules a bit and made them much more compact and - elegant. - - Please CVS update and see that I didn't break anything. - - * zend_alloc.h: - - This will save some memory w/ GCC compilers on some platforms - - * zend_execute.c: - Yet another tiny optimization. - -2000-01-28 Andi Gutmans - - * zend-parser.y - zend_compile.c - zend_execute.c: - Make loop a bit faster. - - * zend.h: - Make sure its use is understood. - - * zend.h - zend_execute.c: - Double the speed of some key switch() tests for Win32. - - * zend_execute.c: - - This makes the switch() statement twice as quick. Moving to enum - might make this a general speed up for other platforms too - -2000-01-26 Andi Gutmans - - * zend_execute_API.c: - Keep objects as references. - - * zend_execute_API.c - zend_opcode.c: - - Allow is_ref to become 0 in case the refcount is back to 1. - -2000-01-24 Andi Gutmans - - * zend_compile.c - zend_execute.c: - - Make foreach() now copy the array but use the original array. It can - still be optimized A LOT but it's only a performance issue and not - a feature issue. - -2000-01-24 Zeev Suraski - - * zend-parser.y - zend-scanner.l - zend.c - zend.h - zend_builtin_functions.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_globals.h - zend_operators.c - zend_operators.h: - Implement declare() with declarables framework - - Implement ticks - Germany&Norway - 5 points! - - * zend_execute.c - zend_execute_API.c: Fixes - -2000-01-22 Zeev Suraski - - * zend_execute_API.c: Fix an elusive bug - -2000-01-20 Zeev Suraski - - * zend_hash.c: Add some order... - - * zend_hash.c: Indentation fixes - -2000-01-19 Andi Gutmans - - * zend_hash.c: - Optimize zend_hash_del a tiny bit. - - * zend_hash.c - zend_hash.h: - Hopefully fix the hash problem. - - * zend_hash.c: - Hrm I'm not concentrating - - * zend_hash.c: - - Actually the destructor should run after the data is already detached - from the hash but before the bucket is freed. - - * zend_hash.c: - - Rollback hash_apply and friends. They assume now that hash_del is reentrant - as it first applies the destructor and only later nukes the bucket - - * zend_hash.c: - - Run destructor before the hash structure is modified, thus, making - hash_del, reentrant (BLOCK_INTERRUPTIONS needs to be made a counter now). - - * zend_hash.c: - Undo a bug we introduced. (Another one out there). - -2000-01-19 Thies C. Arntzen - - * zend_API.h: - RETURN_NULL -> RETURN_NULL() // we don't want macros without an argumnet - -2000-01-18 Zeev Suraski - - * zend_execute.c: Leak fix - -2000-01-18 Thies C. Arntzen - - * zend_API.h: RETURN_NULL & RETVAL_NULL don't need (). - -2000-01-17 Thies C. Arntzen - - * zend_hash.c: use defines - -2000-01-17 Zeev Suraski - - * zend_hash.c - zend_hash.h - zend_variables.c: Get rid of the IsPointer functionality in the hash. - - * zend_hash.c: - Fixes a newly introduced bug in the hash - - * zend_compile.c - zend_compile.h - zend_constants.c - zend_constants.h - zend_execute_API.c - zend_hash.c - zend_hash.h - zend_list.c - zend_list.h - zend_modules.h - zend_opcode.c - zend_variables.c - zend_variables.h: - Destructors no longer return ints, the low level problem it was intended to solve is long gone now... - -2000-01-16 Zeev Suraski - - * zend.c - zend_execute_API.c - zend_hash.c - zend_hash.h - zend_list.c - zend_list.h: - - Make zend_hash_apply() (and friends) reentrant and much, much quicker - - Introduce zend_hash_graceful_destroy(), which allows the destructor functions to - use zend_hash_apply() and/or zend_hash_graceful_destroy() - - Switch to zend_hash_graceful_destroy() in the resource list shutdowns - - * zend.c - zend_compile.c - zend_compile.h: - Allow module startup to be separate from the compiler/executor startup - -2000-01-16 Thies C. Arntzen - - * zend_hash.c: make the ht->inconsistent stuff less ugly:) - -2000-01-15 Zeev Suraski - - * zend_execute_API.c - zend_list.c: Fix a bug in call_user_function_ex() - - * zend-parser.y: - Added support for $foo->{$bar}["foobar"] notation (was supported in PHP 3) - -2000-01-15 Thies C. Arntzen - - * zend_hash.c - zend_hash.h: - if ZEND_DEBUG mode is on we'll now see warnings when a HashTable is accessed - while it's inconsistent. - - Zeev, Andi - you welcome to revert this patch if you don't like it - i find it - useful! accesssing inconsistent hashtables is one of the hardest things to track! - -2000-01-14 Andrei Zmievski - - * zend_highlight.c: - Since we're highlighting code, put and around the code. - -2000-01-13 Zeev Suraski - - * zend.h - zend_config.w32.h: Make Win32 compile again - -2000-01-12 sascha - - * acconfig.h - zend.h: - Move dl stuff from acconfig.h into zend.h. That allows us finer control - when it comes to suppressing dlfcn.h. - -2000-01-09 Zeev Suraski - - * zend_execute.c: Functionality & crash fixes - -2000-01-04 Andi Gutmans - - * zend.h - zend_operators.c: - - Rename IS_BC to FLAG_IS_BC. We will probably nuke it. - -2000-01-04 Thies C. Arntzen - - * zend_API.h: added ZVAL_*() macros. - -2000-01-04 Andi Gutmans - - * zend.h - zend_execute.c: - - Separate the overloaded objects' types from Zend's data types. - There is no reason for them to be the same, and IS_METHOD just cluttered - there data types. - - * zend.h - zend_API.c - zend_API.h - zend_builtin_functions.c - zend_constants.c - zend_execute.c - zend_execute_API.c - zend_operators.c - zend_variables.c - zend-parser.y - zend.c: - Change IS_UNSET -> IS_NULL - -2000-01-03 Zeev Suraski - - * zend_execute.c: Fix a bug when using [] on a string - -2000-01-03 Joey Smith - - * zend_operators.c: number.h comes from ext/bcmath, not functions/ - -2000-01-03 Zeev Suraski - - * zend_execute.c: Fix - -2000-01-03 Andi Gutmans - - * zend_operators.c: - Fix compare_function() for IS_UNSET - -2000-01-02 Zeev Suraski - - * zend_execute.c: Fix - -2000-01-02 Thies C. Arntzen - - * zend_API.h: renamed RET???_UNSET -> RET???_NULL - -2000-01-01 sascha - - * Zend.m4 - acconfig.h - acinclude.m4: Some cleanup - -2000-01-01 Andi Gutmans - - * zend_operators.c: - - IS_NULL should be 0 when converted to a long although I don't think it - really should be documented. - -2000-01-01 Zeev Suraski - - * zend_operators.c: Fix buglet - -1999-12-31 Zeev Suraski - - * Zend.dsp - ZendTS.dsp: .dsp updates - - * Zend.dsp - ZendTS.dsp - zend_config.w32.h: - Add Release_inline builds - - * zend-parser.y - zend-scanner.l - zend.c - zend.h - zend_API.c - zend_API.h - zend_builtin_functions.c - zend_compile.c - zend_constants.c - zend_execute.c - zend_execute_API.c - zend_operators.c - zend_operators.h - zend_variables.c: - Nuke undefined_variable_string - - Introduce IS_UNSET - -1999-12-31 Andi Gutmans - - * ZendTS.dsp - zend-parser.y - zend_compile.c - zend_compile.h: - - Fix bug #3073. continue in do..while() loops should work now - -1999-12-30 Zeev Suraski - - * zend.c - zend_alloc.c - zend_fast_cache.h - zend_globals.h - zend_globals_macros.h: - This should enable people to use ALLOC_ZVAL() in code outside the php4.dll - -1999-12-30 sascha - - * Zend.m4: - Solaris' sed does not like this expression. Since -O0 is the default, - we can also omit it. - -1999-12-29 Zeev Suraski - - * zend_variables.c: - - Change var_reset() to set bool(0) instead of string("") - - Authors should go over their code and change it to use var_reset() instead of manually - setting it to string(""), in case they're interested in the false value. - - * zend_alloc.c: time_t is an int under Linux... this should always work. - -1999-12-28 sascha - - * zend_alloc.c: Fix warnings - -1999-12-28 Thies C. Arntzen - - * zend_API.h - zend_constants.c: new constant: SQL_NULL - new macros: RETURN_SQLNULL,RETVAL_SQLNULL,IS_SQLNULL - -1999-12-27 Zeev Suraski - - * zend_fast_cache.h: Fix - -1999-12-27 Andi Gutmans - - * zend_API.c: - Get rid of warning - -1999-12-27 Zeev Suraski - - * Zend.dsp - ZendTS.dsp - zend_API.c - zend_API.h - zend_alloc.c - zend_compile.c - zend_execute.c - zend_execute_API.c - zend_fast_cache.h - zend_globals.h - zend_opcode.c - zend_operators.c - zend_variables.c - zend_zval_alloc.h: - Generalize the fast cache mechanism - - Add the HashTable struct to the fast cache mechanism - -1999-12-27 Andi Gutmans - - * zend_API.c: - - Make zend_internal_function allocate a full zend_function structure so - that we don't get memory overruns and Thies doesn't get angry :) - -1999-12-27 Zeev Suraski - - * zend_alloc.c: *** empty log message *** - - * zend_globals.h - zend_zval_alloc.h - zend_alloc.c: Add cache statistics support - -1999-12-27 Thies C. Arntzen - - * zend.c: fix UMR in ZTS mode - -1999-12-26 Zeev Suraski - - * Zend.dsp - ZendTS.dsp - zend_alloc.c - zend_globals.h - zend_zval_alloc.h: - - Enable the new zval cache on debug too. No real reason not to, and it keeps - the code cleaner. - - ZTS compile fixes - - * zend_alloc.c: Fix buglet - - * zend_zval_alloc.h: Add missing file - - * zend.h - zend_API.h - zend_alloc.c - zend_compile.c - zend_execute.c - zend_globals.h - zend_operators.c: - Introduce a zval-specific cache - 5-15% speed improvement - -1999-12-26 sascha - - * Makefile.am - acinclude.m4: Makefile.am: Add dummy target for dependencies - acinclude.m4: Cache result of broken sprintf check - -1999-12-26 Zeev Suraski - - * zend.h - zend_API.c - zend_API.h - zend_builtin_functions.c - zend_compile.c - zend_execute.c - zend_execute_API.c - zend_operators.c: Change ALLOC_ZVAL() semantics - - * zend_alloc.c - zend_alloc.h - zend_globals.h: namespace protection - -1999-12-25 Zeev Suraski - - * zend_ptr_stack.c - zend_ptr_stack.h: inline functions cannot accept varargs - -1999-12-25 Andi Gutmans - - * zend-parser.y: - Prepare Zend for the new $a{2} string offset syntax. - -1999-12-24 Zeev Suraski - - * zend_config.w32.h: - Use __forceinline under Win32 (inlining under Win32 gives roughly 30% performance - increase) - - * zend-scanner.l: Shut gcc up - - * zend_compile.c: Optimize - -1999-12-24 Andi Gutmans - - * zend.h - zend_API.c - zend_API.h - zend_builtin_functions.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_operators.c - zend_variables.c: - - Create two new macro's. ALLOC_ZVAL() and FREE_ZVAL(z) and make Zend use - them. - -1999-12-24 Zeev Suraski - - * zend_compile.c: - Use function_add_ref() here too - -1999-12-23 Zeev Suraski - - * zend_compile.c - zend_opcode.c: - Fix a class inheritence leak, when using static varibles in a parent class member function - - * zend_compile.c: This one slipped away - -1999-12-23 sascha - - * Zend.m4: Rename option to match description string - -1999-12-23 Zeev Suraski - - * zend-parser.y - zend-scanner.l - zend_compile.c - zend_compile.h - zend_execute.c: - - require() of a dynamic expression now has the standard require() semantics - - Fixed a memory leak in require() of a dynamic expression - -1999-12-23 sascha - - * Makefile.am - Zend.m4: - Compile zend_execute.c with special CFLAGS. For GCC, INLINE_CFLAGS - contains -O0 to disable optimizations. This can be disabled by using - the appropiate parameter. - -1999-12-22 sascha - - * zend_builtin_functions.c: Kill compiler warning - - * Zend.m4: Don't set DEBUG_CFLAGS to -g, if -g is already in CFLAGS - -1999-12-22 Zeev Suraski - - * zend.c - zend.h: export - - * zend_extensions.h: Those void's don't belong in there - - * zend_API.h - zend_builtin_functions.c: - Fix function_exists() - - * zend_execute.c: - - Fix a very old legacy memory leak in break(n) statements - - * zend_execute.c: Fix for the array() initialization bug Stas found - -1999-12-22 Andi Gutmans - - * zend_compile.c: - Remove unused variable. - -1999-12-21 Zeev Suraski - - * zend-scanner.l - zend.h - zend_compile.c - zend_execute.c: - Fix the highlighting problem. STR_REALLOC() should be used instead of plain erealloc() - whenever you're dealing with strings that might be coming back from the engine - there seem - to be a few other places like this in PHP. - -1999-12-21 Andrei Zmievski - - * zend.c - zend_API.c - zend_compile.c - zend_execute.c - zend_execute_API.c - zend_operators.c - zend_variables.c - zend_variables.h: We're using ZVAL's now. - -1999-12-21 Zeev Suraski - - * zend_execute.c: - Fix Sascha's leak. Good report! - - * zend_alloc.c: No need to block for interruptions so early - -1999-12-21 sascha - - * Zend.m4: - Explicitly check for C++ preprocessor, otherwise autoconf forces it onto - us at the wrong place (subsequent autoconf checks failed). - -1999-12-20 Zeev Suraski - - * zend_compile.c: - Fix @expr - - * zend.h - zend_compile.c - zend_execute.c: - - Fix the crash Thies was experiencing (returning a function call could cause a crash) - - Fix the leak Thies was experiencing (@fcall() leaked) - -1999-12-19 Zeev Suraski - - * Zend.dsp: Some updates - - * Zend.dsp - ZendTS.dsp: Make these work again - - * FlexLexer.h - Makefile.am - Zend.dsp - Zend.m4 - ZendTS.dsp - configure.in - flex.skl - libzend.dsp - libzend.m4 - libzendts.dsp: libzend -> Zend - - * zend.h - zend_API.h - zend_compile.c - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_globals.h: - - Made things work again (Thies, everybody - please check the latest CVS and see if you're - still getting any problems) - - Changed the interface of call_user_function_ex() to support returning of references - -1999-12-19 Andi Gutmans - - * zend.c - zend.h - zend_compile.c - zend_execute.c - zend_execute_API.c - zend_globals.h: - More fixes related to the return references patch - - eval_string() and call_user_function_ex() still don't work. - - The libzend tree is untested and might not be stabl yet. - -1999-12-19 sascha - - * Makefile.am: Add zend_sprintf.c - - * acconfig.h - zend_sprintf.c: configure sets ZEND_BROKEN_SPRINTF - - * acinclude.m4: Variables are not interpolated unless we use _UNQUOTED - -1999-12-18 Zeev Suraski - - * zend.h - zend_API.h: - The tree compiles again - -1999-12-18 sascha - - * libzend.m4: Let autoconf check for the proper inline keyword - - * Makefile.am - libzend.m4: - automake created illegal target names due to the ZEND_SCANNER definition. - We now substitute @ZEND_SCANNER@ directly - -1999-12-18 Zeev Suraski - - * zend.h - zend_API.c - zend_API.h - zend_builtin_functions.c: - - Introduce ZEND_NUM_ARGS(), to replace ARG_COUNT(ht) - - Rename getParameters() and friends for consistency and namespace cleanliness - -1999-12-17 Zeev Suraski - - * zend_constants.c: - Made PHP_VERSION and PHP_OS work again - - More php3_ cleanup - - Restored the PHP_VERSION and PHP_OS constants - -1999-12-17 sascha - - * libzend.m4: Define inline to inline explicitly - - * Makefile.am - acinclude.m4 - configure.in - libzend.m4: Move config code into separate file - -1999-12-17 Andi Gutmans - - * zend-parser.y - zend_compile.c - zend_compile.h: - - By mistake commited this to the branch. It fixes a bug we introduced with - the return reference patch. - -1999-12-15 Andrei Zmievski - - * zend_builtin_functions.c: Doh! I'm an idiot. - - * zend_builtin_functions.c - zend_compile.c: - s/inheritence/inheritance/g - - Added is_subclass_of() function - -1999-12-15 Zeev Suraski - - * zend-parser.y - zend.h - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_globals.h - zend_opcode.c: - Implement return by reference: - - In function declaration instead of the return statement - - In the assignment phase - - Implement ability to turn off support for call-time pass by reference - -1999-12-15 Andrei Zmievski - - * zend_builtin_functions.c: val->len - - * zend_builtin_functions.c: Faster, must go faster. - -1999-12-15 Andi Gutmans - - * zend_execute.c - zend_opcode.c - zend-parser.y - zend_compile.c - zend_compile.h: - - Preliminary return ref patch. It breaks libzend so don't use this branch - right now. - -1999-12-14 Andrei Zmievski - - * zend_builtin_functions.c: - Added class_exists() - - Moved function_exists() here from from the basic_functions.c - - Modified method_exists() to convert method name to lowercase - when checking - -1999-12-13 Andi Gutmans - - * zend_execute.c: - - Fix problem when return_value's is_ref/refcount is overwritten by the - internal function. - -1999-12-11 Andi Gutmans - - * zend_execute.c: - Another small fix. - - * zend_execute.c: - Support returning references - - * zend-parser.y - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_globals.h: - - This is supposed to be commited to the RETURN_REF_PATCH branch which is - the beginning of work on allowing returning of references from functions. - -1999-12-07 Andi Gutmans - - * zend-scanner.l: - - opened_path should not be freed here as the zend_file_dtor() takes care - of it. This doesn't fix the bug report for the crash of highlight_file() - though. - -1999-12-07 Zeev Suraski - - * zend-parser.y: Support ZTS definition in zend_config.h - -1999-12-06 Zeev Suraski - - * zend-scanner.l - zend_compile.c - zend_compile.h - zend_highlight.c - zend_indent.c: Move the #include of zend-parser.h out of zend_compile.h - - * zend-parser.y - zend_globals_macros.h: More localization - - * zend-parser.y - zend_compile.h - zend_globals_macros.h: Localize a couple of macros - -1999-12-05 Zeev Suraski - - * zend-scanner.l: *** empty log message *** - -1999-12-05 sascha - - * .cvsignore - zend-parser.y - zend.c - zend_API.c - zend_compile.c - zend_execute_API.c: Fix some warnings - -1999-12-04 Andrei Zmievski - - * zend_API.c: *** empty log message *** - - * zend_API.c - zend_API.h - zend_hash.h: Added zend_set_hash_symbol() function. - -1999-12-04 Thies C. Arntzen - - * zend_API.h: - backed out last change after andi decided on a different approach. - -1999-12-04 Andi Gutmans - - * zend_API.h: - - Call ZEND_SET_SYMBOL_WITH_LENGTH() with refcount 1 from the standard - ZEND_SET_SYMBOL() - -1999-12-04 Zeev Suraski - - * zend-scanner.l - zend_builtin_functions.c - zend_compile.c: - Implement get_used_files() and get_imported_files() - - * zend-parser.y - zend-scanner.l - zend.c - zend.h - zend_compile.c - zend_compile.h: - - Break the zend->PHP dependency introduced by the .php extension for use(), - by providing an API - - Enable Stig's patch for use() extensions (it wasn't refered to by the parser) - - Fix a memory leak in that code - -1999-12-04 Thies C. Arntzen - - * zend_API.h: the new SET_VAR_* macros forgot to set the refcount! - -1999-12-04 Sam Ruby - - * zend-scanner.l: build error - windows - -1999-12-04 stig - - * zend-scanner.l - zend_compile.h: Fix typo, add prototype for use_filename(). - - * zend-scanner.l: "use" should use arg+".php" as parameter to require - -1999-12-04 Zeev Suraski - - * zend-scanner.l: This should fix the fd leak with include()/require() - -1999-12-03 Andrei Zmievski - - * zend_API.h: *** empty log message *** - - * zend_API.h: Added ZEND_SET_GLOBAL_VAR_WITH_LENGTH_EX() macro. - -1999-12-03 Thies C. Arntzen - - * zend-scanner.l: revert my last patch - WARNING: we leak fd's again. - add initialzation of opened_path highlight_file() - -1999-12-03 Andi Gutmans - - * zend_API.h: - Remove _EX and make it the old _LENGTH - -1999-12-02 Andi Gutmans - - * zend_API.h: - Add _EX macro for Andrei - -1999-12-02 Zeev Suraski - - * zend-scanner.h - zend_compile.h: Solve a couple of compile issues - -1999-12-02 Thies C. Arntzen - - * zend-scanner.l: - php_fopen_wrapper_for_zend() does *NOT* insert the opened files into any list - the caller needs to fclose() the file. (not sure if this is desired) - fixed "Uninitialized memory read" when including URLs - -1999-12-01 stig - - * zend-scanner.h - zend.c - zend.h - zend_alloc.h - zend_builtin_functions.h - zend_compile.h - zend_constants.h - zend_execute.c - zend_execute.h - zend_extensions.h - zend_globals_macros.h - zend_hash.h - zend_indent.h: Fix warnings surfacing in maintainer-mode. - -1999-12-01 Zeev Suraski - - * zend_API.h: - Make it possible to explicitly set refcount in ZEND_SET_SYMBOL_WITH_LENGTH(), part 2 - - * libzendts.dsp - zend_API.h: - Allow to set the reference count explicitly for ZEND_SET_SYMBOL_WITH_LENGTH() - -1999-12-01 Andi Gutmans - - * zend_execute.c: - - Forgot to check for BP_VAR_IS in the fix made for Thies' string offset - problem. - -1999-11-30 Andi Gutmans - - * zend_API.c: - Applied Thies' bug fix. Great work! - - * zend-parser.y - zend-scanner.l - zend.c - zend.h - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_globals.h: - - Add use support (behaves like require, but will not use the same file twice) - - Add import support (behaves like include, but requires parentheses; will not - use the same file twice; Currently, it is not yet properly implemented, and - only behaves like include) - - * zend_execute.c: - - Fix problem Thies reported. We by mistake separated variables which were - being fetched for read only. - -1999-11-27 Zeev Suraski - - * zend_alloc.c: Add ability to disable the memory cache - -1999-11-26 Zeev Suraski - - * zend-scanner.l: - Fix fd leak in ZTS mode - - * zend-scanner.l - zend_compile.c: UNIX/non ZTS compile fixes - - * zend-scanner.l - zend_compile.c - zend_compile.h: - Improve the file handle closing code - - * zend_llist.c - zend_llist.h: - Modify zend_llist_del() to receive a comparison function - - * zend_API.c: - This request_shutdown() is no longer needed (never was needed really) - - * zend-scanner.l: This should get the file to close properly - -1999-11-26 sascha - - * Makefile.am: Rebuild libzend.la, if the scanner was rebuilt - -1999-11-26 Zeev Suraski - - * zend_API.c - zend_modules.h: Remove request_started, increase thread safety - -1999-11-25 Zeev Suraski - - * zend_execute.c: That's a more thorough fix... - - * zend_execute.c: - Fix bug #2817 - assignments to string offsets could erronously modify unrelated strings - -1999-11-22 Zeev Suraski - - * zend_alloc.c: Fix compile problem with enable-memory-limit - - * zend-scanner.l: Fix inconsistencies with here-docs implementation - - * zend-scanner.l - zend_globals.h: Fix #2744 - -1999-11-21 Andi Gutmans - - * zend_execute.c: That slipped away - -1999-11-21 Zeev Suraski - - * zend.h - zend_API.c - zend_compile.c - zend_execute.h - zend_execute_API.c: - Optimize class instanciation - - Fix constant instanciation for array elements inside objects - -1999-11-19 Andi Gutmans - - * zend_execute.c: - - Moved var_uninit() for return_value to the beginning of DO_FCALL. - We forgot to do it for overloaded methods - - * zend.h - zend_execute.c: - - Functions whose return values aren't used have them freed in DO_FCALL - and don't need a special ZEND_FREE opcode following them anymore - -1999-11-17 Andi Gutmans - - * zend_compile.c - zend_execute.c: - - If a function's return value is unused then don't create a ZEND_FREE - opcode but free it after the function call in zend_execute. - - * zend_execute.c: - Forgot this - -1999-11-16 Andi Gutmans - - * zend_execute_API.c: - Weird that this compiled for me. - - * zend.h: - CHange used_return_value -> return_value_used - - * zend_compile.c: - - In any case create the free opcode. Need to allow the functions to - create a hint. - - * zend.h - zend_compile.c - zend_execute.c: - - Add support for used_return_value passed to internal functions. - -1999-11-14 Andi Gutmans - - * zend_compile.h: - Fix comment as to Joey's findings - -1999-11-13 Andi Gutmans - - * zend_execute.c: - Fix crash with string offset assignments. - -1999-11-04 Andrei Zmievski - - * zend_hash.c - zend_hash.h: Made zend_hash_rehash() callable from outside. - -1999-11-03 Andi Gutmans - - * zend_API.h - zend_compile.c - zend_compile.h - zend_execute.c: - Add support for BYREF_FORCE_REST - -1999-10-28 Andi Gutmans - - * zend_compile.c - zend_execute.c: - Fix for Thies' leak and Andrei's crash - -1999-10-25 Zeev Suraski - - * zend_compile.h: *** empty log message *** - -1999-10-23 Sam Ruby - - * libzend.dsp - libzendts.dsp: - Allow CYGWIN directory to be specified as via environment variable - -1999-10-22 Andi Gutmans - - * zend_execute.c: - Fix isset() with string offsets. - -1999-10-19 Thies C. Arntzen - - * zend_operators.c: fixed is_identicat_function() - -1999-10-19 Andi Gutmans - - * zend_compile.h: - Move IS_IDENTICAL next to IS_EQUAL - - * zend_operators.c: - Fix is_identical function - - * zend-parser.y - zend-scanner.l - zend_compile.h - zend_execute.c - zend_opcode.c - zend_operators.c - zend_operators.h: - - Preliminary submit of Thie's patch. Will fix the rest on Windows - as this was added on UNIX with patch. Changed IS_SAME -> IS_IDENTICAL - -1999-10-18 Andrei Zmievski - - * zend_API.h: Be safe, use (). - -1999-10-15 Andrei Zmievski - - * zend_operators.c - zend_operators.h: unstatic'fy is_numeric_string() - - * zend_hash.c - zend_hash.h - zend_compile.c: *** empty log message *** - -1999-10-15 Andi Gutmans - - * zend_operators.h: - Add convert_to_number_ex() - -1999-10-14 sascha - - * configure.in: - Add "--disable-inline" for low-memory machines (be it limited - RAM or virtual memory). It's also useful for Digital C where - the C++ compiler thinks "inline" is an invalid specifier. - - * Makefile.am: Use sources from $(srcdir) - -1999-10-13 sascha - - * Makefile.am: Do not use $< for anything but implicit rules. - -1999-10-13 Thies C. Arntzen - - * zend_list.c: - (zend_fetch_resource) added warinig if resource is of wrong type - -1999-10-13 sascha - - * acconfig.h: Disable ZEND_EXTENSIONS_SUPPORT, if RTLD_NOW is not defined. - - Note that this part could be made platform independent by using - libltdl (for Solaris, Linux, *BSD, HP-UX, Win16/32, BeOS). - -1999-10-12 Thies C. Arntzen - - * zend_list.c - zend_list.h: new improved resource-API - -1999-10-12 sascha - - * acconfig.h: - Use DL_LAZY for OpenBSD. This seems to be a compatibility flag which - should be used for the 2nd parameter to dlopen. - - http://www.openbsd.org/cgi-bin/cvsweb/src/share/man/man3/dlfcn.3?rev=1.8 - -1999-10-12 Andi Gutmans - - * zend_execute.c: - - object.ptr was made NULL in DO_FCALL but wasn't restored. Right now I - push it in DO_FCALL and at the end of do_fcall_common it always gets - popped. We might be able to optimize it out. - -1999-10-11 Andrei Zmievski - - * .cvsignore: *** empty log message *** - - * zend_hash.c - zend_hash.h: Modified zend_hash() to accept a pointer to sort function. - -1999-10-11 Andi Gutmans - - * zend_execute.c: - - No idea why this bug didn't exist before. But I'm too tired to think of it. - During a regular do_fcall we need to set object.ptr to NULL and, thus, - push it in the beginning and pop it in the end. - I hope this fix more or less cuts it. I just want to sleep :) - -1999-10-10 Andi Gutmans - - * zend_execute.c: - - Didn't lower refcount when doing an internal function call linked to a regular object. - -1999-10-10 Thies C. Arntzen - - * .cvsignore: added some more autoconf/libtool stuff to be ignored - -1999-10-10 Andi Gutmans - - * zend_execute.c: - - Clean up a bit. Separate before the locking so that we can use SEPARATE_ZVAL - macro. - -1999-10-10 sascha - - * build.mk: Add clean target which removes standard targets - - * build.mk: build.mk can be used to generate build tools. It is usually - faster than buildconf, since it rebuilds only components, if - it is necessary. To use it, run - - $ make -f build.mk - -1999-10-09 Andi Gutmans - - * zend_execute.c: - Shouldn't be needed - - * zend_execute.c: - - God damn this sucked. I hopefully fixed the problems with classes although - we might need to clean stuff up a bit. - -1999-10-09 sascha - - * acconfig.h: - Define RTLD_NOW to DL_NOW, if RTLD_NOW is not defined (for OpenBSD). - -1999-10-07 Thies C. Arntzen - - * zend_variables.c - zend_variables.h: added zval_del_ref() function - -1999-10-07 Andi Gutmans - - * zend_execute.c: - Reverse my patch - -1999-10-06 Andi Gutmans - - * zend_execute.c: - - Fixed memory leak with this pointer. It was somtimes initialized with refcount - of 2 instead of 1. - - Also fixed a place where object.ptr_ptr is set to pointing to a zval* instead - of zval**. I don't think this is ever used so we might be able to remove it - altogether. - -1999-10-06 Thies C. Arntzen - - * zend_execute.c: fix for using resources as array indices - -1999-10-05 sascha - - * configure.in - zend.h - zend_globals.h: More portability stuff - - * configure.in: OSF/1 V4.0 wants -lcxx - - * zend_compile.h: - This causes link problems with anything higher than -O0. - -1999-10-04 sascha - - * Makefile.am: Add necessary rule. - - * Makefile.am - acconfig.h - acinclude.m4 - buildconf - configure.in - zend_config.in: Use libtool to build. - -1999-10-04 Thies C. Arntzen - - * zend_builtin_functions.c: use getParametersEx for all builtin functions - - * zend_API.c - zend_API.h: added add_*_resource() and add_*_bool() functions - -1999-10-03 Andi Gutmans - - * zend_compile.h - zend_execute.c - zend_execute_API.c - zend_globals.h: - Hooray. This might actually work. (I hope) - -1999-10-03 sascha - - * configure.in: Make it executable. - -1999-10-02 Andi Gutmans - - * zend_execute.c: - Another locking fix. - - * zend_execute.c: - Fixed locking problem when fetching string offsets - -1999-10-02 Zeev Suraski - - * zend_execute.c: - Fix the leak reported on the PHP 3 list (isset() on string offsets) - -1999-10-01 Andi Gutmans - - * zend.h - zend_API.h - zend_builtin_functions.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_opcode.c - zend_operators.h: - - Move is_ref back to being an unsigned char and not a bit field. - - * zend.h - zend_API.h - zend_builtin_functions.c - zend_compile.h - zend_execute.c - zend_execute_API.c: - Remove locking support completely - - * zend-parser.y - zend_compile.c - zend_compile.h - zend_execute.c: - - For Andrei. Implement references in array() initializations - -1999-09-29 Zeev Suraski - - * zend_config.w32.h: *** empty log message *** - -1999-09-29 Andi Gutmans - - * zend_operators.c: Fix leak in += with arrays - - * zend-parser.y - zend_compile.c - zend_compile.h - zend_execute.c: - - Fix SEND_VAR problem after fetch'ing a variable and not knowing the fetch type - -1999-09-29 Thies C. Arntzen - - * zend_API.c - zend_API.h: added add_property_resource - -1999-09-28 Andi Gutmans - - * zend_compile.h - zend_execute.c - zend_execute_API.c: - - Stop using the locking mechanism and start using refcount. - Now we know when we need to free but we still need to support it - - * zend_execute.c - zend_execute.h - zend_execute_API.c: - - First part of the patch which makes reads use ptr and not ptr_ptr. - -1999-09-28 sascha - - * acconfig.h - configure.in - zend-scanner.l: Provide alternative istdiostream. - - This has been tested with Sun WorkShop 4.2 C++ which does not - contain class istdiostream. - -1999-09-26 sascha - - * Makefile.am - configure.in: Actually allow to set CXXFLAGS - - * configure.in - zend_config.in: - Build communication channel and add checks for C++ library - -1999-09-26 Andi Gutmans - - * zend_execute.c - zend_execute.h - zend_execute_API.c: - Changed Ts{}.var to Ts{}.var.ptr_ptr. - -1999-09-24 sascha - - * zend_operators.h: Add _ex API implementation for booleans. - -1999-09-24 Zeev Suraski - - * zend_list.c - zend_list.h: Exify the standardized resource stuff - -1999-09-23 Andi Gutmans - - * zend_operators.c: - Fix bug #2364. - I haven't checked all of the conversion macros yet but there's a change - there are more such bugs there. - -1999-09-23 sascha - - * configure.in: Fix vpath build w/ thread-safe enabled on Unix. - -1999-09-22 Thies C. Arntzen - - * zend_builtin_functions.c: - preliminary fix for each until andi & zeev clean up! - - * zend_list.c: - if you pass NULL as the resource_type_name to zend_fetch_resource*&friends the functions will not print any warnings if the resource is not found! - -1999-09-21 Andi Gutmans - - * zend_compile.c: - - Fix problem where function parameter fetches were created too late. - -1999-09-21 Zeev Suraski - - * zend_builtin_functions.c: Add get_func_args() - - * zend_builtin_functions.c: *** empty log message *** - -1999-09-20 Andi Gutmans - - * zend_builtin_functions.c: - - Move some more Zend internal functions from PHP - - * zend-parser.y: - Next part of locking fix. - $var = expr; and $var += expr; first create code for expr and later on - for the fetch_w of $var. - - * zend_builtin_functions.c: - Newline for Sun's compiler - - * zend_API.h - zend_builtin_functions.c: - Add some internal functions to Zend - - * zend_compile.c - zend_compile.h - zend_opcode.c: - - First step in fixing locking problem. Array fetches are now always done last. - Later on we will want to delay the write fetches even longer until after their - resulting expression is parsed. The way it is now, will make it very easy - to delay as long as we need. - - * zend_compile.c - zend_compile.h: - - Indirect references had all of the fetches by mistakenly backpatched. - Actually all of the fetches are supposed to be read, except for the last - one. - -1999-09-20 Zeev Suraski - - * libzend.dsp - libzendts.dsp - zend_builtin_functions.c: Added zend_num_args() and zend_get_arg() - - * Makefile.am - zend.c - zend_builtin_functions.c - zend_builtin_functions.h: - Add a file in which we can put Zend builtin functions - -1999-09-18 Andi Gutmans - - * zend_execute.c: - - Try to fix the leak Rasmus reported. It's pretty sucky code so I'm really - not sure this fix is OK.I can't remember all of what we did there. - -1999-09-18 Zeev Suraski - - * zend_list.c: Safer behavior - -1999-09-17 Thies C. Arntzen - - * zend_execute.c: make SUNs c89 happy - - * zend_execute_API.c: no // in the sources please - - * zend_globals_macros.h: added newline at end of file - -1999-09-17 Zeev Suraski - - * zend_execute.c: - Fix bug #2318 - -1999-09-16 Zeev Suraski - - * zend_operators.h: Introduce convert_to_*_ex() - -1999-09-16 sascha - - * configure.in: this helps compiling on non-ANSI C compliant platforms - -1999-09-13 stig - - * acconfig.h - configure.in: Make sure HAVE_LIBDL gets defined. - Disable more C++ tests when not configured for thread safety. - -1999-09-12 Zeev Suraski - - * zend.c: Make this class instanciatable - -1999-09-12 sascha - - * configure.in: check for c++ only, if thread safety is enabled - -1999-09-10 Zeev Suraski - - * zend_compile.c: Shut up a warning - -1999-09-09 Andi Gutmans - - * zend_compile.c - zend_globals.h - zend_stack.c - zend_stack.h: - Add foreach() freeing code. - - Fix switch() freeing code to only free current function's switch expressions. - - I have a feeling break expr; in a switch where expr > 1 leaks because it - won't free all of the expressions. Fix is probably not trivial. - - * zend_operators.c: - - Fix leak when decrementing strings which actually are longs. - -1999-09-08 Andi Gutmans - - * zend_execute.c: - - Fix for floating point array offsets. Same behaviour as in PHP 3.0. We - casted to (long). - - * Makefile.am - libzendts.dsp: - Add -b option to flex++ - -1999-09-07 stig - - * acconfig.h: define tests first, use after. - -1999-09-06 Andi Gutmans - - * zend_config.w32.h: - Fix win32 compile - - * zend_config.w32.h: - Make zend compile again in Win32. - -1999-09-06 stig - - * .cvsignore: ignore zend-scanner.cc - - * ZendCore.dep - libzend.dsp - libzendts.dsp: hand-patched some MSVC files - - * Makefile.am - acconfig.h - acinclude.m4 - config.unix.h - config.w32.h - configure.in - zend-scanner.l - zend.h - zend_API.c - zend_alloc.c - zend_compile.h - zend_config.w32.h - zend_execute.c - zend_hash.c - zend_list.c - zend_ptr_stack.c - zend_sprintf.c: * header file cleanup - * fixed --enable-thread-safety build for UNIX - - I don't have a Win32 environment available, could someone please try - compiling on Win32 to see if I got all the header file stuff right there? - -1999-09-05 Andi Gutmans - - * zend_globals_macros.h: - Oops - - * libzendts.dsp - zend.c - zend.h - zend_alloc.c - zend_alloc.h - zend_globals.h: - Shift around header files. - -1999-09-04 Zeev Suraski - - * zend_list.c: Fix a stupid bug (from stefan@roehri.ch) - -1999-09-03 Zeev Suraski - - * zend_list.h: Damn, forgot to commit that - - * zend_list.c - zend_list.h - zend_modules.h: Add new API for resources - -1999-09-03 sascha - - * zend_modules.h: Add global startup/shutdown functions - -1999-09-03 Zeev Suraski - - * zend_operators.c: - Revert the IS_RESOURCE patch. It had some unintended behavior. - - * zend_variables.c: Let $GLOBALS actually work... - - * zend_operators.c: - Release resources when converting to other types (fix Thies's reported problem) - -1999-09-02 Zeev Suraski - - * zend_compile.c: - Use \0NameFilenameLineno as key instead of numeric index for runtime defined functions - -1999-08-28 Zeev Suraski - - * zend_extensions.c - zend.h - zend_alloc.c - zend_extensions.h - zend_variables.c - zend_variables.h: *** empty log message *** - - * zend.h - zend_alloc.c - zend_alloc.h - zend_variables.c: Beef up debug macros - -1999-08-27 Zeev Suraski - - * zend_execute_API.c: Fix a crash bug in case of aborted execution - - * zend.h - zend_alloc.c - zend_alloc.h - zend_execute_API.c - zend_variables.c - zend_variables.h: Better debug macros - -1999-08-26 Andi Gutmans - - * zend_execute_API.c: - Damn. It wasn't a correct fix. This should do it. - When the zval ** are equal we don't want to assign_ref, in any other case - I can think of we do want to assign_ref. - - * zend_execute_API.c: - Fix leak when global is used in the global scope. - - * zend_compile.c: - Fix when redefining classes at run-time. - -1999-08-25 sascha - - * zend.h: make it compile with gcc again - -1999-08-25 Andi Gutmans - - * zend_hash.c - zend_hash.h: - Add hash_apply_with_arguments() - - * zend-scanner.l: - More elegant fix for Win32 include_path - - * zend-scanner.l: - - Temporary fix to allow Win32 MT safe version to use zend_fopen(). - -1999-08-23 Andi Gutmans - - * zend_execute.c: - Fixed a specific memory leak linked to locking. - -1999-08-22 sascha - - * zend.h - zend_globals.h: This changes makes it work on egcs 1.1.2/Alpha - - * configure.in - zend.h: remove checks - -1999-08-20 Zeev Suraski - - * zend_constants.c - zend_constants.h - zend.c: Fix for Thies's UMR - -1999-08-19 Andi Gutmans - - * zend-parser.y - zend_opcode.c: - - Make sure expr_list and echo_list are either empty or comma seperated - expressions - -1999-08-18 Thies C. Arntzen - - * zend-scanner.l: on unix ZTS gets defined in zend_config.h - -1999-08-17 Zeev Suraski - - * zend_execute_API.c: Fix #2012 - - * zend_execute.c: Fix #2070 - -1999-08-17 Andi Gutmans - - * zend.c - zend.h: - Add some ZENDAPI's - -1999-08-15 Andi Gutmans - - * zend_execute.c: - Oopsie - - * zend.h - zend_compile.h - zend_execute.c - zend_globals.h: - Optimize the execute stack a bit. - -1999-08-14 Zeev Suraski - - * zend_compile.c: Fix several class issues - - * zend_compile.c - zend_compile.h: - Generate better warnings for class/function redefinitions - -1999-08-10 Andi Gutmans - - * zend_compile.c - zend_constants.c: - Got rid of the C++ comments. - -1999-08-09 Andi Gutmans - - * zend_execute.c: - Thies's crash fix. - -1999-08-07 Zeev Suraski - - * zend_compile.h - zend_execute.c - zend_execute_API.c: Fix a few leaks - -1999-08-06 Zeev Suraski - - * zend_execute_API.c: Fix a bug in call_user_func_ex() - - * zend_API.h: Now that's an annoying bug. - - * zend_API.h - zend_execute_API.c: Introduce call_user_func_ex() - - * zend_execute.c: *** empty log message *** - -1999-08-03 Andi Gutmans - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_opcode.c: - - Initialize extended value's and put the fetch_type in it's own variable - name. - -1999-08-02 Andi Gutmans - - * zend_compile.c - zend_compile.h: - Make set_compiled_filename() return a pointer to the allocated file name - -1999-07-31 Zeev Suraski - - * zend_API.h: These aren't necessary - -1999-07-30 Zeev Suraski - - * zend_API.h: Support symbols in any symbol table, not just the active one - -1999-07-30 Andi Gutmans - - * zend_ptr_stack.c: - Damn that's more like it. - - * zend_ptr_stack.c: - Cut&paste crap - - * zend_execute.c - zend_ptr_stack.c - zend_ptr_stack.h: - - Add ptr_stack_n_{push,pop} in order to speed up function calls a bit. - There seems to be no reason for stack->top in the ptr_stack except for - when realloc()'in the stack. I think I'll remove it. - -1999-07-30 Zeev Suraski - - * zend_API.h: - * Setting variables in the global scope wasn't handling is_ref's properly - -1999-07-29 Andi Gutmans - - * zend-parser.y - zend_compile.c - zend_compile.h: - - Fixed a leak when doing inheritance. The parent class name wasn't being freed. - - Fixed a stack leak. Functions that had late argument binding were set up as - INIT_FCALL_BY_NAME but were using DO_FCALL and not the corresponding - DO_FCALL_BY_NAME. - -1999-07-28 Andi Gutmans - - * zend_compile.c - zend_execute.c - zend_execute_API.c - zend_globals.h - zend_hash.c: - Fixed various inheritance problems & Andrey's leak - -1999-07-27 Zeev Suraski - - * zend_compile.c: Inherit parent's constructor - - * zend_compile.c: - Fix runtime inheritence (child functions/members should have higher precedence) - -1999-07-27 Andi Gutmans - - * zend_execute.c: - Add missing lock - - * zend_execute.c: - Fix up the new operator a bit more. - -1999-07-27 Zeev Suraski - - * zend_execute.c: Set reference count and is_ref values for new objects - -1999-07-26 Zeev Suraski - - * zend_operators.c: - - Fixed a memory leak when using assignment-op operators with lvalue of type - string (or array/object) - - * zend_compile.c: *** empty log message *** - - * zend_compile.c - zend_compile.h - zend_execute.c: - Fix a bug in inheritence from classes defined in include files, that are - inherited from require()'d files - -1999-07-26 Andi Gutmans - - * zend_execute.c: - Oops I erased this by mistake - - * zend_execute.c: - - Should be a complete fix now. This break away code should maybe be made - somewhat generic - - * zend_execute.c: - Temporary fix for "this". Have to fix it tomorrow. - - * zend_execute.c: - - Fix compile error. Weird that Visual didn't catch this one. - - * zend-parser.y - zend.h - zend_compile.c - zend_compile.h - zend_execute.c: - Fix the new operator incompatibility. - - I commented PHP_FUNCTION(strtotime) in datetime.c because it stopped - win32 from compiling. This needs to be fixed!!! - - Check out libzend to compile the tree now. - - * zend.h - zend_execute.c: - new operator fixes - -1999-07-25 Andi Gutmans - - * zend-parser.y - zend_compile.c - zend_compile.h - zend_execute.c: - Commiting to branch newoperator. - - To check it out do cvs checkout -rnewoperator libzend - -1999-07-24 Zeev Suraski - - * zend_compile.c: Fix that memory leak... nested function issue remains - - * zend_compile.c - zend_stack.c - zend_stack.h: Fix RETURN & SWITCH memory leak issue - - * zend-parser.y - zend_compile.c - zend_compile.h - zend_execute.c: - Thoroughly fix the SWITCH problem. No RETURN handling yet. - -1999-07-23 Zeev Suraski - - * zend-parser.y - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute.h: Fix bug #1812 - - * zend.h - zend_operators.c: - * Add an API macro users can use to ensure an array member can be modifed - before they modify it. - * Fix a bug and remove redundant code in convert_to_long() (booleans and - resources weren't changing their types - -1999-07-22 Zeev Suraski - - * zend_constants.c: New constants - -1999-07-22 stig - - * buildconf: identify ourselves - -1999-07-20 Andi Gutmans - - * zend_execute.c: - Include alloca.h when need and available. - - * zend_compile.c - zend_execute_API.c - zend_list.c - zend_operators.c: - Get rid of C++ comments - -1999-07-19 Zeev Suraski - - * config.unix.h - config.w32.h - zend-parser.y - zend-scanner.h - zend-scanner.l - zend.c - zend.h - zend_API.c - zend_API.h - zend_alloc.c - zend_alloc.h - zend_compile.c - zend_compile.h - zend_constants.c - zend_constants.h - zend_errors.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_extensions.c - zend_extensions.h - zend_globals.h - zend_hash.c - zend_hash.h - zend_highlight.c - zend_highlight.h - zend_indent.c - zend_indent.h - zend_list.c - zend_list.h - zend_llist.c - zend_llist.h - zend_modules.h - zend_opcode.c - zend_operators.c - zend_operators.h - zend_ptr_stack.c - zend_ptr_stack.h - zend_sprintf.c - zend_stack.c - zend_stack.h - zend_variables.c - zend_variables.h: 0.91 update - -1999-07-19 Andi Gutmans - - * zend.h - zend_execute.c - zend_extensions.h: * Fix Zend version - * Fix a method call bug - - * LICENSE - libzendts.dsp: License update - - * zend_errors.h: Make error codes PHP 3.0 compatible - -1999-07-18 Andi Gutmans - - * zend_execute_API.c: - - Should fix the memory leak when returning from the main scope. - -1999-07-17 Zeev Suraski - - * configure.in: Debug on by default - -1999-07-16 Zeev Suraski - - * zend_compile.c: - Ignore T_PHP_TRACK_VARS in the parser (handled in the scanner) - - * config.unix.h - config.w32.h - zend-parser.y - zend-scanner.h - zend-scanner.l - zend.c - zend.h - zend_API.c - zend_API.h - zend_alloc.c - zend_alloc.h - zend_compile.c - zend_compile.h - zend_constants.c - zend_constants.h - zend_errors.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_extensions.c - zend_extensions.h - zend_globals.h - zend_hash.c - zend_hash.h - zend_highlight.c - zend_highlight.h - zend_indent.c - zend_indent.h - zend_list.c - zend_list.h - zend_llist.c - zend_llist.h - zend_modules.h - zend_opcode.c - zend_operators.c - zend_operators.h - zend_ptr_stack.c - zend_ptr_stack.h - zend_sprintf.c - zend_stack.c - zend_stack.h - zend_variables.c - zend_variables.h: License update - -1999-07-15 Andi Gutmans - - * zend.c: Change true/false back to 1/"" - - * zend_execute.c: Fix a lock issue - -1999-07-15 sascha - - * zend_execute_API.c: disable zend_handle_sigsegv - -1999-07-14 Andi Gutmans - - * libzendts.dsp - zend.c: Fix thread unsafe constants startup - - * LICENSE - zend.c - zend_constants.c - zend_constants.h: - License update - - Fix multithreaded constants startup - - * zend_operators.c: - Fix for boolean convert to number - -1999-07-12 Andi Gutmans - - * zend_execute.c: - Fixed a purify warning - -1999-07-10 Zeev Suraski - - * zend_alloc.c: Oh, that dumb bug. - -1999-07-10 Andi Gutmans - - * zend_execute.c - zend_hash.c: Ok, so we do have to lock in there - - * zend.c - zend_execute.c: Fix assignments of reference variables - -1999-07-10 Zeev Suraski - - * zend_execute_API.c: Woops, fix. - - * zend_execute.c - zend_execute_API.c - zend_globals.h: Put the garbage in the garbage bin - - * zend_alloc.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_globals.h - zend_variables.c: Get rid of AiCount completely - - * zend_execute.c: Final tweaks - - * zend_execute.c - zend_hash.c: More locking work - -1999-07-09 Zeev Suraski - - * zend_execute.c: *** empty log message *** - - * zend_execute.c: More stuff - - * zend-parser.y - zend.h - zend_API.c - zend_API.h - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_opcode.c - zend_operators.c - zend_variables.c: Step 4: - Move to a 7-bit counter (not fully implemented yet) - - * zend_API.c - zend_compile.h - zend_execute.c - zend_execute_API.c - zend_opcode.c - zend_variables.c: Phase 3: - Use a single bit to mark IS_REF variables - - * zend-parser.y - zend.h - zend_API.c - zend_API.h - zend_compile.c - zend_execute.c - zend_execute_API.c - zend_opcode.c - zend_operators.c: Step 2: - Rename is_ref to EA - - * zend.c - zend_API.c - zend_compile.c - zend_compile.h - zend_constants.c - zend_constants.h - zend_execute_API.c - zend_hash.c - zend_hash.h - zend_list.c - zend_list.h - zend_modules.h - zend_opcode.c - zend_variables.c - zend_variables.h: Step 1 in nuking the garbage collector: - - Change the hash destructor to return int - - Don't kill the bucket on hash_destroy if the destructor returns 0 - - * config.w32.h - configure.in - zend_alloc.c: *** empty log message *** - - * zend_alloc.c: Send a SIGSEGV instead of exiting, to trigger a core dump - - * zend_alloc.c - zend_alloc.h - zend_hash.c: * Support recoverable failure from erealloc() - * Fix the shutdown code on an unrecoverable erealloc() failure - - * zend_execute_API.c: Fix the mess in SIGSEGV handling, hopefully - -1999-07-08 Zeev Suraski - - * zend_compile.h - zend_compile.c: - Support definition of classes that are derived from classes that are defined in runtime - -1999-07-06 sascha - - * zend.h: enable it, until we find a better way - -1999-07-05 sascha - - * zend.h: make Solaris gcc happy - - * configure.in - zend.h: use void * instead of long for 64-bit test - -1999-07-05 Thies C. Arntzen - - * zend_API.h: added RETVAL_RESOURCE and RETURN_RESOURCE - -1999-07-04 Zeev Suraski - - * zend_operators.c: - Make convert_to_string() regard false as "" instead of "0" - -1999-07-03 sascha - - * Makefile.am: don't wipe files for distributions - - * configure.in - zend.h: - checking for ints won't work, since they are 32 bit on both platforms - -1999-07-03 Zeev Suraski - - * zend_execute.c: Support isset()/empty() for string offsets - - * zend-scanner.l: Fix a crash - -1999-07-03 sascha - - * configure.in: add usual rhapsody hack - - * config.unix.h: missing DL_HANDLE broke build - - * zend_extensions.c: typo - -1999-07-02 sascha - - * acconfig.h - configure.in - zend.h: workaround for 64-bit platforms - -1999-07-02 Zeev Suraski - - * acconfig.h - configure.in - zend_globals.h: define zend_bool - -1999-06-30 Zeev Suraski - - * zend-parser.y: Make require accept any parameter - -1999-06-26 Zeev Suraski - - * zend_alloc.h - zend_operators.c - zend_alloc.c: - * Make the memory leak reporting code much better with repeats - * Remove useless variables - -1999-06-22 Zeev Suraski - - * zend_compile.c: Fix Thies's bug report - - * zend_alloc.c - zend_compile.c - zend_operators.c: - * Fix concatenation of arrays (it was PHP 3.0 style, copying zval's instead - of zval *, and it wasn't using reference counting) - * Fix a memory leak in static array()'s with textual indices - -1999-06-19 Zeev Suraski - - * zend.c: *** empty log message *** - - * zend.h - zend_extensions.h: - Add a standard get_ini_entry() to interface between Zend and the outside world - - * configure.in: *** empty log message *** - -1999-06-16 stig - - * zend_modules.h: - added INIT_FUNC_ARGS_PASSTHRU and SHUTDOWN_FUNC_ARGS_PASSTHRU - -1999-06-15 stig - - * zend_operators.c - zend_operators.h: * added zend_binary_strcasecmp() - -1999-06-12 Zeev Suraski - - * zend-parser.y: - We can't quite go with expr there (shift/reduce conflict), go with scalar. - - * zend-parser.y: require() improvement as per Andi's suggestion - -1999-06-11 Zeev Suraski - - * zend_operators.c: - Make the concatenation operator use make_printable as well - - * zend-scanner.l: Don't take failing on an include file so badly - - * zend-scanner.l: Support E_COMPILE_ERROR in the compiler - - * zend_compile.c: Two fixes: - * The error generated by a failed class inheritence wasn't properly - displaying the file in which he error occured. - * Inheritence didn't work if the parent class had uppercase letters in it. - - * zend-parser.y - zend-scanner.l - zend_execute.c: * Use to_string() instead of __print() - * Support boolean casts ((bool) and (boolean)) - - * zend.c: Change __print into to_string() - - * zend.c - zend.h - zend_execute.c - zend_execute_API.c: - * Make the output handling of variables much, much cooler. - Uses zend_make_printable_zval() instead of convert_to_string() now: - - $foo = true; - print "\$foo is $foo"; - will now print - $foo is true - (instead of "$foo is 1", earlier). - - Also, with objects, it automatically tries to call __print() and use it as a printing - function. - - For example: - - class foo { - function __print() { return "Foo Object"; } - }; - - $foo = new foo; - print $foo; - - will print "Foo Object". - -1999-06-10 Zeev Suraski - - * zend_operators.c: Now THAT's an annoying bug. - -1999-06-09 Zeev Suraski - - * zend_extensions.c: Fix - - * zend_API.c - zend_execute.c: - * Fix cases where you assign an array element to the parent array (the array was - being erased before the assignment, so the element was being smashed). - - * zend_execute.c - zend_execute_API.c: * Fix foreach() that receives a non array argument - * Clean up some C++ comments - -1999-06-09 Andi Gutmans - - * zend-parser.y - zend_compile.c - zend_compile.h - zend_operators.c: - Fix the static array() initializing - -1999-06-08 Zeev Suraski - - * zend_extensions.c: Replace error messages - -1999-06-08 Andi Gutmans - - * zend_compile.c - zend_compile.h - zend_execute.c: * Fix a by-name call/method call bug - * Clean and optimize the whole function call process - -1999-06-07 Zeev Suraski - - * zend_hash.c - zend_hash.h: Add zend_hash_get_current_key_type() - -1999-06-06 Andi Gutmans - - * zend_compile.c: - Work around a compiler bug - mark variables that are sent to functions that aren't yet - defined as FETCH_W (because they might end up being sent by reference) - -1999-06-05 Zeev Suraski - - * zend.c - zend.h - zend_compile.c - zend_compile.h: * Centralized shutdown - * Change shutdown order again - - * zend_compile.c: - Call the request_shutdown on modules before destroying symbol tables, so that - the session module can be implemented - - * zend-scanner.l - zend_compile.c - zend_execute.c: - - Fixed Karl's bug report. It's not really a thorough fix, we really need to rethink the INIT_FCALL/DO_FCALL issue. - - Fixed numerous AiCount problems - -1999-06-04 Zeev Suraski - - * zend_compile.c - zend_compile.h - zend_execute.c - zend_opcode.c: New $GLOBALS init - - * zend_execute_API.c: - Fix that GLOBALS leak. We were explicitly adding GLOBALS to the main symbol table, - but there's no reason to do it (INIT_GLOBALS takes care of it if necessary.) - - * zend.c - zend.h - zend_API.c - zend_API.h - zend_list.c - zend_list.h - zend_opcode.c - zend_operators.c: Minor updates (mostly __declspec() stuff) - -1999-06-04 Thies C. Arntzen - - * zend_API.h: added is_ref=0 and refcount=1 to SET_VAR_* macros - -1999-06-03 Zeev Suraski - - * zend-parser.y: T_BAD_CHARACTER is actually a string. - -1999-06-03 Andi Gutmans - - * zend-scanner.l - zend_execute.c: - - We weren't counting newlines in heredocs. The only place which is still questionable - is when there's a \ followed by a newline but it seems we have a parse error in this - case anyways. - - Fixed the alloca() macros so that the alloca() #define in win32 mode won't clash - with the real win32 alloca(). - -1999-06-01 Andi Gutmans - - * zend_execute.c: - - Make execute() use less stack in thread-safe win32 due to Microsoft's shitty 256kb stack. - -1999-05-31 Zeev Suraski - - * zend.h - zend_alloc.c: *** empty log message *** - -1999-05-31 Andi Gutmans - - * zend-scanner.l - zend_compile.c - zend_execute.c - zend_execute_API.c: Fixes - -1999-05-30 sascha - - * zend_alloc.c - zend_compile.h - zend_execute_API.c - zend_indent.c - zend_opcode.c: * fix some casts - * introduce unary_op_type - cleaner than casting data voids to function ptrs - -1999-05-29 Zeev Suraski - - * zend_execute_API.c: - That got fucked up when we went back to using uninitialized_zval - -1999-05-29 sascha - - * Makefile.am: another VPATH related change - -1999-05-29 Zeev Suraski - - * zend-parser.y: Fix a bug - - * zend_hash.c - zend_hash.h - zend_operators.c: Support overwrite mode in zend_hash_merge() - -1999-05-29 sascha - - * Makefile.am: - clean is not called from automake. use CLEANFILES instead - - allow VPATH compilation - -1999-05-29 Zeev Suraski - - * zend_execute.c: Correct fix - - * zend_execute_API.c: *** empty log message *** - - * zend_execute.c: Fix a leak - -1999-05-28 Zeev Suraski - - * zend.h - zend_API.c - zend_API.h - zend_alloc.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute_API.c: * Support getThis() for internal functions. - * Fix 'new object or die' and AiCount issue thoroughly (earlier fix didn't - work with the optimizer). - * Add new macros for standardized definition of classes. - * Only report AiCount problems if shutdown was not silent. - -1999-05-27 Zeev Suraski - - * zend_execute.c: Fix the AiCount issue with objects - - * zend_API.h: Moved all #define's for SET_ and RETURN_ to zend_API.h - -1999-05-25 Zeev Suraski - - * zend_execute_API.c: - Avoid crashing if an error occurs before we open the first file. - -1999-05-24 Zeev Suraski - - * zend_operators.c: The last fix was wrong - - * zend_operators.c: Another operators fix - -1999-05-23 Zeev Suraski - - * zend_operators.c: - boolean comparison didn't work with smaller-than and greater-than, something that - fucked up berber's site a bit. fixed. - -1999-05-22 Zeev Suraski - - * zend_execute.c: - Sigh, another leak bites the dust. FREE_OP missing in case of a SEND_VAR. - - * zend-parser.y: I'm on a roll. Fix a nasty yet stupid AiCount bug - - * zend_alloc.c: Warn about AiCount not zeroing out - - * zend-parser.y - zend-scanner.h - zend.h - zend_alloc.c - zend_alloc.h - zend_compile.c - zend_compile.h - zend_constants.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_extensions.h - zend_highlight.h - zend_list.h - zend_llist.h - zend_ptr_stack.h - zend_stack.h: - * Add struct name to all typedef's so that they can be debugged with MSVC - * Fix an AiCount bug - list(...) = $var was using $var multiple times, and thus - causing AiCount to be decreased multiple times even though it was increased only - once for $var. Mark all FETCH_DIM's so that they won't decrease AiCount, and only - decrease AiCount on the last FETCH_DIM. - * Fix a stupid bug - forgot to pass CLS_C to some compiler function. For some reason - MSVC doesn't report these :I - - * zend.h - zend_alloc.c - zend_execute_API.c: - Give more information and save log lines in memory leak reports - - * zend-scanner.l - zend_compile.c - zend_compile.h - zend_globals.h - zend_llist.c - zend_llist.h: Avoid leaking fd's in case of failures - - * zend-scanner.l: more fixes - -1999-05-21 Zeev Suraski - - * zend-scanner.l: That wasn't supposed to slip in - - * zend-scanner.l: * Properly handle failed file opens in C++ - * Properly handle failed require()'s within libzend - - * zend-scanner.l: * Fix the comments issue. yymore() worked like a charm. - * Change all flex states to be prefixed with ST_ - -1999-05-20 Zeev Suraski - - * zend_compile.h - zend_execute.c: Optimize allocations into uninitialized_zval assignments - -1999-05-20 Andi Gutmans - - * config.w32.h - libzend.dsp - libzendts.dsp - zend_compile.c - zend_compile.h: - Updates we did today - - * zend_compile.c: - Fix a small problem with class decelerations. - - * zend-scanner.l: -Open curly braces fix? - -1999-05-15 Zeev Suraski - - * zend.c - zend.h - zend_compile.c - zend_compile.h - zend_execute.c - zend_hash.c - zend-parser.y: - * Fix all hash checks that checked Bucket.arKey for NULL, when it was changed - to char[1], these checks should have been changed to Bucket.nKeyLength==0 - * Support runtime declaration of functions. I ended up changing the grammar - to catch top level functions vs. nested functions. The reason is simple - - if we don't have functions properly declared at compile-time, function calls - cannot be resolved at compile time, and have to be resolved at runtime, which - ends up being much much slower (without the optimizer, that is). - It's no biggy though, the grammar change isn't that bad. - -1999-05-14 Zeev Suraski - - * configure.in - zend-scanner.l: - If a require() dies, we must bail out (since it corrupts an existing op_array - - * zend-scanner.l: Fix a bug - -1999-05-14 stig - - * Makefile.am: don't install Zend on the system - -1999-05-14 Zeev Suraski - - * zend-scanner.l: - Add \012 and \xff missing support to constant quoted string - -1999-05-12 Zeev Suraski - - * zend.h: *** empty log message *** - -1999-05-12 stig - - * Makefile.am: install libzend.a and header files on "make install" - - * acconfig.h - configure.in: add --enable-thread-safety option - -1999-05-12 Zeev Suraski - - * zend_llist.c - zend_llist.h: Added prepend to llist - -1999-05-11 Zeev Suraski - - * zend-scanner.l - zend.c: Fixes: - * Avoid closing stdin (I could have sworn I've committed that already) - * unclean_shutdown patches - - * zend_alloc.c: Easier Win32 debug code - - * zend-scanner.l - zend_compile.c - zend_globals.h - zend_highlight.c: - * Fix a bug that occured in case of parse errors. We need to restore the lexical state - even if the compilation failed. - -1999-05-10 Zeev Suraski - - * zend-scanner.h - zend-scanner.l - zend.c - zend_alloc.c - zend_compile.h: - Weed out all BoundsChecker-found bugs (including a serious file descriptor leak - in the C++ scanner) - -1999-05-09 Zeev Suraski - - * zend_modules.h: Change argument name - - * zend.c - zend_API.c - zend_API.h - zend_modules.h: Almost forgot to commit those - -1999-05-06 Zeev Suraski - - * zend-scanner.l: Ok, I tested it now. It works very nicely! - -1999-05-05 Andi Gutmans - - * zend_llist.c - zend_llist.h: llist improvements - -1999-05-02 Andi Gutmans - - * zend.c - zend_compile.h: - Don't support interactive mode when thread safe. - -1999-05-01 Zeev Suraski - - * zend_operators.c: Several operator fixes. Should fix the MySQL problem. - -1999-04-30 Andi Gutmans - - * zend_opcode.c: - Free refcount when destroying the last class reference. - - * zend-parser.y: - Missed one place - - * zend-parser.y: - First try at fixing $a->foo[] syntax. - - * zend-scanner.l: - - Move back to yyless(). I haven't tested it yet because it's taking too long - to compile and I have to disconnect - -1999-04-30 Zeev Suraski - - * zend-parser.y - zend-scanner.l: - Fix Boris's problem (in my never ending struggle to show I never mean what I say - when I say something's not gonna happen :) - - * zend-scanner.l - zend_compile.c: - * Fix a problem with constant quoted strings, that was causing Thies's problem - * Remove a development-time printf - -1999-04-29 Andi Gutmans - - * zend-scanner.l: - No reason to handle newlines here. - -1999-04-28 Zeev Suraski - - * zend-scanner.l: Make the C++ scanner support interactive input - -1999-04-27 Zeev Suraski - - * zend-scanner.l - zend_compile.h - zend_execute_API.c - zend_extensions.c - zend_extensions.h - zend_opcode.c: * Fix debugger+interactive mode bug - * Recognize whether an extension is with debug information or not - -1999-04-26 Zeev Suraski - - * libzendts.dsp: fix - - * config.w32.h - libzend.dsp - libzendts.dsp - zend-scanner.l - zend.c - zend_alloc.c - zend_compile.h - zend_globals.h - zend_highlight.c - zend_highlight.h - zend_indent.c - zend_indent.h - zend_opcode.c - zend_sprintf.c: Various thread safety fixes and DLL updates - -1999-04-26 Andi Gutmans - - * zend-scanner.l - zend.c - zend_alloc.c - zend_globals.h: -More commits - -1999-04-24 Zeev Suraski - - * zend_compile.c: Another small fix - - * libzendts.dsp: dsp update - - * zend.c - zend_globals.h: Thread safety fixes - - * zend_list.c: Remove redundant includes - -1999-04-24 zeevread - - * zend-scanner.l: g++ compile fix - -1999-04-24 Zeev Suraski - - * Makefile.am - zend-scanner.l: *** empty log message *** - - * zend_API.c - zend_compile.c - zend_compile.h - zend_execute.c - zend_opcode.c - zend-parser.y - zend-scanner.l: Cleanups, remove old ts code - -1999-04-23 Zeev Suraski - - * zend_operators.c: Arithmetics bug fix - - * zend-scanner.h - zend-scanner.l: Support eval() and highlight_string() in the C++ scanner - -1999-04-23 Andi Gutmans - - * zend-scanner.l: - - Use yyless() instead of unput() where possible. I'll erase the commented - out code in a day or so. - -1999-04-23 Zeev Suraski - - * FlexLexer.h - flex.skl - zend-scanner.h - zend-scanner.l - zend.h - zend_alloc.c - zend_alloc.h - zend_compile.h - zend_globals.h - zend_highlight.c - zend_highlight.h - zend_indent.c - zend_operators.h - zend_variables.h: Ok, call me crazy, because I probably am. - Thread safe version now uses a C++ scanner object. Works fully. - -1999-04-22 Zeev Suraski - - * acconfig.h - zend-parser.y - zend-scanner.l - zend_compile.c - zend_compile.h - zend_execute.c - zend_globals.h - zend_highlight.c - zend_indent.c - zend_opcode.c: Make token names uniform, they all begin with T_ now. - -1999-04-21 stig - - * buildconf: state which aclocal.m4 and configure files are created - - * Makefile.am: - zend-parser.o and zend-scanner.o were included twice in libzend.a - -1999-04-21 Zeev Suraski - - * FlexLexer.h - flex.skl - libzendts.dsp - zend_API.c - zend_API.h - zend_globals.h: - * Change the thread safe project to create a C++ scanner. - * Add in a slightly modified skeleton file (only a couple of #if's for #include's - that we dont have in Windows) - - It does NOT compile or work yet :) - - * zend_list.h: Fix - - * zend.c - zend_compile.c - zend_constants.c - zend_constants.h - zend_list.c - zend_list.h: - Thread safety patch. It works now with 'just in time' resource initialization! - - * libzend.dsp - libzendts.dsp - zend_globals.h: Thread-safe project - -1999-04-21 stig - - * buildconf: move automake back to before autoconf - - * buildconf: - autoheader must be called after autoconf, automake after autoheader - - * zend_config.h.in: think before one commits - - * zend_config.h.in: doh. cvs appears to ignore .in files by default - -1999-04-21 Zeev Suraski - - * zend-parser.y - zend-scanner.l - zend.c - zend_API.c - zend_API.h - zend_alloc.c - zend_compile.c - zend_compile.h - zend_constants.c - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_globals.h - zend_opcode.c: - Thread safety patch. We're still not quite there but it compiles again, and - more logic has been implemented. - -1999-04-20 stig - - * .cvsignore - Makefile.am - Makefile.in - aclocal.m4 - buildconf: Makefile.in and aclocal.m4 are generated - added buildconf script - -1999-04-19 Zeev Suraski - - * zend_extensions.c - zend_extensions.h: - Return a success value from the startup function, so we can unload immediately - if it fails. - -1999-04-19 stig - - * .cvsignore - Makefile.am - Makefile.in - acconfig.h - acinclude.m4 - aclocal.m4 - config.h.in - configure.in - zend.h: convert to automake - -1999-04-19 Andi Gutmans - - * zend_API.c - zend_API.h: Add a couple of ZEND_API's - - * config.w32.h - zend-parser.y - zend_compile.c - zend_execute.c: Support =unset as arguments - -1999-04-19 stig - - * acconfig.h - config.h.in - configure.in: removed -lnsl and -lsocket checks from zend - -1999-04-18 Zeev Suraski - - * zend_execute.c: AiCount needs to be decreased here - - * configure.in - zend-scanner.l - zend.c - zend.h - zend_API.c - zend_API.h - zend_alloc.c - zend_compile.c - zend_extensions.c - zend_extensions.h - zend_globals.h - zend_llist.c - zend_modules.h - zend_opcode.c: Whatnot: - * updated alloc_persist to use critical sections - * changed extension shutdown to two-phase - * updated dependencies - * PR support (don't remember if there was any really) - -1999-04-15 Andi Gutmans - - * zend_execute.c: - - one more place which seems to have needed fixing. I don't have time to look - more into it. I hope we don't have anymore places which need fixing. - - * zend_compile.c: - - Should fix the pass by reference problem. This happened because we moved - start from arg 1 now and not arg 0. There might be more places which need fixing - like in the executor but the bug seems OK now. - -1999-04-14 Zeev Suraski - - * zend_compile.h: Compile fix - -1999-04-14 Andi Gutmans - - * config.w32.h - libzend.dsp - zend-scanner.l - zend_API.c - zend_API.h - zend_compile.c - zend_compile.h - zend_opcode.c: -Tiny patches - -1999-04-13 Zeev Suraski - - * zend_execute.c: Better detection - - * zend_execute.c: - Move Ai stuff before get_zval_*(), like Andi suggested. Fixes Sascha's huge - memory leak - -1999-04-13 Andi Gutmans - - * zend-parser.y - zend_compile.c - zend_execute.c - zend_execute_API.c: - Fix various memory leaks. - - * zend_execute.c: Refcount bugfix - - * libzend.dsp - zend_API.c - zend_execute_API.c - zend_ptr_stack.c: * Optimize argument_stack top lookup - * Fix a nasty bug in zend_ptr_stack_clean() - -1999-04-12 Zeev Suraski - - * zend_execute_API.c - zend_globals.h: Remove unnecessary stack - - * zend_API.c: off by one - - * zend_execute.c: Minor optimization - - * zend_API.c: Make functions that don't take arguments somewhat happier:) - - * zend_execute.c: - This should take care of "this" for user-defined functions. It wasn't yet working - for built-in functions anyway, this one is coming soon. - - * zend_compile.c - zend_execute_API.c: - Destroy the resource list after destroying the symbol table, otherwise the - auto-destructor for resources are run when the resource list is no longer valid - - * zend-parser.y - zend.h - zend_API.c - zend_API.h - zend_compile.c - zend_compile.h - zend_execute.c - zend_execute.h - zend_execute_API.c - zend_globals.h - zend_ptr_stack.c: - This patch is a go. Not fully optimized yet, but working properly. - Prepatch tagged as BEFORE_STACK_PATCH. - - * zend_compile.c - zend_execute.c: Minor fixes: - missing zval_copy_ctor() - messed up AiCount fix - -1999-04-10 Zeev Suraski - - * zend_alloc.c - zend_alloc.h: Allow runtime setting of the memory limit - - * zend_alloc.c - zend_alloc.h - zend_globals.h: Get rid of php3_ini in Zend - - * zend.c - zend.h: - We need to initialize the utility values after we initialize the INI file, which in - turn, is after we initialize Zend. Set the utility values separately from Zend's - initialization - -1999-04-09 Andi Gutmans - - * zend-scanner.l: - Changed here-docs to <<< followed by whitespace. - -1999-04-09 stig - - * .cvsignore: ignore file - -1999-04-09 Andi Gutmans - - * zend-parser.y - zend_compile.h: - - I guess print $GLOBALS and print "$GLOBALS" should yield the same result - so I returned the one in encaps_var. - - Made INITAL_OP_ARRAY_SIZE smaller (64? can't remeber). I don't think the - erealloc()'s during compile time are such a biggy, we might make it even - smaller. We can have a configure time option as to it's size. - - * zend-parser.y: - - Support $GLOBALS in cvar's. Now list(..) = each($GLOBALS) will work. - - Remove support of $GLOBALS in enacapsed strings. print "$GLOBALS" isn't - supposed to work in any case. - -1999-04-09 Zeev Suraski - - * zend-scanner.l: - Honor a semicolon on the same line as an ending token of a heredoc - - * zend_compile.c: Prevent class redeclarations - -1999-04-08 Zeev Suraski - - * zend_API.c - zend_modules.h: * Add arguments to shutdown functions - * Remove traces of php_ini stuff - - * zend-parser.y: "Our favourite mistake" - - * zend-parser.y - zend_compile.c - zend_compile.h - zend_execute.c - zend_opcode.c: $GLOBALS support - -1999-04-08 Andi Gutmans - - * ZEND_CHANGES: foreach() syntax has changed - -1999-04-08 Zeev Suraski - - * zend_compile.c - zend_execute.c: Fix static assignment - -1999-04-07 Zeev Suraski - - * zend_execute_API.c: Remove an unused variable - - * libzend.dsp: That's better. - - * libzend.dsp: We didn't save the .dsp back then... - - * ZendCore.dsp - ZendCore.dsw - ZendCore.mak - diffs - libzend.dsp: Cleanups: ZendCore->libzend - -1999-04-07 Rasmus Lerdorf - - * zend.c: *** empty log message *** - -1999-04-07 Andi Gutmans - - * LICENSE - Makefile.in - ZEND_CHANGES - configure.in - zend-parser.y - zend-scanner.h - zend-scanner.l - zend.h - zend_API.c - zend_API.h - zend_compile.h - zend_errors.h - zend_execute.c - zend_execute_API.c - zend_globals.h - zend_hash.c - zend_hash.h - zend_list.c - zend_list.h - zend_llist.h - zend_opcode.c - zend_operators.c - zend_operators.h - zend_ptr_stack.c - zend_ptr_stack.h - zend_stack.c - zend_stack.h - zend_variables.c - zend_variables.h: New file. - - * LICENSE - Makefile.in - ZEND_CHANGES - configure.in - zend-parser.y - zend-scanner.h - zend-scanner.l - zend.h - zend_API.c - zend_API.h - zend_compile.h - zend_errors.h - zend_execute.c - zend_execute_API.c - zend_globals.h - zend_hash.c - zend_hash.h - zend_list.c - zend_list.h - zend_llist.h - zend_opcode.c - zend_operators.c - zend_operators.h - zend_ptr_stack.c - zend_ptr_stack.h - zend_stack.c - zend_stack.h - zend_variables.c - zend_variables.h: Zend Library - - * ZendCore.dep - ZendCore.dsp - ZendCore.dsw - ZendCore.mak - acconfig.h - aclocal.m4 - config.h.in - config.unix.h - config.w32.h - diffs - zend.c - zend.ico - zend_alloc.c - zend_alloc.h - zend_compile.c - zend_constants.c - zend_constants.h - zend_execute.h - zend_extensions.c - zend_extensions.h - zend_highlight.c - zend_highlight.h - zend_indent.c - zend_indent.h - zend_llist.c - zend_modules.h - zend_sprintf.c: New file. - - * ZendCore.dep - ZendCore.dsp - ZendCore.dsw - ZendCore.mak - acconfig.h - aclocal.m4 - config.h.in - config.unix.h - config.w32.h - diffs - zend.c - zend.ico - zend_alloc.c - zend_alloc.h - zend_compile.c - zend_constants.c - zend_constants.h - zend_execute.h - zend_extensions.c - zend_extensions.h - zend_highlight.c - zend_highlight.h - zend_indent.c - zend_indent.h - zend_llist.c - zend_modules.h - zend_sprintf.c: Zend Library - diff --git a/Zend/FlexLexer.h b/Zend/FlexLexer.h deleted file mode 100644 index fd6525857024c..0000000000000 --- a/Zend/FlexLexer.h +++ /dev/null @@ -1,186 +0,0 @@ -// $Header$ - -// FlexLexer.h -- define interfaces for lexical analyzer classes generated -// by flex - -// Copyright (c) 1993 The Regents of the University of California. -// All rights reserved. -// -// This code is derived from software contributed to Berkeley by -// Kent Williams and Tom Epperly. -// -// Redistribution and use in source and binary forms with or without -// modification are permitted provided that: (1) source distributions retain -// this entire copyright notice and comment, and (2) distributions including -// binaries display the following acknowledgement: ``This product includes -// software developed by the University of California, Berkeley and its -// contributors'' in the documentation or other materials provided with the -// distribution and in all advertising materials mentioning features or use -// of this software. Neither the name of the University nor the names of -// its contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. - -// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED -// WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - -// This file defines FlexLexer, an abstract class which specifies the -// external interface provided to flex C++ lexer objects, and yyFlexLexer, -// which defines a particular lexer class. -// -// If you want to create multiple lexer classes, you use the -P flag -// to rename each yyFlexLexer to some other xxFlexLexer. You then -// include in your other sources once per lexer class: -// -// #undef yyFlexLexer -// #define yyFlexLexer xxFlexLexer -// #include -// -// #undef yyFlexLexer -// #define yyFlexLexer zzFlexLexer -// #include -// ... - -#ifndef FLEXLEXER_H -// Never included before - need to define base class. -#define FLEXLEXER_H -#include - -extern "C++" { - -struct yy_buffer_state; -typedef int yy_state_type; - -class FlexLexer { -public: - virtual ~FlexLexer() { } - - const char* YYText() { return yytext; } - int YYLeng() { return yyleng; } - - virtual void - yy_switch_to_buffer( struct yy_buffer_state* new_buffer ) = 0; - virtual struct yy_buffer_state* - yy_create_buffer( istream* s, int size ) = 0; - virtual void yy_delete_buffer( struct yy_buffer_state* b ) = 0; - virtual void yyrestart( istream* s ) = 0; - - virtual int yylex() = 0; - - // Call yylex with new input/output sources. - int yylex( istream* new_in, ostream* new_out = 0 ) - { - switch_streams( new_in, new_out ); - return yylex(); - } - - // Switch to new input/output streams. A nil stream pointer - // indicates "keep the current one". - virtual void switch_streams( istream* new_in = 0, - ostream* new_out = 0 ) = 0; - - int lineno() const { return yylineno; } - - int debug() const { return yy_flex_debug; } - void set_debug( int flag ) { yy_flex_debug = flag; } - -protected: - char* yytext; - int yyleng; - int yylineno; // only maintained if you use %option yylineno - int yy_flex_debug; // only has effect with -d or "%option debug" -}; - -} -#endif - -#if defined(yyFlexLexer) || ! defined(yyFlexLexerOnce) -// Either this is the first time through (yyFlexLexerOnce not defined), -// or this is a repeated include to define a different flavor of -// yyFlexLexer, as discussed in the flex man page. -#define yyFlexLexerOnce - -class yyFlexLexer : public FlexLexer { -public: - // arg_yyin and arg_yyout default to the cin and cout, but we - // only make that assignment when initializing in yylex(). - yyFlexLexer( istream* arg_yyin = 0, ostream* arg_yyout = 0 ); - - virtual ~yyFlexLexer(); - - void yy_switch_to_buffer( struct yy_buffer_state* new_buffer ); - struct yy_buffer_state* yy_create_buffer( istream* s, int size ); - void yy_delete_buffer( struct yy_buffer_state* b ); - void yyrestart( istream* s ); - - virtual int yylex(); - virtual void switch_streams( istream* new_in, ostream* new_out ); - -protected: - virtual int LexerInput( char* buf, int max_size ); - virtual void LexerOutput( const char* buf, int size ); - virtual void LexerError( const char* msg ); - - void yyunput( int c, char* buf_ptr ); - int yyinput(); - - void yy_load_buffer_state(); - void yy_init_buffer( struct yy_buffer_state* b, istream* s ); - void yy_flush_buffer( struct yy_buffer_state* b ); - - int yy_start_stack_ptr; - int yy_start_stack_depth; - int* yy_start_stack; - - void yy_push_state( int new_state ); - void yy_pop_state(); - int yy_top_state(); - - yy_state_type yy_get_previous_state(); - yy_state_type yy_try_NUL_trans( yy_state_type current_state ); - int yy_get_next_buffer(); - - istream* yyin; // input source for default LexerInput - ostream* yyout; // output sink for default LexerOutput - - struct yy_buffer_state* yy_current_buffer; - - // yy_hold_char holds the character lost when yytext is formed. - char yy_hold_char; - - // Number of characters read into yy_ch_buf. - int yy_n_chars; - - // Points to current character in buffer. - char* yy_c_buf_p; - - int yy_init; // whether we need to initialize - int yy_start; // start state number - - // Flag which is used to allow yywrap()'s to do buffer switches - // instead of setting up a fresh yyin. A bit of a hack ... - int yy_did_buffer_switch_on_eof; - - // The following are not always needed, but may be depending - // on use of certain flex features (like REJECT or yymore()). - - yy_state_type yy_last_accepting_state; - char* yy_last_accepting_cpos; - - yy_state_type* yy_state_buf; - yy_state_type* yy_state_ptr; - - char* yy_full_match; - int* yy_full_state; - int yy_full_lp; - - int yy_lp; - int yy_looking_for_trail_begin; - - int yy_more_flag; - int yy_more_len; - int yy_more_offset; - int yy_prev_more_offset; -}; - -#endif diff --git a/Zend/LICENSE b/Zend/LICENSE deleted file mode 100644 index 8acb9af4f8a58..0000000000000 --- a/Zend/LICENSE +++ /dev/null @@ -1,56 +0,0 @@ --------------------------------------------------------------------- - The Zend Engine License, Version 2.00 -Copyright (c) 1999-2006 Zend Technologies Ltd. All rights reserved. --------------------------------------------------------------------- - -Redistribution and use in source and binary forms, with or without -modification, is permitted provided that the following conditions -are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - 3. The names "Zend" and "Zend Engine" must not be used to endorse - or promote products derived from this software without prior - permission from Zend Technologies Ltd. For written permission, - please contact license@zend.com. - - 4. Zend Technologies Ltd. may publish revised and/or new versions - of the license from time to time. Each version will be given a - distinguishing version number. - Once covered code has been published under a particular version - of the license, you may always continue to use it under the - terms of that version. You may also choose to use such covered - code under the terms of any subsequent version of the license - published by Zend Technologies Ltd. No one other than Zend - Technologies Ltd. has the right to modify the terms applicable - to covered code created under this License. - - 5. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes the Zend Engine, freely available at - http://www.zend.com" - - 6. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "The Zend Engine is freely available at http://www.zend.com" - -THIS SOFTWARE IS PROVIDED BY ZEND TECHNOLOGIES LTD. ``AS IS'' AND -ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ZEND -TECHNOLOGIES LTD. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF -USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - --------------------------------------------------------------------- diff --git a/Zend/Makefile.am b/Zend/Makefile.am deleted file mode 100644 index 92fdd79692b42..0000000000000 --- a/Zend/Makefile.am +++ /dev/null @@ -1,54 +0,0 @@ -## Process this file with automake to produce Makefile.in -*- makefile -*- - -#CLEANFILES = zend_language_parser.c zend_language_parser.h zend_language_scanner.c zend_language_parser.output zend_ini_parser.c zend_ini_parser.h zend_ini_scanner.c zend_ini_parser.output - -AUTOMAKE_OPTIONS=foreign -noinst_LTLIBRARIES=libZend.la - -libZend_la_SOURCES=\ - zend_language_parser.y zend_language_scanner.l \ - zend_ini_parser.y zend_ini_scanner.l \ - zend_alloc.c zend_compile.c zend_constants.c zend_dynamic_array.c \ - zend_execute.c zend_execute_API.c zend_highlight.c zend_llist.c \ - zend_opcode.c zend_operators.c zend_ptr_stack.c zend_stack.c \ - zend_variables.c zend.c zend_API.c zend_extensions.c zend_hash.c \ - zend_list.c zend_indent.c zend_builtin_functions.c zend_sprintf.c \ - zend_ini.c zend_qsort.c zend_objects.c zend_object_handlers.c \ - zend_objects_API.c zend_ts_hash.c zend_stream.c \ - zend_default_classes.c \ - zend_iterators.c zend_interfaces.c zend_exceptions.c \ - zend_strtod.c zend_strtod.c zend_strtol.c - -libZend_la_LDFLAGS = -libZend_la_LIBADD = @ZEND_EXTRA_LIBS@ - -# automake isn't too clever about "non-standard" use of lex and yacc - -$(libZend_la_OBJECTS): zend_language_parser.h - -zend_ini_scanner.lo: zend_ini_parser.h - -# Language parser/scanner rules - -zend_language_scanner.c: $(srcdir)/zend_language_scanner.l - $(LEX) -Pzend -S$(srcdir)/flex.skl -o$@ -i $(srcdir)/zend_language_scanner.l - -zend_language_parser.h: zend_language_parser.c -zend_language_parser.c: $(srcdir)/zend_language_parser.y - $(YACC) -p zend -v -d $(srcdir)/zend_language_parser.y -o zend_language_parser.c - -# INI parser/scanner rules - -zend_ini_parser.c: $(srcdir)/zend_ini_parser.y - $(YACC) -p ini_ -v -d $(srcdir)/zend_ini_parser.y -o zend_ini_parser.c - -zend_ini_scanner.c: $(srcdir)/zend_ini_scanner.l - $(LEX) -Pini_ -S$(srcdir)/flex.skl -o$@ -i $(srcdir)/zend_ini_scanner.l - -zend_ini_parser.h: zend_ini_parser.c - -depend: - -zend_execute.lo: $(srcdir)/zend_execute.c - $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS) $(INLINE_CFLAGS) -c $(srcdir)/zend_execute.c - diff --git a/Zend/Makefile.frag b/Zend/Makefile.frag deleted file mode 100755 index 3ab617d715534..0000000000000 --- a/Zend/Makefile.frag +++ /dev/null @@ -1 +0,0 @@ -Zend/zend_execute.lo: $(srcdir)/zend_vm_execute.h $(srcdir)/zend_vm_opcodes.h diff --git a/Zend/OBJECTS2_HOWTO b/Zend/OBJECTS2_HOWTO deleted file mode 100644 index 302d1e9087b53..0000000000000 --- a/Zend/OBJECTS2_HOWTO +++ /dev/null @@ -1,195 +0,0 @@ -Creating an object ------------------- - -Object can be created in the following ways: - -1. As a result of a function call. E.g.: - -$foo = create_new_foo("parameter"); -$foo->run(); - -The function should create a new zval, create new object and get the -handle for it, set handle and handler table as needed. Note that the -handle is the only ID of the object, so it should be enough to -identify it. - -2. Overriding create_object handler for class. E.g.: - -$foo = new Java("some.Class.here", "parameter"); -$foo->run(); - -The create_object handler function should create a new zval, create -new object and get the handle for it, set handle and handler table as -needed, and also provide constructor method that would handle -constructor call. The get_constructor handler table entry should be -used for that. Do not rely class entry's constructor, unless you refer -to it from get_constructor handler. - -Object maintenance ------------------- - -The handlers add_ref and del_ref are called when a new zval referring -to the object is created. This does not create a new object - both -zvals still refer to the same object. - -clone_obj handler should create a new object, identical to an old one, -but being a separate entity. - -delete_obj should destroy an object, all references to it become -invalid. - -Object access - read --------------------- - -read_property is used to read object's property. This value is not -meant to be changed. The handler returns zval * with the value. - -Object access - write ---------------------- - -write_property is used to directly write object's property by -name. This handler is used to assign property variables or to change them -in operations like += or ++ (unless get_property_zval_ptr is also set). - -get_property_zval_ptr is used to obtain pointer to modifiable zval for -operations like += or ++. This should be used only if your object model -stores properties as real zval's that can be modified from outside. -Otherwise this handler should be NULL and the engine will use -read_property and write_property instead. - -get_property_ptr is used to obtain zval ** for future writing to -it. If your object properties are stored as zval*, return real place -where the property is stored. If the aren't, the best way is to create -proxy object and handle it via get and set methods (see below). -This method is meant to be used for send-by-reference and assign-by-reference -use of object properties. If you don;t want to implement property -referencing for your objects, you can set this handler to NULL. - -get and set handlers are used when engine needs to access the object -as a value. E.g., in the following situation: - -$foo =& $obj->bar; -$foo = 1; - -if $foo is an object (e.g., proxy object from get_property_ptr) it -would be accessed using write handler. - -Object access - method call ---------------------------- - -get_method handler is used to find method description by name. It -should set right type, function name and parameter mask for the -method. If the type is ZEND_OVERLOADED_FUNCTION, the method would be -called via call_method handler, otherwise it would be called with -standard Zend means. - -get_constructor performs the same function as get_method, but for the -object constructor. - -call_method handler is used to perform method call. Parameters are -passed like to any other Zend internal function. - -Object - comparison -------------------- - -Objects can be compared via compare_objects handler. This is used with -== operation, === compares objects by handles, i.e., return true if -and only if it's really the same object. Note that objects from -different object types (i.e., having different handlers) can not be -compared. - -Objects - reflection --------------------- - -get_class_name is used to retrieve class name of the object. -get_class_entry returns class entry (zend_class_entry) for the object, -in case there exists PHP class for it. -No other reflection functions are currently implemented. - -Objects - data structures and handlers ---------------------------------------- - -The object is represented by the following structure: - -struct _zend_object_value { - zend_object_handle handle; - zend_object_handlers *handlers; -}; - -handle is an ID of the object among the objects of the same type (not -class!). The type of the object and how it behaves is determined by -the handler table. - -typedef struct _zend_object_handlers { - zend_object_add_ref_t add_ref; - zend_object_del_ref_t del_ref; - zend_object_delete_obj_t delete_obj; - zend_object_clone_obj_t clone_obj; - zend_object_read_property_t read_property; - zend_object_write_property_t write_property; - zend_object_get_property_ptr_t get_property_ptr; - zend_object_get_property_zval_ptr_t get_property_zval_ptr; - zend_object_get_t get; - zend_object_set_t set; - zend_object_has_property_t has_property; - zend_object_unset_property_t unset_property; - zend_object_get_properties_t get_properties; - zend_object_get_method_t get_method; - zend_object_call_method_t call_method; - zend_object_get_constructor_t get_constructor; - zend_object_get_class_entry_t get_class_entry; - zend_object_get_class_name_t get_class_name; - zend_object_compare_t compare_objects; -} zend_object_handlers; - -See zend_object_handlers.h for prototypes. All objects are passed as zval's. - -Handlers explained: - -add_ref - called when a copy of the object handle is created. - -del_ref - called when a copy of the object handle is destroyed. - -delete_obj - called when an object needs to be destroyed. - -clone_obj - called when a new object identical to an old one should be -created (unlike Zend Engine 1, this never happens unless explicitly -asked for). - -read_property - returns zval *, containing the value of the -property. Is used when value of the property should be retrieved for -reading. - -write_property - assigns value to certain property of the object. - -get_property_zval_ptr - retrieves zval** for being directly modified by -the engine. If your properties are not zval's, don't define it. - -get_property_ptr - retrieves zval** for the property of the value, to -be used for read and write. If object properties are not zval's -natively, this method should create and return proxy object for use -with get and set methods. - -get - retrieves zval* for object contents. To be used mainly with -proxy objects from get_property_ptr, but also may be used for -convert_to_* functions. - -set - sets value for object contents. To be used mainly with -proxy objects from get_property_ptr. - -has_property - checks if the object has certain property set. - -unset_property - removes value for the property of the object - -get_method - retrieves description of the method - -call_method - calls the method (parameters should be put on stack like -for any other PHP internal function). - -get_constructor - get description for the object constructor method - -get_class_entry - should return the class entry for the object - -get_class_name - get the name of the class the object belongs to - -compare_objects - compares if two objects are equal diff --git a/Zend/README.ZEND_MM b/Zend/README.ZEND_MM deleted file mode 100644 index 0825e08b40570..0000000000000 --- a/Zend/README.ZEND_MM +++ /dev/null @@ -1,13 +0,0 @@ -The goal of the new memory manager (PHP 5.2 and later) is reducing memory allocation overhead and speedup memory management. - -The new manager's "configure" has no "--disable-zend-memory-manager" option, but it has "--enable-malloc-mm" instead. It is enabled by default in DEBUG build and disabled by default in RELEASE built. It allows select malloc/emalloc at runtime. So you can use internal and external memory debuggers without recompilation. - -$ sapi/cli/php -r 'leak();' - -$ USE_ZEND_ALLOC=0 valgrind --leak-check=full -r 'leak();' - -The patch allows tweaking memory manager with ZEND_MM_MEM_TYPE and ZEND_MM_SEG_SIZE environment variables. Default values are "malloc" and "256K". Dependent on target system you can also use "mmap_anon", "mmap_zero" -and "win32" storage managers. - -$ ZEND_MM_MEM_TYPE=mmap_anon ZEND_MM_SEG_SIZE=1M sapi/cli/php - diff --git a/Zend/README.ZEND_VM b/Zend/README.ZEND_VM deleted file mode 100644 index 15ff6fd86f4bd..0000000000000 --- a/Zend/README.ZEND_VM +++ /dev/null @@ -1,108 +0,0 @@ -ZEND_VM -======= - -ZEND_VM architecture allows specializing opcode handlers according to op_type -fields and using different execution methods (call threading, switch threading -and direct threading). As a result ZE2 got more than 20% speedup on raw PHP -code execution (with specialized executor and direct threading execution -method). As in most PHP applications raw execution speed isn't the limiting -factor but system calls and database callls are, your mileage with this patch -will vary. - -Most parts of the old zend_execute.c go into zend_vm_def.h. Here you can -find opcode handlers and helpers. The typical opcode handler template looks -like this: - -ZEND_VM_HANDLER(, , , ) -{ - -} - - is a opcode number (0, 1, ...) - is an opcode name (ZEN_NOP, ZEND_ADD, :) - & are masks for allowed operand op_types. Specializer -will generate code only for defined combination of types. You can use any -combination of the following op_types UNUSED, CONST, VAR, TMP and CV also -you can use ANY mask to disable specialization according operand's op_type. - is a handler's code itself. For most handlers it stills the -same as in old zend_execute.c, but now it uses macros to access opcode operands -and some internal executor data. - -You can see the conformity of new macros to old code in the following list: - -EXECUTE_DATA - execute_data -ZEND_VM_DISPATCH_TO_HANDLER() - return _helper(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU) -ZEND_VM_DISPATCH_TO_HELPER() - return (ZEND_OPCODE_HANDLER_ARGS_PASSTHRU) -ZEND_VM_DISPATCH_TO_HELPER_EX(,,) - return (, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU) -ZEND_VM_CONTINUE() - return 0 -ZEND_VM_NEXT_OPCODE() - NEXT_OPCODE() -ZEND_VM_SET_OPCODE( - SET_OPCODE( -ZEND_VM_INC_OPCODE() - INC_OPCOD() -ZEND_VM_RETURN_FROM_EXECUTE_LOOP() - RETURN_FROM_EXECUTE_LOOP() -ZEND_VM_C_LABEL(\n"); - zend_printf(""); -} - - - -ZEND_API void zend_strip(TSRMLS_D) -{ - zval token; - int token_type; - int prev_space = 0; - - CG(literal_type) = IS_STRING; - Z_TYPE(token) = 0; - while ((token_type=lex_scan(&token TSRMLS_CC))) { - switch (token_type) { - case T_WHITESPACE: - if (!prev_space) { - zend_write(" ", sizeof(" ") - 1); - prev_space = 1; - } - /* lack of break; is intentional */ - case T_COMMENT: - case T_DOC_COMMENT: - Z_TYPE(token) = 0; - continue; - - case EOF: - return; - - case T_END_HEREDOC: - zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng)); - efree(Z_STRVAL(token)); - /* read the following character, either newline or ; */ - if (lex_scan(&token TSRMLS_CC) != T_WHITESPACE) { - zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng)); - } - zend_write("\n", sizeof("\n") - 1); - prev_space = 1; - Z_TYPE(token) = 0; - continue; - - default: - zend_write(LANG_SCNG(yy_text), LANG_SCNG(yy_leng)); - break; - } - - if (Z_TYPE(token) == IS_STRING || - Z_TYPE(token) == IS_UNICODE) { - switch (token_type) { - case T_OPEN_TAG: - case T_OPEN_TAG_WITH_ECHO: - case T_CLOSE_TAG: - case T_WHITESPACE: - case T_COMMENT: - case T_DOC_COMMENT: - break; - - default: - efree(Z_UNIVAL(token).v); - break; - } - } - prev_space = Z_TYPE(token) = 0; - } -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_highlight.h b/Zend/zend_highlight.h deleted file mode 100644 index 5316984800573..0000000000000 --- a/Zend/zend_highlight.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_HIGHLIGHT_H -#define ZEND_HIGHLIGHT_H - -#define HL_COMMENT_COLOR "#FF8000" /* orange */ -#define HL_DEFAULT_COLOR "#0000BB" /* blue */ -#define HL_HTML_COLOR "#000000" /* black */ -#define HL_STRING_COLOR "#DD0000" /* red */ -#define HL_BG_COLOR "#FFFFFF" /* white */ -#define HL_KEYWORD_COLOR "#007700" /* green */ - - -typedef struct _zend_syntax_highlighter_ini { - char *highlight_html; - char *highlight_comment; - char *highlight_default; - char *highlight_string; - char *highlight_keyword; -} zend_syntax_highlighter_ini; - - -BEGIN_EXTERN_C() -ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini TSRMLS_DC); -ZEND_API void zend_strip(TSRMLS_D); -ZEND_API int highlight_file(char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini TSRMLS_DC); -ZEND_API int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, char *str_name TSRMLS_DC); -ZEND_API void zend_html_putc(char c); -ZEND_API void zend_html_puts(const char *s, uint len TSRMLS_DC); -END_EXTERN_C() - -extern zend_syntax_highlighter_ini syntax_highlighter_ini; - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_indent.c b/Zend/zend_indent.c deleted file mode 100644 index 70c19461ce36c..0000000000000 --- a/Zend/zend_indent.c +++ /dev/null @@ -1,156 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -/* This indenter doesn't really work, it's here for no particular reason. */ - - -#include "zend.h" -#include -#include "zend_compile.h" -#include "zend_indent.h" - -#define zendtext LANG_SCNG(yy_text) -#define zendleng LANG_SCNG(yy_leng) - - -static void handle_whitespace(int *emit_whitespace) -{ - unsigned char c; - int i; - - for (c=0; c<128; c++) { - if (emit_whitespace[c]>0) { - for (i=0; i0) { - ZEND_PUTS(" {\n"); - memset(emit_whitespace, 0, sizeof(int)*256); - } else { - ZEND_PUTS("{"); - } - break; - case '}': - nest_level--; - if (emit_whitespace['\n']==0) { - ZEND_PUTS("\n"); - } - for (i=0; i0) { - for (i=0; i | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_INDENT_H -#define ZEND_INDENT_H - -BEGIN_EXTERN_C() -ZEND_API void zend_indent(void); -END_EXTERN_C() - -#endif /* ZEND_INDENT_H */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_ini.c b/Zend/zend_ini.c deleted file mode 100644 index 962f9660bf556..0000000000000 --- a/Zend/zend_ini.c +++ /dev/null @@ -1,661 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#include "zend.h" -#include "zend_qsort.h" -#include "zend_API.h" -#include "zend_ini.h" -#include "zend_alloc.h" -#include "zend_operators.h" -#include "zend_strtod.h" - -static HashTable *registered_zend_ini_directives; - -#define NO_VALUE_PLAINTEXT "no value" -#define NO_VALUE_HTML "no value" - -/* - * hash_apply functions - */ -static int zend_remove_ini_entries(zend_ini_entry *ini_entry, int *module_number TSRMLS_DC) -{ - if (ini_entry->module_number == *module_number) { - return 1; - } else { - return 0; - } -} - - -static int zend_restore_ini_entry_cb(zend_ini_entry *ini_entry, int stage TSRMLS_DC) -{ - if (ini_entry->modified) { - if (ini_entry->on_modify) { - zend_try { - /* even if on_modify bails out, we have to continue on with restoring, - since there can be allocated variables that would be freed on MM shutdown - and would lead to memory corruption later ini entry is modified again */ - ini_entry->on_modify(ini_entry, ini_entry->orig_value, ini_entry->orig_value_length, ini_entry->mh_arg1, ini_entry->mh_arg2, ini_entry->mh_arg3, stage TSRMLS_CC); - } zend_end_try(); - } - efree(ini_entry->value); - ini_entry->value = ini_entry->orig_value; - ini_entry->value_length = ini_entry->orig_value_length; - ini_entry->modified = 0; - ini_entry->orig_value = NULL; - ini_entry->orig_value_length = 0; - } - return 0; -} - -static int zend_restore_ini_entry_wrapper(zend_ini_entry **ini_entry TSRMLS_DC) -{ - zend_restore_ini_entry_cb(*ini_entry, ZEND_INI_STAGE_DEACTIVATE TSRMLS_CC); - return 1; -} - -/* - * Startup / shutdown - */ -ZEND_API int zend_ini_startup(TSRMLS_D) -{ - registered_zend_ini_directives = (HashTable *) malloc(sizeof(HashTable)); - - EG(ini_directives) = registered_zend_ini_directives; - EG(modified_ini_directives) = NULL; - if (zend_hash_init_ex(registered_zend_ini_directives, 100, NULL, NULL, 1, 0)==FAILURE) { - return FAILURE; - } - return SUCCESS; -} - - -ZEND_API int zend_ini_shutdown(TSRMLS_D) -{ - zend_hash_destroy(EG(ini_directives)); - free(EG(ini_directives)); - return SUCCESS; -} - - -ZEND_API int zend_ini_global_shutdown(TSRMLS_D) -{ - zend_hash_destroy(registered_zend_ini_directives); - free(registered_zend_ini_directives); - return SUCCESS; -} - - -ZEND_API int zend_ini_deactivate(TSRMLS_D) -{ - if (EG(modified_ini_directives)) { - zend_hash_apply(EG(modified_ini_directives), (apply_func_t) zend_restore_ini_entry_wrapper TSRMLS_CC); - zend_hash_destroy(EG(modified_ini_directives)); - FREE_HASHTABLE(EG(modified_ini_directives)); - EG(modified_ini_directives) = NULL; - } - return SUCCESS; -} - - -#ifdef ZTS -ZEND_API int zend_copy_ini_directives(TSRMLS_D) -{ - zend_ini_entry ini_entry; - - EG(modified_ini_directives) = NULL; - EG(ini_directives) = (HashTable *) malloc(sizeof(HashTable)); - if (zend_hash_init_ex(EG(ini_directives), registered_zend_ini_directives->nNumOfElements, NULL, NULL, 1, 0)==FAILURE) { - return FAILURE; - } - zend_hash_copy(EG(ini_directives), registered_zend_ini_directives, NULL, &ini_entry, sizeof(zend_ini_entry)); - return SUCCESS; -} -#endif - - -static int ini_key_compare(const void *a, const void *b TSRMLS_DC) -{ - Bucket *f; - Bucket *s; - - f = *((Bucket **) a); - s = *((Bucket **) b); - - if (f->nKeyLength==0 && s->nKeyLength==0) { /* both numeric */ - return ZEND_NORMALIZE_BOOL(f->nKeyLength - s->nKeyLength); - } else if (f->nKeyLength==0) { /* f is numeric, s is not */ - return -1; - } else if (s->nKeyLength==0) { /* s is numeric, f is not */ - return 1; - } else { /* both strings */ - /*FIXME: unicode hash*/ - return zend_binary_strcasecmp(f->key.arKey.s, f->nKeyLength, s->key.arKey.s, s->nKeyLength); - } -} - - -ZEND_API void zend_ini_sort_entries(TSRMLS_D) -{ - zend_hash_sort(EG(ini_directives), zend_qsort, ini_key_compare, 0 TSRMLS_CC); -} - -/* - * Registration / unregistration - */ - -ZEND_API int zend_register_ini_entries(zend_ini_entry *ini_entry, int module_number TSRMLS_DC) -{ - zend_ini_entry *p = ini_entry; - zend_ini_entry *hashed_ini_entry; - zval default_value; - HashTable *directives = registered_zend_ini_directives; - zend_bool config_directive_success = 0; - -#ifdef ZTS - /* if we are called during the request, eg: from dl(), - * then we should not touch the global directives table, - * and should update the per-(request|thread) version instead. - * This solves two problems: one is that ini entries for dl()'d - * extensions will now work, and the second is that updating the - * global hash here from dl() is not mutex protected and can - * lead to death. - */ - if (directives != EG(ini_directives)) { - directives = EG(ini_directives); - } -#endif - - while (p->name) { - p->module_number = module_number; - config_directive_success = 0; - if (zend_hash_add(directives, p->name, p->name_length, p, sizeof(zend_ini_entry), (void **) &hashed_ini_entry)==FAILURE) { - zend_unregister_ini_entries(module_number TSRMLS_CC); - return FAILURE; - } - if ((zend_get_configuration_directive(p->name, p->name_length, &default_value))==SUCCESS) { - if (!hashed_ini_entry->on_modify - || hashed_ini_entry->on_modify(hashed_ini_entry, Z_STRVAL(default_value), Z_STRLEN(default_value), hashed_ini_entry->mh_arg1, hashed_ini_entry->mh_arg2, hashed_ini_entry->mh_arg3, ZEND_INI_STAGE_STARTUP TSRMLS_CC)==SUCCESS) { - hashed_ini_entry->value = Z_STRVAL(default_value); - hashed_ini_entry->value_length = Z_STRLEN(default_value); - config_directive_success = 1; - } - } - - if (!config_directive_success && hashed_ini_entry->on_modify) { - hashed_ini_entry->on_modify(hashed_ini_entry, hashed_ini_entry->value, hashed_ini_entry->value_length, hashed_ini_entry->mh_arg1, hashed_ini_entry->mh_arg2, hashed_ini_entry->mh_arg3, ZEND_INI_STAGE_STARTUP TSRMLS_CC); - } - p++; - } - return SUCCESS; -} - - -ZEND_API void zend_unregister_ini_entries(int module_number TSRMLS_DC) -{ - zend_hash_apply_with_argument(registered_zend_ini_directives, (apply_func_arg_t) zend_remove_ini_entries, (void *) &module_number TSRMLS_CC); -} - - -#ifdef ZTS -static int zend_ini_refresh_cache(zend_ini_entry *p, int stage TSRMLS_DC) -{ - if (p->on_modify) { - p->on_modify(p, p->value, p->value_length, p->mh_arg1, p->mh_arg2, p->mh_arg3, stage TSRMLS_CC); - } - return 0; -} - - -ZEND_API void zend_ini_refresh_caches(int stage TSRMLS_DC) -{ - zend_hash_apply_with_argument(EG(ini_directives), (apply_func_arg_t) zend_ini_refresh_cache, (void *)(long) stage TSRMLS_CC); -} -#endif - - -ZEND_API int zend_alter_ini_entry(char *name, uint name_length, char *new_value, uint new_value_length, int modify_type, int stage) -{ - zend_ini_entry *ini_entry; - char *duplicate; - TSRMLS_FETCH(); - - if (zend_hash_find(EG(ini_directives), name, name_length, (void **) &ini_entry)==FAILURE) { - return FAILURE; - } - - if (!(ini_entry->modifiable & modify_type)) { - return FAILURE; - } - - duplicate = estrndup(new_value, new_value_length); - - if (!ini_entry->on_modify - || ini_entry->on_modify(ini_entry, duplicate, new_value_length, ini_entry->mh_arg1, ini_entry->mh_arg2, ini_entry->mh_arg3, stage TSRMLS_CC)==SUCCESS) { - if (!ini_entry->modified) { - ini_entry->orig_value = ini_entry->value; - ini_entry->orig_value_length = ini_entry->value_length; - ini_entry->modified = 1; - if (!EG(modified_ini_directives)) { - ALLOC_HASHTABLE(EG(modified_ini_directives)); - zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0); - } - zend_hash_add(EG(modified_ini_directives), name, name_length, &ini_entry, sizeof(zend_ini_entry*), NULL); - } else { /* we already changed the value, free the changed value */ - efree(ini_entry->value); - } - ini_entry->value = duplicate; - ini_entry->value_length = new_value_length; - } else { - efree(duplicate); - } - - return SUCCESS; -} - - -ZEND_API int zend_restore_ini_entry(char *name, uint name_length, int stage) -{ - zend_ini_entry *ini_entry; - TSRMLS_FETCH(); - - if (zend_hash_find(EG(ini_directives), name, name_length, (void **) &ini_entry)==FAILURE || - (stage == ZEND_INI_STAGE_RUNTIME && (ini_entry->modifiable & ZEND_INI_USER) == 0)) { - return FAILURE; - } - - if (EG(modified_ini_directives)) { - zend_restore_ini_entry_cb(ini_entry, stage TSRMLS_CC); - zend_hash_del(EG(modified_ini_directives), name, name_length); - } - - return SUCCESS; -} - - -ZEND_API int zend_ini_register_displayer(char *name, uint name_length, void (*displayer)(zend_ini_entry *ini_entry, int type)) -{ - zend_ini_entry *ini_entry; - - if (zend_hash_find(registered_zend_ini_directives, name, name_length, (void **) &ini_entry)==FAILURE) { - return FAILURE; - } - - ini_entry->displayer = displayer; - return SUCCESS; -} - - - -/* - * Data retrieval - */ - -ZEND_API long zend_ini_long(char *name, uint name_length, int orig) -{ - zend_ini_entry *ini_entry; - TSRMLS_FETCH(); - - if (zend_hash_find(EG(ini_directives), name, name_length, (void **) &ini_entry)==SUCCESS) { - if (orig && ini_entry->modified) { - return (ini_entry->orig_value ? strtol(ini_entry->orig_value, NULL, 0) : 0); - } else if (ini_entry->value) { - return strtol(ini_entry->value, NULL, 0); - } - } - - return 0; -} - - -ZEND_API double zend_ini_double(char *name, uint name_length, int orig) -{ - zend_ini_entry *ini_entry; - TSRMLS_FETCH(); - - if (zend_hash_find(EG(ini_directives), name, name_length, (void **) &ini_entry)==SUCCESS) { - if (orig && ini_entry->modified) { - return (double) (ini_entry->orig_value ? zend_strtod(ini_entry->orig_value, NULL) : 0.0); - } else if (ini_entry->value) { - return (double) zend_strtod(ini_entry->value, NULL); - } - } - - return 0.0; -} - - -ZEND_API char *zend_ini_string(char *name, uint name_length, int orig) -{ - zend_ini_entry *ini_entry; - TSRMLS_FETCH(); - - if (zend_hash_find(EG(ini_directives), name, name_length, (void **) &ini_entry)==SUCCESS) { - if (orig && ini_entry->modified) { - return ini_entry->orig_value; - } else { - return ini_entry->value; - } - } - - return ""; -} - -#if TONY_20070307 -static void zend_ini_displayer_cb(zend_ini_entry *ini_entry, int type) -{ - if (ini_entry->displayer) { - ini_entry->displayer(ini_entry, type); - } else { - char *display_string; - uint display_string_length; - - if (type==ZEND_INI_DISPLAY_ORIG && ini_entry->modified) { - if (ini_entry->orig_value) { - display_string = ini_entry->orig_value; - display_string_length = ini_entry->orig_value_length; - } else { - if (zend_uv.html_errors) { - display_string = NO_VALUE_HTML; - display_string_length = sizeof(NO_VALUE_HTML)-1; - } else { - display_string = NO_VALUE_PLAINTEXT; - display_string_length = sizeof(NO_VALUE_PLAINTEXT)-1; - } - } - } else if (ini_entry->value && ini_entry->value[0]) { - display_string = ini_entry->value; - display_string_length = ini_entry->value_length; - } else { - if (zend_uv.html_errors) { - display_string = NO_VALUE_HTML; - display_string_length = sizeof(NO_VALUE_HTML)-1; - } else { - display_string = NO_VALUE_PLAINTEXT; - display_string_length = sizeof(NO_VALUE_PLAINTEXT)-1; - } - } - ZEND_WRITE(display_string, display_string_length); - } -} -#endif - - -ZEND_INI_DISP(zend_ini_boolean_displayer_cb) -{ - int value, tmp_value_len; - char *tmp_value; - - if (type==ZEND_INI_DISPLAY_ORIG && ini_entry->modified) { - tmp_value = (ini_entry->orig_value ? ini_entry->orig_value : NULL ); - tmp_value_len = ini_entry->orig_value_length; - } else if (ini_entry->value) { - tmp_value = ini_entry->value; - tmp_value_len = ini_entry->value_length; - } else { - tmp_value = NULL; - tmp_value_len = 0; - } - - if (tmp_value_len == 4 && strcasecmp(tmp_value, "true") == 0) { - value = 1; - } - else if (tmp_value_len == 3 && strcasecmp(tmp_value, "yes") == 0) { - value = 1; - } - else if (tmp_value_len == 2 && strcasecmp(tmp_value, "on") == 0) { - value = 1; - } - else { - value = atoi(tmp_value); - } - - if (value) { - ZEND_PUTS("On"); - } else { - ZEND_PUTS("Off"); - } -} - - -ZEND_INI_DISP(zend_ini_color_displayer_cb) -{ - char *value; - - if (type==ZEND_INI_DISPLAY_ORIG && ini_entry->modified) { - value = ini_entry->orig_value; - } else if (ini_entry->value) { - value = ini_entry->value; - } else { - value = NULL; - } - if (value) { - if (zend_uv.html_errors) { - zend_printf("%s", value, value); - } else { - ZEND_PUTS(value); - } - } else { - if (zend_uv.html_errors) { - ZEND_PUTS(NO_VALUE_HTML); - } else { - ZEND_PUTS(NO_VALUE_PLAINTEXT); - } - } -} - - -ZEND_INI_DISP(display_link_numbers) -{ - char *value; - - if (type==ZEND_INI_DISPLAY_ORIG && ini_entry->modified) { - value = ini_entry->orig_value; - } else if (ini_entry->value) { - value = ini_entry->value; - } else { - value = NULL; - } - - if (value) { - if (atoi(value)==-1) { - ZEND_PUTS("Unlimited"); - } else { - zend_printf("%s", value); - } - } -} - - -/* Standard message handlers */ - -ZEND_API ZEND_INI_MH(OnUpdateBool) -{ - zend_bool *p; -#ifndef ZTS - char *base = (char *) mh_arg2; -#else - char *base; - - base = (char *) ts_resource(*((int *) mh_arg2)); -#endif - - p = (zend_bool *) (base+(size_t) mh_arg1); - - if (new_value_length==2 && strcasecmp("on", new_value)==0) { - *p = (zend_bool) 1; - } - else if (new_value_length==3 && strcasecmp("yes", new_value)==0) { - *p = (zend_bool) 1; - } - else if (new_value_length==4 && strcasecmp("true", new_value)==0) { - *p = (zend_bool) 1; - } - else { - *p = (zend_bool) atoi(new_value); - } - return SUCCESS; -} - - -ZEND_API ZEND_INI_MH(OnUpdateLong) -{ - long *p; -#ifndef ZTS - char *base = (char *) mh_arg2; -#else - char *base; - - base = (char *) ts_resource(*((int *) mh_arg2)); -#endif - - p = (long *) (base+(size_t) mh_arg1); - - *p = zend_atoi(new_value, new_value_length); - return SUCCESS; -} -ZEND_API ZEND_INI_MH(OnUpdateLongGEZero) -{ - long *p, tmp; -#ifndef ZTS - char *base = (char *) mh_arg2; -#else - char *base; - - base = (char *) ts_resource(*((int *) mh_arg2)); -#endif - - tmp = zend_atoi(new_value, new_value_length); - if (tmp < 0) { - return FAILURE; - } - - p = (long *) (base+(size_t) mh_arg1); - *p = tmp; - - return SUCCESS; -} - - - -ZEND_API ZEND_INI_MH(OnUpdateReal) -{ - double *p; -#ifndef ZTS - char *base = (char *) mh_arg2; -#else - char *base; - - base = (char *) ts_resource(*((int *) mh_arg2)); -#endif - - p = (double *) (base+(size_t) mh_arg1); - - *p = zend_strtod(new_value, NULL); - return SUCCESS; -} - - -ZEND_API ZEND_INI_MH(OnUpdateString) -{ - char **p; -#ifndef ZTS - char *base = (char *) mh_arg2; -#else - char *base; - - base = (char *) ts_resource(*((int *) mh_arg2)); -#endif - - p = (char **) (base+(size_t) mh_arg1); - - *p = new_value; - return SUCCESS; -} - - -ZEND_API ZEND_INI_MH(OnUpdateStringUnempty) -{ - char **p; -#ifndef ZTS - char *base = (char *) mh_arg2; -#else - char *base; - - base = (char *) ts_resource(*((int *) mh_arg2)); -#endif - - if (new_value && !new_value[0]) { - return FAILURE; - } - - p = (char **) (base+(size_t) mh_arg1); - - *p = new_value; - return SUCCESS; -} - -ZEND_API ZEND_INI_MH(OnUpdateUTF8String) -{ - UChar **p; - UChar *ustr = NULL; - int32_t ustr_len, capacity; - UErrorCode status = U_ZERO_ERROR; -#ifndef ZTS - char *base = (char *) mh_arg2; -#else - char *base; - - base = (char *) ts_resource(*((int *) mh_arg2)); -#endif - - /* estimate capacity */ - capacity = (new_value_length > 2) ? ((new_value_length >> 1) + (new_value_length >> 3) + 2) : new_value_length; - - while (1) { - ustr = eurealloc(ustr, capacity+1); - u_strFromUTF8(ustr, capacity, &ustr_len, new_value, new_value_length, &status); - if (status == U_BUFFER_OVERFLOW_ERROR) { - capacity = ustr_len; - status = U_ZERO_ERROR; - } else { - break; - } - } - - if (U_FAILURE(status)) { - zend_error(E_WARNING, "Could not convert UTF-8 INI value to Unicode"); - efree(ustr); - return FAILURE; - } - - p = (UChar **) (base+(size_t) mh_arg1); - - *p = ustr; - return SUCCESS; -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_ini.h b/Zend/zend_ini.h deleted file mode 100644 index fb076e8ad3ac7..0000000000000 --- a/Zend/zend_ini.h +++ /dev/null @@ -1,218 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_INI_H -#define ZEND_INI_H - -#define ZEND_INI_USER (1<<0) -#define ZEND_INI_PERDIR (1<<1) -#define ZEND_INI_SYSTEM (1<<2) - -#define ZEND_INI_ALL (ZEND_INI_USER|ZEND_INI_PERDIR|ZEND_INI_SYSTEM) - -#ifndef XtOffsetOf -# if defined(CRAY) || (defined(__arm) && !defined(LINUX)) -# ifdef __STDC__ -# define XtOffset(p_type, field) _Offsetof(p_type, field) -# else -# ifdef CRAY2 -# define XtOffset(p_type, field) \ - (sizeof(int)*((unsigned int)&(((p_type)NULL)->field))) - -# else /* !CRAY2 */ - -# define XtOffset(p_type, field) ((unsigned int)&(((p_type)NULL)->field)) - -# endif /* !CRAY2 */ -# endif /* __STDC__ */ -# else /* ! (CRAY || __arm) */ - -# define XtOffset(p_type, field) \ - ((long) (((char *) (&(((p_type)NULL)->field))) - ((char *) NULL))) - -# endif /* !CRAY */ - -# ifdef offsetof -# define XtOffsetOf(s_type, field) offsetof(s_type, field) -# else -# define XtOffsetOf(s_type, field) XtOffset(s_type*, field) -# endif - -#endif - -typedef struct _zend_ini_entry zend_ini_entry; - -#define ZEND_INI_MH(name) int name(zend_ini_entry *entry, char *new_value, uint new_value_length, void *mh_arg1, void *mh_arg2, void *mh_arg3, int stage TSRMLS_DC) -#define ZEND_INI_DISP(name) void name(zend_ini_entry *ini_entry, int type) - -struct _zend_ini_entry { - int module_number; - int modifiable; - char *name; - uint name_length; - ZEND_INI_MH((*on_modify)); - void *mh_arg1; - void *mh_arg2; - void *mh_arg3; - - char *value; - uint value_length; - - char *orig_value; - uint orig_value_length; - int modified; - - void (*displayer)(zend_ini_entry *ini_entry, int type); -}; - -BEGIN_EXTERN_C() -ZEND_API int zend_ini_startup(TSRMLS_D); -ZEND_API int zend_ini_shutdown(TSRMLS_D); -ZEND_API int zend_ini_global_shutdown(TSRMLS_D); -ZEND_API int zend_ini_deactivate(TSRMLS_D); - -ZEND_API int zend_copy_ini_directives(TSRMLS_D); - -ZEND_API void zend_ini_sort_entries(TSRMLS_D); - -ZEND_API int zend_register_ini_entries(zend_ini_entry *ini_entry, int module_number TSRMLS_DC); -ZEND_API void zend_unregister_ini_entries(int module_number TSRMLS_DC); -ZEND_API void zend_ini_refresh_caches(int stage TSRMLS_DC); -ZEND_API int zend_alter_ini_entry(char *name, uint name_length, char *new_value, uint new_value_length, int modify_type, int stage); -ZEND_API int zend_restore_ini_entry(char *name, uint name_length, int stage); -ZEND_API void display_ini_entries(zend_module_entry *module); - -ZEND_API long zend_ini_long(char *name, uint name_length, int orig); -ZEND_API double zend_ini_double(char *name, uint name_length, int orig); -ZEND_API char *zend_ini_string(char *name, uint name_length, int orig); - -ZEND_API int zend_ini_register_displayer(char *name, uint name_length, void (*displayer)(zend_ini_entry *ini_entry, int type)); - -ZEND_API ZEND_INI_DISP(zend_ini_boolean_displayer_cb); -ZEND_API ZEND_INI_DISP(zend_ini_color_displayer_cb); -ZEND_API ZEND_INI_DISP(display_link_numbers); -END_EXTERN_C() - -#define ZEND_INI_BEGIN() static zend_ini_entry ini_entries[] = { -#define ZEND_INI_END() { 0, 0, NULL, 0, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0, NULL } }; - -#define ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, arg2, arg3, displayer) \ - { 0, modifiable, name, sizeof(name), on_modify, arg1, arg2, arg3, default_value, sizeof(default_value)-1, NULL, 0, 0, displayer }, - -#define ZEND_INI_ENTRY3(name, default_value, modifiable, on_modify, arg1, arg2, arg3) \ - ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, arg2, arg3, NULL) - -#define ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, arg1, arg2, displayer) \ - ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, arg2, NULL, displayer) - -#define ZEND_INI_ENTRY2(name, default_value, modifiable, on_modify, arg1, arg2) \ - ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, arg1, arg2, NULL) - -#define ZEND_INI_ENTRY1_EX(name, default_value, modifiable, on_modify, arg1, displayer) \ - ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, NULL, NULL, displayer) - -#define ZEND_INI_ENTRY1(name, default_value, modifiable, on_modify, arg1) \ - ZEND_INI_ENTRY1_EX(name, default_value, modifiable, on_modify, arg1, NULL) - -#define ZEND_INI_ENTRY_EX(name, default_value, modifiable, on_modify, displayer) \ - ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, NULL, NULL, NULL, displayer) - -#define ZEND_INI_ENTRY(name, default_value, modifiable, on_modify) \ - ZEND_INI_ENTRY_EX(name, default_value, modifiable, on_modify, NULL) - -#ifdef ZTS -#define STD_ZEND_INI_ENTRY(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr) \ - ZEND_INI_ENTRY2(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id) -#define STD_ZEND_INI_ENTRY_EX(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr, displayer) \ - ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id, displayer) -#define STD_ZEND_INI_BOOLEAN(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr) \ - ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id, NULL, zend_ini_boolean_displayer_cb) -#else -#define STD_ZEND_INI_ENTRY(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr) \ - ZEND_INI_ENTRY2(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr) -#define STD_ZEND_INI_ENTRY_EX(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr, displayer) \ - ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr, displayer) -#define STD_ZEND_INI_BOOLEAN(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr) \ - ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr, NULL, zend_ini_boolean_displayer_cb) -#endif - -#define INI_INT(name) zend_ini_long((name), sizeof(name), 0) -#define INI_FLT(name) zend_ini_double((name), sizeof(name), 0) -#define INI_STR(name) zend_ini_string((name), sizeof(name), 0) -#define INI_BOOL(name) ((zend_bool) INI_INT(name)) - -#define INI_ORIG_INT(name) zend_ini_long((name), sizeof(name), 1) -#define INI_ORIG_FLT(name) zend_ini_double((name), sizeof(name), 1) -#define INI_ORIG_STR(name) zend_ini_string((name), sizeof(name), 1) -#define INI_ORIG_BOOL(name) ((zend_bool) INI_ORIG_INT(name)) - - -#define REGISTER_INI_ENTRIES() zend_register_ini_entries(ini_entries, module_number TSRMLS_CC) -#define UNREGISTER_INI_ENTRIES() zend_unregister_ini_entries(module_number TSRMLS_CC) -#define DISPLAY_INI_ENTRIES() display_ini_entries(zend_module) - -#define REGISTER_INI_DISPLAYER(name, displayer) zend_ini_register_displayer((name), sizeof(name), displayer) -#define REGISTER_INI_BOOLEAN(name) REGISTER_INI_DISPLAYER(name, zend_ini_boolean_displayer_cb) - -/* Standard message handlers */ -BEGIN_EXTERN_C() -ZEND_API ZEND_INI_MH(OnUpdateBool); -ZEND_API ZEND_INI_MH(OnUpdateLong); -ZEND_API ZEND_INI_MH(OnUpdateLongGEZero); -ZEND_API ZEND_INI_MH(OnUpdateReal); -ZEND_API ZEND_INI_MH(OnUpdateString); -ZEND_API ZEND_INI_MH(OnUpdateStringUnempty); -ZEND_API ZEND_INI_MH(OnUpdateUTF8String); -END_EXTERN_C() - -#define ZEND_INI_DISPLAY_ORIG 1 -#define ZEND_INI_DISPLAY_ACTIVE 2 - -#define ZEND_INI_STAGE_STARTUP (1<<0) -#define ZEND_INI_STAGE_SHUTDOWN (1<<1) -#define ZEND_INI_STAGE_ACTIVATE (1<<2) -#define ZEND_INI_STAGE_DEACTIVATE (1<<3) -#define ZEND_INI_STAGE_RUNTIME (1<<4) - -/* INI parsing engine */ -typedef void (*zend_ini_parser_cb_t)(zval *arg1, zval *arg2, int callback_type, void *arg); -BEGIN_EXTERN_C() -ZEND_API int zend_parse_ini_file(zend_file_handle *fh, zend_bool unbuffered_errors, zend_ini_parser_cb_t ini_parser_cb, void *arg); -ZEND_API int zend_parse_ini_string(char *str, zend_bool unbuffered_errors, zend_ini_parser_cb_t ini_parser_cb, void *arg); -END_EXTERN_C() - -#define ZEND_INI_PARSER_ENTRY 1 -#define ZEND_INI_PARSER_SECTION 2 -#define ZEND_INI_PARSER_POP_ENTRY 3 - -typedef struct _zend_ini_parser_param { - zend_ini_parser_cb_t ini_parser_cb; - void *arg; -} zend_ini_parser_param; - -#endif /* ZEND_INI_H */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_ini_parser.y b/Zend/zend_ini_parser.y deleted file mode 100644 index d392c41e5a04a..0000000000000 --- a/Zend/zend_ini_parser.y +++ /dev/null @@ -1,316 +0,0 @@ -%{ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#define DEBUG_CFG_PARSER 0 -#include "zend.h" -#include "zend_API.h" -#include "zend_ini.h" -#include "zend_constants.h" -#include "zend_ini_scanner.h" -#include "zend_extensions.h" - -#define YYSTYPE zval - -#ifdef ZTS -#define YYPARSE_PARAM tsrm_ls -#define YYLEX_PARAM tsrm_ls -#endif - -#define ZEND_INI_PARSER_CB (CG(ini_parser_param))->ini_parser_cb -#define ZEND_INI_PARSER_ARG (CG(ini_parser_param))->arg - -int ini_lex(zval *ini_lval TSRMLS_DC); -#ifdef ZTS -int ini_parse(void *arg); -#else -int ini_parse(void); -#endif - -zval yylval; - -#ifndef ZTS -extern int ini_lex(zval *ini_lval TSRMLS_DC); -extern FILE *ini_in; -extern void init_cfg_scanner(void); -#endif - -void zend_ini_do_op(char type, zval *result, zval *op1, zval *op2) -{ - int i_result; - int i_op1, i_op2; - char str_result[MAX_LENGTH_OF_LONG]; - - i_op1 = atoi(Z_STRVAL_P(op1)); - free(Z_STRVAL_P(op1)); - if (op2) { - i_op2 = atoi(Z_STRVAL_P(op2)); - free(Z_STRVAL_P(op2)); - } else { - i_op2 = 0; - } - - switch (type) { - case '|': - i_result = i_op1 | i_op2; - break; - case '&': - i_result = i_op1 & i_op2; - break; - case '~': - i_result = ~i_op1; - break; - case '!': - i_result = !i_op1; - break; - default: - i_result = 0; - break; - } - - Z_STRLEN_P(result) = zend_sprintf(str_result, "%d", i_result); - Z_STRVAL_P(result) = (char *) malloc(Z_STRLEN_P(result)+1); - memcpy(Z_STRVAL_P(result), str_result, Z_STRLEN_P(result)); - Z_STRVAL_P(result)[Z_STRLEN_P(result)] = 0; - Z_TYPE_P(result) = IS_STRING; -} - -void zend_ini_init_string(zval *result) -{ - Z_STRVAL_P(result) = malloc(1); - Z_STRVAL_P(result)[0] = 0; - Z_STRLEN_P(result) = 0; - Z_TYPE_P(result) = IS_STRING; -} - -void zend_ini_add_string(zval *result, zval *op1, zval *op2) -{ - int length = Z_STRLEN_P(op1) + Z_STRLEN_P(op2); - - Z_STRVAL_P(result) = (char *) realloc(Z_STRVAL_P(op1), length+1); - memcpy(Z_STRVAL_P(result)+Z_STRLEN_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op2)); - Z_STRVAL_P(result)[length] = 0; - Z_STRLEN_P(result) = length; - Z_TYPE_P(result) = IS_STRING; -} - -void zend_ini_get_constant(zval *result, zval *name) -{ - zval z_constant; - TSRMLS_FETCH(); - - if (!memchr(Z_STRVAL_P(name), ':', Z_STRLEN_P(name)) - && zend_get_constant(Z_STRVAL_P(name), Z_STRLEN_P(name), &z_constant TSRMLS_CC)) { - /* z_constant is emalloc()'d */ - convert_to_string(&z_constant); - Z_STRVAL_P(result) = zend_strndup(Z_STRVAL(z_constant), Z_STRLEN(z_constant)); - Z_STRLEN_P(result) = Z_STRLEN(z_constant); - Z_TYPE_P(result) = Z_TYPE(z_constant); - zval_dtor(&z_constant); - free(Z_STRVAL_P(name)); - } else { - *result = *name; - } -} - -void zend_ini_get_var(zval *result, zval *name) -{ - zval curval; - char *envvar; - TSRMLS_FETCH(); - - if (zend_get_configuration_directive(Z_STRVAL_P(name), Z_STRLEN_P(name)+1, &curval) == SUCCESS) { - Z_STRVAL_P(result) = zend_strndup(Z_STRVAL(curval), Z_STRLEN(curval)); - Z_STRLEN_P(result) = Z_STRLEN(curval); - } else if ((envvar = zend_getenv(Z_STRVAL_P(name), Z_STRLEN_P(name) TSRMLS_CC)) != NULL || - (envvar = getenv(Z_STRVAL_P(name))) != NULL) { - Z_STRVAL_P(result) = strdup(envvar); - Z_STRLEN_P(result) = strlen(envvar); - } else { - zend_ini_init_string(result); - } -} - - -static void ini_error(char *str) -{ - char *error_buf; - int error_buf_len; - char *currently_parsed_filename; - TSRMLS_FETCH(); - - currently_parsed_filename = zend_ini_scanner_get_filename(TSRMLS_C); - if (currently_parsed_filename) { - error_buf_len = 128+strlen(currently_parsed_filename); /* should be more than enough */ - error_buf = (char *) emalloc(error_buf_len); - - sprintf(error_buf, "Error parsing %s on line %d\n", currently_parsed_filename, zend_ini_scanner_get_lineno(TSRMLS_C)); - } else { - error_buf = estrdup("Invalid configuration directive\n"); - } - - if (CG(ini_parser_unbuffered_errors)) { -#ifdef PHP_WIN32 - MessageBox(NULL, error_buf, "PHP Error", MB_OK|MB_TOPMOST|0x00200000L); -#else - fprintf(stderr, "PHP: %s", error_buf); -#endif - } else { - zend_error(E_WARNING, "%s", error_buf); - } - efree(error_buf); -} - - -ZEND_API int zend_parse_ini_file(zend_file_handle *fh, zend_bool unbuffered_errors, zend_ini_parser_cb_t ini_parser_cb, void *arg) -{ - int retval; - zend_ini_parser_param ini_parser_param; - TSRMLS_FETCH(); - - ini_parser_param.ini_parser_cb = ini_parser_cb; - ini_parser_param.arg = arg; - - CG(ini_parser_param) = &ini_parser_param; - if (zend_ini_open_file_for_scanning(fh TSRMLS_CC)==FAILURE) { - return FAILURE; - } - - CG(ini_parser_unbuffered_errors) = unbuffered_errors; - retval = ini_parse(TSRMLS_C); - - zend_ini_close_file(fh TSRMLS_CC); - - if (retval==0) { - return SUCCESS; - } else { - return FAILURE; - } -} - - -ZEND_API int zend_parse_ini_string(char *str, zend_bool unbuffered_errors, zend_ini_parser_cb_t ini_parser_cb, void *arg) -{ - zend_ini_parser_param ini_parser_param; - TSRMLS_FETCH(); - - ini_parser_param.ini_parser_cb = ini_parser_cb; - ini_parser_param.arg = arg; - - CG(ini_parser_param) = &ini_parser_param; - if (zend_ini_prepare_string_for_scanning(str TSRMLS_CC)==FAILURE) { - return FAILURE; - } - - CG(ini_parser_unbuffered_errors) = unbuffered_errors; - - if (ini_parse(TSRMLS_C)) { - return SUCCESS; - } else { - return FAILURE; - } -} - - -%} - -%pure_parser -%token TC_STRING -%token TC_ENCAPSULATED_STRING -%token BRACK -%token SECTION -%token CFG_TRUE -%token CFG_FALSE -%token TC_DOLLAR_CURLY -%left '|' '&' -%right '~' '!' - -%% - -statement_list: - statement_list statement - | /* empty */ -; - -statement: - TC_STRING '=' string_or_value { -#if DEBUG_CFG_PARSER - printf("'%s' = '%s'\n", Z_STRVAL($1), Z_STRVAL($3)); -#endif - ZEND_INI_PARSER_CB(&$1, &$3, ZEND_INI_PARSER_ENTRY, ZEND_INI_PARSER_ARG); - free(Z_STRVAL($1)); - free(Z_STRVAL($3)); - } - | TC_STRING BRACK '=' string_or_value { -#if DEBUG_CFG_PARSER - printf("'%s'[ ] = '%s'\n", Z_STRVAL($1), Z_STRVAL($4)); -#endif - ZEND_INI_PARSER_CB(&$1, &$4, ZEND_INI_PARSER_POP_ENTRY, ZEND_INI_PARSER_ARG); - free(Z_STRVAL($1)); - free(Z_STRVAL($4)); - } - | TC_STRING { ZEND_INI_PARSER_CB(&$1, NULL, ZEND_INI_PARSER_ENTRY, ZEND_INI_PARSER_ARG); free(Z_STRVAL($1)); } - | SECTION { ZEND_INI_PARSER_CB(&$1, NULL, ZEND_INI_PARSER_SECTION, ZEND_INI_PARSER_ARG); free(Z_STRVAL($1)); } - | '\n' -; - - -string_or_value: - expr { $$ = $1; } - | CFG_TRUE { $$ = $1; } - | CFG_FALSE { $$ = $1; } - | '\n' { zend_ini_init_string(&$$); } - | /* empty */ { zend_ini_init_string(&$$); } -; - - -var_string_list: - cfg_var_ref { $$ = $1; } - | TC_ENCAPSULATED_STRING { $$ = $1; } - | constant_string { $$ = $1; } - | var_string_list cfg_var_ref { zend_ini_add_string(&$$, &$1, &$2); free($2.value.str.val); } - | var_string_list TC_ENCAPSULATED_STRING { zend_ini_add_string(&$$, &$1, &$2); free(Z_STRVAL($2)); } - | var_string_list constant_string { zend_ini_add_string(&$$, &$1, &$2); free($2.value.str.val); } -; - -cfg_var_ref: - TC_DOLLAR_CURLY TC_STRING '}' { zend_ini_get_var(&$$, &$2); free($2.value.str.val); } -; - -expr: - var_string_list { $$ = $1; } - | expr '|' expr { zend_ini_do_op('|', &$$, &$1, &$3); } - | expr '&' expr { zend_ini_do_op('&', &$$, &$1, &$3); } - | '~' expr { zend_ini_do_op('~', &$$, &$2, NULL); } - | '!' expr { zend_ini_do_op('!', &$$, &$2, NULL); } - | '(' expr ')' { $$ = $2; } -; - -constant_string: - TC_STRING { zend_ini_get_constant(&$$, &$1); } -; - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_ini_scanner.h b/Zend/zend_ini_scanner.h deleted file mode 100644 index 76ca77105832f..0000000000000 --- a/Zend/zend_ini_scanner.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef _ZEND_INI_SCANNER_H -#define _ZEND_INI_SCANNER_H - -BEGIN_EXTERN_C() -int zend_ini_scanner_get_lineno(TSRMLS_D); -char *zend_ini_scanner_get_filename(TSRMLS_D); -int zend_ini_open_file_for_scanning(zend_file_handle *fh TSRMLS_DC); -int zend_ini_prepare_string_for_scanning(char *str TSRMLS_DC); -void zend_ini_close_file(zend_file_handle *fh TSRMLS_DC); -int ini_lex(zval *ini_lval TSRMLS_DC); -END_EXTERN_C() - -#endif /* _ZEND_INI_SCANNER_H */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_ini_scanner.l b/Zend/zend_ini_scanner.l deleted file mode 100644 index 74476968ff496..0000000000000 --- a/Zend/zend_ini_scanner.l +++ /dev/null @@ -1,256 +0,0 @@ -%{ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#define yyleng SCNG(yy_leng) -#define yytext SCNG(yy_text) -#define yytext_ptr SCNG(yy_text) -#define yyin SCNG(yy_in) -#define yyout SCNG(yy_out) -#define yy_last_accepting_state SCNG(_yy_last_accepting_state) -#define yy_last_accepting_cpos SCNG(_yy_last_accepting_cpos) -#define yy_more_flag SCNG(_yy_more_flag) -#define yy_more_len SCNG(_yy_more_len) - -#include -#include "zend.h" -#include "zend_globals.h" -#include -#include "zend_ini_scanner.h" - -#undef YYSTYPE -#define YYSTYPE zval - -#define YY_DECL int ini_lex(zval *ini_lval TSRMLS_DC) - -/* Globals Macros */ -#define SCNG INI_SCNG -#ifdef ZTS -ZEND_API ts_rsrc_id ini_scanner_globals_id; -#else -ZEND_API zend_scanner_globals ini_scanner_globals; -#endif - -# define YY_INPUT(buf, result, max_size) \ - if ( ((result = zend_stream_read(yyin, buf, max_size TSRMLS_CC)) == 0) \ - && zend_stream_ferror( yyin TSRMLS_CC) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); - -static char *ini_filename; - -void init_ini_scanner(TSRMLS_D) -{ - SCNG(lineno)=1; -} - - -int zend_ini_scanner_get_lineno(TSRMLS_D) -{ - return SCNG(lineno); -} - - -char *zend_ini_scanner_get_filename(TSRMLS_D) -{ - return ini_filename; -} - - -int zend_ini_open_file_for_scanning(zend_file_handle *fh TSRMLS_DC) -{ - if (FAILURE == zend_stream_fixup(fh TSRMLS_CC)) { - return FAILURE; - } - - init_ini_scanner(TSRMLS_C); - yyin = fh; - yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE TSRMLS_CC) TSRMLS_CC); - ini_filename = fh->filename; - return SUCCESS; -} - - -int zend_ini_prepare_string_for_scanning(char *str TSRMLS_DC) -{ - int len = strlen(str); - - yyin = NULL; - yy_scan_buffer(str, len + 2 TSRMLS_CC); - ini_filename = NULL; - return SUCCESS; -} - -void zend_ini_close_file(zend_file_handle *fh TSRMLS_DC) -{ - zend_stream_close(fh); -} - -%} - -NEWLINE ("\r"|"\n"|"\r\n") - -%option noyywrap -%option never-interactive - -%% - -[ ]*[\[][ ]*[\]][ ]* { - return BRACK; -} - -[ ]*("true"|"on"|"yes")[ ]* { - Z_STRVAL_P(ini_lval) = zend_strndup("1", 1); - Z_STRLEN_P(ini_lval) = 1; - Z_TYPE_P(ini_lval) = IS_STRING; - return CFG_TRUE; -} - - -[ ]*("false"|"off"|"no"|"none")[ ]* { - Z_STRVAL_P(ini_lval) = zend_strndup("", 0); - Z_STRLEN_P(ini_lval) = 0; - Z_TYPE_P(ini_lval) = IS_STRING; - return CFG_FALSE; -} - -[[][^\]\n]+[\]][ ]*{NEWLINE}? { - /* SECTION */ - - /* eat trailing ] and spaces */ - while (yyleng>0 && (yytext[yyleng-1]=='\n' || yytext[yyleng-1]=='\r' || yytext[yyleng-1]==']' || yytext[yyleng-1]==' ')) { - yyleng--; - yytext[yyleng]=0; - } - - SCNG(lineno)++; - - /* eat leading [ */ - yytext++; - yyleng--; - - Z_STRVAL_P(ini_lval) = zend_strndup(yytext, yyleng); - Z_STRLEN_P(ini_lval) = yyleng; - Z_TYPE_P(ini_lval) = IS_STRING; - return SECTION; -} - - -["][^"]*["] { - char *p = yytext; - - /* ENCAPSULATED TC_STRING */ - - while ((p = strpbrk(p, "\r\n"))) { - if (*p == '\r' && *(p + 1) == '\n') { - p++; - } - SCNG(lineno)++; - p++; - } - - /* eat trailing " */ - yytext[yyleng-1]=0; - - /* eat leading " */ - yytext++; - - Z_STRVAL_P(ini_lval) = zend_strndup(yytext, yyleng - 2); - Z_STRLEN_P(ini_lval) = yyleng - 2; - Z_TYPE_P(ini_lval) = IS_STRING; - return TC_ENCAPSULATED_STRING; -} - -[&|~$(){}!] { - return yytext[0]; -} - -"${" { - return TC_DOLLAR_CURLY; -} - -"}" { - Z_LVAL_P(ini_lval) = (long) yytext[0]; - return yytext[0]; -} - -[^=\n\r\t;|&$~(){}!"\[]+ { - /* STRING */ - register int i; - - /* eat trailing whitespace */ - for (i=yyleng-1; i>=0; i--) { - if (yytext[i]==' ' || yytext[i]=='\t') { - yytext[i]=0; - yyleng--; - } else { - break; - } - } - /* eat leading whitespace */ - while (yytext[0]) { - if (yytext[0]==' ' || yytext[0]=='\t') { - yytext++; - yyleng--; - } else { - break; - } - } - if (yyleng!=0) { - Z_STRVAL_P(ini_lval) = zend_strndup(yytext, yyleng); - Z_STRLEN_P(ini_lval) = yyleng; - Z_TYPE_P(ini_lval) = IS_STRING; - return TC_STRING; - } else { - /* whitespace */ - } -} - -[=\n] { - if (yytext[0] == '\n') { - SCNG(lineno)++; - } - return yytext[0]; -} - -{NEWLINE} { - SCNG(lineno)++; - return '\n'; -} - -[;][^\r\n]*{NEWLINE}? { - /* comment */ - SCNG(lineno)++; - return '\n'; -} - -[ \t] { - /* eat whitespace */ -} - -. { -#if DEBUG - php_error(E_NOTICE,"Unexpected character on line %d: '%s' (ASCII %d)\n", yylineno, yytext, yytext[0]); -#endif -} - -<> { - yy_delete_buffer(YY_CURRENT_BUFFER TSRMLS_CC); - yyterminate(); -} diff --git a/Zend/zend_interfaces.c b/Zend/zend_interfaces.c deleted file mode 100755 index 9e1402e8d5083..0000000000000 --- a/Zend/zend_interfaces.c +++ /dev/null @@ -1,574 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Marcus Boerger | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#include "zend.h" -#include "zend_API.h" -#include "zend_interfaces.h" -#include "zend_exceptions.h" - -ZEND_API zend_class_entry *zend_ce_traversable; -ZEND_API zend_class_entry *zend_ce_aggregate; -ZEND_API zend_class_entry *zend_ce_iterator; -ZEND_API zend_class_entry *zend_ce_arrayaccess; -ZEND_API zend_class_entry *zend_ce_serializable; - -/* {{{ zend_call_method - Only returns the returned zval if retval_ptr != NULL */ -ZEND_API zval* zend_u_call_method(zval **object_pp, zend_class_entry *obj_ce, zend_function **fn_proxy, int function_name_type, zstr function_name, int function_name_len, zval **retval_ptr_ptr, int param_count, zval* arg1, zval* arg2 TSRMLS_DC) -{ - int result; - zend_fcall_info fci; - zval z_fname; - zval *retval; - HashTable *function_table; - - zval **params[2]; - - params[0] = &arg1; - params[1] = &arg2; - - fci.size = sizeof(fci); - /*fci.function_table = NULL; will be read form zend_class_entry of object if needed */ - fci.object_pp = object_pp; - fci.function_name = &z_fname; - fci.retval_ptr_ptr = retval_ptr_ptr ? retval_ptr_ptr : &retval; - fci.param_count = param_count; - fci.params = params; - fci.no_separation = 1; - fci.symbol_table = NULL; - - if (!fn_proxy && !obj_ce) { - /* no interest in caching and no information already present that is - * needed later inside zend_call_function. */ - ZVAL_ZSTRL(&z_fname, function_name_type, function_name, function_name_len, 1); - fci.function_table = !object_pp ? EG(function_table) : NULL; - result = zend_call_function(&fci, NULL TSRMLS_CC); - zval_dtor(&z_fname); - } else { - zend_fcall_info_cache fcic; - - fcic.initialized = 1; - if (!obj_ce) { - obj_ce = object_pp ? Z_OBJCE_PP(object_pp) : NULL; - } - if (obj_ce) { - function_table = &obj_ce->function_table; - } else { - function_table = EG(function_table); - } - if (!fn_proxy || !*fn_proxy) { - if (zend_u_hash_find(function_table, function_name_type, function_name, function_name_len+1, (void **) &fcic.function_handler) == FAILURE) { - /* error at c-level */ - zend_error(E_CORE_ERROR, "Couldn't find implementation for method %v%s%s", obj_ce ? obj_ce->name : EMPTY_ZSTR, obj_ce ? "::" : "", function_name); - } - if (fn_proxy) { - *fn_proxy = fcic.function_handler; - } - } else { - fcic.function_handler = *fn_proxy; - } - fcic.calling_scope = obj_ce; - fcic.object_pp = object_pp; - result = zend_call_function(&fci, &fcic TSRMLS_CC); - } - if (result == FAILURE) { - /* error at c-level */ - if (!obj_ce) { - obj_ce = object_pp ? Z_OBJCE_PP(object_pp) : NULL; - } - if (!EG(exception)) { - zend_error(E_CORE_ERROR, "Couldn't execute method %v%s%s", obj_ce ? obj_ce->name : EMPTY_ZSTR, obj_ce ? "::" : "", function_name); - } - } - if (!retval_ptr_ptr) { - if (retval) { - zval_ptr_dtor(&retval); - } - return NULL; - } - return *retval_ptr_ptr; -} -/* }}} */ - -/* iterator interface, c-level functions used by engine */ - -/* {{{ zend_user_it_new_iterator */ -ZEND_API zval *zend_user_it_new_iterator(zend_class_entry *ce, zval *object TSRMLS_DC) -{ - zval *retval; - - return zend_call_method_with_0_params(&object, ce, &ce->iterator_funcs.zf_new_iterator, "getiterator", &retval); - -} -/* }}} */ - -/* {{{ zend_user_it_dtor */ -ZEND_API void zend_user_it_invalidate_current(zend_object_iterator *_iter TSRMLS_DC) -{ - zend_user_iterator *iter = (zend_user_iterator*)_iter; - - if (iter->value) { - zval_ptr_dtor(&iter->value); - iter->value = NULL; - } -} -/* }}} */ - -/* {{{ zend_user_it_dtor */ -static void zend_user_it_dtor(zend_object_iterator *_iter TSRMLS_DC) -{ - zend_user_iterator *iter = (zend_user_iterator*)_iter; - zval *object = (zval*)iter->it.data; - - zend_user_it_invalidate_current(_iter TSRMLS_CC); - zval_ptr_dtor(&object); - efree(iter); -} -/* }}} */ - -/* {{{ zend_user_it_valid */ -ZEND_API int zend_user_it_valid(zend_object_iterator *_iter TSRMLS_DC) -{ - if (_iter) { - zend_user_iterator *iter = (zend_user_iterator*)_iter; - zval *object = (zval*)iter->it.data; - zval *more; - int result; - - zend_call_method_with_0_params(&object, iter->ce, &iter->ce->iterator_funcs.zf_valid, "valid", &more); - if (more) { - result = i_zend_is_true(more); - zval_ptr_dtor(&more); - return result ? SUCCESS : FAILURE; - } - } - return FAILURE; -} -/* }}} */ - -/* {{{ zend_user_it_get_current_data */ -ZEND_API void zend_user_it_get_current_data(zend_object_iterator *_iter, zval ***data TSRMLS_DC) -{ - zend_user_iterator *iter = (zend_user_iterator*)_iter; - zval *object = (zval*)iter->it.data; - - if (!iter->value) { - zend_call_method_with_0_params(&object, iter->ce, &iter->ce->iterator_funcs.zf_current, "current", &iter->value); - } - *data = &iter->value; -} -/* }}} */ - -/* {{{ zend_user_it_get_current_key_default */ -#if 0 -static int zend_user_it_get_current_key_default(zend_object_iterator *_iter, zstr *str_key, uint *str_key_len, ulong *int_key TSRMLS_DC) -{ - *int_key = _iter->index; - return HASH_KEY_IS_LONG; -} -#endif -/* }}} */ - -/* {{{ zend_user_it_get_current_key */ -ZEND_API int zend_user_it_get_current_key(zend_object_iterator *_iter, zstr *str_key, uint *str_key_len, ulong *int_key TSRMLS_DC) -{ - zend_user_iterator *iter = (zend_user_iterator*)_iter; - zval *object = (zval*)iter->it.data; - zval *retval; - - zend_call_method_with_0_params(&object, iter->ce, &iter->ce->iterator_funcs.zf_key, "key", &retval); - - if (!retval) { - *int_key = 0; - if (!EG(exception)) - { - zend_error(E_WARNING, "Nothing returned from %v::key()", iter->ce->name); - } - return HASH_KEY_IS_LONG; - } - switch (Z_TYPE_P(retval)) { - default: - zend_error(E_WARNING, "Illegal type returned from %v::key()", iter->ce->name); - case IS_NULL: - *int_key = 0; - zval_ptr_dtor(&retval); - return HASH_KEY_IS_LONG; - - case IS_STRING: - str_key->s = estrndup(Z_STRVAL_P(retval), Z_STRLEN_P(retval)); - *str_key_len = Z_STRLEN_P(retval)+1; - zval_ptr_dtor(&retval); - return HASH_KEY_IS_STRING; - - case IS_UNICODE: - str_key->u = eustrndup(Z_USTRVAL_P(retval), Z_USTRLEN_P(retval)); - *str_key_len = Z_USTRLEN_P(retval)+1; - zval_ptr_dtor(&retval); - return HASH_KEY_IS_UNICODE; - - case IS_DOUBLE: - *int_key = (long)Z_DVAL_P(retval); - zval_ptr_dtor(&retval); - return HASH_KEY_IS_LONG; - - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - *int_key = (long)Z_LVAL_P(retval); - zval_ptr_dtor(&retval); - return HASH_KEY_IS_LONG; - } -} -/* }}} */ - -/* {{{ zend_user_it_move_forward */ -ZEND_API void zend_user_it_move_forward(zend_object_iterator *_iter TSRMLS_DC) -{ - zend_user_iterator *iter = (zend_user_iterator*)_iter; - zval *object = (zval*)iter->it.data; - - zend_user_it_invalidate_current(_iter TSRMLS_CC); - zend_call_method_with_0_params(&object, iter->ce, &iter->ce->iterator_funcs.zf_next, "next", NULL); -} -/* }}} */ - -/* {{{ zend_user_it_rewind */ -ZEND_API void zend_user_it_rewind(zend_object_iterator *_iter TSRMLS_DC) -{ - zend_user_iterator *iter = (zend_user_iterator*)_iter; - zval *object = (zval*)iter->it.data; - - zend_user_it_invalidate_current(_iter TSRMLS_CC); - zend_call_method_with_0_params(&object, iter->ce, &iter->ce->iterator_funcs.zf_rewind, "rewind", NULL); -} -/* }}} */ - -zend_object_iterator_funcs zend_interface_iterator_funcs_iterator = { - zend_user_it_dtor, - zend_user_it_valid, - zend_user_it_get_current_data, - zend_user_it_get_current_key, - zend_user_it_move_forward, - zend_user_it_rewind, - zend_user_it_invalidate_current -}; - -/* {{{ zend_user_it_get_iterator */ -static zend_object_iterator *zend_user_it_get_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC) -{ - zend_user_iterator *iterator; - - if (by_ref) { - zend_error(E_ERROR, "An iterator cannot be used with foreach by reference"); - } - - iterator = emalloc(sizeof(zend_user_iterator)); - - object->refcount++; - iterator->it.data = (void*)object; - iterator->it.funcs = ce->iterator_funcs.funcs; - iterator->ce = Z_OBJCE_P(object); - iterator->value = NULL; - return (zend_object_iterator*)iterator; -} -/* }}} */ - -/* {{{ zend_user_it_get_new_iterator */ -ZEND_API zend_object_iterator *zend_user_it_get_new_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC) -{ - zval *iterator = zend_user_it_new_iterator(ce, object TSRMLS_CC); - zend_object_iterator *new_iterator; - - zend_class_entry *ce_it = iterator && Z_TYPE_P(iterator) == IS_OBJECT ? Z_OBJCE_P(iterator) : NULL; - - if (!ce_it || !ce_it->get_iterator || (ce_it->get_iterator == zend_user_it_get_new_iterator && iterator == object)) { - if (!EG(exception)) { - zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Objects returned by %v::getIterator() must be traversable or implement interface Iterator", ce ? ce->name : Z_OBJCE_P(object)->name); - } - if (iterator) { - zval_ptr_dtor(&iterator); - } - return NULL; - } - - new_iterator = ce_it->get_iterator(ce_it, iterator, by_ref TSRMLS_CC); - zval_ptr_dtor(&iterator); - return new_iterator; -} -/* }}} */ - -/* {{{ zend_implement_traversable */ -static int zend_implement_traversable(zend_class_entry *interface, zend_class_entry *class_type TSRMLS_DC) -{ - /* check that class_type is traversable at c-level or implements at least one of 'aggregate' and 'Iterator' */ - zend_uint i; - - if (class_type->get_iterator || (class_type->parent && class_type->parent->get_iterator)) { - return SUCCESS; - } - for (i = 0; i < class_type->num_interfaces; i++) { - if (class_type->interfaces[i] == zend_ce_aggregate || class_type->interfaces[i] == zend_ce_iterator) { - return SUCCESS; - } - } - zend_error(E_CORE_ERROR, "Class %v must implement interface %v as part of either %v or %v", - class_type->name, - zend_ce_traversable->name, - zend_ce_iterator->name, - zend_ce_aggregate->name); - return FAILURE; -} -/* }}} */ - -/* {{{ zend_implement_aggregate */ -static int zend_implement_aggregate(zend_class_entry *interface, zend_class_entry *class_type TSRMLS_DC) -{ - int i, t = -1; - - if (class_type->get_iterator) { - if (class_type->type == ZEND_INTERNAL_CLASS) { - /* inheritance ensures the class has necessary userland methods */ - return SUCCESS; - } else if (class_type->get_iterator != zend_user_it_get_new_iterator) { - /* c-level get_iterator cannot be changed (exception being only Traversable is implmented) */ - if (class_type->num_interfaces) { - for (i = 0; i < class_type->num_interfaces; i++) { - if (class_type->interfaces[i] == zend_ce_iterator) { - return FAILURE; - } - if (class_type->interfaces[i] == zend_ce_traversable) { - t = i; - } - } - } - if (t == -1) { - return FAILURE; - } - } - } - class_type->iterator_funcs.zf_new_iterator = NULL; - class_type->get_iterator = zend_user_it_get_new_iterator; - return SUCCESS; -} -/* }}} */ - -/* {{{ zend_implement_iterator */ -static int zend_implement_iterator(zend_class_entry *interface, zend_class_entry *class_type TSRMLS_DC) -{ - if (class_type->get_iterator && class_type->get_iterator != zend_user_it_get_iterator) { - if (class_type->type == ZEND_INTERNAL_CLASS) { - /* inheritance ensures the class has the necessary userland methods */ - return SUCCESS; - } else if (class_type->get_iterator != zend_user_it_get_new_iterator) { - /* c-level get_iterator cannot be changed */ - return FAILURE; - } - } - class_type->get_iterator = zend_user_it_get_iterator; - class_type->iterator_funcs.zf_valid = NULL; - class_type->iterator_funcs.zf_current = NULL; - class_type->iterator_funcs.zf_key = NULL; - class_type->iterator_funcs.zf_next = NULL; - class_type->iterator_funcs.zf_rewind = NULL; - if (!class_type->iterator_funcs.funcs) { - class_type->iterator_funcs.funcs = &zend_interface_iterator_funcs_iterator; - } - return SUCCESS; -} -/* }}} */ - -/* {{{ zend_implement_arrayaccess */ -static int zend_implement_arrayaccess(zend_class_entry *interface, zend_class_entry *class_type TSRMLS_DC) -{ -#if 0 - /* get ht from ce */ - if (ht->read_dimension != zend_std_read_dimension - || ht->write_dimension != zend_std_write_dimension - || ht->has_dimension != zend_std_has_dimension - || ht->unset_dimension != zend_std_unset_dimension) { - return FAILURE; - } -#endif - return SUCCESS; -} -/* }}}*/ - -/* {{{ zend_user_serialize */ -int zend_user_serialize(zval *object, int *type, zstr *buffer, zend_uint *buf_len, zend_serialize_data *data TSRMLS_DC) -{ - zend_class_entry * ce = Z_OBJCE_P(object); - zval *retval; - int result; - - zend_call_method_with_0_params(&object, ce, &ce->serialize_func, "serialize", &retval); - - if (!retval || EG(exception)) { - result = FAILURE; - } else { - switch(Z_TYPE_P(retval)) { - case IS_NULL: - /* we could also make this '*buf_len = 0' but this allows to skip variables */ - zval_ptr_dtor(&retval); - return FAILURE; - case IS_UNICODE: - case IS_STRING: - *buffer = ezstrndup(Z_TYPE_P(retval), Z_UNIVAL_P(retval), Z_UNILEN_P(retval)); - *buf_len = Z_UNILEN_P(retval); - *type = Z_TYPE_P(retval); - result = SUCCESS; - break; - default: /* failure */ - result = FAILURE; - break; - } - zval_ptr_dtor(&retval); - } - - if (result == FAILURE) { - zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "%v::serialize() must return a string or NULL", ce->name); - } - return result; -} -/* }}} */ - -/* {{{ zend_user_unserialize */ -int zend_user_unserialize(zval **object, zend_class_entry *ce, int type, const zstr buf, zend_uint buf_len, zend_unserialize_data *data TSRMLS_DC) -{ - zval * zdata; - - object_init_ex(*object, ce); - - MAKE_STD_ZVAL(zdata); - ZVAL_ZSTRL(zdata, type, buf, buf_len, 1); - - zend_call_method_with_1_params(object, ce, &ce->unserialize_func, "unserialize", NULL, zdata); - - zval_ptr_dtor(&zdata); - - if (EG(exception)) { - return FAILURE; - } else { - return SUCCESS; - } -} -/* }}} */ - -/* {{{ zend_implement_serializable */ -static int zend_implement_serializable(zend_class_entry *interface, zend_class_entry *class_type TSRMLS_DC) -{ - if ((class_type->serialize && class_type->serialize != zend_user_serialize) - || (class_type->unserialize && class_type->unserialize != zend_user_unserialize) - ) { - return FAILURE; - } - class_type->serialize = zend_user_serialize; - class_type->unserialize = zend_user_unserialize; - return SUCCESS; -} -/* }}}*/ - -/* {{{ function tables */ -zend_function_entry zend_funcs_aggregate[] = { - ZEND_ABSTRACT_ME(iterator, getIterator, NULL) - {NULL, NULL, NULL} -}; - -zend_function_entry zend_funcs_iterator[] = { - ZEND_ABSTRACT_ME(iterator, current, NULL) - ZEND_ABSTRACT_ME(iterator, next, NULL) - ZEND_ABSTRACT_ME(iterator, key, NULL) - ZEND_ABSTRACT_ME(iterator, valid, NULL) - ZEND_ABSTRACT_ME(iterator, rewind, NULL) - {NULL, NULL, NULL} -}; - -zend_function_entry *zend_funcs_traversable = NULL; - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_arrayaccess_offset, 0, 0, 1) - ZEND_ARG_INFO(0, offset) -ZEND_END_ARG_INFO(); - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_arrayaccess_offset_get, 0, 0, 1) /* actually this should be return by ref but atm cannot be */ - ZEND_ARG_INFO(0, offset) -ZEND_END_ARG_INFO(); - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_arrayaccess_offset_value, 0, 0, 2) - ZEND_ARG_INFO(0, offset) - ZEND_ARG_INFO(0, value) -ZEND_END_ARG_INFO(); - -zend_function_entry zend_funcs_arrayaccess[] = { - ZEND_ABSTRACT_ME(arrayaccess, offsetExists, arginfo_arrayaccess_offset) - ZEND_ABSTRACT_ME(arrayaccess, offsetGet, arginfo_arrayaccess_offset_get) - ZEND_ABSTRACT_ME(arrayaccess, offsetSet, arginfo_arrayaccess_offset_value) - ZEND_ABSTRACT_ME(arrayaccess, offsetUnset, arginfo_arrayaccess_offset) - {NULL, NULL, NULL} -}; - -static -ZEND_BEGIN_ARG_INFO(arginfo_serializable_serialize, 0) - ZEND_ARG_INFO(0, serialized) -ZEND_END_ARG_INFO(); - -zend_function_entry zend_funcs_serializable[] = { - ZEND_ABSTRACT_ME(serializable, serialize, NULL) - ZEND_FENTRY(unserialize, NULL, arginfo_serializable_serialize, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT|ZEND_ACC_CTOR) - {NULL, NULL, NULL} -}; -/* }}} */ - -#define REGISTER_ITERATOR_INTERFACE(class_name, class_name_str) \ - {\ - zend_class_entry ce;\ - INIT_CLASS_ENTRY(ce, # class_name_str, zend_funcs_ ## class_name) \ - zend_ce_ ## class_name = zend_register_internal_interface(&ce TSRMLS_CC);\ - zend_ce_ ## class_name->interface_gets_implemented = zend_implement_ ## class_name;\ - } - -#define REGISTER_ITERATOR_IMPLEMENT(class_name, interface_name) \ - zend_class_implements(zend_ce_ ## class_name TSRMLS_CC, 1, zend_ce_ ## interface_name) - -/* {{{ zend_register_interfaces */ -ZEND_API void zend_register_interfaces(TSRMLS_D) -{ - REGISTER_ITERATOR_INTERFACE(traversable, Traversable); - - REGISTER_ITERATOR_INTERFACE(aggregate, IteratorAggregate); - REGISTER_ITERATOR_IMPLEMENT(aggregate, traversable); - - REGISTER_ITERATOR_INTERFACE(iterator, Iterator); - REGISTER_ITERATOR_IMPLEMENT(iterator, traversable); - - REGISTER_ITERATOR_INTERFACE(arrayaccess, ArrayAccess); - - REGISTER_ITERATOR_INTERFACE(serializable, Serializable) -} -/* }}} */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_interfaces.h b/Zend/zend_interfaces.h deleted file mode 100755 index 5f9f556aab2b9..0000000000000 --- a/Zend/zend_interfaces.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Marcus Boerger | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_INTERFACES_H -#define ZEND_INTERFACES_H - -#include "zend.h" -#include "zend_API.h" - -BEGIN_EXTERN_C() - -extern ZEND_API zend_class_entry *zend_ce_traversable; -extern ZEND_API zend_class_entry *zend_ce_aggregate; -extern ZEND_API zend_class_entry *zend_ce_iterator; -extern ZEND_API zend_class_entry *zend_ce_arrayaccess; -extern ZEND_API zend_class_entry *zend_ce_serializable; - -typedef struct _zend_user_iterator { - zend_object_iterator it; - zend_class_entry *ce; - zval *value; -} zend_user_iterator; - -ZEND_API zval* zend_u_call_method(zval **object_pp, zend_class_entry *obj_ce, zend_function **fn_proxy, int function_name_type, zstr function_name, int function_name_len, zval **retval_ptr_ptr, int param_count, zval* arg1, zval* arg2 TSRMLS_DC); - -#define zend_call_method_with_0_params(obj, obj_ce, fn_proxy, function_name, retval) \ - zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 0, NULL, NULL TSRMLS_CC) - -#define zend_call_method_with_1_params(obj, obj_ce, fn_proxy, function_name, retval, arg1) \ - zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 1, arg1, NULL TSRMLS_CC) - -#define zend_call_method_with_2_params(obj, obj_ce, fn_proxy, function_name, retval, arg1, arg2) \ - zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 2, arg1, arg2 TSRMLS_CC) - -static inline zval* zend_call_method(zval **obj, zend_class_entry *obj_ce, zend_function **fn_proxy, char *function_name, int function_name_len, zval **retval_ptr_ptr, int param_count, zval* arg1, zval* arg2 TSRMLS_DC) -{ - return zend_u_call_method(obj, obj_ce, fn_proxy, IS_STRING, ZSTR(function_name), function_name_len, retval_ptr_ptr, param_count, arg1, arg2 TSRMLS_CC); -} - -ZEND_API void zend_user_it_rewind(zend_object_iterator *_iter TSRMLS_DC); -ZEND_API int zend_user_it_valid(zend_object_iterator *_iter TSRMLS_DC); -ZEND_API int zend_user_it_get_current_key(zend_object_iterator *_iter, zstr *str_key, uint *str_key_len, ulong *int_key TSRMLS_DC); -ZEND_API void zend_user_it_get_current_data(zend_object_iterator *_iter, zval ***data TSRMLS_DC); -ZEND_API void zend_user_it_move_forward(zend_object_iterator *_iter TSRMLS_DC); -ZEND_API void zend_user_it_invalidate_current(zend_object_iterator *_iter TSRMLS_DC); - -ZEND_API zval *zend_user_it_new_iterator(zend_class_entry *ce, zval *object TSRMLS_DC); -ZEND_API zend_object_iterator *zend_user_it_get_new_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC); - -ZEND_API void zend_register_interfaces(TSRMLS_D); - -END_EXTERN_C() - -#endif /* ZEND_INTERFACES_H */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_istdiostream.h b/Zend/zend_istdiostream.h deleted file mode 100644 index 345f480f8ad46..0000000000000 --- a/Zend/zend_istdiostream.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef _ZEND_STDIOSTREAM -#define _ZEND_STDIOSTREAM - -#if defined(ZTS) && !defined(HAVE_CLASS_ISTDIOSTREAM) -class istdiostream : public istream -{ -private: - stdiobuf _file; -public: - istdiostream (FILE* __f) : istream(), _file(__f) { init(&_file); } - stdiobuf* rdbuf()/* const */ { return &_file; } -}; -#endif - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_iterators.c b/Zend/zend_iterators.c deleted file mode 100755 index 51fcaa56e66d9..0000000000000 --- a/Zend/zend_iterators.c +++ /dev/null @@ -1,107 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - | Marcus Boerger | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#include "zend.h" -#include "zend_API.h" - -static zend_class_entry zend_iterator_class_entry; - -static zend_object_handlers iterator_object_handlers = { - ZEND_OBJECTS_STORE_HANDLERS, - NULL, /* prop read */ - NULL, /* prop write */ - NULL, /* read dim */ - NULL, /* write dim */ - NULL, - NULL, /* get */ - NULL, /* set */ - NULL, /* has prop */ - NULL, /* unset prop */ - NULL, /* has dim */ - NULL, /* unset dim */ - NULL, /* props get */ - NULL, /* method get */ - NULL, /* call */ - NULL, /* get ctor */ - NULL, /* get_ce */ - NULL, /* get class name */ - NULL, /* compare */ - NULL, /* cast */ - NULL /* count */ -}; - -ZEND_API void zend_register_iterator_wrapper(TSRMLS_D) -{ - INIT_CLASS_ENTRY(zend_iterator_class_entry, "__iterator_wrapper", NULL); - free(zend_iterator_class_entry.name.s); - zend_iterator_class_entry.name.s = "__iterator_wrapper"; -} - -static void iter_wrapper_dtor(void *object, zend_object_handle handle TSRMLS_DC) -{ - zend_object_iterator *iter = (zend_object_iterator*)object; - iter->funcs->dtor(iter TSRMLS_CC); -} - -ZEND_API zval *zend_iterator_wrap(zend_object_iterator *iter TSRMLS_DC) -{ - zval *wrapped; - - MAKE_STD_ZVAL(wrapped); - Z_TYPE_P(wrapped) = IS_OBJECT; - Z_OBJ_HANDLE_P(wrapped) = zend_objects_store_put(iter, iter_wrapper_dtor, NULL, NULL TSRMLS_CC); - Z_OBJ_HT_P(wrapped) = &iterator_object_handlers; - - return wrapped; -} - -ZEND_API enum zend_object_iterator_kind zend_iterator_unwrap( - zval *array_ptr, zend_object_iterator **iter TSRMLS_DC) -{ - switch (Z_TYPE_P(array_ptr)) { - case IS_OBJECT: - if (Z_OBJ_HT_P(array_ptr) == &iterator_object_handlers) { - *iter = (zend_object_iterator *)zend_object_store_get_object(array_ptr TSRMLS_CC); - return ZEND_ITER_OBJECT; - } - if (HASH_OF(array_ptr)) { - return ZEND_ITER_PLAIN_OBJECT; - } - return ZEND_ITER_INVALID; - - case IS_ARRAY: - if (HASH_OF(array_ptr)) { - return ZEND_ITER_PLAIN_ARRAY; - } - return ZEND_ITER_INVALID; - - default: - return ZEND_ITER_INVALID; - } -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_iterators.h b/Zend/zend_iterators.h deleted file mode 100755 index 719ee41b9517b..0000000000000 --- a/Zend/zend_iterators.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - | Marcus Boerger | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -/* These iterators were designed to operate within the foreach() - * structures provided by the engine, but could be extended for use - * with other iterative engine opcodes. - * These methods have similar semantics to the zend_hash API functions - * with similar names. - * */ - -typedef struct _zend_object_iterator zend_object_iterator; - -typedef struct _zend_object_iterator_funcs { - /* release all resources associated with this iterator instance */ - void (*dtor)(zend_object_iterator *iter TSRMLS_DC); - - /* check for end of iteration (FAILURE or SUCCESS if data is valid) */ - int (*valid)(zend_object_iterator *iter TSRMLS_DC); - - /* fetch the item data for the current element */ - void (*get_current_data)(zend_object_iterator *iter, zval ***data TSRMLS_DC); - - /* fetch the key for the current element (return HASH_KEY_IS_STRING or HASH_KEY_IS_LONG) (optional, may be NULL) */ - int (*get_current_key)(zend_object_iterator *iter, zstr *str_key, uint *str_key_len, ulong *int_key TSRMLS_DC); - - /* step forwards to next element */ - void (*move_forward)(zend_object_iterator *iter TSRMLS_DC); - - /* rewind to start of data (optional, may be NULL) */ - void (*rewind)(zend_object_iterator *iter TSRMLS_DC); - - /* invalidate current value/key (optional, may be NULL) */ - void (*invalidate_current)(zend_object_iterator *iter TSRMLS_DC); -} zend_object_iterator_funcs; - -struct _zend_object_iterator { - void *data; - zend_object_iterator_funcs *funcs; - ulong index; /* private to fe_reset/fe_fetch opcodes */ -}; - -typedef struct _zend_class_iterator_funcs { - zend_object_iterator_funcs *funcs; - union _zend_function *zf_new_iterator; - union _zend_function *zf_valid; - union _zend_function *zf_current; - union _zend_function *zf_key; - union _zend_function *zf_next; - union _zend_function *zf_rewind; -} zend_class_iterator_funcs; - -enum zend_object_iterator_kind { - ZEND_ITER_INVALID, - ZEND_ITER_PLAIN_ARRAY, - ZEND_ITER_PLAIN_OBJECT, - ZEND_ITER_OBJECT -}; - -BEGIN_EXTERN_C() -/* given a zval, returns stuff that can be used to iterate it. */ -ZEND_API enum zend_object_iterator_kind zend_iterator_unwrap(zval *array_ptr, zend_object_iterator **iter TSRMLS_DC); - -/* given an iterator, wrap it up as a zval for use by the engine opcodes */ -ZEND_API zval *zend_iterator_wrap(zend_object_iterator *iter TSRMLS_DC); - -ZEND_API void zend_register_iterator_wrapper(TSRMLS_D); -END_EXTERN_C() - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y deleted file mode 100644 index 8e92070a5d6dc..0000000000000 --- a/Zend/zend_language_parser.y +++ /dev/null @@ -1,942 +0,0 @@ -%{ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -/* - * LALR shift/reduce conflicts and how they are resolved: - * - * - 2 shift/reduce conflicts due to the dangeling elseif/else ambiguity. Solved by shift. - * - 1 shift/reduce conflict due to arrays within encapsulated strings. Solved by shift. - * - 1 shift/reduce conflict due to objects within encapsulated strings. Solved by shift. - * - */ - - -#include "zend_compile.h" -#include "zend.h" -#include "zend_list.h" -#include "zend_globals.h" -#include "zend_API.h" -#include "zend_constants.h" - - -#define YYERROR_VERBOSE -#define YYSTYPE znode -#ifdef ZTS -# define YYPARSE_PARAM tsrm_ls -# define YYLEX_PARAM tsrm_ls -#endif - - -%} - -%pure_parser -%expect 4 - -%left T_INCLUDE T_INCLUDE_ONCE T_EVAL T_REQUIRE T_REQUIRE_ONCE -%left ',' -%left T_LOGICAL_OR -%left T_LOGICAL_XOR -%left T_LOGICAL_AND -%right T_PRINT -%left '=' T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL T_XOR_EQUAL T_SL_EQUAL T_SR_EQUAL -%left '?' ':' -%left T_BOOLEAN_OR -%left T_BOOLEAN_AND -%left '|' -%left '^' -%left '&' -%nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL -%nonassoc '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL -%left T_SL T_SR -%left '+' '-' '.' -%left '*' '/' '%' -%right '!' -%nonassoc T_INSTANCEOF -%right '~' T_INC T_DEC T_INT_CAST T_DOUBLE_CAST T_STRING_CAST T_UNICODE_CAST T_BINARY_CAST T_ARRAY_CAST T_OBJECT_CAST T_BOOL_CAST T_UNSET_CAST '@' -%right '[' -%nonassoc T_NEW T_CLONE -%token T_EXIT -%token T_IF -%left T_ELSEIF -%left T_ELSE -%left T_ENDIF -%token T_LNUMBER -%token T_DNUMBER -%token T_STRING -%token T_STRING_VARNAME -%token T_VARIABLE -%token T_NUM_STRING -%token T_INLINE_HTML -%token T_CHARACTER -%token T_BAD_CHARACTER -%token T_ENCAPSED_AND_WHITESPACE -%token T_CONSTANT_ENCAPSED_STRING -%token T_ECHO -%token T_DO -%token T_WHILE -%token T_ENDWHILE -%token T_FOR -%token T_ENDFOR -%token T_FOREACH -%token T_ENDFOREACH -%token T_DECLARE -%token T_ENDDECLARE -%token T_AS -%token T_SWITCH -%token T_ENDSWITCH -%token T_CASE -%token T_DEFAULT -%token T_BREAK -%token T_CONTINUE -%token T_GOTO -%token T_FUNCTION -%token T_CONST -%token T_RETURN -%token T_TRY -%token T_CATCH -%token T_THROW -%token T_USE -%token T_GLOBAL -%right T_STATIC T_ABSTRACT T_FINAL T_PRIVATE T_PROTECTED T_PUBLIC -%token T_VAR -%token T_UNSET -%token T_ISSET -%token T_EMPTY -%token T_HALT_COMPILER -%token T_CLASS -%token T_INTERFACE -%token T_EXTENDS -%token T_IMPLEMENTS -%token T_OBJECT_OPERATOR -%token T_DOUBLE_ARROW -%token T_LIST -%token T_ARRAY -%token T_CLASS_C -%token T_METHOD_C -%token T_FUNC_C -%token T_LINE -%token T_FILE -%token T_COMMENT -%token T_DOC_COMMENT -%token T_OPEN_TAG -%token T_OPEN_TAG_WITH_ECHO -%token T_CLOSE_TAG -%token T_WHITESPACE -%token T_START_HEREDOC -%token T_END_HEREDOC -%token T_DOLLAR_OPEN_CURLY_BRACES -%token T_CURLY_OPEN -%token T_PAAMAYIM_NEKUDOTAYIM -%token T_BINARY_DOUBLE -%token T_BINARY_HEREDOC - -%% /* Rules */ - -start: - top_statement_list -; - -top_statement_list: - top_statement_list { zend_do_extended_info(TSRMLS_C); } top_statement { HANDLE_INTERACTIVE(); } - | /* empty */ -; - - -top_statement: - statement - | function_declaration_statement { zend_do_early_binding(TSRMLS_C); } - | class_declaration_statement { zend_do_early_binding(TSRMLS_C); } - | T_HALT_COMPILER '(' ')' ';' { zval c; if (zend_get_constant("__COMPILER_HALT_OFFSET__", sizeof("__COMPILER_HALT_OFFSET__") - 1, &c TSRMLS_CC)) { zval_dtor(&c); zend_error(E_COMPILE_ERROR, "__HALT_COMPILER() can only be used once per request"); } else { REGISTER_MAIN_LONG_CONSTANT("__COMPILER_HALT_OFFSET__", zend_get_scanned_file_offset(TSRMLS_C), CONST_CS); } YYACCEPT; } -; - - -inner_statement_list: - inner_statement_list { zend_do_extended_info(TSRMLS_C); } inner_statement { HANDLE_INTERACTIVE(); } - | /* empty */ -; - - -inner_statement: - statement - | function_declaration_statement - | class_declaration_statement - | T_HALT_COMPILER '(' ')' ';' { zend_error(E_COMPILE_ERROR, "__HALT_COMPILER() can only be used from the outermost scope"); } -; - - -statement: - unticked_statement { zend_do_ticks(TSRMLS_C); } - | T_STRING ':' { zend_do_label(&$1 TSRMLS_CC); } -; - -unticked_statement: - '{' inner_statement_list '}' - | T_IF '(' expr ')' { zend_do_if_cond(&$3, &$4 TSRMLS_CC); } statement { zend_do_if_after_statement(&$4, 1 TSRMLS_CC); } elseif_list else_single { zend_do_if_end(TSRMLS_C); } - | T_IF '(' expr ')' ':' { zend_do_if_cond(&$3, &$4 TSRMLS_CC); } inner_statement_list { zend_do_if_after_statement(&$4, 1 TSRMLS_CC); } new_elseif_list new_else_single T_ENDIF ';' { zend_do_if_end(TSRMLS_C); } - | T_WHILE '(' { $1.u.opline_num = get_next_op_number(CG(active_op_array)); } expr ')' { zend_do_while_cond(&$4, &$5 TSRMLS_CC); } while_statement { zend_do_while_end(&$1, &$5 TSRMLS_CC); } - | T_DO { $1.u.opline_num = get_next_op_number(CG(active_op_array)); zend_do_do_while_begin(TSRMLS_C); } statement T_WHILE '(' { $5.u.opline_num = get_next_op_number(CG(active_op_array)); } expr ')' ';' { zend_do_do_while_end(&$1, &$5, &$7 TSRMLS_CC); } - | T_FOR - '(' - for_expr - ';' { zend_do_free(&$3 TSRMLS_CC); $4.u.opline_num = get_next_op_number(CG(active_op_array)); } - for_expr - ';' { zend_do_extended_info(TSRMLS_C); zend_do_for_cond(&$6, &$7 TSRMLS_CC); } - for_expr - ')' { zend_do_free(&$9 TSRMLS_CC); zend_do_for_before_statement(&$4, &$7 TSRMLS_CC); } - for_statement { zend_do_for_end(&$7 TSRMLS_CC); } - | T_SWITCH '(' expr ')' { zend_do_switch_cond(&$3 TSRMLS_CC); } switch_case_list { zend_do_switch_end(&$6 TSRMLS_CC); } - | T_BREAK ';' { zend_do_brk_cont(ZEND_BRK, NULL TSRMLS_CC); } - | T_BREAK expr ';' { zend_do_brk_cont(ZEND_BRK, &$2 TSRMLS_CC); } - | T_CONTINUE ';' { zend_do_brk_cont(ZEND_CONT, NULL TSRMLS_CC); } - | T_CONTINUE expr ';' { zend_do_brk_cont(ZEND_CONT, &$2 TSRMLS_CC); } - | T_RETURN ';' { zend_do_return(NULL, 0 TSRMLS_CC); } - | T_RETURN expr_without_variable ';' { zend_do_return(&$2, 0 TSRMLS_CC); } - | T_RETURN variable ';' { zend_do_return(&$2, 1 TSRMLS_CC); } - | T_GLOBAL global_var_list ';' - | T_STATIC static_var_list ';' - | T_ECHO echo_expr_list ';' - | T_INLINE_HTML { zend_do_echo(&$1, 1 TSRMLS_CC); } - | expr ';' { zend_do_free(&$1 TSRMLS_CC); } - | T_USE use_filename ';' { zend_error(E_COMPILE_ERROR,"use: Not yet supported. Please use include_once() or require_once()"); zval_dtor(&$2.u.constant); } - | T_UNSET '(' unset_variables ')' ';' - | T_FOREACH '(' variable T_AS - { zend_do_foreach_begin(&$1, &$2, &$3, &$4, 1 TSRMLS_CC); } - foreach_variable foreach_optional_arg ')' { zend_do_foreach_cont(&$1, &$2, &$4, &$6, &$7 TSRMLS_CC); } - foreach_statement { zend_do_foreach_end(&$1, &$4 TSRMLS_CC); } - | T_FOREACH '(' expr_without_variable T_AS - { zend_do_foreach_begin(&$1, &$2, &$3, &$4, 0 TSRMLS_CC); } - variable foreach_optional_arg ')' { zend_check_writable_variable(&$6); zend_do_foreach_cont(&$1, &$2, &$4, &$6, &$7 TSRMLS_CC); } - foreach_statement { zend_do_foreach_end(&$1, &$4 TSRMLS_CC); } - | T_DECLARE { $1.u.opline_num = get_next_op_number(CG(active_op_array)); zend_do_declare_begin(TSRMLS_C); } '(' declare_list ')' declare_statement { zend_do_declare_end(&$1 TSRMLS_CC); } - | ';' /* empty statement */ - | T_TRY { zend_do_try(&$1 TSRMLS_CC); } '{' inner_statement_list '}' - T_CATCH '(' { zend_initialize_try_catch_element(&$1 TSRMLS_CC); } - fully_qualified_class_name { zend_do_first_catch(&$7 TSRMLS_CC); } - T_VARIABLE ')' { zend_do_begin_catch(&$1, &$9, &$11, 1 TSRMLS_CC); } - '{' inner_statement_list '}' { zend_do_end_catch(&$1 TSRMLS_CC); } - additional_catches { zend_do_mark_last_catch(&$7, &$18 TSRMLS_CC); } - | T_THROW expr ';' { zend_do_throw(&$2 TSRMLS_CC); } - | T_GOTO T_STRING ';' { zend_do_goto(&$2 TSRMLS_CC); } -; - - -additional_catches: - non_empty_additional_catches { $$ = $1; } - | /* empty */ { $$.u.opline_num = -1; } -; - -non_empty_additional_catches: - additional_catch { $$ = $1; } - | non_empty_additional_catches additional_catch { $$ = $2; } -; - - -additional_catch: - T_CATCH '(' fully_qualified_class_name { $$.u.opline_num = get_next_op_number(CG(active_op_array)); } T_VARIABLE ')' { zend_do_begin_catch(&$1, &$3, &$5, 0 TSRMLS_CC); } '{' inner_statement_list '}' { zend_do_end_catch(&$1 TSRMLS_CC); } -; - - -unset_variables: - unset_variable - | unset_variables ',' unset_variable -; - -unset_variable: - variable { zend_do_end_variable_parse(BP_VAR_UNSET, 0 TSRMLS_CC); zend_do_unset(&$1 TSRMLS_CC); } -; - -use_filename: - T_CONSTANT_ENCAPSED_STRING { $$ = $1; } - | '(' T_CONSTANT_ENCAPSED_STRING ')' { $$ = $2; } -; - - -function_declaration_statement: - unticked_function_declaration_statement { zend_do_ticks(TSRMLS_C); } -; - -class_declaration_statement: - unticked_class_declaration_statement { zend_do_ticks(TSRMLS_C); } -; - - -is_reference: - /* empty */ { $$.op_type = ZEND_RETURN_VAL; } - | '&' { $$.op_type = ZEND_RETURN_REF; } -; - - -unticked_function_declaration_statement: - T_FUNCTION { $1.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$1, &$4, 0, $3.op_type, NULL TSRMLS_CC); } - '(' parameter_list ')' '{' inner_statement_list '}' { zend_do_end_function_declaration(&$1 TSRMLS_CC); } -; - -unticked_class_declaration_statement: - class_entry_type T_STRING extends_from - { zend_do_begin_class_declaration(&$1, &$2, &$3 TSRMLS_CC); } - implements_list - '{' - class_statement_list - '}' { zend_do_end_class_declaration(&$1, &$2 TSRMLS_CC); } - | interface_entry T_STRING - { zend_do_begin_class_declaration(&$1, &$2, NULL TSRMLS_CC); } - interface_extends_list - '{' - class_statement_list - '}' { zend_do_end_class_declaration(&$1, &$2 TSRMLS_CC); } -; - - -class_entry_type: - T_CLASS { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = 0; } - | T_ABSTRACT T_CLASS { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = ZEND_ACC_EXPLICIT_ABSTRACT_CLASS; } - | T_FINAL T_CLASS { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = ZEND_ACC_FINAL_CLASS; } -; - -extends_from: - /* empty */ { $$.op_type = IS_UNUSED; } - | T_EXTENDS fully_qualified_class_name { $$ = $2; } -; - -interface_entry: - T_INTERFACE { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = ZEND_ACC_INTERFACE; } -; - -interface_extends_list: - /* empty */ - | T_EXTENDS interface_list -; - -implements_list: - /* empty */ - | T_IMPLEMENTS interface_list -; - -interface_list: - fully_qualified_class_name { zend_do_implements_interface(&$1 TSRMLS_CC); } - | interface_list ',' fully_qualified_class_name { zend_do_implements_interface(&$3 TSRMLS_CC); } -; - -foreach_optional_arg: - /* empty */ { $$.op_type = IS_UNUSED; } - | T_DOUBLE_ARROW foreach_variable { $$ = $2; } -; - - -foreach_variable: - variable { zend_check_writable_variable(&$1); $$ = $1; } - | '&' variable { zend_check_writable_variable(&$2); $$ = $2; $$.u.EA.type |= ZEND_PARSED_REFERENCE_VARIABLE; } -; - -for_statement: - statement - | ':' inner_statement_list T_ENDFOR ';' -; - - -foreach_statement: - statement - | ':' inner_statement_list T_ENDFOREACH ';' -; - - -declare_statement: - statement - | ':' inner_statement_list T_ENDDECLARE ';' -; - - -declare_list: - T_STRING '=' static_scalar { zend_do_declare_stmt(&$1, &$3 TSRMLS_CC); } - | declare_list ',' T_STRING '=' static_scalar { zend_do_declare_stmt(&$3, &$5 TSRMLS_CC); } -; - - -switch_case_list: - '{' case_list '}' { $$ = $2; } - | '{' ';' case_list '}' { $$ = $3; } - | ':' case_list T_ENDSWITCH ';' { $$ = $2; } - | ':' ';' case_list T_ENDSWITCH ';' { $$ = $3; } -; - - -case_list: - /* empty */ { $$.op_type = IS_UNUSED; } - | case_list T_CASE expr case_separator { zend_do_extended_info(TSRMLS_C); zend_do_case_before_statement(&$1, &$2, &$3 TSRMLS_CC); } inner_statement_list { zend_do_case_after_statement(&$$, &$2 TSRMLS_CC); $$.op_type = IS_CONST; } - | case_list T_DEFAULT case_separator { zend_do_extended_info(TSRMLS_C); zend_do_default_before_statement(&$1, &$2 TSRMLS_CC); } inner_statement_list { zend_do_case_after_statement(&$$, &$2 TSRMLS_CC); $$.op_type = IS_CONST; } -; - - -case_separator: - ':' - | ';' -; - - -while_statement: - statement - | ':' inner_statement_list T_ENDWHILE ';' -; - - - -elseif_list: - /* empty */ - | elseif_list T_ELSEIF '(' expr ')' { zend_do_if_cond(&$4, &$5 TSRMLS_CC); } statement { zend_do_if_after_statement(&$5, 0 TSRMLS_CC); } -; - - -new_elseif_list: - /* empty */ - | new_elseif_list T_ELSEIF '(' expr ')' ':' { zend_do_if_cond(&$4, &$5 TSRMLS_CC); } inner_statement_list { zend_do_if_after_statement(&$5, 0 TSRMLS_CC); } -; - - -else_single: - /* empty */ - | T_ELSE statement -; - - -new_else_single: - /* empty */ - | T_ELSE ':' inner_statement_list -; - - -parameter_list: - non_empty_parameter_list - | /* empty */ -; - - -non_empty_parameter_list: - optional_class_type T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$2, 0 TSRMLS_CC); $$.op_type = IS_CONST; Z_LVAL($$.u.constant)=1; Z_TYPE($$.u.constant)=IS_LONG; INIT_PZVAL(&$$.u.constant); zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, &$1, &$2, 0 TSRMLS_CC); } - | optional_class_type '&' T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$3, 0 TSRMLS_CC); $$.op_type = IS_CONST; Z_LVAL($$.u.constant)=1; Z_TYPE($$.u.constant)=IS_LONG; INIT_PZVAL(&$$.u.constant); zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, &$1, &$3, 1 TSRMLS_CC); } - | optional_class_type '&' T_VARIABLE '=' static_scalar { znode tmp; fetch_simple_variable(&tmp, &$3, 0 TSRMLS_CC); $$.op_type = IS_CONST; Z_LVAL($$.u.constant)=1; Z_TYPE($$.u.constant)=IS_LONG; INIT_PZVAL(&$$.u.constant); zend_do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, &$5, &$1, &$3, 1 TSRMLS_CC); } - | optional_class_type T_VARIABLE '=' static_scalar { znode tmp; fetch_simple_variable(&tmp, &$2, 0 TSRMLS_CC); $$.op_type = IS_CONST; Z_LVAL($$.u.constant)=1; Z_TYPE($$.u.constant)=IS_LONG; INIT_PZVAL(&$$.u.constant); zend_do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, &$4, &$1, &$2, 0 TSRMLS_CC); } - | non_empty_parameter_list ',' optional_class_type T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$4, 0 TSRMLS_CC); $$=$1; Z_LVAL($$.u.constant)++; zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, &$3, &$4, 0 TSRMLS_CC); } - | non_empty_parameter_list ',' optional_class_type '&' T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$5, 0 TSRMLS_CC); $$=$1; Z_LVAL($$.u.constant)++; zend_do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, &$3, &$5, 1 TSRMLS_CC); } - | non_empty_parameter_list ',' optional_class_type '&' T_VARIABLE '=' static_scalar { znode tmp; fetch_simple_variable(&tmp, &$5, 0 TSRMLS_CC); $$=$1; Z_LVAL($$.u.constant)++; zend_do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, &$7, &$3, &$5, 1 TSRMLS_CC); } - | non_empty_parameter_list ',' optional_class_type T_VARIABLE '=' static_scalar { znode tmp; fetch_simple_variable(&tmp, &$4, 0 TSRMLS_CC); $$=$1; Z_LVAL($$.u.constant)++; zend_do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, &$6, &$3, &$4, 0 TSRMLS_CC); } -; - - -optional_class_type: - /* empty */ { $$.op_type = IS_UNUSED; } - | T_STRING { $$ = $1; } - | T_ARRAY { $$.op_type = IS_CONST; Z_TYPE($$.u.constant)=IS_NULL;} -; - - -function_call_parameter_list: - non_empty_function_call_parameter_list { $$ = $1; } - | /* empty */ { Z_LVAL($$.u.constant) = 0; } -; - - -non_empty_function_call_parameter_list: - expr_without_variable { Z_LVAL($$.u.constant) = 1; zend_do_pass_param(&$1, ZEND_SEND_VAL, Z_LVAL($$.u.constant) TSRMLS_CC); } - | variable { Z_LVAL($$.u.constant) = 1; zend_do_pass_param(&$1, ZEND_SEND_VAR, Z_LVAL($$.u.constant) TSRMLS_CC); } - | '&' w_variable { Z_LVAL($$.u.constant) = 1; zend_do_pass_param(&$2, ZEND_SEND_REF, Z_LVAL($$.u.constant) TSRMLS_CC); } - | non_empty_function_call_parameter_list ',' expr_without_variable { Z_LVAL($$.u.constant)=Z_LVAL($1.u.constant)+1; zend_do_pass_param(&$3, ZEND_SEND_VAL, Z_LVAL($$.u.constant) TSRMLS_CC); } - | non_empty_function_call_parameter_list ',' variable { Z_LVAL($$.u.constant)=Z_LVAL($1.u.constant)+1; zend_do_pass_param(&$3, ZEND_SEND_VAR, Z_LVAL($$.u.constant) TSRMLS_CC); } - | non_empty_function_call_parameter_list ',' '&' w_variable { Z_LVAL($$.u.constant)=Z_LVAL($1.u.constant)+1; zend_do_pass_param(&$4, ZEND_SEND_REF, Z_LVAL($$.u.constant) TSRMLS_CC); } -; - -global_var_list: - global_var_list ',' global_var { zend_do_fetch_global_variable(&$3, NULL, ZEND_FETCH_GLOBAL_LOCK TSRMLS_CC); } - | global_var { zend_do_fetch_global_variable(&$1, NULL, ZEND_FETCH_GLOBAL_LOCK TSRMLS_CC); } -; - - -global_var: - T_VARIABLE { $$ = $1; } - | '$' r_variable { zend_do_normalization(&$$, &$2 TSRMLS_CC); } - | '$' '{' expr '}' { zend_do_normalization(&$$, &$3 TSRMLS_CC); } -; - - -static_var_list: - static_var_list ',' T_VARIABLE { zend_do_fetch_static_variable(&$3, NULL, ZEND_FETCH_STATIC TSRMLS_CC); } - | static_var_list ',' T_VARIABLE '=' static_scalar { zend_do_fetch_static_variable(&$3, &$5, ZEND_FETCH_STATIC TSRMLS_CC); } - | T_VARIABLE { zend_do_fetch_static_variable(&$1, NULL, ZEND_FETCH_STATIC TSRMLS_CC); } - | T_VARIABLE '=' static_scalar { zend_do_fetch_static_variable(&$1, &$3, ZEND_FETCH_STATIC TSRMLS_CC); } - -; - - -class_statement_list: - class_statement_list class_statement - | /* empty */ -; - - -class_statement: - variable_modifiers { CG(access_type) = Z_LVAL($1.u.constant); } class_variable_declaration ';' - | class_constant_declaration ';' - | method_modifiers T_FUNCTION { $2.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$2, &$5, 1, $4.op_type, &$1 TSRMLS_CC); } '(' - parameter_list ')' method_body { zend_do_abstract_method(&$5, &$1, &$10 TSRMLS_CC); zend_do_end_function_declaration(&$2 TSRMLS_CC); } -; - - -method_body: - ';' /* abstract method */ { Z_LVAL($$.u.constant) = ZEND_ACC_ABSTRACT; } - | '{' inner_statement_list '}' { Z_LVAL($$.u.constant) = 0; } -; - -variable_modifiers: - non_empty_member_modifiers { $$ = $1; } - | T_VAR { Z_LVAL($$.u.constant) = ZEND_ACC_PUBLIC; } -; - -method_modifiers: - /* empty */ { Z_LVAL($$.u.constant) = ZEND_ACC_PUBLIC; } - | non_empty_member_modifiers { $$ = $1; if (!(Z_LVAL($$.u.constant) & ZEND_ACC_PPP_MASK)) { Z_LVAL($$.u.constant) |= ZEND_ACC_PUBLIC; } } -; - -non_empty_member_modifiers: - member_modifier { $$ = $1; } - | non_empty_member_modifiers member_modifier { Z_LVAL($$.u.constant) = zend_do_verify_access_types(&$1, &$2); } -; - -member_modifier: - T_PUBLIC { Z_LVAL($$.u.constant) = ZEND_ACC_PUBLIC; } - | T_PROTECTED { Z_LVAL($$.u.constant) = ZEND_ACC_PROTECTED; } - | T_PRIVATE { Z_LVAL($$.u.constant) = ZEND_ACC_PRIVATE; } - | T_STATIC { Z_LVAL($$.u.constant) = ZEND_ACC_STATIC; } - | T_ABSTRACT { Z_LVAL($$.u.constant) = ZEND_ACC_ABSTRACT; } - | T_FINAL { Z_LVAL($$.u.constant) = ZEND_ACC_FINAL; } -; - -class_variable_declaration: - class_variable_declaration ',' T_VARIABLE { zend_do_declare_property(&$3, NULL, CG(access_type) TSRMLS_CC); } - | class_variable_declaration ',' T_VARIABLE '=' static_scalar { zend_do_declare_property(&$3, &$5, CG(access_type) TSRMLS_CC); } - | T_VARIABLE { zend_do_declare_property(&$1, NULL, CG(access_type) TSRMLS_CC); } - | T_VARIABLE '=' static_scalar { zend_do_declare_property(&$1, &$3, CG(access_type) TSRMLS_CC); } -; - -class_constant_declaration: - class_constant_declaration ',' T_STRING '=' static_scalar { zend_do_declare_class_constant(&$3, &$5 TSRMLS_CC); } - | T_CONST T_STRING '=' static_scalar { zend_do_declare_class_constant(&$2, &$4 TSRMLS_CC); } -; - -echo_expr_list: - echo_expr_list ',' expr { zend_do_echo(&$3, 0 TSRMLS_CC); } - | expr { zend_do_echo(&$1, 0 TSRMLS_CC); } -; - - -for_expr: - /* empty */ { $$.op_type = IS_CONST; Z_TYPE($$.u.constant) = IS_BOOL; Z_LVAL($$.u.constant) = 1; } - | non_empty_for_expr { $$ = $1; } -; - -non_empty_for_expr: - non_empty_for_expr ',' { zend_do_free(&$1 TSRMLS_CC); } expr { $$ = $4; } - | expr { $$ = $1; } -; - -expr_without_variable: - T_LIST '(' { zend_do_list_init(TSRMLS_C); } assignment_list ')' '=' expr { zend_do_list_end(&$$, &$7 TSRMLS_CC); } - | variable '=' expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign(&$$, &$1, &$3 TSRMLS_CC); } - | variable '=' '&' variable { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign_ref(&$$, &$1, &$4 TSRMLS_CC); } - | variable '=' '&' T_NEW class_name_reference { zend_error(E_STRICT, "Assigning the return value of new by reference is deprecated"); zend_check_writable_variable(&$1); zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$4, &$5 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$3, &$4, &$7 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign_ref(&$$, &$1, &$3 TSRMLS_CC); } - | T_NEW class_name_reference { zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$1, &$2 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$$, &$1, &$4 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); $$.u.EA.type = ZEND_PARSED_NEW; } - | T_CLONE expr { zend_do_clone(&$$, &$2 TSRMLS_CC); } - | variable T_PLUS_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_ADD, &$$, &$1, &$3 TSRMLS_CC); } - | variable T_MINUS_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SUB, &$$, &$1, &$3 TSRMLS_CC); } - | variable T_MUL_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MUL, &$$, &$1, &$3 TSRMLS_CC); } - | variable T_DIV_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_DIV, &$$, &$1, &$3 TSRMLS_CC); } - | variable T_CONCAT_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_CONCAT, &$$, &$1, &$3 TSRMLS_CC); } - | variable T_MOD_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MOD, &$$, &$1, &$3 TSRMLS_CC); } - | variable T_AND_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_AND, &$$, &$1, &$3 TSRMLS_CC); } - | variable T_OR_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_OR, &$$, &$1, &$3 TSRMLS_CC); } - | variable T_XOR_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_XOR, &$$, &$1, &$3 TSRMLS_CC); } - | variable T_SL_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SL, &$$, &$1, &$3 TSRMLS_CC); } - | variable T_SR_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SR, &$$, &$1, &$3 TSRMLS_CC); } - | rw_variable T_INC { zend_do_post_incdec(&$$, &$1, ZEND_POST_INC TSRMLS_CC); } - | T_INC rw_variable { zend_do_pre_incdec(&$$, &$2, ZEND_PRE_INC TSRMLS_CC); } - | rw_variable T_DEC { zend_do_post_incdec(&$$, &$1, ZEND_POST_DEC TSRMLS_CC); } - | T_DEC rw_variable { zend_do_pre_incdec(&$$, &$2, ZEND_PRE_DEC TSRMLS_CC); } - | expr T_BOOLEAN_OR { zend_do_boolean_or_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_or_end(&$$, &$1, &$4, &$2 TSRMLS_CC); } - | expr T_BOOLEAN_AND { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_and_end(&$$, &$1, &$4, &$2 TSRMLS_CC); } - | expr T_LOGICAL_OR { zend_do_boolean_or_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_or_end(&$$, &$1, &$4, &$2 TSRMLS_CC); } - | expr T_LOGICAL_AND { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } expr { zend_do_boolean_and_end(&$$, &$1, &$4, &$2 TSRMLS_CC); } - | expr T_LOGICAL_XOR expr { zend_do_binary_op(ZEND_BOOL_XOR, &$$, &$1, &$3 TSRMLS_CC); } - | expr '|' expr { zend_do_binary_op(ZEND_BW_OR, &$$, &$1, &$3 TSRMLS_CC); } - | expr '&' expr { zend_do_binary_op(ZEND_BW_AND, &$$, &$1, &$3 TSRMLS_CC); } - | expr '^' expr { zend_do_binary_op(ZEND_BW_XOR, &$$, &$1, &$3 TSRMLS_CC); } - | expr '.' expr { zend_do_binary_op(ZEND_CONCAT, &$$, &$1, &$3 TSRMLS_CC); } - | expr '+' expr { zend_do_binary_op(ZEND_ADD, &$$, &$1, &$3 TSRMLS_CC); } - | expr '-' expr { zend_do_binary_op(ZEND_SUB, &$$, &$1, &$3 TSRMLS_CC); } - | expr '*' expr { zend_do_binary_op(ZEND_MUL, &$$, &$1, &$3 TSRMLS_CC); } - | expr '/' expr { zend_do_binary_op(ZEND_DIV, &$$, &$1, &$3 TSRMLS_CC); } - | expr '%' expr { zend_do_binary_op(ZEND_MOD, &$$, &$1, &$3 TSRMLS_CC); } - | expr T_SL expr { zend_do_binary_op(ZEND_SL, &$$, &$1, &$3 TSRMLS_CC); } - | expr T_SR expr { zend_do_binary_op(ZEND_SR, &$$, &$1, &$3 TSRMLS_CC); } - | '+' expr { Z_LVAL($1.u.constant)=0; Z_TYPE($1.u.constant)=IS_LONG; $1.op_type = IS_CONST; INIT_PZVAL(&$1.u.constant); zend_do_binary_op(ZEND_ADD, &$$, &$1, &$2 TSRMLS_CC); } - | '-' expr { Z_LVAL($1.u.constant)=0; Z_TYPE($1.u.constant)=IS_LONG; $1.op_type = IS_CONST; INIT_PZVAL(&$1.u.constant); zend_do_binary_op(ZEND_SUB, &$$, &$1, &$2 TSRMLS_CC); } - | '!' expr { zend_do_unary_op(ZEND_BOOL_NOT, &$$, &$2 TSRMLS_CC); } - | '~' expr { zend_do_unary_op(ZEND_BW_NOT, &$$, &$2 TSRMLS_CC); } - | expr T_IS_IDENTICAL expr { zend_do_binary_op(ZEND_IS_IDENTICAL, &$$, &$1, &$3 TSRMLS_CC); } - | expr T_IS_NOT_IDENTICAL expr { zend_do_binary_op(ZEND_IS_NOT_IDENTICAL, &$$, &$1, &$3 TSRMLS_CC); } - | expr T_IS_EQUAL expr { zend_do_binary_op(ZEND_IS_EQUAL, &$$, &$1, &$3 TSRMLS_CC); } - | expr T_IS_NOT_EQUAL expr { zend_do_binary_op(ZEND_IS_NOT_EQUAL, &$$, &$1, &$3 TSRMLS_CC); } - | expr '<' expr { zend_do_binary_op(ZEND_IS_SMALLER, &$$, &$1, &$3 TSRMLS_CC); } - | expr T_IS_SMALLER_OR_EQUAL expr { zend_do_binary_op(ZEND_IS_SMALLER_OR_EQUAL, &$$, &$1, &$3 TSRMLS_CC); } - | expr '>' expr { zend_do_binary_op(ZEND_IS_SMALLER, &$$, &$3, &$1 TSRMLS_CC); } - | expr T_IS_GREATER_OR_EQUAL expr { zend_do_binary_op(ZEND_IS_SMALLER_OR_EQUAL, &$$, &$3, &$1 TSRMLS_CC); } - | expr T_INSTANCEOF class_name_reference { zend_do_instanceof(&$$, &$1, &$3, 0 TSRMLS_CC); } - | '(' expr ')' { $$ = $2; } - | expr '?' { zend_do_begin_qm_op(&$1, &$2 TSRMLS_CC); } - expr ':' { zend_do_qm_true(&$4, &$2, &$5 TSRMLS_CC); } - expr { zend_do_qm_false(&$$, &$7, &$2, &$5 TSRMLS_CC); } - | expr '?' ':' { zend_do_jmp_set(&$1, &$2, &$3 TSRMLS_CC); } - expr { zend_do_jmp_set_else(&$$, &$5, &$2, &$3 TSRMLS_CC); } - | internal_functions_in_yacc { $$ = $1; } - | T_INT_CAST expr { zend_do_cast(&$$, &$2, IS_LONG TSRMLS_CC); } - | T_DOUBLE_CAST expr { zend_do_cast(&$$, &$2, IS_DOUBLE TSRMLS_CC); } - | T_STRING_CAST expr { zend_do_cast(&$$, &$2, UG(unicode)?IS_UNICODE:IS_STRING TSRMLS_CC); } - | T_UNICODE_CAST expr { zend_do_cast(&$$, &$2, IS_UNICODE TSRMLS_CC); } - | T_BINARY_CAST expr { zend_do_cast(&$$, &$2, IS_STRING TSRMLS_CC); } - | T_ARRAY_CAST expr { zend_do_cast(&$$, &$2, IS_ARRAY TSRMLS_CC); } - | T_OBJECT_CAST expr { zend_do_cast(&$$, &$2, IS_OBJECT TSRMLS_CC); } - | T_BOOL_CAST expr { zend_do_cast(&$$, &$2, IS_BOOL TSRMLS_CC); } - | T_UNSET_CAST expr { zend_do_cast(&$$, &$2, IS_NULL TSRMLS_CC); } - | T_EXIT exit_expr { zend_do_exit(&$$, &$2 TSRMLS_CC); } - | '@' { zend_do_begin_silence(&$1 TSRMLS_CC); } expr { zend_do_end_silence(&$1 TSRMLS_CC); $$ = $3; } - | scalar { $$ = $1; } - | T_ARRAY '(' array_pair_list ')' { $$ = $3; } - | '`' encaps_list '`' { zend_do_shell_exec(&$$, &$2 TSRMLS_CC); } - | T_PRINT expr { zend_do_print(&$$, &$2 TSRMLS_CC); } -; - -function_call: - T_STRING '(' { $2.u.opline_num = zend_do_begin_function_call(&$1 TSRMLS_CC); } - function_call_parameter_list - ')' { zend_do_end_function_call(&$1, &$$, &$4, 0, $2.u.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); } - | fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' { zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } - function_call_parameter_list - ')' { zend_do_end_function_call(NULL, &$$, &$6, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} - | fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } - function_call_parameter_list - ')' { zend_do_end_function_call(NULL, &$$, &$6, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} - | variable_without_objects '(' { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_dynamic_function_call(&$1 TSRMLS_CC); } - function_call_parameter_list ')' - { zend_do_end_function_call(&$1, &$$, &$4, 0, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} -; - -fully_qualified_class_name: - T_STRING { zend_do_fetch_class(&$$, &$1 TSRMLS_CC); } -; - -class_name_reference: - T_STRING { zend_do_fetch_class(&$$, &$1 TSRMLS_CC); } - | dynamic_class_name_reference { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); zend_do_fetch_class(&$$, &$1 TSRMLS_CC); } -; - - -dynamic_class_name_reference: - base_variable T_OBJECT_OPERATOR { zend_do_push_object(&$1 TSRMLS_CC); } - object_property { zend_do_push_object(&$4 TSRMLS_CC); zend_do_declare_implicit_property(TSRMLS_C); } dynamic_class_name_variable_properties - { zend_do_pop_object(&$$ TSRMLS_CC); $$.u.EA.type = ZEND_PARSED_MEMBER; } - | base_variable { $$ = $1; } -; - - -dynamic_class_name_variable_properties: - dynamic_class_name_variable_properties dynamic_class_name_variable_property - | /* empty */ -; - - -dynamic_class_name_variable_property: - T_OBJECT_OPERATOR object_property { zend_do_push_object(&$2 TSRMLS_CC); zend_do_declare_implicit_property(TSRMLS_C); } -; - -exit_expr: - /* empty */ { memset(&$$, 0, sizeof(znode)); $$.op_type = IS_UNUSED; } - | '(' ')' { memset(&$$, 0, sizeof(znode)); $$.op_type = IS_UNUSED; } - | '(' expr ')' { $$ = $2; } -; - - -ctor_arguments: - /* empty */ { Z_LVAL($$.u.constant)=0; } - | '(' function_call_parameter_list ')' { $$ = $2; } -; - - -common_scalar: - T_LNUMBER { $$ = $1; } - | T_DNUMBER { $$ = $1; } - | T_CONSTANT_ENCAPSED_STRING { $$ = $1; } - | T_LINE { $$ = $1; } - | T_FILE { $$ = $1; } - | T_CLASS_C { $$ = $1; } - | T_METHOD_C { $$ = $1; } - | T_FUNC_C { $$ = $1; } -; - - -static_scalar: /* compile-time evaluated scalars */ - common_scalar { $$ = $1; } - | T_STRING { zend_do_fetch_constant(&$$, NULL, &$1, ZEND_CT TSRMLS_CC); } - | '+' static_scalar { $$ = $2; } - | '-' static_scalar { zval minus_one; Z_TYPE(minus_one) = IS_LONG; Z_LVAL(minus_one) = -1; mul_function(&$2.u.constant, &$2.u.constant, &minus_one TSRMLS_CC); $$ = $2; } - | T_ARRAY '(' static_array_pair_list ')' { $$ = $3; Z_TYPE($$.u.constant) = IS_CONSTANT_ARRAY; } - | static_class_constant { $$ = $1; } -; - -static_class_constant: - T_STRING T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_constant(&$$, &$1, &$3, ZEND_CT TSRMLS_CC); } -; - -scalar: - T_STRING { zend_do_fetch_constant(&$$, NULL, &$1, ZEND_RT TSRMLS_CC); } - | T_STRING_VARNAME { $$ = $1; } - | class_constant { $$ = $1; } - | common_scalar { $$ = $1; } - | '"' { CG(literal_type) = UG(unicode)?IS_UNICODE:IS_STRING; } encaps_list '"' { $$ = $3; } - | T_START_HEREDOC { CG(literal_type) = UG(unicode)?IS_UNICODE:IS_STRING; } encaps_list T_END_HEREDOC { $$ = $3; zend_do_end_heredoc(TSRMLS_C); } - | T_BINARY_DOUBLE { CG(literal_type) = IS_STRING; } encaps_list '"' { $$ = $3; } - | T_BINARY_HEREDOC { CG(literal_type) = IS_STRING; } encaps_list T_END_HEREDOC { $$ = $3; zend_do_end_heredoc(TSRMLS_C); } -; - - -static_array_pair_list: - /* empty */ { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); } - | non_empty_static_array_pair_list possible_comma { $$ = $1; } -; - -possible_comma: - /* empty */ - | ',' -; - -non_empty_static_array_pair_list: - non_empty_static_array_pair_list ',' static_scalar T_DOUBLE_ARROW static_scalar { zend_do_add_static_array_element(&$$, &$3, &$5); } - | non_empty_static_array_pair_list ',' static_scalar { zend_do_add_static_array_element(&$$, NULL, &$3); } - | static_scalar T_DOUBLE_ARROW static_scalar { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); zend_do_add_static_array_element(&$$, &$1, &$3); } - | static_scalar { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); zend_do_add_static_array_element(&$$, NULL, &$1); } -; - -expr: - r_variable { $$ = $1; } - | expr_without_variable { $$ = $1; } -; - - -r_variable: - variable { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); $$ = $1; } -; - - -w_variable: - variable { zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); $$ = $1; } - { zend_check_writable_variable(&$1); } -; - -rw_variable: - variable { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); $$ = $1; } - { zend_check_writable_variable(&$1); } -; - -variable: - base_variable_with_function_calls T_OBJECT_OPERATOR { zend_do_push_object(&$1 TSRMLS_CC); } - object_property { zend_do_push_object(&$4 TSRMLS_CC); } method_or_not variable_properties - { zend_do_pop_object(&$$ TSRMLS_CC); $$.u.EA.type = $1.u.EA.type | ($7.u.EA.type ? $7.u.EA.type : $6.u.EA.type); } - | base_variable_with_function_calls { $$ = $1; } -; - -variable_properties: - variable_properties variable_property { $$.u.EA.type = $2.u.EA.type; } - | /* empty */ { $$.u.EA.type = 0; } -; - - -variable_property: - T_OBJECT_OPERATOR object_property { zend_do_push_object(&$2 TSRMLS_CC); } method_or_not { $$.u.EA.type = $4.u.EA.type; } -; - -method_or_not: - '(' { zend_do_pop_object(&$1 TSRMLS_CC); zend_do_begin_method_call(&$1 TSRMLS_CC); } - function_call_parameter_list ')' - { zend_do_end_function_call(&$1, &$$, &$3, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); - zend_do_push_object(&$$ TSRMLS_CC); $$.u.EA.type = ZEND_PARSED_METHOD_CALL; } - | /* empty */ { zend_do_declare_implicit_property(TSRMLS_C); $$.u.EA.type = ZEND_PARSED_MEMBER; } -; - -variable_without_objects: - reference_variable { $$ = $1; } - | simple_indirect_reference reference_variable { zend_do_indirect_references(&$$, &$1, &$2 TSRMLS_CC); } -; - -static_member: - fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { $$ = $3; zend_do_fetch_static_member(&$$, &$1 TSRMLS_CC); } -; - - -base_variable_with_function_calls: - base_variable { $$ = $1; } - | function_call { zend_do_begin_variable_parse(TSRMLS_C); $$ = $1; $$.u.EA.type = ZEND_PARSED_FUNCTION_CALL; } -; - - -base_variable: - reference_variable { $$ = $1; $$.u.EA.type = ZEND_PARSED_VARIABLE; } - | simple_indirect_reference reference_variable { zend_do_indirect_references(&$$, &$1, &$2 TSRMLS_CC); $$.u.EA.type = ZEND_PARSED_VARIABLE; } - | static_member { $$ = $1; $$.u.EA.type = ZEND_PARSED_STATIC_MEMBER; } -; - -reference_variable: - reference_variable '[' dim_offset ']' { fetch_array_dim(&$$, &$1, &$3 TSRMLS_CC); } - | reference_variable '{' expr '}' { fetch_string_offset(&$$, &$1, &$3 TSRMLS_CC); } - | compound_variable { zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&$$, &$1, 1 TSRMLS_CC); } -; - - -compound_variable: - T_VARIABLE { $$ = $1; } - | '$' '{' expr '}' { zend_do_normalization(&$$, &$3 TSRMLS_CC); } -; - -dim_offset: - /* empty */ { $$.op_type = IS_UNUSED; } - | expr { $$ = $1; } -; - - -object_property: - object_dim_list { $$ = $1; } - | variable_without_objects { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); } { znode tmp_znode; zend_do_pop_object(&tmp_znode TSRMLS_CC); zend_do_fetch_property(&$$, &tmp_znode, &$1 TSRMLS_CC);} -; - -object_dim_list: - object_dim_list '[' dim_offset ']' { fetch_array_dim(&$$, &$1, &$3 TSRMLS_CC); } - | object_dim_list '{' expr '}' { fetch_string_offset(&$$, &$1, &$3 TSRMLS_CC); } - | variable_name { znode tmp_znode; zend_do_pop_object(&tmp_znode TSRMLS_CC); zend_do_fetch_property(&$$, &tmp_znode, &$1 TSRMLS_CC);} -; - -variable_name: - T_STRING { $$ = $1; } - | '{' expr '}' { zend_do_normalization(&$$, &$2 TSRMLS_CC); } -; - -simple_indirect_reference: - '$' { Z_LVAL($$.u.constant) = 1; } - | simple_indirect_reference '$' { Z_LVAL($$.u.constant)++; } -; - -assignment_list: - assignment_list ',' assignment_list_element - | assignment_list_element -; - - -assignment_list_element: - variable { zend_do_add_list_element(&$1 TSRMLS_CC); } - | T_LIST '(' { zend_do_new_list_begin(TSRMLS_C); } assignment_list ')' { zend_do_new_list_end(TSRMLS_C); } - | /* empty */ { zend_do_add_list_element(NULL TSRMLS_CC); } -; - - -array_pair_list: - /* empty */ { zend_do_init_array(&$$, NULL, NULL, 0 TSRMLS_CC); } - | non_empty_array_pair_list possible_comma { $$ = $1; } -; - -non_empty_array_pair_list: - non_empty_array_pair_list ',' expr T_DOUBLE_ARROW expr { zend_do_add_array_element(&$$, &$5, &$3, 0 TSRMLS_CC); } - | non_empty_array_pair_list ',' expr { zend_do_add_array_element(&$$, &$3, NULL, 0 TSRMLS_CC); } - | expr T_DOUBLE_ARROW expr { zend_do_init_array(&$$, &$3, &$1, 0 TSRMLS_CC); } - | expr { zend_do_init_array(&$$, &$1, NULL, 0 TSRMLS_CC); } - | non_empty_array_pair_list ',' expr T_DOUBLE_ARROW '&' w_variable { zend_do_add_array_element(&$$, &$6, &$3, 1 TSRMLS_CC); } - | non_empty_array_pair_list ',' '&' w_variable { zend_do_add_array_element(&$$, &$4, NULL, 1 TSRMLS_CC); } - | expr T_DOUBLE_ARROW '&' w_variable { zend_do_init_array(&$$, &$4, &$1, 1 TSRMLS_CC); } - | '&' w_variable { zend_do_init_array(&$$, &$2, NULL, 1 TSRMLS_CC); } -; - -encaps_list: - encaps_list encaps_var { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); zend_do_add_variable(&$$, &$1, &$2 TSRMLS_CC); } - | encaps_list T_STRING { zend_do_add_string(&$$, &$1, &$2 TSRMLS_CC); } - | encaps_list T_NUM_STRING { zend_do_add_string(&$$, &$1, &$2 TSRMLS_CC); } - | encaps_list T_ENCAPSED_AND_WHITESPACE { zend_do_add_string(&$$, &$1, &$2 TSRMLS_CC); } - | encaps_list T_CHARACTER { zend_do_add_char(&$$, &$1, &$2 TSRMLS_CC); } - | encaps_list T_BAD_CHARACTER { zend_do_add_string(&$$, &$1, &$2 TSRMLS_CC); } - | encaps_list '[' { Z_LVAL($2.u.constant) = (long) '['; zend_do_add_char(&$$, &$1, &$2 TSRMLS_CC); } - | encaps_list ']' { Z_LVAL($2.u.constant) = (long) ']'; zend_do_add_char(&$$, &$1, &$2 TSRMLS_CC); } - | encaps_list '{' { Z_LVAL($2.u.constant) = (long) '{'; zend_do_add_char(&$$, &$1, &$2 TSRMLS_CC); } - | encaps_list '}' { Z_LVAL($2.u.constant) = (long) '}'; zend_do_add_char(&$$, &$1, &$2 TSRMLS_CC); } - | encaps_list T_OBJECT_OPERATOR { znode tmp; Z_LVAL($2.u.constant) = (long) '-'; zend_do_add_char(&tmp, &$1, &$2 TSRMLS_CC); Z_LVAL($2.u.constant) = (long) '>'; zend_do_add_char(&$$, &tmp, &$2 TSRMLS_CC); } - | /* empty */ { zend_do_init_string(&$$ TSRMLS_CC); } - -; - - - -encaps_var: - T_VARIABLE { zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&$$, &$1, 1 TSRMLS_CC); } - | T_VARIABLE '[' { zend_do_begin_variable_parse(TSRMLS_C); } encaps_var_offset ']' { fetch_array_begin(&$$, &$1, &$4 TSRMLS_CC); } - | T_VARIABLE T_OBJECT_OPERATOR T_STRING { zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&$2, &$1, 1 TSRMLS_CC); zend_do_fetch_property(&$$, &$2, &$3 TSRMLS_CC); } - | T_DOLLAR_OPEN_CURLY_BRACES expr '}' { zend_do_begin_variable_parse(TSRMLS_C); fetch_simple_variable(&$$, &$2, 1 TSRMLS_CC); } - | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' { zend_do_begin_variable_parse(TSRMLS_C); fetch_array_begin(&$$, &$2, &$4 TSRMLS_CC); } - | T_CURLY_OPEN variable '}' { $$ = $2; } -; - - -encaps_var_offset: - T_STRING { $$ = $1; } - | T_NUM_STRING { $$ = $1; } - | T_VARIABLE { fetch_simple_variable(&$$, &$1, 1 TSRMLS_CC); } -; - - -internal_functions_in_yacc: - T_ISSET '(' isset_variables ')' { $$ = $3; } - | T_EMPTY '(' variable ')' { zend_do_isset_or_isempty(ZEND_ISEMPTY, &$$, &$3 TSRMLS_CC); } - | T_INCLUDE expr { zend_do_include_or_eval(ZEND_INCLUDE, &$$, &$2 TSRMLS_CC); } - | T_INCLUDE_ONCE expr { zend_do_include_or_eval(ZEND_INCLUDE_ONCE, &$$, &$2 TSRMLS_CC); } - | T_EVAL '(' expr ')' { zend_do_include_or_eval(ZEND_EVAL, &$$, &$3 TSRMLS_CC); } - | T_REQUIRE expr { zend_do_include_or_eval(ZEND_REQUIRE, &$$, &$2 TSRMLS_CC); } - | T_REQUIRE_ONCE expr { zend_do_include_or_eval(ZEND_REQUIRE_ONCE, &$$, &$2 TSRMLS_CC); } -; - -isset_variables: - variable { zend_do_isset_or_isempty(ZEND_ISSET, &$$, &$1 TSRMLS_CC); } - | isset_variables ',' { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } variable { znode tmp; zend_do_isset_or_isempty(ZEND_ISSET, &tmp, &$4 TSRMLS_CC); zend_do_boolean_and_end(&$$, &$1, &tmp, &$2 TSRMLS_CC); } -; - -class_constant: - fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_constant(&$$, &$1, &$3, ZEND_RT TSRMLS_CC); } -; - -%% - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_language_scanner.h b/Zend/zend_language_scanner.h deleted file mode 100644 index 5abd0667161bb..0000000000000 --- a/Zend/zend_language_scanner.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_SCANNER_H -#define ZEND_SCANNER_H - -typedef struct _zend_lex_state { - YY_BUFFER_STATE buffer_state; - int state; - zend_file_handle *in; - uint lineno; - char *filename; - char *script_encoding; - - UConverter *input_conv; /* converter for flex input */ - UConverter *output_conv; /* converter for data from flex output */ - zend_bool encoding_checked; - char* rest_str; - int rest_len; -} zend_lex_state; - - -void zend_fatal_scanner_error(char *); -BEGIN_EXTERN_C() -int zend_compare_file_handles(zend_file_handle *fh1, zend_file_handle *fh2); -ZEND_API void zend_save_lexical_state(zend_lex_state *lex_state TSRMLS_DC); -ZEND_API void zend_restore_lexical_state(zend_lex_state *lex_state TSRMLS_DC); -ZEND_API int zend_prepare_string_for_scanning(zval *str, char *filename TSRMLS_DC); - -END_EXTERN_C() - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l deleted file mode 100644 index 0fb4b65c89662..0000000000000 --- a/Zend/zend_language_scanner.l +++ /dev/null @@ -1,2518 +0,0 @@ -%{ - -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#define yyleng SCNG(yy_leng) -#define yytext SCNG(yy_text) -#define yytext_ptr SCNG(yy_text) -#define yyin SCNG(yy_in) -#define yyout SCNG(yy_out) -#define yy_last_accepting_state SCNG(_yy_last_accepting_state) -#define yy_last_accepting_cpos SCNG(_yy_last_accepting_cpos) -#define yy_more_flag SCNG(_yy_more_flag) -#define yy_more_len SCNG(_yy_more_len) - -%} - -%x ST_IN_SCRIPTING -%x ST_DOUBLE_QUOTES -%x ST_BACKQUOTE -%x ST_HEREDOC -%x ST_LOOKING_FOR_PROPERTY -%x ST_LOOKING_FOR_VARNAME -%x ST_COMMENT -%x ST_DOC_COMMENT -%x ST_ONE_LINE_COMMENT -%option stack - -%{ - -#include -#include "zend.h" -#include "zend_alloc.h" -#include -#include "zend_compile.h" -#include "zend_language_scanner.h" -#include "zend_highlight.h" -#include "zend_constants.h" -#include "zend_variables.h" -#include "zend_operators.h" -#include "zend_API.h" -#include "zend_strtod.h" -#include "zend_unicode.h" - -#ifdef HAVE_STDARG_H -# include -#endif - -#ifdef HAVE_UNISTD_H -# include -#endif - -#define YY_DECL int lex_scan(zval *zendlval TSRMLS_DC) - -#define ECHO { ZEND_WRITE( yytext, yyleng ); } - -#ifdef ZTS -# define MY_INPUT yyinput -#else -# define MY_INPUT input -#endif - - -/* Globals Macros */ -#define SCNG LANG_SCNG -#ifdef ZTS -ZEND_API ts_rsrc_id language_scanner_globals_id; -#else -ZEND_API zend_scanner_globals language_scanner_globals; -#endif - -#define YY_INPUT(buf, result, max_size) \ - if ( ((result = zend_unicode_yyinput(yyin, buf, max_size TSRMLS_CC)) == 0) \ - && zend_stream_ferror( yyin TSRMLS_CC) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); - -#define YY_FATAL_ERROR zend_fatal_scanner_error - -#define HANDLE_NEWLINES(s, l) \ -do { \ - char *p = (s), *boundary = p+(l); \ - \ - while (p='0' && (c)<='7') -#define ZEND_IS_HEX(c) (((c)>='0' && (c)<='9') || ((c)>='a' && (c)<='f') || ((c)>='A' && (c)<='F')) - - -void zend_fatal_scanner_error(char *message) -{ - zend_error(E_COMPILE_ERROR, "%s", message); -} - -BEGIN_EXTERN_C() -void startup_scanner(TSRMLS_D) -{ - CG(heredoc) = NULL; - CG(heredoc_len) = 0; - CG(doc_comment) = NULL_ZSTR; - CG(doc_comment_len) = 0; - SCNG(yy_start_stack_ptr) = 0; - SCNG(yy_start_stack_depth) = 0; - SCNG(current_buffer) = NULL; - - SCNG(input_conv) = NULL; - SCNG(output_conv) = NULL; - SCNG(encoding_checked) = 0; - SCNG(rest_str) = NULL; - SCNG(rest_len) = 0; -} - - -void shutdown_scanner(TSRMLS_D) -{ - if (CG(heredoc)) { - efree(CG(heredoc)); - CG(heredoc_len)=0; - } - if (SCNG(yy_start_stack)) { - yy_flex_free(SCNG(yy_start_stack)); - SCNG(yy_start_stack) = NULL; - } - RESET_DOC_COMMENT(); - - if (SCNG(input_conv)) { - ucnv_close(SCNG(input_conv)); - SCNG(input_conv) = NULL; - } - if (SCNG(output_conv)) { - ucnv_close(SCNG(output_conv)); - SCNG(output_conv) = NULL; - } - SCNG(encoding_checked) = 0; - if (SCNG(rest_str)) { - efree(SCNG(rest_str)); - SCNG(rest_str) = NULL; - } - SCNG(rest_len) = 0; -} -END_EXTERN_C() - - -ZEND_API void zend_save_lexical_state(zend_lex_state *lex_state TSRMLS_DC) -{ - memcpy(&lex_state->buffer_state, &YY_CURRENT_BUFFER, sizeof(YY_BUFFER_STATE)); - lex_state->in = SCNG(yy_in); - lex_state->state = YYSTATE; - lex_state->filename = zend_get_compiled_filename(TSRMLS_C); - lex_state->lineno = CG(zend_lineno); - - lex_state->input_conv = SCNG(input_conv); - lex_state->output_conv = SCNG(output_conv); - lex_state->encoding_checked = SCNG(encoding_checked); - lex_state->rest_str = SCNG(rest_str); - lex_state->rest_len = SCNG(rest_len); - SCNG(input_conv) = NULL; - SCNG(output_conv) = NULL; - SCNG(encoding_checked) = 0; - SCNG(rest_str) = NULL; - SCNG(rest_len) = 0; -} - -ZEND_API void zend_restore_lexical_state(zend_lex_state *lex_state TSRMLS_DC) -{ - YY_BUFFER_STATE original_buffer_state = YY_CURRENT_BUFFER; - - if (lex_state->buffer_state) { - yy_switch_to_buffer(lex_state->buffer_state TSRMLS_CC); - } else { - YY_CURRENT_BUFFER = NULL; - } - - yy_delete_buffer(original_buffer_state TSRMLS_CC); - SCNG(yy_in) = lex_state->in; - BEGIN(lex_state->state); - CG(zend_lineno) = lex_state->lineno; - zend_restore_compiled_filename(lex_state->filename TSRMLS_CC); - zend_restore_compiled_script_encoding(lex_state->script_encoding TSRMLS_CC); - - if (SCNG(input_conv)) { - ucnv_close(SCNG(input_conv)); - } - SCNG(input_conv) = lex_state->input_conv; - if (SCNG(output_conv)) { - ucnv_close(SCNG(output_conv)); - } - SCNG(output_conv) = lex_state->output_conv; - SCNG(encoding_checked) = lex_state->encoding_checked; - if (SCNG(rest_str)) { - efree(SCNG(rest_str)); - } - SCNG(rest_str) = lex_state->rest_str; - SCNG(rest_len) = lex_state->rest_len; -} - - -BEGIN_EXTERN_C() - - -ZEND_API void zend_file_handle_dtor(zend_file_handle *fh) -{ - TSRMLS_FETCH(); - - switch (fh->type) { - case ZEND_HANDLE_FP: - fclose(fh->handle.fp); - break; - case ZEND_HANDLE_STREAM: - if (fh->handle.stream.closer) { - fh->handle.stream.closer(fh->handle.stream.handle TSRMLS_CC); - } - break; - case ZEND_HANDLE_FILENAME: - /* We're only supposed to get here when destructing the used_files hash, - * which doesn't really contain open files, but references to their names/paths - */ - break; - } - if (fh->opened_path) { - efree(fh->opened_path); - fh->opened_path = NULL; - } - if (fh->free_filename && fh->filename) { - efree(fh->filename); - fh->filename = NULL; - } -} - - -int zend_compare_file_handles(zend_file_handle *fh1, zend_file_handle *fh2) -{ - if (fh1->type != fh2->type) { - return 0; - } - switch (fh1->type) { - case ZEND_HANDLE_FP: - return fh1->handle.fp==fh2->handle.fp; - break; - case ZEND_HANDLE_STREAM: - return fh1->handle.stream.handle == fh2->handle.stream.handle; - break; - } - return 0; -} - - -ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle TSRMLS_DC) -{ - zend_llist_del_element(&CG(open_files), file_handle, (int (*)(void *, void *)) zend_compare_file_handles); - /* zend_file_handle_dtor() operates on the copy, so we have to NULLify the original here */ - file_handle->opened_path = NULL; - if (file_handle->free_filename) { - file_handle->filename = NULL; - } -} - -/* Convert one octal digit to a numeric value 0..7, or -1 on failure */ -static inline int8_t zend_get_octal_digit(UChar c) { - if (c >= 0x0030 && c <= 0x0037) { - return (int8_t)(c - 0x0030); - } - return -1; -} - -/* - * Convert one hex digit to a numeric value 0..F, or -1 on failure. - * Borrowed from ICU. - */ -static inline int8_t zend_get_hex_digit(UChar c) { - if (c >= 0x0030 && c <= 0x0039) { - return (int8_t)(c - 0x0030); - } - if (c >= 0x0041 && c <= 0x0046) { - return (int8_t)(c - (0x0041 - 10)); - } - if (c >= 0x0061 && c <= 0x0066) { - return (int8_t)(c - (0x0061 - 10)); - } - return -1; -} - -static inline zend_bool zend_digits_to_codepoint(char *s, char *end, UChar32 *c, int8_t digits) -{ - int8_t n = 0; - int8_t digit = 0; - UChar32 codepoint = 0; - - while (s < end && n < digits) { - digit = zend_get_hex_digit((UChar)*s); - if (digit < 0) { - break; - } - codepoint = (codepoint << 4) | digit; - ++s; - ++n; - } - - if (n < digits) { - return 0; - } - - *c = codepoint; - return 1; -} - -static inline zend_bool zend_udigits_to_codepoint(UChar *s, UChar *end, UChar32 *c, int8_t digits) -{ - int8_t n = 0; - int8_t digit = 0; - UChar32 codepoint = 0; - - while (s < end && n < digits) { - digit = zend_get_hex_digit(*s); - if (digit < 0) { - break; - } - codepoint = (codepoint << 4) | digit; - ++s; - ++n; - } - - if (n < digits) { - return 0; - } - - *c = codepoint; - return 1; -} - -static inline int zend_uchar_from_name(char *name, UChar32 *c) -{ - UChar32 codepoint = 0; - UErrorCode status = U_ZERO_ERROR; - - codepoint = u_charFromName(U_UNICODE_CHAR_NAME, name, &status); - if (U_SUCCESS(status)) { - *c = codepoint; - return 1; - } else { - return 0; - } -} - -static inline int zend_uchar_from_uname(UChar *name, int name_len, UChar32 *c TSRMLS_DC) -{ - UChar32 codepoint = 0; - UErrorCode status = U_ZERO_ERROR; - char *buf; - - buf = zend_unicode_to_ascii(name, name_len TSRMLS_CC); - if (!buf) return 0; - codepoint = u_charFromName(U_UNICODE_CHAR_NAME, buf, &status); - efree(buf); - if (U_SUCCESS(status)) { - *c = codepoint; - return 1; - } else { - return 0; - } -} - -static inline int zend_parse_charname_sequence(UChar **s, UChar *end, UChar32 *c TSRMLS_DC) -{ - UChar *start; - - if (**s == '{') { - start = ++(*s); - while ((*s)++ != end) { - if (**s == '}') { - if (zend_uchar_from_uname(start, *s - start, c TSRMLS_CC)) { - return 1; - } else { - /* safe, since *s points to '}' */ - **s = 0; - zend_error(E_COMPILE_WARNING, "Invalid Unicode character name: '%r'", start); - break; - } - } - } - } - - return 0; -} - -ZEND_API int zend_copy_scanner_string(zval *zendlval, char *str, zend_uint str_len, zend_uchar type, UConverter *conv TSRMLS_DC) -{ - UErrorCode status = U_ZERO_ERROR; - int consumed = 0; - - if (type == IS_UNICODE) { - consumed = zend_convert_scanner_output(conv, &Z_USTRVAL_P(zendlval), &Z_USTRLEN_P(zendlval), str, str_len, &status TSRMLS_CC); - - if (U_FAILURE(status)) { - zend_error(E_COMPILE_WARNING,"Illegal or truncated character in input: offset %d, state=%d", consumed, YYSTATE); - efree(Z_USTRVAL_P(zendlval)); - return 0; - } - Z_TYPE_P(zendlval) = IS_UNICODE; - } else { - Z_STRVAL_P(zendlval) = (char *)estrndup(str, str_len); - Z_STRLEN_P(zendlval) = str_len; - Z_TYPE_P(zendlval) = IS_STRING; - } - - return 1; -} - -static inline int zend_check_and_normalize_identifier(zval *zendlval) -{ - UChar *norm; - int norm_len; - - if (!zend_is_valid_identifier(Z_USTRVAL_P(zendlval), Z_USTRLEN_P(zendlval))) { - zend_error(E_COMPILE_WARNING, "Invalid identifier syntax: %r", Z_USTRVAL_P(zendlval)); - efree(Z_USTRVAL_P(zendlval)); - return 0; - } - if (zend_normalize_identifier(&norm, &norm_len, Z_USTRVAL_P(zendlval), Z_USTRLEN_P(zendlval), 0) == FAILURE) { - zend_error(E_COMPILE_WARNING, "Could not normalize identifier: %r", Z_USTRVAL_P(zendlval)); - efree(Z_USTRVAL_P(zendlval)); - return 0; - } - if (norm != Z_USTRVAL_P(zendlval)) { - efree(Z_USTRVAL_P(zendlval)); - ZVAL_UNICODEL(zendlval, norm, norm_len, 0); - } - return 1; -} - -static void zend_scanner_output_callback( - const void *context, - UConverterToUnicodeArgs *toUArgs, - const char *codeUnits, - int32_t length, - UConverterCallbackReason reason, - UErrorCode *err - ) -{ - if (*err == U_TRUNCATED_CHAR_FOUND || - *err == U_ILLEGAL_CHAR_FOUND || - *err == U_INVALID_CHAR_FOUND) { - *(const char **)context = toUArgs->source - length; - } - - return; -} - -static int is_encoding_flex_compatible(const char *enc TSRMLS_DC) -{ - int key_len = strlen(enc)+1; - unsigned char ret; - unsigned char *ret_ptr; - - if (zend_hash_find(&UG(flex_compatible), (char*)enc, key_len, (void**)&ret_ptr) == SUCCESS) { - return *ret_ptr; - } else { - UErrorCode status = U_ZERO_ERROR; - UConverter *conv = ucnv_open(enc, &status); - - if (U_FAILURE(status)) { - return 0; - } - - switch (ucnv_getType(conv)) { - case UCNV_DBCS: - case UCNV_UTF16_BigEndian: - case UCNV_UTF16_LittleEndian: - case UCNV_UTF32_BigEndian: - case UCNV_UTF32_LittleEndian: - case UCNV_EBCDIC_STATEFUL: - case UCNV_ISO_2022: - case UCNV_LMBCS_1: - case UCNV_LMBCS_2: - case UCNV_LMBCS_3: - case UCNV_LMBCS_4: - case UCNV_LMBCS_5: - case UCNV_LMBCS_6: - case UCNV_LMBCS_8: - case UCNV_LMBCS_11: - case UCNV_LMBCS_16: - case UCNV_LMBCS_17: - case UCNV_LMBCS_18: - case UCNV_LMBCS_19: - case UCNV_HZ: - case UCNV_SCSU: - case UCNV_UTF7: - case UCNV_BOCU1: - case UCNV_UTF16: - case UCNV_UTF32: - case UCNV_IMAP_MAILBOX: - ret = 0; - break; - case UCNV_LATIN_1: - case UCNV_UTF8: - case UCNV_ISCII: - case UCNV_US_ASCII: - case UCNV_CESU8: - ret = 1; - break; - default: { - static const UChar ascii[] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E - }; - static const char expected[] = - "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F" - "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F" - "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F" - "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F" - "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F" - "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F" - "\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F" - "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x7B\x7C\x7D\x7E"; - char output[sizeof(expected)]; - - if (ucnv_fromUChars(conv, - output, sizeof(output), - ascii, sizeof(expected), - &status) != sizeof(expected) || - U_FAILURE(status)) { - ret = 0; - } else { - ret = (memcmp(expected, output, sizeof(expected)) == 0); - } - } - } - ucnv_close(conv); - - zend_hash_add(&UG(flex_compatible), (char*)enc, key_len, (void**)&ret, sizeof(ret), NULL); - - return ret; - } -} - -ZEND_API int zend_prepare_scanner_converters(const char *onetime_encoding, int run_time TSRMLS_DC) -{ - const char *encoding = NULL; - - if (SCNG(input_conv)) { - /* Script is already converted to UTF-8 */ - return zend_set_converter_encoding(&SCNG(output_conv), "UTF-8"); - } else { - encoding = onetime_encoding; - } - - /* We need to convert the input stream only if script_encoding is not ASCII compatible */ - if (!is_encoding_flex_compatible(encoding TSRMLS_CC)) { - if (zend_set_converter_encoding(&SCNG(input_conv), encoding) == FAILURE) { - return FAILURE; - } - if (run_time) { - /* Convert rest of the buffer to unicode.runtime_encoding. */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER; - int offset, length, size; - const char *src, *old_src; - char rt_buf[8192]; - char *target = rt_buf; - UErrorCode status = U_ZERO_ERROR; - - old_src = src = yy_c_buf_p; - offset = yy_c_buf_p - b->yy_ch_buf; - length = b->yy_n_chars - offset; - size = b->yy_buf_size - offset; - - ucnv_convertEx(UG(utf8_conv), - SCNG(input_conv), - &target, rt_buf+size-2, - &src, src+length, - NULL, NULL, NULL, NULL, - TRUE, TRUE, - &status); - - if (src - old_src < length) { - /* Cannot fit into buffer. Schedule for next read. */ - SCNG(rest_len) = length - (src - old_src); - SCNG(rest_str) = emalloc(SCNG(rest_len)); - memcpy(SCNG(rest_str), src, SCNG(rest_len)); - } - length = target - rt_buf; - memcpy(yy_c_buf_p, rt_buf, length); - SCNG(yy_n_chars) = b->yy_n_chars = length + offset; - b->yy_ch_buf[b->yy_n_chars] = YY_END_OF_BUFFER_CHAR; - b->yy_ch_buf[b->yy_n_chars+1] = YY_END_OF_BUFFER_CHAR; - } - encoding = "UTF-8"; - } - return zend_set_converter_encoding(&SCNG(output_conv), encoding); -} - -ZEND_API int zend_convert_scanner_output(UConverter *conv, UChar **target, int *target_len, const char *source, int source_len, UErrorCode *status TSRMLS_DC) -{ - const char *source_consumed = NULL; - - /* set our custom callback with context */ - ucnv_setToUCallBack(conv, zend_scanner_output_callback, &source_consumed, NULL, NULL, status); - - /* reset the error and perform conversion */ - *status = U_ZERO_ERROR; - zend_string_to_unicode_ex(conv, target, target_len, source, source_len, status); - - /* figure out how many source bytes were consumed */ - if (U_SUCCESS(*status)) { - return source_len; - } else if (source_consumed) { - return source_consumed - source; - } else { - return 0; - } -} - -int zend_unicode_yyinput(zend_file_handle *file_handle, char *buf, size_t len TSRMLS_DC) -{ - size_t n; - int c = '*'; - const char *src = buf; - - /* Look of we have rest from previous call */ - if (SCNG(rest_str)) { - if (len >= SCNG(rest_len)) { - memcpy(buf, SCNG(rest_str), SCNG(rest_len)); - efree(SCNG(rest_str)); - SCNG(rest_str) = NULL; - n = SCNG(rest_len); - SCNG(rest_len) = 0; - } else { - memcpy(buf, SCNG(rest_str), len); - memcpy(SCNG(rest_str), SCNG(rest_str)+len, SCNG(rest_len)-len); - n = len; - SCNG(rest_len) -= len; - } - } else { - if (file_handle->handle.stream.interactive) { - for (n = 0; n < sizeof(buf) && (c = zend_stream_getc(yyin TSRMLS_CC)) != EOF && c != '\n'; ++n) { - buf[n] = (char)c; - } - if (c == '\n') { - buf[n++] = (char) c; - } - } else { - n = zend_stream_read(file_handle, buf, len TSRMLS_CC); - } - } - - /* Don't make any conversions if unicode=off */ - if (!UG(unicode)) { - return n; - } - - /* Autodetect encoding */ - if (!SCNG(encoding_checked)) { - int32_t signatureLength; - UErrorCode status = U_ZERO_ERROR; - const char *encoding; - - encoding = ucnv_detectUnicodeSignature(buf, n, &signatureLength, &status); - if (encoding && U_SUCCESS(status)) { - src += signatureLength; - n -= signatureLength; - if (is_encoding_flex_compatible(encoding TSRMLS_CC)) { - if (SCNG(input_conv)) { - ucnv_close(SCNG(input_conv)); - SCNG(input_conv) = NULL; - } - zend_set_converter_encoding(&SCNG(output_conv), encoding); - if (signatureLength > 0) { - memcpy(buf, src, n); - } - } else { - zend_set_converter_encoding(&SCNG(input_conv), encoding); - zend_set_converter_encoding(&SCNG(output_conv), "UTF-8"); - } - } - status = U_ZERO_ERROR; - SCNG(encoding_checked) = 1; - } - - if (SCNG(input_conv) && n >= 0) { - UErrorCode status = U_ZERO_ERROR; - char rt_buf[8192]; - char *target = rt_buf; - const char *old_src = src; - - ucnv_convertEx(UG(utf8_conv), - SCNG(input_conv), - &target, rt_buf+len, - &src, src+n, - NULL, NULL, NULL, NULL, - TRUE, TRUE, - &status); - if (src - old_src < n) { - /* Cannot fit into buffer. Schedule for next read. */ - SCNG(rest_len) = n - (src - old_src); - SCNG(rest_str) = emalloc(SCNG(rest_len)); - memcpy(SCNG(rest_str), src, SCNG(rest_len)); - } - n = target - rt_buf; - memcpy(buf, rt_buf, n); - } - return n; -} - -ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC) -{ - char *file_path=NULL; - UErrorCode status = U_ZERO_ERROR; - - if (FAILURE == zend_stream_fixup(file_handle TSRMLS_CC)) { - return FAILURE; - } - - zend_llist_add_element(&CG(open_files), file_handle); - - /* Reset the scanner for scanning the new file */ - SCNG(yy_in) = file_handle; - - zend_prepare_scanner_converters(ucnv_getName(ZEND_U_CONVERTER(UG(script_encoding_conv)), &status), 0 TSRMLS_CC); - yy_switch_to_buffer(yy_create_buffer(SCNG(yy_in), YY_BUF_SIZE TSRMLS_CC) TSRMLS_CC); - - BEGIN(INITIAL); - - if (file_handle->opened_path) { - file_path = file_handle->opened_path; - } else { - file_path = file_handle->filename; - } - - zend_set_compiled_filename(file_path TSRMLS_CC); - zend_set_compiled_script_encoding((char*)ucnv_getName(SCNG(output_conv), &status) TSRMLS_CC); - - if (CG(start_lineno)) { - CG(zend_lineno) = CG(start_lineno); - CG(start_lineno) = 0; - } else { - CG(zend_lineno) = 1; - } - - CG(increment_lineno) = 0; - return SUCCESS; -} -END_EXTERN_C() - - -ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSRMLS_DC) -{ - zend_lex_state original_lex_state; - zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array)); - zend_op_array *original_active_op_array = CG(active_op_array); - zend_op_array *retval=NULL; - int compiler_result; - zend_bool compilation_successful=0; - znode retval_znode; - zend_bool original_in_compilation = CG(in_compilation); - - retval_znode.op_type = IS_CONST; - Z_TYPE(retval_znode.u.constant) = IS_LONG; - Z_LVAL(retval_znode.u.constant) = 1; - retval_znode.u.constant.is_ref = 0; - retval_znode.u.constant.refcount = 1; - - zend_save_lexical_state(&original_lex_state TSRMLS_CC); - - retval = op_array; /* success oriented */ - - if (open_file_for_scanning(file_handle TSRMLS_CC)==FAILURE) { - if (type==ZEND_REQUIRE) { - zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, file_handle->filename); - zend_bailout(); - } else { - zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, file_handle->filename); - } - compilation_successful=0; - } else { - init_op_array(op_array, ZEND_USER_FUNCTION, INITIAL_OP_ARRAY_SIZE TSRMLS_CC); - CG(in_compilation) = 1; - CG(active_op_array) = op_array; - compiler_result = zendparse(TSRMLS_C); - zend_do_return(&retval_znode, 0 TSRMLS_CC); - zend_do_handle_exception(TSRMLS_C); - CG(in_compilation) = original_in_compilation; - if (compiler_result==1) { /* parser error */ - zend_bailout(); - } - compilation_successful=1; - } - - if (retval) { - CG(active_op_array) = original_active_op_array; - if (compilation_successful) { - pass_two(op_array TSRMLS_CC); - zend_release_labels(TSRMLS_C); - } else { - efree(op_array); - retval = NULL; - } - } - if (compilation_successful) { - zend_restore_lexical_state(&original_lex_state TSRMLS_CC); - } - return retval; -} - - -zend_op_array *compile_filename(int type, zval *filename TSRMLS_DC) -{ - zend_file_handle file_handle; - zval tmp; - zend_op_array *retval; - char *opened_path = NULL; - - if (Z_TYPE_P(filename) != IS_STRING) { - tmp = *filename; - zval_copy_ctor(&tmp); - convert_to_string(&tmp); - filename = &tmp; - } - file_handle.filename = Z_STRVAL_P(filename); - file_handle.free_filename = 0; - file_handle.type = ZEND_HANDLE_FILENAME; - file_handle.opened_path = NULL; - file_handle.handle.fp = NULL; - - retval = zend_compile_file(&file_handle, type TSRMLS_CC); - if (retval && file_handle.handle.stream.handle) { - int dummy = 1; - - if (!file_handle.opened_path) { - file_handle.opened_path = opened_path = estrndup(Z_STRVAL_P(filename), Z_STRLEN_P(filename)); - } - - zend_hash_add(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1, (void *)&dummy, sizeof(int), NULL); - - if (opened_path) { - efree(opened_path); - } - } - zend_destroy_file_handle(&file_handle TSRMLS_CC); - - if (filename==&tmp) { - zval_dtor(&tmp); - } - return retval; -} - -ZEND_API int zend_prepare_string_for_scanning(zval *str, char *filename TSRMLS_DC) -{ - const char *encoding; - UErrorCode status = U_ZERO_ERROR; - - if (Z_TYPE_P(str) == IS_UNICODE) { - convert_to_string_with_converter(str, UG(utf8_conv)); - encoding = "UTF-8"; - } else { - UErrorCode status = U_ZERO_ERROR; - encoding = ucnv_getName(ZEND_U_CONVERTER(UG(runtime_encoding_conv)), &status); - } - - /* enforce two trailing NULLs for flex... */ - STR_REALLOC(Z_STRVAL_P(str), Z_STRLEN_P(str)+2); - - Z_STRVAL_P(str)[Z_STRLEN_P(str)+1]=0; - - SCNG(yy_in)=NULL; - - zend_prepare_scanner_converters(encoding, 0 TSRMLS_CC); - yy_scan_buffer(Z_STRVAL_P(str), Z_STRLEN_P(str)+2 TSRMLS_CC); - - zend_set_compiled_filename(filename TSRMLS_CC); - zend_set_compiled_script_encoding((char*)ucnv_getName(SCNG(output_conv), &status) TSRMLS_CC); - CG(zend_lineno) = 1; - CG(increment_lineno) = 0; - return SUCCESS; -} - - -ZEND_API int zend_get_scanned_file_offset(TSRMLS_D) -{ - if (yyin) { - int offset_in_buffer = (yy_c_buf_p - (YY_CURRENT_BUFFER)->yy_ch_buf); - int read_bytes = SCNG(yy_n_chars); - int offset_from_the_end = read_bytes - offset_in_buffer; - - return zend_stream_ftell(yyin TSRMLS_CC) - offset_from_the_end; - } else { - return -1; - } -} - - -zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC) -{ - zend_lex_state original_lex_state; - zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array)); - zend_op_array *original_active_op_array = CG(active_op_array); - zend_op_array *retval; - zval tmp; - int compiler_result; - zend_bool original_in_compilation = CG(in_compilation); - - tmp = *source_string; - zval_copy_ctor(&tmp); - if (Z_TYPE(tmp) != IS_STRING && Z_TYPE(tmp) != IS_UNICODE) { - convert_to_text(&tmp); - } - source_string = &tmp; - - if (Z_UNILEN_P(source_string)==0) { - efree(op_array); - zval_dtor(&tmp); - return NULL; - } - - CG(in_compilation) = 1; - - zend_save_lexical_state(&original_lex_state TSRMLS_CC); - if (zend_prepare_string_for_scanning(source_string, filename TSRMLS_CC)==FAILURE) { - efree(op_array); - retval = NULL; - } else { - zend_bool orig_interactive = CG(interactive); - - CG(interactive) = 0; - init_op_array(op_array, ZEND_EVAL_CODE, INITIAL_OP_ARRAY_SIZE TSRMLS_CC); - CG(interactive) = orig_interactive; - CG(active_op_array) = op_array; - BEGIN(ST_IN_SCRIPTING); - compiler_result = zendparse(TSRMLS_C); - - if (compiler_result==1) { - CG(active_op_array) = original_active_op_array; - CG(unclean_shutdown)=1; - retval = NULL; - } else { - zend_do_return(NULL, 0 TSRMLS_CC); - zend_do_handle_exception(TSRMLS_C); - CG(active_op_array) = original_active_op_array; - pass_two(op_array TSRMLS_CC); - zend_release_labels(TSRMLS_C); - retval = op_array; - } - zend_restore_lexical_state(&original_lex_state TSRMLS_CC); - } - zval_dtor(&tmp); - CG(in_compilation) = original_in_compilation; - return retval; -} - - -BEGIN_EXTERN_C() -int highlight_file(char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini TSRMLS_DC) -{ - zend_lex_state original_lex_state; - zend_file_handle file_handle; - - file_handle.type = ZEND_HANDLE_FILENAME; - file_handle.filename = filename; - file_handle.free_filename = 0; - file_handle.opened_path = NULL; - zend_save_lexical_state(&original_lex_state TSRMLS_CC); - if (open_file_for_scanning(&file_handle TSRMLS_CC)==FAILURE) { - zend_message_dispatcher(ZMSG_FAILED_HIGHLIGHT_FOPEN, filename); - return FAILURE; - } - zend_highlight(syntax_highlighter_ini TSRMLS_CC); - zend_destroy_file_handle(&file_handle TSRMLS_CC); - zend_restore_lexical_state(&original_lex_state TSRMLS_CC); - return SUCCESS; -} - -int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, char *str_name TSRMLS_DC) -{ - zend_lex_state original_lex_state; - zval tmp = *str; - - str = &tmp; - zval_copy_ctor(str); - zend_save_lexical_state(&original_lex_state TSRMLS_CC); - if (zend_prepare_string_for_scanning(str, str_name TSRMLS_CC)==FAILURE) { - return FAILURE; - } - BEGIN(INITIAL); - zend_highlight(syntax_highlighter_ini TSRMLS_CC); - zend_restore_lexical_state(&original_lex_state TSRMLS_CC); - zval_dtor(str); - return SUCCESS; -} -END_EXTERN_C() - -#define zend_copy_value(zendlval, yytext, yyleng) \ - Z_STRVAL_P(zendlval) = (char *)estrndup(yytext, yyleng); \ - Z_STRLEN_P(zendlval) = yyleng; - -int zend_scan_unicode_double_string(zval *zendlval TSRMLS_DC) -{ - register UChar *s, *t, c; - UChar *end; - UChar32 codepoint = 0; - int8_t digit; - int8_t min_digits = 0, max_digits = 0; - int8_t bits; - int8_t n; - - HANDLE_NEWLINES(yytext, yyleng); - - if (!zend_copy_scanner_string(zendlval, yytext+1, yyleng-2, IS_UNICODE, SCNG(output_conv) TSRMLS_CC)) { - return 0; - } - - /* convert escape sequences */ - s = t = Z_USTRVAL_P(zendlval); - end = s+Z_USTRLEN_P(zendlval); - while (s=end) { - continue; - } - - min_digits = 0; - codepoint = 0; - bits = 4; - n = 0; - - switch(c) { - case 0x6E: /*'n'*/ - *t++ = (UChar) 0x0A; /*'\n'*/ - Z_USTRLEN_P(zendlval)--; - break; - case 0x72: /*'r'*/ - *t++ = (UChar) 0x0D; /*'\r'*/ - Z_USTRLEN_P(zendlval)--; - break; - case 0x74: /*'t'*/ - *t++ = (UChar) 0x09; /*'\t'*/ - Z_USTRLEN_P(zendlval)--; - break; - case 0x5C: /*'\\'*/ - case 0x24: /*'$'*/ - case 0x22: /*'"'*/ - *t++ = *s; - Z_USTRLEN_P(zendlval)--; - break; - case 0x43: /*'C'*/ - { - UChar *p = s+1; - if (p < end && zend_parse_charname_sequence(&p, end, &codepoint TSRMLS_CC)) { - Z_USTRLEN_P(zendlval) -= p - s + 1; - s = p; - if (U_IS_BMP(codepoint)) { - *t++ = (UChar) codepoint; - } else { - *t++ = (UChar) U16_LEAD(codepoint); - *t++ = (UChar) U16_TRAIL(codepoint); - Z_USTRLEN_P(zendlval)++; - } - } else { - zend_error(E_COMPILE_WARNING, "Invalid \\C{..} sequence"); - efree(Z_USTRVAL_P(zendlval)); - return 0; - } - break; - } - case 0x75: /*'u'*/ - min_digits = 4; - max_digits = 4; - Z_USTRLEN_P(zendlval)--; - break; - case 0x55: /*'U'*/ - min_digits = 6; - max_digits = 6; - Z_USTRLEN_P(zendlval)--; - break; - default: - digit = zend_get_octal_digit(*s); - if (digit >= 0) { - min_digits = 1; - max_digits = 3; - bits = 3; - n = 1; /* already have one digit */ - codepoint = digit; - } else if (c == 0x78 /*'x'*/ - && (s+1) < end && (digit = zend_get_hex_digit(*(s+1))) >= 0) { - min_digits = 1; - max_digits = 2; - Z_USTRLEN_P(zendlval)--; - s++; - n = 1; /* already have one digit */ - codepoint = digit; - } else { - *t++ = 0x5C; /*'\\'*/ - *t++ = *s; - } - break; - } - - /* need to parse a number for one of the escape sequences */ - if (min_digits != 0) { - while (s++ < end && n < max_digits) { - digit = (bits == 4) ? zend_get_hex_digit(*s) : zend_get_octal_digit(*s); - if (digit < 0) { - break; - } - codepoint = (codepoint << bits) | digit; - n++; - } - - if (n < min_digits) { - /* can only happen for \u and \U sequences */ - zend_error(E_COMPILE_WARNING,"\\%c escape sequence requires exactly %d hexadecimal digits", (char) c, min_digits); - efree(Z_USTRVAL_P(zendlval)); - return 0; - } - - if (U_IS_BMP(codepoint)) { - *t++ = (UChar) codepoint; - Z_USTRLEN_P(zendlval) -= n; - } else if (codepoint <= 0x10FFFF) { - *t++ = (UChar) U16_LEAD(codepoint); - *t++ = (UChar) U16_TRAIL(codepoint); - Z_USTRLEN_P(zendlval) -= n-1; - } else { - zend_error(E_COMPILE_WARNING,"\\U%06x is above the highest valid codepoint 0x10FFFF", codepoint); - efree(Z_USTRVAL_P(zendlval)); - return 0; - } - } else { - s++; - } - } else { - *t++ = *s++; - } - } - *t = 0; - - return T_CONSTANT_ENCAPSED_STRING; -} - -int zend_scan_unicode_single_string(zval *zendlval TSRMLS_DC) -{ - register UChar *s, *t; - UChar *end; - UChar32 codepoint = 0; - - HANDLE_NEWLINES(yytext, yyleng); - - if (!zend_copy_scanner_string(zendlval, yytext+1, yyleng-2, IS_UNICODE, SCNG(output_conv) TSRMLS_CC)) { - return 0; - } - - /* convert escape sequences */ - s = t = Z_USTRVAL_P(zendlval); - end = s+Z_USTRLEN_P(zendlval); - while (s=end) { - continue; - } - switch(*s) { - case 0x5C: /*'\\'*/ - case 0x27: /*'\''*/ - *t++ = *s; - Z_USTRLEN_P(zendlval)--; - break; - case 0x43: /*'C'*/ - { - UChar *p = s+1; - if (p < end && zend_parse_charname_sequence(&p, end, &codepoint TSRMLS_CC)) { - Z_USTRLEN_P(zendlval) -= p - s + 1; - s = p; - if (U_IS_BMP(codepoint)) { - *t++ = (UChar) codepoint; - } else { - *t++ = (UChar) U16_LEAD(codepoint); - *t++ = (UChar) U16_TRAIL(codepoint); - Z_USTRLEN_P(zendlval)++; - } - } else { - zend_error(E_COMPILE_WARNING, "Invalid \\C{..} sequence"); - efree(Z_USTRVAL_P(zendlval)); - return 0; - } - break; - } - case 0x75 /*'u'*/: - { - codepoint = 0; - if (zend_udigits_to_codepoint(s+1, end, &codepoint, 4)) { - *t++ = (UChar) codepoint; - s += 4; - Z_USTRLEN_P(zendlval) -= 5; - } else { - zend_error(E_COMPILE_WARNING,"\\u escape sequence requires exactly 4 hexadecimal digits"); - efree(Z_USTRVAL_P(zendlval)); - return 0; - } - break; - } - case 0x55 /*'U'*/: - { - codepoint = 0; - if (zend_udigits_to_codepoint(s+1, end, &codepoint, 6)) { - if (U_IS_BMP(codepoint)) { - *t++ = (UChar) codepoint; - Z_USTRLEN_P(zendlval) -= 7; - } else if (codepoint <= 0x10FFFF) { - *t++ = (UChar) U16_LEAD(codepoint); - *t++ = (UChar) U16_TRAIL(codepoint); - Z_USTRLEN_P(zendlval) -= 6; - } else { - zend_error(E_COMPILE_WARNING,"\\U%06x is above the highest valid codepoint 0x10FFFF", codepoint); - efree(Z_USTRVAL_P(zendlval)); - return 0; - } - s += 6; - } else { - zend_error(E_COMPILE_WARNING,"\\U escape sequence requires exactly 6 hexadecimal digits"); - efree(Z_USTRVAL_P(zendlval)); - return 0; - } - break; - } - default: - *t++ = 0x5C; /*'\\'*/ - *t++ = *s; - break; - } - s++; - } else { - *t++ = *s++; - } - } - *t = 0; - - return T_CONSTANT_ENCAPSED_STRING; -} - -int zend_scan_binary_double_string(zval *zendlval, int bprefix TSRMLS_DC) -{ - register char *s, *t; - char *end; - - Z_STRVAL_P(zendlval) = estrndup(yytext+bprefix+1, yyleng-bprefix-2); - Z_STRLEN_P(zendlval) = yyleng-bprefix-2; - Z_TYPE_P(zendlval) = IS_STRING; - HANDLE_NEWLINES(yytext, yyleng); - - /* convert escape sequences */ - s = t = Z_STRVAL_P(zendlval); - end = s+Z_STRLEN_P(zendlval); - while (s=end) { - continue; - } - switch(*s) { - case 'n': - *t++ = '\n'; - Z_STRLEN_P(zendlval)--; - break; - case 'r': - *t++ = '\r'; - Z_STRLEN_P(zendlval)--; - break; - case 't': - *t++ = '\t'; - Z_STRLEN_P(zendlval)--; - break; - case '\\': - case '$': - case '"': - *t++ = *s; - Z_STRLEN_P(zendlval)--; - break; - default: - /* check for an octal */ - if (ZEND_IS_OCT(*s)) { - char octal_buf[4] = { 0, 0, 0, 0 }; - - octal_buf[0] = *s; - Z_STRLEN_P(zendlval)--; - if ((s+1)=end) { - continue; - } - switch(*s) { - case '\\': - case '\'': - *t++ = *s; - Z_STRLEN_P(zendlval)--; - break; - default: - *t++ = '\\'; - *t++ = *s; - break; - } - s++; - } else { - *t++ = *s++; - } - } - *t = 0; - - return T_CONSTANT_ENCAPSED_STRING; -} - -%} - -LNUM [0-9]+ -DNUM ([0-9]*[\.][0-9]+)|([0-9]+[\.][0-9]*) -EXPONENT_DNUM (({LNUM}|{DNUM})[eE][+-]?{LNUM}) -HNUM "0x"[0-9a-fA-F]+ -LABEL [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* -WHITESPACE [ \n\r\t]+ -TABS_AND_SPACES [ \t]* -TOKENS [;:,.\[\]()|^&+-/*=%!~$<>?@] -ENCAPSED_TOKENS [\[\]{}$] -ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+ -ANY_CHAR (.|[\n]) -NEWLINE ("\r"|"\n"|"\r\n") - -%option noyylineno -%option noyywrap -%% - -"exit" { - return T_EXIT; -} - -"die" { - return T_EXIT; -} - -"function" { - return T_FUNCTION; -} - -"const" { - return T_CONST; -} - -"return" { - return T_RETURN; -} - -"try" { - return T_TRY; -} - -"catch" { - return T_CATCH; -} - -"throw" { - return T_THROW; -} - -"if" { - return T_IF; -} - -"elseif" { - return T_ELSEIF; -} - -"endif" { - return T_ENDIF; -} - -"else" { - return T_ELSE; -} - -"while" { - return T_WHILE; -} - -"endwhile" { - return T_ENDWHILE; -} - -"do" { - return T_DO; -} - -"for" { - return T_FOR; -} - -"endfor" { - return T_ENDFOR; -} - -"foreach" { - return T_FOREACH; -} - -"endforeach" { - return T_ENDFOREACH; -} - -"declare" { - return T_DECLARE; -} - -"enddeclare" { - return T_ENDDECLARE; -} - -"instanceof" { - return T_INSTANCEOF; -} - -"as" { - return T_AS; -} - -"switch" { - return T_SWITCH; -} - -"endswitch" { - return T_ENDSWITCH; -} - -"case" { - return T_CASE; -} - -"default" { - return T_DEFAULT; -} - -"break" { - return T_BREAK; -} - -"continue" { - return T_CONTINUE; -} - -"goto" { - return T_GOTO; -} - -"echo" { - return T_ECHO; -} - -"print" { - return T_PRINT; -} - -"class" { - return T_CLASS; -} - -"interface" { - return T_INTERFACE; -} - -"extends" { - return T_EXTENDS; -} - -"implements" { - return T_IMPLEMENTS; -} - -"->" { - yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC); - return T_OBJECT_OPERATOR; -} - -{LABEL} { - yy_pop_state(TSRMLS_C); - if (!zend_copy_scanner_string(zendlval, yytext, yyleng, UG(unicode)?IS_UNICODE:IS_STRING, SCNG(output_conv) TSRMLS_CC)) { - return 0; - } - if (UG(unicode) && !zend_check_and_normalize_identifier(zendlval)) { - return 0; - } - return T_STRING; -} - -{ANY_CHAR} { - yyless(0); - yy_pop_state(TSRMLS_C); -} - -"::" { - return T_PAAMAYIM_NEKUDOTAYIM; -} - -"new" { - return T_NEW; -} - -"clone" { - return T_CLONE; -} - -"var" { - return T_VAR; -} - -"("{TABS_AND_SPACES}("int"|"integer"){TABS_AND_SPACES}")" { - return T_INT_CAST; -} - -"("{TABS_AND_SPACES}("real"|"double"|"float"){TABS_AND_SPACES}")" { - return T_DOUBLE_CAST; -} - -"("{TABS_AND_SPACES}"string"{TABS_AND_SPACES}")" { - return T_STRING_CAST; -} - -"("{TABS_AND_SPACES}"unicode"{TABS_AND_SPACES}")" { - return T_UNICODE_CAST; -} - -"("{TABS_AND_SPACES}"binary"{TABS_AND_SPACES}")" { - return T_BINARY_CAST; -} - -"("{TABS_AND_SPACES}"array"{TABS_AND_SPACES}")" { - return T_ARRAY_CAST; -} - -"("{TABS_AND_SPACES}"object"{TABS_AND_SPACES}")" { - return T_OBJECT_CAST; -} - -"("{TABS_AND_SPACES}("bool"|"boolean"){TABS_AND_SPACES}")" { - return T_BOOL_CAST; -} - -"("{TABS_AND_SPACES}("unset"){TABS_AND_SPACES}")" { - return T_UNSET_CAST; -} - -"eval" { - return T_EVAL; -} - -"include" { - return T_INCLUDE; -} - -"include_once" { - return T_INCLUDE_ONCE; -} - -"require" { - return T_REQUIRE; -} - -"require_once" { - return T_REQUIRE_ONCE; -} - -"use" { - return T_USE; -} - -"global" { - return T_GLOBAL; -} - -"isset" { - return T_ISSET; -} - -"empty" { - return T_EMPTY; -} - -"__halt_compiler" { - return T_HALT_COMPILER; -} - -"static" { - return T_STATIC; -} - -"abstract" { - return T_ABSTRACT; -} - -"final" { - return T_FINAL; -} - -"private" { - return T_PRIVATE; -} - -"protected" { - return T_PROTECTED; -} - -"public" { - return T_PUBLIC; -} - -"unset" { - return T_UNSET; -} - -"=>" { - return T_DOUBLE_ARROW; -} - -"list" { - return T_LIST; -} - -"array" { - return T_ARRAY; -} - -"++" { - return T_INC; -} - -"--" { - return T_DEC; -} - -"===" { - return T_IS_IDENTICAL; -} - -"!==" { - return T_IS_NOT_IDENTICAL; -} - -"==" { - return T_IS_EQUAL; -} - -"!="|"<>" { - return T_IS_NOT_EQUAL; -} - -"<=" { - return T_IS_SMALLER_OR_EQUAL; -} - -">=" { - return T_IS_GREATER_OR_EQUAL; -} - -"+=" { - return T_PLUS_EQUAL; -} - -"-=" { - return T_MINUS_EQUAL; -} - -"*=" { - return T_MUL_EQUAL; -} - -"/=" { - return T_DIV_EQUAL; -} - -".=" { - return T_CONCAT_EQUAL; -} - -"%=" { - return T_MOD_EQUAL; -} - -"<<=" { - return T_SL_EQUAL; -} - -">>=" { - return T_SR_EQUAL; -} - -"&=" { - return T_AND_EQUAL; -} - -"|=" { - return T_OR_EQUAL; -} - -"^=" { - return T_XOR_EQUAL; -} - -"||" { - return T_BOOLEAN_OR; -} - -"&&" { - return T_BOOLEAN_AND; -} - -"OR" { - return T_LOGICAL_OR; -} - -"AND" { - return T_LOGICAL_AND; -} - -"XOR" { - return T_LOGICAL_XOR; -} - -"<<" { - return T_SL; -} - -">>" { - return T_SR; -} - -{TOKENS} { - return yytext[0]; -} - - -"{" { - yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); - return '{'; -} - - -"${" { - yy_push_state(ST_LOOKING_FOR_VARNAME TSRMLS_CC); - return T_DOLLAR_OPEN_CURLY_BRACES; -} - - -"}" { - RESET_DOC_COMMENT(); - /* This is a temporary fix which is dependant on flex and it's implementation */ - if (yy_start_stack_ptr) { - yy_pop_state(TSRMLS_C); - } - return '}'; -} - - -{LABEL} { - if (!zend_copy_scanner_string(zendlval, yytext, yyleng, UG(unicode)?IS_UNICODE:IS_STRING, SCNG(output_conv) TSRMLS_CC)) { - return 0; - } - if (UG(unicode) && !zend_check_and_normalize_identifier(zendlval)) { - return 0; - } - yy_pop_state(TSRMLS_C); - yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); - return T_STRING_VARNAME; -} - - -{ANY_CHAR} { - yyless(0); - yy_pop_state(TSRMLS_C); - yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); -} - - -{LNUM} { - errno = 0; - Z_LVAL_P(zendlval) = strtol(yytext, NULL, 0); - if (errno == ERANGE) { /* overflow */ - Z_DVAL_P(zendlval) = zend_strtod(yytext, NULL); - Z_TYPE_P(zendlval) = IS_DOUBLE; - return T_DNUMBER; - } else { - Z_TYPE_P(zendlval) = IS_LONG; - return T_LNUMBER; - } -} - -{HNUM} { - errno = 0; - Z_LVAL_P(zendlval) = strtoul(yytext, NULL, 16); - if (errno == ERANGE) { /* overflow */ - /* not trying strtod - it returns trash on 0x-es */ - Z_LVAL_P(zendlval) = LONG_MAX; /* maximal long */ - zend_error(E_NOTICE,"Hex number is too big: %s", yytext); - } else { - if (Z_LVAL_P(zendlval) < 0) { - /* maintain consistency with the old way */ - Z_DVAL_P(zendlval) = (unsigned long) Z_LVAL_P(zendlval); - Z_TYPE_P(zendlval) = IS_DOUBLE; - return T_DNUMBER; - } - Z_TYPE_P(zendlval) = IS_LONG; - } - Z_TYPE_P(zendlval) = IS_LONG; - return T_LNUMBER; -} - -{LNUM}|{HNUM} { /* treat numbers (almost) as strings inside encapsulated strings */ - if (!zend_copy_scanner_string(zendlval, yytext, yyleng, CG(literal_type), SCNG(output_conv) TSRMLS_CC)) { - return 0; - } - return T_NUM_STRING; -} - -{DNUM}|{EXPONENT_DNUM} { - Z_DVAL_P(zendlval) = zend_strtod(yytext, NULL); - Z_TYPE_P(zendlval) = IS_DOUBLE; - return T_DNUMBER; -} - -"__CLASS__" { - zstr class_name = NULL_ZSTR; - - if (CG(active_class_entry)) { - class_name = CG(active_class_entry)->name; - } - - if (!class_name.v) { - ZVAL_EMPTY_TEXT(zendlval); - } else { - ZVAL_TEXT(zendlval, class_name, 1); - } - return T_CLASS_C; -} - -"__FUNCTION__" { - zstr func_name = NULL_ZSTR; - - if (CG(active_op_array)) { - func_name = CG(active_op_array)->function_name; - } - - if (!func_name.v) { - ZVAL_EMPTY_TEXT(zendlval); - } else { - ZVAL_TEXT(zendlval, func_name, 1); - } - return T_FUNC_C; -} - -"__METHOD__" { - zstr class_name = CG(active_class_entry) ? CG(active_class_entry)->name : NULL_ZSTR; - zstr func_name = CG(active_op_array)? CG(active_op_array)->function_name : NULL_ZSTR; - size_t len = 0; - - if (UG(unicode)) { - size_t len1; - - if (class_name.u) { - len += len1 = u_strlen(class_name.u); - len += 2; - } - if (func_name.u) { - len += u_strlen(func_name.u); - } else { - func_name.u = EMPTY_STR; - } - Z_USTRLEN_P(zendlval) = len; - Z_USTRVAL_P(zendlval) = eumalloc(len+1); - if (class_name.u) { - u_strcpy(Z_USTRVAL_P(zendlval), class_name.u); - Z_USTRVAL_P(zendlval)[len1] = 0x3a; /* ':' */ - Z_USTRVAL_P(zendlval)[len1+1] = 0x3a; /* ':' */ - Z_USTRVAL_P(zendlval)[len1+2] = 0; - } else { - Z_USTRVAL_P(zendlval)[0] = 0; - } - u_strcat(Z_USTRVAL_P(zendlval), func_name.u); - Z_TYPE_P(zendlval) = IS_UNICODE; - } else { - if (class_name.s) { - len += strlen(class_name.s) + 2; - } - if (func_name.s) { - len += strlen(func_name.s); - } - - Z_STRVAL_P(zendlval) = emalloc(len+1); - Z_STRLEN_P(zendlval) = sprintf(Z_STRVAL_P(zendlval), "%s%s%s", - class_name.s ? class_name.s : "", - class_name.s && func_name.s ? "::" : "", - func_name.s ? func_name.s : "" - ); - Z_STRLEN_P(zendlval) = strlen(Z_STRVAL_P(zendlval)); - Z_TYPE_P(zendlval) = IS_STRING; - } - return T_METHOD_C; -} - -"__LINE__" { - Z_LVAL_P(zendlval) = CG(zend_lineno); - Z_TYPE_P(zendlval) = IS_LONG; - return T_LINE; -} - -"__FILE__" { - char *filename = zend_get_compiled_filename(TSRMLS_C); - - if (!filename) { - filename = ""; - } - ZVAL_RT_STRING(zendlval, filename, 1); - return T_FILE; -} - -(([^<]|"<"[^?%s<]){1,400})|""" { - HANDLE_NEWLINES(yytext, yyleng); - if (CG(short_tags) || yyleng>2) { /* yyleng>2 means it's not */ - Z_STRVAL_P(zendlval) = yytext; /* no copying - intentional */ - Z_STRLEN_P(zendlval) = yyleng; - Z_TYPE_P(zendlval) = IS_STRING; - BEGIN(ST_IN_SCRIPTING); - return T_OPEN_TAG; - } else { - Z_STRVAL_P(zendlval) = (char *) estrndup(yytext, yyleng); - Z_STRLEN_P(zendlval) = yyleng; - Z_TYPE_P(zendlval) = IS_STRING; - return T_INLINE_HTML; - } -} - - -"<%="|""<%" { - if (CG(asp_tags)) { - Z_STRVAL_P(zendlval) = yytext; /* no copying - intentional */ - Z_STRLEN_P(zendlval) = yyleng; - Z_TYPE_P(zendlval) = IS_STRING; - BEGIN(ST_IN_SCRIPTING); - return T_OPEN_TAG; - } else { - Z_STRVAL_P(zendlval) = (char *) estrndup(yytext, yyleng); - Z_STRLEN_P(zendlval) = yyleng; - Z_TYPE_P(zendlval) = IS_STRING; - return T_INLINE_HTML; - } -} - - -""$"{LABEL} { - if (!zend_copy_scanner_string(zendlval, (yytext+1), (yyleng-1), UG(unicode)?IS_UNICODE:IS_STRING, SCNG(output_conv) TSRMLS_CC)) { - return 0; - } - if (UG(unicode) && !zend_check_and_normalize_identifier(zendlval)) { - return 0; - } - return T_VARIABLE; -} - -{LABEL} { - if (!zend_copy_scanner_string(zendlval, yytext, yyleng, UG(unicode)?IS_UNICODE:IS_STRING, SCNG(output_conv) TSRMLS_CC)) { - return 0; - } - if (UG(unicode) && !zend_check_and_normalize_identifier(zendlval)) { - return 0; - } - return T_STRING; -} - -{LABEL} { - if (!zend_copy_scanner_string(zendlval, yytext, yyleng, CG(literal_type), SCNG(output_conv) TSRMLS_CC)) { - return 0; - } - return T_STRING; -} - - -{WHITESPACE} { - Z_STRVAL_P(zendlval) = yytext; /* no copying - intentional */ - Z_STRLEN_P(zendlval) = yyleng; - Z_TYPE_P(zendlval) = IS_STRING; - HANDLE_NEWLINES(yytext, yyleng); - return T_WHITESPACE; -} - - -"#"|"//" { - BEGIN(ST_ONE_LINE_COMMENT); - yymore(); -} - -"?"|"%"|">" { - yymore(); -} - -[^\n\r?%>]*{ANY_CHAR} { - switch (yytext[yyleng-1]) { - case '?': case '%': case '>': - yyless(yyleng-1); - yymore(); - break; - case '\n': - CG(zend_lineno)++; - /* intentional fall through */ - default: - Z_STRVAL_P(zendlval) = yytext; /* no copying - intentional */ - Z_STRLEN_P(zendlval) = yyleng; - Z_TYPE_P(zendlval) = IS_STRING; - BEGIN(ST_IN_SCRIPTING); - return T_COMMENT; - } -} - -{NEWLINE} { - Z_STRVAL_P(zendlval) = yytext; /* no copying - intentional */ - Z_STRLEN_P(zendlval) = yyleng; - Z_TYPE_P(zendlval) = IS_STRING; - BEGIN(ST_IN_SCRIPTING); - CG(zend_lineno)++; - return T_COMMENT; -} - -"?>"|"%>" { - if (CG(asp_tags) || yytext[yyleng-2] != '%') { /* asp comment? */ - Z_STRVAL_P(zendlval) = yytext; /* no copying - intentional */ - Z_STRLEN_P(zendlval) = yyleng-2; - Z_TYPE_P(zendlval) = IS_STRING; - yyless(yyleng-2); - BEGIN(ST_IN_SCRIPTING); - return T_COMMENT; - } else { - yymore(); - } -} - -"/**"{WHITESPACE} { - CG(comment_start_line) = CG(zend_lineno); - RESET_DOC_COMMENT(); - BEGIN(ST_DOC_COMMENT); - yymore(); -} - -"/*" { - CG(comment_start_line) = CG(zend_lineno); - BEGIN(ST_COMMENT); - yymore(); -} - - -[^*]+ { - yymore(); -} - -"*/" { - zval temp; - - HANDLE_NEWLINES(yytext, yyleng); - if (!zend_copy_scanner_string(&temp, yytext, yyleng, UG(unicode)?IS_UNICODE:IS_STRING, SCNG(output_conv) TSRMLS_CC)) { - return 0; - } - CG(doc_comment) = temp.value.uni.val; - CG(doc_comment_len) = temp.value.uni.len; - BEGIN(ST_IN_SCRIPTING); - return T_DOC_COMMENT; -} - -"*/" { - HANDLE_NEWLINES(yytext, yyleng); - BEGIN(ST_IN_SCRIPTING); - return T_COMMENT; -} - -"*" { - yymore(); -} - -("?>"|""){NEWLINE}? { - Z_STRVAL_P(zendlval) = yytext; /* no copying - intentional */ - Z_STRLEN_P(zendlval) = yyleng; - Z_TYPE_P(zendlval) = IS_STRING; - BEGIN(INITIAL); - return T_CLOSE_TAG; /* implicit ';' at php-end tag */ -} - - -"%>"{NEWLINE}? { - if (CG(asp_tags)) { - BEGIN(INITIAL); - Z_STRLEN_P(zendlval) = yyleng; - Z_TYPE_P(zendlval) = IS_STRING; - Z_STRVAL_P(zendlval) = yytext; /* no copying - intentional */ - return T_CLOSE_TAG; /* implicit ';' at php-end tag */ - } else { - yyless(1); - return yytext[0]; - } -} - - -(["]([^$"\\]|("\\".))*["]) { - if (UG(unicode)) { - return zend_scan_unicode_double_string(zendlval TSRMLS_CC); - } else { - return zend_scan_binary_double_string(zendlval, 0 TSRMLS_CC); - } -} - - -(b["]([^$"\\]|("\\".))*["]) { - return zend_scan_binary_double_string(zendlval, 1 TSRMLS_CC); -} - - -([']([^'\\]|("\\".))*[']) { - if (UG(unicode)) { - return zend_scan_unicode_single_string(zendlval TSRMLS_CC); - } else { - return zend_scan_binary_single_string(zendlval, 0 TSRMLS_CC); - } -} - - -("b'"([^'\\]|("\\".))*[']) { - return zend_scan_binary_single_string(zendlval, 1 TSRMLS_CC); -} - - -["] { - BEGIN(ST_DOUBLE_QUOTES); - return '\"'; -} - -b["] { - BEGIN(ST_DOUBLE_QUOTES); - return T_BINARY_DOUBLE; -} - -b"<<<"{TABS_AND_SPACES}{LABEL}{NEWLINE} { - char *s; - CG(zend_lineno)++; - CG(heredoc_len) = yyleng-4-1-(yytext[yyleng-2]=='\r'?1:0); - s = yytext+4; - while ((*s == ' ') || (*s == '\t')) { - s++; - CG(heredoc_len)--; - } - CG(heredoc) = estrndup(s, CG(heredoc_len)); - BEGIN(ST_HEREDOC); - return T_BINARY_HEREDOC; -} - - -"<<<"{TABS_AND_SPACES}{LABEL}{NEWLINE} { - char *s; - CG(zend_lineno)++; - CG(heredoc_len) = yyleng-3-1-(yytext[yyleng-2]=='\r'?1:0); - s = yytext+3; - while ((*s == ' ') || (*s == '\t')) { - s++; - CG(heredoc_len)--; - } - CG(heredoc) = estrndup(s, CG(heredoc_len)); - BEGIN(ST_HEREDOC); - return T_START_HEREDOC; -} - - -[`] { - BEGIN(ST_BACKQUOTE); - return '`'; -} - - -^{LABEL}(";")?{NEWLINE} { - int label_len; - - if (yytext[yyleng-2]=='\r') { - label_len = yyleng-2; - } else { - label_len = yyleng-1; - } - - if (yytext[label_len-1]==';') { - label_len--; - } - - if (label_len==CG(heredoc_len) && !memcmp(yytext, CG(heredoc), label_len)) { - Z_STRVAL_P(zendlval) = estrndup(yytext, label_len); /* unput destroys yytext */ - Z_STRLEN_P(zendlval) = label_len; - yyless(yyleng - (yyleng - label_len)); - efree(CG(heredoc)); - CG(heredoc)=NULL; - CG(heredoc_len)=0; - BEGIN(ST_IN_SCRIPTING); - return T_END_HEREDOC; - } else { - CG(zend_lineno)++; - if (!zend_copy_scanner_string(zendlval, yytext, yyleng, CG(literal_type), SCNG(output_conv) TSRMLS_CC)) { - return 0; - } - return T_STRING; - } -} - - -{ESCAPED_AND_WHITESPACE} { - HANDLE_NEWLINES(yytext, yyleng); - if (!zend_copy_scanner_string(zendlval, yytext, yyleng, CG(literal_type), SCNG(output_conv) TSRMLS_CC)) { - return 0; - } - return T_ENCAPSED_AND_WHITESPACE; -} - -[`]+ { - if (!zend_copy_scanner_string(zendlval, yytext, yyleng, CG(literal_type), SCNG(output_conv) TSRMLS_CC)) { - return 0; - } - return T_ENCAPSED_AND_WHITESPACE; -} - - -["]+ { - if (!zend_copy_scanner_string(zendlval, yytext, yyleng, CG(literal_type), SCNG(output_conv) TSRMLS_CC)) { - return 0; - } - return T_ENCAPSED_AND_WHITESPACE; -} - - -"$"[^a-zA-Z_\x7f-\xff{] { - Z_LVAL_P(zendlval) = (long) yytext[0]; - if (yyleng == 2) { - yyless(1); - } - return T_CHARACTER; -} - - -{ENCAPSED_TOKENS} { - Z_LVAL_P(zendlval) = (long) yytext[0]; - return yytext[0]; -} - -"{$" { - Z_LVAL_P(zendlval) = (long) yytext[0]; - yy_push_state(ST_IN_SCRIPTING TSRMLS_CC); - yyless(1); - return T_CURLY_OPEN; -} - - -"\\\"" { - Z_LVAL_P(zendlval) = (long) '"'; - return T_CHARACTER; -} - -"\\`" { - Z_LVAL_P(zendlval) = (long) '`'; - return T_CHARACTER; -} - -"\\"[0-7]{1,3} { - Z_LVAL_P(zendlval) = strtol(yytext+1, NULL, 8); - return T_CHARACTER; -} - -"\\x"[0-9A-Fa-f]{1,2} { - Z_LVAL_P(zendlval) = strtol (yytext+2, NULL, 16); - return T_CHARACTER; -} - - -"\\u"[0-9A-Fa-f]{0,6} { - UChar32 codepoint; - int req_digits = (yytext[1] == 'U') ? 6 : 4; - - if (CG(literal_type) == IS_UNICODE) { - if (zend_digits_to_codepoint(yytext+2, yytext+yyleng, &codepoint, req_digits)) { - if (codepoint <= 0x10FFFF) { - Z_LVAL_P(zendlval) = (long) codepoint; - /* give back if we grabbed more than needed for \u case */ - if (yyleng > req_digits + 2) { - yyless(req_digits + 2); - } - return T_CHARACTER; - } else { - zend_error(E_COMPILE_WARNING,"\\U%06x is above the highest valid codepoint 0x10FFFF", codepoint); - return 0; - } - } else { - zend_error(E_COMPILE_WARNING,"\\%c escape sequence requires exactly %d hexadecimal digits", yytext[1], req_digits); - return 0; - } - } else { - zend_copy_scanner_string(zendlval, yytext, yyleng, CG(literal_type), SCNG(output_conv) TSRMLS_CC); - return T_STRING; - } -} - - -"\\C"("{"[A-Z0-9 -]+"}")? { - UChar32 codepoint; - - if (CG(literal_type) == IS_UNICODE && (yytext[1] == 'C')) { - /* minimum valid string is \C{.} */ - if (yyleng >= 5) { - /* safe, since we have } at the end */ - yytext[yyleng-1] = 0; - if (zend_uchar_from_name(yytext+3, &codepoint)) { - Z_LVAL_P(zendlval) = (long) codepoint; - return T_CHARACTER; - } else { - zend_error(E_COMPILE_WARNING, "Invalid Unicode character name: '%s'", yytext+3); - return 0; - } - } else { - zend_error(E_COMPILE_WARNING, "Invalid \\C{..} sequence"); - return 0; - } - } else { - zend_copy_scanner_string(zendlval, yytext, yyleng, CG(literal_type), SCNG(output_conv) TSRMLS_CC); - return T_STRING; - } -} - -"\\{" { - if (!zend_copy_scanner_string(zendlval, yytext, yyleng, CG(literal_type), SCNG(output_conv) TSRMLS_CC)) { - return 0; - } - return T_STRING; -} - -"\\"{ANY_CHAR} { - switch (yytext[1]) { - case 'n': - Z_LVAL_P(zendlval) = (long) '\n'; - break; - case 't': - Z_LVAL_P(zendlval) = (long) '\t'; - break; - case 'r': - Z_LVAL_P(zendlval) = (long) '\r'; - break; - case '\\': - Z_LVAL_P(zendlval) = (long) '\\'; - break; - case '$': - Z_LVAL_P(zendlval) = (long) yytext[1]; - break; - default: - if (!zend_copy_scanner_string(zendlval, yytext, yyleng, CG(literal_type), SCNG(output_conv) TSRMLS_CC)) { - return 0; - } - return T_BAD_CHARACTER; - break; - } - return T_CHARACTER; -} - - -["'`]+ { - if (!zend_copy_scanner_string(zendlval, yytext, yyleng, CG(literal_type), SCNG(output_conv) TSRMLS_CC)) { - return 0; - } - return T_ENCAPSED_AND_WHITESPACE; -} - - -["] { - BEGIN(ST_IN_SCRIPTING); - return '\"'; -} - - -[`] { - BEGIN(ST_IN_SCRIPTING); - return '`'; -} - - -<> { - return 0; -} - -<> { - zend_error(E_COMPILE_WARNING,"Unterminated comment starting line %d", CG(comment_start_line)); - return 0; -} - - - -{ANY_CHAR} { - zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE); -} diff --git a/Zend/zend_list.c b/Zend/zend_list.c deleted file mode 100644 index ad53b1c22f84c..0000000000000 --- a/Zend/zend_list.c +++ /dev/null @@ -1,374 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -/* resource lists */ - -#include "zend.h" -#include "zend_list.h" -#include "zend_API.h" -#include "zend_globals.h" - -ZEND_API int le_index_ptr; - -/* true global */ -static HashTable list_destructors; - - -ZEND_API int zend_list_insert(void *ptr, int type) -{ - int index; - zend_rsrc_list_entry le; - TSRMLS_FETCH(); - - le.ptr=ptr; - le.type=type; - le.refcount=1; - - index = zend_hash_next_free_element(&EG(regular_list)); - - zend_hash_index_update(&EG(regular_list), index, (void *) &le, sizeof(zend_rsrc_list_entry), NULL); - return index; -} - -ZEND_API int _zend_list_delete(int id TSRMLS_DC) -{ - zend_rsrc_list_entry *le; - - if (zend_hash_index_find(&EG(regular_list), id, (void **) &le)==SUCCESS) { -/* printf("del(%d): %d->%d\n", id, le->refcount, le->refcount-1); */ - if (--le->refcount<=0) { - return zend_hash_index_del(&EG(regular_list), id); - } else { - return SUCCESS; - } - } else { - return FAILURE; - } -} - - -ZEND_API void *_zend_list_find(int id, int *type TSRMLS_DC) -{ - zend_rsrc_list_entry *le; - - if (zend_hash_index_find(&EG(regular_list), id, (void **) &le)==SUCCESS) { - *type = le->type; - return le->ptr; - } else { - *type = -1; - return NULL; - } -} - -ZEND_API int _zend_list_addref(int id TSRMLS_DC) -{ - zend_rsrc_list_entry *le; - - if (zend_hash_index_find(&EG(regular_list), id, (void **) &le)==SUCCESS) { -/* printf("add(%d): %d->%d\n", id, le->refcount, le->refcount+1); */ - le->refcount++; - return SUCCESS; - } else { - return FAILURE; - } -} - - -ZEND_API int zend_register_resource(zval *rsrc_result, void *rsrc_pointer, int rsrc_type) -{ - int rsrc_id; - - rsrc_id = zend_list_insert(rsrc_pointer, rsrc_type); - - if (rsrc_result) { - Z_RESVAL_P(rsrc_result) = rsrc_id; - Z_TYPE_P(rsrc_result) = IS_RESOURCE; - } - - return rsrc_id; -} - - -ZEND_API void *zend_fetch_resource(zval **passed_id TSRMLS_DC, int default_id, char *resource_type_name, int *found_resource_type, int num_resource_types, ...) -{ - int id; - int actual_resource_type; - void *resource; - va_list resource_types; - int i; - char *space; - zstr class_name; - - if (default_id==-1) { /* use id */ - if (!passed_id) { - if (resource_type_name) { - class_name = get_active_class_name(&space TSRMLS_CC); - zend_error(E_WARNING, "%v%s%v(): no %s resource supplied", class_name, space, get_active_function_name(TSRMLS_C), resource_type_name); - } - return NULL; - } else if (Z_TYPE_PP(passed_id) != IS_RESOURCE) { - if (resource_type_name) { - class_name = get_active_class_name(&space TSRMLS_CC); - zend_error(E_WARNING, "%v%s%v(): supplied argument is not a valid %s resource", class_name, space, get_active_function_name(TSRMLS_C), resource_type_name); - } - return NULL; - } - id = Z_RESVAL_PP(passed_id); - } else { - id = default_id; - } - - resource = zend_list_find(id, &actual_resource_type); - if (!resource) { - if (resource_type_name) { - class_name = get_active_class_name(&space TSRMLS_CC); - zend_error(E_WARNING, "%v%s%v(): %d is not a valid %s resource", class_name, space, get_active_function_name(TSRMLS_C), id, resource_type_name); - } - return NULL; - } - - va_start(resource_types, num_resource_types); - for (i=0; itype, (void **) &ld)==SUCCESS) { - switch (ld->type) { - case ZEND_RESOURCE_LIST_TYPE_STD: - if (ld->list_dtor) { - (ld->list_dtor)(le->ptr); - } - break; - case ZEND_RESOURCE_LIST_TYPE_EX: - if (ld->list_dtor_ex) { - ld->list_dtor_ex(le TSRMLS_CC); - } - break; - EMPTY_SWITCH_DEFAULT_CASE() - } - } else { - zend_error(E_WARNING,"Unknown list entry type in request shutdown (%d)", le->type); - } -} - - -void plist_entry_destructor(void *ptr) -{ - zend_rsrc_list_entry *le = (zend_rsrc_list_entry *) ptr; - zend_rsrc_list_dtors_entry *ld; - TSRMLS_FETCH(); - - if (zend_hash_index_find(&list_destructors, le->type, (void **) &ld)==SUCCESS) { - switch (ld->type) { - case ZEND_RESOURCE_LIST_TYPE_STD: - if (ld->plist_dtor) { - (ld->plist_dtor)(le->ptr); - } - break; - case ZEND_RESOURCE_LIST_TYPE_EX: - if (ld->plist_dtor_ex) { - ld->plist_dtor_ex(le TSRMLS_CC); - } - break; - EMPTY_SWITCH_DEFAULT_CASE() - } - } else { - zend_error(E_WARNING,"Unknown persistent list entry type in module shutdown (%d)", le->type); - } -} - - -int zend_init_rsrc_list(TSRMLS_D) -{ - if (zend_hash_init(&EG(regular_list), 0, NULL, list_entry_destructor, 0)==SUCCESS) { - EG(regular_list).nNextFreeElement=1; /* we don't want resource id 0 */ - return SUCCESS; - } else { - return FAILURE; - } -} - - -int zend_init_rsrc_plist(TSRMLS_D) -{ - return zend_hash_init_ex(&EG(persistent_list), 0, NULL, plist_entry_destructor, 1, 0); -} - - -void zend_destroy_rsrc_list(HashTable *ht TSRMLS_DC) -{ - zend_hash_graceful_reverse_destroy(ht); -} - -static int clean_module_resource(zend_rsrc_list_entry *le, int *resource_id TSRMLS_DC) -{ - if (le->type == *resource_id) { - return 1; - } else { - return 0; - } -} - - -static int zend_clean_module_rsrc_dtors_cb(zend_rsrc_list_dtors_entry *ld, int *module_number TSRMLS_DC) -{ - if (ld->module_number == *module_number) { - zend_hash_apply_with_argument(&EG(regular_list), (apply_func_arg_t) clean_module_resource, (void *) &(ld->resource_id) TSRMLS_CC); - zend_hash_apply_with_argument(&EG(persistent_list), (apply_func_arg_t) clean_module_resource, (void *) &(ld->resource_id) TSRMLS_CC); - return 1; - } else { - return 0; - } -} - - -void zend_clean_module_rsrc_dtors(int module_number TSRMLS_DC) -{ - zend_hash_apply_with_argument(&list_destructors, (apply_func_arg_t) zend_clean_module_rsrc_dtors_cb, (void *) &module_number TSRMLS_CC); -} - - -ZEND_API int zend_register_list_destructors(void (*ld)(void *), void (*pld)(void *), int module_number) -{ - zend_rsrc_list_dtors_entry lde; - -#if 0 - printf("Registering destructors %d for module %d\n", list_destructors.nNextFreeElement, module_number); -#endif - - lde.list_dtor=(void (*)(void *)) ld; - lde.plist_dtor=(void (*)(void *)) pld; - lde.list_dtor_ex = lde.plist_dtor_ex = NULL; - lde.module_number = module_number; - lde.resource_id = list_destructors.nNextFreeElement; - lde.type = ZEND_RESOURCE_LIST_TYPE_STD; - lde.type_name = NULL; - - if (zend_hash_next_index_insert(&list_destructors, (void *) &lde, sizeof(zend_rsrc_list_dtors_entry), NULL)==FAILURE) { - return FAILURE; - } - return list_destructors.nNextFreeElement-1; -} - - -ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, char *type_name, int module_number) -{ - zend_rsrc_list_dtors_entry lde; - -#if 0 - printf("Registering destructors %d for module %d\n", list_destructors.nNextFreeElement, module_number); -#endif - - lde.list_dtor = NULL; - lde.plist_dtor = NULL; - lde.list_dtor_ex = ld; - lde.plist_dtor_ex = pld; - lde.module_number = module_number; - lde.resource_id = list_destructors.nNextFreeElement; - lde.type = ZEND_RESOURCE_LIST_TYPE_EX; - lde.type_name = type_name; - - if (zend_hash_next_index_insert(&list_destructors, (void *) &lde, sizeof(zend_rsrc_list_dtors_entry), NULL)==FAILURE) { - return FAILURE; - } - return list_destructors.nNextFreeElement-1; -} - -ZEND_API int zend_fetch_list_dtor_id(char *type_name) -{ - zend_rsrc_list_dtors_entry *lde; - HashPosition pos; - - zend_hash_internal_pointer_reset_ex(&list_destructors, &pos); - while (zend_hash_get_current_data_ex(&list_destructors, (void **)&lde, &pos) == SUCCESS) { - if (lde->type_name && (strcmp(type_name, lde->type_name) == 0)) { -#if 0 - printf("Found resource id %d for resource type %s\n", (*lde).resource_id, type_name); -#endif - return lde->resource_id; - } - zend_hash_move_forward_ex(&list_destructors, &pos); - } - - return 0; -} - -int zend_init_rsrc_list_dtors(void) -{ - int retval; - - retval = zend_hash_init(&list_destructors, 50, NULL, NULL, 1); - list_destructors.nNextFreeElement=1; /* we don't want resource type 0 */ - - return retval; -} - - -void zend_destroy_rsrc_list_dtors(void) -{ - zend_hash_destroy(&list_destructors); -} - - -char *zend_rsrc_list_get_rsrc_type(int resource TSRMLS_DC) -{ - zend_rsrc_list_dtors_entry *lde; - int rsrc_type; - - if (!zend_list_find(resource, &rsrc_type)) - return NULL; - - if (zend_hash_index_find(&list_destructors, rsrc_type, (void **) &lde)==SUCCESS) { - return lde->type_name; - } else { - return NULL; - } -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_list.h b/Zend/zend_list.h deleted file mode 100644 index f3855543c5c26..0000000000000 --- a/Zend/zend_list.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_LIST_H -#define ZEND_LIST_H - -#include "zend_hash.h" -#include "zend_globals.h" - -BEGIN_EXTERN_C() - -#define ZEND_RESOURCE_LIST_TYPE_STD 1 -#define ZEND_RESOURCE_LIST_TYPE_EX 2 - -typedef struct _zend_rsrc_list_entry { - void *ptr; - int type; - int refcount; -} zend_rsrc_list_entry; - -typedef void (*rsrc_dtor_func_t)(zend_rsrc_list_entry *rsrc TSRMLS_DC); -#define ZEND_RSRC_DTOR_FUNC(name) void name(zend_rsrc_list_entry *rsrc TSRMLS_DC) - -typedef struct _zend_rsrc_list_dtors_entry { - /* old style destructors */ - void (*list_dtor)(void *); - void (*plist_dtor)(void *); - - /* new style destructors */ - rsrc_dtor_func_t list_dtor_ex; - rsrc_dtor_func_t plist_dtor_ex; - - char *type_name; - - int module_number; - int resource_id; - unsigned char type; -} zend_rsrc_list_dtors_entry; - - -#define register_list_destructors(ld, pld) zend_register_list_destructors((void (*)(void *))ld, (void (*)(void *))pld, module_number); -ZEND_API int zend_register_list_destructors(void (*ld)(void *), void (*pld)(void *), int module_number); -ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, char *type_name, int module_number); - -void list_entry_destructor(void *ptr); -void plist_entry_destructor(void *ptr); - -void zend_clean_module_rsrc_dtors(int module_number TSRMLS_DC); -int zend_init_rsrc_list(TSRMLS_D); -int zend_init_rsrc_plist(TSRMLS_D); -void zend_destroy_rsrc_list(HashTable *ht TSRMLS_DC); -int zend_init_rsrc_list_dtors(void); -void zend_destroy_rsrc_list_dtors(void); - -ZEND_API int zend_list_insert(void *ptr, int type); -ZEND_API int _zend_list_addref(int id TSRMLS_DC); -ZEND_API int _zend_list_delete(int id TSRMLS_DC); -ZEND_API void *_zend_list_find(int id, int *type TSRMLS_DC); - -#define zend_list_addref(id) _zend_list_addref(id TSRMLS_CC) -#define zend_list_delete(id) _zend_list_delete(id TSRMLS_CC) -#define zend_list_find(id, type) _zend_list_find(id, type TSRMLS_CC) - -ZEND_API int zend_register_resource(zval *rsrc_result, void *rsrc_pointer, int rsrc_type); -ZEND_API void *zend_fetch_resource(zval **passed_id TSRMLS_DC, int default_id, char *resource_type_name, int *found_resource_type, int num_resource_types, ...); - -ZEND_API char *zend_rsrc_list_get_rsrc_type(int resource TSRMLS_DC); -ZEND_API int zend_fetch_list_dtor_id(char *type_name); - -extern ZEND_API int le_index_ptr; /* list entry type for index pointers */ - -#define ZEND_VERIFY_RESOURCE(rsrc) \ - if (!rsrc) { \ - RETURN_FALSE; \ - } - -#define ZEND_FETCH_RESOURCE(rsrc, rsrc_type, passed_id, default_id, resource_type_name, resource_type) \ - rsrc = (rsrc_type) zend_fetch_resource(passed_id TSRMLS_CC, default_id, resource_type_name, NULL, 1, resource_type); \ - ZEND_VERIFY_RESOURCE(rsrc); - -#define ZEND_FETCH_RESOURCE2(rsrc, rsrc_type, passed_id, default_id, resource_type_name, resource_type1, resource_type2) \ - rsrc = (rsrc_type) zend_fetch_resource(passed_id TSRMLS_CC, default_id, resource_type_name, NULL, 2, resource_type1, resource_type2); \ - ZEND_VERIFY_RESOURCE(rsrc); - -#define ZEND_REGISTER_RESOURCE(rsrc_result, rsrc_pointer, rsrc_type) \ - zend_register_resource(rsrc_result, rsrc_pointer, rsrc_type); - -#define ZEND_GET_RESOURCE_TYPE_ID(le_id, le_type_name) \ - if (le_id == 0) { \ - le_id = zend_fetch_list_dtor_id(le_type_name); \ - } -END_EXTERN_C() - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_llist.c b/Zend/zend_llist.c deleted file mode 100644 index e932801ef3bd1..0000000000000 --- a/Zend/zend_llist.c +++ /dev/null @@ -1,319 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#include "zend.h" -#include "zend_llist.h" -#include "zend_qsort.h" - -ZEND_API void zend_llist_init(zend_llist *l, size_t size, llist_dtor_func_t dtor, unsigned char persistent) -{ - l->head = NULL; - l->tail = NULL; - l->count = 0; - l->size = size; - l->dtor = dtor; - l->persistent = persistent; -} - - -ZEND_API void zend_llist_add_element(zend_llist *l, void *element) -{ - zend_llist_element *tmp = pemalloc(sizeof(zend_llist_element)+l->size-1, l->persistent); - - tmp->prev = l->tail; - tmp->next = NULL; - if (l->tail) { - l->tail->next = tmp; - } else { - l->head = tmp; - } - l->tail = tmp; - memcpy(tmp->data, element, l->size); - - ++l->count; -} - - -ZEND_API void zend_llist_prepend_element(zend_llist *l, void *element) -{ - zend_llist_element *tmp = pemalloc(sizeof(zend_llist_element)+l->size-1, l->persistent); - - tmp->next = l->head; - tmp->prev = NULL; - if (l->head) { - l->head->prev = tmp; - } else { - l->tail = tmp; - } - l->head = tmp; - memcpy(tmp->data, element, l->size); - - ++l->count; -} - - -#define DEL_LLIST_ELEMENT(current, l) \ - if ((current)->prev) {\ - (current)->prev->next = (current)->next;\ - } else {\ - (l)->head = (current)->next;\ - }\ - if ((current)->next) {\ - (current)->next->prev = (current)->prev;\ - } else {\ - (l)->tail = (current)->prev;\ - }\ - if ((l)->dtor) {\ - (l)->dtor((current)->data);\ - }\ - pefree((current), (l)->persistent);\ - --l->count; - - -ZEND_API void zend_llist_del_element(zend_llist *l, void *element, int (*compare)(void *element1, void *element2)) -{ - zend_llist_element *current=l->head; - zend_llist_element *next; - - while (current) { - next = current->next; - if (compare(current->data, element)) { - DEL_LLIST_ELEMENT(current, l); - break; - } - current = next; - } -} - - -ZEND_API void zend_llist_destroy(zend_llist *l) -{ - zend_llist_element *current=l->head, *next; - - while (current) { - next = current->next; - if (l->dtor) { - l->dtor(current->data); - } - pefree(current, l->persistent); - current = next; - } - - l->count = 0; -} - - -ZEND_API void zend_llist_clean(zend_llist *l) -{ - zend_llist_destroy(l); - l->head = l->tail = NULL; -} - - -ZEND_API void *zend_llist_remove_tail(zend_llist *l) -{ - zend_llist_element *old_tail; - void *data; - - if ((old_tail = l->tail)) { - if (old_tail->prev) { - old_tail->prev->next = NULL; - } else { - l->head = NULL; - } - - data = old_tail->data; - - l->tail = old_tail->prev; - if (l->dtor) { - l->dtor(data); - } - pefree(old_tail, l->persistent); - - --l->count; - - return data; - } - - return NULL; -} - - -ZEND_API void zend_llist_copy(zend_llist *dst, zend_llist *src) -{ - zend_llist_element *ptr; - - zend_llist_init(dst, src->size, src->dtor, src->persistent); - ptr = src->head; - while (ptr) { - zend_llist_add_element(dst, ptr->data); - ptr = ptr->next; - } -} - - -ZEND_API void zend_llist_apply_with_del(zend_llist *l, int (*func)(void *data)) -{ - zend_llist_element *element, *next; - - element=l->head; - while (element) { - next = element->next; - if (func(element->data)) { - DEL_LLIST_ELEMENT(element, l); - } - element = next; - } -} - - -ZEND_API void zend_llist_apply(zend_llist *l, llist_apply_func_t func TSRMLS_DC) -{ - zend_llist_element *element; - - for (element=l->head; element; element=element->next) { - func(element->data TSRMLS_CC); - } -} - -ZEND_API void zend_llist_sort(zend_llist *l, llist_compare_func_t comp_func TSRMLS_DC) -{ - size_t i; - - zend_llist_element **elements; - zend_llist_element *element, **ptr; - - if (l->count <= 0) { - return; - } - - elements = (zend_llist_element **) emalloc(l->count * sizeof(zend_llist_element *)); - - ptr = &elements[0]; - - for (element=l->head; element; element=element->next) { - *ptr++ = element; - } - - zend_qsort(elements, l->count, sizeof(zend_llist_element *), (compare_func_t) comp_func TSRMLS_CC); - - l->head = elements[0]; - elements[0]->prev = NULL; - - for (i = 1; i < l->count; i++) { - elements[i]->prev = elements[i-1]; - elements[i-1]->next = elements[i]; - } - elements[i-1]->next = NULL; - l->tail = elements[i-1]; - efree(elements); -} - - -ZEND_API void zend_llist_apply_with_argument(zend_llist *l, llist_apply_with_arg_func_t func, void *arg TSRMLS_DC) -{ - zend_llist_element *element; - - for (element=l->head; element; element=element->next) { - func(element->data, arg TSRMLS_CC); - } -} - - -ZEND_API void zend_llist_apply_with_arguments(zend_llist *l, llist_apply_with_args_func_t func TSRMLS_DC, int num_args, ...) -{ - zend_llist_element *element; - va_list args; - - va_start(args, num_args); - for (element=l->head; element; element=element->next) { - func(element->data, num_args, args TSRMLS_CC); - } - va_end(args); -} - - -ZEND_API int zend_llist_count(zend_llist *l) -{ - return l->count; -} - - -ZEND_API void *zend_llist_get_first_ex(zend_llist *l, zend_llist_position *pos) -{ - zend_llist_position *current = pos ? pos : &l->traverse_ptr; - - *current = l->head; - if (*current) { - return (*current)->data; - } else { - return NULL; - } -} - - -ZEND_API void *zend_llist_get_last_ex(zend_llist *l, zend_llist_position *pos) -{ - zend_llist_position *current = pos ? pos : &l->traverse_ptr; - - *current = l->tail; - if (*current) { - return (*current)->data; - } else { - return NULL; - } -} - - -ZEND_API void *zend_llist_get_next_ex(zend_llist *l, zend_llist_position *pos) -{ - zend_llist_position *current = pos ? pos : &l->traverse_ptr; - - if (*current) { - *current = (*current)->next; - if (*current) { - return (*current)->data; - } - } - return NULL; -} - - -ZEND_API void *zend_llist_get_prev_ex(zend_llist *l, zend_llist_position *pos) -{ - zend_llist_position *current = pos ? pos : &l->traverse_ptr; - - if (*current) { - *current = (*current)->prev; - if (*current) { - return (*current)->data; - } - } - return NULL; -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_llist.h b/Zend/zend_llist.h deleted file mode 100644 index b93bbf573dff9..0000000000000 --- a/Zend/zend_llist.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_LLIST_H -#define ZEND_LLIST_H - -typedef struct _zend_llist_element { - struct _zend_llist_element *next; - struct _zend_llist_element *prev; - char data[1]; /* Needs to always be last in the struct */ -} zend_llist_element; - -typedef void (*llist_dtor_func_t)(void *); -typedef int (*llist_compare_func_t)(const zend_llist_element **, const zend_llist_element ** TSRMLS_DC); -typedef void (*llist_apply_with_args_func_t)(void *data, int num_args, va_list args TSRMLS_DC); -typedef void (*llist_apply_with_arg_func_t)(void *data, void *arg TSRMLS_DC); -typedef void (*llist_apply_func_t)(void * TSRMLS_DC); - -typedef struct _zend_llist { - zend_llist_element *head; - zend_llist_element *tail; - size_t count; - size_t size; - llist_dtor_func_t dtor; - unsigned char persistent; - zend_llist_element *traverse_ptr; -} zend_llist; - -typedef zend_llist_element* zend_llist_position; - -BEGIN_EXTERN_C() -ZEND_API void zend_llist_init(zend_llist *l, size_t size, llist_dtor_func_t dtor, unsigned char persistent); -ZEND_API void zend_llist_add_element(zend_llist *l, void *element); -ZEND_API void zend_llist_prepend_element(zend_llist *l, void *element); -ZEND_API void zend_llist_del_element(zend_llist *l, void *element, int (*compare)(void *element1, void *element2)); -ZEND_API void zend_llist_destroy(zend_llist *l); -ZEND_API void zend_llist_clean(zend_llist *l); -ZEND_API void *zend_llist_remove_tail(zend_llist *l); -ZEND_API void zend_llist_copy(zend_llist *dst, zend_llist *src); -ZEND_API void zend_llist_apply(zend_llist *l, llist_apply_func_t func TSRMLS_DC); -ZEND_API void zend_llist_apply_with_del(zend_llist *l, int (*func)(void *data)); -ZEND_API void zend_llist_apply_with_argument(zend_llist *l, llist_apply_with_arg_func_t func, void *arg TSRMLS_DC); -ZEND_API void zend_llist_apply_with_arguments(zend_llist *l, llist_apply_with_args_func_t func TSRMLS_DC, int num_args, ...); -ZEND_API int zend_llist_count(zend_llist *l); -ZEND_API void zend_llist_sort(zend_llist *l, llist_compare_func_t comp_func TSRMLS_DC); - -/* traversal */ -ZEND_API void *zend_llist_get_first_ex(zend_llist *l, zend_llist_position *pos); -ZEND_API void *zend_llist_get_last_ex(zend_llist *l, zend_llist_position *pos); -ZEND_API void *zend_llist_get_next_ex(zend_llist *l, zend_llist_position *pos); -ZEND_API void *zend_llist_get_prev_ex(zend_llist *l, zend_llist_position *pos); - -#define zend_llist_get_first(l) zend_llist_get_first_ex(l, NULL) -#define zend_llist_get_last(l) zend_llist_get_last_ex(l, NULL) -#define zend_llist_get_next(l) zend_llist_get_next_ex(l, NULL) -#define zend_llist_get_prev(l) zend_llist_get_prev_ex(l, NULL) - -END_EXTERN_C() - -#endif /* ZEND_LLIST_H */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_modules.h b/Zend/zend_modules.h deleted file mode 100644 index 971f202bb392d..0000000000000 --- a/Zend/zend_modules.h +++ /dev/null @@ -1,142 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef MODULES_H -#define MODULES_H - -#include "zend.h" -#include "zend_compile.h" - -#define INIT_FUNC_ARGS int type, int module_number TSRMLS_DC -#define INIT_FUNC_ARGS_PASSTHRU type, module_number TSRMLS_CC -#define SHUTDOWN_FUNC_ARGS int type, int module_number TSRMLS_DC -#define SHUTDOWN_FUNC_ARGS_PASSTHRU type, module_number TSRMLS_CC -#define ZEND_MODULE_INFO_FUNC_ARGS zend_module_entry *zend_module TSRMLS_DC -#define ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU zend_module TSRMLS_CC - -extern struct _zend_arg_info first_arg_force_ref[2]; -extern struct _zend_arg_info second_arg_force_ref[3]; -extern struct _zend_arg_info third_arg_force_ref[4]; -extern struct _zend_arg_info fourth_arg_force_ref[5]; -extern struct _zend_arg_info fifth_arg_force_ref[6]; -extern struct _zend_arg_info all_args_by_ref[1]; - -#define ZEND_MODULE_API_NO 20060613 -#ifdef ZTS -#define USING_ZTS 1 -#else -#define USING_ZTS 0 -#endif - -#define STANDARD_MODULE_HEADER_EX sizeof(zend_module_entry), ZEND_MODULE_API_NO, ZEND_DEBUG, USING_ZTS -#define STANDARD_MODULE_HEADER \ - STANDARD_MODULE_HEADER_EX, NULL, NULL -#define ZE2_STANDARD_MODULE_HEADER \ - STANDARD_MODULE_HEADER_EX, ini_entries, NULL - -#define STANDARD_MODULE_PROPERTIES_EX 0, 0, NULL, 0 - -#define NO_MODULE_GLOBALS 0, NULL, NULL, NULL - -#ifdef ZTS -# define ZEND_MODULE_GLOBALS(module_name) sizeof(zend_##module_name##_globals), &module_name##_globals_id -#else -# define ZEND_MODULE_GLOBALS(module_name) sizeof(zend_##module_name##_globals), &module_name##_globals -#endif - -#define STANDARD_MODULE_PROPERTIES \ - NO_MODULE_GLOBALS, NULL, STANDARD_MODULE_PROPERTIES_EX - -#define NO_VERSION_YET NULL - -#define MODULE_PERSISTENT 1 -#define MODULE_TEMPORARY 2 - -struct _zend_ini_entry; -typedef struct _zend_module_entry zend_module_entry; -typedef struct _zend_module_dep zend_module_dep; - -struct _zend_module_entry { - unsigned short size; - unsigned int zend_api; - unsigned char zend_debug; - unsigned char zts; - struct _zend_ini_entry *ini_entry; - struct _zend_module_dep *deps; - char *name; - struct _zend_function_entry *functions; - int (*module_startup_func)(INIT_FUNC_ARGS); - int (*module_shutdown_func)(SHUTDOWN_FUNC_ARGS); - int (*request_startup_func)(INIT_FUNC_ARGS); - int (*request_shutdown_func)(SHUTDOWN_FUNC_ARGS); - void (*info_func)(ZEND_MODULE_INFO_FUNC_ARGS); - char *version; - size_t globals_size; -#ifdef ZTS - ts_rsrc_id* globals_id_ptr; -#else - void* globals_ptr; -#endif - void (*globals_ctor)(void *global TSRMLS_DC); - void (*globals_dtor)(void *global TSRMLS_DC); - int (*post_deactivate_func)(void); - int module_started; - unsigned char type; - void *handle; - int module_number; -}; - -#define MODULE_DEP_REQUIRED 1 -#define MODULE_DEP_CONFLICTS 2 -#define MODULE_DEP_OPTIONAL 3 - -#define ZEND_MOD_REQUIRED_EX(name, rel, ver) { name, rel, ver, MODULE_DEP_REQUIRED }, -#define ZEND_MOD_CONFLICTS_EX(name, rel, ver) { name, rel, ver, MODULE_DEP_CONFLICTS }, -#define ZEND_MOD_OPTIONAL_EX(name, rel, ver) { name, rel, ver, MODULE_DEP_OPTIONAL }, - -#define ZEND_MOD_REQUIRED(name) ZEND_MOD_REQUIRED_EX(name, NULL, NULL) -#define ZEND_MOD_CONFLICTS(name) ZEND_MOD_CONFLICTS_EX(name, NULL, NULL) -#define ZEND_MOD_OPTIONAL(name) ZEND_MOD_OPTIONAL_EX(name, NULL, NULL) - -struct _zend_module_dep { - char *name; /* module name */ - char *rel; /* version relationship: NULL (exists), lt|le|eq|ge|gt (to given version) */ - char *version; /* version */ - unsigned char type; /* dependency type */ -}; - -extern ZEND_API HashTable module_registry; - -void module_destructor(zend_module_entry *module); -int module_registry_cleanup(zend_module_entry *module TSRMLS_DC); -int module_registry_request_startup(zend_module_entry *module TSRMLS_DC); -int module_registry_unload_temp(zend_module_entry *module TSRMLS_DC); - -#define ZEND_MODULE_DTOR (void (*)(void *)) module_destructor -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_multiply.h b/Zend/zend_multiply.h deleted file mode 100644 index e32ccda9602d7..0000000000000 --- a/Zend/zend_multiply.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Sascha Schumann | - | Ard Biesheuvel | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#if defined(__i386__) && defined(__GNUC__) - -#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ - long __tmpvar; \ - __asm__ ("imul %3,%0\n" \ - "adc $0,%1" \ - : "=r"(__tmpvar),"=r"(usedval) \ - : "0"(a), "r"(b), "1"(0)); \ - if (usedval) (dval) = (double) (a) * (double) (b); \ - else (lval) = __tmpvar; \ -} while (0) - -#else - -#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ - long __lres = (a) * (b); \ - double __dres = (double)(a) * (double)(b); \ - double __delta = (double) __lres - __dres; \ - if ( ((usedval) = (( __dres + __delta ) != __dres))) { \ - (dval) = __dres; \ - } else { \ - (lval) = __lres; \ - } \ -} while (0) - -#endif diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c deleted file mode 100644 index 080641798c825..0000000000000 --- a/Zend/zend_object_handlers.c +++ /dev/null @@ -1,1204 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#include "zend.h" -#include "zend_globals.h" -#include "zend_variables.h" -#include "zend_API.h" -#include "zend_objects.h" -#include "zend_objects_API.h" -#include "zend_object_handlers.h" -#include "zend_interfaces.h" - -#define DEBUG_OBJECT_HANDLERS 0 - -#define Z_OBJ_P(zval_p) zend_objects_get_address(zval_p TSRMLS_CC) - -/* - __X accessors explanation: - - if we have __get and property that is not part of the properties array is - requested, we call __get handler. If it fails, we return uninitialized. - - if we have __set and property that is not part of the properties array is - set, we call __set handler. If it fails, we do not change the array. - - for both handlers above, when we are inside __get/__set, no further calls for - __get/__set for these objects will be made, to prevent endless recursion and - enable accessors to change properties array. - - if we have __call and method which is not part of the class function table is - called, we cal __call handler. -*/ - -ZEND_API HashTable *zend_std_get_properties(zval *object TSRMLS_DC) -{ - zend_object *zobj; - zobj = Z_OBJ_P(object); - return zobj->properties; -} - -ZEND_API HashTable *zend_std_get_debug_info(zval *object, int *is_temp TSRMLS_DC) -{ - *is_temp = 0; - return zend_std_get_properties(object TSRMLS_CC); -} - -static zval *zend_std_call_getter(zval *object, zval *member TSRMLS_DC) -{ - zval *retval = NULL; - zend_class_entry *ce = Z_OBJCE_P(object); - - /* __get handler is called with one argument: - property name - - it should return whether the call was successfull or not - */ - - SEPARATE_ARG_IF_REF(member); - - zend_call_method_with_1_params(&object, ce, &ce->__get, ZEND_GET_FUNC_NAME, &retval, member); - - zval_ptr_dtor(&member); - - if (retval) { - retval->refcount--; - } - - return retval; -} - -static int zend_std_call_setter(zval *object, zval *member, zval *value TSRMLS_DC) -{ - zval *retval = NULL; - int result; - zend_class_entry *ce = Z_OBJCE_P(object); - - SEPARATE_ARG_IF_REF(member); - value->refcount++; - - /* __set handler is called with two arguments: - property name - value to be set - - it should return whether the call was successfull or not - */ - zend_call_method_with_2_params(&object, ce, &ce->__set, ZEND_SET_FUNC_NAME, &retval, member, value); - - zval_ptr_dtor(&member); - zval_ptr_dtor(&value); - - if (retval) { - result = i_zend_is_true(retval) ? SUCCESS : FAILURE; - zval_ptr_dtor(&retval); - return result; - } else { - return FAILURE; - } -} - -static void zend_std_call_unsetter(zval *object, zval *member TSRMLS_DC) -{ - zend_class_entry *ce = Z_OBJCE_P(object); - - /* __unset handler is called with one argument: - property name - */ - - SEPARATE_ARG_IF_REF(member); - - zend_call_method_with_1_params(&object, ce, &ce->__unset, ZEND_UNSET_FUNC_NAME, NULL, member); - - zval_ptr_dtor(&member); -} - -static zval *zend_std_call_issetter(zval *object, zval *member TSRMLS_DC) -{ - zval *retval = NULL; - zend_class_entry *ce = Z_OBJCE_P(object); - - /* __isset handler is called with one argument: - property name - - it should return whether the property is set or not - */ - - SEPARATE_ARG_IF_REF(member); - - zend_call_method_with_1_params(&object, ce, &ce->__isset, ZEND_ISSET_FUNC_NAME, &retval, member); - - zval_ptr_dtor(&member); - - return retval; -} - -static int zend_verify_property_access(zend_property_info *property_info, zend_class_entry *ce TSRMLS_DC) -{ - switch (property_info->flags & ZEND_ACC_PPP_MASK) { - case ZEND_ACC_PUBLIC: - return 1; - case ZEND_ACC_PROTECTED: - return zend_check_protected(property_info->ce, EG(scope)); - case ZEND_ACC_PRIVATE: - if (ce==EG(scope) && EG(scope)) { - return 1; - } else { - return 0; - } - break; - } - return 0; -} - -static inline zend_bool is_derived_class(zend_class_entry *child_class, zend_class_entry *parent_class) -{ - child_class = child_class->parent; - while (child_class) { - if (child_class == parent_class) { - return 1; - } - child_class = child_class->parent; - } - - return 0; -} - -ZEND_API struct _zend_property_info *zend_get_property_info(zend_class_entry *ce, zval *member, int silent TSRMLS_DC) -{ - zend_property_info *property_info = NULL; - zend_property_info *scope_property_info; - zend_bool denied_access = 0; - ulong h; - - if ((Z_TYPE_P(member) == IS_UNICODE && Z_USTRVAL_P(member)[0] == 0) || - Z_STRVAL_P(member)[0] == '\0') { - if (!silent) { - if (Z_UNILEN_P(member) == 0) { - zend_error(E_ERROR, "Cannot access empty property"); - } else { - zend_error(E_ERROR, "Cannot access property started with '\\0'"); - } - } - return NULL; - } - h = zend_u_get_hash_value(Z_TYPE_P(member), Z_UNIVAL_P(member), Z_UNILEN_P(member) + 1); - if (zend_u_hash_quick_find(&ce->properties_info, Z_TYPE_P(member), Z_UNIVAL_P(member), Z_UNILEN_P(member)+1, h, (void **) &property_info)==SUCCESS) { - if(property_info->flags & ZEND_ACC_SHADOW) { - /* if it's a shadow - go to access it's private */ - property_info = NULL; - } else { - if (zend_verify_property_access(property_info, ce TSRMLS_CC)) { - if (property_info->flags & ZEND_ACC_CHANGED - && !(property_info->flags & ZEND_ACC_PRIVATE)) { - /* We still need to make sure that we're not in a context - * where the right property is a different 'statically linked' private - * continue checking below... - */ - } else { - if (!silent && (property_info->flags & ZEND_ACC_STATIC)) { - zend_error(E_STRICT, "Accessing static property %v::$%R as non static", ce->name, Z_TYPE_P(member), Z_UNIVAL_P(member)); - } - return property_info; - } - } else { - /* Try to look in the scope instead */ - denied_access = 1; - } - } - } - if (EG(scope) != ce - && is_derived_class(ce, EG(scope)) - && EG(scope) - && zend_u_hash_quick_find(&EG(scope)->properties_info, Z_TYPE_P(member), Z_UNIVAL_P(member), Z_UNILEN_P(member)+1, h, (void **) &scope_property_info)==SUCCESS - && scope_property_info->flags & ZEND_ACC_PRIVATE) { - return scope_property_info; - } else if (property_info) { - if (denied_access) { - /* Information was available, but we were denied access. Error out. */ - if (silent) { - return NULL; - } - zend_error(E_ERROR, "Cannot access %s property %v::$%R", zend_visibility_string(property_info->flags), ce->name, Z_TYPE_P(member), Z_STRVAL_P(member)); - } else { - /* fall through, return property_info... */ - } - } else { - EG(std_property_info).flags = ZEND_ACC_PUBLIC; - EG(std_property_info).name = Z_UNIVAL_P(member); - EG(std_property_info).name_length = Z_UNILEN_P(member); - EG(std_property_info).h = h; - EG(std_property_info).ce = ce; - property_info = &EG(std_property_info); - } - return property_info; -} - - -ZEND_API int zend_check_property_access(zend_object *zobj, zend_uchar utype, zstr prop_info_name, int prop_info_name_len TSRMLS_DC) -{ - zend_property_info *property_info; - zstr class_name, prop_name; - zval member; - - zend_u_unmangle_property_name(utype, prop_info_name, prop_info_name_len, &class_name, &prop_name); - if (utype == IS_UNICODE) { - ZVAL_UNICODE(&member, prop_name.u, 0); - } else { - ZVAL_STRING(&member, prop_name.s, 0); - } - property_info = zend_get_property_info(zobj->ce, &member, 1 TSRMLS_CC); - if (!property_info) { - return FAILURE; - } - if (class_name.s && class_name.s[0] != '*') { - if (!(property_info->flags & ZEND_ACC_PRIVATE)) { - /* we we're looking for a private prop but found a non private one of the same name */ - return FAILURE; - } else if (!UG(unicode) && strcmp(prop_info_name.s+1, property_info->name.s+1)) { - /* we we're looking for a private prop but found a private one of the same name but another class */ - return FAILURE; - } else if (UG(unicode) && u_strcmp(prop_info_name.u+1, property_info->name.u+1)) { - /* we we're looking for a private prop but found a private one of the same name but another class */ - return FAILURE; - } - } - return zend_verify_property_access(property_info, zobj->ce TSRMLS_CC) ? SUCCESS : FAILURE; -} - -static int zend_get_property_guard(zend_object *zobj, zend_property_info *property_info, zval *member, zend_guard **pguard TSRMLS_DC) -{ - zend_property_info info; - zend_guard stub; - - if (!property_info) { - property_info = &info; - info.name = Z_UNIVAL_P(member); - info.name_length = Z_UNILEN_P(member); - info.h = zend_u_get_hash_value(Z_TYPE_P(member), Z_UNIVAL_P(member), Z_UNILEN_P(member) + 1); - } - if (!zobj->guards) { - ALLOC_HASHTABLE(zobj->guards); - zend_u_hash_init(zobj->guards, 0, NULL, NULL, 0, UG(unicode)); - } else if (zend_u_hash_quick_find(zobj->guards, UG(unicode)?IS_UNICODE:IS_STRING, property_info->name, property_info->name_length+1, property_info->h, (void **) pguard) == SUCCESS) { - return SUCCESS; - } - stub.in_get = 0; - stub.in_set = 0; - stub.in_unset = 0; - stub.in_isset = 0; - return zend_u_hash_quick_add(zobj->guards, UG(unicode)?IS_UNICODE:IS_STRING, property_info->name, property_info->name_length+1, property_info->h, (void**)&stub, sizeof(stub), (void**) pguard); -} - -zval *zend_std_read_property(zval *object, zval *member, int type TSRMLS_DC) -{ - zend_object *zobj; - zval *tmp_member = NULL; - zval **retval; - zval *rv = NULL; - zend_property_info *property_info; - int silent; - - silent = (type == BP_VAR_IS); - zobj = Z_OBJ_P(object); - - if (Z_TYPE_P(member) != IS_UNICODE && (UG(unicode) || Z_TYPE_P(member) != IS_STRING)) { - ALLOC_ZVAL(tmp_member); - *tmp_member = *member; - INIT_PZVAL(tmp_member); - zval_copy_ctor(tmp_member); - convert_to_text(tmp_member); - member = tmp_member; - } - -#if DEBUG_OBJECT_HANDLERS - fprintf(stderr, "Read object #%d property: %R\n", Z_OBJ_HANDLE_P(object), Z_TYPE_P(member), Z_STRVAL_P(member)); -#endif - - /* make zend_get_property_info silent if we have getter - we may want to use it */ - property_info = zend_get_property_info(zobj->ce, member, (zobj->ce->__get != NULL) TSRMLS_CC); - - if (!property_info || zend_u_hash_quick_find(zobj->properties, Z_TYPE_P(member), property_info->name, property_info->name_length+1, property_info->h, (void **) &retval) == FAILURE) { - zend_guard *guard; - - if (zobj->ce->__get && - zend_get_property_guard(zobj, property_info, member, &guard TSRMLS_CC) == SUCCESS && - !guard->in_get) { - /* have getter - try with it! */ - guard->in_get = 1; /* prevent circular getting */ - rv = zend_std_call_getter(object, member TSRMLS_CC); - guard->in_get = 0; - - if (rv) { - retval = &rv; - if (!rv->is_ref && - (type == BP_VAR_W || type == BP_VAR_RW || type == BP_VAR_UNSET)) { - if (rv->refcount > 0) { - zval *tmp = rv; - - ALLOC_ZVAL(rv); - *rv = *tmp; - zval_copy_ctor(rv); - rv->is_ref = 0; - rv->refcount = 0; - } - if (Z_TYPE_P(rv) != IS_OBJECT) { - zend_error(E_NOTICE, "Indirect modification of overloaded property %v::$%R has no effect", zobj->ce->name, Z_TYPE_P(member), Z_UNIVAL_P(member)); - } - } - } else { - retval = &EG(uninitialized_zval_ptr); - } - } else { - if (!silent) { - zend_error(E_NOTICE,"Undefined property: %v::$%R", zobj->ce->name, Z_TYPE_P(member), Z_STRVAL_P(member)); - } - retval = &EG(uninitialized_zval_ptr); - } - } - if (tmp_member) { - (*retval)->refcount++; - zval_ptr_dtor(&tmp_member); - (*retval)->refcount--; - } - return *retval; -} - - -static void zend_std_write_property(zval *object, zval *member, zval *value TSRMLS_DC) -{ - zend_object *zobj; - zval *tmp_member = NULL; - zval **variable_ptr; - zend_property_info *property_info; - - zobj = Z_OBJ_P(object); - - if (Z_TYPE_P(member) != IS_UNICODE && (UG(unicode) || Z_TYPE_P(member) != IS_STRING)) { - ALLOC_ZVAL(tmp_member); - *tmp_member = *member; - INIT_PZVAL(tmp_member); - zval_copy_ctor(tmp_member); - convert_to_text(tmp_member); - member = tmp_member; - } - - property_info = zend_get_property_info(zobj->ce, member, (zobj->ce->__set != NULL) TSRMLS_CC); - - if (property_info && zend_u_hash_quick_find(zobj->properties, Z_TYPE_P(member), property_info->name, property_info->name_length+1, property_info->h, (void **) &variable_ptr) == SUCCESS) { - /* if we already have this value there, we don't actually need to do anything */ - if (*variable_ptr != value) { - /* if we are assigning reference, we shouldn't move it, but instead assign variable - to the same pointer */ - if (PZVAL_IS_REF(*variable_ptr)) { - zval garbage = **variable_ptr; /* old value should be destroyed */ - - /* To check: can't *variable_ptr be some system variable like error_zval here? */ - Z_TYPE_PP(variable_ptr) = Z_TYPE_P(value); - (*variable_ptr)->value = value->value; - if (value->refcount>0) { - zval_copy_ctor(*variable_ptr); - } - zval_dtor(&garbage); - } else { - zval *garbage = *variable_ptr; - - /* if we assign referenced variable, we should separate it */ - value->refcount++; - if (PZVAL_IS_REF(value)) { - SEPARATE_ZVAL(&value); - } - *variable_ptr = value; - zval_ptr_dtor(&garbage); - } - } - } else { - int setter_done = 0; - zend_guard *guard; - - if (zobj->ce->__set && - zend_get_property_guard(zobj, property_info, member, &guard TSRMLS_CC) == SUCCESS && - !guard->in_set) { - guard->in_set = 1; /* prevent circular setting */ - if (zend_std_call_setter(object, member, value TSRMLS_CC) != SUCCESS) { - /* for now, just ignore it - __set should take care of warnings, etc. */ - } - setter_done = 1; - guard->in_set = 0; - } - if (!setter_done && property_info) { - zval **foo; - - /* if we assign referenced variable, we should separate it */ - value->refcount++; - if (PZVAL_IS_REF(value)) { - SEPARATE_ZVAL(&value); - } - zend_u_hash_quick_update(zobj->properties, Z_TYPE_P(member), property_info->name, property_info->name_length+1, property_info->h, &value, sizeof(zval *), (void **) &foo); - } - } - - if (tmp_member) { - zval_ptr_dtor(&tmp_member); - } -} - -zval *zend_std_read_dimension(zval *object, zval *offset, int type TSRMLS_DC) -{ - zend_class_entry *ce = Z_OBJCE_P(object); - zval *retval; - - if (instanceof_function_ex(ce, zend_ce_arrayaccess, 1 TSRMLS_CC)) { - if(offset == NULL) { - /* [] construct */ - ALLOC_INIT_ZVAL(offset); - } else { - SEPARATE_ARG_IF_REF(offset); - } - zend_call_method_with_1_params(&object, ce, NULL, "offsetget", &retval, offset); - - zval_ptr_dtor(&offset); - - if (!retval) { - if (!EG(exception)) { - zend_error(E_ERROR, "Undefined offset for object of type %v used as array", ce->name); - } - return 0; - } - - /* Undo PZVAL_LOCK() */ - retval->refcount--; - - return retval; - } else { - zend_error(E_ERROR, "Cannot use object of type %v as array", ce->name); - return 0; - } -} - - -static void zend_std_write_dimension(zval *object, zval *offset, zval *value TSRMLS_DC) -{ - zend_class_entry *ce = Z_OBJCE_P(object); - - if (instanceof_function_ex(ce, zend_ce_arrayaccess, 1 TSRMLS_CC)) { - if (!offset) { - ALLOC_INIT_ZVAL(offset); - } else { - SEPARATE_ARG_IF_REF(offset); - } - zend_call_method_with_2_params(&object, ce, NULL, "offsetset", NULL, offset, value); - zval_ptr_dtor(&offset); - } else { - zend_error(E_ERROR, "Cannot use object of type %v as array", ce->name); - } -} - - -static int zend_std_has_dimension(zval *object, zval *offset, int check_empty TSRMLS_DC) -{ - zend_class_entry *ce = Z_OBJCE_P(object); - zval *retval; - int result; - - if (instanceof_function_ex(ce, zend_ce_arrayaccess, 1 TSRMLS_CC)) { - SEPARATE_ARG_IF_REF(offset); - zend_call_method_with_1_params(&object, ce, NULL, "offsetexists", &retval, offset); - if (retval) { - result = i_zend_is_true(retval); - zval_ptr_dtor(&retval); - if (check_empty && result && !EG(exception)) { - zend_call_method_with_1_params(&object, ce, NULL, "offsetget", &retval, offset); - if (retval) { - result = i_zend_is_true(retval); - zval_ptr_dtor(&retval); - } - } - } else { - result = 0; - } - zval_ptr_dtor(&offset); - } else { - zend_error(E_ERROR, "Cannot use object of type %v as array", ce->name); - return 0; - } - return result; -} - - -static zval **zend_std_get_property_ptr_ptr(zval *object, zval *member TSRMLS_DC) -{ - zend_object *zobj; - zval tmp_member; - zval **retval; - zend_property_info *property_info; - - zobj = Z_OBJ_P(object); - - if (Z_TYPE_P(member) != IS_UNICODE && (UG(unicode) || Z_TYPE_P(member) != IS_STRING)) { - tmp_member = *member; - zval_copy_ctor(&tmp_member); - convert_to_text(&tmp_member); - member = &tmp_member; - } - -#if DEBUG_OBJECT_HANDLERS - fprintf(stderr, "Ptr object #%d property: %R\n", Z_OBJ_HANDLE_P(object), Z_TYPE_P(member), Z_STRVAL_P(member)); -#endif - - property_info = zend_get_property_info(zobj->ce, member, (zobj->ce->__get != NULL) TSRMLS_CC); - - if (!property_info || zend_u_hash_quick_find(zobj->properties, Z_TYPE_P(member), property_info->name, property_info->name_length+1, property_info->h, (void **) &retval) == FAILURE) { - zval *new_zval; - zend_guard *guard; - - if (!zobj->ce->__get || - zend_get_property_guard(zobj, property_info, member, &guard TSRMLS_CC) != SUCCESS || - guard->in_get) { - /* we don't have access controls - will just add it */ - new_zval = &EG(uninitialized_zval); - -/* zend_error(E_NOTICE, "Undefined property: %R", Z_TYPE_P(member), Z_STRVAL_P(member)); */ - new_zval->refcount++; - zend_u_hash_quick_update(zobj->properties, Z_TYPE_P(member), property_info->name, property_info->name_length+1, property_info->h, &new_zval, sizeof(zval *), (void **) &retval); - } else { - /* we do have getter - fail and let it try again with usual get/set */ - retval = NULL; - } - } - if (member == &tmp_member) { - zval_dtor(member); - } - return retval; -} - - -static void zend_std_unset_property(zval *object, zval *member TSRMLS_DC) -{ - zend_object *zobj; - zval *tmp_member = NULL; - zend_property_info *property_info; - - zobj = Z_OBJ_P(object); - - if (Z_TYPE_P(member) != IS_UNICODE && (UG(unicode) || Z_TYPE_P(member) != IS_STRING)) { - ALLOC_ZVAL(tmp_member); - *tmp_member = *member; - INIT_PZVAL(tmp_member); - zval_copy_ctor(tmp_member); - convert_to_text(tmp_member); - member = tmp_member; - } - - property_info = zend_get_property_info(zobj->ce, member, (zobj->ce->__unset != NULL) TSRMLS_CC); - - if (!property_info || zend_u_hash_del(zobj->properties, Z_TYPE_P(member), property_info->name, property_info->name_length+1)) { - zend_guard *guard; - - if (zobj->ce->__unset && - zend_get_property_guard(zobj, property_info, member, &guard TSRMLS_CC) == SUCCESS && - !guard->in_unset) { - /* have unseter - try with it! */ - guard->in_unset = 1; /* prevent circular unsetting */ - zend_std_call_unsetter(object, member TSRMLS_CC); - guard->in_unset = 0; - } - } - - if (tmp_member) { - zval_ptr_dtor(&tmp_member); - } -} - - -static void zend_std_unset_dimension(zval *object, zval *offset TSRMLS_DC) -{ - zend_class_entry *ce = Z_OBJCE_P(object); - - if (instanceof_function_ex(ce, zend_ce_arrayaccess, 1 TSRMLS_CC)) { - SEPARATE_ARG_IF_REF(offset); - zend_call_method_with_1_params(&object, ce, NULL, "offsetunset", NULL, offset); - zval_ptr_dtor(&offset); - } else { - zend_error(E_ERROR, "Cannot use object of type %v as array", ce->name); - } -} - - -ZEND_API void zend_std_call_user_call(INTERNAL_FUNCTION_PARAMETERS) -{ - zend_internal_function *func = (zend_internal_function *)EG(function_state_ptr)->function; - zval *method_name_ptr, *method_args_ptr; - zval *method_result_ptr = NULL; - zend_class_entry *ce = Z_OBJCE_P(this_ptr); - - ALLOC_ZVAL(method_args_ptr); - INIT_PZVAL(method_args_ptr); - array_init(method_args_ptr); - - if (zend_copy_parameters_array(ZEND_NUM_ARGS(), method_args_ptr TSRMLS_CC) == FAILURE) { - zval_dtor(method_args_ptr); - zend_error(E_ERROR, "Cannot get arguments for __call"); - RETURN_FALSE; - } - - ALLOC_ZVAL(method_name_ptr); - INIT_PZVAL(method_name_ptr); - ZVAL_TEXT(method_name_ptr, func->function_name, 0); /* no dup - it's a copy */ - - /* __call handler is called with two arguments: - method name - array of method parameters - - */ - zend_call_method_with_2_params(&this_ptr, ce, &ce->__call, ZEND_CALL_FUNC_NAME, &method_result_ptr, method_name_ptr, method_args_ptr); - - if (method_result_ptr) { - if (method_result_ptr->is_ref || method_result_ptr->refcount > 1) { - RETVAL_ZVAL(method_result_ptr, 1, 1); - } else { - RETVAL_ZVAL(method_result_ptr, 0, 1); - } - } - - /* now destruct all auxiliaries */ - zval_ptr_dtor(&method_args_ptr); - zval_ptr_dtor(&method_name_ptr); - - /* destruct the function also, then - we have allocated it in get_method */ - efree(func); -} - -/* Ensures that we're allowed to call a private method. - * Returns the function address that should be called, or NULL - * if no such function exists. - */ -static inline zend_function *zend_check_private_int(zend_function *fbc, zend_class_entry *ce, zstr function_name_strval, int function_name_strlen TSRMLS_DC) -{ - if (!ce) { - return 0; - } - - /* We may call a private function if: - * 1. The class of our object is the same as the scope, and the private - * function (EX(fbc)) has the same scope. - * 2. One of our parent classes are the same as the scope, and it contains - * a private function with the same name that has the same scope. - */ - if (fbc->common.scope == ce && EG(scope) == ce) { - /* rule #1 checks out ok, allow the function call */ - return fbc; - } - - - /* Check rule #2 */ - ce = ce->parent; - while (ce) { - if (ce == EG(scope)) { - if (zend_u_hash_find(&ce->function_table, UG(unicode)?IS_UNICODE:IS_STRING, function_name_strval, function_name_strlen+1, (void **) &fbc)==SUCCESS - && fbc->op_array.fn_flags & ZEND_ACC_PRIVATE - && fbc->common.scope == EG(scope)) { - return fbc; - } - break; - } - ce = ce->parent; - } - return NULL; -} - - -ZEND_API int zend_check_private(zend_function *fbc, zend_class_entry *ce, zstr function_name_strval, int function_name_strlen TSRMLS_DC) -{ - return zend_check_private_int(fbc, ce, function_name_strval, function_name_strlen TSRMLS_CC) != NULL; -} - - -/* Ensures that we're allowed to call a protected method. - */ -ZEND_API int zend_check_protected(zend_class_entry *ce, zend_class_entry *scope) -{ - zend_class_entry *fbc_scope = ce; - - /* Is the context that's calling the function, the same as one of - * the function's parents? - */ - while (fbc_scope) { - if (fbc_scope==scope) { - return 1; - } - fbc_scope = fbc_scope->parent; - } - - /* Is the function's scope the same as our current object context, - * or any of the parents of our context? - */ - while (scope) { - if (scope==ce) { - return 1; - } - scope = scope->parent; - } - return 0; -} - - -static inline zend_class_entry * zend_get_function_root_class(zend_function *fbc) -{ - return fbc->common.prototype ? fbc->common.prototype->common.scope : fbc->common.scope; -} - - -static union _zend_function *zend_std_get_method(zval **object_ptr, zstr method_name, int method_len TSRMLS_DC) -{ - zend_object *zobj; - zend_function *fbc; - unsigned int lc_method_name_len; - zstr lc_method_name; - zval *object = *object_ptr; - - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; - - /* Create a zend_copy_str_tolower(dest, src, src_length); */ - lc_method_name = zend_u_str_case_fold(type, method_name, method_len, 1, &lc_method_name_len); - - zobj = Z_OBJ_P(object); - if (zend_u_hash_find(&zobj->ce->function_table, type, lc_method_name, lc_method_name_len+1, (void **)&fbc) == FAILURE) { - efree(lc_method_name.v); - if (zobj->ce->__call) { - zend_internal_function *call_user_call = emalloc(sizeof(zend_internal_function)); - call_user_call->type = ZEND_INTERNAL_FUNCTION; - call_user_call->module = zobj->ce->module; - call_user_call->handler = zend_std_call_user_call; - call_user_call->arg_info = NULL; - call_user_call->num_args = 0; - call_user_call->scope = zobj->ce; - call_user_call->fn_flags = 0; - if (UG(unicode)) { - call_user_call->function_name.u = eustrndup(method_name.u, method_len); - } else { - call_user_call->function_name.s = estrndup(method_name.s, method_len); - } - call_user_call->pass_rest_by_reference = 0; - call_user_call->return_reference = ZEND_RETURN_VALUE; - - return (union _zend_function *)call_user_call; - } else { - return NULL; - } - } - - /* Check access level */ - if (fbc->op_array.fn_flags & ZEND_ACC_PRIVATE) { - zend_function *updated_fbc; - - /* Ensure that if we're calling a private function, we're allowed to do so. - */ - updated_fbc = zend_check_private_int(fbc, Z_OBJ_HANDLER_P(object, get_class_entry)(object TSRMLS_CC), lc_method_name, method_len TSRMLS_CC); - if (!updated_fbc) { - zend_error(E_ERROR, "Call to %s method %v::%v() from context '%v'", zend_visibility_string(fbc->common.fn_flags), ZEND_FN_SCOPE_NAME(fbc), method_name, EG(scope) ? EG(scope)->name : EMPTY_ZSTR); - } - fbc = updated_fbc; - } else { - /* Ensure that we haven't overridden a private function and end up calling - * the overriding public function... - */ - if (EG(scope) && fbc->op_array.fn_flags & ZEND_ACC_CHANGED) { - zend_function *priv_fbc; - - if (zend_u_hash_find(&EG(scope)->function_table, type, lc_method_name, lc_method_name_len+1, (void **) &priv_fbc)==SUCCESS - && priv_fbc->common.fn_flags & ZEND_ACC_PRIVATE - && priv_fbc->common.scope == EG(scope)) { - fbc = priv_fbc; - } - } - if ((fbc->common.fn_flags & ZEND_ACC_PROTECTED)) { - /* Ensure that if we're calling a protected function, we're allowed to do so. - */ - if (!zend_check_protected(zend_get_function_root_class(fbc), EG(scope))) { - zend_error(E_ERROR, "Call to %s method %v::%v() from context '%v'", zend_visibility_string(fbc->common.fn_flags), ZEND_FN_SCOPE_NAME(fbc), method_name, EG(scope) ? EG(scope)->name : EMPTY_ZSTR); - } - } - } - - efree(lc_method_name.v); - return fbc; -} - - -/* This is not (yet?) in the API, but it belongs in the built-in objects callbacks */ -ZEND_API zend_function *zend_std_get_static_method(zend_class_entry *ce, zstr function_name_strval, int function_name_strlen TSRMLS_DC) -{ - zend_function *fbc; - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; - - if (zend_u_hash_find(&ce->function_table, type, function_name_strval, function_name_strlen+1, (void **) &fbc)==FAILURE) { - zstr class_name = ce->name; - - if (!class_name.v) { - class_name.u = EMPTY_STR; - } - zend_error(E_ERROR, "Call to undefined method %R::%R()", type, class_name, type, function_name_strval); - } -#if MBO_0 - /* right now this function is used for non static method lookup too */ - /* Is the function static */ - if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) { - zend_error(E_ERROR, "Cannot call non static method %v::%v() without object", ZEND_FN_SCOPE_NAME(fbc), fbc->common.function_name); - } -#endif - if (fbc->op_array.fn_flags & ZEND_ACC_PUBLIC) { - /* No further checks necessary, most common case */ - } else if (fbc->op_array.fn_flags & ZEND_ACC_PRIVATE) { - zend_function *updated_fbc; - - /* Ensure that if we're calling a private function, we're allowed to do so. - */ - updated_fbc = zend_check_private_int(fbc, EG(scope), function_name_strval, function_name_strlen TSRMLS_CC); - if (!updated_fbc) { - zend_error(E_ERROR, "Call to %s method %v::%v() from context '%v'", zend_visibility_string(fbc->common.fn_flags), ZEND_FN_SCOPE_NAME(fbc), fbc->common.function_name, EG(scope) ? EG(scope)->name : EMPTY_ZSTR); - } - fbc = updated_fbc; - } else if ((fbc->common.fn_flags & ZEND_ACC_PROTECTED)) { - /* Ensure that if we're calling a protected function, we're allowed to do so. - */ - if (!zend_check_protected(zend_get_function_root_class(fbc), EG(scope))) { - zend_error(E_ERROR, "Call to %s method %v::%v() from context '%v'", zend_visibility_string(fbc->common.fn_flags), ZEND_FN_SCOPE_NAME(fbc), fbc->common.function_name, EG(scope) ? EG(scope)->name : EMPTY_ZSTR); - } - } - - return fbc; -} - - -ZEND_API zval **zend_std_get_static_property(zend_class_entry *ce, zend_uchar type, zstr property_name, int property_name_len, zend_bool silent TSRMLS_DC) -{ - zval **retval = NULL; - zend_class_entry *tmp_ce = ce; - zend_property_info *property_info; - zend_property_info std_property_info; - - if (zend_u_hash_find(&ce->properties_info, type, property_name, property_name_len+1, (void **) &property_info)==FAILURE) { - std_property_info.flags = ZEND_ACC_PUBLIC; - std_property_info.name = property_name; - std_property_info.name_length = property_name_len; - std_property_info.h = zend_u_get_hash_value(UG(unicode)?IS_UNICODE:IS_STRING, std_property_info.name, std_property_info.name_length+1); - std_property_info.ce = ce; - property_info = &std_property_info; - } - -#if DEBUG_OBJECT_HANDLERS - zend_printf("Access type for %v::%R is %s\n", ce->name, type, property_name, zend_visibility_string(property_info->flags)); -#endif - - if (!zend_verify_property_access(property_info, ce TSRMLS_CC)) { - if (!silent) { - zend_error(E_ERROR, "Cannot access %s property %v::$%R", zend_visibility_string(property_info->flags), ce->name, type, property_name); - } - return NULL; - } - - zend_update_class_constants(tmp_ce TSRMLS_CC); - - zend_u_hash_quick_find(CE_STATIC_MEMBERS(tmp_ce), UG(unicode)?IS_UNICODE:IS_STRING, property_info->name, property_info->name_length+1, property_info->h, (void **) &retval); - - if (!retval) { - if (silent) { - return NULL; - } else { - zend_error(E_ERROR, "Access to undeclared static property: %v::$%R", ce->name, type, property_name); - } - } - - return retval; -} - - -ZEND_API zend_bool zend_std_unset_static_property(zend_class_entry *ce, zend_uchar type, zstr property_name, int property_name_len TSRMLS_DC) -{ - zend_error(E_ERROR, "Attempt to unset static property %v::$%R", ce->name, type, property_name); - return 0; -} - - -ZEND_API union _zend_function *zend_std_get_constructor(zval *object TSRMLS_DC) -{ - zend_object *zobj = Z_OBJ_P(object); - zend_function *constructor = zobj->ce->constructor; - - if (constructor) { - if (constructor->op_array.fn_flags & ZEND_ACC_PUBLIC) { - /* No further checks necessary */ - } else if (constructor->op_array.fn_flags & ZEND_ACC_PRIVATE) { - /* Ensure that if we're calling a private function, we're allowed to do so. - */ - if (Z_OBJ_HANDLER_P(object, get_class_entry)(object TSRMLS_CC) != EG(scope)) { - if (EG(scope)) { - zend_error(E_ERROR, "Call to private %v::%v() from context '%v'", constructor->common.scope->name, constructor->common.function_name, EG(scope)->name); - } else { - zend_error(E_ERROR, "Call to private %v::%v() from invalid context", constructor->common.scope->name, constructor->common.function_name); - } - } - } else if ((constructor->common.fn_flags & ZEND_ACC_PROTECTED)) { - /* Ensure that if we're calling a protected function, we're allowed to do so. - * Constructors only have prototype if they are defined by an interface but - * it is the compilers responsibility to take care of the prototype. - */ - if (!zend_check_protected(zend_get_function_root_class(constructor), EG(scope))) { - if (EG(scope)) { - zend_error(E_ERROR, "Call to protected %v::%v() from context '%v'", constructor->common.scope->name, constructor->common.function_name, EG(scope)->name); - } else { - zend_error(E_ERROR, "Call to protected %v::%v() from invalid context", constructor->common.scope->name, constructor->common.function_name); - } - } - } - } - - return constructor; -} - - -int zend_compare_symbol_tables_i(HashTable *ht1, HashTable *ht2 TSRMLS_DC); - - -static int zend_std_compare_objects(zval *o1, zval *o2 TSRMLS_DC) -{ - zend_object *zobj1, *zobj2; - - zobj1 = Z_OBJ_P(o1); - zobj2 = Z_OBJ_P(o2); - - if (zobj1->ce != zobj2->ce) { - return 1; /* different classes */ - } - return zend_compare_symbol_tables_i(zobj1->properties, zobj2->properties TSRMLS_CC); -} - -static int zend_std_has_property(zval *object, zval *member, int has_set_exists TSRMLS_DC) -{ - zend_object *zobj; - int result; - zval **value; - zval *tmp_member = NULL; - zend_property_info *property_info; - - zobj = Z_OBJ_P(object); - - if (Z_TYPE_P(member) != IS_UNICODE && (UG(unicode) || Z_TYPE_P(member) != IS_STRING)) { - ALLOC_ZVAL(tmp_member); - *tmp_member = *member; - INIT_PZVAL(tmp_member); - zval_copy_ctor(tmp_member); - convert_to_text(tmp_member); - member = tmp_member; - } - -#if DEBUG_OBJECT_HANDLERS - fprintf(stderr, "Read object #%d property: %R\n", Z_OBJ_HANDLE_P(object), Z_TYPE_P(member), Z_STRVAL_P(member)); -#endif - - property_info = zend_get_property_info(zobj->ce, member, 1 TSRMLS_CC); - - if (!property_info || zend_u_hash_quick_find(zobj->properties, Z_TYPE_P(member), property_info->name, property_info->name_length+1, property_info->h, (void **) &value) == FAILURE) { - zend_guard *guard; - - result = 0; - if ((has_set_exists != 2) && - zobj->ce->__isset && - zend_get_property_guard(zobj, property_info, member, &guard TSRMLS_CC) == SUCCESS && - !guard->in_isset) { - zval *rv; - - /* have issetter - try with it! */ - guard->in_isset = 1; /* prevent circular getting */ - rv = zend_std_call_issetter(object, member TSRMLS_CC); - if (rv) { - result = zend_is_true(rv); - zval_ptr_dtor(&rv); - if (has_set_exists && result && !EG(exception) && zobj->ce->__get && !guard->in_get) { - guard->in_get = 1; - rv = zend_std_call_getter(object, member TSRMLS_CC); - guard->in_get = 0; - if (rv) { - rv->refcount++; - result = i_zend_is_true(rv); - zval_ptr_dtor(&rv); - } - } - } - guard->in_isset = 0; - } - } else { - switch (has_set_exists) { - case 0: - result = (Z_TYPE_PP(value) != IS_NULL); - break; - default: - result = zend_is_true(*value); - break; - case 2: - result = 1; - break; - } - } - - if (tmp_member) { - zval_ptr_dtor(&tmp_member); - } - return result; -} - - -zend_class_entry *zend_std_object_get_class(zval *object TSRMLS_DC) -{ - zend_object *zobj; - zobj = Z_OBJ_P(object); - - return zobj->ce; -} - -int zend_std_object_get_class_name(zval *object, zstr *class_name, zend_uint *class_name_len, int parent TSRMLS_DC) -{ - zend_object *zobj; - zend_class_entry *ce; - zobj = Z_OBJ_P(object); - - if (parent) { - if (!zobj->ce->parent) { - return FAILURE; - } - ce = zobj->ce->parent; - } else { - ce = zobj->ce; - } - - *class_name_len = ce->name_length; - if (UG(unicode)) { - class_name->u = eustrndup(ce->name.u, ce->name_length); - } else { - class_name->s = estrndup(ce->name.s, ce->name_length); - } - return SUCCESS; -} - -ZEND_API int zend_std_cast_object_tostring(zval *readobj, zval *writeobj, int type, void *extra TSRMLS_DC) -{ - zval *retval; - zend_class_entry *ce; - UConverter *conv; - - switch (type) { - case IS_STRING: - case IS_UNICODE: - if (extra) { - conv = (UConverter *) extra; - } else { - conv = ZEND_U_CONVERTER(UG(runtime_encoding_conv)); - } - ce = Z_OBJCE_P(readobj); - if (ce->__tostring && - (zend_call_method_with_0_params(&readobj, ce, &ce->__tostring, "__tostring", &retval) || EG(exception))) { - if (EG(exception)) { - if (retval) { - zval_ptr_dtor(&retval); - } - zend_error(E_ERROR, "Method %v::__toString() must not throw an exception", ce->name); - return FAILURE; - } - if (Z_TYPE_P(retval) == (UG(unicode)?IS_UNICODE:IS_STRING)) { - INIT_PZVAL(writeobj); - ZVAL_ZVAL(writeobj, retval, 1, 1); - if (Z_TYPE_P(writeobj) != type) { - if (type == IS_UNICODE) { - convert_to_unicode_with_converter(writeobj, conv); - } else { - convert_to_string_with_converter(writeobj, conv); - } - } - return SUCCESS; - } else { - zval_ptr_dtor(&retval); - INIT_PZVAL(writeobj); - ZVAL_EMPTY_STRING(writeobj); - zend_error(E_RECOVERABLE_ERROR, "Method %v::__toString() must return a string value", ce->name); - return SUCCESS; - } - } - return FAILURE; - case IS_BOOL: - INIT_PZVAL(writeobj); - ZVAL_BOOL(writeobj, 1); - return SUCCESS; - case IS_LONG: - ce = Z_OBJCE_P(readobj); - zend_error(E_NOTICE, "Object of class %v could not be converted to int", ce->name); - INIT_PZVAL(writeobj); - ZVAL_LONG(writeobj, 1); - return SUCCESS; - case IS_DOUBLE: - ce = Z_OBJCE_P(readobj); - zend_error(E_NOTICE, "Object of class %v could not be converted to double", ce->name); - INIT_PZVAL(writeobj); - ZVAL_DOUBLE(writeobj, 1); - return SUCCESS; - default: - break; - } - return FAILURE; -} - - -ZEND_API zend_object_handlers std_object_handlers = { - zend_objects_store_add_ref, /* add_ref */ - zend_objects_store_del_ref, /* del_ref */ - zend_objects_clone_obj, /* clone_obj */ - - zend_std_read_property, /* read_property */ - zend_std_write_property, /* write_property */ - zend_std_read_dimension, /* read_dimension */ - zend_std_write_dimension, /* write_dimension */ - zend_std_get_property_ptr_ptr, /* get_property_ptr_ptr */ - NULL, /* get */ - NULL, /* set */ - zend_std_has_property, /* has_property */ - zend_std_unset_property, /* unset_property */ - zend_std_has_dimension, /* has_dimension */ - zend_std_unset_dimension, /* unset_dimension */ - zend_std_get_properties, /* get_properties */ - zend_std_get_method, /* get_method */ - NULL, /* call_method */ - zend_std_get_constructor, /* get_constructor */ - zend_std_object_get_class, /* get_class_entry */ - zend_std_object_get_class_name, /* get_class_name */ - zend_std_compare_objects, /* compare_objects */ - zend_std_cast_object_tostring, /* cast_object */ - NULL, /* count_elements */ - NULL, /* get_debug_info */ -}; - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_object_handlers.h b/Zend/zend_object_handlers.h deleted file mode 100644 index 033140b67ed63..0000000000000 --- a/Zend/zend_object_handlers.h +++ /dev/null @@ -1,173 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_OBJECT_HANDLERS_H -#define ZEND_OBJECT_HANDLERS_H - -union _zend_function; -struct _zend_property_info; - -/* The following rule applies to read_property() and read_dimension() implementations: - If you return a zval which is not otherwise referenced by the extension or the engine's - symbol table, its reference count should be 0. -*/ -/* Used to fetch property from the object, read-only */ -typedef zval *(*zend_object_read_property_t)(zval *object, zval *member, int type TSRMLS_DC); - -/* Used to fetch dimension from the object, read-only */ -typedef zval *(*zend_object_read_dimension_t)(zval *object, zval *offset, int type TSRMLS_DC); - - -/* The following rule applies to write_property() and write_dimension() implementations: - If you receive a value zval in write_property/write_dimension, you may only modify it if - its reference count is 1. Otherwise, you must create a copy of that zval before making - any changes. You should NOT modify the reference count of the value passed to you. -*/ -/* Used to set property of the object */ -typedef void (*zend_object_write_property_t)(zval *object, zval *member, zval *value TSRMLS_DC); - -/* Used to set dimension of the object */ -typedef void (*zend_object_write_dimension_t)(zval *object, zval *offset, zval *value TSRMLS_DC); - - -/* Used to create pointer to the property of the object, for future direct r/w access */ -typedef zval **(*zend_object_get_property_ptr_ptr_t)(zval *object, zval *member TSRMLS_DC); - -/* Used to set object value. Can be used to override assignments and scalar - write ops (like ++, +=) on the object */ -typedef void (*zend_object_set_t)(zval **object, zval *value TSRMLS_DC); - -/* Used to get object value. Can be used when converting object value to - * one of the basic types and when using scalar ops (like ++, +=) on the object - */ -typedef zval* (*zend_object_get_t)(zval *object TSRMLS_DC); - -/* Used to check if a property of the object exists */ -/* param has_set_exists: - * 0 (has) whether property exists and is not NULL - * 1 (set) whether property exists and is true - * 2 (exists) whether property exists - */ -typedef int (*zend_object_has_property_t)(zval *object, zval *member, int has_set_exists TSRMLS_DC); - -/* Used to check if a dimension of the object exists */ -typedef int (*zend_object_has_dimension_t)(zval *object, zval *member, int check_empty TSRMLS_DC); - -/* Used to remove a property of the object */ -typedef void (*zend_object_unset_property_t)(zval *object, zval *member TSRMLS_DC); - -/* Used to remove a dimension of the object */ -typedef void (*zend_object_unset_dimension_t)(zval *object, zval *offset TSRMLS_DC); - -/* Used to get hash of the properties of the object, as hash of zval's */ -typedef HashTable *(*zend_object_get_properties_t)(zval *object TSRMLS_DC); - -typedef HashTable *(*zend_object_get_debug_info_t)(zval *object, int *is_temp TSRMLS_DC); - -/* Used to call methods */ -/* args on stack! */ -/* Andi - EX(fbc) (function being called) needs to be initialized already in the INIT fcall opcode so that the parameters can be parsed the right way. We need to add another callback for this. - */ -typedef int (*zend_object_call_method_t)(zstr method, INTERNAL_FUNCTION_PARAMETERS); -typedef union _zend_function *(*zend_object_get_method_t)(zval **object_ptr, zstr method, int method_len TSRMLS_DC); -typedef union _zend_function *(*zend_object_get_constructor_t)(zval *object TSRMLS_DC); - -/* Object maintenance/destruction */ -typedef void (*zend_object_add_ref_t)(zval *object TSRMLS_DC); -typedef void (*zend_object_del_ref_t)(zval *object TSRMLS_DC); -typedef void (*zend_object_delete_obj_t)(zval *object TSRMLS_DC); -typedef zend_object_value (*zend_object_clone_obj_t)(zval *object TSRMLS_DC); - -typedef zend_class_entry *(*zend_object_get_class_entry_t)(zval *object TSRMLS_DC); -typedef int (*zend_object_get_class_name_t)(zval *object, zstr *class_name, zend_uint *class_name_len, int parent TSRMLS_DC); -typedef int (*zend_object_compare_t)(zval *object1, zval *object2 TSRMLS_DC); - -/* Cast an object to some other type - */ -typedef int (*zend_object_cast_t)(zval *readobj, zval *retval, int type, void *extra TSRMLS_DC); - -/* updates *count to hold the number of elements present and returns SUCCESS. - * Returns FAILURE if the object does not have any sense of overloaded dimensions */ -typedef int (*zend_object_count_elements_t)(zval *object, long *count TSRMLS_DC); - -struct _zend_object_handlers { - /* general object functions */ - zend_object_add_ref_t add_ref; - zend_object_del_ref_t del_ref; - zend_object_clone_obj_t clone_obj; - /* individual object functions */ - zend_object_read_property_t read_property; - zend_object_write_property_t write_property; - zend_object_read_dimension_t read_dimension; - zend_object_write_dimension_t write_dimension; - zend_object_get_property_ptr_ptr_t get_property_ptr_ptr; - zend_object_get_t get; - zend_object_set_t set; - zend_object_has_property_t has_property; - zend_object_unset_property_t unset_property; - zend_object_has_dimension_t has_dimension; - zend_object_unset_dimension_t unset_dimension; - zend_object_get_properties_t get_properties; - zend_object_get_method_t get_method; - zend_object_call_method_t call_method; - zend_object_get_constructor_t get_constructor; - zend_object_get_class_entry_t get_class_entry; - zend_object_get_class_name_t get_class_name; - zend_object_compare_t compare_objects; - zend_object_cast_t cast_object; - zend_object_count_elements_t count_elements; - zend_object_get_debug_info_t get_debug_info; -}; - -extern ZEND_API zend_object_handlers std_object_handlers; - -BEGIN_EXTERN_C() -ZEND_API union _zend_function *zend_std_get_static_method(zend_class_entry *ce, zstr function_name_strval, int function_name_strlen TSRMLS_DC); -ZEND_API zval **zend_std_get_static_property(zend_class_entry *ce, zend_uchar type, zstr property_name, int property_name_len, zend_bool silent TSRMLS_DC); -ZEND_API zend_bool zend_std_unset_static_property(zend_class_entry *ce, zend_uchar type, zstr property_name, int property_name_len TSRMLS_DC); -ZEND_API union _zend_function *zend_std_get_constructor(zval *object TSRMLS_DC); -ZEND_API struct _zend_property_info *zend_get_property_info(zend_class_entry *ce, zval *member, int silent TSRMLS_DC); -ZEND_API HashTable *zend_std_get_properties(zval *object TSRMLS_DC); -ZEND_API HashTable *zend_std_get_debug_info(zval *object, int *is_temp TSRMLS_DC); -ZEND_API int zend_std_cast_object_tostring(zval *readobj, zval *writeobj, int type, void *extra TSRMLS_DC); - - -#define IS_ZEND_STD_OBJECT(z) (Z_TYPE(z) == IS_OBJECT && (Z_OBJ_HT((z))->get_class_entry != NULL)) -#define HAS_CLASS_ENTRY(z) (Z_OBJ_HT(z)->get_class_entry != NULL) - -ZEND_API int zend_check_private(union _zend_function *fbc, zend_class_entry *ce, zstr function_name_strval, int function_name_strlen TSRMLS_DC); - -ZEND_API int zend_check_protected(zend_class_entry *ce, zend_class_entry *scope); - -ZEND_API int zend_check_property_access(zend_object *zobj, zend_uchar utype, zstr prop_info_name, int prop_info_name_len TSRMLS_DC); - -ZEND_API void zend_std_call_user_call(INTERNAL_FUNCTION_PARAMETERS); -END_EXTERN_C() - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_objects.c b/Zend/zend_objects.c deleted file mode 100644 index 00531b643dcf3..0000000000000 --- a/Zend/zend_objects.c +++ /dev/null @@ -1,190 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#include "zend.h" -#include "zend_globals.h" -#include "zend_variables.h" -#include "zend_API.h" -#include "zend_interfaces.h" -#include "zend_exceptions.h" - -ZEND_API void zend_object_std_init(zend_object *object, zend_class_entry *ce TSRMLS_DC) -{ - ALLOC_HASHTABLE(object->properties); - zend_u_hash_init(object->properties, 0, NULL, ZVAL_PTR_DTOR, 0, UG(unicode)); - - object->ce = ce; - object->guards = NULL; -} - -ZEND_API void zend_object_std_dtor(zend_object *object TSRMLS_DC) -{ - if (object->guards) { - zend_hash_destroy(object->guards); - FREE_HASHTABLE(object->guards); - } - if (object->properties) { - zend_hash_destroy(object->properties); - FREE_HASHTABLE(object->properties); - } -} - -ZEND_API void zend_objects_destroy_object(zend_object *object, zend_object_handle handle TSRMLS_DC) -{ - zend_function *destructor = object->ce->destructor; - - if (destructor) { - zval *obj; - zval *old_exception; - - if (destructor->op_array.fn_flags & (ZEND_ACC_PRIVATE|ZEND_ACC_PROTECTED)) { - if (destructor->op_array.fn_flags & ZEND_ACC_PRIVATE) { - /* Ensure that if we're calling a private function, we're allowed to do so. - */ - if (object->ce != EG(scope)) { - zend_class_entry *ce = object->ce; - - zend_error(EG(in_execution) ? E_ERROR : E_WARNING, - "Call to private %v::__destruct() from context '%v'%s", - ce->name, - EG(scope) ? EG(scope)->name : EMPTY_ZSTR, - EG(in_execution) ? "" : " during shutdown ignored"); - return; - } - } else { - /* Ensure that if we're calling a protected function, we're allowed to do so. - */ - if (!zend_check_protected(destructor->common.scope, EG(scope))) { - zend_class_entry *ce = object->ce; - - zend_error(EG(in_execution) ? E_ERROR : E_WARNING, - "Call to protected %v::__destruct() from context '%v'%s", - ce->name, - EG(scope) ? EG(scope)->name : EMPTY_ZSTR, - EG(in_execution) ? "" : " during shutdown ignored"); - return; - } - } - } - - MAKE_STD_ZVAL(obj); - Z_TYPE_P(obj) = IS_OBJECT; - Z_OBJ_HANDLE_P(obj) = handle; - Z_OBJ_HT_P(obj) = &std_object_handlers; - zval_copy_ctor(obj); - - /* Make sure that destructors are protected from previously thrown exceptions. - * For example, if an exception was thrown in a function and when the function's - * local variable destruction results in a destructor being called. - */ - old_exception = EG(exception); - EG(exception) = NULL; - zend_call_method_with_0_params(&obj, object->ce, &destructor, ZEND_DESTRUCTOR_FUNC_NAME, NULL); - if (old_exception) { - if (EG(exception)) { - zend_class_entry *default_exception_ce = zend_exception_get_default(TSRMLS_C); - zval *file = zend_read_property(default_exception_ce, old_exception, "file", sizeof("file")-1, 1 TSRMLS_CC); - zval *line = zend_read_property(default_exception_ce, old_exception, "line", sizeof("line")-1, 1 TSRMLS_CC); - - zval_ptr_dtor(&obj); - zval_ptr_dtor(&EG(exception)); - EG(exception) = old_exception; - zend_error(E_ERROR, "Ignoring exception from %v::__destruct() while an exception is already active (Uncaught %v in %R on line %ld)", - object->ce->name, Z_OBJCE_P(old_exception)->name, Z_TYPE_P(file), Z_UNIVAL_P(file), Z_LVAL_P(line)); - } - EG(exception) = old_exception; - } - zval_ptr_dtor(&obj); - } -} - -ZEND_API void zend_objects_free_object_storage(zend_object *object TSRMLS_DC) -{ - if (object->guards) { - zend_hash_destroy(object->guards); - FREE_HASHTABLE(object->guards); - } - zend_hash_destroy(object->properties); - FREE_HASHTABLE(object->properties); - efree(object); -} - -ZEND_API zend_object_value zend_objects_new(zend_object **object, zend_class_entry *class_type TSRMLS_DC) -{ - zend_object_value retval; - - *object = emalloc(sizeof(zend_object)); - (*object)->ce = class_type; - retval.handle = zend_objects_store_put(*object, (zend_objects_store_dtor_t) zend_objects_destroy_object, (zend_objects_free_object_storage_t) zend_objects_free_object_storage, NULL TSRMLS_CC); - retval.handlers = &std_object_handlers; - (*object)->guards = NULL; - return retval; -} - -ZEND_API zend_object *zend_objects_get_address(zval *zobject TSRMLS_DC) -{ - return (zend_object *)zend_object_store_get_object(zobject TSRMLS_CC); -} - -ZEND_API void zend_objects_clone_members(zend_object *new_object, zend_object_value new_obj_val, zend_object *old_object, zend_object_handle handle TSRMLS_DC) -{ - zend_hash_copy(new_object->properties, old_object->properties, (copy_ctor_func_t) zval_add_ref, (void *) NULL /* Not used anymore */, sizeof(zval *)); - if (old_object->ce->clone) { - zval *new_obj; - - MAKE_STD_ZVAL(new_obj); - Z_TYPE_P(new_obj) = IS_OBJECT; - Z_OBJVAL_P(new_obj) = new_obj_val; - zval_copy_ctor(new_obj); - - zend_call_method_with_0_params(&new_obj, old_object->ce, &old_object->ce->clone, ZEND_CLONE_FUNC_NAME, NULL); - - zval_ptr_dtor(&new_obj); - } -} - -ZEND_API zend_object_value zend_objects_clone_obj(zval *zobject TSRMLS_DC) -{ - zend_object_value new_obj_val; - zend_object *old_object; - zend_object *new_object; - zend_object_handle handle = Z_OBJ_HANDLE_P(zobject); - - /* assume that create isn't overwritten, so when clone depends on the - * overwritten one then it must itself be overwritten */ - old_object = zend_objects_get_address(zobject TSRMLS_CC); - new_obj_val = zend_objects_new(&new_object, old_object->ce TSRMLS_CC); - - ALLOC_HASHTABLE(new_object->properties); - zend_u_hash_init(new_object->properties, 0, NULL, ZVAL_PTR_DTOR, 0, UG(unicode)); - - zend_objects_clone_members(new_object, new_obj_val, old_object, handle TSRMLS_CC); - - return new_obj_val; -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_objects.h b/Zend/zend_objects.h deleted file mode 100644 index 82e8436c2bb92..0000000000000 --- a/Zend/zend_objects.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_OBJECTS_H -#define ZEND_OBJECTS_H - -#include "zend.h" - -BEGIN_EXTERN_C() -ZEND_API void zend_object_std_init(zend_object *object, zend_class_entry *ce TSRMLS_DC); -ZEND_API void zend_object_std_dtor(zend_object *object TSRMLS_DC); -ZEND_API zend_object_value zend_objects_new(zend_object **object, zend_class_entry *class_type TSRMLS_DC); -ZEND_API void zend_objects_destroy_object(zend_object *object, zend_object_handle handle TSRMLS_DC); -ZEND_API zend_object *zend_objects_get_address(zval *object TSRMLS_DC); -ZEND_API void zend_objects_clone_members(zend_object *new_object, zend_object_value new_obj_val, zend_object *old_object, zend_object_handle handle TSRMLS_DC); -ZEND_API zend_object_value zend_objects_clone_obj(zval *object TSRMLS_DC); -ZEND_API void zend_objects_free_object_storage(zend_object *object TSRMLS_DC); -END_EXTERN_C() - -#endif /* ZEND_OBJECTS_H */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_objects_API.c b/Zend/zend_objects_API.c deleted file mode 100644 index e004253a36385..0000000000000 --- a/Zend/zend_objects_API.c +++ /dev/null @@ -1,401 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#include "zend.h" -#include "zend_globals.h" -#include "zend_variables.h" -#include "zend_API.h" -#include "zend_objects_API.h" - -#define ZEND_DEBUG_OBJECTS 0 - -ZEND_API void zend_objects_store_init(zend_objects_store *objects, zend_uint init_size) -{ - objects->object_buckets = (zend_object_store_bucket *) emalloc(init_size * sizeof(zend_object_store_bucket)); - objects->top = 1; /* Skip 0 so that handles are true */ - objects->size = init_size; - objects->free_list_head = -1; - memset(&objects->object_buckets[0], 0, sizeof(zend_object_store_bucket)); -} - -ZEND_API void zend_objects_store_destroy(zend_objects_store *objects) -{ - efree(objects->object_buckets); - objects->object_buckets = NULL; -} - -ZEND_API void zend_objects_store_call_destructors(zend_objects_store *objects TSRMLS_DC) -{ - zend_uint i = 1; - - for (i = 1; i < objects->top ; i++) { - if (objects->object_buckets[i].valid) { - struct _store_object *obj = &objects->object_buckets[i].bucket.obj; - - if (!objects->object_buckets[i].destructor_called) { - objects->object_buckets[i].destructor_called = 1; - if (obj->dtor && obj->object) { - obj->refcount++; - obj->dtor(obj->object, i TSRMLS_CC); - obj->refcount--; - } - } - } - } -} - -ZEND_API void zend_objects_store_mark_destructed(zend_objects_store *objects TSRMLS_DC) -{ - zend_uint i; - - if (!objects->object_buckets) { - return; - } - for (i = 1; i < objects->top ; i++) { - if (objects->object_buckets[i].valid) { - objects->object_buckets[i].destructor_called = 1; - } - } -} - -ZEND_API void zend_objects_store_free_object_storage(zend_objects_store *objects TSRMLS_DC) -{ - zend_uint i = 1; - - for (i = 1; i < objects->top ; i++) { - if (objects->object_buckets[i].valid) { - struct _store_object *obj = &objects->object_buckets[i].bucket.obj; - - objects->object_buckets[i].valid = 0; - if (obj->free_storage) { - obj->free_storage(obj->object TSRMLS_CC); - } - /* Not adding to free list as we are shutting down anyway */ - } - } -} - - -/* Store objects API */ - -ZEND_API zend_object_handle zend_objects_store_put(void *object, zend_objects_store_dtor_t dtor, zend_objects_free_object_storage_t free_storage, zend_objects_store_clone_t clone TSRMLS_DC) -{ - zend_object_handle handle; - struct _store_object *obj; - - if (EG(objects_store).free_list_head != -1) { - handle = EG(objects_store).free_list_head; - EG(objects_store).free_list_head = EG(objects_store).object_buckets[handle].bucket.free_list.next; - } else { - if (EG(objects_store).top == EG(objects_store).size) { - EG(objects_store).size <<= 1; - EG(objects_store).object_buckets = (zend_object_store_bucket *) erealloc(EG(objects_store).object_buckets, EG(objects_store).size * sizeof(zend_object_store_bucket)); - } - handle = EG(objects_store).top++; - } - obj = &EG(objects_store).object_buckets[handle].bucket.obj; - EG(objects_store).object_buckets[handle].destructor_called = 0; - EG(objects_store).object_buckets[handle].valid = 1; - - obj->refcount = 1; - obj->object = object; - obj->dtor = dtor?dtor:(zend_objects_store_dtor_t)zend_objects_destroy_object; - obj->free_storage = free_storage; - - obj->clone = clone; - -#if ZEND_DEBUG_OBJECTS - fprintf(stderr, "Allocated object id #%d\n", handle); -#endif - return handle; -} - -ZEND_API zend_uint zend_objects_store_get_refcount(zval *object TSRMLS_DC) -{ - zend_object_handle handle = Z_OBJ_HANDLE_P(object); - - return EG(objects_store).object_buckets[handle].bucket.obj.refcount; -} - -ZEND_API void zend_objects_store_add_ref(zval *object TSRMLS_DC) -{ - zend_object_handle handle = Z_OBJ_HANDLE_P(object); - - EG(objects_store).object_buckets[handle].bucket.obj.refcount++; -#if ZEND_DEBUG_OBJECTS - fprintf(stderr, "Increased refcount of object id #%d\n", handle); -#endif -} - -ZEND_API int zend_objects_is_destructor_called(zend_object_handle handle TSRMLS_DC) -{ - if (EG(objects_store).object_buckets[handle].valid) { - return EG(objects_store).object_buckets[handle].destructor_called; - } - return 1; -} - -/* - * Add a reference to an objects store entry given the object handle. - */ -ZEND_API void zend_objects_store_add_ref_by_handle(zend_object_handle handle TSRMLS_DC) -{ - EG(objects_store).object_buckets[handle].bucket.obj.refcount++; -} - -#define ZEND_OBJECTS_STORE_ADD_TO_FREE_LIST() \ - EG(objects_store).object_buckets[handle].bucket.free_list.next = EG(objects_store).free_list_head; \ - EG(objects_store).free_list_head = handle; \ - EG(objects_store).object_buckets[handle].valid = 0; - -ZEND_API void zend_objects_store_del_ref(zval *zobject TSRMLS_DC) -{ - zend_object_handle handle; - - handle = Z_OBJ_HANDLE_P(zobject); - - zobject->refcount++; - zend_objects_store_del_ref_by_handle(handle TSRMLS_CC); - zobject->refcount--; -} - -/* - * Delete a reference to an objects store entry given the object handle. - */ -ZEND_API void zend_objects_store_del_ref_by_handle(zend_object_handle handle TSRMLS_DC) -{ - struct _store_object *obj; - int failure = 0; - - if (!EG(objects_store).object_buckets) { - return; - } - - obj = &EG(objects_store).object_buckets[handle].bucket.obj; - - /* Make sure we hold a reference count during the destructor call - otherwise, when the destructor ends the storage might be freed - when the refcount reaches 0 a second time - */ - if (EG(objects_store).object_buckets[handle].valid) { - if (obj->refcount == 1) { - if (!EG(objects_store).object_buckets[handle].destructor_called) { - EG(objects_store).object_buckets[handle].destructor_called = 1; - - if (obj->dtor) { - zend_try { - obj->dtor(obj->object, handle TSRMLS_CC); - } zend_catch { - failure = 1; - } zend_end_try(); - } - } - if (obj->refcount == 1) { - if (obj->free_storage) { - zend_try { - obj->free_storage(obj->object TSRMLS_CC); - } zend_catch { - failure = 1; - } zend_end_try(); - } - ZEND_OBJECTS_STORE_ADD_TO_FREE_LIST(); - } - } - } - - obj->refcount--; - -#if ZEND_DEBUG_OBJECTS - if (obj->refcount == 0) { - fprintf(stderr, "Deallocated object id #%d\n", handle); - } else { - fprintf(stderr, "Decreased refcount of object id #%d\n", handle); - } -#endif - if (failure) { - zend_bailout(); - } -} - -ZEND_API zend_object_value zend_objects_store_clone_obj(zval *zobject TSRMLS_DC) -{ - zend_object_value retval; - void *new_object; - struct _store_object *obj; - zend_object_handle handle = Z_OBJ_HANDLE_P(zobject); - - obj = &EG(objects_store).object_buckets[handle].bucket.obj; - - if (obj->clone == NULL) { - zend_error(E_CORE_ERROR, "Trying to clone uncloneable object of class %v", Z_OBJCE_P(zobject)->name); - } - - obj->clone(obj->object, &new_object TSRMLS_CC); - - retval.handle = zend_objects_store_put(new_object, obj->dtor, obj->free_storage, obj->clone TSRMLS_CC); - retval.handlers = Z_OBJ_HT_P(zobject); - - return retval; -} - -ZEND_API void *zend_object_store_get_object(zval *zobject TSRMLS_DC) -{ - zend_object_handle handle = Z_OBJ_HANDLE_P(zobject); - - return EG(objects_store).object_buckets[handle].bucket.obj.object; -} - -/* - * Retrieve an entry from the objects store given the object handle. - */ -ZEND_API void *zend_object_store_get_object_by_handle(zend_object_handle handle TSRMLS_DC) -{ - return EG(objects_store).object_buckets[handle].bucket.obj.object; -} - -/* zend_object_store_set_object: - * It is ONLY valid to call this function from within the constructor of an - * overloaded object. Its purpose is to set the object pointer for the object - * when you can't possibly know its value until you have parsed the arguments - * from the constructor function. You MUST NOT use this function for any other - * weird games, or call it at any other time after the object is constructed. - * */ -ZEND_API void zend_object_store_set_object(zval *zobject, void *object TSRMLS_DC) -{ - zend_object_handle handle = Z_OBJ_HANDLE_P(zobject); - - EG(objects_store).object_buckets[handle].bucket.obj.object = object; -} - - -/* Called when the ctor was terminated by an exception */ -ZEND_API void zend_object_store_ctor_failed(zval *zobject TSRMLS_DC) -{ - zend_object_handle handle = Z_OBJ_HANDLE_P(zobject); - - EG(objects_store).object_buckets[handle].destructor_called = 1; -} - - -/* Proxy objects workings */ -typedef struct _zend_proxy_object { - zval *object; - zval *property; -} zend_proxy_object; - -static zend_object_handlers zend_object_proxy_handlers; - -ZEND_API void zend_objects_proxy_free_storage(zend_proxy_object *object TSRMLS_DC) -{ - zval_ptr_dtor(&object->object); - zval_ptr_dtor(&object->property); - efree(object); -} - -ZEND_API void zend_objects_proxy_clone(zend_proxy_object *object, zend_proxy_object **object_clone TSRMLS_DC) -{ - *object_clone = emalloc(sizeof(zend_proxy_object)); - (*object_clone)->object = object->object; - (*object_clone)->property = object->property; - zval_add_ref(&(*object_clone)->property); - zval_add_ref(&(*object_clone)->object); -} - -ZEND_API zval *zend_object_create_proxy(zval *object, zval *member TSRMLS_DC) -{ - zend_proxy_object *pobj = emalloc(sizeof(zend_proxy_object)); - zval *retval; - - pobj->object = object; - pobj->property = member; - zval_add_ref(&pobj->property); - zval_add_ref(&pobj->object); - - MAKE_STD_ZVAL(retval); - Z_TYPE_P(retval) = IS_OBJECT; - Z_OBJ_HANDLE_P(retval) = zend_objects_store_put(pobj, NULL, (zend_objects_free_object_storage_t) zend_objects_proxy_free_storage, (zend_objects_store_clone_t) zend_objects_proxy_clone TSRMLS_CC); - Z_OBJ_HT_P(retval) = &zend_object_proxy_handlers; - - return retval; -} - -ZEND_API void zend_object_proxy_set(zval **property, zval *value TSRMLS_DC) -{ - zend_proxy_object *probj = zend_object_store_get_object(*property TSRMLS_CC); - - if (Z_OBJ_HT_P(probj->object) && Z_OBJ_HT_P(probj->object)->write_property) { - Z_OBJ_HT_P(probj->object)->write_property(probj->object, probj->property, value TSRMLS_CC); - } else { - zend_error(E_WARNING, "Cannot write property of object - no write handler defined"); - } -} - -ZEND_API zval* zend_object_proxy_get(zval *property TSRMLS_DC) -{ - zend_proxy_object *probj = zend_object_store_get_object(property TSRMLS_CC); - - if (Z_OBJ_HT_P(probj->object) && Z_OBJ_HT_P(probj->object)->read_property) { - return Z_OBJ_HT_P(probj->object)->read_property(probj->object, probj->property, BP_VAR_R TSRMLS_CC); - } else { - zend_error(E_WARNING, "Cannot read property of object - no read handler defined"); - } - - return NULL; -} - -ZEND_API zend_object_handlers *zend_get_std_object_handlers() -{ - return &std_object_handlers; -} - -static zend_object_handlers zend_object_proxy_handlers = { - ZEND_OBJECTS_STORE_HANDLERS, - - NULL, /* read_property */ - NULL, /* write_property */ - NULL, /* read dimension */ - NULL, /* write_dimension */ - NULL, /* get_property_ptr_ptr */ - zend_object_proxy_get, /* get */ - zend_object_proxy_set, /* set */ - NULL, /* has_property */ - NULL, /* unset_property */ - NULL, /* has_dimension */ - NULL, /* unset_dimension */ - NULL, /* get_properties */ - NULL, /* get_method */ - NULL, /* call_method */ - NULL, /* get_constructor */ - NULL, /* get_class_entry */ - NULL, /* get_class_name */ - NULL, /* compare_objects */ - NULL, /* cast_object */ - NULL, /* count_elements */ -}; - - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_objects_API.h b/Zend/zend_objects_API.h deleted file mode 100644 index cbf44fa99b4f7..0000000000000 --- a/Zend/zend_objects_API.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_OBJECTS_API_H -#define ZEND_OBJECTS_API_H - -#include "zend.h" - -typedef void (*zend_objects_store_dtor_t)(void *object, zend_object_handle handle TSRMLS_DC); -typedef void (*zend_objects_free_object_storage_t)(void *object TSRMLS_DC); -typedef void (*zend_objects_store_clone_t)(void *object, void **object_clone TSRMLS_DC); - -typedef struct _zend_object_store_bucket { - zend_bool destructor_called; - zend_bool valid; - union _store_bucket { - struct _store_object { - void *object; - zend_objects_store_dtor_t dtor; - zend_objects_free_object_storage_t free_storage; - zend_objects_store_clone_t clone; - zend_uint refcount; - } obj; - struct { - int next; - } free_list; - } bucket; -} zend_object_store_bucket; - -typedef struct _zend_objects_store { - zend_object_store_bucket *object_buckets; - zend_uint top; - zend_uint size; - int free_list_head; -} zend_objects_store; - -/* Global store handling functions */ -BEGIN_EXTERN_C() -ZEND_API void zend_objects_store_init(zend_objects_store *objects, zend_uint init_size); -ZEND_API void zend_objects_store_call_destructors(zend_objects_store *objects TSRMLS_DC); -ZEND_API void zend_objects_store_mark_destructed(zend_objects_store *objects TSRMLS_DC); -ZEND_API void zend_objects_store_destroy(zend_objects_store *objects); - -/* Store API functions */ -ZEND_API zend_object_handle zend_objects_store_put(void *object, zend_objects_store_dtor_t dtor, zend_objects_free_object_storage_t storage, zend_objects_store_clone_t clone TSRMLS_DC); - -ZEND_API void zend_objects_store_add_ref(zval *object TSRMLS_DC); -ZEND_API void zend_objects_store_del_ref(zval *object TSRMLS_DC); -ZEND_API void zend_objects_store_add_ref_by_handle(zend_object_handle handle TSRMLS_DC); -ZEND_API void zend_objects_store_del_ref_by_handle(zend_object_handle handle TSRMLS_DC); -ZEND_API zend_uint zend_objects_store_get_refcount(zval *object TSRMLS_DC); -ZEND_API int zend_objects_is_destructor_called(zend_object_handle handle TSRMLS_DC); -ZEND_API zend_object_value zend_objects_store_clone_obj(zval *object TSRMLS_DC); -ZEND_API void *zend_object_store_get_object(zval *object TSRMLS_DC); -ZEND_API void *zend_object_store_get_object_by_handle(zend_object_handle handle TSRMLS_DC); -/* See comment in zend_objects_API.c before you use this */ -ZEND_API void zend_object_store_set_object(zval *zobject, void *object TSRMLS_DC); -ZEND_API void zend_object_store_ctor_failed(zval *zobject TSRMLS_DC); - -ZEND_API void zend_objects_store_free_object_storage(zend_objects_store *objects TSRMLS_DC); - -#define ZEND_OBJECTS_STORE_HANDLERS zend_objects_store_add_ref, zend_objects_store_del_ref, zend_objects_store_clone_obj - -ZEND_API zval *zend_object_create_proxy(zval *object, zval *member TSRMLS_DC); - -ZEND_API zend_object_handlers *zend_get_std_object_handlers(); -END_EXTERN_C() - -#endif /* ZEND_OBJECTS_H */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c deleted file mode 100644 index 4b57ed1657a5e..0000000000000 --- a/Zend/zend_opcode.c +++ /dev/null @@ -1,548 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#include - -#include "zend.h" -#include "zend_alloc.h" -#include "zend_compile.h" -#include "zend_extensions.h" -#include "zend_API.h" - -#include "zend_vm.h" - -extern int zend_spprintf(char **message, int max_len, char *format, ...); - -static void zend_extension_op_array_ctor_handler(zend_extension *extension, zend_op_array *op_array TSRMLS_DC) -{ - if (extension->op_array_ctor) { - extension->op_array_ctor(op_array); - } -} - -static void zend_extension_op_array_dtor_handler(zend_extension *extension, zend_op_array *op_array TSRMLS_DC) -{ - if (extension->op_array_dtor) { - extension->op_array_dtor(op_array); - } -} - -static void op_array_alloc_ops(zend_op_array *op_array) -{ - op_array->opcodes = erealloc(op_array->opcodes, (op_array->size)*sizeof(zend_op)); -} - -void init_op_array(zend_op_array *op_array, zend_uchar type, int initial_ops_size TSRMLS_DC) -{ - op_array->type = type; - - op_array->backpatch_count = 0; - if (CG(interactive)) { - /* We must avoid a realloc() on the op_array in interactive mode, since pointers to constants - * will become invalid - */ - initial_ops_size = 8192; - } - - op_array->refcount = (zend_uint *) emalloc(sizeof(zend_uint)); - *op_array->refcount = 1; - op_array->size = initial_ops_size; - op_array->last = 0; - op_array->opcodes = NULL; - op_array_alloc_ops(op_array); - - op_array->size_var = 0; /* FIXME:??? */ - op_array->last_var = 0; - op_array->vars = NULL; - - op_array->T = 0; - - op_array->function_name.v = NULL; - op_array->filename = zend_get_compiled_filename(TSRMLS_C); - op_array->script_encoding = zend_get_compiled_script_encoding(TSRMLS_C); - op_array->doc_comment.v = NULL; - op_array->doc_comment_len = 0; - - op_array->arg_info = NULL; - op_array->num_args = 0; - op_array->required_num_args = 0; - - op_array->scope = NULL; - - op_array->brk_cont_array = NULL; - op_array->try_catch_array = NULL; - op_array->last_brk_cont = 0; - op_array->current_brk_cont = -1; - - op_array->static_variables = NULL; - op_array->last_try_catch = 0; - - op_array->return_reference = 0; - op_array->done_pass_two = 0; - - op_array->uses_this = 0; - - op_array->start_op = NULL; - - op_array->fn_flags = CG(interactive)?ZEND_ACC_INTERACTIVE:0; - - zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_op_array_ctor_handler, op_array TSRMLS_CC); -} - -ZEND_API void destroy_zend_function(zend_function *function TSRMLS_DC) -{ - switch (function->type) { - case ZEND_USER_FUNCTION: - destroy_op_array((zend_op_array *) function TSRMLS_CC); - break; - case ZEND_INTERNAL_FUNCTION: - /* do nothing */ - break; - } -} - -ZEND_API void zend_function_dtor(zend_function *function) -{ - TSRMLS_FETCH(); - - destroy_zend_function(function TSRMLS_CC); -} - -ZEND_API void zend_u_function_dtor(zend_function *function) -{ - TSRMLS_FETCH(); - - destroy_zend_function(function TSRMLS_CC); - if (function->type == ZEND_INTERNAL_FUNCTION) { - if (function->common.function_name.v) { - free(function->common.function_name.v); - } - if (function->common.arg_info) { - int n = function->common.num_args; - - while (n > 0) { - --n; - if (function->common.arg_info[n].name.v) { - free(function->common.arg_info[n].name.v); - } - if (function->common.arg_info[n].class_name.v) { - free(function->common.arg_info[n].class_name.v); - } - } - free(function->common.arg_info); - } - } -} - -static void zend_cleanup_op_array_data(zend_op_array *op_array) -{ - if (op_array->static_variables) { - zend_hash_clean(op_array->static_variables); - } -} - -ZEND_API int zend_cleanup_function_data(zend_function *function TSRMLS_DC) -{ - if (function->type == ZEND_USER_FUNCTION) { - zend_cleanup_op_array_data((zend_op_array *) function); - return ZEND_HASH_APPLY_KEEP; - } else { - return ZEND_HASH_APPLY_STOP; - } -} - -ZEND_API int zend_cleanup_function_data_full(zend_function *function TSRMLS_DC) -{ - if (function->type == ZEND_USER_FUNCTION) { - zend_cleanup_op_array_data((zend_op_array *) function); - } - return 0; -} - -ZEND_API int zend_cleanup_class_data(zend_class_entry **pce TSRMLS_DC) -{ - if ((*pce)->type == ZEND_USER_CLASS) { - /* Clean all parts that can contain run-time data */ - /* Note that only run-time accessed data need to be cleaned up, pre-defined data can - not contain objects and thus are not probelmatic */ - zend_hash_apply(&(*pce)->function_table, (apply_func_t) zend_cleanup_function_data_full TSRMLS_CC); - (*pce)->static_members = NULL; - } else if (CE_STATIC_MEMBERS(*pce)) { - zend_hash_destroy(CE_STATIC_MEMBERS(*pce)); - FREE_HASHTABLE(CE_STATIC_MEMBERS(*pce)); -#ifdef ZTS - CG(static_members)[(long)((*pce)->static_members)] = NULL; -#else - (*pce)->static_members = NULL; -#endif - } - return 0; -} - -ZEND_API void destroy_zend_class(zend_class_entry **pce) -{ - zend_class_entry *ce = *pce; - - if (--ce->refcount > 0) { - return; - } - switch (ce->type) { - case ZEND_USER_CLASS: - zend_hash_destroy(&ce->default_properties); - zend_hash_destroy(&ce->properties_info); - zend_hash_destroy(&ce->default_static_members); - efree(ce->name.v); - zend_hash_destroy(&ce->function_table); - zend_hash_destroy(&ce->constants_table); - if (ce->num_interfaces > 0 && ce->interfaces) { - efree(ce->interfaces); - } - if (ce->doc_comment.v) { - efree(ce->doc_comment.v); - } - efree(ce); - break; - case ZEND_INTERNAL_CLASS: - zend_hash_destroy(&ce->default_properties); - zend_hash_destroy(&ce->properties_info); - zend_hash_destroy(&ce->default_static_members); - free(ce->name.v); - zend_hash_destroy(&ce->function_table); - zend_hash_destroy(&ce->constants_table); - if (ce->num_interfaces > 0) { - free(ce->interfaces); - } - if (ce->doc_comment.v) { - free(ce->doc_comment.v); - } - free(ce); - break; - } -} - -void zend_class_add_ref(zend_class_entry **ce) -{ - (*ce)->refcount++; -} - -ZEND_API void destroy_op_array(zend_op_array *op_array TSRMLS_DC) -{ - zend_op *opline = op_array->opcodes; - zend_op *end = op_array->opcodes+op_array->last; - zend_uint i; - - if (op_array->static_variables) { - zend_hash_destroy(op_array->static_variables); - FREE_HASHTABLE(op_array->static_variables); - } - - if (--(*op_array->refcount)>0) { - return; - } - - efree(op_array->refcount); - - if (op_array->vars) { - i = op_array->last_var; - while (i > 0) { - i--; - efree(op_array->vars[i].name.v); - } - efree(op_array->vars); - } - - while (oplineop1.op_type==IS_CONST) { -#if DEBUG_ZEND>2 - printf("Reducing refcount for %x 1=>0 (destroying)\n", &opline->op1.u.constant); -#endif - zval_dtor(&opline->op1.u.constant); - } - if (opline->op2.op_type==IS_CONST) { -#if DEBUG_ZEND>2 - printf("Reducing refcount for %x 1=>0 (destroying)\n", &opline->op2.u.constant); -#endif - zval_dtor(&opline->op2.u.constant); - } - opline++; - } - efree(op_array->opcodes); - - if (op_array->function_name.v) { - efree(op_array->function_name.v); - } - if (op_array->doc_comment.v) { - efree(op_array->doc_comment.v); - } - if (op_array->brk_cont_array) { - efree(op_array->brk_cont_array); - } - if (op_array->try_catch_array) { - efree(op_array->try_catch_array); - } - if (op_array->done_pass_two) { - zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_op_array_dtor_handler, op_array TSRMLS_CC); - } - if (op_array->arg_info) { - for (i=0; inum_args; i++) { - efree(op_array->arg_info[i].name.v); - if (op_array->arg_info[i].class_name.v) { - efree(op_array->arg_info[i].class_name.v); - } - } - efree(op_array->arg_info); - } -} - -void init_op(zend_op *op TSRMLS_DC) -{ - memset(op, 0, sizeof(zend_op)); - op->lineno = CG(zend_lineno); - SET_UNUSED(op->result); -} - -zend_op *get_next_op(zend_op_array *op_array TSRMLS_DC) -{ - zend_uint next_op_num = op_array->last++; - zend_op *next_op; - - if (next_op_num >= op_array->size) { - if (op_array->fn_flags & ZEND_ACC_INTERACTIVE) { - /* we messed up */ - zend_printf("Ran out of opcode space!\n" - "You should probably consider writing this huge script into a file!\n"); - zend_bailout(); - } - op_array->size *= 4; - op_array_alloc_ops(op_array); - } - - next_op = &(op_array->opcodes[next_op_num]); - - init_op(next_op TSRMLS_CC); - - return next_op; -} - -int get_next_op_number(zend_op_array *op_array) -{ - return op_array->last; -} - -zend_brk_cont_element *get_next_brk_cont_element(zend_op_array *op_array) -{ - op_array->last_brk_cont++; - op_array->brk_cont_array = erealloc(op_array->brk_cont_array, sizeof(zend_brk_cont_element)*op_array->last_brk_cont); - return &op_array->brk_cont_array[op_array->last_brk_cont-1]; -} - -static void zend_update_extended_info(zend_op_array *op_array TSRMLS_DC) -{ - zend_op *opline = op_array->opcodes, *end=opline+op_array->last; - - while (oplineopcode == ZEND_EXT_STMT) { - if (opline+1opcode == ZEND_EXT_STMT) { - opline->opcode = ZEND_NOP; - opline++; - continue; - } - if (opline+1lineno = (opline+1)->lineno; - } - } else { - opline->opcode = ZEND_NOP; - } - } - opline++; - } -} - -static void zend_extension_op_array_handler(zend_extension *extension, zend_op_array *op_array TSRMLS_DC) -{ - if (extension->op_array_handler) { - extension->op_array_handler(op_array); - } -} - -int pass_two(zend_op_array *op_array TSRMLS_DC) -{ - zend_op *opline, *end; - - if (op_array->type!=ZEND_USER_FUNCTION && op_array->type!=ZEND_EVAL_CODE) { - return 0; - } - if (CG(extended_info)) { - zend_update_extended_info(op_array TSRMLS_CC); - } - if (CG(handle_op_arrays)) { - zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_op_array_handler, op_array TSRMLS_CC); - } - - if (!(op_array->fn_flags & ZEND_ACC_INTERACTIVE) && op_array->size != op_array->last) { - op_array->opcodes = (zend_op *) erealloc(op_array->opcodes, sizeof(zend_op)*op_array->last); - op_array->size = op_array->last; - } - - opline = op_array->opcodes; - end = opline + op_array->last; - while (opline < end) { - if (opline->op1.op_type == IS_CONST) { - opline->op1.u.constant.is_ref = 1; - opline->op1.u.constant.refcount = 2; /* Make sure is_ref won't be reset */ - } - if (opline->op2.op_type == IS_CONST) { - opline->op2.u.constant.is_ref = 1; - opline->op2.u.constant.refcount = 2; - } - switch (opline->opcode) { - case ZEND_GOTO: - if (Z_TYPE(opline->op2.u.constant) != IS_LONG) { - zend_resolve_goto_label(op_array, opline, 1 TSRMLS_CC); - } - /* break omitted intentionally */ - case ZEND_JMP: - opline->op1.u.jmp_addr = &op_array->opcodes[opline->op1.u.opline_num]; - break; - case ZEND_JMPZ: - case ZEND_JMPNZ: - case ZEND_JMPZ_EX: - case ZEND_JMPNZ_EX: - case ZEND_JMP_SET: - opline->op2.u.jmp_addr = &op_array->opcodes[opline->op2.u.opline_num]; - break; - } - ZEND_VM_SET_OPCODE_HANDLER(opline); - opline++; - } - - op_array->done_pass_two = 1; - return 0; -} - -int print_class(zend_class_entry *class_entry TSRMLS_DC) -{ - char *tmp; - - zend_spprintf(&tmp, 0, "Class %v:\n", class_entry->name); - printf("%s", tmp); - efree(tmp); - zend_hash_apply(&class_entry->function_table, (apply_func_t) pass_two TSRMLS_CC); - zend_spprintf(&tmp, 0, "End of class %v.\n\n", class_entry->name); - printf("%s", tmp); - efree(tmp); - return 0; -} - -ZEND_API unary_op_type get_unary_op(int opcode) -{ - switch (opcode) { - case ZEND_BW_NOT: - return (unary_op_type) bitwise_not_function; - break; - case ZEND_BOOL_NOT: - return (unary_op_type) boolean_not_function; - break; - default: - return (unary_op_type) NULL; - break; - } -} - -ZEND_API void *get_binary_op(int opcode) -{ - switch (opcode) { - case ZEND_ADD: - case ZEND_ASSIGN_ADD: - return (void *) add_function; - break; - case ZEND_SUB: - case ZEND_ASSIGN_SUB: - return (void *) sub_function; - break; - case ZEND_MUL: - case ZEND_ASSIGN_MUL: - return (void *) mul_function; - break; - case ZEND_DIV: - case ZEND_ASSIGN_DIV: - return (void *) div_function; - break; - case ZEND_MOD: - case ZEND_ASSIGN_MOD: - return (void *) mod_function; - break; - case ZEND_SL: - case ZEND_ASSIGN_SL: - return (void *) shift_left_function; - break; - case ZEND_SR: - case ZEND_ASSIGN_SR: - return (void *) shift_right_function; - break; - case ZEND_CONCAT: - case ZEND_ASSIGN_CONCAT: - return (void *) concat_function; - break; - case ZEND_IS_IDENTICAL: - return (void *) is_identical_function; - break; - case ZEND_IS_NOT_IDENTICAL: - return (void *) is_not_identical_function; - break; - case ZEND_IS_EQUAL: - return (void *) is_equal_function; - break; - case ZEND_IS_NOT_EQUAL: - return (void *) is_not_equal_function; - break; - case ZEND_IS_SMALLER: - return (void *) is_smaller_function; - break; - case ZEND_IS_SMALLER_OR_EQUAL: - return (void *) is_smaller_or_equal_function; - break; - case ZEND_BW_OR: - case ZEND_ASSIGN_BW_OR: - return (void *) bitwise_or_function; - break; - case ZEND_BW_AND: - case ZEND_ASSIGN_BW_AND: - return (void *) bitwise_and_function; - break; - case ZEND_BW_XOR: - case ZEND_ASSIGN_BW_XOR: - return (void *) bitwise_xor_function; - break; - default: - return (void *) NULL; - break; - } -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c deleted file mode 100644 index 58bf8f6ebbb86..0000000000000 --- a/Zend/zend_operators.c +++ /dev/null @@ -1,2773 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#include - -#include "zend.h" -#include "zend_operators.h" -#include "zend_variables.h" -#include "zend_globals.h" -#include "zend_list.h" -#include "zend_API.h" -#include "zend_multiply.h" -#include "zend_strtod.h" -#include "zend_exceptions.h" - -#include "unicode/uchar.h" -#include "unicode/ucol.h" - -#define LONG_SIGN_MASK (1L << (8*sizeof(long)-1)) - -#if ZEND_USE_TOLOWER_L -#include -static _locale_t current_locale = NULL; -/* this is true global! may lead to strange effects on ZTS, but so may setlocale() */ -#define zend_tolower(c) _tolower_l(c, current_locale) -#else -#define zend_tolower(c) tolower(c) -#endif - -ZEND_API int zend_atoi(const char *str, int str_len) -{ - int retval; - - if (!str_len) { - str_len = strlen(str); - } - retval = strtol(str, NULL, 0); - if (str_len>0) { - switch (str[str_len-1]) { - case 'g': - case 'G': - retval *= 1024; - /* break intentionally missing */ - case 'm': - case 'M': - retval *= 1024; - /* break intentionally missing */ - case 'k': - case 'K': - retval *= 1024; - break; - } - } - return retval; -} - - -ZEND_API double zend_string_to_double(const char *number, zend_uint length) -{ - double divisor = 10.0; - double result = 0.0; - double exponent; - const char *end = number+length; - const char *digit = number; - - if (!length) { - return result; - } - - while (digit < end) { - if ((*digit <= '9' && *digit >= '0')) { - result *= 10; - result += *digit - '0'; - } else if (*digit == '.') { - digit++; - break; - } else if (toupper(*digit) == 'E') { - exponent = (double) atoi(digit+1); - result *= pow(10.0, exponent); - return result; - } else { - return result; - } - digit++; - } - - while (digit < end) { - if ((*digit <= '9' && *digit >= '0')) { - result += (*digit - '0') / divisor; - divisor *= 10; - } else if (toupper(*digit) == 'E') { - exponent = (double) atoi(digit+1); - result *= pow(10.0, exponent); - return result; - } else { - return result; - } - digit++; - } - return result; -} - - -ZEND_API int convert_scalar_to_number(zval *op TSRMLS_DC) -{ - switch (Z_TYPE_P(op)) { - case IS_STRING: - { - char *strval; - - strval = Z_STRVAL_P(op); - switch ((Z_TYPE_P(op)=is_numeric_string(strval, Z_STRLEN_P(op), &Z_LVAL_P(op), &Z_DVAL_P(op), 1))) { - case IS_DOUBLE: - case IS_LONG: - break; - default: - Z_LVAL_P(op) = strtol(Z_STRVAL_P(op), NULL, 10); - Z_TYPE_P(op) = IS_LONG; - break; - } - STR_FREE(strval); - break; - } - case IS_UNICODE: - { - UChar *strval; - - strval = Z_USTRVAL_P(op); - switch ((Z_TYPE_P(op)=is_numeric_unicode(strval, Z_USTRLEN_P(op), &Z_LVAL_P(op), &Z_DVAL_P(op), 1))) { - case IS_DOUBLE: - case IS_LONG: - break; - default: - Z_LVAL_P(op) = zend_u_strtol(Z_USTRVAL_P(op), NULL, 10); - Z_TYPE_P(op) = IS_LONG; - break; - } - USTR_FREE(strval); - break; - } - break; - case IS_BOOL: - Z_TYPE_P(op) = IS_LONG; - break; - case IS_RESOURCE: - zend_list_delete(Z_LVAL_P(op)); - Z_TYPE_P(op) = IS_LONG; - break; - case IS_OBJECT: - convert_to_long_base(op, 10); - break; - case IS_NULL: - Z_TYPE_P(op) = IS_LONG; - Z_LVAL_P(op) = 0; - break; - } - - return SUCCESS; -} - -#define zendi_convert_scalar_to_number(op, holder, result) \ - if (op==result) { \ - if (Z_TYPE_P(op) != IS_LONG) { \ - convert_scalar_to_number(op TSRMLS_CC); \ - } \ - } else { \ - switch (Z_TYPE_P(op)) { \ - case IS_STRING: \ - { \ - switch ((Z_TYPE(holder)=is_numeric_string(Z_STRVAL_P(op), Z_STRLEN_P(op), &Z_LVAL(holder), &Z_DVAL(holder), 1))) { \ - case IS_DOUBLE: \ - case IS_LONG: \ - break; \ - default: \ - Z_LVAL(holder) = strtol(Z_STRVAL_P(op), NULL, 10); \ - Z_TYPE(holder) = IS_LONG; \ - break; \ - } \ - (op) = &(holder); \ - break; \ - } \ - case IS_UNICODE: \ - { \ - switch ((Z_TYPE(holder)=is_numeric_unicode(Z_USTRVAL_P(op), Z_USTRLEN_P(op), &Z_LVAL(holder), &Z_DVAL(holder), 1))) { \ - case IS_DOUBLE: \ - case IS_LONG: \ - break; \ - default: \ - Z_LVAL(holder) = zend_u_strtol(Z_USTRVAL_P(op), NULL, 10); \ - Z_TYPE(holder) = IS_LONG; \ - break; \ - } \ - (op) = &(holder); \ - break; \ - } \ - case IS_BOOL: \ - case IS_RESOURCE: \ - Z_LVAL(holder) = Z_LVAL_P(op); \ - Z_TYPE(holder) = IS_LONG; \ - (op) = &(holder); \ - break; \ - case IS_NULL: \ - Z_LVAL(holder) = 0; \ - Z_TYPE(holder) = IS_LONG; \ - (op) = &(holder); \ - break; \ - case IS_OBJECT: \ - (holder) = (*(op)); \ - zval_copy_ctor(&(holder)); \ - convert_to_long_base(&(holder), 10); \ - if (Z_TYPE(holder) == IS_LONG) { \ - (op) = &(holder); \ - } \ - break; \ - } \ - } - -#define DVAL_TO_LVAL(d, l) \ - if ((d) > LONG_MAX) { \ - (l) = (unsigned long) (d); \ - } else { \ - (l) = (long) (d); \ - } - - -#define zendi_convert_to_long(op, holder, result) \ - if (op == result) { \ - convert_to_long(op); \ - } else if (Z_TYPE_P(op) != IS_LONG) { \ - switch (Z_TYPE_P(op)) { \ - case IS_NULL: \ - Z_LVAL(holder) = 0; \ - break; \ - case IS_DOUBLE: \ - DVAL_TO_LVAL(Z_DVAL_P(op), Z_LVAL(holder)); \ - break; \ - case IS_STRING: \ - Z_LVAL(holder) = strtol(Z_STRVAL_P(op), NULL, 10); \ - break; \ - case IS_UNICODE: \ - Z_LVAL(holder) = zend_u_strtol(Z_USTRVAL_P(op), NULL, 10); \ - break; \ - case IS_ARRAY: \ - Z_LVAL(holder) = (zend_hash_num_elements(Z_ARRVAL_P(op))?1:0); \ - break; \ - case IS_OBJECT: \ - (holder) = (*(op)); \ - zval_copy_ctor(&(holder)); \ - convert_to_long_base(&(holder), 10); \ - break; \ - case IS_BOOL: \ - case IS_RESOURCE: \ - Z_LVAL(holder) = Z_LVAL_P(op); \ - break; \ - default: \ - zend_error(E_WARNING, "Cannot convert to ordinal value"); \ - Z_LVAL(holder) = 0; \ - break; \ - } \ - Z_TYPE(holder) = IS_LONG; \ - (op) = &(holder); \ - } - - -#define zendi_convert_to_boolean(op, holder, result) \ - if (op==result) { \ - convert_to_boolean(op); \ - } else if (Z_TYPE_P(op) != IS_BOOL) { \ - switch (Z_TYPE_P(op)) { \ - case IS_NULL: \ - Z_LVAL(holder) = 0; \ - break; \ - case IS_RESOURCE: \ - case IS_LONG: \ - Z_LVAL(holder) = (Z_LVAL_P(op) ? 1 : 0); \ - break; \ - case IS_DOUBLE: \ - Z_LVAL(holder) = (Z_DVAL_P(op) ? 1 : 0); \ - break; \ - case IS_STRING: \ - if (Z_STRLEN_P(op) == 0 \ - || (Z_STRLEN_P(op)==1 && Z_STRVAL_P(op)[0]=='0')) { \ - Z_LVAL(holder) = 0; \ - } else { \ - Z_LVAL(holder) = 1; \ - } \ - break; \ - case IS_UNICODE: \ - if (Z_USTRLEN_P(op) == 0 \ - || (Z_USTRLEN_P(op)==1 && \ - (Z_USTRVAL_P(op)[0]=='0'))) { \ - Z_LVAL(holder) = 0; \ - } else { \ - Z_LVAL(holder) = 1; \ - } \ - break; \ - case IS_ARRAY: \ - Z_LVAL(holder) = (zend_hash_num_elements(Z_ARRVAL_P(op))?1:0); \ - break; \ - case IS_OBJECT: \ - (holder) = (*(op)); \ - zval_copy_ctor(&(holder)); \ - convert_to_boolean(&(holder)); \ - break; \ - default: \ - Z_LVAL(holder) = 0; \ - break; \ - } \ - Z_TYPE(holder) = IS_BOOL; \ - (op) = &(holder); \ - } - - -#define convert_object_to_type(op, ctype, conv_func) \ - if (Z_OBJ_HT_P(op)->cast_object) { \ - zval dst; \ - if (Z_OBJ_HT_P(op)->cast_object(op, &dst, ctype, NULL TSRMLS_CC) == FAILURE) { \ - zend_error(E_RECOVERABLE_ERROR, \ - "Object of class %v could not be converted to %s", Z_OBJCE_P(op)->name, \ - zend_get_type_by_const(ctype)); \ - } else { \ - zval_dtor(op); \ - Z_TYPE_P(op) = ctype; \ - op->value = dst.value; \ - } \ - } else { \ - if(Z_OBJ_HT_P(op)->get) { \ - zval *newop = Z_OBJ_HT_P(op)->get(op TSRMLS_CC); \ - if(Z_TYPE_P(newop) != IS_OBJECT) { \ - /* for safety - avoid loop */ \ - zval_dtor(op); \ - *op = *newop; \ - FREE_ZVAL(newop); \ - conv_func(op); \ - } \ - } \ - } - - -ZEND_API int convert_to_long(zval *op) -{ - return convert_to_long_base(op, 10); -} - - -ZEND_API int convert_to_long_base(zval *op, int base) -{ - long tmp; - - switch (Z_TYPE_P(op)) { - case IS_NULL: - Z_LVAL_P(op) = 0; - break; - case IS_RESOURCE: { - TSRMLS_FETCH(); - - zend_list_delete(Z_LVAL_P(op)); - } - /* break missing intentionally */ - case IS_BOOL: - case IS_LONG: - break; - case IS_DOUBLE: - DVAL_TO_LVAL(Z_DVAL_P(op), Z_LVAL_P(op)); - break; - case IS_STRING: - { - char *strval = Z_STRVAL_P(op); - Z_LVAL_P(op) = strtol(strval, NULL, base); - STR_FREE(strval); - } - break; - case IS_UNICODE: - { - UChar *strval = Z_USTRVAL_P(op); - Z_LVAL_P(op) = zend_u_strtol(strval, NULL, base); - USTR_FREE(strval); - } - break; - case IS_ARRAY: - tmp = (zend_hash_num_elements(Z_ARRVAL_P(op))?1:0); - zval_dtor(op); - Z_LVAL_P(op) = tmp; - break; - case IS_OBJECT: - { - int retval = 1; - TSRMLS_FETCH(); - - convert_object_to_type(op, IS_LONG, convert_to_long); - - if (Z_TYPE_P(op) == IS_LONG) { - return SUCCESS; - } - - zend_error(E_NOTICE, "Object of class %v could not be converted to int", Z_OBJCE_P(op)->name); - - zval_dtor(op); - ZVAL_LONG(op, retval); - return FAILURE; - } - default: - zend_error(E_WARNING, "Cannot convert to ordinal value"); - zval_dtor(op); - Z_LVAL_P(op) = 0; - return FAILURE; - } - - Z_TYPE_P(op) = IS_LONG; - return SUCCESS; -} - - -ZEND_API int convert_to_double(zval *op) -{ - double tmp; - - switch (Z_TYPE_P(op)) { - case IS_NULL: - Z_DVAL_P(op) = 0.0; - break; - case IS_RESOURCE: { - TSRMLS_FETCH(); - - zend_list_delete(Z_LVAL_P(op)); - } - /* break missing intentionally */ - case IS_BOOL: - case IS_LONG: - Z_DVAL_P(op) = (double) Z_LVAL_P(op); - break; - case IS_DOUBLE: - break; - case IS_STRING: - { - char *strval = Z_STRVAL_P(op); - - Z_DVAL_P(op) = zend_strtod(strval, NULL); - STR_FREE(strval); - } - break; - case IS_UNICODE: - { - UChar *strval = Z_USTRVAL_P(op); - - Z_DVAL_P(op) = zend_u_strtod(strval, NULL); - USTR_FREE(strval); - } - break; - case IS_ARRAY: - tmp = (zend_hash_num_elements(Z_ARRVAL_P(op))?1:0); - zval_dtor(op); - Z_DVAL_P(op) = tmp; - break; - case IS_OBJECT: - { - double retval = 1.0; - TSRMLS_FETCH(); - - convert_object_to_type(op, IS_DOUBLE, convert_to_double); - - if (Z_TYPE_P(op) == IS_DOUBLE) { - return SUCCESS; - } - - zend_error(E_NOTICE, "Object of class %v could not be converted to double", Z_OBJCE_P(op)->name); - - zval_dtor(op); - ZVAL_DOUBLE(op, retval); - return FAILURE; - } - default: - zend_error(E_WARNING, "Cannot convert to real value (type=%d)", Z_TYPE_P(op)); - zval_dtor(op); - Z_DVAL_P(op) = 0; - return FAILURE; - } - - Z_TYPE_P(op) = IS_DOUBLE; - return SUCCESS; -} - - -ZEND_API int convert_to_null(zval *op) -{ - if (Z_TYPE_P(op) == IS_OBJECT) { - if (Z_OBJ_HT_P(op)->cast_object) { - zval *org; - TSRMLS_FETCH(); - - ALLOC_ZVAL(org); - *org = *op; - if (Z_OBJ_HT_P(op)->cast_object(org, op, IS_NULL, NULL TSRMLS_CC) == SUCCESS) { - zval_dtor(org); - return SUCCESS; - } - *op = *org; - FREE_ZVAL(org); - } - } - - zval_dtor(op); - Z_TYPE_P(op) = IS_NULL; - return SUCCESS; -} - - -ZEND_API int convert_to_boolean(zval *op) -{ - int tmp; - - switch (Z_TYPE_P(op)) { - case IS_BOOL: - break; - case IS_NULL: - Z_LVAL_P(op) = 0; - break; - case IS_RESOURCE: { - TSRMLS_FETCH(); - - zend_list_delete(Z_LVAL_P(op)); - } - /* break missing intentionally */ - case IS_LONG: - Z_LVAL_P(op) = (Z_LVAL_P(op) ? 1 : 0); - break; - case IS_DOUBLE: - Z_LVAL_P(op) = (Z_DVAL_P(op) ? 1 : 0); - break; - case IS_STRING: - { - char *strval = Z_STRVAL_P(op); - - if (Z_STRLEN_P(op) == 0 - || (Z_STRLEN_P(op)==1 && Z_STRVAL_P(op)[0]=='0')) { - Z_LVAL_P(op) = 0; - } else { - Z_LVAL_P(op) = 1; - } - STR_FREE(strval); - } - break; - case IS_UNICODE: - { - UChar *strval = Z_USTRVAL_P(op); - - if (Z_USTRVAL_P(op) == 0 - || (Z_USTRLEN_P(op)==1 && - (Z_USTRVAL_P(op)[0]=='0'))) { - Z_LVAL_P(op) = 0; - } else { - Z_LVAL_P(op) = 1; - } - USTR_FREE(strval); - } - break; - case IS_ARRAY: - tmp = (zend_hash_num_elements(Z_ARRVAL_P(op))?1:0); - zval_dtor(op); - Z_LVAL_P(op) = tmp; - break; - case IS_OBJECT: - { - zend_bool retval = 1; - TSRMLS_FETCH(); - - convert_object_to_type(op, IS_BOOL, convert_to_boolean); - - if (Z_TYPE_P(op) == IS_BOOL) { - return SUCCESS; - } - - zval_dtor(op); - ZVAL_BOOL(op, retval); - return FAILURE; - } - default: - zval_dtor(op); - Z_LVAL_P(op) = 0; - break; - } - - Z_TYPE_P(op) = IS_BOOL; - return SUCCESS; -} - -#define NUM_BUF_SIZE 512 - -/* rewrite of ap_php_conv_10 for UChar support */ -static UChar* zend_u_format_long(long lnum, UChar *result_end, int *result_len) -{ - UChar *p = result_end; - unsigned long magnitude; - - *--p = 0; - - if (lnum < 0) { - long t = lnum + 1; - magnitude = ((unsigned long) - t) + 1; - } else { - magnitude = (unsigned long) lnum; - } - - do { - unsigned long new_magnitude = magnitude / 10; - - *--p = (UChar)(magnitude - new_magnitude * 10 + 0x30 /*'0'*/); - magnitude = new_magnitude; - } - while (magnitude); - - if (lnum < 0) { - *--p = (UChar) 0x2d /*'-'*/; - } - - *result_len = result_end - p - 1; - return p; -} - -#define NDIG 320 - -/* rewrite of ap_php_cvt for UChar support */ -static UChar* zend_u_format_double(double arg, int ndigits, int *decpt, int *sign, int eflag, UChar *buf) -{ - register int r2; - int mvl; - double fi, fj; - register UChar *p, *p1; - - if (ndigits >= NDIG - 1) - ndigits = NDIG - 2; - r2 = 0; - *sign = 0; - p = &buf[0]; - if (arg < 0) { - *sign = 1; - arg = -arg; - } - arg = modf(arg, &fi); - p1 = &buf[NDIG]; - /* - * Do integer part - */ - if (fi != 0) { - while (fi != 0) { - fj = modf(fi / 10, &fi); - if (p1 <= &buf[0]) { - mvl = NDIG - ndigits; - if (ndigits > 0) { - memmove(&buf[mvl], &buf[0], (NDIG-mvl-1) * sizeof(UChar)); - } - p1 += mvl; - } - *--p1 = (UChar) ((fj + .03) * 10) + 0x30 /*'0'*/; - r2++; - } - while (p1 < &buf[NDIG]) { - *p++ = *p1++; - } - } else if (arg > 0) { - while ((fj = arg * 10) < 1) { - if (!eflag && (r2 * -1) < ndigits) { - break; - } - arg = fj; - r2--; - } - } - p1 = &buf[ndigits]; - if (eflag == 0) - p1 += r2; - *decpt = r2; - if (p1 < &buf[0]) { - buf[0] = 0; - return (buf); - } - if (p <= p1 && p < &buf[NDIG]) { - arg = modf(arg * 10, &fj); - if ((int)fj==10) { - *p++ = (UChar) 0x31 /*'1'*/; - fj = 0; - *decpt = ++r2; - } - while (p <= p1 && p < &buf[NDIG]) { - *p++ = (UChar) fj + 0x30 /*'0'*/; - arg = modf(arg * 10, &fj); - } - } - if (p1 >= &buf[NDIG]) { - buf[NDIG - 1] = 0; - return (buf); - } - p = p1; - *p1 += 5; - while (*p1 > (UChar) 0x39 /*'9'*/) { - *p1 = (UChar) 0x30 /*'0'*/; - if (p1 > buf) - ++ * --p1; - else { - *p1 = (UChar) 0x31 /*'1'*/; - (*decpt)++; - if (eflag == 0) { - if (p > buf) - *p = (UChar) 0x30 /*'0'*/; - p++; - } - } - } - *p = 0; - return (buf); -} - -/* rewrite of ap_php_gcvt for UChar support */ -static UChar* zend_u_format_gdouble(double dnum, int ndigit, UChar *result) -{ - int sign, decpt; - register UChar *p1, *p2; - register int i; - UChar buf1[NDIG]; - static zend_bool did_string_init = FALSE; - U_STRING_DECL(u_nan, "NAN", 3); - U_STRING_DECL(u_inf, "INF", 3); - U_STRING_DECL(u_ninf, "-INF", 4); - - if (!did_string_init) { - U_STRING_INIT(u_nan, "NAN", 3); - U_STRING_INIT(u_inf, "INF", 3); - U_STRING_INIT(u_ninf, "-INF", 4); - did_string_init = TRUE; - } - - /* check for out-of-bounds numbers */ - if (zend_isnan(dnum)) { - u_memcpy(result, u_nan, 3); - result[3] = 0; - return result; - } else if (zend_isinf(dnum)) { - if (dnum > 0) { - u_memcpy(result, u_inf, 3); - result[3] = 0; - } else { - u_memcpy(result, u_ninf, 3); - result[4] = 0; - } - return result; - } - - if (ndigit >= NDIG - 1) { - ndigit = NDIG - 2; - } - - p1 = zend_u_format_double(dnum, ndigit, &decpt, &sign, 1, buf1); - p2 = result; - if (sign) - *p2++ = (UChar) 0x2d /*'-'*/; - for (i = ndigit - 1; i > 0 && p1[i] == (UChar) 0x30 /*'0'*/; i--) - ndigit--; - if ((decpt >= 0 && decpt - ndigit > 4) - || (decpt < 0 && decpt < -3)) { /* use E-style */ - decpt--; - *p2++ = *p1++; - *p2++ = (UChar) 0x2e /*'.'*/; - for (i = 1; i < ndigit; i++) - *p2++ = *p1++; - if (*(p2 - 1) == (UChar) 0x2e /*'.'*/) { - *p2++ = (UChar) 0x30 /*'0'*/; - } - *p2++ = (UChar) 0x45 /*'E'*/; - if (decpt < 0) { - decpt = -decpt; - *p2++ = (UChar) 0x2d /*'-'*/; - } else - *p2++ = (UChar) 0x2b /*'+'*/; - if (decpt / 100 > 0) - *p2++ = (UChar) (decpt / 100 + 0x30 /*'0'*/); - if (decpt / 10 > 0) - *p2++ = (UChar) ((decpt % 100) / 10 + 0x30 /*'0'*/); - *p2++ = (UChar) (decpt % 10 + 0x30 /*'0'*/); - } else { - if (decpt <= 0) { - if (*p1 != (UChar) 0x30 /*'0'*/) { - *p2++ = (UChar) 0x30 /*'0'*/; - *p2++ = (UChar) 0x2e /*'.'*/; - } - while (decpt < 0) { - decpt++; - *p2++ = (UChar) 0x30 /*'0'*/; - } - } - for (i = 1; i <= ndigit; i++) { - *p2++ = *p1++; - if (i == decpt) - *p2++ = (UChar) 0x2e /*'.'*/; - } - if (ndigit < decpt) { - while (ndigit++ < decpt) - *p2++ = (UChar) 0x30 /*'0'*/; - *p2++ = (UChar) 0x2e /*'.'*/; - } - } - if (p2[-1] == (UChar) 0x2e /*'.'*/) - p2--; - *p2 = 0; - return (result); -} - -ZEND_API int _convert_to_unicode(zval *op TSRMLS_DC ZEND_FILE_LINE_DC) -{ - return _convert_to_unicode_with_converter(op, ZEND_U_CONVERTER(UG(runtime_encoding_conv)) TSRMLS_CC ZEND_FILE_LINE_CC); -} - -ZEND_API int _convert_to_unicode_with_converter(zval *op, UConverter *conv TSRMLS_DC ZEND_FILE_LINE_DC) -{ - switch (Z_TYPE_P(op)) { - case IS_NULL: - Z_USTRVAL_P(op) = USTR_MAKE_REL(""); - Z_USTRLEN_P(op) = 0; - break; - case IS_UNICODE: - break; - case IS_STRING: - return zval_string_to_unicode_ex(op, conv TSRMLS_CC); - case IS_BOOL: - if (Z_LVAL_P(op)) { - Z_USTRVAL_P(op) = USTR_MAKE_REL("1"); - Z_USTRLEN_P(op) = 1; - } else { - Z_USTRVAL_P(op) = USTR_MAKE_REL(""); - Z_USTRLEN_P(op) = 0; - } - break; - case IS_RESOURCE: { - UChar num_buf[NUM_BUF_SIZE], *result; - int result_len, rstr_len; - long rval = Z_LVAL_P(op); - - zend_list_delete(Z_LVAL_P(op)); - result = zend_u_format_long(rval, &num_buf[NUM_BUF_SIZE], &result_len); - - rstr_len = sizeof("Resource id #")-1; - Z_USTRLEN_P(op) = rstr_len + result_len; - Z_USTRVAL_P(op) = eumalloc_rel(Z_USTRLEN_P(op) + 1); - u_charsToUChars("Resource id #", Z_USTRVAL_P(op), rstr_len); - /* result_len+1 takes care of terminating NULL */ - u_memcpy(Z_USTRVAL_P(op) + rstr_len, result, result_len+1); - break; - } - case IS_LONG: { - UChar num_buf[NUM_BUF_SIZE], *result; - int result_len; - long lval = Z_LVAL_P(op); - - result = zend_u_format_long(lval, &num_buf[NUM_BUF_SIZE], &result_len); - - Z_USTRVAL_P(op) = eustrndup(result, result_len); - Z_USTRLEN_P(op) = result_len; - break; - } - case IS_DOUBLE: { - UChar num_buf[NUM_BUF_SIZE], *result; - double dval = Z_DVAL_P(op); - - result = zend_u_format_gdouble(dval, (int) EG(precision), &num_buf[1]); - if (*result == (UChar) 0x2b /*'+'*/) { - result++; - } - Z_USTRLEN_P(op) = u_strlen(result); - Z_USTRVAL_P(op) = eustrndup(result, Z_USTRLEN_P(op)); - break; - } - case IS_ARRAY: - zend_error(E_NOTICE, "Array to string conversion"); - zval_dtor(op); - Z_USTRVAL_P(op) = USTR_MAKE_REL("Array"); - Z_USTRLEN_P(op) = sizeof("Array")-1; - Z_TYPE_P(op) = IS_UNICODE; - return FAILURE; - case IS_OBJECT: { - int retval = FAILURE; - - if (Z_OBJ_HT_P(op)->cast_object) { - zval dst; - if (Z_OBJ_HT_P(op)->cast_object(op, &dst, IS_UNICODE, conv TSRMLS_CC) == FAILURE) { - zend_error(E_RECOVERABLE_ERROR, - "Object of class %v could not be converted to %s", Z_OBJCE_P(op)->name, - zend_get_type_by_const(IS_UNICODE)); - } else { - zval_dtor(op); - Z_TYPE_P(op) = IS_UNICODE; - op->value = dst.value; - retval = SUCCESS; - } - } else { - if(Z_OBJ_HT_P(op)->get) { - zval *newop = Z_OBJ_HT_P(op)->get(op TSRMLS_CC); - if(Z_TYPE_P(newop) != IS_OBJECT) { - /* for safety - avoid loop */ - zval_dtor(op); - *op = *newop; - FREE_ZVAL(newop); - retval = convert_to_string_with_converter(op, conv); - } - } - } - - if (retval == SUCCESS && Z_TYPE_P(op) == IS_UNICODE) { - return SUCCESS; - } - - zend_error(E_NOTICE, "Object of class %v to string conversion", Z_OBJCE_P(op)->name); - zval_dtor(op); - Z_USTRVAL_P(op) = USTR_MAKE_REL("Object"); - Z_USTRLEN_P(op) = sizeof("Object")-1; - Z_TYPE_P(op) = IS_UNICODE; - return FAILURE; - } - default: - zval_dtor(op); - ZVAL_BOOL(op, 0); - return FAILURE; - } - - Z_TYPE_P(op) = IS_UNICODE; - return SUCCESS; -} - - -ZEND_API int _convert_to_string(zval *op ZEND_FILE_LINE_DC) -{ - TSRMLS_FETCH(); - return _convert_to_string_with_converter(op, ZEND_U_CONVERTER(UG(runtime_encoding_conv)) TSRMLS_CC ZEND_FILE_LINE_CC); -} - -ZEND_API int _convert_to_string_with_converter(zval *op, UConverter *conv TSRMLS_DC ZEND_FILE_LINE_DC) -{ - long lval; - double dval; - - switch (Z_TYPE_P(op)) { - case IS_NULL: - Z_STRVAL_P(op) = STR_EMPTY_ALLOC(); - Z_STRLEN_P(op) = 0; - break; - case IS_STRING: - break; - case IS_UNICODE: - return zval_unicode_to_string_ex(op, conv TSRMLS_CC); - case IS_BOOL: - if (Z_LVAL_P(op)) { - Z_STRVAL_P(op) = estrndup_rel("1", 1); - Z_STRLEN_P(op) = 1; - } else { - Z_STRVAL_P(op) = STR_EMPTY_ALLOC(); - Z_STRLEN_P(op) = 0; - } - break; - case IS_RESOURCE: { - long tmp = Z_LVAL_P(op); - TSRMLS_FETCH(); - - zend_list_delete(Z_LVAL_P(op)); - op->value.str.len = zend_spprintf(&op->value.str.val, 0, "Resource id #%ld", tmp); - break; - } - case IS_LONG: - lval = Z_LVAL_P(op); - - op->value.str.len = zend_spprintf(&op->value.str.val, 0, "%ld", lval); - break; - case IS_DOUBLE: { - TSRMLS_FETCH(); - dval = Z_DVAL_P(op); - op->value.str.len = zend_spprintf(&op->value.str.val, 0, "%.*G", (int) EG(precision), dval); - /* %G already handles removing trailing zeros from the fractional part, yay */ - break; - } - case IS_ARRAY: - zend_error(E_NOTICE, "Array to string conversion"); - zval_dtor(op); - Z_STRVAL_P(op) = estrndup_rel("Array", sizeof("Array")-1); - Z_STRLEN_P(op) = sizeof("Array")-1; - Z_TYPE_P(op) = IS_STRING; - return FAILURE; - case IS_OBJECT: { - int retval = FAILURE; - TSRMLS_FETCH(); - - if (Z_OBJ_HT_P(op)->cast_object) { - zval dst; - if (Z_OBJ_HT_P(op)->cast_object(op, &dst, IS_STRING, conv TSRMLS_CC) == FAILURE) { - zend_error(E_RECOVERABLE_ERROR, - "Object of class %v could not be converted to %s", Z_OBJCE_P(op)->name, - zend_get_type_by_const(IS_STRING)); - } else { - zval_dtor(op); - Z_TYPE_P(op) = IS_STRING; - op->value = dst.value; - retval = SUCCESS; - } - } else { - if(Z_OBJ_HT_P(op)->get) { - zval *newop = Z_OBJ_HT_P(op)->get(op TSRMLS_CC); - if(Z_TYPE_P(newop) != IS_OBJECT) { - /* for safety - avoid loop */ - zval_dtor(op); - *op = *newop; - FREE_ZVAL(newop); - retval = convert_to_string_with_converter(op, conv); - } - } - } - - if (retval == SUCCESS && Z_TYPE_P(op) == IS_STRING) { - return SUCCESS; - } - - zend_error(E_NOTICE, "Object of class %v to string conversion", Z_OBJCE_P(op)->name); - zval_dtor(op); - Z_STRVAL_P(op) = estrndup_rel("Object", sizeof("Object")-1); - Z_STRLEN_P(op) = sizeof("Object")-1; - Z_TYPE_P(op) = IS_STRING; - return FAILURE; - } - default: - zval_dtor(op); - ZVAL_BOOL(op, 0); - return FAILURE; - } - - Z_TYPE_P(op) = IS_STRING; - return SUCCESS; -} - - -static int convert_scalar_to_array(zval *op, int type TSRMLS_DC) -{ - zval *entry; - - ALLOC_ZVAL(entry); - *entry = *op; - INIT_PZVAL(entry); - - switch (type) { - case IS_ARRAY: - ALLOC_HASHTABLE(Z_ARRVAL_P(op)); - zend_u_hash_init(Z_ARRVAL_P(op), 0, NULL, ZVAL_PTR_DTOR, 0, 0); - zend_hash_index_update(Z_ARRVAL_P(op), 0, (void *) &entry, sizeof(zval *), NULL); - Z_TYPE_P(op) = IS_ARRAY; - break; - case IS_OBJECT: - { - /* OBJECTS_OPTIMIZE */ - TSRMLS_FETCH(); - - object_init(op); - zend_hash_update(Z_OBJPROP_P(op), "scalar", sizeof("scalar"), (void *) &entry, sizeof(zval *), NULL); - } - break; - } - - return SUCCESS; -} - - -ZEND_API int convert_to_array(zval *op) -{ - TSRMLS_FETCH(); - - switch (Z_TYPE_P(op)) { - case IS_ARRAY: - break; -/* OBJECTS_OPTIMIZE */ - case IS_OBJECT: - { - zval *tmp; - HashTable *ht; - int retval = FAILURE; - - ALLOC_HASHTABLE(ht); - zend_u_hash_init(ht, 0, NULL, ZVAL_PTR_DTOR, 0, 0); - if (Z_OBJ_HT_P(op)->get_properties) { - HashTable *obj_ht = Z_OBJ_HT_P(op)->get_properties(op TSRMLS_CC); - if (obj_ht) { - zend_hash_copy(ht, obj_ht, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); - retval = SUCCESS; - } - } else { - convert_object_to_type(op, IS_ARRAY, convert_to_array); - - if (Z_TYPE_P(op) == IS_ARRAY) { - zend_hash_destroy(ht); - FREE_HASHTABLE(ht); - return SUCCESS; - } - } - zval_dtor(op); - Z_TYPE_P(op) = IS_ARRAY; - Z_ARRVAL_P(op) = ht; - return retval; - } - break; - case IS_NULL: - ALLOC_HASHTABLE(Z_ARRVAL_P(op)); - zend_u_hash_init(Z_ARRVAL_P(op), 0, NULL, ZVAL_PTR_DTOR, 0, 0); - Z_TYPE_P(op) = IS_ARRAY; - break; - default: - return convert_scalar_to_array(op, IS_ARRAY TSRMLS_CC); - } - - return SUCCESS; -} - - -ZEND_API int convert_to_object(zval *op) -{ - TSRMLS_FETCH(); - switch (Z_TYPE_P(op)) { - case IS_ARRAY: - { - object_and_properties_init(op, zend_standard_class_def, Z_ARRVAL_P(op)); - break; - } - case IS_OBJECT: - break; - case IS_NULL: - { - /* OBJECTS_OPTIMIZE */ - TSRMLS_FETCH(); - - object_init(op); - break; - } - default: - return convert_scalar_to_array(op, IS_OBJECT TSRMLS_CC); - } - - return SUCCESS; -} - -ZEND_API void multi_convert_to_long_ex(int argc, ...) -{ - zval **arg; - va_list ap; - - va_start(ap, argc); - - while (argc--) { - arg = va_arg(ap, zval **); - convert_to_long_ex(arg); - } - - va_end(ap); -} - -ZEND_API void multi_convert_to_double_ex(int argc, ...) -{ - zval **arg; - va_list ap; - - va_start(ap, argc); - - while (argc--) { - arg = va_arg(ap, zval **); - convert_to_double_ex(arg); - } - - va_end(ap); -} - -ZEND_API void multi_convert_to_string_ex(int argc, ...) -{ - zval **arg; - va_list ap; - - va_start(ap, argc); - - while (argc--) { - arg = va_arg(ap, zval **); - convert_to_string_ex(arg); - } - - va_end(ap); -} - -ZEND_API int add_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) -{ - zval op1_copy, op2_copy; - - if (Z_TYPE_P(op1) == IS_ARRAY && Z_TYPE_P(op2) == IS_ARRAY) { - zval *tmp; - - if ((result == op1) && (result == op2)) { - /* $a += $a */ - return SUCCESS; - } - if (result != op1) { - *result = *op1; - zval_copy_ctor(result); - } - zend_hash_merge(Z_ARRVAL_P(result), Z_ARRVAL_P(op2), (void (*)(void *pData)) zval_add_ref, (void *) &tmp, sizeof(zval *), 0); - return SUCCESS; - } - zendi_convert_scalar_to_number(op1, op1_copy, result); - zendi_convert_scalar_to_number(op2, op2_copy, result); - - - if (Z_TYPE_P(op1) == IS_LONG && Z_TYPE_P(op2) == IS_LONG) { - long lval = Z_LVAL_P(op1) + Z_LVAL_P(op2); - - /* check for overflow by comparing sign bits */ - if ( (Z_LVAL_P(op1) & LONG_SIGN_MASK) == (Z_LVAL_P(op2) & LONG_SIGN_MASK) - && (Z_LVAL_P(op1) & LONG_SIGN_MASK) != (lval & LONG_SIGN_MASK)) { - - Z_DVAL_P(result) = (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2); - Z_TYPE_P(result) = IS_DOUBLE; - } else { - Z_LVAL_P(result) = lval; - Z_TYPE_P(result) = IS_LONG; - } - return SUCCESS; - } - if ((Z_TYPE_P(op1) == IS_DOUBLE && Z_TYPE_P(op2) == IS_LONG) - || (Z_TYPE_P(op1) == IS_LONG && Z_TYPE_P(op2) == IS_DOUBLE)) { - Z_DVAL_P(result) = (Z_TYPE_P(op1) == IS_LONG ? - (((double) Z_LVAL_P(op1)) + Z_DVAL_P(op2)) : - (Z_DVAL_P(op1) + ((double) Z_LVAL_P(op2)))); - Z_TYPE_P(result) = IS_DOUBLE; - return SUCCESS; - } - if (Z_TYPE_P(op1) == IS_DOUBLE && Z_TYPE_P(op2) == IS_DOUBLE) { - Z_TYPE_P(result) = IS_DOUBLE; - Z_DVAL_P(result) = Z_DVAL_P(op1) + Z_DVAL_P(op2); - return SUCCESS; - } - zend_error(E_ERROR, "Unsupported operand types"); - return FAILURE; /* unknown datatype */ -} - - -ZEND_API int sub_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) -{ - zval op1_copy, op2_copy; - - zendi_convert_scalar_to_number(op1, op1_copy, result); - zendi_convert_scalar_to_number(op2, op2_copy, result); - - if (Z_TYPE_P(op1) == IS_LONG && Z_TYPE_P(op2) == IS_LONG) { - long lval = Z_LVAL_P(op1) - Z_LVAL_P(op2); - - /* check for overflow by comparing sign bits */ - if ( (Z_LVAL_P(op1) & LONG_SIGN_MASK) != (Z_LVAL_P(op2) & LONG_SIGN_MASK) - && (Z_LVAL_P(op1) & LONG_SIGN_MASK) != (lval & LONG_SIGN_MASK)) { - - Z_DVAL_P(result) = (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2); - Z_TYPE_P(result) = IS_DOUBLE; - } else { - Z_LVAL_P(result) = lval; - Z_TYPE_P(result) = IS_LONG; - } - return SUCCESS; - } - if ((Z_TYPE_P(op1) == IS_DOUBLE && Z_TYPE_P(op2) == IS_LONG) - || (Z_TYPE_P(op1) == IS_LONG && Z_TYPE_P(op2) == IS_DOUBLE)) { - Z_DVAL_P(result) = (Z_TYPE_P(op1) == IS_LONG ? - (((double) Z_LVAL_P(op1)) - Z_DVAL_P(op2)) : - (Z_DVAL_P(op1) - ((double) Z_LVAL_P(op2)))); - Z_TYPE_P(result) = IS_DOUBLE; - return SUCCESS; - } - if (Z_TYPE_P(op1) == IS_DOUBLE && Z_TYPE_P(op2) == IS_DOUBLE) { - Z_TYPE_P(result) = IS_DOUBLE; - Z_DVAL_P(result) = Z_DVAL_P(op1) - Z_DVAL_P(op2); - return SUCCESS; - } - zend_error(E_ERROR, "Unsupported operand types"); - return FAILURE; /* unknown datatype */ -} - - -ZEND_API int mul_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) -{ - zval op1_copy, op2_copy; - - zendi_convert_scalar_to_number(op1, op1_copy, result); - zendi_convert_scalar_to_number(op2, op2_copy, result); - - if (Z_TYPE_P(op1) == IS_LONG && Z_TYPE_P(op2) == IS_LONG) { - long overflow; - - ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result),overflow); - Z_TYPE_P(result) = overflow ? IS_DOUBLE : IS_LONG; - return SUCCESS; - } - if ((Z_TYPE_P(op1) == IS_DOUBLE && Z_TYPE_P(op2) == IS_LONG) - || (Z_TYPE_P(op1) == IS_LONG && Z_TYPE_P(op2) == IS_DOUBLE)) { - Z_DVAL_P(result) = (Z_TYPE_P(op1) == IS_LONG ? - (((double) Z_LVAL_P(op1)) * Z_DVAL_P(op2)) : - (Z_DVAL_P(op1) * ((double) Z_LVAL_P(op2)))); - Z_TYPE_P(result) = IS_DOUBLE; - return SUCCESS; - } - if (Z_TYPE_P(op1) == IS_DOUBLE && Z_TYPE_P(op2) == IS_DOUBLE) { - Z_TYPE_P(result) = IS_DOUBLE; - Z_DVAL_P(result) = Z_DVAL_P(op1) * Z_DVAL_P(op2); - return SUCCESS; - } - zend_error(E_ERROR, "Unsupported operand types"); - return FAILURE; /* unknown datatype */ -} - -ZEND_API int div_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) -{ - zval op1_copy, op2_copy; - - zendi_convert_scalar_to_number(op1, op1_copy, result); - zendi_convert_scalar_to_number(op2, op2_copy, result); - - if ((Z_TYPE_P(op2) == IS_LONG && Z_LVAL_P(op2) == 0) || (Z_TYPE_P(op2) == IS_DOUBLE && Z_DVAL_P(op2) == 0.0)) { - zend_error(E_WARNING, "Division by zero"); - ZVAL_BOOL(result, 0); - return FAILURE; /* division by zero */ - } - if (Z_TYPE_P(op1) == IS_LONG && Z_TYPE_P(op2) == IS_LONG) { - if (Z_LVAL_P(op1) % Z_LVAL_P(op2) == 0) { /* integer */ - Z_TYPE_P(result) = IS_LONG; - Z_LVAL_P(result) = Z_LVAL_P(op1) / Z_LVAL_P(op2); - } else { - Z_TYPE_P(result) = IS_DOUBLE; - Z_DVAL_P(result) = ((double) Z_LVAL_P(op1)) / Z_LVAL_P(op2); - } - return SUCCESS; - } - if ((Z_TYPE_P(op1) == IS_DOUBLE && Z_TYPE_P(op2) == IS_LONG) - || (Z_TYPE_P(op1) == IS_LONG && Z_TYPE_P(op2) == IS_DOUBLE)) { - Z_DVAL_P(result) = (Z_TYPE_P(op1) == IS_LONG ? - (((double) Z_LVAL_P(op1)) / Z_DVAL_P(op2)) : - (Z_DVAL_P(op1) / ((double) Z_LVAL_P(op2)))); - Z_TYPE_P(result) = IS_DOUBLE; - return SUCCESS; - } - if (Z_TYPE_P(op1) == IS_DOUBLE && Z_TYPE_P(op2) == IS_DOUBLE) { - Z_TYPE_P(result) = IS_DOUBLE; - Z_DVAL_P(result) = Z_DVAL_P(op1) / Z_DVAL_P(op2); - return SUCCESS; - } - zend_error(E_ERROR, "Unsupported operand types"); - return FAILURE; /* unknown datatype */ -} - - -ZEND_API int mod_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) -{ - zval op1_copy, op2_copy; - - zendi_convert_to_long(op1, op1_copy, result); - zendi_convert_to_long(op2, op2_copy, result); - - if (Z_LVAL_P(op2) == 0) { - zend_error(E_WARNING, "Division by zero"); - ZVAL_BOOL(result, 0); - return FAILURE; /* modulus by zero */ - } - - if (abs(Z_LVAL_P(op2)) == 1) { - ZVAL_LONG(result, 0); - return SUCCESS; - } - - Z_TYPE_P(result) = IS_LONG; - Z_LVAL_P(result) = Z_LVAL_P(op1) % Z_LVAL_P(op2); - return SUCCESS; -} - - - -ZEND_API int boolean_xor_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) -{ - zval op1_copy, op2_copy; - - Z_TYPE_P(result) = IS_BOOL; - - zendi_convert_to_boolean(op1, op1_copy, result); - zendi_convert_to_boolean(op2, op2_copy, result); - Z_LVAL_P(result) = Z_LVAL_P(op1) ^ Z_LVAL_P(op2); - return SUCCESS; -} - - -ZEND_API int boolean_not_function(zval *result, zval *op1 TSRMLS_DC) -{ - zval op1_copy; - - zendi_convert_to_boolean(op1, op1_copy, result); - - Z_TYPE_P(result) = IS_BOOL; - Z_LVAL_P(result) = !Z_LVAL_P(op1); - return SUCCESS; -} - - -ZEND_API int bitwise_not_function(zval *result, zval *op1 TSRMLS_DC) -{ - zval op1_copy = *op1; - - op1 = &op1_copy; - - if (Z_TYPE_P(op1) == IS_DOUBLE) { - Z_LVAL_P(op1) = (long) Z_DVAL_P(op1); - Z_TYPE_P(op1) = IS_LONG; - } - if (Z_TYPE_P(op1) == IS_LONG) { - Z_LVAL_P(result) = ~Z_LVAL_P(op1); - Z_TYPE_P(result) = IS_LONG; - return SUCCESS; - } - if (Z_TYPE_P(op1) == IS_STRING) { - int i; - - Z_TYPE_P(result) = Z_TYPE_P(op1); - Z_STRVAL_P(result) = estrndup(Z_STRVAL_P(op1), Z_STRLEN_P(op1)); - Z_STRLEN_P(result) = Z_STRLEN_P(op1); - for (i = 0; i < Z_STRLEN_P(op1); i++) { - Z_STRVAL_P(result)[i] = ~Z_STRVAL_P(op1)[i]; - } - return SUCCESS; - } - zend_error(E_ERROR, "Unsupported operand types"); - return FAILURE; /* unknown datatype */ -} - - -ZEND_API int bitwise_or_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) -{ - zval op1_copy, op2_copy; - - if (Z_TYPE_P(op1) == IS_STRING && Z_TYPE_P(op2) == IS_STRING) { - zval *longer, *shorter; - char *result_str; - int i, result_len; - - if (Z_STRLEN_P(op1) >= Z_STRLEN_P(op2)) { - longer = op1; - shorter = op2; - } else { - longer = op2; - shorter = op1; - } - - Z_TYPE_P(result) = Z_TYPE_P(op1); - result_len = Z_STRLEN_P(longer); - result_str = estrndup(Z_STRVAL_P(longer), Z_STRLEN_P(longer)); - for (i = 0; i < Z_STRLEN_P(shorter); i++) { - result_str[i] |= Z_STRVAL_P(shorter)[i]; - } - if (result==op1) { - STR_FREE(Z_STRVAL_P(result)); - } - Z_STRVAL_P(result) = result_str; - Z_STRLEN_P(result) = result_len; - return SUCCESS; - } - if (Z_TYPE_P(op1) == IS_UNICODE || Z_TYPE_P(op2) == IS_UNICODE) { - zend_error(E_ERROR, "Unsupported operand types"); - return FAILURE; - } - zendi_convert_to_long(op1, op1_copy, result); - zendi_convert_to_long(op2, op2_copy, result); - - Z_TYPE_P(result) = IS_LONG; - Z_LVAL_P(result) = Z_LVAL_P(op1) | Z_LVAL_P(op2); - return SUCCESS; -} - - -ZEND_API int bitwise_and_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) -{ - zval op1_copy, op2_copy; - - if (Z_TYPE_P(op1) == IS_STRING && Z_TYPE_P(op2) == IS_STRING) { - zval *longer, *shorter; - char *result_str; - int i, result_len; - - if (Z_STRLEN_P(op1) >= Z_STRLEN_P(op2)) { - longer = op1; - shorter = op2; - } else { - longer = op2; - shorter = op1; - } - - Z_TYPE_P(result) = Z_TYPE_P(op1); - result_len = Z_STRLEN_P(shorter); - result_str = estrndup(Z_STRVAL_P(shorter), Z_STRLEN_P(shorter)); - for (i = 0; i < Z_STRLEN_P(shorter); i++) { - result_str[i] &= Z_STRVAL_P(longer)[i]; - } - if (result==op1) { - STR_FREE(Z_STRVAL_P(result)); - } - Z_STRVAL_P(result) = result_str; - Z_STRLEN_P(result) = result_len; - return SUCCESS; - } - - if (Z_TYPE_P(op1) == IS_UNICODE || Z_TYPE_P(op2) == IS_UNICODE) { - zend_error(E_ERROR, "Unsupported operand types"); - return FAILURE; - } - - zendi_convert_to_long(op1, op1_copy, result); - zendi_convert_to_long(op2, op2_copy, result); - - Z_TYPE_P(result) = IS_LONG; - Z_LVAL_P(result) = Z_LVAL_P(op1) & Z_LVAL_P(op2); - return SUCCESS; -} - - -ZEND_API int bitwise_xor_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) -{ - zval op1_copy, op2_copy; - - if (Z_TYPE_P(op1) == IS_STRING && Z_TYPE_P(op2) == IS_STRING) { - zval *longer, *shorter; - char *result_str; - int i, result_len; - - if (Z_STRLEN_P(op1) >= Z_STRLEN_P(op2)) { - longer = op1; - shorter = op2; - } else { - longer = op2; - shorter = op1; - } - - Z_TYPE_P(result) = Z_TYPE_P(op1); - result_len = Z_STRLEN_P(shorter); - result_str = estrndup(Z_STRVAL_P(shorter), Z_STRLEN_P(shorter)); - for (i = 0; i < Z_STRLEN_P(shorter); i++) { - result_str[i] ^= Z_STRVAL_P(longer)[i]; - } - if (result==op1) { - STR_FREE(Z_STRVAL_P(result)); - } - Z_STRVAL_P(result) = result_str; - Z_STRLEN_P(result) = result_len; - return SUCCESS; - } - - if (Z_TYPE_P(op1) == IS_UNICODE || Z_TYPE_P(op2) == IS_UNICODE) { - zend_error(E_ERROR, "Unsupported operand types"); - return FAILURE; - } - - zendi_convert_to_long(op1, op1_copy, result); - zendi_convert_to_long(op2, op2_copy, result); - - Z_TYPE_P(result) = IS_LONG; - Z_LVAL_P(result) = Z_LVAL_P(op1) ^ Z_LVAL_P(op2); - return SUCCESS; -} - - -ZEND_API int shift_left_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) -{ - zval op1_copy, op2_copy; - - if (Z_TYPE_P(op1) == IS_UNICODE || Z_TYPE_P(op2) == IS_UNICODE) { - zend_error(E_ERROR, "Unsupported operand types"); - return FAILURE; - } - - zendi_convert_to_long(op1, op1_copy, result); - zendi_convert_to_long(op2, op2_copy, result); - Z_LVAL_P(result) = Z_LVAL_P(op1) << Z_LVAL_P(op2); - Z_TYPE_P(result) = IS_LONG; - return SUCCESS; -} - - -ZEND_API int shift_right_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) -{ - zval op1_copy, op2_copy; - - if (Z_TYPE_P(op1) == IS_UNICODE || Z_TYPE_P(op2) == IS_UNICODE) { - zend_error(E_ERROR, "Unsupported operand types"); - return FAILURE; - } - - zendi_convert_to_long(op1, op1_copy, result); - zendi_convert_to_long(op2, op2_copy, result); - Z_LVAL_P(result) = Z_LVAL_P(op1) >> Z_LVAL_P(op2); - Z_TYPE_P(result) = IS_LONG; - return SUCCESS; -} - - -/* must support result==op1 */ -ZEND_API int add_char_to_string(zval *result, zval *op1, zval *op2) -{ - if (Z_TYPE_P(op1) == IS_UNICODE) { - UChar32 codepoint = (UChar32) Z_LVAL_P(op2); - - if (U_IS_BMP(codepoint)) { - Z_USTRLEN_P(result) = Z_USTRLEN_P(op1) + 1; - Z_USTRVAL_P(result) = eurealloc(Z_USTRVAL_P(op1), Z_USTRLEN_P(result)+1); - Z_USTRVAL_P(result)[Z_USTRLEN_P(result) - 1] = (UChar) Z_LVAL_P(op2); - } else { - Z_USTRLEN_P(result) = Z_USTRLEN_P(op1) + 2; - Z_USTRVAL_P(result) = eurealloc(Z_USTRVAL_P(op1), Z_USTRLEN_P(result)+1); - Z_USTRVAL_P(result)[Z_USTRLEN_P(result) - 2] = (UChar) U16_LEAD(codepoint); - Z_USTRVAL_P(result)[Z_USTRLEN_P(result) - 1] = (UChar) U16_TRAIL(codepoint); - } - Z_USTRVAL_P(result)[Z_USTRLEN_P(result)] = 0; - Z_TYPE_P(result) = IS_UNICODE; - } else { - Z_STRLEN_P(result) = Z_STRLEN_P(op1) + 1; - Z_STRVAL_P(result) = (char *) erealloc(Z_STRVAL_P(op1), Z_STRLEN_P(result)+1); - Z_STRVAL_P(result)[Z_STRLEN_P(result) - 1] = (char) Z_LVAL_P(op2); - Z_STRVAL_P(result)[Z_STRLEN_P(result)] = 0; - Z_TYPE_P(result) = Z_TYPE_P(op1); - } - return SUCCESS; -} - - -/* must support result==op1 */ -ZEND_API int add_string_to_string(zval *result, zval *op1, zval *op2) -{ - assert(Z_TYPE_P(op1) == Z_TYPE_P(op2)); - - if (Z_TYPE_P(op1) == IS_UNICODE) { - int length = Z_USTRLEN_P(op1) + Z_USTRLEN_P(op2); - - Z_USTRVAL_P(result) = eurealloc(Z_USTRVAL_P(op1), length+1); - u_memcpy(Z_USTRVAL_P(result)+Z_USTRLEN_P(op1), Z_USTRVAL_P(op2), Z_USTRLEN_P(op2)); - Z_USTRVAL_P(result)[length] = 0; - Z_USTRLEN_P(result) = length; - Z_TYPE_P(result) = IS_UNICODE; - } else { - int length = Z_STRLEN_P(op1) + Z_STRLEN_P(op2); - - Z_STRVAL_P(result) = (char *) erealloc(Z_STRVAL_P(op1), length+1); - memcpy(Z_STRVAL_P(result)+Z_STRLEN_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op2)); - Z_STRVAL_P(result)[length] = 0; - Z_STRLEN_P(result) = length; - Z_TYPE_P(result) = Z_TYPE_P(op1); - } - return SUCCESS; -} - - -ZEND_API int concat_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) -{ - zval op1_copy, op2_copy; - int use_copy1, use_copy2; - zend_uchar result_type; - - if (Z_TYPE_P(op1) == IS_UNICODE || Z_TYPE_P(op2) == IS_UNICODE) { - zend_make_unicode_zval(op1, &op1_copy, &use_copy1); - zend_make_unicode_zval(op2, &op2_copy, &use_copy2); - result_type = IS_UNICODE; - } else { - result_type = IS_STRING; - zend_make_string_zval(op1, &op1_copy, &use_copy1); - zend_make_string_zval(op2, &op2_copy, &use_copy2); - } - - if (use_copy1) { - /* We have created a converted copy of op1. Therefore, op1 won't become the result so - * we have to free it. - */ - if (result == op1) { - zval_dtor(op1); - } - op1 = &op1_copy; - } - if (use_copy2) { - op2 = &op2_copy; - } - if (result==op1) { /* special case, perform operations on result */ - add_string_to_string(result, op1, op2); - } else { - if (result_type == IS_UNICODE) { - Z_USTRLEN_P(result) = Z_USTRLEN_P(op1) + Z_USTRLEN_P(op2); - Z_USTRVAL_P(result) = eumalloc(Z_USTRLEN_P(result) + 1); - u_memcpy(Z_USTRVAL_P(result), Z_USTRVAL_P(op1), Z_USTRLEN_P(op1)); - u_memcpy(Z_USTRVAL_P(result)+Z_USTRLEN_P(op1), Z_USTRVAL_P(op2), Z_USTRLEN_P(op2)); - Z_USTRVAL_P(result)[Z_USTRLEN_P(result)] = 0; - Z_TYPE_P(result) = IS_UNICODE; - } else { - Z_STRLEN_P(result) = Z_STRLEN_P(op1) + Z_STRLEN_P(op2); - Z_STRVAL_P(result) = (char *) emalloc(Z_STRLEN_P(result) + 1); - memcpy(Z_STRVAL_P(result), Z_STRVAL_P(op1), Z_STRLEN_P(op1)); - memcpy(Z_STRVAL_P(result)+Z_STRLEN_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op2)); - Z_STRVAL_P(result)[Z_STRLEN_P(result)] = 0; - Z_TYPE_P(result) = result_type; - } - } - if (use_copy1) { - zval_dtor(op1); - } - if (use_copy2) { - zval_dtor(op2); - } - return SUCCESS; -} - - -ZEND_API int string_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) -{ - zval op1_copy, op2_copy; - int use_copy1, use_copy2; - - if (UG(unicode)) { - zend_make_unicode_zval(op1, &op1_copy, &use_copy1); - zend_make_unicode_zval(op2, &op2_copy, &use_copy2); - } else { - zend_make_printable_zval(op1, &op1_copy, &use_copy1); - zend_make_printable_zval(op2, &op2_copy, &use_copy2); - } - - if (use_copy1) { - op1 = &op1_copy; - } - if (use_copy2) { - op2 = &op2_copy; - } - - if (UG(unicode)) { - Z_LVAL_P(result) = zend_u_binary_zval_strcmp(op1, op2); - } else { - Z_LVAL_P(result) = zend_binary_zval_strcmp(op1, op2); - } - Z_TYPE_P(result) = IS_LONG; - - if (use_copy1) { - zval_dtor(op1); - } - if (use_copy2) { - zval_dtor(op2); - } - return SUCCESS; -} - -ZEND_API int string_locale_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) -{ - zval op1_copy, op2_copy; - int use_copy1, use_copy2; - - if (UG(unicode)) { - zend_make_unicode_zval(op1, &op1_copy, &use_copy1); - zend_make_unicode_zval(op2, &op2_copy, &use_copy2); - } else { - zend_make_printable_zval(op1, &op1_copy, &use_copy1); - zend_make_printable_zval(op2, &op2_copy, &use_copy2); - } - - if (use_copy1) { - op1 = &op1_copy; - } - if (use_copy2) { - op2 = &op2_copy; - } - - if (UG(unicode)) { - Z_LVAL_P(result) = ucol_strcoll(UG(default_collator)->coll, Z_USTRVAL_P(op1), Z_USTRLEN_P(op1), Z_USTRVAL_P(op2), Z_USTRLEN_P(op2)); - } else { - Z_LVAL_P(result) = strcoll(Z_STRVAL_P(op1), Z_STRVAL_P(op2)); - } - Z_TYPE_P(result) = IS_LONG; - - if (use_copy1) { - zval_dtor(op1); - } - if (use_copy2) { - zval_dtor(op2); - } - - return SUCCESS; -} - -ZEND_API int numeric_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) -{ - zval op1_copy, op2_copy; - - op1_copy = *op1; - zval_copy_ctor(&op1_copy); - - op2_copy = *op2; - zval_copy_ctor(&op2_copy); - - convert_to_double(&op1_copy); - convert_to_double(&op2_copy); - - ZVAL_LONG(result, ZEND_NORMALIZE_BOOL(Z_DVAL(op1_copy)-Z_DVAL(op2_copy))); - - return SUCCESS; -} - - -static inline void zend_free_obj_get_result(zval *op) -{ - if (op) { - if (op->refcount == 0) { - zval_dtor(op); - FREE_ZVAL(op); - } else { - zval_ptr_dtor(&op); - } - } -} - -#define COMPARE_RETURN_AND_FREE(retval) \ - zend_free_obj_get_result(op1_free); \ - zend_free_obj_get_result(op2_free); \ - return retval; - -ZEND_API int compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) -{ - zval op1_copy, op2_copy; - zval *op1_free, *op2_free; - int op1_obj = Z_TYPE_P(op1) == IS_OBJECT; - int op2_obj = Z_TYPE_P(op2) == IS_OBJECT; - int eq_comp = op1_obj && op2_obj && (Z_OBJ_HANDLER_P(op1,compare_objects) - == Z_OBJ_HANDLER_P(op2,compare_objects)); - - if (op1_obj && !eq_comp) { - if (Z_TYPE_P(op2) == IS_NULL) { - ZVAL_LONG(result, 1); - return SUCCESS; - } else if (Z_OBJ_HT_P(op1)->get) { - op1 = op1_free = Z_OBJ_HT_P(op1)->get(op1 TSRMLS_CC); - } else if (!op2_obj && Z_OBJ_HT_P(op1)->cast_object) { - ALLOC_INIT_ZVAL(op1_free); - if (Z_OBJ_HT_P(op1)->cast_object(op1, op1_free, Z_TYPE_P(op2), NULL TSRMLS_CC) == FAILURE) { - op2_free = NULL; - ZVAL_LONG(result, 1); - COMPARE_RETURN_AND_FREE(SUCCESS); - } - op1 = op1_free; - } else { - op1_free = NULL; - } - op1_obj = Z_TYPE_P(op1) == IS_OBJECT; - eq_comp = op1_obj && op2_obj && (Z_OBJ_HANDLER_P(op1,compare_objects) - == Z_OBJ_HANDLER_P(op2,compare_objects)); - } else { - op1_free = NULL; - } - if (op2_obj && !eq_comp) { - if (Z_TYPE_P(op1) == IS_NULL) { - op2_free = NULL; - ZVAL_LONG(result, -1); - COMPARE_RETURN_AND_FREE(SUCCESS); - } else if (Z_OBJ_HT_P(op2)->get) { - op2 = op2_free = Z_OBJ_HT_P(op2)->get(op2 TSRMLS_CC); - } else if (!op1_obj && Z_OBJ_HT_P(op2)->cast_object) { - ALLOC_INIT_ZVAL(op2_free); - if (Z_OBJ_HT_P(op2)->cast_object(op2, op2_free, Z_TYPE_P(op1), NULL TSRMLS_CC) == FAILURE) { - ZVAL_LONG(result, -1); - COMPARE_RETURN_AND_FREE(SUCCESS); - } - op2 = op2_free; - } else { - op2_free = NULL; - } - op2_obj = Z_TYPE_P(op2) == IS_OBJECT; - eq_comp = op1_obj && op2_obj && (Z_OBJ_HANDLER_P(op1,compare_objects) - == Z_OBJ_HANDLER_P(op2,compare_objects)); - } else { - op2_free = NULL; - } - - if ((Z_TYPE_P(op1) == IS_NULL && Z_TYPE_P(op2) == IS_STRING) - || (Z_TYPE_P(op2) == IS_NULL && Z_TYPE_P(op1) == IS_STRING)) { - if (Z_TYPE_P(op1) == IS_NULL) { - ZVAL_LONG(result, zend_binary_strcmp("", 0, Z_STRVAL_P(op2), Z_STRLEN_P(op2))); - COMPARE_RETURN_AND_FREE(SUCCESS); - } else { - ZVAL_LONG(result, zend_binary_strcmp(Z_STRVAL_P(op1), Z_STRLEN_P(op1), "", 0)); - COMPARE_RETURN_AND_FREE(SUCCESS); - } - } - - if ((Z_TYPE_P(op1) == IS_UNICODE || Z_TYPE_P(op1) == IS_STRING) && - (Z_TYPE_P(op2) == IS_UNICODE || Z_TYPE_P(op2) == IS_STRING)) { - - if (Z_TYPE_P(op1) == IS_UNICODE || Z_TYPE_P(op2) == IS_UNICODE) { - zendi_u_smart_strcmp(result, op1, op2); - } else { - zendi_smart_strcmp(result, op1, op2); - } - COMPARE_RETURN_AND_FREE(SUCCESS); - } - - if (Z_TYPE_P(op1) == IS_BOOL || Z_TYPE_P(op2) == IS_BOOL - || Z_TYPE_P(op1) == IS_NULL || Z_TYPE_P(op2) == IS_NULL) { - zendi_convert_to_boolean(op1, op1_copy, result); - zendi_convert_to_boolean(op2, op2_copy, result); - ZVAL_LONG(result, ZEND_NORMALIZE_BOOL(Z_LVAL_P(op1) - Z_LVAL_P(op2))); - COMPARE_RETURN_AND_FREE(SUCCESS); - } - - /* If both are objects sharing the same comparision handler then use is */ - if (eq_comp) { - ZVAL_LONG(result, Z_OBJ_HT_P(op1)->compare_objects(op1, op2 TSRMLS_CC)); - COMPARE_RETURN_AND_FREE(SUCCESS); - } - - zendi_convert_scalar_to_number(op1, op1_copy, result); - zendi_convert_scalar_to_number(op2, op2_copy, result); - - if (Z_TYPE_P(op1) == IS_LONG && Z_TYPE_P(op2) == IS_LONG) { - ZVAL_LONG(result, Z_LVAL_P(op1)>Z_LVAL_P(op2)?1:(Z_LVAL_P(op1)num_interfaces; i++) { - if (instanceof_function(instance_ce->interfaces[i], ce TSRMLS_CC)) { - return 1; - } - } - if (!interfaces_only) { - while (instance_ce) { - if (instance_ce == ce) { - return 1; - } - instance_ce = instance_ce->parent; - } - } - - return 0; -} - -ZEND_API zend_bool instanceof_function(zend_class_entry *instance_ce, zend_class_entry *ce TSRMLS_DC) -{ - return instanceof_function_ex(instance_ce, ce, 0 TSRMLS_CC); -} - -#define LOWER_CASE 1 -#define UPPER_CASE 2 -#define NUMERIC 3 - - -static void increment_string(zval *str) -{ - int carry=0; - int pos=Z_STRLEN_P(str)-1; - char *s=Z_STRVAL_P(str); - char *t; - int last=0; /* Shut up the compiler warning */ - int ch; - - if (Z_STRLEN_P(str) == 0) { - STR_FREE(Z_STRVAL_P(str)); - Z_STRVAL_P(str) = estrndup("1", sizeof("1")-1); - Z_STRLEN_P(str) = 1; - return; - } - - while (pos >= 0) { - ch = s[pos]; - if (ch >= 'a' && ch <= 'z') { - if (ch == 'z') { - s[pos] = 'a'; - carry=1; - } else { - s[pos]++; - carry=0; - } - last=LOWER_CASE; - } else if (ch >= 'A' && ch <= 'Z') { - if (ch == 'Z') { - s[pos] = 'A'; - carry=1; - } else { - s[pos]++; - carry=0; - } - last=UPPER_CASE; - } else if (ch >= '0' && ch <= '9') { - if (ch == '9') { - s[pos] = '0'; - carry=1; - } else { - s[pos]++; - carry=0; - } - last = NUMERIC; - } else { - carry=0; - break; - } - if (carry == 0) { - break; - } - pos--; - } - - if (carry) { - t = (char *) emalloc(Z_STRLEN_P(str)+1+1); - memcpy(t+1, Z_STRVAL_P(str), Z_STRLEN_P(str)); - Z_STRLEN_P(str)++; - t[Z_STRLEN_P(str)] = '\0'; - switch (last) { - case NUMERIC: - t[0] = '1'; - break; - case UPPER_CASE: - t[0] = 'A'; - break; - case LOWER_CASE: - t[0] = 'a'; - break; - } - STR_FREE(Z_STRVAL_P(str)); - Z_STRVAL_P(str) = t; - } -} - - -ZEND_API int increment_function(zval *op1) -{ - switch (Z_TYPE_P(op1)) { - case IS_LONG: - if (Z_LVAL_P(op1) == LONG_MAX) { - /* switch to double */ - double d = (double)Z_LVAL_P(op1); - ZVAL_DOUBLE(op1, d+1); - } else { - Z_LVAL_P(op1)++; - } - break; - case IS_DOUBLE: - Z_DVAL_P(op1) = Z_DVAL_P(op1) + 1; - break; - case IS_NULL: - Z_LVAL_P(op1) = 1; - Z_TYPE_P(op1) = IS_LONG; - break; - case IS_STRING: { - long lval; - double dval; - char *strval = Z_STRVAL_P(op1); - - switch (is_numeric_string(strval, Z_STRLEN_P(op1), &lval, &dval, 0)) { - case IS_LONG: - if (lval == LONG_MAX) { - /* switch to double */ - double d = (double)lval; - ZVAL_DOUBLE(op1, d+1); - } else { - Z_LVAL_P(op1) = lval+1; - Z_TYPE_P(op1) = IS_LONG; - } - efree(strval); /* should never be empty_string */ - break; - case IS_DOUBLE: - Z_DVAL_P(op1) = dval+1; - Z_TYPE_P(op1) = IS_DOUBLE; - efree(strval); /* should never be empty_string */ - break; - default: - /* Perl style string increment */ - increment_string(op1); - break; - } - } - break; - case IS_UNICODE: - zend_error(E_ERROR, "Unsupported operand type"); - break; - default: - return FAILURE; - } - return SUCCESS; -} - - -ZEND_API int decrement_function(zval *op1) -{ - long lval; - double dval; - - switch (Z_TYPE_P(op1)) { - case IS_LONG: - if (Z_LVAL_P(op1) == LONG_MIN) { - double d = (double)Z_LVAL_P(op1); - ZVAL_DOUBLE(op1, d-1); - } else { - Z_LVAL_P(op1)--; - } - break; - case IS_DOUBLE: - Z_DVAL_P(op1) = Z_DVAL_P(op1) - 1; - break; - case IS_STRING: /* Like perl we only support string increment */ - if (Z_STRLEN_P(op1) == 0) { /* consider as 0 */ - STR_FREE(Z_STRVAL_P(op1)); - Z_LVAL_P(op1) = -1; - Z_TYPE_P(op1) = IS_LONG; - break; - } - switch (is_numeric_string(Z_STRVAL_P(op1), Z_STRLEN_P(op1), &lval, &dval, 0)) { - case IS_LONG: - STR_FREE(Z_STRVAL_P(op1)); - if (lval == LONG_MIN) { - double d = (double)lval; - ZVAL_DOUBLE(op1, d-1); - } else { - Z_LVAL_P(op1) = lval-1; - Z_TYPE_P(op1) = IS_LONG; - } - break; - case IS_DOUBLE: - STR_FREE(Z_STRVAL_P(op1)); - Z_DVAL_P(op1) = dval - 1; - Z_TYPE_P(op1) = IS_DOUBLE; - break; - } - break; - case IS_UNICODE: - zend_error(E_ERROR, "Unsupported operand type"); - break; - default: - return FAILURE; - } - - return SUCCESS; -} - - -ZEND_API int zval_is_true(zval *op) -{ - convert_to_boolean(op); - return (Z_LVAL_P(op) ? 1 : 0); -} - -#ifdef ZEND_USE_TOLOWER_L -ZEND_API void zend_update_current_locale() -{ - current_locale = _get_current_locale(); -} -#endif - -ZEND_API char *zend_str_tolower_copy(char *dest, const char *source, unsigned int length) -{ - register unsigned char *str = (unsigned char*)source; - register unsigned char *result = (unsigned char*)dest; - register unsigned char *end = str + length; - - while (str < end) { - *result++ = zend_tolower((int)*str++); - } - *result = '\0'; - - return dest; -} - -ZEND_API char *zend_str_tolower_dup(const char *source, unsigned int length) -{ - return zend_str_tolower_copy((char *)emalloc(length+1), source, length); -} - -ZEND_API zstr zend_u_str_tolower_copy(zend_uchar type, zstr dest, zstr source, unsigned int length) -{ - if (type == IS_UNICODE) { - register UChar *str = source.u; - register UChar *result = dest.u; - register UChar *end = str + length; - - while (str < end) { - *result++ = u_tolower((int)*str++); - } - *result = '\0'; - - return dest; - } else { - zstr ret; - - ret.s = zend_str_tolower_copy(dest.s, source.s, length); - return ret; - } -} - -ZEND_API zstr zend_u_str_tolower_dup(zend_uchar type, zstr source, unsigned int length) -{ - zstr ret; - - if (type == IS_UNICODE) { - ret.u = eumalloc(length+1); - ret = zend_u_str_tolower_copy(IS_UNICODE, ret, source, length); - } else { - ret.s = zend_str_tolower_copy((char*)emalloc(length+1), source.s, length); - } - return ret; -} - -ZEND_API void zend_str_tolower(char *str, unsigned int length) -{ - register unsigned char *p = (unsigned char*)str; - register unsigned char *end = p + length; - - while (p < end) { - *p = zend_tolower((int)*p); - p++; - } -} - -ZEND_API void zend_u_str_tolower(zend_uchar type, zstr str, unsigned int length) { - if (type == IS_UNICODE) { - register UChar *p = str.u; - register UChar *end = p + length; - - while (p < end) { - *p = u_tolower((int)*p); - p++; - } - } else { - zend_str_tolower(str.s, length); - } -} - -ZEND_API zstr zend_u_str_case_fold(zend_uchar type, zstr source, unsigned int length, zend_bool normalize, unsigned int *new_len) -{ - zstr ret; - - if (type == IS_UNICODE) { - int ret_len = length; - - if (normalize) { - if (zend_normalize_identifier(&ret.u, &ret_len, source.u, length, 1) == FAILURE) { - zend_error(E_NOTICE, "Could not normalize identifier"); - ret.u = eustrndup(source.u, length); - } - } else { - UErrorCode status = U_ZERO_ERROR; - - zend_case_fold_string(&ret.u, &ret_len, source.u, length, U_FOLD_CASE_DEFAULT, &status); - if (U_FAILURE(status)) { - zend_error(E_NOTICE, "Could not case-fold string"); - ret.u = eustrndup(source.u, length); - } - } - - *new_len = ret_len; - } else { - *new_len = length; - ret.s = zend_str_tolower_dup(source.s, length); - } - return ret; -} - -ZEND_API int zend_binary_strcmp(char *s1, uint len1, char *s2, uint len2) -{ - int retval; - - retval = memcmp(s1, s2, MIN(len1, len2)); - if (!retval) { - return (len1 - len2); - } else { - return retval; - } -} - - -ZEND_API int zend_u_binary_strcmp(UChar *s1, int len1, UChar *s2, int len2) -{ - int result = u_strCompare(s1, len1, s2, len2, 1); - return ZEND_NORMALIZE_BOOL(result); -} - - -ZEND_API int zend_binary_strncmp(char *s1, uint len1, char *s2, uint len2, uint length) -{ - int retval; - - retval = memcmp(s1, s2, MIN(length, MIN(len1, len2))); - if (!retval) { - return (MIN(length, len1) - MIN(length, len2)); - } else { - return retval; - } -} - - -ZEND_API int zend_u_binary_strncmp(UChar *s1, int len1, UChar *s2, int len2, uint length) -{ - int32_t off1 = 0, off2 = 0; - UChar32 c1, c2; - int result = 0; - - for( ; length > 0; --length) { - if (off1 >= len1 || off2 >= len2) { - result = len1 - len2; - return ZEND_NORMALIZE_BOOL(result); - } - U16_NEXT(s1, off1, len1, c1); - U16_NEXT(s2, off2, len2, c2); - if (c1 != c2) { - result = (int32_t)c1-(int32_t)c2; - return ZEND_NORMALIZE_BOOL(result); - } - } - - return 0; -} - - -ZEND_API int zend_binary_strcasecmp(char *s1, uint len1, char *s2, uint len2) -{ - int len; - int c1, c2; - - len = MIN(len1, len2); - - while (len--) { - c1 = zend_tolower((int)*(unsigned char *)s1++); - c2 = zend_tolower((int)*(unsigned char *)s2++); - if (c1 != c2) { - return c1 - c2; - } - } - - return len1 - len2; -} - - -ZEND_API int zend_u_binary_strcasecmp(UChar *s1, int len1, UChar *s2, int len2) -{ - UErrorCode status = U_ZERO_ERROR; - int result = u_strCaseCompare(s1, len1, s2, len2, U_COMPARE_CODE_POINT_ORDER, &status); - return ZEND_NORMALIZE_BOOL(result); -} - - -ZEND_API int zend_binary_strncasecmp(char *s1, uint len1, char *s2, uint len2, uint length) -{ - int len; - int c1, c2; - - len = MIN(length, MIN(len1, len2)); - - while (len--) { - c1 = zend_tolower((int)*(unsigned char *)s1++); - c2 = zend_tolower((int)*(unsigned char *)s2++); - if (c1 != c2) { - return c1 - c2; - } - } - - return MIN(length, len1) - MIN(length, len2); -} - - -/* - * Because we do not know UChar offsets for the passed-in limit of the number of - * codepoints to compare, we take a hit upfront by iterating over both strings - * until we find them. Then we can simply use u_strCaseCompare(). - */ -ZEND_API int zend_u_binary_strncasecmp(UChar *s1, int len1, UChar *s2, int len2, uint length) -{ - UErrorCode status = U_ZERO_ERROR; - int32_t off1 = 0, off2 = 0; - int result; - - U16_FWD_N(s1, off1, len1, length); - U16_FWD_N(s2, off2, len2, length); - result = u_strCaseCompare(s1, off1, s2, off2, U_COMPARE_CODE_POINT_ORDER, &status); - return ZEND_NORMALIZE_BOOL(result); -} - - -ZEND_API int zend_binary_zval_strcmp(zval *s1, zval *s2) -{ - return zend_binary_strcmp(Z_STRVAL_P(s1), Z_STRLEN_P(s1), Z_STRVAL_P(s2), Z_STRLEN_P(s2)); -} - - -ZEND_API int zend_u_binary_zval_strcmp(zval *s1, zval *s2) -{ - return zend_u_binary_strcmp(Z_USTRVAL_P(s1), Z_USTRLEN_P(s1), Z_USTRVAL_P(s2), Z_USTRLEN_P(s2)); -} - - -ZEND_API int zend_binary_zval_strncmp(zval *s1, zval *s2, zval *s3) -{ - return zend_binary_strncmp(Z_STRVAL_P(s1), Z_STRLEN_P(s1), Z_STRVAL_P(s2), Z_STRLEN_P(s2), Z_LVAL_P(s3)); -} - - -ZEND_API int zend_binary_zval_strcasecmp(zval *s1, zval *s2) -{ - return zend_binary_strcasecmp(Z_STRVAL_P(s1), Z_STRLEN_P(s1), Z_STRVAL_P(s2), Z_STRLEN_P(s2)); -} - - -ZEND_API int zend_binary_zval_strncasecmp(zval *s1, zval *s2, zval *s3) -{ - return zend_binary_strncasecmp(Z_STRVAL_P(s1), Z_STRLEN_P(s1), Z_STRVAL_P(s2), Z_STRLEN_P(s2), Z_LVAL_P(s3)); -} - - -ZEND_API void zendi_smart_strcmp(zval *result, zval *s1, zval *s2) -{ - int ret1, ret2; - long lval1, lval2; - double dval1, dval2; - - if ((ret1=is_numeric_string(Z_STRVAL_P(s1), Z_STRLEN_P(s1), &lval1, &dval1, 0)) && - (ret2=is_numeric_string(Z_STRVAL_P(s2), Z_STRLEN_P(s2), &lval2, &dval2, 0))) { - if ((ret1==IS_DOUBLE) || (ret2==IS_DOUBLE)) { - if (ret1!=IS_DOUBLE) { - dval1 = zend_strtod(Z_STRVAL_P(s1), NULL); - } else if (ret2!=IS_DOUBLE) { - dval2 = zend_strtod(Z_STRVAL_P(s2), NULL); - } - Z_DVAL_P(result) = dval1 - dval2; - Z_LVAL_P(result) = ZEND_NORMALIZE_BOOL(Z_DVAL_P(result)); - Z_TYPE_P(result) = IS_LONG; - } else { /* they both have to be long's */ - Z_LVAL_P(result) = lval1 - lval2; - Z_LVAL_P(result) = ZEND_NORMALIZE_BOOL(Z_LVAL_P(result)); - Z_TYPE_P(result) = IS_LONG; - } - } else { - Z_LVAL_P(result) = zend_binary_zval_strcmp(s1, s2); - Z_LVAL_P(result) = ZEND_NORMALIZE_BOOL(Z_LVAL_P(result)); - Z_TYPE_P(result) = IS_LONG; - } - return; -} - - -ZEND_API void zendi_u_smart_strcmp(zval *result, zval *s1, zval *s2) -{ - int ret1, ret2; - long lval1, lval2; - double dval1, dval2; - zval s1_copy, s2_copy; - int use_copy1 = 0, use_copy2 = 0; - - if (Z_TYPE_P(s1) != IS_UNICODE || Z_TYPE_P(s2) != IS_UNICODE) { - zend_make_unicode_zval(s1, &s1_copy, &use_copy1); - zend_make_unicode_zval(s2, &s2_copy, &use_copy2); - if (use_copy1) { - s1 = &s1_copy; - } - if (use_copy2) { - s2 = &s2_copy; - } - } - - if ((ret1=is_numeric_unicode(Z_USTRVAL_P(s1), Z_USTRLEN_P(s1), &lval1, &dval1, 0)) && - (ret2=is_numeric_unicode(Z_USTRVAL_P(s2), Z_USTRLEN_P(s2), &lval2, &dval2, 0))) { - if ((ret1==IS_DOUBLE) || (ret2==IS_DOUBLE)) { - if (ret1!=IS_DOUBLE) { - dval1 = zend_u_strtod(Z_USTRVAL_P(s1), NULL); - } else if (ret2!=IS_DOUBLE) { - dval2 = zend_u_strtod(Z_USTRVAL_P(s2), NULL); - } - Z_DVAL_P(result) = dval1 - dval2; - Z_LVAL_P(result) = ZEND_NORMALIZE_BOOL(Z_DVAL_P(result)); - Z_TYPE_P(result) = IS_LONG; - } else { /* they both have to be long's */ - Z_LVAL_P(result) = lval1 - lval2; - Z_LVAL_P(result) = ZEND_NORMALIZE_BOOL(Z_LVAL_P(result)); - Z_TYPE_P(result) = IS_LONG; - } - } else { - Z_LVAL_P(result) = zend_u_binary_zval_strcmp(s1, s2); - Z_LVAL_P(result) = ZEND_NORMALIZE_BOOL(Z_LVAL_P(result)); - Z_TYPE_P(result) = IS_LONG; - } - - if (use_copy1) { - zval_dtor(s1); - } - if (use_copy2) { - zval_dtor(s2); - } - return; -} - - -static int hash_zval_compare_function(const zval **z1, const zval **z2 TSRMLS_DC) -{ - zval result; - - if (compare_function(&result, (zval *) *z1, (zval *) *z2 TSRMLS_CC)==FAILURE) { - return 1; - } - return Z_LVAL(result); -} - -ZEND_API int zend_compare_symbol_tables_i(HashTable *ht1, HashTable *ht2 TSRMLS_DC) -{ - return zend_hash_compare(ht1, ht2, (compare_func_t) hash_zval_compare_function, 0 TSRMLS_CC); -} - - - -ZEND_API void zend_compare_symbol_tables(zval *result, HashTable *ht1, HashTable *ht2 TSRMLS_DC) -{ - Z_TYPE_P(result) = IS_LONG; - Z_LVAL_P(result) = zend_hash_compare(ht1, ht2, (compare_func_t) hash_zval_compare_function, 0 TSRMLS_CC); -} - - -ZEND_API void zend_compare_arrays(zval *result, zval *a1, zval *a2 TSRMLS_DC) -{ - zend_compare_symbol_tables(result, Z_ARRVAL_P(a1), Z_ARRVAL_P(a2) TSRMLS_CC); -} - - -ZEND_API void zend_compare_objects(zval *result, zval *o1, zval *o2 TSRMLS_DC) -{ - Z_TYPE_P(result) = IS_LONG; - - if (Z_OBJ_HANDLE_P(o1) == Z_OBJ_HANDLE_P(o2)) { - Z_LVAL_P(result) = 0; - return; - } - - if (Z_OBJ_HT_P(o1)->compare_objects == NULL) { - Z_LVAL_P(result) = 1; - } else { - Z_LVAL_P(result) = Z_OBJ_HT_P(o1)->compare_objects(o1, o2 TSRMLS_CC); - } -} - -ZEND_API void zend_locale_sprintf_double(zval *op ZEND_FILE_LINE_DC) -{ - TSRMLS_FETCH(); - - op->value.str.len = zend_spprintf(&op->value.str.val, 0, "%.*G", (int) EG(precision), (double)op->value.dval); -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h deleted file mode 100644 index c4808ef99584b..0000000000000 --- a/Zend/zend_operators.h +++ /dev/null @@ -1,481 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_OPERATORS_H -#define ZEND_OPERATORS_H - -#include -#include - -#ifdef HAVE_IEEEFP_H -#include -#endif - -#include "zend_strtod.h" -#include "zend_unicode.h" - -#if 0&&HAVE_BCMATH -#include "ext/bcmath/libbcmath/src/bcmath.h" -#endif - -#define MAX_LENGTH_OF_LONG 20 -#define MAX_LENGTH_OF_DOUBLE 32 - -BEGIN_EXTERN_C() -ZEND_API int add_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -ZEND_API int sub_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -ZEND_API int mul_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -ZEND_API int div_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -ZEND_API int mod_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -ZEND_API int boolean_xor_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -ZEND_API int boolean_not_function(zval *result, zval *op1 TSRMLS_DC); -ZEND_API int bitwise_not_function(zval *result, zval *op1 TSRMLS_DC); -ZEND_API int bitwise_or_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -ZEND_API int bitwise_and_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -ZEND_API int bitwise_xor_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -ZEND_API int shift_left_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -ZEND_API int shift_right_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -ZEND_API int concat_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); - -ZEND_API int is_equal_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -ZEND_API int is_identical_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -ZEND_API int is_not_identical_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -ZEND_API int is_not_equal_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -ZEND_API int is_smaller_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -ZEND_API int is_smaller_or_equal_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); - -ZEND_API zend_bool instanceof_function_ex(zend_class_entry *instance_ce, zend_class_entry *ce, zend_bool interfaces_only TSRMLS_DC); -ZEND_API zend_bool instanceof_function(zend_class_entry *instance_ce, zend_class_entry *ce TSRMLS_DC); -ZEND_API long zend_u_strtol(const UChar *nptr, UChar **endptr, int base); -ZEND_API unsigned long zend_u_strtoul(const UChar *nptr, UChar **endptr, int base); -ZEND_API double zend_u_strtod(const UChar *nptr, UChar **endptr); -END_EXTERN_C() - -static inline zend_uchar is_numeric_string(char *str, int length, long *lval, double *dval, int allow_errors) -{ - long local_lval; - double local_dval; - char *end_ptr_long, *end_ptr_double; - int conv_base=10; - - if (!length) { - return 0; - } - - /* handle hex numbers */ - if (length>=2 && str[0]=='0' && (str[1]=='x' || str[1]=='X')) { - conv_base=16; - } - errno=0; - local_lval = strtol(str, &end_ptr_long, conv_base); - if (errno!=ERANGE) { - if (end_ptr_long == str+length) { /* integer string */ - if (lval) { - *lval = local_lval; - } - return IS_LONG; - } else if (end_ptr_long == str && *end_ptr_long != '\0' && *str != '.' && *str != '-') { /* ignore partial string matches */ - return 0; - } - } else { - end_ptr_long=NULL; - } - - if (conv_base==16) { /* hex string, under UNIX strtod() messes it up */ - return 0; - } - - errno=0; - local_dval = zend_strtod(str, &end_ptr_double); - if (errno != ERANGE) { - if (end_ptr_double == str+length) { /* floating point string */ - if (!zend_finite(local_dval)) { - /* "inf","nan" and maybe other weird ones */ - return 0; - } - - if (dval) { - *dval = local_dval; - } - return IS_DOUBLE; - } - } else { - end_ptr_double=NULL; - } - - if (!allow_errors) { - return 0; - } - if (allow_errors == -1) { - zend_error(E_NOTICE, "A non well formed numeric value encountered"); - } - - if (end_ptr_double>end_ptr_long && dval) { - *dval = local_dval; - return IS_DOUBLE; - } else if (end_ptr_long && lval) { - *lval = local_lval; - return IS_LONG; - } - return 0; -} - -static inline zend_uchar is_numeric_unicode(UChar *str, int length, long *lval, double *dval, zend_bool allow_errors) -{ - long local_lval; - double local_dval; - UChar *end_ptr_long, *end_ptr_double; - int conv_base=10; - - if (!length) { - return 0; - } - - /* handle hex numbers */ - if (length>=2 && str[0]=='0' && (str[1]=='x' || str[1]=='X')) { - conv_base=16; - } - - errno=0; - local_lval = zend_u_strtol(str, &end_ptr_long, conv_base); - if (errno != ERANGE) { - if (end_ptr_long == str+length) { /* integer string */ - if (lval) { - *lval = local_lval; - } - return IS_LONG; - } else if (end_ptr_long == str && *end_ptr_long != '\0' && *str != '.' && *str != '-') { /* ignore partial string matches */ - return 0; - } - } else { - end_ptr_long = NULL; - } - - if (conv_base == 16) { /* hex string, under UNIX strtod() messes it up */ - /* UTODO: keep compatibility with is_numeric_string() here? */ - return 0; - } - - local_dval = zend_u_strtod(str, &end_ptr_double); - if (local_dval == 0 && end_ptr_double == str) { - end_ptr_double = NULL; - } else { - if (end_ptr_double == str+length) { /* floating point string */ - if (!zend_finite(local_dval)) { - /* "inf","nan" and maybe other weird ones */ - return 0; - } - - if (dval) { - *dval = local_dval; - } - return IS_DOUBLE; - } - } - - if (allow_errors) { - if (end_ptr_double > end_ptr_long && dval) { - *dval = local_dval; - return IS_DOUBLE; - } else if (end_ptr_long && lval) { - *lval = local_lval; - return IS_LONG; - } - } - return 0; -} - -static inline UChar* -zend_u_memnstr(UChar *haystack, UChar *needle, int needle_len, UChar *end) -{ - return u_strFindFirst(haystack, end - haystack, needle, needle_len); -} - -static inline char * -zend_memnstr(char *haystack, char *needle, int needle_len, char *end) -{ - char *p = haystack; - char ne = needle[needle_len-1]; - - end -= needle_len; - - while (p <= end) { - if ((p = (char *)memchr(p, *needle, (end-p+1))) && ne == p[needle_len-1]) { - if (!memcmp(needle, p, needle_len-1)) { - return p; - } - } - - if (p == NULL) { - return NULL; - } - - p++; - } - - return NULL; -} - -static inline void *zend_memrchr(const void *s, int c, size_t n) -{ - register unsigned char *e; - - if (n <= 0) { - return NULL; - } - - for (e = (unsigned char *)s + n - 1; e >= (unsigned char *)s; e--) { - if (*e == (unsigned char)c) { - return (void *)e; - } - } - - return NULL; -} - -BEGIN_EXTERN_C() -ZEND_API int increment_function(zval *op1); -ZEND_API int decrement_function(zval *op2); - -ZEND_API int convert_scalar_to_number(zval *op TSRMLS_DC); -ZEND_API int _convert_to_string(zval *op ZEND_FILE_LINE_DC); -ZEND_API int _convert_to_string_with_converter(zval *op, UConverter *conv TSRMLS_DC ZEND_FILE_LINE_DC); -ZEND_API int _convert_to_unicode(zval *op TSRMLS_DC ZEND_FILE_LINE_DC); -ZEND_API int _convert_to_unicode_with_converter(zval *op, UConverter *conv TSRMLS_DC ZEND_FILE_LINE_DC); -ZEND_API int convert_to_long(zval *op); -ZEND_API int convert_to_double(zval *op); -ZEND_API int convert_to_long_base(zval *op, int base); -ZEND_API int convert_to_null(zval *op); -ZEND_API int convert_to_boolean(zval *op); -ZEND_API int convert_to_array(zval *op); -ZEND_API int convert_to_object(zval *op); -ZEND_API void multi_convert_to_long_ex(int argc, ...); -ZEND_API void multi_convert_to_double_ex(int argc, ...); -ZEND_API void multi_convert_to_string_ex(int argc, ...); -ZEND_API int add_char_to_string(zval *result, zval *op1, zval *op2); -ZEND_API int add_string_to_string(zval *result, zval *op1, zval *op2); -#define convert_to_string(op) _convert_to_string((op) ZEND_FILE_LINE_CC) -#define convert_to_string_with_converter(op, conv) _convert_to_string_with_converter((op), (conv) TSRMLS_CC ZEND_FILE_LINE_CC) -#define convert_to_unicode(op) _convert_to_unicode((op) TSRMLS_CC ZEND_FILE_LINE_CC) -#define convert_to_unicode_with_converter(op, conv) _convert_to_unicode_with_converter((op), (conv) TSRMLS_CC ZEND_FILE_LINE_CC) -#define convert_to_text(op) (UG(unicode)?convert_to_unicode(op):convert_to_string(op)) - -ZEND_API double zend_string_to_double(const char *number, zend_uint length); - -ZEND_API int zval_is_true(zval *op); -ZEND_API int compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -ZEND_API int numeric_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -ZEND_API int string_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -#if HAVE_STRCOLL -ZEND_API int string_locale_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC); -#endif - -ZEND_API void zend_str_tolower(char *str, unsigned int length); -ZEND_API char *zend_str_tolower_copy(char *dest, const char *source, unsigned int length); -ZEND_API char *zend_str_tolower_dup(const char *source, unsigned int length); - -ZEND_API void zend_u_str_tolower(zend_uchar type, zstr str, unsigned int length); -ZEND_API zstr zend_u_str_tolower_copy(zend_uchar type, zstr dest, zstr source, unsigned int length); -ZEND_API zstr zend_u_str_tolower_dup(zend_uchar type, zstr source, unsigned int length); - -ZEND_API zstr zend_u_str_case_fold(zend_uchar type, zstr source, unsigned int length, zend_bool normalize, unsigned int *new_len); - -ZEND_API int zend_binary_zval_strcmp(zval *s1, zval *s2); -ZEND_API int zend_binary_zval_strncmp(zval *s1, zval *s2, zval *s3); -ZEND_API int zend_binary_zval_strcasecmp(zval *s1, zval *s2); -ZEND_API int zend_binary_zval_strncasecmp(zval *s1, zval *s2, zval *s3); -ZEND_API int zend_binary_strcmp(char *s1, uint len1, char *s2, uint len2); -ZEND_API int zend_binary_strncmp(char *s1, uint len1, char *s2, uint len2, uint length); -ZEND_API int zend_binary_strcasecmp(char *s1, uint len1, char *s2, uint len2); -ZEND_API int zend_binary_strncasecmp(char *s1, uint len1, char *s2, uint len2, uint length); - -ZEND_API int zend_u_binary_zval_strcmp(zval *s1, zval *s2); -ZEND_API int zend_u_binary_strcmp(UChar *s1, int len1, UChar *s2, int len2); -ZEND_API int zend_u_binary_strncmp(UChar *s1, int len1, UChar *s2, int len2, uint length); -ZEND_API int zend_u_binary_strcasecmp(UChar *s1, int len1, UChar *s2, int len2); -ZEND_API int zend_u_binary_strncasecmp(UChar *s1, int len1, UChar *s2, int len2, uint length); - -ZEND_API void zendi_smart_strcmp(zval *result, zval *s1, zval *s2); -ZEND_API void zendi_u_smart_strcmp(zval *result, zval *s1, zval *s2); -ZEND_API void zend_compare_symbol_tables(zval *result, HashTable *ht1, HashTable *ht2 TSRMLS_DC); -ZEND_API void zend_compare_arrays(zval *result, zval *a1, zval *a2 TSRMLS_DC); -ZEND_API void zend_compare_objects(zval *result, zval *o1, zval *o2 TSRMLS_DC); - -ZEND_API int zend_atoi(const char *str, int str_len); - -ZEND_API void zend_locale_sprintf_double(zval *op ZEND_FILE_LINE_DC); -END_EXTERN_C() -#define convert_to_ex_master(ppzv, lower_type, upper_type) \ - if (Z_TYPE_PP(ppzv)!=IS_##upper_type) { \ - SEPARATE_ZVAL_IF_NOT_REF(ppzv); \ - convert_to_##lower_type(*ppzv); \ - } - -#define convert_to_explicit_type(pzv, type) \ - do { \ - switch (type) { \ - case IS_NULL: \ - convert_to_null(pzv); \ - break; \ - case IS_LONG: \ - convert_to_long(pzv); \ - break; \ - case IS_DOUBLE: \ - convert_to_double(pzv); \ - break; \ - case IS_BOOL: \ - convert_to_boolean(pzv); \ - break; \ - case IS_ARRAY: \ - convert_to_array(pzv); \ - break; \ - case IS_OBJECT: \ - convert_to_object(pzv); \ - break; \ - case IS_STRING: \ - convert_to_string(pzv); \ - break; \ - case IS_UNICODE: \ - convert_to_unicode(pzv); \ - break; \ - default: \ - assert(0); \ - break; \ - } \ - } while (0); \ - -#define convert_to_explicit_type_ex(ppzv, str_type) \ - if (Z_TYPE_PP(ppzv) != str_type) { \ - SEPARATE_ZVAL_IF_NOT_REF(ppzv); \ - convert_to_explicit_type(*ppzv, str_type); \ - } - -#define convert_to_boolean_ex(ppzv) convert_to_ex_master(ppzv, boolean, BOOL) -#define convert_to_long_ex(ppzv) convert_to_ex_master(ppzv, long, LONG) -#define convert_to_double_ex(ppzv) convert_to_ex_master(ppzv, double, DOUBLE) -#define convert_to_string_ex(ppzv) convert_to_ex_master(ppzv, string, STRING) -#define convert_to_unicode_ex(ppzv) convert_to_ex_master(ppzv, unicode, UNICODE) -#define convert_to_array_ex(ppzv) convert_to_ex_master(ppzv, array, ARRAY) -#define convert_to_object_ex(ppzv) convert_to_ex_master(ppzv, object, OBJECT) -#define convert_to_null_ex(ppzv) convert_to_ex_master(ppzv, null, NULL) -#define convert_to_text_ex(ppzv) if (UG(unicode)) {convert_to_unicode_ex(ppzv);} else {convert_to_string_ex(ppzv);} - -#define convert_to_string_with_converter_ex(ppzv, conv) \ - if (Z_TYPE_PP(ppzv) != IS_STRING) { \ - SEPARATE_ZVAL_IF_NOT_REF(ppzv); \ - convert_to_string_with_converter(*ppzv, conv); \ - } - -#define convert_scalar_to_number_ex(ppzv) \ - if (Z_TYPE_PP(ppzv)!=IS_LONG && Z_TYPE_PP(ppzv)!=IS_DOUBLE) { \ - if (!(*ppzv)->is_ref) { \ - SEPARATE_ZVAL(ppzv); \ - } \ - convert_scalar_to_number(*ppzv TSRMLS_CC); \ - } - - -#define Z_LVAL(zval) (zval).value.lval -#define Z_BVAL(zval) ((zend_bool)(zval).value.lval) -#define Z_DVAL(zval) (zval).value.dval -#define Z_STRVAL(zval) (zval).value.str.val -#define Z_STRLEN(zval) (zval).value.str.len -#define Z_USTRVAL(zval) (zval).value.ustr.val -#define Z_USTRLEN(zval) (zval).value.ustr.len -#define Z_USTRCPLEN(zval) (u_countChar32((zval).value.ustr.val, (zval).value.ustr.len)) -#define Z_ARRVAL(zval) (zval).value.ht -#define Z_OBJVAL(zval) (zval).value.obj -#define Z_OBJ_HANDLE(zval) Z_OBJVAL(zval).handle -#define Z_OBJ_HT(zval) Z_OBJVAL(zval).handlers -#define Z_OBJCE(zval) zend_get_class_entry(&(zval) TSRMLS_CC) -#define Z_OBJPROP(zval) Z_OBJ_HT((zval))->get_properties(&(zval) TSRMLS_CC) -#define Z_OBJ_HANDLER(zval, hf) Z_OBJ_HT((zval))->hf -#define Z_RESVAL(zval) (zval).value.lval -#define Z_UNIVAL(zval) (zval).value.uni.val -#define Z_UNILEN(zval) (zval).value.uni.len -#define Z_OBJDEBUG(zval,is_tmp) (Z_OBJ_HANDLER((zval),get_debug_info)?Z_OBJ_HANDLER((zval),get_debug_info)(&(zval),&is_tmp TSRMLS_CC):(is_tmp=0,Z_OBJ_HANDLER((zval),get_properties)?Z_OBJPROP(zval):NULL)) - -#define Z_LVAL_P(zval_p) Z_LVAL(*zval_p) -#define Z_BVAL_P(zval_p) Z_BVAL(*zval_p) -#define Z_DVAL_P(zval_p) Z_DVAL(*zval_p) -#define Z_STRVAL_P(zval_p) Z_STRVAL(*zval_p) -#define Z_STRLEN_P(zval_p) Z_STRLEN(*zval_p) -#define Z_USTRVAL_P(zval_p) Z_USTRVAL(*zval_p) -#define Z_USTRLEN_P(zval_p) Z_USTRLEN(*zval_p) -#define Z_USTRCPLEN_P(zval_p) Z_USTRCPLEN(*zval_p) -#define Z_ARRVAL_P(zval_p) Z_ARRVAL(*zval_p) -#define Z_OBJPROP_P(zval_p) Z_OBJPROP(*zval_p) -#define Z_OBJCE_P(zval_p) Z_OBJCE(*zval_p) -#define Z_RESVAL_P(zval_p) Z_RESVAL(*zval_p) -#define Z_OBJVAL_P(zval_p) Z_OBJVAL(*zval_p) -#define Z_OBJ_HANDLE_P(zval_p) Z_OBJ_HANDLE(*zval_p) -#define Z_OBJ_HT_P(zval_p) Z_OBJ_HT(*zval_p) -#define Z_OBJ_HANDLER_P(zval_p, h) Z_OBJ_HANDLER(*zval_p, h) -#define Z_UNIVAL_P(zval_p) Z_UNIVAL(*zval_p) -#define Z_UNILEN_P(zval_p) Z_UNILEN(*zval_p) -#define Z_OBJDEBUG_P(zval_p,is_tmp) Z_OBJDEBUG(*zval_p,is_tmp) - -#define Z_LVAL_PP(zval_pp) Z_LVAL(**zval_pp) -#define Z_BVAL_PP(zval_pp) Z_BVAL(**zval_pp) -#define Z_DVAL_PP(zval_pp) Z_DVAL(**zval_pp) -#define Z_STRVAL_PP(zval_pp) Z_STRVAL(**zval_pp) -#define Z_STRLEN_PP(zval_pp) Z_STRLEN(**zval_pp) -#define Z_USTRVAL_PP(zval_pp) Z_USTRVAL(**zval_pp) -#define Z_USTRLEN_PP(zval_pp) Z_USTRLEN(**zval_pp) -#define Z_USTRCPLEN_PP(zval_pp) Z_USTRCPLEN(**zval_pp) -#define Z_ARRVAL_PP(zval_pp) Z_ARRVAL(**zval_pp) -#define Z_OBJPROP_PP(zval_pp) Z_OBJPROP(**zval_pp) -#define Z_OBJCE_PP(zval_pp) Z_OBJCE(**zval_pp) -#define Z_RESVAL_PP(zval_pp) Z_RESVAL(**zval_pp) -#define Z_OBJVAL_PP(zval_pp) Z_OBJVAL(**zval_pp) -#define Z_OBJ_HANDLE_PP(zval_p) Z_OBJ_HANDLE(**zval_p) -#define Z_OBJ_HT_PP(zval_p) Z_OBJ_HT(**zval_p) -#define Z_OBJ_HANDLER_PP(zval_p, h) Z_OBJ_HANDLER(**zval_p, h) -#define Z_UNIVAL_PP(zval_pp) Z_UNIVAL(**zval_pp) -#define Z_UNILEN_PP(zval_pp) Z_UNILEN(**zval_pp) -#define Z_OBJDEBUG_PP(zval_pp,is_tmp) Z_OBJDEBUG(**zval_pp,is_tmp) - -#define Z_TYPE(zval) (zval).type -#define Z_TYPE_P(zval_p) Z_TYPE(*zval_p) -#define Z_TYPE_PP(zval_pp) Z_TYPE(**zval_pp) - -#if HAVE_SETLOCALE && defined(ZEND_WIN32) && !defined(ZTS) && defined(_MSC_VER) && (_MSC_VER >= 1400) -/* This is performance improvement of tolower() on Windows and VC2005 - * Gives 10-18% on bench.php - */ -#define ZEND_USE_TOLOWER_L 1 -#endif - -#ifdef ZEND_USE_TOLOWER_L -ZEND_API void zend_update_current_locale(); -#else -#define zend_update_current_locale() -#endif - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_ptr_stack.c b/Zend/zend_ptr_stack.c deleted file mode 100644 index 2a539c27200be..0000000000000 --- a/Zend/zend_ptr_stack.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#include "zend.h" -#include "zend_ptr_stack.h" -#ifdef HAVE_STDARG_H -# include -#endif - -ZEND_API void zend_ptr_stack_init(zend_ptr_stack *stack) -{ - stack->top_element = stack->elements = (void **) emalloc(sizeof(void *)*PTR_STACK_BLOCK_SIZE); - stack->max = PTR_STACK_BLOCK_SIZE; - stack->top = 0; -} - - -ZEND_API void zend_ptr_stack_n_push(zend_ptr_stack *stack, int count, ...) -{ - va_list ptr; - void *elem; - - ZEND_PTR_STACK_RESIZE_IF_NEEDED(stack, count) - - va_start(ptr, count); - while (count>0) { - elem = va_arg(ptr, void *); - stack->top++; - *(stack->top_element++) = elem; - count--; - } - va_end(ptr); -} - - -ZEND_API void zend_ptr_stack_n_pop(zend_ptr_stack *stack, int count, ...) -{ - va_list ptr; - void **elem; - - va_start(ptr, count); - while (count>0) { - elem = va_arg(ptr, void **); - *elem = *(--stack->top_element); - stack->top--; - count--; - } - va_end(ptr); -} - - - -ZEND_API void zend_ptr_stack_destroy(zend_ptr_stack *stack) -{ - if (stack->elements) { - efree(stack->elements); - } -} - - -ZEND_API void zend_ptr_stack_apply(zend_ptr_stack *stack, void (*func)(void *)) -{ - int i = stack->top; - - while (--i >= 0) { - func(stack->elements[i]); - } -} - - -ZEND_API void zend_ptr_stack_clean(zend_ptr_stack *stack, void (*func)(void *), zend_bool free_elements) -{ - zend_ptr_stack_apply(stack, func); - if (free_elements) { - int i = stack->top; - - while (--i >= 0) { - efree(stack->elements[i]); - } - } - stack->top = 0; - stack->top_element = stack->elements; -} - - -ZEND_API int zend_ptr_stack_num_elements(zend_ptr_stack *stack) -{ - return stack->top; -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_ptr_stack.h b/Zend/zend_ptr_stack.h deleted file mode 100644 index 452ff635c6a81..0000000000000 --- a/Zend/zend_ptr_stack.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_PTR_STACK_H -#define ZEND_PTR_STACK_H - -typedef struct _zend_ptr_stack { - int top, max; - void **elements; - void **top_element; -} zend_ptr_stack; - - -#define PTR_STACK_BLOCK_SIZE 64 - -BEGIN_EXTERN_C() -ZEND_API void zend_ptr_stack_init(zend_ptr_stack *stack); -ZEND_API void zend_ptr_stack_n_push(zend_ptr_stack *stack, int count, ...); -ZEND_API void zend_ptr_stack_n_pop(zend_ptr_stack *stack, int count, ...); -ZEND_API void zend_ptr_stack_destroy(zend_ptr_stack *stack); -ZEND_API void zend_ptr_stack_apply(zend_ptr_stack *stack, void (*func)(void *)); -ZEND_API void zend_ptr_stack_clean(zend_ptr_stack *stack, void (*func)(void *), zend_bool free_elements); -ZEND_API int zend_ptr_stack_num_elements(zend_ptr_stack *stack); -END_EXTERN_C() - -#define ZEND_PTR_STACK_RESIZE_IF_NEEDED(stack, count) \ - if (stack->top+count > stack->max) { \ - /* we need to allocate more memory */ \ - stack->max *= 2; \ - stack->max += count; \ - stack->elements = (void **) erealloc(stack->elements, (sizeof(void *) * (stack->max))); \ - stack->top_element = stack->elements+stack->top; \ - } - -/* Not doing this with a macro because of the loop unrolling in the element assignment. - Just using a macro for 3 in the body for readability sake. */ -static inline void zend_ptr_stack_3_push(zend_ptr_stack *stack, void *a, void *b, void *c) -{ -#define ZEND_PTR_STACK_NUM_ARGS 3 - - ZEND_PTR_STACK_RESIZE_IF_NEEDED(stack, ZEND_PTR_STACK_NUM_ARGS) - - stack->top += ZEND_PTR_STACK_NUM_ARGS; - *(stack->top_element++) = a; - *(stack->top_element++) = b; - *(stack->top_element++) = c; - -#undef ZEND_PTR_STACK_NUM_ARGS -} - -static inline void zend_ptr_stack_2_push(zend_ptr_stack *stack, void *a, void *b) -{ -#define ZEND_PTR_STACK_NUM_ARGS 2 - - ZEND_PTR_STACK_RESIZE_IF_NEEDED(stack, ZEND_PTR_STACK_NUM_ARGS) - - stack->top += ZEND_PTR_STACK_NUM_ARGS; - *(stack->top_element++) = a; - *(stack->top_element++) = b; - -#undef ZEND_PTR_STACK_NUM_ARGS -} - -static inline void zend_ptr_stack_3_pop(zend_ptr_stack *stack, void **a, void **b, void **c) -{ - *a = *(--stack->top_element); - *b = *(--stack->top_element); - *c = *(--stack->top_element); - stack->top -= 3; -} - -static inline void zend_ptr_stack_2_pop(zend_ptr_stack *stack, void **a, void **b) -{ - *a = *(--stack->top_element); - *b = *(--stack->top_element); - stack->top -= 2; -} - -static inline void zend_ptr_stack_push(zend_ptr_stack *stack, void *ptr) -{ - ZEND_PTR_STACK_RESIZE_IF_NEEDED(stack, 1) - - stack->top++; - *(stack->top_element++) = ptr; -} - -static inline void *zend_ptr_stack_pop(zend_ptr_stack *stack) -{ - stack->top--; - return *(--stack->top_element); -} - -#endif /* ZEND_PTR_STACK_H */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_qsort.c b/Zend/zend_qsort.c deleted file mode 100644 index 54f67bb5c9504..0000000000000 --- a/Zend/zend_qsort.c +++ /dev/null @@ -1,127 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Sterling Hughes | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#include "zend.h" - -#include - -#define QSORT_STACK_SIZE (sizeof(size_t) * CHAR_BIT) - -static void _zend_qsort_swap(void *a, void *b, size_t siz) -{ - register char *tmp_a_char; - register char *tmp_b_char; - register int *tmp_a_int; - register int *tmp_b_int; - register size_t i; - int t_i; - char t_c; - - tmp_a_int = (int *) a; - tmp_b_int = (int *) b; - - for (i = sizeof(int); i <= siz; i += sizeof(int)) { - t_i = *tmp_a_int; - *tmp_a_int++ = *tmp_b_int; - *tmp_b_int++ = t_i; - } - - tmp_a_char = (char *) tmp_a_int; - tmp_b_char = (char *) tmp_b_int; - - for (i = i - sizeof(int) + 1; i <= siz; ++i) { - t_c = *tmp_a_char; - *tmp_a_char++ = *tmp_b_char; - *tmp_b_char++ = t_c; - } -} - -ZEND_API void zend_qsort(void *base, size_t nmemb, size_t siz, compare_func_t compare TSRMLS_DC) -{ - void *begin_stack[QSORT_STACK_SIZE]; - void *end_stack[QSORT_STACK_SIZE]; - register char *begin; - register char *end; - register char *seg1; - register char *seg2; - register char *seg2p; - register int loop; - uint offset; - - begin_stack[0] = (char *) base; - end_stack[0] = (char *) base + ((nmemb - 1) * siz); - - for (loop = 0; loop >= 0; --loop) { - begin = begin_stack[loop]; - end = end_stack[loop]; - - while (begin < end) { - offset = (end - begin) >> 1; - _zend_qsort_swap(begin, begin + (offset - (offset % siz)), siz); - - seg1 = begin + siz; - seg2 = end; - - while (1) { - for (; seg1 < seg2 && compare(begin, seg1 TSRMLS_CC) > 0; - seg1 += siz); - - for (; seg2 >= seg1 && compare(seg2, begin TSRMLS_CC) > 0; - seg2 -= siz); - - if (seg1 >= seg2) - break; - - _zend_qsort_swap(seg1, seg2, siz); - - seg1 += siz; - seg2 -= siz; - } - - _zend_qsort_swap(begin, seg2, siz); - - seg2p = seg2; - - if ((seg2p - begin) <= (end - seg2p)) { - if ((seg2p + siz) < end) { - begin_stack[loop] = seg2p + siz; - end_stack[loop++] = end; - } - end = seg2p - siz; - } - else { - if ((seg2p - siz) > begin) { - begin_stack[loop] = begin; - end_stack[loop++] = seg2p - siz; - } - begin = seg2p + siz; - } - } - } -} - -/* - * Local Variables: - * c-basic-offset: 4 - * tab-width: 4 - * End: - * vim600: fdm=marker - * vim: noet sw=4 ts=4 - */ diff --git a/Zend/zend_qsort.h b/Zend/zend_qsort.h deleted file mode 100644 index 620f9dd7c7d3b..0000000000000 --- a/Zend/zend_qsort.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Sterling Hughes | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_QSORT_H -#define ZEND_QSORT_H - -BEGIN_EXTERN_C() -ZEND_API void zend_qsort(void *base, size_t nmemb, size_t siz, compare_func_t compare TSRMLS_DC); -END_EXTERN_C() - -#endif /* ZEND_QSORT_H */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_sprintf.c b/Zend/zend_sprintf.c deleted file mode 100644 index 64fcb26fa2e1e..0000000000000 --- a/Zend/zend_sprintf.c +++ /dev/null @@ -1,49 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#include - -#include "zend.h" - -#ifdef HAVE_STDARG_H -# include -#endif - -#if ZEND_BROKEN_SPRINTF -int zend_sprintf(char *buffer, const char *format, ...) -{ - va_list args; - - va_start(args, format); - vsprintf(buffer, format, args); - va_end(args); - - return strlen(buffer); -} -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_stack.c b/Zend/zend_stack.c deleted file mode 100644 index 37299530822e9..0000000000000 --- a/Zend/zend_stack.c +++ /dev/null @@ -1,173 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#include "zend.h" -#include "zend_stack.h" - -ZEND_API int zend_stack_init(zend_stack *stack) -{ - stack->top = 0; - stack->elements = (void **) emalloc(sizeof(void **) * STACK_BLOCK_SIZE); - if (!stack->elements) { - return FAILURE; - } else { - stack->max = STACK_BLOCK_SIZE; - return SUCCESS; - } -} - -ZEND_API int zend_stack_push(zend_stack *stack, void *element, int size) -{ - if (stack->top >= stack->max) { /* we need to allocate more memory */ - stack->elements = (void **) erealloc(stack->elements, - (sizeof(void **) * (stack->max += STACK_BLOCK_SIZE))); - if (!stack->elements) { - return FAILURE; - } - } - stack->elements[stack->top] = (void *) emalloc(size); - memcpy(stack->elements[stack->top], element, size); - return stack->top++; -} - - -ZEND_API int zend_stack_top(zend_stack *stack, void **element) -{ - if (stack->top > 0) { - *element = stack->elements[stack->top - 1]; - return SUCCESS; - } else { - *element = NULL; - return FAILURE; - } -} - - -ZEND_API int zend_stack_del_top(zend_stack *stack) -{ - if (stack->top > 0) { - efree(stack->elements[--stack->top]); - } - return SUCCESS; -} - - -ZEND_API int zend_stack_int_top(zend_stack *stack) -{ - int *e; - - if (zend_stack_top(stack, (void **) &e) == FAILURE) { - return FAILURE; /* this must be a negative number, since negative numbers can't be address numbers */ - } else { - return *e; - } -} - - -ZEND_API int zend_stack_is_empty(zend_stack *stack) -{ - if (stack->top == 0) { - return 1; - } else { - return 0; - } -} - - -ZEND_API int zend_stack_destroy(zend_stack *stack) -{ - register int i; - - for (i = 0; i < stack->top; i++) { - efree(stack->elements[i]); - } - - if (stack->elements) { - efree(stack->elements); - } - return SUCCESS; -} - - -ZEND_API void **zend_stack_base(zend_stack *stack) -{ - return stack->elements; -} - - -ZEND_API int zend_stack_count(zend_stack *stack) -{ - return stack->top; -} - - -ZEND_API void zend_stack_apply(zend_stack *stack, int type, int (*apply_function)(void *element)) -{ - int i; - - switch (type) { - case ZEND_STACK_APPLY_TOPDOWN: - for (i=stack->top-1; i>=0; i--) { - if (apply_function(stack->elements[i])) { - break; - } - } - break; - case ZEND_STACK_APPLY_BOTTOMUP: - for (i=0; itop; i++) { - if (apply_function(stack->elements[i])) { - break; - } - } - break; - } -} - - -ZEND_API void zend_stack_apply_with_argument(zend_stack *stack, int type, int (*apply_function)(void *element, void *arg), void *arg) -{ - int i; - - switch (type) { - case ZEND_STACK_APPLY_TOPDOWN: - for (i=stack->top-1; i>=0; i--) { - if (apply_function(stack->elements[i], arg)) { - break; - } - } - break; - case ZEND_STACK_APPLY_BOTTOMUP: - for (i=0; itop; i++) { - if (apply_function(stack->elements[i], arg)) { - break; - } - } - break; - } -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_stack.h b/Zend/zend_stack.h deleted file mode 100644 index 581421f38bce2..0000000000000 --- a/Zend/zend_stack.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_STACK_H -#define ZEND_STACK_H - -typedef struct _zend_stack { - int top, max; - void **elements; -} zend_stack; - - -#define STACK_BLOCK_SIZE 64 - -BEGIN_EXTERN_C() -ZEND_API int zend_stack_init(zend_stack *stack); -ZEND_API int zend_stack_push(zend_stack *stack, void *element, int size); -ZEND_API int zend_stack_top(zend_stack *stack, void **element); -ZEND_API int zend_stack_del_top(zend_stack *stack); -ZEND_API int zend_stack_int_top(zend_stack *stack); -ZEND_API int zend_stack_is_empty(zend_stack *stack); -ZEND_API int zend_stack_destroy(zend_stack *stack); -ZEND_API void **zend_stack_base(zend_stack *stack); -ZEND_API int zend_stack_count(zend_stack *stack); -ZEND_API void zend_stack_apply(zend_stack *stack, int type, int (*apply_function)(void *element)); -ZEND_API void zend_stack_apply_with_argument(zend_stack *stack, int type, int (*apply_function)(void *element, void *arg), void *arg); -END_EXTERN_C() - -#define ZEND_STACK_APPLY_TOPDOWN 1 -#define ZEND_STACK_APPLY_BOTTOMUP 2 - -#endif /* ZEND_STACK_H */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_static_allocator.c b/Zend/zend_static_allocator.c deleted file mode 100644 index b32f62ee846fd..0000000000000 --- a/Zend/zend_static_allocator.c +++ /dev/null @@ -1,84 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#include "zend_static_allocator.h" - -/* Not checking emalloc() and erealloc() return values as they are supposed to bailout */ - -inline static void block_init(Block *block, zend_uint block_size) -{ - block->pos = block->bp = (char *) emalloc(block_size); - block->end = block->bp + block_size; -} - -inline static char *block_allocate(Block *block, zend_uint size) -{ - char *retval = block->pos; - if ((block->pos += size) >= block->end) { - return (char *)NULL; - } - return retval; -} - -inline static void block_destroy(Block *block) -{ - efree(block->bp); -} - -void static_allocator_init(StaticAllocator *sa) -{ - sa->Blocks = (Block *) emalloc(sizeof(Block)); - block_init(sa->Blocks, ALLOCATOR_BLOCK_SIZE); - sa->num_blocks = 1; - sa->current_block = 0; -} - -char *static_allocator_allocate(StaticAllocator *sa, zend_uint size) -{ - char *retval; - - retval = block_allocate(&sa->Blocks[sa->current_block], size); - if (retval) { - return retval; - } - sa->Blocks = (Block *) erealloc(sa->Blocks, ++sa->num_blocks); - sa->current_block++; - block_init(&sa->Blocks[sa->current_block], (size > ALLOCATOR_BLOCK_SIZE) ? size : ALLOCATOR_BLOCK_SIZE); - retval = block_allocate(&sa->Blocks[sa->current_block], size); - return retval; -} - -void static_allocator_destroy(StaticAllocator *sa) -{ - zend_uint i; - - for (i=0; inum_blocks; i++) { - block_free(&sa->Blocks[i]); - } - efree(sa->Blocks); -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_static_allocator.h b/Zend/zend_static_allocator.h deleted file mode 100644 index a4721cf8bebc7..0000000000000 --- a/Zend/zend_static_allocator.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_STATIC_ALLOCATOR_H -#define ZEND_STATIC_ALLOCATOR_H - -#define ALLOCATOR_BLOCK_SIZE 400000 - -/* Temporary */ -typedef unsigned int zend_uint; -#define emalloc(s) malloc(s) -#define efree(p) free(p) - -typedef struct _Block { - char *bp; - char *pos; - char *end; -} Block; - -typedef struct _StaticAllocator { - Block *Blocks; - zend_uint num_blocks; - zend_uint current_block; -} StaticAllocator; - -void static_allocator_init(StaticAllocator *sa); -char *static_allocator_allocate(StaticAllocator *sa, zend_uint size); -void static_allocator_destroy(StaticAllocator *sa); - -#endif /* ZEND_STATIC_ALLOCATOR_H */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_stream.c b/Zend/zend_stream.c deleted file mode 100644 index 1d717b2bf346a..0000000000000 --- a/Zend/zend_stream.c +++ /dev/null @@ -1,142 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Wez Furlong | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - - -#include "zend.h" -#include "zend_compile.h" - -ZEND_DLIMPORT int isatty(int fd); - -static size_t zend_stream_stdio_reader(void *handle, char *buf, size_t len TSRMLS_DC) -{ - return fread(buf, 1, len, (FILE*)handle); -} - -static void zend_stream_stdio_closer(void *handle TSRMLS_DC) -{ - if ((FILE*)handle != stdin) - fclose((FILE*)handle); -} - -static long zend_stream_stdio_fteller(void *handle TSRMLS_DC) -{ - return ftell((FILE*) handle); -} - - -ZEND_API int zend_stream_open(const char *filename, zend_file_handle *handle TSRMLS_DC) -{ - if (zend_stream_open_function) { - return zend_stream_open_function(filename, handle TSRMLS_CC); - } - handle->type = ZEND_HANDLE_FP; - handle->opened_path = NULL; - handle->handle.fp = zend_fopen(filename, &handle->opened_path); - handle->filename = (char *)filename; - handle->free_filename = 0; - - return (handle->handle.fp) ? SUCCESS : FAILURE; -} - -ZEND_API int zend_stream_fixup(zend_file_handle *file_handle TSRMLS_DC) -{ - switch (file_handle->type) { - case ZEND_HANDLE_FILENAME: - if (FAILURE == zend_stream_open(file_handle->filename, file_handle TSRMLS_CC)) { - return FAILURE; - } - break; - - case ZEND_HANDLE_FD: - file_handle->handle.fp = fdopen(file_handle->handle.fd, "rb"); - file_handle->type = ZEND_HANDLE_FP; - break; - - case ZEND_HANDLE_FP: - file_handle->handle.fp = file_handle->handle.fp; - break; - - case ZEND_HANDLE_STREAM: - /* nothing to do */ - return SUCCESS; - - default: - return FAILURE; - } - if (file_handle->type == ZEND_HANDLE_FP) { - if (!file_handle->handle.fp) { - return FAILURE; - } - - /* make compatible with stream */ - file_handle->handle.stream.handle = file_handle->handle.fp; - file_handle->handle.stream.reader = zend_stream_stdio_reader; - file_handle->handle.stream.closer = zend_stream_stdio_closer; - file_handle->handle.stream.fteller = zend_stream_stdio_fteller; - - file_handle->handle.stream.interactive = isatty(fileno((FILE *)file_handle->handle.stream.handle)); - } - return SUCCESS; -} - -ZEND_API size_t zend_stream_read(zend_file_handle *file_handle, char *buf, size_t len TSRMLS_DC) -{ - if (file_handle->handle.stream.interactive) { - int c = '*'; - size_t n; - -#ifdef NETWARE - /* - c != 4 check is there as fread of a character in NetWare LibC gives 4 upon ^D character. - Ascii value 4 is actually EOT character which is not defined anywhere in the LibC - or else we can use instead of hardcoded 4. - */ - for ( n = 0; n < len && (c = zend_stream_getc( file_handle TSRMLS_CC)) != EOF && c != 4 && c != '\n'; ++n ) -#else - for ( n = 0; n < len && (c = zend_stream_getc( file_handle TSRMLS_CC)) != EOF && c != '\n'; ++n ) -#endif - buf[n] = (char) c; - if ( c == '\n' ) - buf[n++] = (char) c; - - return n; - } - return file_handle->handle.stream.reader(file_handle->handle.stream.handle, buf, len TSRMLS_CC); -} - -ZEND_API int zend_stream_getc(zend_file_handle *file_handle TSRMLS_DC) -{ - char buf; - - if (file_handle->handle.stream.reader(file_handle->handle.stream.handle, &buf, sizeof(buf) TSRMLS_CC)) { - return (int)buf; - } - return EOF; -} - -ZEND_API int zend_stream_ferror(zend_file_handle *file_handle TSRMLS_DC) -{ - return 0; -} - -ZEND_API long zend_stream_ftell(zend_file_handle *file_handle TSRMLS_DC) -{ - return file_handle->handle.stream.fteller(file_handle->handle.stream.handle TSRMLS_CC); -} diff --git a/Zend/zend_stream.h b/Zend/zend_stream.h deleted file mode 100644 index 31c7bcc2bc426..0000000000000 --- a/Zend/zend_stream.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Wez Furlong | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_STREAM_H -#define ZEND_STREAM_H - -/* Lightweight stream implementation for the ZE scanners. - * These functions are private to the engine. - * */ - -typedef size_t (*zend_stream_reader_t)(void *handle, char *buf, size_t len TSRMLS_DC); -typedef void (*zend_stream_closer_t)(void *handle TSRMLS_DC); -typedef long (*zend_stream_fteller_t)(void *handle TSRMLS_DC); - -typedef struct _zend_stream { - void *handle; - zend_stream_reader_t reader; - zend_stream_closer_t closer; - zend_stream_fteller_t fteller; - int interactive; -} zend_stream; - -typedef struct _zend_file_handle { - zend_uchar type; - char *filename; - char *opened_path; - union { - int fd; - FILE *fp; - zend_stream stream; - } handle; - zend_bool free_filename; -} zend_file_handle; - -BEGIN_EXTERN_C() -ZEND_API int zend_stream_open(const char *filename, zend_file_handle *handle TSRMLS_DC); -ZEND_API int zend_stream_ferror(zend_file_handle *file_handle TSRMLS_DC); -ZEND_API int zend_stream_getc(zend_file_handle *file_handle TSRMLS_DC); -ZEND_API size_t zend_stream_read(zend_file_handle *file_handle, char *buf, size_t len TSRMLS_DC); -ZEND_API long zend_stream_ftell(zend_file_handle *file_handle TSRMLS_DC); -ZEND_API int zend_stream_fixup(zend_file_handle *file_handle TSRMLS_DC); -END_EXTERN_C() - -#define zend_stream_close(handle) zend_file_handle_dtor((handle)) - -#endif diff --git a/Zend/zend_strtod.c b/Zend/zend_strtod.c deleted file mode 100644 index 0328416dfe3cb..0000000000000 --- a/Zend/zend_strtod.c +++ /dev/null @@ -1,2674 +0,0 @@ -/**************************************************************** - * - * The author of this software is David M. Gay. - * - * Copyright (c) 1991 by AT&T. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose without fee is hereby granted, provided that this entire notice - * is included in all copies of any software which is or includes a copy - * or modification of this software and in all copies of the supporting - * documentation for such software. - * - * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR AT&T MAKES ANY - * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - * - ***************************************************************/ - -/* Please send bug reports to - David M. Gay - AT&T Bell Laboratories, Room 2C-463 - 600 Mountain Avenue - Murray Hill, NJ 07974-2070 - U.S.A. - dmg@research.att.com or research!dmg - */ - -/* strtod for IEEE-, VAX-, and IBM-arithmetic machines. - * - * This strtod returns a nearest machine number to the input decimal - * string (or sets errno to ERANGE). With IEEE arithmetic, ties are - * broken by the IEEE round-even rule. Otherwise ties are broken by - * biased rounding (add half and chop). - * - * Inspired loosely by William D. Clinger's paper "How to Read Floating - * Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 92-101]. - * - * Modifications: - * - * 1. We only require IEEE, IBM, or VAX double-precision - * arithmetic (not IEEE double-extended). - * 2. We get by with floating-point arithmetic in a case that - * Clinger missed -- when we're computing d * 10^n - * for a small integer d and the integer n is not too - * much larger than 22 (the maximum integer k for which - * we can represent 10^k exactly), we may be able to - * compute (d*10^k) * 10^(e-k) with just one roundoff. - * 3. Rather than a bit-at-a-time adjustment of the binary - * result in the hard case, we use floating-point - * arithmetic to determine the adjustment to within - * one bit; only in really hard cases do we need to - * compute a second residual. - * 4. Because of 3., we don't need a large table of powers of 10 - * for ten-to-e (just some small tables, e.g. of 10^k - * for 0 <= k <= 22). - */ - -/* - * #define IEEE_LITTLE_ENDIAN for IEEE-arithmetic machines where the least - * significant byte has the lowest address. - * #define IEEE_BIG_ENDIAN for IEEE-arithmetic machines where the most - * significant byte has the lowest address. - * #define Long int on machines with 32-bit ints and 64-bit longs. - * #define Sudden_Underflow for IEEE-format machines without gradual - * underflow (i.e., that flush to zero on underflow). - * #define IBM for IBM mainframe-style floating-point arithmetic. - * #define VAX for VAX-style floating-point arithmetic. - * #define Unsigned_Shifts if >> does treats its left operand as unsigned. - * #define No_leftright to omit left-right logic in fast floating-point - * computation of dtoa. - * #define Check_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3. - * #define RND_PRODQUOT to use rnd_prod and rnd_quot (assembly routines - * that use extended-precision instructions to compute rounded - * products and quotients) with IBM. - * #define ROUND_BIASED for IEEE-format with biased rounding. - * #define Inaccurate_Divide for IEEE-format with correctly rounded - * products but inaccurate quotients, e.g., for Intel i860. - * #define Just_16 to store 16 bits per 32-bit Long when doing high-precision - * integer arithmetic. Whether this speeds things up or slows things - * down depends on the machine and the number being converted. - * #define KR_headers for old-style C function headers. - * #define Bad_float_h if your system lacks a float.h or if it does not - * define some or all of DBL_DIG, DBL_MAX_10_EXP, DBL_MAX_EXP, - * FLT_RADIX, FLT_ROUNDS, and DBL_MAX. - * #define MALLOC your_malloc, where your_malloc(n) acts like malloc(n) - * if memory is available and otherwise does something you deem - * appropriate. If MALLOC is undefined, malloc will be invoked - * directly -- and assumed always to succeed. - */ - -#include -#include -#include -#include - -#ifdef ZTS -#include -#endif - -#include -#include -#include -#include -#include -#include -#include - -#ifdef HAVE_LOCALE_H -#include -#endif - -#ifdef HAVE_SYS_TYPES_H -#include -#endif - -#if defined(HAVE_INTTYPES_H) -#include -#elif defined(HAVE_STDINT_H) -#include -#endif - -#ifndef HAVE_INT32_T -# if SIZEOF_INT == 4 -typedef int int32_t; -# elif SIZEOF_LONG == 4 -typedef long int int32_t; -# endif -#endif - -#ifndef HAVE_UINT32_T -# if SIZEOF_INT == 4 -typedef unsigned int uint32_t; -# elif SIZEOF_LONG == 4 -typedef unsigned long int uint32_t; -# endif -#endif - -#ifdef WORDS_BIGENDIAN -#define IEEE_BIG_ENDIAN -#else -#define IEEE_LITTLE_ENDIAN -#endif - -#if defined(__arm__) && !defined(__VFP_FP__) -/* - * * Although the CPU is little endian the FP has different - * * byte and word endianness. The byte order is still little endian - * * but the word order is big endian. - * */ -#define IEEE_BIG_ENDIAN -#undef IEEE_LITTLE_ENDIAN -#endif - -#ifdef __vax__ -#define VAX -#endif - -#if defined(_MSC_VER) -#define int32_t __int32 -#define uint32_t unsigned __int32 -#define IEEE_LITTLE_ENDIAN -#endif - -#define Long int32_t -#define ULong uint32_t - -#ifdef __cplusplus -#include "malloc.h" -#include "memory.h" -#else -#ifndef KR_headers -#include "stdlib.h" -#include "string.h" -#include "locale.h" -#else -#include "malloc.h" -#include "memory.h" -#endif -#endif - -#ifdef MALLOC -#ifdef KR_headers -extern char *MALLOC(); -#else -extern void *MALLOC(size_t); -#endif -#else -#define MALLOC malloc -#endif - -#include "ctype.h" -#include "errno.h" - -#ifdef Bad_float_h -#ifdef IEEE_BIG_ENDIAN -#define IEEE_ARITHMETIC -#endif -#ifdef IEEE_LITTLE_ENDIAN -#define IEEE_ARITHMETIC -#endif - -#ifdef IEEE_ARITHMETIC -#define DBL_DIG 15 -#define DBL_MAX_10_EXP 308 -#define DBL_MAX_EXP 1024 -#define FLT_RADIX 2 -#define FLT_ROUNDS 1 -#define DBL_MAX 1.7976931348623157e+308 -#endif - -#ifdef IBM -#define DBL_DIG 16 -#define DBL_MAX_10_EXP 75 -#define DBL_MAX_EXP 63 -#define FLT_RADIX 16 -#define FLT_ROUNDS 0 -#define DBL_MAX 7.2370055773322621e+75 -#endif - -#ifdef VAX -#define DBL_DIG 16 -#define DBL_MAX_10_EXP 38 -#define DBL_MAX_EXP 127 -#define FLT_RADIX 2 -#define FLT_ROUNDS 1 -#define DBL_MAX 1.7014118346046923e+38 -#endif - - -#ifndef LONG_MAX -#define LONG_MAX 2147483647 -#endif -#else -#include "float.h" -#endif -#ifndef __MATH_H__ -#include "math.h" -#endif - -BEGIN_EXTERN_C() - -#ifndef CONST -#ifdef KR_headers -#define CONST /* blank */ -#else -#define CONST const -#endif -#endif - -#ifdef Unsigned_Shifts -#define Sign_Extend(a,b) if (b < 0) a |= 0xffff0000; -#else -#define Sign_Extend(a,b) /*no-op*/ -#endif - -#if defined(IEEE_LITTLE_ENDIAN) + defined(IEEE_BIG_ENDIAN) + defined(VAX) + \ - defined(IBM) != 1 - Exactly one of IEEE_LITTLE_ENDIAN IEEE_BIG_ENDIAN, VAX, or - IBM should be defined. -#endif - - typedef union { - double d; - ULong ul[2]; - } _double; -#define value(x) ((x).d) -#ifdef IEEE_LITTLE_ENDIAN -#define word0(x) ((x).ul[1]) -#define word1(x) ((x).ul[0]) -#else -#define word0(x) ((x).ul[0]) -#define word1(x) ((x).ul[1]) -#endif - -/* The following definition of Storeinc is appropriate for MIPS processors. - * * An alternative that might be better on some machines is - * * #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff) - * */ -#if defined(IEEE_LITTLE_ENDIAN) + defined(VAX) + defined(__arm__) -#define Storeinc(a,b,c) (((unsigned short *)a)[1] = (unsigned short)b, \ - ((unsigned short *)a)[0] = (unsigned short)c, a++) -#else -#define Storeinc(a,b,c) (((unsigned short *)a)[0] = (unsigned short)b, \ - ((unsigned short *)a)[1] = (unsigned short)c, a++) -#endif - -/* #define P DBL_MANT_DIG */ -/* Ten_pmax = floor(P*log(2)/log(5)) */ -/* Bletch = (highest power of 2 < DBL_MAX_10_EXP) / 16 */ -/* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */ -/* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */ - -#if defined(IEEE_LITTLE_ENDIAN) + defined(IEEE_BIG_ENDIAN) -#define Exp_shift 20 -#define Exp_shift1 20 -#define Exp_msk1 0x100000 -#define Exp_msk11 0x100000 -#define Exp_mask 0x7ff00000 -#define P 53 -#define Bias 1023 -#define IEEE_Arith -#define Emin (-1022) -#define Exp_1 0x3ff00000 -#define Exp_11 0x3ff00000 -#define Ebits 11 -#define Frac_mask 0xfffff -#define Frac_mask1 0xfffff -#define Ten_pmax 22 -#define Bletch 0x10 -#define Bndry_mask 0xfffff -#define Bndry_mask1 0xfffff -#define LSB 1 -#define Sign_bit 0x80000000 -#define Log2P 1 -#define Tiny0 0 -#define Tiny1 1 -#define Quick_max 14 -#define Int_max 14 -#define Infinite(x) (word0(x) == 0x7ff00000) /* sufficient test for here */ -#else -#undef Sudden_Underflow -#define Sudden_Underflow -#ifdef IBM -#define Exp_shift 24 -#define Exp_shift1 24 -#define Exp_msk1 0x1000000 -#define Exp_msk11 0x1000000 -#define Exp_mask 0x7f000000 -#define P 14 -#define Bias 65 -#define Exp_1 0x41000000 -#define Exp_11 0x41000000 -#define Ebits 8 /* exponent has 7 bits, but 8 is the right value in b2d */ -#define Frac_mask 0xffffff -#define Frac_mask1 0xffffff -#define Bletch 4 -#define Ten_pmax 22 -#define Bndry_mask 0xefffff -#define Bndry_mask1 0xffffff -#define LSB 1 -#define Sign_bit 0x80000000 -#define Log2P 4 -#define Tiny0 0x100000 -#define Tiny1 0 -#define Quick_max 14 -#define Int_max 15 -#else /* VAX */ -#define Exp_shift 23 -#define Exp_shift1 7 -#define Exp_msk1 0x80 -#define Exp_msk11 0x800000 -#define Exp_mask 0x7f80 -#define P 56 -#define Bias 129 -#define Exp_1 0x40800000 -#define Exp_11 0x4080 -#define Ebits 8 -#define Frac_mask 0x7fffff -#define Frac_mask1 0xffff007f -#define Ten_pmax 24 -#define Bletch 2 -#define Bndry_mask 0xffff007f -#define Bndry_mask1 0xffff007f -#define LSB 0x10000 -#define Sign_bit 0x8000 -#define Log2P 1 -#define Tiny0 0x80 -#define Tiny1 0 -#define Quick_max 15 -#define Int_max 15 -#endif -#endif - -#ifndef IEEE_Arith -#define ROUND_BIASED -#endif - -#ifdef RND_PRODQUOT -#define rounded_product(a,b) a = rnd_prod(a, b) -#define rounded_quotient(a,b) a = rnd_quot(a, b) -#ifdef KR_headers -extern double rnd_prod(), rnd_quot(); -#else -extern double rnd_prod(double, double), rnd_quot(double, double); -#endif -#else -#define rounded_product(a,b) a *= b -#define rounded_quotient(a,b) a /= b -#endif - -#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1)) -#define Big1 0xffffffff - -#ifndef Just_16 -/* When Pack_32 is not defined, we store 16 bits per 32-bit Long. - * * This makes some inner loops simpler and sometimes saves work - * * during multiplications, but it often seems to make things slightly - * * slower. Hence the default is now to store 32 bits per Long. - * */ -#ifndef Pack_32 -#define Pack_32 -#endif -#endif - -#define Kmax 15 - -struct Bigint { - struct Bigint *next; - int k, maxwds, sign, wds; - ULong x[1]; -}; - -typedef struct Bigint Bigint; - -/* static variables, multithreading fun! */ -static Bigint *freelist[Kmax+1]; -static Bigint *p5s; - -static void destroy_freelist(void); - -#ifdef ZTS - -static MUTEX_T dtoa_mutex; -static MUTEX_T pow5mult_mutex; - -#define _THREAD_PRIVATE_MUTEX_LOCK(x) tsrm_mutex_lock(x); -#define _THREAD_PRIVATE_MUTEX_UNLOCK(x) tsrm_mutex_unlock(x); - -#else - -#define _THREAD_PRIVATE_MUTEX_LOCK(x) -#define _THREAD_PRIVATE_MUTEX_UNLOCK(x) - -#endif /* ZTS */ - -ZEND_API int zend_startup_strtod(void) /* {{{ */ -{ -#ifdef ZTS - dtoa_mutex = tsrm_mutex_alloc(); - pow5mult_mutex = tsrm_mutex_alloc(); -#endif - return 1; -} -/* }}} */ -ZEND_API int zend_shutdown_strtod(void) /* {{{ */ -{ - destroy_freelist(); -#ifdef ZTS - tsrm_mutex_free(dtoa_mutex); - dtoa_mutex = NULL; - - tsrm_mutex_free(pow5mult_mutex); - pow5mult_mutex = NULL; -#endif - return 1; -} -/* }}} */ - -static Bigint * Balloc(int k) /* {{{ */ -{ - int x; - Bigint *rv; - - _THREAD_PRIVATE_MUTEX_LOCK(dtoa_mutex); - if ((rv = freelist[k])) { - freelist[k] = rv->next; - } else { - x = 1 << k; - rv = (Bigint *)MALLOC(sizeof(Bigint) + (x-1)*sizeof(Long)); - rv->k = k; - rv->maxwds = x; - } - _THREAD_PRIVATE_MUTEX_UNLOCK(dtoa_mutex); - rv->sign = rv->wds = 0; - return rv; -} -/* }}} */ - -static void Bfree(Bigint *v) /* {{{ */ -{ - if (v) { - _THREAD_PRIVATE_MUTEX_LOCK(dtoa_mutex); - v->next = freelist[v->k]; - freelist[v->k] = v; - _THREAD_PRIVATE_MUTEX_UNLOCK(dtoa_mutex); - } -} -/* }}} */ - -#define Bcopy(x,y) memcpy((char *)&x->sign, (char *)&y->sign, \ - y->wds*sizeof(Long) + 2*sizeof(int)) - -/* return value is only used as a simple string, so mis-aligned parts - * inside the Bigint are not at risk on strict align architectures - */ -static char * rv_alloc(int i) /* {{{ */ -{ - int j, k, *r; - - j = sizeof(ULong); - for(k = 0; - sizeof(Bigint) - sizeof(ULong) - sizeof(int) + j <= i; - j <<= 1) { - k++; - } - r = (int*)Balloc(k); - *r = k; - return (char *)(r+1); -} -/* }}} */ - -static char * nrv_alloc(char *s, char **rve, int n) /* {{{ */ -{ - char *rv, *t; - - t = rv = rv_alloc(n); - while((*t = *s++) !=0) { - t++; - } - if (rve) { - *rve = t; - } - return rv; -} -/* }}} */ - -static Bigint * multadd(Bigint *b, int m, int a) /* multiply by m and add a */ /* {{{ */ -{ - int i, wds; - ULong *x, y; -#ifdef Pack_32 - ULong xi, z; -#endif - Bigint *b1; - - wds = b->wds; - x = b->x; - i = 0; - do { -#ifdef Pack_32 - xi = *x; - y = (xi & 0xffff) * m + a; - z = (xi >> 16) * m + (y >> 16); - a = (int)(z >> 16); - *x++ = (z << 16) + (y & 0xffff); -#else - y = *x * m + a; - a = (int)(y >> 16); - *x++ = y & 0xffff; -#endif - } - while(++i < wds); - if (a) { - if (wds >= b->maxwds) { - b1 = Balloc(b->k+1); - Bcopy(b1, b); - Bfree(b); - b = b1; - } - b->x[wds++] = a; - b->wds = wds; - } - return b; -} -/* }}} */ - -static int hi0bits(ULong x) /* {{{ */ -{ - int k = 0; - - if (!(x & 0xffff0000)) { - k = 16; - x <<= 16; - } - if (!(x & 0xff000000)) { - k += 8; - x <<= 8; - } - if (!(x & 0xf0000000)) { - k += 4; - x <<= 4; - } - if (!(x & 0xc0000000)) { - k += 2; - x <<= 2; - } - if (!(x & 0x80000000)) { - k++; - if (!(x & 0x40000000)) { - return 32; - } - } - return k; -} -/* }}} */ - -static int lo0bits(ULong *y) /* {{{ */ -{ - int k; - ULong x = *y; - - if (x & 7) { - if (x & 1) { - return 0; - } - if (x & 2) { - *y = x >> 1; - return 1; - } - *y = x >> 2; - return 2; - } - k = 0; - if (!(x & 0xffff)) { - k = 16; - x >>= 16; - } - if (!(x & 0xff)) { - k += 8; - x >>= 8; - } - if (!(x & 0xf)) { - k += 4; - x >>= 4; - } - if (!(x & 0x3)) { - k += 2; - x >>= 2; - } - if (!(x & 1)) { - k++; - x >>= 1; - if (!(x & 1)) { - return 32; - } - } - *y = x; - return k; -} -/* }}} */ - -static Bigint * i2b(int i) /* {{{ */ -{ - Bigint *b; - - b = Balloc(1); - b->x[0] = i; - b->wds = 1; - return b; -} -/* }}} */ - -static Bigint * mult(Bigint *a, Bigint *b) /* {{{ */ -{ - Bigint *c; - int k, wa, wb, wc; - ULong carry, y, z; - ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0; -#ifdef Pack_32 - ULong z2; -#endif - - if (a->wds < b->wds) { - c = a; - a = b; - b = c; - } - k = a->k; - wa = a->wds; - wb = b->wds; - wc = wa + wb; - if (wc > a->maxwds) { - k++; - } - c = Balloc(k); - for(x = c->x, xa = x + wc; x < xa; x++) { - *x = 0; - } - xa = a->x; - xae = xa + wa; - xb = b->x; - xbe = xb + wb; - xc0 = c->x; -#ifdef Pack_32 - for(; xb < xbe; xb++, xc0++) { - if ((y = *xb & 0xffff)) { - x = xa; - xc = xc0; - carry = 0; - do { - z = (*x & 0xffff) * y + (*xc & 0xffff) + carry; - carry = z >> 16; - z2 = (*x++ >> 16) * y + (*xc >> 16) + carry; - carry = z2 >> 16; - Storeinc(xc, z2, z); - } - while(x < xae); - *xc = carry; - } - if ((y = *xb >> 16)) { - x = xa; - xc = xc0; - carry = 0; - z2 = *xc; - do { - z = (*x & 0xffff) * y + (*xc >> 16) + carry; - carry = z >> 16; - Storeinc(xc, z, z2); - z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry; - carry = z2 >> 16; - } - while(x < xae); - *xc = z2; - } - } -#else - for(; xb < xbe; xc0++) { - if (y = *xb++) { - x = xa; - xc = xc0; - carry = 0; - do { - z = *x++ * y + *xc + carry; - carry = z >> 16; - *xc++ = z & 0xffff; - } - while(x < xae); - *xc = carry; - } - } -#endif - for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ; - c->wds = wc; - return c; -} -/* }}} */ - -static Bigint * s2b (CONST char *s, int nd0, int nd, ULong y9) /* {{{ */ -{ - Bigint *b; - int i, k; - Long x, y; - - x = (nd + 8) / 9; - for(k = 0, y = 1; x > y; y <<= 1, k++) ; -#ifdef Pack_32 - b = Balloc(k); - b->x[0] = y9; - b->wds = 1; -#else - b = Balloc(k+1); - b->x[0] = y9 & 0xffff; - b->wds = (b->x[1] = y9 >> 16) ? 2 : 1; -#endif - - i = 9; - if (9 < nd0) { - s += 9; - do b = multadd(b, 10, *s++ - '0'); - while(++i < nd0); - s++; - } else { - s += 10; - } - for(; i < nd; i++) { - b = multadd(b, 10, *s++ - '0'); - } - return b; -} -/* }}} */ - -static Bigint * pow5mult(Bigint *b, int k) /* {{{ */ -{ - Bigint *b1, *p5, *p51; - int i; - static int p05[3] = { 5, 25, 125 }; - - _THREAD_PRIVATE_MUTEX_LOCK(pow5mult_mutex); - if ((i = k & 3)) { - b = multadd(b, p05[i-1], 0); - } - - if (!(k >>= 2)) { - _THREAD_PRIVATE_MUTEX_UNLOCK(pow5mult_mutex); - return b; - } - if (!(p5 = p5s)) { - /* first time */ - p5 = p5s = i2b(625); - p5->next = 0; - } - for(;;) { - if (k & 1) { - b1 = mult(b, p5); - Bfree(b); - b = b1; - } - if (!(k >>= 1)) { - break; - } - if (!(p51 = p5->next)) { - if (!(p51 = p5->next)) { - p51 = p5->next = mult(p5,p5); - p51->next = 0; - } - } - p5 = p51; - } - _THREAD_PRIVATE_MUTEX_UNLOCK(pow5mult_mutex); - return b; -} -/* }}} */ - -static Bigint *lshift(Bigint *b, int k) /* {{{ */ -{ - int i, k1, n, n1; - Bigint *b1; - ULong *x, *x1, *xe, z; - -#ifdef Pack_32 - n = k >> 5; -#else - n = k >> 4; -#endif - k1 = b->k; - n1 = n + b->wds + 1; - for(i = b->maxwds; n1 > i; i <<= 1) { - k1++; - } - b1 = Balloc(k1); - x1 = b1->x; - for(i = 0; i < n; i++) { - *x1++ = 0; - } - x = b->x; - xe = x + b->wds; -#ifdef Pack_32 - if (k &= 0x1f) { - k1 = 32 - k; - z = 0; - do { - *x1++ = *x << k | z; - z = *x++ >> k1; - } - while(x < xe); - if ((*x1 = z)) { - ++n1; - } - } -#else - if (k &= 0xf) { - k1 = 16 - k; - z = 0; - do { - *x1++ = *x << k & 0xffff | z; - z = *x++ >> k1; - } - while(x < xe); - if (*x1 = z) { - ++n1; - } - } -#endif - else do - *x1++ = *x++; - while(x < xe); - b1->wds = n1 - 1; - Bfree(b); - return b1; -} -/* }}} */ - -static int cmp(Bigint *a, Bigint *b) /* {{{ */ -{ - ULong *xa, *xa0, *xb, *xb0; - int i, j; - - i = a->wds; - j = b->wds; -#ifdef DEBUG - if (i > 1 && !a->x[i-1]) - Bug("cmp called with a->x[a->wds-1] == 0"); - if (j > 1 && !b->x[j-1]) - Bug("cmp called with b->x[b->wds-1] == 0"); -#endif - if (i -= j) - return i; - xa0 = a->x; - xa = xa0 + j; - xb0 = b->x; - xb = xb0 + j; - for(;;) { - if (*--xa != *--xb) - return *xa < *xb ? -1 : 1; - if (xa <= xa0) - break; - } - return 0; -} -/* }}} */ - -static Bigint * diff(Bigint *a, Bigint *b) /* {{{ */ -{ - Bigint *c; - int i, wa, wb; - Long borrow, y; /* We need signed shifts here. */ - ULong *xa, *xae, *xb, *xbe, *xc; -#ifdef Pack_32 - Long z; -#endif - - i = cmp(a,b); - if (!i) { - c = Balloc(0); - c->wds = 1; - c->x[0] = 0; - return c; - } - if (i < 0) { - c = a; - a = b; - b = c; - i = 1; - } else { - i = 0; - } - c = Balloc(a->k); - c->sign = i; - wa = a->wds; - xa = a->x; - xae = xa + wa; - wb = b->wds; - xb = b->x; - xbe = xb + wb; - xc = c->x; - borrow = 0; -#ifdef Pack_32 - do { - y = (*xa & 0xffff) - (*xb & 0xffff) + borrow; - borrow = y >> 16; - Sign_Extend(borrow, y); - z = (*xa++ >> 16) - (*xb++ >> 16) + borrow; - borrow = z >> 16; - Sign_Extend(borrow, z); - Storeinc(xc, z, y); - } while(xb < xbe); - while(xa < xae) { - y = (*xa & 0xffff) + borrow; - borrow = y >> 16; - Sign_Extend(borrow, y); - z = (*xa++ >> 16) + borrow; - borrow = z >> 16; - Sign_Extend(borrow, z); - Storeinc(xc, z, y); - } -#else - do { - y = *xa++ - *xb++ + borrow; - borrow = y >> 16; - Sign_Extend(borrow, y); - *xc++ = y & 0xffff; - } while(xb < xbe); - while(xa < xae) { - y = *xa++ + borrow; - borrow = y >> 16; - Sign_Extend(borrow, y); - *xc++ = y & 0xffff; - } -#endif - while(!*--xc) { - wa--; - } - c->wds = wa; - return c; -} -/* }}} */ - -static double ulp (double _x) /* {{{ */ -{ - _double x; - register Long L; - _double a; - - value(x) = _x; - L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1; -#ifndef Sudden_Underflow - if (L > 0) { -#endif -#ifdef IBM - L |= Exp_msk1 >> 4; -#endif - word0(a) = L; - word1(a) = 0; -#ifndef Sudden_Underflow - } - else { - L = -L >> Exp_shift; - if (L < Exp_shift) { - word0(a) = 0x80000 >> L; - word1(a) = 0; - } - else { - word0(a) = 0; - L -= Exp_shift; - word1(a) = L >= 31 ? 1 : 1 << (31 - L); - } - } -#endif - return value(a); -} -/* }}} */ - -/* static double b2d () {{{ */ -static double -b2d -#ifdef KR_headers -(a, e) Bigint *a; int *e; -#else -(Bigint *a, int *e) -#endif -{ - ULong *xa, *xa0, w, y, z; - int k; - _double d; -#ifdef VAX - ULong d0, d1; -#else -#define d0 word0(d) -#define d1 word1(d) -#endif - - xa0 = a->x; - xa = xa0 + a->wds; - y = *--xa; -#ifdef DEBUG - if (!y) Bug("zero y in b2d"); -#endif - k = hi0bits(y); - *e = 32 - k; -#ifdef Pack_32 - if (k < Ebits) { - d0 = Exp_1 | y >> (Ebits - k); - w = xa > xa0 ? *--xa : 0; - d1 = y << ((32-Ebits) + k) | w >> (Ebits - k); - goto ret_d; - } - z = xa > xa0 ? *--xa : 0; - if (k -= Ebits) { - d0 = Exp_1 | y << k | z >> (32 - k); - y = xa > xa0 ? *--xa : 0; - d1 = z << k | y >> (32 - k); - } - else { - d0 = Exp_1 | y; - d1 = z; - } -#else - if (k < Ebits + 16) { - z = xa > xa0 ? *--xa : 0; - d0 = Exp_1 | y << k - Ebits | z >> Ebits + 16 - k; - w = xa > xa0 ? *--xa : 0; - y = xa > xa0 ? *--xa : 0; - d1 = z << k + 16 - Ebits | w << k - Ebits | y >> 16 + Ebits - k; - goto ret_d; - } - z = xa > xa0 ? *--xa : 0; - w = xa > xa0 ? *--xa : 0; - k -= Ebits + 16; - d0 = Exp_1 | y << k + 16 | z << k | w >> 16 - k; - y = xa > xa0 ? *--xa : 0; - d1 = w << k + 16 | y << k; -#endif -ret_d: -#ifdef VAX - word0(d) = d0 >> 16 | d0 << 16; - word1(d) = d1 >> 16 | d1 << 16; -#else -#undef d0 -#undef d1 -#endif - return value(d); -} -/* }}} */ - -static Bigint * d2b(double _d, int *e, int *bits) /* {{{ */ -{ - Bigint *b; - int de, i, k; - ULong *x, y, z; - _double d; -#ifdef VAX - ULong d0, d1; -#endif - - value(d) = _d; -#ifdef VAX - d0 = word0(d) >> 16 | word0(d) << 16; - d1 = word1(d) >> 16 | word1(d) << 16; -#else -#define d0 word0(d) -#define d1 word1(d) -#endif - -#ifdef Pack_32 - b = Balloc(1); -#else - b = Balloc(2); -#endif - x = b->x; - - z = d0 & Frac_mask; - d0 &= 0x7fffffff; /* clear sign bit, which we ignore */ -#ifdef Sudden_Underflow - de = (int)(d0 >> Exp_shift); -#ifndef IBM - z |= Exp_msk11; -#endif -#else - if ((de = (int)(d0 >> Exp_shift))) - z |= Exp_msk1; -#endif -#ifdef Pack_32 - if ((y = d1)) { - if ((k = lo0bits(&y))) { - x[0] = y | (z << (32 - k)); - z >>= k; - } else { - x[0] = y; - } - i = b->wds = (x[1] = z) ? 2 : 1; - } else { -#ifdef DEBUG - if (!z) - Bug("Zero passed to d2b"); -#endif - k = lo0bits(&z); - x[0] = z; - i = b->wds = 1; - k += 32; - } -#else - if (y = d1) { - if (k = lo0bits(&y)) { - if (k >= 16) { - x[0] = y | z << 32 - k & 0xffff; - x[1] = z >> k - 16 & 0xffff; - x[2] = z >> k; - i = 2; - } else { - x[0] = y & 0xffff; - x[1] = y >> 16 | z << 16 - k & 0xffff; - x[2] = z >> k & 0xffff; - x[3] = z >> k+16; - i = 3; - } - } else { - x[0] = y & 0xffff; - x[1] = y >> 16; - x[2] = z & 0xffff; - x[3] = z >> 16; - i = 3; - } - } else { -#ifdef DEBUG - if (!z) - Bug("Zero passed to d2b"); -#endif - k = lo0bits(&z); - if (k >= 16) { - x[0] = z; - i = 0; - } else { - x[0] = z & 0xffff; - x[1] = z >> 16; - i = 1; - } - k += 32; - } - while(!x[i]) - --i; - b->wds = i + 1; -#endif -#ifndef Sudden_Underflow - if (de) { -#endif -#ifdef IBM - *e = (de - Bias - (P-1) << 2) + k; - *bits = 4*P + 8 - k - hi0bits(word0(d) & Frac_mask); -#else - *e = de - Bias - (P-1) + k; - *bits = P - k; -#endif -#ifndef Sudden_Underflow - } else { - *e = de - Bias - (P-1) + 1 + k; -#ifdef Pack_32 - *bits = 32*i - hi0bits(x[i-1]); -#else - *bits = (i+2)*16 - hi0bits(x[i]); -#endif - } -#endif - return b; -} -/* }}} */ - -#undef d0 -#undef d1 - -static double ratio (Bigint *a, Bigint *b) /* {{{ */ -{ - _double da, db; - int k, ka, kb; - - value(da) = b2d(a, &ka); - value(db) = b2d(b, &kb); -#ifdef Pack_32 - k = ka - kb + 32*(a->wds - b->wds); -#else - k = ka - kb + 16*(a->wds - b->wds); -#endif -#ifdef IBM - if (k > 0) { - word0(da) += (k >> 2)*Exp_msk1; - if (k &= 3) { - da *= 1 << k; - } - } else { - k = -k; - word0(db) += (k >> 2)*Exp_msk1; - if (k &= 3) - db *= 1 << k; - } -#else - if (k > 0) { - word0(da) += k*Exp_msk1; - } else { - k = -k; - word0(db) += k*Exp_msk1; - } -#endif - return value(da) / value(db); -} -/* }}} */ - -static CONST double -tens[] = { - 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, - 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, - 1e20, 1e21, 1e22 -#ifdef VAX - , 1e23, 1e24 -#endif -}; - -#ifdef IEEE_Arith -static CONST double bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 }; -static CONST double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128, 1e-256 }; -#define n_bigtens 5 -#else -#ifdef IBM -static CONST double bigtens[] = { 1e16, 1e32, 1e64 }; -static CONST double tinytens[] = { 1e-16, 1e-32, 1e-64 }; -#define n_bigtens 3 -#else -static CONST double bigtens[] = { 1e16, 1e32 }; -static CONST double tinytens[] = { 1e-16, 1e-32 }; -#define n_bigtens 2 -#endif -#endif - -static int quorem(Bigint *b, Bigint *S) /* {{{ */ -{ - int n; - Long borrow, y; - ULong carry, q, ys; - ULong *bx, *bxe, *sx, *sxe; -#ifdef Pack_32 - Long z; - ULong si, zs; -#endif - - n = S->wds; -#ifdef DEBUG - /*debug*/ if (b->wds > n) - /*debug*/ Bug("oversize b in quorem"); -#endif - if (b->wds < n) - return 0; - sx = S->x; - sxe = sx + --n; - bx = b->x; - bxe = bx + n; - q = *bxe / (*sxe + 1); /* ensure q <= true quotient */ -#ifdef DEBUG - /*debug*/ if (q > 9) - /*debug*/ Bug("oversized quotient in quorem"); -#endif - if (q) { - borrow = 0; - carry = 0; - do { -#ifdef Pack_32 - si = *sx++; - ys = (si & 0xffff) * q + carry; - zs = (si >> 16) * q + (ys >> 16); - carry = zs >> 16; - y = (*bx & 0xffff) - (ys & 0xffff) + borrow; - borrow = y >> 16; - Sign_Extend(borrow, y); - z = (*bx >> 16) - (zs & 0xffff) + borrow; - borrow = z >> 16; - Sign_Extend(borrow, z); - Storeinc(bx, z, y); -#else - ys = *sx++ * q + carry; - carry = ys >> 16; - y = *bx - (ys & 0xffff) + borrow; - borrow = y >> 16; - Sign_Extend(borrow, y); - *bx++ = y & 0xffff; -#endif - } - while(sx <= sxe); - if (!*bxe) { - bx = b->x; - while(--bxe > bx && !*bxe) - --n; - b->wds = n; - } - } - if (cmp(b, S) >= 0) { - q++; - borrow = 0; - carry = 0; - bx = b->x; - sx = S->x; - do { -#ifdef Pack_32 - si = *sx++; - ys = (si & 0xffff) + carry; - zs = (si >> 16) + (ys >> 16); - carry = zs >> 16; - y = (*bx & 0xffff) - (ys & 0xffff) + borrow; - borrow = y >> 16; - Sign_Extend(borrow, y); - z = (*bx >> 16) - (zs & 0xffff) + borrow; - borrow = z >> 16; - Sign_Extend(borrow, z); - Storeinc(bx, z, y); -#else - ys = *sx++ + carry; - carry = ys >> 16; - y = *bx - (ys & 0xffff) + borrow; - borrow = y >> 16; - Sign_Extend(borrow, y); - *bx++ = y & 0xffff; -#endif - } - while(sx <= sxe); - bx = b->x; - bxe = bx + n; - if (!*bxe) { - while(--bxe > bx && !*bxe) - --n; - b->wds = n; - } - } - return q; -} -/* }}} */ - -static void destroy_freelist(void) /* {{{ */ -{ - int i; - Bigint *tmp; - - _THREAD_PRIVATE_MUTEX_LOCK(dtoa_mutex); - for (i = 0; i <= Kmax; i++) { - Bigint **listp = &freelist[i]; - while ((tmp = *listp) != NULL) { - *listp = tmp->next; - free(tmp); - } - freelist[i] = NULL; - } - _THREAD_PRIVATE_MUTEX_UNLOCK(dtoa_mutex); - -} -/* }}} */ - -ZEND_API void zend_freedtoa(char *s) /* {{{ */ -{ - Bigint *b = (Bigint *)((int *)s - 1); - b->maxwds = 1 << (b->k = *(int*)b); - Bfree(b); -} -/* }}} */ - -/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string. - * - * Inspired by "How to Print Floating-Point Numbers Accurately" by - * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 92-101]. - * - * Modifications: - * 1. Rather than iterating, we use a simple numeric overestimate - * to determine k = floor(log10(d)). We scale relevant - * quantities using O(log2(k)) rather than O(k) multiplications. - * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't - * try to generate digits strictly left to right. Instead, we - * compute with fewer bits and propagate the carry if necessary - * when rounding the final digit up. This is often faster. - * 3. Under the assumption that input will be rounded nearest, - * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22. - * That is, we allow equality in stopping tests when the - * round-nearest rule will give the same floating-point value - * as would satisfaction of the stopping test with strict - * inequality. - * 4. We remove common factors of powers of 2 from relevant - * quantities. - * 5. When converting floating-point integers less than 1e16, - * we use floating-point arithmetic rather than resorting - * to multiple-precision integers. - * 6. When asked to produce fewer than 15 digits, we first try - * to get by with floating-point arithmetic; we resort to - * multiple-precision integer arithmetic only if we cannot - * guarantee that the floating-point calculation has given - * the correctly rounded result. For k requested digits and - * "uniformly" distributed input, the probability is - * something like 10^(k-15) that we must resort to the Long - * calculation. - */ - -ZEND_API char * zend_dtoa(double _d, int mode, int ndigits, int *decpt, int *sign, char **rve) /* {{{ */ -{ - /* Arguments ndigits, decpt, sign are similar to those - of ecvt and fcvt; trailing zeros are suppressed from - the returned string. If not null, *rve is set to point - to the end of the return value. If d is +-Infinity or NaN, - then *decpt is set to 9999. - - mode: - 0 ==> shortest string that yields d when read in - and rounded to nearest. - 1 ==> like 0, but with Steele & White stopping rule; - e.g. with IEEE P754 arithmetic , mode 0 gives - 1e23 whereas mode 1 gives 9.999999999999999e22. - 2 ==> max(1,ndigits) significant digits. This gives a - return value similar to that of ecvt, except - that trailing zeros are suppressed. - 3 ==> through ndigits past the decimal point. This - gives a return value similar to that from fcvt, - except that trailing zeros are suppressed, and - ndigits can be negative. - 4-9 should give the same return values as 2-3, i.e., - 4 <= mode <= 9 ==> same return as mode - 2 + (mode & 1). These modes are mainly for - debugging; often they run slower but sometimes - faster than modes 2-3. - 4,5,8,9 ==> left-to-right digit generation. - 6-9 ==> don't try fast floating-point estimate - (if applicable). - - Values of mode other than 0-9 are treated as mode 0. - - Sufficient space is allocated to the return value - to hold the suppressed trailing zeros. - */ - - int bbits, b2, b5, be, dig, i, ieps, ilim = 0, ilim0, ilim1, - j, j1, k, k0, k_check, leftright, m2, m5, s2, s5, - spec_case = 0, try_quick; - Long L; -#ifndef Sudden_Underflow - int denorm; - ULong x; -#endif - Bigint *b, *b1, *delta, *mlo, *mhi, *S, *tmp; - double ds; - char *s, *s0; - _double d, d2, eps; - - value(d) = _d; - - if (word0(d) & Sign_bit) { - /* set sign for everything, including 0's and NaNs */ - *sign = 1; - word0(d) &= ~Sign_bit; /* clear sign bit */ - } - else - *sign = 0; - -#if defined(IEEE_Arith) + defined(VAX) -#ifdef IEEE_Arith - if ((word0(d) & Exp_mask) == Exp_mask) -#else - if (word0(d) == 0x8000) -#endif - { - /* Infinity or NaN */ - *decpt = 9999; -#ifdef IEEE_Arith - if (!word1(d) && !(word0(d) & 0xfffff)) - return nrv_alloc("Infinity", rve, 8); -#endif - return nrv_alloc("NaN", rve, 3); - } -#endif -#ifdef IBM - value(d) += 0; /* normalize */ -#endif - if (!value(d)) { - *decpt = 1; - return nrv_alloc("0", rve, 1); - } - - b = d2b(value(d), &be, &bbits); -#ifdef Sudden_Underflow - i = (int)(word0(d) >> Exp_shift1 & (Exp_mask>>Exp_shift1)); -#else - if ((i = (int)(word0(d) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) { -#endif - value(d2) = value(d); - word0(d2) &= Frac_mask1; - word0(d2) |= Exp_11; -#ifdef IBM - if (j = 11 - hi0bits(word0(d2) & Frac_mask)) - value(d2) /= 1 << j; -#endif - - /* log(x) ~=~ log(1.5) + (x-1.5)/1.5 - * log10(x) = log(x) / log(10) - * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10)) - * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2) - * - * This suggests computing an approximation k to log10(d) by - * - * k = (i - Bias)*0.301029995663981 - * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 ); - * - * We want k to be too large rather than too small. - * The error in the first-order Taylor series approximation - * is in our favor, so we just round up the constant enough - * to compensate for any error in the multiplication of - * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077, - * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14, - * adding 1e-13 to the constant term more than suffices. - * Hence we adjust the constant term to 0.1760912590558. - * (We could get a more accurate k by invoking log10, - * but this is probably not worthwhile.) - */ - - i -= Bias; -#ifdef IBM - i <<= 2; - i += j; -#endif -#ifndef Sudden_Underflow - denorm = 0; - } - else { - /* d is denormalized */ - - i = bbits + be + (Bias + (P-1) - 1); - x = i > 32 ? (word0(d) << (64 - i)) | (word1(d) >> (i - 32)) - : (word1(d) << (32 - i)); - value(d2) = x; - word0(d2) -= 31*Exp_msk1; /* adjust exponent */ - i -= (Bias + (P-1) - 1) + 1; - denorm = 1; - } -#endif - ds = (value(d2)-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981; - k = (int)ds; - if (ds < 0. && ds != k) - k--; /* want k = floor(ds) */ - k_check = 1; - if (k >= 0 && k <= Ten_pmax) { - if (value(d) < tens[k]) - k--; - k_check = 0; - } - j = bbits - i - 1; - if (j >= 0) { - b2 = 0; - s2 = j; - } - else { - b2 = -j; - s2 = 0; - } - if (k >= 0) { - b5 = 0; - s5 = k; - s2 += k; - } - else { - b2 -= k; - b5 = -k; - s5 = 0; - } - if (mode < 0 || mode > 9) - mode = 0; - try_quick = 1; - if (mode > 5) { - mode -= 4; - try_quick = 0; - } - leftright = 1; - switch(mode) { - case 0: - case 1: - ilim = ilim1 = -1; - i = 18; - ndigits = 0; - break; - case 2: - leftright = 0; - /* no break */ - case 4: - if (ndigits <= 0) - ndigits = 1; - ilim = ilim1 = i = ndigits; - break; - case 3: - leftright = 0; - /* no break */ - case 5: - i = ndigits + k + 1; - ilim = i; - ilim1 = i - 1; - if (i <= 0) - i = 1; - } - s = s0 = rv_alloc(i); - - if (ilim >= 0 && ilim <= Quick_max && try_quick) { - - /* Try to get by with floating-point arithmetic. */ - - i = 0; - value(d2) = value(d); - k0 = k; - ilim0 = ilim; - ieps = 2; /* conservative */ - if (k > 0) { - ds = tens[k&0xf]; - j = k >> 4; - if (j & Bletch) { - /* prevent overflows */ - j &= Bletch - 1; - value(d) /= bigtens[n_bigtens-1]; - ieps++; - } - for(; j; j >>= 1, i++) - if (j & 1) { - ieps++; - ds *= bigtens[i]; - } - value(d) /= ds; - } - else if ((j1 = -k)) { - value(d) *= tens[j1 & 0xf]; - for(j = j1 >> 4; j; j >>= 1, i++) - if (j & 1) { - ieps++; - value(d) *= bigtens[i]; - } - } - if (k_check && value(d) < 1. && ilim > 0) { - if (ilim1 <= 0) - goto fast_failed; - ilim = ilim1; - k--; - value(d) *= 10.; - ieps++; - } - value(eps) = ieps*value(d) + 7.; - word0(eps) -= (P-1)*Exp_msk1; - if (ilim == 0) { - S = mhi = 0; - value(d) -= 5.; - if (value(d) > value(eps)) - goto one_digit; - if (value(d) < -value(eps)) - goto no_digits; - goto fast_failed; - } -#ifndef No_leftright - if (leftright) { - /* Use Steele & White method of only - * generating digits needed. - */ - value(eps) = 0.5/tens[ilim-1] - value(eps); - for(i = 0;;) { - L = value(d); - value(d) -= L; - *s++ = '0' + (int)L; - if (value(d) < value(eps)) - goto ret1; - if (1. - value(d) < value(eps)) - goto bump_up; - if (++i >= ilim) - break; - value(eps) *= 10.; - value(d) *= 10.; - } - } - else { -#endif - /* Generate ilim digits, then fix them up. */ - value(eps) *= tens[ilim-1]; - for(i = 1;; i++, value(d) *= 10.) { - L = value(d); - value(d) -= L; - *s++ = '0' + (int)L; - if (i == ilim) { - if (value(d) > 0.5 + value(eps)) - goto bump_up; - else if (value(d) < 0.5 - value(eps)) { - while(*--s == '0'); - s++; - goto ret1; - } - break; - } - } -#ifndef No_leftright - } -#endif -fast_failed: - s = s0; - value(d) = value(d2); - k = k0; - ilim = ilim0; - } - - /* Do we have a "small" integer? */ - - if (be >= 0 && k <= Int_max) { - /* Yes. */ - ds = tens[k]; - if (ndigits < 0 && ilim <= 0) { - S = mhi = 0; - if (ilim < 0 || value(d) <= 5*ds) - goto no_digits; - goto one_digit; - } - for(i = 1;; i++) { - L = value(d) / ds; - value(d) -= L*ds; -#ifdef Check_FLT_ROUNDS - /* If FLT_ROUNDS == 2, L will usually be high by 1 */ - if (value(d) < 0) { - L--; - value(d) += ds; - } -#endif - *s++ = '0' + (int)L; - if (i == ilim) { - value(d) += value(d); - if (value(d) > ds || (value(d) == ds && (L & 1))) { -bump_up: - while(*--s == '9') - if (s == s0) { - k++; - *s = '0'; - break; - } - ++*s++; - } - break; - } - if (!(value(d) *= 10.)) - break; - } - goto ret1; - } - - m2 = b2; - m5 = b5; - mhi = mlo = 0; - if (leftright) { - if (mode < 2) { - i = -#ifndef Sudden_Underflow - denorm ? be + (Bias + (P-1) - 1 + 1) : -#endif -#ifdef IBM - 1 + 4*P - 3 - bbits + ((bbits + be - 1) & 3); -#else - 1 + P - bbits; -#endif - } - else { - j = ilim - 1; - if (m5 >= j) - m5 -= j; - else { - s5 += j -= m5; - b5 += j; - m5 = 0; - } - if ((i = ilim) < 0) { - m2 -= i; - i = 0; - } - } - b2 += i; - s2 += i; - mhi = i2b(1); - } - if (m2 > 0 && s2 > 0) { - i = m2 < s2 ? m2 : s2; - b2 -= i; - m2 -= i; - s2 -= i; - } - if (b5 > 0) { - if (leftright) { - if (m5 > 0) { - mhi = pow5mult(mhi, m5); - b1 = mult(mhi, b); - Bfree(b); - b = b1; - } - if ((j = b5 - m5)) { - b = pow5mult(b, j); - } - } else { - b = pow5mult(b, b5); - } - } - S = i2b(1); - if (s5 > 0) - S = pow5mult(S, s5); - /* Check for special case that d is a normalized power of 2. */ - - if (mode < 2) { - if (!word1(d) && !(word0(d) & Bndry_mask) -#ifndef Sudden_Underflow - && word0(d) & Exp_mask -#endif - ) { - /* The special case */ - b2 += Log2P; - s2 += Log2P; - spec_case = 1; - } else { - spec_case = 0; - } - } - - /* Arrange for convenient computation of quotients: - * shift left if necessary so divisor has 4 leading 0 bits. - * - * Perhaps we should just compute leading 28 bits of S once - * and for all and pass them and a shift to quorem, so it - * can do shifts and ors to compute the numerator for q. - */ -#ifdef Pack_32 - if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f)) - i = 32 - i; -#else - if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0xf)) - i = 16 - i; -#endif - if (i > 4) { - i -= 4; - b2 += i; - m2 += i; - s2 += i; - } - else if (i < 4) { - i += 28; - b2 += i; - m2 += i; - s2 += i; - } - if (b2 > 0) - b = lshift(b, b2); - if (s2 > 0) - S = lshift(S, s2); - if (k_check) { - if (cmp(b,S) < 0) { - k--; - b = multadd(b, 10, 0); /* we botched the k estimate */ - if (leftright) - mhi = multadd(mhi, 10, 0); - ilim = ilim1; - } - } - if (ilim <= 0 && mode > 2) { - if (ilim < 0 || cmp(b,S = multadd(S,5,0)) <= 0) { - /* no digits, fcvt style */ -no_digits: - k = -1 - ndigits; - goto ret; - } -one_digit: - *s++ = '1'; - k++; - goto ret; - } - if (leftright) { - if (m2 > 0) - mhi = lshift(mhi, m2); - - /* Compute mlo -- check for special case - * that d is a normalized power of 2. - */ - - mlo = mhi; - if (spec_case) { - mhi = Balloc(mhi->k); - Bcopy(mhi, mlo); - mhi = lshift(mhi, Log2P); - } - - for(i = 1;;i++) { - dig = quorem(b,S) + '0'; - /* Do we yet have the shortest decimal string - * that will round to d? - */ - j = cmp(b, mlo); - delta = diff(S, mhi); - j1 = delta->sign ? 1 : cmp(b, delta); - Bfree(delta); -#ifndef ROUND_BIASED - if (j1 == 0 && !mode && !(word1(d) & 1)) { - if (dig == '9') - goto round_9_up; - if (j > 0) - dig++; - *s++ = dig; - goto ret; - } -#endif - if (j < 0 || (j == 0 && !mode -#ifndef ROUND_BIASED - && !(word1(d) & 1) -#endif - )) { - if (j1 > 0) { - b = lshift(b, 1); - j1 = cmp(b, S); - if ((j1 > 0 || (j1 == 0 && (dig & 1))) - && dig++ == '9') - goto round_9_up; - } - *s++ = dig; - goto ret; - } - if (j1 > 0) { - if (dig == '9') { /* possible if i == 1 */ -round_9_up: - *s++ = '9'; - goto roundoff; - } - *s++ = dig + 1; - goto ret; - } - *s++ = dig; - if (i == ilim) - break; - b = multadd(b, 10, 0); - if (mlo == mhi) - mlo = mhi = multadd(mhi, 10, 0); - else { - mlo = multadd(mlo, 10, 0); - mhi = multadd(mhi, 10, 0); - } - } - } - else - for(i = 1;; i++) { - *s++ = dig = quorem(b,S) + '0'; - if (i >= ilim) - break; - b = multadd(b, 10, 0); - } - - /* Round off last digit */ - - b = lshift(b, 1); - j = cmp(b, S); - if (j > 0 || (j == 0 && (dig & 1))) { -roundoff: - while(*--s == '9') - if (s == s0) { - k++; - *s++ = '1'; - goto ret; - } - ++*s++; - } - else { - while(*--s == '0'); - s++; - } -ret: - Bfree(S); - if (mhi) { - if (mlo && mlo != mhi) - Bfree(mlo); - Bfree(mhi); - } -ret1: - - _THREAD_PRIVATE_MUTEX_LOCK(pow5mult_mutex); - while (p5s) { - tmp = p5s; - p5s = p5s->next; - free(tmp); - } - _THREAD_PRIVATE_MUTEX_UNLOCK(pow5mult_mutex); - - Bfree(b); - - if (s == s0) { /* don't return empty string */ - *s++ = '0'; - k = 0; - } - *s = 0; - *decpt = k + 1; - if (rve) - *rve = s; - return s0; -} -/* }}} */ - -ZEND_API double zend_strtod (CONST char *s00, char **se) /* {{{ */ -{ - int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, dsign, - e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign; - CONST char *s, *s0, *s1; - double aadj, aadj1, adj; - _double rv, rv0; - Long L; - ULong y, z; - Bigint *bb, *bb1, *bd, *bd0, *bs, *delta, *tmp; - double result; - - CONST char decimal_point = '.'; - - sign = nz0 = nz = 0; - value(rv) = 0.; - - - for(s = s00; isspace((unsigned char) *s); s++) - ; - - if (*s == '-') { - sign = 1; - s++; - } else if (*s == '+') { - s++; - } - - if (*s == '\0') { - s = s00; - goto ret; - } - - if (*s == '0') { - nz0 = 1; - while(*++s == '0') ; - if (!*s) - goto ret; - } - s0 = s; - y = z = 0; - for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++) - if (nd < 9) - y = 10*y + c - '0'; - else if (nd < 16) - z = 10*z + c - '0'; - nd0 = nd; - if (c == decimal_point) { - c = *++s; - if (!nd) { - for(; c == '0'; c = *++s) - nz++; - if (c > '0' && c <= '9') { - s0 = s; - nf += nz; - nz = 0; - goto have_dig; - } - goto dig_done; - } - for(; c >= '0' && c <= '9'; c = *++s) { -have_dig: - nz++; - if (c -= '0') { - nf += nz; - for(i = 1; i < nz; i++) - if (nd++ < 9) - y *= 10; - else if (nd <= DBL_DIG + 1) - z *= 10; - if (nd++ < 9) - y = 10*y + c; - else if (nd <= DBL_DIG + 1) - z = 10*z + c; - nz = 0; - } - } - } -dig_done: - e = 0; - if (c == 'e' || c == 'E') { - if (!nd && !nz && !nz0) { - s = s00; - goto ret; - } - s00 = s; - esign = 0; - switch(c = *++s) { - case '-': - esign = 1; - case '+': - c = *++s; - } - if (c >= '0' && c <= '9') { - while(c == '0') - c = *++s; - if (c > '0' && c <= '9') { - L = c - '0'; - s1 = s; - while((c = *++s) >= '0' && c <= '9') - L = 10*L + c - '0'; - if (s - s1 > 8 || L > 19999) - /* Avoid confusion from exponents - * so large that e might overflow. - */ - e = 19999; /* safe for 16 bit ints */ - else - e = (int)L; - if (esign) - e = -e; - } - else - e = 0; - } - else - s = s00; - } - if (!nd) { - if (!nz && !nz0) - s = s00; - goto ret; - } - e1 = e -= nf; - - /* Now we have nd0 digits, starting at s0, followed by a - * decimal point, followed by nd-nd0 digits. The number we're - * after is the integer represented by those digits times - * 10**e */ - - if (!nd0) - nd0 = nd; - k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1; - value(rv) = y; - if (k > 9) - value(rv) = tens[k - 9] * value(rv) + z; - bd0 = 0; - if (nd <= DBL_DIG -#ifndef RND_PRODQUOT - && FLT_ROUNDS == 1 -#endif - ) { - if (!e) - goto ret; - if (e > 0) { - if (e <= Ten_pmax) { -#ifdef VAX - goto vax_ovfl_check; -#else - /* value(rv) = */ rounded_product(value(rv), - tens[e]); - goto ret; -#endif - } - i = DBL_DIG - nd; - if (e <= Ten_pmax + i) { - /* A fancier test would sometimes let us do - * this for larger i values. - */ - e -= i; - value(rv) *= tens[i]; -#ifdef VAX - /* VAX exponent range is so narrow we must - * worry about overflow here... - */ -vax_ovfl_check: - word0(rv) -= P*Exp_msk1; - /* value(rv) = */ rounded_product(value(rv), - tens[e]); - if ((word0(rv) & Exp_mask) - > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) - goto ovfl; - word0(rv) += P*Exp_msk1; -#else - /* value(rv) = */ rounded_product(value(rv), - tens[e]); -#endif - goto ret; - } - } -#ifndef Inaccurate_Divide - else if (e >= -Ten_pmax) { - /* value(rv) = */ rounded_quotient(value(rv), - tens[-e]); - goto ret; - } -#endif - } - e1 += nd - k; - - /* Get starting approximation = rv * 10**e1 */ - - if (e1 > 0) { - if ((i = e1 & 15)) - value(rv) *= tens[i]; - if (e1 &= ~15) { - if (e1 > DBL_MAX_10_EXP) { -ovfl: - errno = ERANGE; -#ifndef Bad_float_h - value(rv) = HUGE_VAL; -#else - /* Can't trust HUGE_VAL */ -#ifdef IEEE_Arith - word0(rv) = Exp_mask; - word1(rv) = 0; -#else - word0(rv) = Big0; - word1(rv) = Big1; -#endif -#endif - if (bd0) - goto retfree; - goto ret; - } - if (e1 >>= 4) { - for(j = 0; e1 > 1; j++, e1 >>= 1) - if (e1 & 1) - value(rv) *= bigtens[j]; - /* The last multiplication could overflow. */ - word0(rv) -= P*Exp_msk1; - value(rv) *= bigtens[j]; - if ((z = word0(rv) & Exp_mask) - > Exp_msk1*(DBL_MAX_EXP+Bias-P)) - goto ovfl; - if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) { - /* set to largest number */ - /* (Can't trust DBL_MAX) */ - word0(rv) = Big0; - word1(rv) = Big1; - } - else - word0(rv) += P*Exp_msk1; - } - - } - } - else if (e1 < 0) { - e1 = -e1; - if ((i = e1 & 15)) - value(rv) /= tens[i]; - if (e1 &= ~15) { - e1 >>= 4; - if (e1 >= 1 << n_bigtens) - goto undfl; - for(j = 0; e1 > 1; j++, e1 >>= 1) - if (e1 & 1) - value(rv) *= tinytens[j]; - /* The last multiplication could underflow. */ - value(rv0) = value(rv); - value(rv) *= tinytens[j]; - if (!value(rv)) { - value(rv) = 2.*value(rv0); - value(rv) *= tinytens[j]; - if (!value(rv)) { -undfl: - value(rv) = 0.; - errno = ERANGE; - if (bd0) - goto retfree; - goto ret; - } - word0(rv) = Tiny0; - word1(rv) = Tiny1; - /* The refinement below will clean - * this approximation up. - */ - } - } - } - - /* Now the hard part -- adjusting rv to the correct value.*/ - - /* Put digits into bd: true value = bd * 10^e */ - - bd0 = s2b(s0, nd0, nd, y); - - for(;;) { - bd = Balloc(bd0->k); - Bcopy(bd, bd0); - bb = d2b(value(rv), &bbe, &bbbits); /* rv = bb * 2^bbe */ - bs = i2b(1); - - if (e >= 0) { - bb2 = bb5 = 0; - bd2 = bd5 = e; - } - else { - bb2 = bb5 = -e; - bd2 = bd5 = 0; - } - if (bbe >= 0) - bb2 += bbe; - else - bd2 -= bbe; - bs2 = bb2; -#ifdef Sudden_Underflow -#ifdef IBM - j = 1 + 4*P - 3 - bbbits + ((bbe + bbbits - 1) & 3); -#else - j = P + 1 - bbbits; -#endif -#else - i = bbe + bbbits - 1; /* logb(rv) */ - if (i < Emin) /* denormal */ - j = bbe + (P-Emin); - else - j = P + 1 - bbbits; -#endif - bb2 += j; - bd2 += j; - i = bb2 < bd2 ? bb2 : bd2; - if (i > bs2) - i = bs2; - if (i > 0) { - bb2 -= i; - bd2 -= i; - bs2 -= i; - } - if (bb5 > 0) { - bs = pow5mult(bs, bb5); - bb1 = mult(bs, bb); - Bfree(bb); - bb = bb1; - } - if (bb2 > 0) - bb = lshift(bb, bb2); - if (bd5 > 0) - bd = pow5mult(bd, bd5); - if (bd2 > 0) - bd = lshift(bd, bd2); - if (bs2 > 0) - bs = lshift(bs, bs2); - delta = diff(bb, bd); - dsign = delta->sign; - delta->sign = 0; - i = cmp(delta, bs); - if (i < 0) { - /* Error is less than half an ulp -- check for - * special case of mantissa a power of two. - */ - if (dsign || word1(rv) || word0(rv) & Bndry_mask) - break; - delta = lshift(delta,Log2P); - if (cmp(delta, bs) > 0) - goto drop_down; - break; - } - if (i == 0) { - /* exactly half-way between */ - if (dsign) { - if ((word0(rv) & Bndry_mask1) == Bndry_mask1 - && word1(rv) == 0xffffffff) { - /*boundary case -- increment exponent*/ - word0(rv) = (word0(rv) & Exp_mask) - + Exp_msk1 -#ifdef IBM - | Exp_msk1 >> 4 -#endif - ; - word1(rv) = 0; - break; - } - } - else if (!(word0(rv) & Bndry_mask) && !word1(rv)) { -drop_down: - /* boundary case -- decrement exponent */ -#ifdef Sudden_Underflow - L = word0(rv) & Exp_mask; -#ifdef IBM - if (L < Exp_msk1) -#else - if (L <= Exp_msk1) -#endif - goto undfl; - L -= Exp_msk1; -#else - L = (word0(rv) & Exp_mask) - Exp_msk1; -#endif - word0(rv) = L | Bndry_mask1; - word1(rv) = 0xffffffff; -#ifdef IBM - goto cont; -#else - break; -#endif - } -#ifndef ROUND_BIASED - if (!(word1(rv) & LSB)) - break; -#endif - if (dsign) - value(rv) += ulp(value(rv)); -#ifndef ROUND_BIASED - else { - value(rv) -= ulp(value(rv)); -#ifndef Sudden_Underflow - if (!value(rv)) - goto undfl; -#endif - } -#endif - break; - } - if ((aadj = ratio(delta, bs)) <= 2.) { - if (dsign) - aadj = aadj1 = 1.; - else if (word1(rv) || word0(rv) & Bndry_mask) { -#ifndef Sudden_Underflow - if (word1(rv) == Tiny1 && !word0(rv)) - goto undfl; -#endif - aadj = 1.; - aadj1 = -1.; - } - else { - /* special case -- power of FLT_RADIX to be */ - /* rounded down... */ - - if (aadj < 2./FLT_RADIX) - aadj = 1./FLT_RADIX; - else - aadj *= 0.5; - aadj1 = -aadj; - } - } - else { - aadj *= 0.5; - aadj1 = dsign ? aadj : -aadj; -#ifdef Check_FLT_ROUNDS - switch(FLT_ROUNDS) { - case 2: /* towards +infinity */ - aadj1 -= 0.5; - break; - case 0: /* towards 0 */ - case 3: /* towards -infinity */ - aadj1 += 0.5; - } -#else - if (FLT_ROUNDS == 0) - aadj1 += 0.5; -#endif - } - y = word0(rv) & Exp_mask; - - /* Check for overflow */ - - if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) { - value(rv0) = value(rv); - word0(rv) -= P*Exp_msk1; - adj = aadj1 * ulp(value(rv)); - value(rv) += adj; - if ((word0(rv) & Exp_mask) >= - Exp_msk1*(DBL_MAX_EXP+Bias-P)) { - if (word0(rv0) == Big0 && word1(rv0) == Big1) - goto ovfl; - word0(rv) = Big0; - word1(rv) = Big1; - goto cont; - } - else - word0(rv) += P*Exp_msk1; - } - else { -#ifdef Sudden_Underflow - if ((word0(rv) & Exp_mask) <= P*Exp_msk1) { - value(rv0) = value(rv); - word0(rv) += P*Exp_msk1; - adj = aadj1 * ulp(value(rv)); - value(rv) += adj; -#ifdef IBM - if ((word0(rv) & Exp_mask) < P*Exp_msk1) -#else - if ((word0(rv) & Exp_mask) <= P*Exp_msk1) -#endif - { - if (word0(rv0) == Tiny0 - && word1(rv0) == Tiny1) - goto undfl; - word0(rv) = Tiny0; - word1(rv) = Tiny1; - goto cont; - } - else - word0(rv) -= P*Exp_msk1; - } - else { - adj = aadj1 * ulp(value(rv)); - value(rv) += adj; - } -#else - /* Compute adj so that the IEEE rounding rules will - * correctly round rv + adj in some half-way cases. - * If rv * ulp(rv) is denormalized (i.e., - * y <= (P-1)*Exp_msk1), we must adjust aadj to avoid - * trouble from bits lost to denormalization; - * example: 1.2e-307 . - */ - if (y <= (P-1)*Exp_msk1 && aadj >= 1.) { - aadj1 = (double)(int)(aadj + 0.5); - if (!dsign) - aadj1 = -aadj1; - } - adj = aadj1 * ulp(value(rv)); - value(rv) += adj; -#endif - } - z = word0(rv) & Exp_mask; - if (y == z) { - /* Can we stop now? */ - L = aadj; - aadj -= L; - /* The tolerances below are conservative. */ - if (dsign || word1(rv) || word0(rv) & Bndry_mask) { - if (aadj < .4999999 || aadj > .5000001) - break; - } - else if (aadj < .4999999/FLT_RADIX) - break; - } -cont: - Bfree(bb); - Bfree(bd); - Bfree(bs); - Bfree(delta); - } -retfree: - Bfree(bb); - Bfree(bd); - Bfree(bs); - Bfree(bd0); - Bfree(delta); -ret: - if (se) - *se = (char *)s; - result = sign ? -value(rv) : value(rv); - - _THREAD_PRIVATE_MUTEX_LOCK(pow5mult_mutex); - while (p5s) { - tmp = p5s; - p5s = p5s->next; - free(tmp); - } - _THREAD_PRIVATE_MUTEX_UNLOCK(pow5mult_mutex); - - return result; -} -/* }}} */ - -ZEND_API double zend_u_strtod(const UChar *nptr, UChar **endptr) /* {{{ */ -{ - const UChar *u = nptr, *nstart; - UChar c = *u; - int any = 0; - - while (u_isspace(c)) { - c = *++u; - } - nstart = u; - - if (c == 0x2D /*'-'*/ || c == 0x2B /*'+'*/) { - c = *++u; - } - - while (c >= 0x30 /*'0'*/ && c <= 0x39 /*'9'*/) { - any = 1; - c = *++u; - } - - if (c == 0x2E /*'.'*/) { - c = *++u; - while (c >= 0x30 /*'0'*/ && c <= 0x39 /*'9'*/) { - any = 1; - c = *++u; - } - } - - if ((c == 0x65 /*'e'*/ || c == 0x45 /*'E'*/) && any) { - const UChar *e = u; - int any_exp = 0; - - c = *++u; - if (c == 0x2D /*'-'*/ || c == 0x2B /*'+'*/) { - c = *++u; - } - - while (c >= 0x30 /*'0'*/ && c <= 0x39 /*'9'*/) { - any_exp = 1; - c = *++u; - } - - if (!any_exp) { - u = e; - } - } - - if (any) { - char buf[64], *numbuf, *bufpos; - int length = u - nstart; - double value; - - if (length < sizeof(buf)) { - numbuf = buf; - } else { - numbuf = (char *) do_alloca(length + 1); - } - - bufpos = numbuf; - - while (nstart < u) { - *bufpos++ = (char) *nstart++; - } - - *bufpos = '\0'; - value = zend_strtod(numbuf, NULL); - - if (numbuf != buf) { - free_alloca(numbuf); - } - - if (endptr != NULL) { - *endptr = (UChar *)u; - } - - return value; - } - - if (endptr != NULL) { - *endptr = (UChar *)nptr; - } - - return 0; -} -/* }}} */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/Zend/zend_strtod.h b/Zend/zend_strtod.h deleted file mode 100644 index 7837a6311cd67..0000000000000 --- a/Zend/zend_strtod.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Derick Rethans | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -/* This is a header file for the strtod implementation by David M. Gay which - * can be found in zend_strtod.c */ -#ifndef ZEND_STRTOD_H -#define ZEND_STRTOD_H -#include - -BEGIN_EXTERN_C() -ZEND_API void zend_freedtoa(char *s); -ZEND_API char * zend_dtoa(double _d, int mode, int ndigits, int *decpt, int *sign, char **rve); -ZEND_API double zend_strtod(const char *s00, char **se); -ZEND_API double zend_u_strtod(const UChar *nptr, UChar **endptr); -ZEND_API int zend_startup_strtod(void); -ZEND_API int zend_shutdown_strtod(void); -END_EXTERN_C() - -#endif diff --git a/Zend/zend_strtol.c b/Zend/zend_strtol.c deleted file mode 100644 index 844c5064677f4..0000000000000 --- a/Zend/zend_strtol.c +++ /dev/null @@ -1,244 +0,0 @@ -/*- - * Copyright (c) 1990, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -/* long zend_u_strtol (const UChar *nptr, UChar **endptr, int base) {{{ - * Convert a Unicode string to a long integer. - * - * Ignores `locale' stuff. - */ -ZEND_API long zend_u_strtol(nptr, endptr, base) - const UChar *nptr; - UChar **endptr; - register int base; -{ - register const UChar *s = nptr; - register unsigned long acc; - register UChar c; - register unsigned long cutoff; - register int neg = 0, any, cutlim; - - if (s == NULL) { - errno = ERANGE; - if (endptr != NULL) { - *endptr = NULL; - } - return 0; - } - - /* - * Skip white space and pick up leading +/- sign if any. - * If base is 0, allow 0x for hex and 0 for octal, else - * assume decimal; if base is already 16, allow 0x. - */ - do { - c = *s++; - } while (u_isspace(c)); - if (c == 0x2D /*'-'*/) { - neg = 1; - c = *s++; - } else if (c == 0x2B /*'+'*/) - c = *s++; - if ((base == 0 || base == 16) && - (c == 0x30 /*'0'*/) - && (*s == 0x78 /*'x'*/ || *s == 0x58 /*'X'*/)) { - c = s[1]; - s += 2; - base = 16; - } - if (base == 0) - base = (c == 0x30 /*'0'*/) ? 8 : 10; - - /* - * Compute the cutoff value between legal numbers and illegal - * numbers. That is the largest legal value, divided by the - * base. An input number that is greater than this value, if - * followed by a legal input character, is too big. One that - * is equal to this value may be valid or not; the limit - * between valid and invalid numbers is then based on the last - * digit. For instance, if the range for longs is - * [-2147483648..2147483647] and the input base is 10, - * cutoff will be set to 214748364 and cutlim to either - * 7 (neg==0) or 8 (neg==1), meaning that if we have accumulated - * a value > 214748364, or equal but the next digit is > 7 (or 8), - * the number is too big, and we will return a range error. - * - * Set any if any `digits' consumed; make it negative to indicate - * overflow. - */ - cutoff = neg ? -(unsigned long)LONG_MIN : LONG_MAX; - cutlim = cutoff % (unsigned long)base; - cutoff /= (unsigned long)base; - for (acc = 0, any = 0;; c = *s++) { - if (c >= 0x30 /*'0'*/ && c <= 0x39 /*'9'*/) - c -= 0x30 /*'0'*/; - else if (c >= 0x41 /*'A'*/ && c <= 0x5A /*'Z'*/) - c -= 0x41 /*'A'*/ - 10; - else if (c >= 0x61 /*'a'*/ && c <= 0x7A /*'z'*/) - c -= 0x61 /*'a'*/ - 10; - else - break; - if (c >= base) - break; - - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - any = -1; - else { - any = 1; - acc *= base; - acc += c; - } - } - if (any < 0) { - acc = neg ? LONG_MIN : LONG_MAX; - errno = ERANGE; - } else if (neg) - acc = -acc; - if (endptr != NULL) - *endptr = (UChar *)(any ? s - 1 : nptr); - return (acc); -} -/* }}} */ - -/* unsigned long zend_u_strtoul (const UChar *nptr, UChar **endptr, int base) {{{ - * Convert a Unicode string to a unsigned long integer. - * - * Ignores `locale' stuff. - */ -ZEND_API unsigned long zend_u_strtoul(nptr, endptr, base) - const UChar *nptr; - UChar **endptr; - register int base; -{ - register const UChar *s = nptr; - register unsigned long acc; - register UChar c; - register unsigned long cutoff; - register int neg = 0, any, cutlim; - - if (s == NULL) { - errno = ERANGE; - if (endptr != NULL) { - *endptr = NULL; - } - return 0; - } - - /* - * Skip white space and pick up leading +/- sign if any. - * If base is 0, allow 0x for hex and 0 for octal, else - * assume decimal; if base is already 16, allow 0x. - */ - do { - c = *s++; - } while (u_isspace(c)); - if (c == 0x2D /*'-'*/) { - neg = 1; - c = *s++; - } else if (c == 0x2B /*'+'*/) - c = *s++; - if ((base == 0 || base == 16) && - (c == 0x30 /*'0'*/) - && (*s == 0x78 /*'x'*/ || *s == 0x58 /*'X'*/)) { - c = s[1]; - s += 2; - base = 16; - } - if (base == 0) - base = (c == 0x30 /*'0'*/) ? 8 : 10; - - /* - * Compute the cutoff value between legal numbers and illegal - * numbers. That is the largest legal value, divided by the - * base. An input number that is greater than this value, if - * followed by a legal input character, is too big. One that - * is equal to this value may be valid or not; the limit - * between valid and invalid numbers is then based on the last - * digit. For instance, if the range for longs is - * [-2147483648..2147483647] and the input base is 10, - * cutoff will be set to 214748364 and cutlim to either - * 7 (neg==0) or 8 (neg==1), meaning that if we have accumulated - * a value > 214748364, or equal but the next digit is > 7 (or 8), - * the number is too big, and we will return a range error. - * - * Set any if any `digits' consumed; make it negative to indicate - * overflow. - */ - cutoff = (unsigned long)ULONG_MAX / (unsigned long)base; - cutlim = (unsigned long)ULONG_MAX % (unsigned long)base; - for (acc = 0, any = 0;; c = *s++) { - if (c >= 0x30 /*'0'*/ && c <= 0x39 /*'9'*/) - c -= 0x30 /*'0'*/; - else if (c >= 0x41 /*'A'*/ && c <= 0x5A /*'Z'*/) - c -= 0x41 /*'A'*/ - 10; - else if (c >= 0x61 /*'a'*/ && c <= 0x7A /*'z'*/) - c -= 0x61 /*'a'*/ - 10; - else - break; - if (c >= base) - break; - - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - any = -1; - else { - any = 1; - acc *= base; - acc += c; - } - } - if (any < 0) { - acc = ULONG_MAX; - errno = ERANGE; - } else if (neg) - acc = -acc; - if (endptr != NULL) - *endptr = (UChar *)(any ? s - 1 : nptr); - return (acc); -} -/* }}} */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_ts_hash.c b/Zend/zend_ts_hash.c deleted file mode 100644 index 9f70719017839..0000000000000 --- a/Zend/zend_ts_hash.c +++ /dev/null @@ -1,365 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Harald Radi | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#include "zend.h" -#include "zend_ts_hash.h" - -/* ts management functions */ -static void begin_read(TsHashTable *ht) -{ -#ifdef ZTS - tsrm_mutex_lock(ht->mx_reader); - if ((++(ht->reader)) == 1) { - tsrm_mutex_lock(ht->mx_writer); - } - tsrm_mutex_unlock(ht->mx_reader); -#endif -} - -static void end_read(TsHashTable *ht) -{ -#ifdef ZTS - tsrm_mutex_lock(ht->mx_reader); - if ((--(ht->reader)) == 0) { - tsrm_mutex_unlock(ht->mx_writer); - } - tsrm_mutex_unlock(ht->mx_reader); -#endif -} - -static void begin_write(TsHashTable *ht) -{ -#ifdef ZTS - tsrm_mutex_lock(ht->mx_writer); -#endif -} - -static void end_write(TsHashTable *ht) -{ -#ifdef ZTS - tsrm_mutex_unlock(ht->mx_writer); -#endif -} - -/* delegates */ -ZEND_API int _zend_ts_hash_init(TsHashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, zend_bool persistent ZEND_FILE_LINE_DC) -{ -#ifdef ZTS - ht->mx_reader = tsrm_mutex_alloc(); - ht->mx_writer = tsrm_mutex_alloc(); - ht->reader = 0; -#endif - return _zend_hash_init(TS_HASH(ht), nSize, pHashFunction, pDestructor, persistent ZEND_FILE_LINE_RELAY_CC); -} - -ZEND_API int _zend_ts_hash_init_ex(TsHashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, zend_bool persistent, zend_bool bApplyProtection ZEND_FILE_LINE_DC) -{ -#ifdef ZTS - ht->mx_reader = tsrm_mutex_alloc(); - ht->mx_writer = tsrm_mutex_alloc(); - ht->reader = 0; -#endif - return _zend_hash_init_ex(TS_HASH(ht), nSize, pHashFunction, pDestructor, persistent, bApplyProtection ZEND_FILE_LINE_RELAY_CC); -} - -ZEND_API void zend_ts_hash_destroy(TsHashTable *ht) -{ -#ifdef ZTS - tsrm_mutex_free(ht->mx_reader); - tsrm_mutex_free(ht->mx_writer); -#endif - zend_hash_destroy(TS_HASH(ht)); -} - -ZEND_API void zend_ts_hash_clean(TsHashTable *ht) -{ - ht->reader = 0; - zend_hash_clean(TS_HASH(ht)); -} - -ZEND_API int _zend_ts_hash_add_or_update(TsHashTable *ht, char *arKey, uint nKeyLength, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC) -{ - int retval; - - begin_write(ht); - retval = _zend_hash_add_or_update(TS_HASH(ht), arKey, nKeyLength, pData, nDataSize, pDest, flag ZEND_FILE_LINE_RELAY_CC); - end_write(ht); - - return retval; -} - -ZEND_API int _zend_ts_hash_quick_add_or_update(TsHashTable *ht, char *arKey, uint nKeyLength, ulong h, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC) -{ - int retval; - - begin_write(ht); - retval = _zend_hash_quick_add_or_update(TS_HASH(ht), arKey, nKeyLength, h, pData, nDataSize, pDest, flag ZEND_FILE_LINE_RELAY_CC); - end_write(ht); - - return retval; -} - -ZEND_API int _zend_ts_hash_index_update_or_next_insert(TsHashTable *ht, ulong h, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC) -{ - int retval; - - begin_write(ht); - retval = _zend_hash_index_update_or_next_insert(TS_HASH(ht), h, pData, nDataSize, pDest, flag ZEND_FILE_LINE_RELAY_CC); - end_write(ht); - - return retval; -} - -ZEND_API int zend_ts_hash_add_empty_element(TsHashTable *ht, char *arKey, uint nKeyLength) -{ - int retval; - - begin_write(ht); - retval = zend_hash_add_empty_element(TS_HASH(ht), arKey, nKeyLength); - end_write(ht); - - return retval; -} - -ZEND_API void zend_ts_hash_graceful_destroy(TsHashTable *ht) -{ -#ifdef ZTS - tsrm_mutex_free(ht->mx_reader); - tsrm_mutex_free(ht->mx_reader); -#endif - zend_hash_graceful_destroy(TS_HASH(ht)); -} - -ZEND_API void zend_ts_hash_apply(TsHashTable *ht, apply_func_t apply_func TSRMLS_DC) -{ - begin_write(ht); - zend_hash_apply(TS_HASH(ht), apply_func TSRMLS_CC); - end_write(ht); -} - -ZEND_API void zend_ts_hash_apply_with_argument(TsHashTable *ht, apply_func_arg_t apply_func, void *argument TSRMLS_DC) -{ - begin_write(ht); - zend_hash_apply_with_argument(TS_HASH(ht), apply_func, argument TSRMLS_CC); - end_write(ht); -} - -ZEND_API void zend_ts_hash_apply_with_arguments(TsHashTable *ht, apply_func_args_t apply_func, int num_args, ...) -{ - va_list args; - - va_start(args, num_args); - begin_write(ht); - zend_hash_apply_with_arguments(TS_HASH(ht), apply_func, num_args, args); - end_write(ht); - va_end(args); -} - -ZEND_API void zend_ts_hash_reverse_apply(TsHashTable *ht, apply_func_t apply_func TSRMLS_DC) -{ - begin_write(ht); - zend_hash_reverse_apply(TS_HASH(ht), apply_func TSRMLS_CC); - end_write(ht); -} - -ZEND_API int zend_ts_hash_del_key_or_index(TsHashTable *ht, char *arKey, uint nKeyLength, ulong h, int flag) -{ - int retval; - - begin_write(ht); - retval = zend_hash_del_key_or_index(TS_HASH(ht), arKey, nKeyLength, h, flag); - end_write(ht); - - return retval; -} - -ZEND_API ulong zend_ts_get_hash_value(TsHashTable *ht, char *arKey, uint nKeyLength) -{ - ulong retval; - - begin_read(ht); - retval = zend_get_hash_value(arKey, nKeyLength); - end_read(ht); - - return retval; -} - -ZEND_API int zend_ts_hash_find(TsHashTable *ht, char *arKey, uint nKeyLength, void **pData) -{ - int retval; - - begin_read(ht); - retval = zend_hash_find(TS_HASH(ht), arKey, nKeyLength, pData); - end_read(ht); - - return retval; -} - -ZEND_API int zend_ts_hash_quick_find(TsHashTable *ht, char *arKey, uint nKeyLength, ulong h, void **pData) -{ - int retval; - - begin_read(ht); - retval = zend_hash_quick_find(TS_HASH(ht), arKey, nKeyLength, h, pData); - end_read(ht); - - return retval; -} - -ZEND_API int zend_ts_hash_index_find(TsHashTable *ht, ulong h, void **pData) -{ - int retval; - - begin_read(ht); - retval = zend_hash_index_find(TS_HASH(ht), h, pData); - end_read(ht); - - return retval; -} - -ZEND_API int zend_ts_hash_exists(TsHashTable *ht, char *arKey, uint nKeyLength) -{ - int retval; - - begin_read(ht); - retval = zend_hash_exists(TS_HASH(ht), arKey, nKeyLength); - end_read(ht); - - return retval; -} - -ZEND_API int zend_ts_hash_index_exists(TsHashTable *ht, ulong h) -{ - int retval; - - begin_read(ht); - retval = zend_hash_index_exists(TS_HASH(ht), h); - end_read(ht); - - return retval; -} - -ZEND_API void zend_ts_hash_copy(TsHashTable *target, TsHashTable *source, copy_ctor_func_t pCopyConstructor, void *tmp, uint size) -{ - begin_read(source); - begin_write(target); - zend_hash_copy(TS_HASH(target), TS_HASH(source), pCopyConstructor, tmp, size); - end_write(target); - end_read(source); -} - -ZEND_API void zend_ts_hash_merge(TsHashTable *target, TsHashTable *source, copy_ctor_func_t pCopyConstructor, void *tmp, uint size, int overwrite) -{ - begin_read(source); - begin_write(target); - zend_hash_merge(TS_HASH(target), TS_HASH(source), pCopyConstructor, tmp, size, overwrite); - end_write(target); - end_read(source); -} - -ZEND_API void zend_ts_hash_merge_ex(TsHashTable *target, TsHashTable *source, copy_ctor_func_t pCopyConstructor, uint size, merge_checker_func_t pMergeSource, void *pParam) -{ - begin_read(source); - begin_write(target); - zend_hash_merge_ex(TS_HASH(target), TS_HASH(source), pCopyConstructor, size, pMergeSource, pParam); - end_write(target); - end_read(source); -} - -ZEND_API int zend_ts_hash_sort(TsHashTable *ht, sort_func_t sort_func, compare_func_t compare_func, int renumber TSRMLS_DC) -{ - int retval; - - begin_write(ht); - retval = zend_hash_sort(TS_HASH(ht), sort_func, compare_func, renumber TSRMLS_CC); - end_write(ht); - - return retval; -} - -ZEND_API int zend_ts_hash_compare(TsHashTable *ht1, TsHashTable *ht2, compare_func_t compar, zend_bool ordered TSRMLS_DC) -{ - int retval; - - begin_read(ht1); - begin_read(ht2); - retval = zend_hash_compare(TS_HASH(ht1), TS_HASH(ht2), compar, ordered TSRMLS_CC); - end_read(ht2); - end_read(ht1); - - return retval; -} - -ZEND_API int zend_ts_hash_minmax(TsHashTable *ht, compare_func_t compar, int flag, void **pData TSRMLS_DC) -{ - int retval; - - begin_read(ht); - retval = zend_hash_minmax(TS_HASH(ht), compar, flag, pData TSRMLS_CC); - end_read(ht); - - return retval; -} - -ZEND_API int zend_ts_hash_num_elements(TsHashTable *ht) -{ - int retval; - - begin_read(ht); - retval = zend_hash_num_elements(TS_HASH(ht)); - end_read(ht); - - return retval; -} - -ZEND_API int zend_ts_hash_rehash(TsHashTable *ht) -{ - int retval; - - begin_write(ht); - retval = zend_hash_rehash(TS_HASH(ht)); - end_write(ht); - - return retval; -} - -#if ZEND_DEBUG -void zend_ts_hash_display_pListTail(TsHashTable *ht) -{ - begin_read(ht); - zend_hash_display_pListTail(TS_HASH(ht)); - end_read(ht); -} - -void zend_ts_hash_display(TsHashTable *ht) -{ - begin_read(ht); - zend_hash_display(TS_HASH(ht)); - end_read(ht); -} -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_ts_hash.h b/Zend/zend_ts_hash.h deleted file mode 100644 index d14c36fcb33bd..0000000000000 --- a/Zend/zend_ts_hash.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Harald Radi | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_TS_HASH_H -#define ZEND_TS_HASH_H - -#include "zend.h" - -typedef struct _zend_ts_hashtable { - HashTable hash; - zend_uint reader; -#ifdef ZTS - MUTEX_T mx_reader; - MUTEX_T mx_writer; -#endif -} TsHashTable; - -BEGIN_EXTERN_C() - -#define TS_HASH(table) (&(table->hash)) - -/* startup/shutdown */ -ZEND_API int _zend_ts_hash_init(TsHashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, zend_bool persistent ZEND_FILE_LINE_DC); -ZEND_API int _zend_ts_hash_init_ex(TsHashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, zend_bool persistent, zend_bool bApplyProtection ZEND_FILE_LINE_DC); -ZEND_API void zend_ts_hash_destroy(TsHashTable *ht); -ZEND_API void zend_ts_hash_clean(TsHashTable *ht); - -#define zend_ts_hash_init(ht, nSize, pHashFunction, pDestructor, persistent) \ - _zend_ts_hash_init(ht, nSize, pHashFunction, pDestructor, persistent ZEND_FILE_LINE_CC) -#define zend_ts_hash_init_ex(ht, nSize, pHashFunction, pDestructor, persistent, bApplyProtection) \ - _zend_ts_hash_init_ex(ht, nSize, pHashFunction, pDestructor, persistent, bApplyProtection ZEND_FILE_LINE_CC) - - -/* additions/updates/changes */ -ZEND_API int _zend_ts_hash_add_or_update(TsHashTable *ht, char *arKey, uint nKeyLength, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC); -#define zend_ts_hash_update(ht, arKey, nKeyLength, pData, nDataSize, pDest) \ - _zend_ts_hash_add_or_update(ht, arKey, nKeyLength, pData, nDataSize, pDest, HASH_UPDATE ZEND_FILE_LINE_CC) -#define zend_ts_hash_add(ht, arKey, nKeyLength, pData, nDataSize, pDest) \ - _zend_ts_hash_add_or_update(ht, arKey, nKeyLength, pData, nDataSize, pDest, HASH_ADD ZEND_FILE_LINE_CC) - -ZEND_API int _zend_ts_hash_quick_add_or_update(TsHashTable *ht, char *arKey, uint nKeyLength, ulong h, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC); -#define zend_ts_hash_quick_update(ht, arKey, nKeyLength, h, pData, nDataSize, pDest) \ - _zend_ts_hash_quick_add_or_update(ht, arKey, nKeyLength, h, pData, nDataSize, pDest, HASH_UPDATE ZEND_FILE_LINE_CC) -#define zend_ts_hash_quick_add(ht, arKey, nKeyLength, h, pData, nDataSize, pDest) \ - _zend_ts_hash_quick_add_or_update(ht, arKey, nKeyLength, h, pData, nDataSize, pDest, HASH_ADD ZEND_FILE_LINE_CC) - -ZEND_API int _zend_ts_hash_index_update_or_next_insert(TsHashTable *ht, ulong h, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC); -#define zend_ts_hash_index_update(ht, h, pData, nDataSize, pDest) \ - _zend_ts_hash_index_update_or_next_insert(ht, h, pData, nDataSize, pDest, HASH_UPDATE ZEND_FILE_LINE_CC) -#define zend_ts_hash_next_index_insert(ht, pData, nDataSize, pDest) \ - _zend_ts_hash_index_update_or_next_insert(ht, 0, pData, nDataSize, pDest, HASH_NEXT_INSERT ZEND_FILE_LINE_CC) - -ZEND_API int zend_ts_hash_add_empty_element(TsHashTable *ht, char *arKey, uint nKeyLength); - -ZEND_API void zend_ts_hash_graceful_destroy(TsHashTable *ht); -ZEND_API void zend_ts_hash_apply(TsHashTable *ht, apply_func_t apply_func TSRMLS_DC); -ZEND_API void zend_ts_hash_apply_with_argument(TsHashTable *ht, apply_func_arg_t apply_func, void * TSRMLS_DC); -ZEND_API void zend_ts_hash_apply_with_arguments(TsHashTable *ht, apply_func_args_t apply_func, int, ...); - -ZEND_API void zend_ts_hash_reverse_apply(TsHashTable *ht, apply_func_t apply_func TSRMLS_DC); - - -/* Deletes */ -ZEND_API int zend_ts_hash_del_key_or_index(TsHashTable *ht, char *arKey, uint nKeyLength, ulong h, int flag); -#define zend_ts_hash_del(ht, arKey, nKeyLength) \ - zend_ts_hash_del_key_or_index(ht, arKey, nKeyLength, 0, HASH_DEL_KEY) -#define zend_ts_hash_index_del(ht, h) \ - zend_ts_hash_del_key_or_index(ht, NULL, 0, h, HASH_DEL_INDEX) - -ZEND_API ulong zend_ts_get_hash_value(TsHashTable *ht, char *arKey, uint nKeyLength); - -/* Data retreival */ -ZEND_API int zend_ts_hash_find(TsHashTable *ht, char *arKey, uint nKeyLength, void **pData); -ZEND_API int zend_ts_hash_quick_find(TsHashTable *ht, char *arKey, uint nKeyLength, ulong h, void **pData); -ZEND_API int zend_ts_hash_index_find(TsHashTable *ht, ulong h, void **pData); - -/* Misc */ -ZEND_API int zend_ts_hash_exists(TsHashTable *ht, char *arKey, uint nKeyLength); -ZEND_API int zend_ts_hash_index_exists(TsHashTable *ht, ulong h); - -/* Copying, merging and sorting */ -ZEND_API void zend_ts_hash_copy(TsHashTable *target, TsHashTable *source, copy_ctor_func_t pCopyConstructor, void *tmp, uint size); -ZEND_API void zend_ts_hash_merge(TsHashTable *target, TsHashTable *source, copy_ctor_func_t pCopyConstructor, void *tmp, uint size, int overwrite); -ZEND_API void zend_ts_hash_merge_ex(TsHashTable *target, TsHashTable *source, copy_ctor_func_t pCopyConstructor, uint size, merge_checker_func_t pMergeSource, void *pParam); -ZEND_API int zend_ts_hash_sort(TsHashTable *ht, sort_func_t sort_func, compare_func_t compare_func, int renumber TSRMLS_DC); -ZEND_API int zend_ts_hash_compare(TsHashTable *ht1, TsHashTable *ht2, compare_func_t compar, zend_bool ordered TSRMLS_DC); -ZEND_API int zend_ts_hash_minmax(TsHashTable *ht, compare_func_t compar, int flag, void **pData TSRMLS_DC); - -ZEND_API int zend_ts_hash_num_elements(TsHashTable *ht); - -ZEND_API int zend_ts_hash_rehash(TsHashTable *ht); - -ZEND_API ulong zend_ts_hash_func(char *arKey, uint nKeyLength); - -#if ZEND_DEBUG -/* debug */ -void zend_ts_hash_display_pListTail(TsHashTable *ht); -void zend_ts_hash_display(TsHashTable *ht); -#endif - -END_EXTERN_C() - -#define ZEND_TS_INIT_SYMTABLE(ht) \ - ZEND_TS_INIT_SYMTABLE_EX(ht, 2, 0) - -#define ZEND_TS_INIT_SYMTABLE_EX(ht, n, persistent) \ - zend_ts_hash_init(ht, n, NULL, ZVAL_PTR_DTOR, persistent) - -#endif /* ZEND_HASH_H */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_types.h b/Zend/zend_types.h deleted file mode 100644 index b357a2075f3cc..0000000000000 --- a/Zend/zend_types.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_TYPES_H -#define ZEND_TYPES_H - -typedef unsigned char zend_bool; -typedef unsigned char zend_uchar; -typedef unsigned int zend_uint; -typedef unsigned long zend_ulong; -typedef unsigned short zend_ushort; - -typedef unsigned int zend_object_handle; -typedef struct _zend_object_handlers zend_object_handlers; - -typedef struct _zend_object_value { - zend_object_handle handle; - zend_object_handlers *handlers; -} zend_object_value; - -#endif /* ZEND_TYPES_H */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_unicode.c b/Zend/zend_unicode.c deleted file mode 100644 index b4f0bcda37fe1..0000000000000 --- a/Zend/zend_unicode.c +++ /dev/null @@ -1,844 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andrei Zmievski | - +----------------------------------------------------------------------+ -*/ - -#include "zend.h" -#include "zend_globals.h" -#include "zend_operators.h" -#include "zend_exceptions.h" -#include "zend_API.h" -#include "zend_unicode.h" -#include - -#ifdef ZTS -ZEND_API ts_rsrc_id unicode_globals_id; -#else -ZEND_API zend_unicode_globals unicode_globals; -#endif - -ZEND_API zend_class_entry *unicodeConversionException; - -/* {{{ zend_set_converter_error_mode */ -void zend_set_converter_error_mode(UConverter *conv, zend_conv_direction direction, uint16_t error_mode) -{ - UErrorCode status = U_ZERO_ERROR; - - switch (error_mode & 0xff) { - case ZEND_CONV_ERROR_STOP: - if (direction == ZEND_FROM_UNICODE) - ucnv_setFromUCallBack(conv, UCNV_FROM_U_CALLBACK_STOP, NULL, NULL, NULL, &status); - else - ucnv_setToUCallBack(conv, UCNV_TO_U_CALLBACK_STOP, NULL, NULL, NULL, &status); - break; - - case ZEND_CONV_ERROR_SKIP: - if (direction == ZEND_FROM_UNICODE) - ucnv_setFromUCallBack(conv, UCNV_FROM_U_CALLBACK_SKIP, UCNV_SKIP_STOP_ON_ILLEGAL, NULL, NULL, &status); - else - ucnv_setToUCallBack(conv, UCNV_TO_U_CALLBACK_SKIP, UCNV_SKIP_STOP_ON_ILLEGAL, NULL, NULL, &status); - break; - - case ZEND_CONV_ERROR_SUBST: - if (direction == ZEND_FROM_UNICODE) - ucnv_setFromUCallBack(conv, UCNV_FROM_U_CALLBACK_SUBSTITUTE, UCNV_SUB_STOP_ON_ILLEGAL, NULL, NULL, &status); - else - ucnv_setToUCallBack(conv, UCNV_TO_U_CALLBACK_SUBSTITUTE, UCNV_SUB_STOP_ON_ILLEGAL, NULL, NULL, &status); - break; - - case ZEND_CONV_ERROR_ESCAPE_UNICODE: - if (direction == ZEND_FROM_UNICODE) - ucnv_setFromUCallBack(conv, UCNV_FROM_U_CALLBACK_ESCAPE, UCNV_ESCAPE_UNICODE, NULL, NULL, &status); - else - ucnv_setToUCallBack(conv, UCNV_TO_U_CALLBACK_ESCAPE, UCNV_ESCAPE_UNICODE, NULL, NULL, &status); - break; - - case ZEND_CONV_ERROR_ESCAPE_ICU: - if (direction == ZEND_FROM_UNICODE) - ucnv_setFromUCallBack(conv, UCNV_FROM_U_CALLBACK_ESCAPE, UCNV_ESCAPE_ICU, NULL, NULL, &status); - else - ucnv_setToUCallBack(conv, UCNV_TO_U_CALLBACK_ESCAPE, UCNV_ESCAPE_ICU, NULL, NULL, &status); - break; - - case ZEND_CONV_ERROR_ESCAPE_JAVA: - if (direction == ZEND_FROM_UNICODE) - ucnv_setFromUCallBack(conv, UCNV_FROM_U_CALLBACK_ESCAPE, UCNV_ESCAPE_JAVA, NULL, NULL, &status); - else - /* - * use C escape, even though JAVA is requested, so that we don't - * have to expose another constant - */ - ucnv_setToUCallBack(conv, UCNV_TO_U_CALLBACK_ESCAPE, UCNV_ESCAPE_C, NULL, NULL, &status); - break; - - case ZEND_CONV_ERROR_ESCAPE_XML_DEC: - if (direction == ZEND_FROM_UNICODE) - ucnv_setFromUCallBack(conv, UCNV_FROM_U_CALLBACK_ESCAPE, UCNV_ESCAPE_XML_DEC, NULL, NULL, &status); - else - ucnv_setToUCallBack(conv, UCNV_TO_U_CALLBACK_ESCAPE, UCNV_ESCAPE_XML_DEC, NULL, NULL, &status); - break; - - case ZEND_CONV_ERROR_ESCAPE_XML_HEX: - if (direction == ZEND_FROM_UNICODE) - ucnv_setFromUCallBack(conv, UCNV_FROM_U_CALLBACK_ESCAPE, UCNV_ESCAPE_XML_HEX, NULL, NULL, &status); - else - ucnv_setToUCallBack(conv, UCNV_TO_U_CALLBACK_ESCAPE, UCNV_ESCAPE_XML_HEX, NULL, NULL, &status); - break; - - default: - assert(0); - break; - } -} -/* }}} */ - -/* {{{ zend_set_converter_subst_char */ -void zend_set_converter_subst_char(UConverter *conv, UChar *subst_char) -{ - char dest[8], *dest_ptr; - int8_t dest_len = 8; - UErrorCode status = U_ZERO_ERROR; - UErrorCode temp = U_ZERO_ERROR; - const void *old_context; - UConverterFromUCallback old_cb; - int32_t subst_char_len = u_strlen(subst_char); - - if (!subst_char_len) - return; - - ucnv_setFromUCallBack(conv, UCNV_FROM_U_CALLBACK_STOP, NULL, &old_cb, &old_context, &temp); - dest_len = ucnv_fromUChars(conv, dest, dest_len, subst_char, subst_char_len, &status); - ucnv_setFromUCallBack(conv, old_cb, old_context, NULL, NULL, &temp); - if (U_FAILURE(status)) { - zend_error(E_WARNING, "Could not set substitution character for the converter"); - return; - } - - /* skip BOM for UTF-16/32 converters */ - switch (ucnv_getType(conv)) { - case UCNV_UTF16: - dest_ptr = dest + 2; - dest_len -= 2; - break; - - case UCNV_UTF32: - dest_ptr = dest + 4; - dest_len -= 4; - break; - - default: - dest_ptr = dest; - break; - } - - ucnv_setSubstChars(conv, dest_ptr, dest_len, &status); - if (status == U_ILLEGAL_ARGUMENT_ERROR) { - zend_error(E_WARNING, "Substitution character byte sequence is too short or long for this converter"); - return; - } -} -/* }}} */ - -/* {{{ zend_set_converter_encoding */ -int zend_set_converter_encoding(UConverter **converter, const char *encoding) -{ - UErrorCode status = U_ZERO_ERROR; - UConverter *new_converter = NULL; - - if (!converter) { - return FAILURE; - } - - /* - * The specified encoding might be the same as converter's existing one, - * which results in a no-op. - */ - if (*converter && encoding && encoding[0]) { - const char *current = ucnv_getName(*converter, &status); - status = U_ZERO_ERROR; /* reset error */ - if (!ucnv_compareNames(current, encoding)) { - return SUCCESS; - } - } - - /* - * If encoding is NULL, ucnv_open() will return a converter based on - * the default platform encoding as determined by ucnv_getDefaultName(). - */ - new_converter = ucnv_open(encoding, &status); - if (U_FAILURE(status)) { - return FAILURE; - } - - if (*converter) { - ucnv_close(*converter); - } - *converter = new_converter; - - return SUCCESS; -} -/* }}} */ - -/* {{{ zend_copy_converter */ -int zend_copy_converter(UConverter **target, UConverter *source) -{ - UErrorCode status = U_ZERO_ERROR; - const char *encoding; - - assert(source != NULL); - - encoding = ucnv_getName(source, &status); - if (U_FAILURE(status)) { - return FAILURE; - } - - return zend_set_converter_encoding(target, encoding); -} -/* }}} */ - -/* {{{ zend_string_to_unicode_ex */ -ZEND_API int zend_string_to_unicode_ex(UConverter *conv, UChar **target, int *target_len, const char *source, int source_len, UErrorCode *status) -{ - UChar *buffer = NULL; - UChar *output; - int32_t buffer_len = 0; - int32_t converted = 0; - const char *input = source; - UConverterType conv_type; - - if (U_FAILURE(*status)) { - return 0; - } - - ucnv_resetToUnicode(conv); - conv_type = ucnv_getType(conv); - - switch (conv_type) { - case UCNV_SBCS: - case UCNV_LATIN_1: - case UCNV_US_ASCII: - /* - * For single-byte charsets, 1 input byte = 1 output UChar - */ - buffer_len = source_len; - break; - - default: - /* - * Initial estimate: 1.25 UChar's for every 2 source bytes + 2 (past a - * certain limit (2)). The rationale behind this is that (atleast - * in the case of GB2312) it is possible that there are single byte - * characters in the input string. By using an GD2312 text as - * example it seemed that a value of 1.25 allowed for as little - * re-allocations as possible without over estimating the buffer - * too much. In case there is a lot of single-byte characters - * around a single multi-byte character this estimation is too low, - * and then the re-allocation routines in the loop below kick in. - * There we multiply by 1.33 and add 1 so that it's quite efficient - * for smaller input strings without causing too many iterations of - * this loop. - */ - buffer_len = (source_len > 2) ? ((source_len >> 1) + (source_len >> 3) + 2) : source_len; - break; - } - - while (1) { - buffer = eurealloc(buffer, buffer_len + 1); - output = buffer + converted; - ucnv_toUnicode(conv, &output, buffer + buffer_len, &input, source + source_len, NULL, TRUE, status); - converted = (int32_t) (output - buffer); - if (*status == U_BUFFER_OVERFLOW_ERROR) { - buffer_len = (buffer_len * 1.33) + 1; - *status = U_ZERO_ERROR; - } else { - break; - } - } - - /* - * We return the buffer in case of failure anyway. The caller may want to - * use partially converted string for something. - */ - - buffer[converted] = 0; - *target = buffer; - *target_len = converted; - - return input - source; -} -/* }}} */ - -/* {{{ zend_unicode_to_string_ex */ -ZEND_API int zend_unicode_to_string_ex(UConverter *conv, char **target, int *target_len, const UChar *source, int source_len, UErrorCode *status) -{ - char *buffer = NULL; - char *output; - int32_t buffer_len = 0; - int32_t converted = 0; - const UChar *input = source; - - if (U_FAILURE(*status)) { - return 0; - } - - ucnv_resetFromUnicode(conv); - - buffer_len = ucnv_getMaxCharSize(conv) * source_len; - - while (1) { - buffer = erealloc(buffer, buffer_len + 1); - output = buffer + converted; - ucnv_fromUnicode(conv, &output, buffer + buffer_len, &input, source + source_len, NULL, TRUE, status); - converted = (int32_t) (output - buffer); - if (*status == U_BUFFER_OVERFLOW_ERROR) { - buffer_len += 64; - *status = U_ZERO_ERROR; - } else { - break; - } - } - - /* - * We return the buffer in case of failure anyway. The caller may want to - * use partially converted string for something. - */ - - buffer[converted] = 0; /* NULL-terminate the output string */ - *target = buffer; - *target_len = converted; - - return input - source; -} -/* }}} */ - -/* {{{ zend_convert_encodings */ -ZEND_API void zend_convert_encodings(UConverter *target_conv, UConverter *source_conv, - char **target, int *target_len, - const char *source, int source_len, UErrorCode *status) -{ - char *buffer = NULL; - char *output; - const char *input = source; - int32_t allocated = 0; - int32_t converted = 0; - int8_t null_size; - UChar pivot_buf[1024], *pivot, *pivot2; - - if (U_FAILURE(*status)) { - return; - } - - null_size = ucnv_getMinCharSize(target_conv); - allocated = source_len + null_size; - - ucnv_resetToUnicode(source_conv); - ucnv_resetFromUnicode(target_conv); - pivot = pivot2 = pivot_buf; - - while (1) { - buffer = (char *) erealloc(buffer, allocated); - output = buffer + converted; - ucnv_convertEx(target_conv, source_conv, &output, buffer + allocated - null_size, - &input, source + source_len, pivot_buf, &pivot, &pivot2, pivot_buf + 1024, FALSE, TRUE, status); - converted = (int32_t) (output - buffer); - if (*status == U_BUFFER_OVERFLOW_ERROR) { - allocated += 1024; - *status = U_ZERO_ERROR; - } else { - break; - } - } - - memset(buffer + converted, 0, null_size); /* NULL-terminate the output string */ - *target = buffer; - *target_len = converted; -} -/* }}} */ - -/* {{{ zend_unicode_to_ascii */ -ZEND_API char* zend_unicode_to_ascii(const UChar *us, int us_len TSRMLS_DC) -{ - char *cs; - int cs_len; - UErrorCode status = U_ZERO_ERROR; - - zend_unicode_to_string_ex(UG(ascii_conv), &cs, &cs_len, us, us_len, &status); - if (U_FAILURE(status)) { - efree(cs); - return NULL; - } - return cs; -} -/* }}} */ - -/* {{{ zend_default_conversion_error_handler */ -static void zend_default_conversion_error_handler(char *message, UConverter *conv, zend_conv_direction dir, int error_char_offset TSRMLS_DC) -{ - const char *conv_name; - UErrorCode status = U_ZERO_ERROR; - - if (!message) - return; - - conv_name = ucnv_getName(conv, &status); - /* - * UTODO - * use some other standard than MIME? or fallback onto IANA? or use - * internal converter name? ponder - */ - conv_name = ucnv_getStandardName(conv_name, "MIME", &status); - status = U_ZERO_ERROR; - - if (dir == ZEND_FROM_UNICODE) { - UChar err_char[U16_MAX_LENGTH]; - int8_t err_char_len = sizeof(err_char); - UChar32 codepoint; - char *message_fmt = "%s (converter %s failed on character {U+%04X} at offset %d)"; - - memset(&err_char, '\0', U16_MAX_LENGTH); - ucnv_getInvalidUChars(conv, err_char, &err_char_len, &status); - codepoint = (err_char_len < 2) ? err_char[0] : U16_GET_SUPPLEMENTARY(err_char[0], err_char[1]); - - zend_error(E_WARNING, message_fmt, message, conv_name?conv_name:"", codepoint, error_char_offset-1); - } else { - char err_char[8]; /* UTF-8 uses up to 8 bytes */ - char buf[40]; /* 4x number of error bytes + 7 separators + 1 for safety */ - int8_t err_char_len = sizeof(err_char); - char *message_fmt = "%s (converter %s failed on bytes (%s) at offset %d)"; - char *p; - int i; - - memset(&err_char, '\0', 8); - ucnv_getInvalidChars(conv, err_char, &err_char_len, &status); - p = buf; - for (i = 0; i < err_char_len; i++) { - sprintf(p, "0x%02X%s", (unsigned char)err_char[i], (i+1coll = coll; - zcoll->refcount = 1; - - return zcoll; -} - -void zend_collator_destroy(zend_collator *zcoll) -{ - zcoll->refcount--; - if (zcoll->refcount == 0) { - ucol_close(zcoll->coll); - efree(zcoll); - } -} - - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - * vim: noet sw=4 ts=4 fdm=marker - */ diff --git a/Zend/zend_unicode.h b/Zend/zend_unicode.h deleted file mode 100644 index d584c3beea7e2..0000000000000 --- a/Zend/zend_unicode.h +++ /dev/null @@ -1,160 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andrei Zmievski | - +----------------------------------------------------------------------+ -*/ - -#ifndef ZEND_UNICODE_H -#define ZEND_UNICODE_H - -#include "zend.h" -#include -#include -#include -#include -#include -#include -#include -#include - -enum { - ZEND_CONV_ERROR_STOP, - ZEND_CONV_ERROR_SKIP, - ZEND_CONV_ERROR_SUBST, - ZEND_CONV_ERROR_ESCAPE_UNICODE, - ZEND_CONV_ERROR_ESCAPE_ICU, - ZEND_CONV_ERROR_ESCAPE_JAVA, - ZEND_CONV_ERROR_ESCAPE_XML_DEC, - ZEND_CONV_ERROR_ESCAPE_XML_HEX, - ZEND_CONV_ERROR_LAST_ENUM, - - ZEND_CONV_ERROR_EXCEPTION = 0x100 -}; - -typedef enum { - ZEND_FROM_UNICODE, - ZEND_TO_UNICODE, -} zend_conv_direction; - - -typedef struct _zend_collator { - UCollator *coll; - int refcount; -} zend_collator; - - -extern ZEND_API zend_class_entry *unicodeConversionException; - - -/* internal functions */ - -int zend_set_converter_encoding(UConverter **converter, const char *encoding); -void zend_set_converter_error_mode(UConverter *conv, zend_conv_direction dir, uint16_t error_mode); -void zend_set_converter_subst_char(UConverter *conv, UChar *subst_char); -void zend_register_unicode_exceptions(TSRMLS_D); -void zend_update_converters_error_behavior(TSRMLS_D); -zend_collator* zend_collator_create(UCollator *coll); -void zend_collator_destroy(zend_collator *zcoll); - - -/* API functions */ - -ZEND_API void zend_convert_encodings(UConverter *target_conv, UConverter *source_conv, char **target, int *target_len, const char *source, int source_len, UErrorCode *status); -ZEND_API char* zend_unicode_to_ascii(const UChar *us, int us_len TSRMLS_DC); - -ZEND_API int zend_string_to_unicode_ex(UConverter *conv, UChar **target, int *target_len, const char *source, int source_len, UErrorCode *status); -ZEND_API int zend_string_to_unicode(UConverter *conv, UChar **u, int *u_len, char *s, int s_len TSRMLS_DC); -ZEND_API int zend_unicode_to_string_ex(UConverter *conv, char **s, int *s_len, const UChar *u, int u_len, UErrorCode *status); -ZEND_API int zend_unicode_to_string(UConverter *conv, char **s, int *s_len, const UChar *u, int u_len TSRMLS_DC); - -ZEND_API int zval_string_to_unicode_ex(zval *string, UConverter *conv TSRMLS_DC); -ZEND_API int zval_string_to_unicode(zval *string TSRMLS_DC); -ZEND_API int zval_unicode_to_string_ex(zval *string, UConverter *conv TSRMLS_DC); -ZEND_API int zval_unicode_to_string(zval *string TSRMLS_DC); - -ZEND_API int zend_cmp_unicode_and_string(UChar *ustr, char* str, uint len); -ZEND_API int zend_cmp_unicode_and_literal(UChar *ustr, int ulen, char* str, int slen); - -ZEND_API void zend_case_fold_string(UChar **dest, int *dest_len, UChar *src, int src_len, uint32_t options, UErrorCode *status); - -ZEND_API int zend_is_valid_identifier(UChar *ident, int ident_len); -ZEND_API int zend_normalize_identifier(UChar **dest, int *dest_len, UChar *ident, int ident_len, zend_bool fold_case); - -ZEND_API void zend_raise_conversion_error_ex(char *message, UConverter *conv, zend_conv_direction dir, int error_char_offset TSRMLS_DC); - -/* - * Function to get a codepoint at position n. Iterates over codepoints starting from the - * beginning of the string. Does not check for n > length, this is left up to the caller. - */ -static inline UChar32 zend_get_codepoint_at(UChar *str, int length, int n) -{ - int32_t offset = 0; - UChar32 c = 0; - - if (n > 0) { - U16_FWD_N(str, offset, length, n); - } - U16_NEXT(str, offset, length, c); - - return c; -} - -/* - * Convert a single codepoint to UChar sequence (1 or 2). - * The UChar buffer is assumed to be large enough. - */ -static inline int zend_codepoint_to_uchar(UChar32 codepoint, UChar *buf) -{ - if (U_IS_BMP(codepoint)) { - *buf++ = (UChar) codepoint; - return 1; - } else if (codepoint <= UCHAR_MAX_VALUE) { - *buf++ = (UChar) U16_LEAD(codepoint); - *buf++ = (UChar) U16_TRAIL(codepoint); - return 2; - } else { - return 0; - } -} - -#define ZSTR_LEN(__type, __str) ((__type==IS_UNICODE)?u_strlen(__str.u):strlen(__str.s)) - -#define ZEND_U_CONVERTER(c) ((c)?(c):UG(fallback_encoding_conv)) - -#define USTR_FREE(ustr) do { if (ustr) { efree(ustr); } } while (0); -#define UBYTES(len) ((len) * sizeof(UChar)) -#define USTR_LEN(str) (UG(unicode)?u_strlen((str).u):strlen((str).s)) -#define USTR_VAL(str) (UG(unicode)?(str).u:(str).s) - -#define USTR_BYTES(__type, __length) \ - ((__type == IS_UNICODE)?UBYTES(__length):__length) - -#define TEXT_BYTES(__chars_len) \ - (UG(unicode) ? UBYTES(__chars_len) : __chars_len) - -#define TEXT_CHARS(__bytes_len) \ - (UG(unicode) ? (__bytes_len / sizeof(UChar)) : __bytes_len) - -#define USTR_MAKE(cs) zend_ascii_to_unicode(cs, sizeof(cs) ZEND_FILE_LINE_CC) -#define USTR_MAKE_REL(cs) zend_ascii_to_unicode(cs, sizeof(cs) ZEND_FILE_LINE_RELAY_CC) -static inline UChar* zend_ascii_to_unicode(const char *cs, size_t cs_size ZEND_FILE_LINE_DC) -{ - /* u_charsToUChars() takes care of the terminating NULL */ - UChar *us = eumalloc_rel(cs_size); - u_charsToUChars(cs, us, cs_size); - return us; -} - -#endif /* ZEND_UNICODE_H */ diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c deleted file mode 100644 index 967f7e96d64cd..0000000000000 --- a/Zend/zend_variables.c +++ /dev/null @@ -1,217 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#include -#include "zend.h" -#include "zend_API.h" -#include "zend_globals.h" -#include "zend_constants.h" -#include "zend_list.h" - - -ZEND_API void _zval_dtor_func(zval *zvalue ZEND_FILE_LINE_DC) -{ - switch (Z_TYPE_P(zvalue) & ~IS_CONSTANT_INDEX) { - case IS_CONSTANT: { - TSRMLS_FETCH(); - - if (UG(unicode)) goto dtor_unicode; - } - case IS_STRING: - CHECK_ZVAL_STRING_REL(zvalue); - STR_FREE_REL(Z_STRVAL_P(zvalue)); - break; - case IS_UNICODE: -dtor_unicode: - CHECK_ZVAL_UNICODE_REL(zvalue); - STR_FREE_REL(Z_USTRVAL_P(zvalue)); - break; - case IS_ARRAY: - case IS_CONSTANT_ARRAY: { - TSRMLS_FETCH(); - - if (Z_ARRVAL_P(zvalue) && (Z_ARRVAL_P(zvalue) != &EG(symbol_table))) { - zend_hash_destroy(Z_ARRVAL_P(zvalue)); - FREE_HASHTABLE(Z_ARRVAL_P(zvalue)); - } - } - break; - case IS_OBJECT: - { - TSRMLS_FETCH(); - - Z_OBJ_HT_P(zvalue)->del_ref(zvalue TSRMLS_CC); - } - break; - case IS_RESOURCE: - { - TSRMLS_FETCH(); - - /* destroy resource */ - zend_list_delete(Z_LVAL_P(zvalue)); - } - break; - case IS_LONG: - case IS_DOUBLE: - case IS_BOOL: - case IS_NULL: - default: - return; - break; - } -} - - -ZEND_API void _zval_internal_dtor(zval *zvalue ZEND_FILE_LINE_DC) -{ - switch (Z_TYPE_P(zvalue) & ~IS_CONSTANT_INDEX) { - case IS_CONSTANT: { - TSRMLS_FETCH(); - - if (UG(unicode)) goto dtor_unicode; - } - case IS_STRING: - CHECK_ZVAL_STRING_REL(zvalue); - free(Z_STRVAL_P(zvalue)); - break; - case IS_UNICODE: -dtor_unicode: - CHECK_ZVAL_UNICODE_REL(zvalue); - free(Z_USTRVAL_P(zvalue)); - break; - case IS_ARRAY: - case IS_CONSTANT_ARRAY: - case IS_OBJECT: - case IS_RESOURCE: - zend_error(E_CORE_ERROR, "Internal zval's can't be arrays, objects or resources"); - break; - case IS_LONG: - case IS_DOUBLE: - case IS_BOOL: - case IS_NULL: - default: - break; - } -} - - -ZEND_API void zval_add_ref(zval **p) -{ - (*p)->refcount++; -} - - -ZEND_API void _zval_copy_ctor_func(zval *zvalue ZEND_FILE_LINE_DC) -{ - switch (Z_TYPE_P(zvalue)) { - case IS_RESOURCE: { - TSRMLS_FETCH(); - - zend_list_addref(Z_LVAL_P(zvalue)); - } - break; - case IS_BOOL: - case IS_LONG: - case IS_NULL: - break; - case IS_CONSTANT: { - TSRMLS_FETCH(); - - if (UG(unicode)) goto copy_unicode; - } - case IS_STRING: - CHECK_ZVAL_STRING_REL(zvalue); - Z_STRVAL_P(zvalue) = (char *) estrndup_rel(Z_STRVAL_P(zvalue), Z_STRLEN_P(zvalue)); - break; - case IS_UNICODE: -copy_unicode: - CHECK_ZVAL_UNICODE_REL(zvalue); - Z_USTRVAL_P(zvalue) = eustrndup_rel(Z_USTRVAL_P(zvalue), Z_USTRLEN_P(zvalue)); - break; - case IS_ARRAY: - case IS_CONSTANT_ARRAY: { - zval *tmp; - HashTable *original_ht = Z_ARRVAL_P(zvalue); - HashTable *tmp_ht = NULL; - TSRMLS_FETCH(); - - if (Z_ARRVAL_P(zvalue) == &EG(symbol_table)) { - return; /* do nothing */ - } - ALLOC_HASHTABLE_REL(tmp_ht); - zend_u_hash_init(tmp_ht, zend_hash_num_elements(original_ht), NULL, ZVAL_PTR_DTOR, 0, original_ht->unicode); - zend_hash_copy(tmp_ht, original_ht, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); - Z_ARRVAL_P(zvalue) = tmp_ht; - } - break; - case IS_OBJECT: - { - TSRMLS_FETCH(); - Z_OBJ_HT_P(zvalue)->add_ref(zvalue TSRMLS_CC); - } - break; - } -} - -ZEND_API int zend_print_variable(zval *var) -{ - return zend_print_zval(var, 0); -} - - -#if ZEND_DEBUG -ZEND_API void _zval_copy_ctor_wrapper(zval *zvalue) -{ - zval_copy_ctor(zvalue); -} - - -ZEND_API void _zval_dtor_wrapper(zval *zvalue) -{ - zval_dtor(zvalue); -} - - -ZEND_API void _zval_internal_dtor_wrapper(zval *zvalue) -{ - zval_internal_dtor(zvalue); -} - - -ZEND_API void _zval_ptr_dtor_wrapper(zval **zval_ptr) -{ - zval_ptr_dtor(zval_ptr); -} - - -ZEND_API void _zval_internal_ptr_dtor_wrapper(zval **zval_ptr) -{ - zval_internal_ptr_dtor(zval_ptr); -} -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_variables.h b/Zend/zend_variables.h deleted file mode 100644 index 21378e0c10f8e..0000000000000 --- a/Zend/zend_variables.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_VARIABLES_H -#define ZEND_VARIABLES_H - - -BEGIN_EXTERN_C() - -ZEND_API void _zval_dtor_func(zval *zvalue ZEND_FILE_LINE_DC); - -static inline void _zval_dtor(zval *zvalue ZEND_FILE_LINE_DC) -{ - if (Z_TYPE_P(zvalue) <= IS_BOOL) { - return; - } - _zval_dtor_func(zvalue ZEND_FILE_LINE_CC); -} - -ZEND_API void _zval_copy_ctor_func(zval *zvalue ZEND_FILE_LINE_DC); - -static inline void _zval_copy_ctor(zval *zvalue ZEND_FILE_LINE_DC) -{ - if (Z_TYPE_P(zvalue) <= IS_BOOL) { - return; - } - _zval_copy_ctor_func(zvalue ZEND_FILE_LINE_CC); -} - - -ZEND_API int zend_print_variable(zval *var); -ZEND_API void _zval_ptr_dtor(zval **zval_ptr ZEND_FILE_LINE_DC); -ZEND_API void _zval_internal_dtor(zval *zvalue ZEND_FILE_LINE_DC); -ZEND_API void _zval_internal_ptr_dtor(zval **zvalue ZEND_FILE_LINE_DC); -#define zval_copy_ctor(zvalue) _zval_copy_ctor((zvalue) ZEND_FILE_LINE_CC) -#define zval_dtor(zvalue) _zval_dtor((zvalue) ZEND_FILE_LINE_CC) -#define zval_ptr_dtor(zval_ptr) _zval_ptr_dtor((zval_ptr) ZEND_FILE_LINE_CC) -#define zval_internal_dtor(zvalue) _zval_internal_dtor((zvalue) ZEND_FILE_LINE_CC) -#define zval_internal_ptr_dtor(zvalue) _zval_internal_ptr_dtor((zvalue) ZEND_FILE_LINE_CC) - -#if ZEND_DEBUG -ZEND_API void _zval_copy_ctor_wrapper(zval *zvalue); -ZEND_API void _zval_dtor_wrapper(zval *zvalue); -ZEND_API void _zval_ptr_dtor_wrapper(zval **zval_ptr); -ZEND_API void _zval_internal_dtor_wrapper(zval *zvalue); -ZEND_API void _zval_internal_ptr_dtor_wrapper(zval **zvalue); -#define zval_copy_ctor_wrapper _zval_copy_ctor_wrapper -#define zval_dtor_wrapper _zval_dtor_wrapper -#define zval_ptr_dtor_wrapper _zval_ptr_dtor_wrapper -#define zval_internal_dtor_wrapper _zval_internal_dtor_wrapper -#define zval_internal_ptr_dtor_wrapper _zval_internal_ptr_dtor_wrapper -#else -#define zval_copy_ctor_wrapper _zval_copy_ctor_func -#define zval_dtor_wrapper _zval_dtor_func -#define zval_ptr_dtor_wrapper _zval_ptr_dtor -#define zval_internal_dtor_wrapper _zval_internal_dtor -#define zval_internal_ptr_dtor_wrapper _zval_internal_ptr_dtor -#endif - -ZEND_API void zval_add_ref(zval **p); - -END_EXTERN_C() - -#define ZVAL_DESTRUCTOR (void (*)(void *)) zval_dtor_wrapper -#define ZVAL_PTR_DTOR (void (*)(void *)) zval_ptr_dtor_wrapper -#define ZVAL_INTERNAL_DTOR (void (*)(void *)) zval_internal_dtor_wrapper -#define ZVAL_INTERNAL_PTR_DTOR (void (*)(void *)) zval_internal_ptr_dtor_wrapper -#define ZVAL_COPY_CTOR (void (*)(void *)) zval_copy_ctor_wrapper - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ diff --git a/Zend/zend_vm.h b/Zend/zend_vm.h deleted file mode 100644 index c2444ec88dee3..0000000000000 --- a/Zend/zend_vm.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Dmitry Stogov | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef ZEND_VM_H -#define ZEND_VM_H - -ZEND_API void zend_vm_use_old_executor(); -ZEND_API void zend_vm_set_opcode_handler(zend_op* opcode); - -#define ZEND_VM_SET_OPCODE_HANDLER(opline) zend_vm_set_opcode_handler(opline) - -#endif diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h deleted file mode 100644 index 71e79f3948e3b..0000000000000 --- a/Zend/zend_vm_def.h +++ /dev/null @@ -1,4045 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - | Dmitry Stogov | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -/* If you change this file, please regenerate the zend_vm_execute.h and - * zend_vm_opcodes.h files by running: - * php zend_vm_gen.php - */ - -ZEND_VM_HANDLER(1, ZEND_ADD, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - add_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R), - GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - FREE_OP2(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(2, ZEND_SUB, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - sub_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R), - GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - FREE_OP2(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(3, ZEND_MUL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - mul_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R), - GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - FREE_OP2(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(4, ZEND_DIV, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - div_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R), - GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - FREE_OP2(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(5, ZEND_MOD, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - mod_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R), - GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - FREE_OP2(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(6, ZEND_SL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - shift_left_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R), - GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - FREE_OP2(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(7, ZEND_SR, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - shift_right_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R), - GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - FREE_OP2(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(8, ZEND_CONCAT, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - concat_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R), - GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - FREE_OP2(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(15, ZEND_IS_IDENTICAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_identical_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R), - GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - FREE_OP2(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(16, ZEND_IS_NOT_IDENTICAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_not_identical_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R), - GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - FREE_OP2(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(17, ZEND_IS_EQUAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R), - GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - FREE_OP2(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(18, ZEND_IS_NOT_EQUAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_not_equal_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R), - GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - FREE_OP2(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(19, ZEND_IS_SMALLER, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_smaller_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R), - GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - FREE_OP2(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(20, ZEND_IS_SMALLER_OR_EQUAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R), - GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - FREE_OP2(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(9, ZEND_BW_OR, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - bitwise_or_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R), - GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - FREE_OP2(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(10, ZEND_BW_AND, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - bitwise_and_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R), - GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - FREE_OP2(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(11, ZEND_BW_XOR, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R), - GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - FREE_OP2(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(14, ZEND_BOOL_XOR, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - boolean_xor_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R), - GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - FREE_OP2(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(12, ZEND_BW_NOT, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - bitwise_not_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(13, ZEND_BOOL_NOT, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - boolean_not_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - FREE_OP1(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HELPER_EX(zend_binary_assign_op_obj_helper, VAR|UNUSED|CV, CONST|TMP|VAR|UNUSED|CV, int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC)) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op1, free_op2, free_op_data1; - zval **object_ptr = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_W); - zval *object; - zval *property = GET_OP2_ZVAL_PTR(BP_VAR_R); - zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - znode *result = &opline->result; - zval **retval = &EX_T(result->u.var).var.ptr; - int have_get_ptr = 0; - - EX_T(result->u.var).var.ptr_ptr = NULL; - make_real_object(object_ptr TSRMLS_CC); - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - FREE_OP2(); - FREE_OP(free_op_data1); - - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } else { - /* here we are sure we are dealing with an object */ - if (IS_OP2_TMP_FREE()) { - MAKE_REAL_ZVAL_PTR(property); - } - - /* here property is a string */ - if (opline->extended_value == ZEND_ASSIGN_OBJ - && Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - binary_op(*zptr, *zptr, value TSRMLS_CC); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - zval *z = NULL; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - if (Z_OBJ_HT_P(object)->read_property) { - z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - } - break; - case ZEND_ASSIGN_DIM: - if (Z_OBJ_HT_P(object)->read_dimension) { - z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC); - } - break; - } - if (z) { - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - binary_op(z, z, value TSRMLS_CC); - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - break; - case ZEND_ASSIGN_DIM: - Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC); - break; - } - if (!RETURN_VALUE_UNUSED(result)) { - *retval = z; - PZVAL_LOCK(*retval); - } - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (IS_OP2_TMP_FREE()) { - zval_ptr_dtor(&property); - } else { - FREE_OP2(); - } - FREE_OP(free_op_data1); - } - - FREE_OP1_VAR_PTR(); - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HELPER_EX(zend_binary_assign_op_helper, VAR|UNUSED|CV, CONST|TMP|VAR|UNUSED|CV, int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC)) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2, free_op_data2, free_op_data1; - zval **var_ptr; - zval *value; - zend_bool increment_opline = 0; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_obj_helper, binary_op, binary_op); - break; - case ZEND_ASSIGN_DIM: { - zval **object_ptr = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_W); - - if (object_ptr && OP1_TYPE != IS_CV && !OP1_FREE) { - (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_obj_helper, binary_op, binary_op); - } else { - zend_op *op_data = opline+1; - zval *dim = GET_OP2_ZVAL_PTR(BP_VAR_R); - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), GET_OP1_ZVAL_PTR_PTR(BP_VAR_RW), dim, IS_OP2_TMP_FREE(), BP_VAR_RW TSRMLS_CC); - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW); - increment_opline = 1; - } - } - break; - default: - value = GET_OP2_ZVAL_PTR(BP_VAR_R); - var_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_RW); - /* do nothing */ - break; - } - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets"); - } - - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - FREE_OP2(); - FREE_OP1_VAR_PTR(); - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - } - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - objval->refcount++; - binary_op(objval, objval, value TSRMLS_CC); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC); - zval_ptr_dtor(&objval); - } else { - binary_op(*var_ptr, *var_ptr, value TSRMLS_CC); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - FREE_OP2(); - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - FREE_OP(free_op_data1); - FREE_OP_VAR_PTR(free_op_data2); - } - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(23, ZEND_ASSIGN_ADD, VAR|UNUSED|CV, CONST|TMP|VAR|UNUSED|CV) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_helper, binary_op, add_function); -} - -ZEND_VM_HANDLER(24, ZEND_ASSIGN_SUB, VAR|UNUSED|CV, CONST|TMP|VAR|UNUSED|CV) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_helper, binary_op, sub_function); -} - -ZEND_VM_HANDLER(25, ZEND_ASSIGN_MUL, VAR|UNUSED|CV, CONST|TMP|VAR|UNUSED|CV) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_helper, binary_op, mul_function); -} - -ZEND_VM_HANDLER(26, ZEND_ASSIGN_DIV, VAR|UNUSED|CV, CONST|TMP|VAR|UNUSED|CV) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_helper, binary_op, div_function); -} - -ZEND_VM_HANDLER(27, ZEND_ASSIGN_MOD, VAR|UNUSED|CV, CONST|TMP|VAR|UNUSED|CV) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_helper, binary_op, mod_function); -} - -ZEND_VM_HANDLER(28, ZEND_ASSIGN_SL, VAR|UNUSED|CV, CONST|TMP|VAR|UNUSED|CV) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_helper, binary_op, shift_left_function); -} - -ZEND_VM_HANDLER(29, ZEND_ASSIGN_SR, VAR|UNUSED|CV, CONST|TMP|VAR|UNUSED|CV) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_helper, binary_op, shift_right_function); -} - -ZEND_VM_HANDLER(30, ZEND_ASSIGN_CONCAT, VAR|UNUSED|CV, CONST|TMP|VAR|UNUSED|CV) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_helper, binary_op, concat_function); -} - -ZEND_VM_HANDLER(31, ZEND_ASSIGN_BW_OR, VAR|UNUSED|CV, CONST|TMP|VAR|UNUSED|CV) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_helper, binary_op, bitwise_or_function); -} - -ZEND_VM_HANDLER(32, ZEND_ASSIGN_BW_AND, VAR|UNUSED|CV, CONST|TMP|VAR|UNUSED|CV) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_helper, binary_op, bitwise_and_function); -} - -ZEND_VM_HANDLER(33, ZEND_ASSIGN_BW_XOR, VAR|UNUSED|CV, CONST|TMP|VAR|UNUSED|CV) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_binary_assign_op_helper, binary_op, bitwise_xor_function); -} - -ZEND_VM_HELPER_EX(zend_pre_incdec_property_helper, VAR|UNUSED|CV, CONST|TMP|VAR|CV, incdec_t incdec_op) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **object_ptr = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_W); - zval *object; - zval *property = GET_OP2_ZVAL_PTR(BP_VAR_R); - zval **retval = &EX_T(opline->result.u.var).var.ptr; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - FREE_OP2(); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (IS_OP2_TMP_FREE()) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - incdec_op(*zptr); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - incdec_op(z); - *retval = z; - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (IS_OP2_TMP_FREE()) { - zval_ptr_dtor(&property); - } else { - FREE_OP2(); - } - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(132, ZEND_PRE_INC_OBJ, VAR|UNUSED|CV, CONST|TMP|VAR|CV) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_pre_incdec_property_helper, incdec_op, increment_function); -} - -ZEND_VM_HANDLER(133, ZEND_PRE_DEC_OBJ, VAR|UNUSED|CV, CONST|TMP|VAR|CV) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_pre_incdec_property_helper, incdec_op, decrement_function); -} - -ZEND_VM_HELPER_EX(zend_post_incdec_property_helper, VAR|UNUSED|CV, CONST|TMP|VAR|CV, incdec_t incdec_op) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **object_ptr = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_W); - zval *object; - zval *property = GET_OP2_ZVAL_PTR(BP_VAR_R); - zval *retval = &EX_T(opline->result.u.var).tmp_var; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - FREE_OP2(); - *retval = *EG(uninitialized_zval_ptr); - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (IS_OP2_TMP_FREE()) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - have_get_ptr = 1; - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - *retval = **zptr; - zendi_zval_copy_ctor(*retval); - - incdec_op(*zptr); - - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - zval *z_copy; - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - *retval = *z; - zendi_zval_copy_ctor(*retval); - ALLOC_ZVAL(z_copy); - *z_copy = *z; - zendi_zval_copy_ctor(*z_copy); - INIT_PZVAL(z_copy); - incdec_op(z_copy); - z->refcount++; - Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC); - zval_ptr_dtor(&z_copy); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - *retval = *EG(uninitialized_zval_ptr); - } - } - - if (IS_OP2_TMP_FREE()) { - zval_ptr_dtor(&property); - } else { - FREE_OP2(); - } - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(134, ZEND_POST_INC_OBJ, VAR|UNUSED|CV, CONST|TMP|VAR|CV) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_post_incdec_property_helper, incdec_op, increment_function); -} - -ZEND_VM_HANDLER(135, ZEND_POST_DEC_OBJ, VAR|UNUSED|CV, CONST|TMP|VAR|CV) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_post_incdec_property_helper, incdec_op, decrement_function); -} - -ZEND_VM_HANDLER(34, ZEND_PRE_INC, VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **var_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_RW); - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets"); - } - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - val->refcount++; - increment_function(val); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC); - zval_ptr_dtor(&val); - } else { - increment_function(*var_ptr); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(35, ZEND_PRE_DEC, VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **var_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_RW); - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets"); - } - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - val->refcount++; - decrement_function(val); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC); - zval_ptr_dtor(&val); - } else { - decrement_function(*var_ptr); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(36, ZEND_POST_INC, VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **var_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_RW); - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets"); - } - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).tmp_var = *EG(uninitialized_zval_ptr); - } - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); - } - - EX_T(opline->result.u.var).tmp_var = **var_ptr; - zendi_zval_copy_ctor(EX_T(opline->result.u.var).tmp_var); - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - val->refcount++; - increment_function(val); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC); - zval_ptr_dtor(&val); - } else { - increment_function(*var_ptr); - } - - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(37, ZEND_POST_DEC, VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **var_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_RW); - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets"); - } - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).tmp_var = *EG(uninitialized_zval_ptr); - } - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); - } - - EX_T(opline->result.u.var).tmp_var = **var_ptr; - zendi_zval_copy_ctor(EX_T(opline->result.u.var).tmp_var); - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - val->refcount++; - decrement_function(val); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC); - zval_ptr_dtor(&val); - } else { - decrement_function(*var_ptr); - } - - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(40, ZEND_ECHO, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *z = GET_OP1_ZVAL_PTR(BP_VAR_R); - zval z_copy; - UErrorCode status = U_ZERO_ERROR; - - /* UTODO: review this - * Convert inline HTML blocks to the output encoding, but only if necessary. */ - if (opline->extended_value && - strcmp(ucnv_getName(ZEND_U_CONVERTER(UG(output_encoding_conv)), &status), - EX(op_array)->script_encoding)) { - zval z_conv; - UConverter *script_enc_conv = NULL; - if (zend_set_converter_encoding(&script_enc_conv, EX(op_array)->script_encoding) == FAILURE) { - zend_error(E_ERROR, "Unsupported encoding [%d]", EX(op_array)->script_encoding); - } - zend_convert_encodings(ZEND_U_CONVERTER(UG(output_encoding_conv)), script_enc_conv, &Z_STRVAL(z_conv), &Z_STRLEN(z_conv), Z_STRVAL_P(z), Z_STRLEN_P(z), &status); - Z_TYPE(z_conv) = IS_STRING; - if (U_SUCCESS(status)) { - zend_print_variable(&z_conv); - } else { - zend_error(E_WARNING, "Could not convert inline HTML for output"); - } - zval_dtor(&z_conv); - ucnv_close(script_enc_conv); - } else if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get_method != NULL && - zend_std_cast_object_tostring(z, &z_copy, ZEND_STR_TYPE, ZEND_U_CONVERTER(UG(output_encoding_conv)) TSRMLS_CC) == SUCCESS) { - zend_print_variable(&z_copy); - zval_dtor(&z_copy); - } else { - zend_print_variable(z); - } - - FREE_OP1(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(41, ZEND_PRINT, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 1; - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_LONG; - - ZEND_VM_DISPATCH_TO_HANDLER(ZEND_ECHO); -} - -ZEND_VM_HELPER_EX(zend_fetch_var_address_helper, CONST|TMP|VAR|CV, ANY, int type) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *varname = GET_OP1_ZVAL_PTR(BP_VAR_R); - zval **retval; - zval tmp_varname; - HashTable *target_symbol_table; - - if (Z_TYPE_P(varname) != IS_STRING && Z_TYPE_P(varname) != IS_UNICODE) { - tmp_varname = *varname; - zval_copy_ctor(&tmp_varname); - convert_to_text(&tmp_varname); - varname = &tmp_varname; - } - - if (opline->op2.u.EA.type == ZEND_FETCH_AUTO_GLOBAL && - CG(auto_globals_cache)[opline->op2.u.var]) { - retval = CG(auto_globals_cache)[opline->op2.u.var]; - } else if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) { - retval = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname), 0 TSRMLS_CC); - } else { - zend_auto_global *auto_global = NULL; - - if (opline->op2.u.EA.type == ZEND_FETCH_AUTO_GLOBAL) { - zend_u_is_auto_global_ex(Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname), 1, &auto_global TSRMLS_CC); - } - target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), type, varname TSRMLS_CC); -/* - if (!target_symbol_table) { - ZEND_VM_NEXT_OPCODE(); - } -*/ - if (zend_u_hash_find(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, (void **) &retval) == FAILURE) { - switch (type) { - case BP_VAR_R: - case BP_VAR_UNSET: - zend_error(E_NOTICE,"Undefined variable: %R", Z_TYPE_P(varname), Z_UNIVAL_P(varname)); - /* break missing intentionally */ - case BP_VAR_IS: - retval = &EG(uninitialized_zval_ptr); - break; - case BP_VAR_RW: - zend_error(E_NOTICE,"Undefined variable: %R", Z_TYPE_P(varname), Z_UNIVAL_P(varname)); - /* break missing intentionally */ - case BP_VAR_W: { - zval *new_zval = &EG(uninitialized_zval); - - new_zval->refcount++; - zend_u_hash_update(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, &new_zval, sizeof(zval *), (void **) &retval); - } - break; - EMPTY_SWITCH_DEFAULT_CASE() - } - } - switch (opline->op2.u.EA.type) { - case ZEND_FETCH_AUTO_GLOBAL: - if (auto_global && (!auto_global->armed || !auto_global->runtime)) { - CG(auto_globals_cache)[opline->op2.u.var] = retval; - } - /* break missing intentionally */ - case ZEND_FETCH_GLOBAL: - if (OP1_TYPE != IS_TMP_VAR) { - FREE_OP1(); - } - break; - case ZEND_FETCH_LOCAL: - FREE_OP1(); - break; - case ZEND_FETCH_STATIC: - zval_update_constant(retval, (void*) 1 TSRMLS_CC); - break; - case ZEND_FETCH_GLOBAL_LOCK: - if (OP1_TYPE == IS_VAR && !free_op1.var) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - break; - } - } - - - if (varname == &tmp_varname) { - zval_dtor(varname); - } - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = retval; - PZVAL_LOCK(*retval); - switch (type) { - case BP_VAR_R: - case BP_VAR_IS: - AI_USE_PTR(EX_T(opline->result.u.var).var); - break; - case BP_VAR_UNSET: { - zend_free_op free_res; - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - break; - } - } - } - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(80, ZEND_FETCH_R, CONST|TMP|VAR|CV, ANY) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_fetch_var_address_helper, type, BP_VAR_R); -} - -ZEND_VM_HANDLER(83, ZEND_FETCH_W, CONST|TMP|VAR|CV, ANY) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_fetch_var_address_helper, type, BP_VAR_W); -} - -ZEND_VM_HANDLER(86, ZEND_FETCH_RW, CONST|TMP|VAR|CV, ANY) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_fetch_var_address_helper, type, BP_VAR_RW); -} - -ZEND_VM_HANDLER(92, ZEND_FETCH_FUNC_ARG, CONST|TMP|VAR|CV, ANY) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_fetch_var_address_helper, type, - ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), EX(opline)->extended_value)?BP_VAR_W:BP_VAR_R); -} - -ZEND_VM_HANDLER(95, ZEND_FETCH_UNSET, CONST|TMP|VAR|CV, ANY) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_fetch_var_address_helper, type, BP_VAR_UNSET); -} - -ZEND_VM_HANDLER(89, ZEND_FETCH_IS, CONST|TMP|VAR|CV, ANY) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_fetch_var_address_helper, type, BP_VAR_IS); -} - -ZEND_VM_HANDLER(81, ZEND_FETCH_DIM_R, VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *dim = GET_OP2_ZVAL_PTR(BP_VAR_R); - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && - OP1_TYPE != IS_CV && - EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), GET_OP1_ZVAL_PTR_PTR(BP_VAR_R), dim, IS_OP2_TMP_FREE(), BP_VAR_R TSRMLS_CC); - FREE_OP2(); - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(84, ZEND_FETCH_DIM_W, VAR|CV, CONST|TMP|VAR|UNUSED|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *dim = GET_OP2_ZVAL_PTR(BP_VAR_R); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), GET_OP1_ZVAL_PTR_PTR(BP_VAR_W), dim, IS_OP2_TMP_FREE(), BP_VAR_W TSRMLS_CC); - FREE_OP2(); - if (OP1_TYPE == IS_VAR && OP1_FREE && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(87, ZEND_FETCH_DIM_RW, VAR|CV, CONST|TMP|VAR|UNUSED|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *dim = GET_OP2_ZVAL_PTR(BP_VAR_R); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), GET_OP1_ZVAL_PTR_PTR(BP_VAR_RW), dim, IS_OP2_TMP_FREE(), BP_VAR_RW TSRMLS_CC); - FREE_OP2(); - if (OP1_TYPE == IS_VAR && OP1_FREE && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(90, ZEND_FETCH_DIM_IS, VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *dim = GET_OP2_ZVAL_PTR(BP_VAR_R); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), GET_OP1_ZVAL_PTR_PTR(BP_VAR_IS), dim, IS_OP2_TMP_FREE(), BP_VAR_IS TSRMLS_CC); - FREE_OP2(); - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(93, ZEND_FETCH_DIM_FUNC_ARG, VAR|CV, CONST|TMP|VAR|UNUSED|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R; - zval *dim; - - if (OP2_TYPE == IS_UNUSED && type == BP_VAR_R) { - zend_error_noreturn(E_ERROR, "Cannot use [] for reading"); - } - dim = GET_OP2_ZVAL_PTR(BP_VAR_R); - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), GET_OP1_ZVAL_PTR_PTR(type), dim, IS_OP2_TMP_FREE(), type TSRMLS_CC); - FREE_OP2(); - if (OP1_TYPE == IS_VAR && type == BP_VAR_W && OP1_FREE && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(96, ZEND_FETCH_DIM_UNSET, VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **container = GET_OP1_ZVAL_PTR_PTR(BP_VAR_UNSET); - zval *dim = GET_OP2_ZVAL_PTR(BP_VAR_R); - - /* Not needed in DIM_UNSET - if (opline->extended_value == ZEND_FETCH_ADD_LOCK) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - */ - if (OP1_TYPE == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, IS_OP2_TMP_FREE(), BP_VAR_UNSET TSRMLS_CC); - FREE_OP2(); - if (OP1_TYPE == IS_VAR && OP1_FREE && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - FREE_OP1_VAR_PTR(); - if (EX_T(opline->result.u.var).var.ptr_ptr == NULL) { - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - } else { - zend_free_op free_res; - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - } - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HELPER_EX(zend_fetch_property_address_read_helper, VAR|UNUSED|CV, CONST|TMP|VAR|CV, int type) -{ - zend_op *opline = EX(opline); - zval *container; - zval **retval; - zend_free_op free_op1; - - retval = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.ptr_ptr = retval; - - container = GET_OP1_OBJ_ZVAL_PTR(type); - - if (container == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(error_zval_ptr); - PZVAL_LOCK(*retval); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - FREE_OP1(); - ZEND_VM_NEXT_OPCODE(); - } - - - if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) { - if (type != BP_VAR_IS) { - zend_error(E_NOTICE, "Trying to get property of non-object"); - } - *retval = EG(uninitialized_zval_ptr); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } else { - zend_free_op free_op2; - zval *offset = GET_OP2_ZVAL_PTR(BP_VAR_R); - - if (IS_OP2_TMP_FREE()) { - MAKE_REAL_ZVAL_PTR(offset); - } - - /* here we are sure we are dealing with an object */ - *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC); - - if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) { - zval_dtor(*retval); - FREE_ZVAL(*retval); - } else { - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (IS_OP2_TMP_FREE()) { - zval_ptr_dtor(&offset); - } else { - FREE_OP2(); - } - } - - FREE_OP1(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(82, ZEND_FETCH_OBJ_R, VAR|UNUSED|CV, CONST|TMP|VAR|CV) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_fetch_property_address_read_helper, type, BP_VAR_R); -} - -ZEND_VM_HANDLER(85, ZEND_FETCH_OBJ_W, VAR|UNUSED|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *property = GET_OP2_ZVAL_PTR(BP_VAR_R); - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && OP1_TYPE != IS_CV) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr; - } - - if (IS_OP2_TMP_FREE()) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_W), property, BP_VAR_W TSRMLS_CC); - if (IS_OP2_TMP_FREE()) { - zval_ptr_dtor(&property); - } else { - FREE_OP2(); - } - if (OP1_TYPE == IS_VAR && OP1_FREE && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(88, ZEND_FETCH_OBJ_RW, VAR|UNUSED|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *property = GET_OP2_ZVAL_PTR(BP_VAR_R); - - if (IS_OP2_TMP_FREE()) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_RW), property, BP_VAR_RW TSRMLS_CC); - if (IS_OP2_TMP_FREE()) { - zval_ptr_dtor(&property); - } else { - FREE_OP2(); - } - if (OP1_TYPE == IS_VAR && OP1_FREE && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(91, ZEND_FETCH_OBJ_IS, VAR|UNUSED|CV, CONST|TMP|VAR|CV) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_fetch_property_address_read_helper, type, BP_VAR_IS); -} - -ZEND_VM_HANDLER(94, ZEND_FETCH_OBJ_FUNC_ARG, VAR|UNUSED|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - - if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { - /* Behave like FETCH_OBJ_W */ - zend_free_op free_op1, free_op2; - zval *property = GET_OP2_ZVAL_PTR(BP_VAR_R); - - if (IS_OP2_TMP_FREE()) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_W), property, BP_VAR_W TSRMLS_CC); - if (IS_OP2_TMP_FREE()) { - zval_ptr_dtor(&property); - } else { - FREE_OP2(); - } - if (OP1_TYPE == IS_VAR && OP1_FREE && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); - } else { - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_fetch_property_address_read_helper, type, BP_VAR_R); - } -} - -ZEND_VM_HANDLER(97, ZEND_FETCH_OBJ_UNSET, VAR|UNUSED|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2, free_res; - zval **container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_R); - zval *property = GET_OP2_ZVAL_PTR(BP_VAR_R); - - if (OP1_TYPE == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - if (IS_OP2_TMP_FREE()) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); - if (IS_OP2_TMP_FREE()) { - zval_ptr_dtor(&property); - } else { - FREE_OP2(); - } - if (OP1_TYPE == IS_VAR && OP1_FREE && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - FREE_OP1_VAR_PTR(); - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(98, ZEND_FETCH_DIM_TMP_VAR, CONST|TMP, CONST) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *container = GET_OP1_ZVAL_PTR(BP_VAR_R); - - if (Z_TYPE_P(container) != IS_ARRAY) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - } - } else { - zend_free_op free_op2; - zval *dim = GET_OP2_ZVAL_PTR(BP_VAR_R); - - EX_T(opline->result.u.var).var.ptr_ptr = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, BP_VAR_R TSRMLS_CC); - SELECTIVE_PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &opline->result); - FREE_OP2(); - } - AI_USE_PTR(EX_T(opline->result.u.var).var); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(136, ZEND_ASSIGN_OBJ, VAR|UNUSED|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op1; - zval **object_ptr = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_W); - - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC); - FREE_OP1_VAR_PTR(); - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(147, ZEND_ASSIGN_DIM, VAR|CV, CONST|TMP|VAR|UNUSED|CV) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op1; - zval **object_ptr; - - if (OP1_TYPE == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) { - /* not an array offset */ - object_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W); - } else { - object_ptr = NULL; - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC); - } else { - zend_free_op free_op2, free_op_data1; - zval *value; - zval *dim = GET_OP2_ZVAL_PTR(BP_VAR_R); - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, IS_OP2_TMP_FREE(), BP_VAR_W TSRMLS_CC); - FREE_OP2(); - - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC); - FREE_OP_IF_VAR(free_op_data1); - } - FREE_OP1_VAR_PTR(); - /* assign_dim has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(38, ZEND_ASSIGN, VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval *value = GET_OP2_ZVAL_PTR(BP_VAR_R); - - zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (IS_OP2_TMP_FREE()?IS_TMP_VAR:OP2_TYPE), EX(Ts) TSRMLS_CC); - /* zend_assign_to_variable() always takes care of op2, never free it! */ - FREE_OP2_IF_VAR(); - - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(39, ZEND_ASSIGN_REF, VAR|CV, VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **variable_ptr_ptr; - zval **value_ptr_ptr = GET_OP2_ZVAL_PTR_PTR(BP_VAR_W); - - if (OP2_TYPE == IS_VAR && - value_ptr_ptr && - !(*value_ptr_ptr)->is_ref && - opline->extended_value == ZEND_RETURNS_FUNCTION && - !EX_T(opline->op2.u.var).var.fcall_returned_reference) { - if (free_op2.var == NULL) { - PZVAL_LOCK(*value_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */ - } - zend_error(E_STRICT, "Only variables should be assigned by reference"); - ZEND_VM_DISPATCH_TO_HANDLER(ZEND_ASSIGN); - } - if (OP1_TYPE == IS_VAR && EX_T(opline->op1.u.var).var.ptr_ptr == &EX_T(opline->op1.u.var).var.ptr) { - zend_error(E_ERROR, "Cannot assign by reference to overloaded object"); - } - - variable_ptr_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W); - zend_assign_to_variable_reference(variable_ptr_ptr, value_ptr_ptr TSRMLS_CC); - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = variable_ptr_ptr; - PZVAL_LOCK(*variable_ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - FREE_OP1_VAR_PTR(); - FREE_OP2_VAR_PTR(); - - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(42, ZEND_JMP, ANY, ANY) -{ -#if DEBUG_ZEND>=2 - printf("Jumping to %d\n", EX(opline)->op1.u.opline_num); -#endif - ZEND_VM_SET_OPCODE(EX(opline)->op1.u.jmp_addr); - ZEND_VM_CONTINUE(); /* CHECK_ME */ -} - -ZEND_VM_HANDLER(43, ZEND_JMPZ, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int ret = i_zend_is_true(GET_OP1_ZVAL_PTR(BP_VAR_R)); - - FREE_OP1(); - if (!ret) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(44, ZEND_JMPNZ, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int ret = i_zend_is_true(GET_OP1_ZVAL_PTR(BP_VAR_R)); - - FREE_OP1(); - if (ret) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(45, ZEND_JMPZNZ, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int retval = i_zend_is_true(GET_OP1_ZVAL_PTR(BP_VAR_R)); - - FREE_OP1(); - if (retval) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp on true to %d\n", opline->extended_value); -#endif - ZEND_VM_JMP(&EX(op_array)->opcodes[opline->extended_value]); - } else { -#if DEBUG_ZEND>=2 - printf("Conditional jmp on false to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(&EX(op_array)->opcodes[opline->op2.u.opline_num]); - } -} - -ZEND_VM_HANDLER(46, ZEND_JMPZ_EX, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int retval = i_zend_is_true(GET_OP1_ZVAL_PTR(BP_VAR_R)); - - FREE_OP1(); - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = retval; - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - if (!retval) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(47, ZEND_JMPNZ_EX, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int retval = i_zend_is_true(GET_OP1_ZVAL_PTR(BP_VAR_R)); - - FREE_OP1(); - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = retval; - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - if (retval) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(70, ZEND_FREE, TMP, ANY) -{ - zendi_zval_dtor(EX_T(EX(opline)->op1.u.var).tmp_var); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(53, ZEND_INIT_STRING, ANY, ANY) -{ - zval *tmp = &EX_T(EX(opline)->result.u.var).tmp_var; - - if (EX(opline)->extended_value == IS_UNICODE) { - Z_USTRVAL_P(tmp) = eumalloc(1); - Z_USTRVAL_P(tmp)[0] = 0; - Z_USTRLEN_P(tmp) = 0; - Z_TYPE_P(tmp) = IS_UNICODE; - } else { - Z_STRVAL_P(tmp) = emalloc(1); - Z_STRVAL_P(tmp)[0] = 0; - Z_STRLEN_P(tmp) = 0; - Z_TYPE_P(tmp) = EX(opline)->extended_value; - } - tmp->refcount = 1; - tmp->is_ref = 0; - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(54, ZEND_ADD_CHAR, TMP, CONST) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - add_char_to_string(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_NA), - &opline->op2.u.constant); - /* FREE_OP is missing intentionally here - we're always working on the same temporary variable */ - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(55, ZEND_ADD_STRING, TMP, CONST) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - add_string_to_string(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_NA), - &opline->op2.u.constant); - /* FREE_OP is missing intentionally here - we're always working on the same temporary variable */ - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(56, ZEND_ADD_VAR, TMP, TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *var = GET_OP2_ZVAL_PTR(BP_VAR_R); - zval var_copy; - int use_copy; - - if (opline->extended_value == IS_UNICODE) { - zend_make_unicode_zval(var, &var_copy, &use_copy); - } else { - zend_make_printable_zval(var, &var_copy, &use_copy); - } - if (use_copy) { - var = &var_copy; - } - add_string_to_string(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_NA), var); - if (use_copy) { - zval_dtor(var); - } - /* original comment, possibly problematic: - * FREE_OP is missing intentionally here - we're always working on the same temporary variable - * (Zeev): I don't think it's problematic, we only use variables - * which aren't affected by FREE_OP(Ts, )'s anyway, unless they're - * string offsets or overloaded objects - */ - FREE_OP2(); - - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(109, ZEND_FETCH_CLASS, ANY, CONST|TMP|VAR|UNUSED|CV) -{ - zend_op *opline = EX(opline); - zval *class_name; - zend_free_op free_op2; - - - if (OP2_TYPE == IS_UNUSED) { - EX_T(opline->result.u.var).class_entry = zend_fetch_class(NULL, 0, opline->extended_value TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); - } - - class_name = GET_OP2_ZVAL_PTR(BP_VAR_R); - - switch (Z_TYPE_P(class_name)) { - case IS_OBJECT: - EX_T(opline->result.u.var).class_entry = Z_OBJCE_P(class_name); - break; - case IS_STRING: - case IS_UNICODE: - EX_T(opline->result.u.var).class_entry = zend_u_fetch_class(Z_TYPE_P(class_name), Z_UNIVAL_P(class_name), Z_UNILEN_P(class_name), opline->extended_value TSRMLS_CC); - break; - default: - zend_error_noreturn(E_ERROR, "Class name must be a valid object or a string"); - break; - } - - FREE_OP2(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, TMP|VAR|UNUSED|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zval *function_name; - zstr function_name_strval; - int function_name_strlen; - zend_free_op free_op1, free_op2; - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - function_name = GET_OP2_ZVAL_PTR(BP_VAR_R); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Method name must be a string"); - } - - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - EX(object) = GET_OP1_OBJ_ZVAL_PTR(BP_VAR_R); - - if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) { - if (Z_OBJ_HT_P(EX(object))->get_method == NULL) { - zend_error_noreturn(E_ERROR, "Object does not support method calls"); - } - - /* First, locate the function. */ - EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC); - if (!EX(fbc)) { - zend_error_noreturn(E_ERROR, "Call to undefined method %R::%R()", type, Z_OBJ_CLASS_NAME_P(EX(object)), Z_TYPE_P(function_name), function_name_strval); - } - } else { - zend_error_noreturn(E_ERROR, "Call to a member function %R() on a non-object", Z_TYPE_P(function_name), function_name_strval); - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (!PZVAL_IS_REF(EX(object))) { - EX(object)->refcount++; /* For $this pointer */ - } else { - zval *this_ptr; - ALLOC_ZVAL(this_ptr); - INIT_PZVAL_COPY(this_ptr, EX(object)); - zval_copy_ctor(this_ptr); - EX(object) = this_ptr; - } - } - - FREE_OP2(); - FREE_OP1_IF_VAR(); - - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, ANY, CONST|TMP|VAR|UNUSED|CV) -{ - zend_op *opline = EX(opline); - zval *function_name; - zend_class_entry *ce; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - ce = EX_T(opline->op1.u.var).class_entry; - if(OP2_TYPE != IS_UNUSED) { - zstr function_name_strval; - unsigned int function_name_strlen; - zend_bool is_const = (OP2_TYPE == IS_CONST); - zend_free_op free_op2; - - if (is_const) { - function_name_strval = Z_UNIVAL(opline->op2.u.constant); - function_name_strlen = Z_UNILEN(opline->op2.u.constant); - } else { - function_name = GET_OP2_ZVAL_PTR(BP_VAR_R); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Function name must be a string"); - } - function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); - } - - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); - - if (!is_const) { - efree(function_name_strval.v); - FREE_OP2(); - } - } else { - if(!ce->constructor) { - zend_error_noreturn(E_ERROR, "Can not call constructor"); - } - if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { - zend_error(E_COMPILE_ERROR, "Cannot call private %v::__construct()", ce->name); - } - EX(fbc) = ce->constructor; - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (OP2_TYPE != IS_UNUSED && - EG(This) && - Z_OBJ_HT_P(EG(This))->get_class_entry && - !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) { - /* We are calling method of the other (incompatible) class, - but passing $this. This is done for compatibility with php-4. */ - zend_error(E_STRICT, "Non-static method %v::%v() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name); - - } - if ((EX(object) = EG(This))) { - EX(object)->refcount++; - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(59, ZEND_INIT_FCALL_BY_NAME, ANY, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zval *function_name; - zend_function *function; - zstr function_name_strval, lcname; - unsigned int function_name_strlen, lcname_len; - zend_free_op free_op2; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - if (OP2_TYPE == IS_CONST) { - function_name = &opline->op2.u.constant; - } else { - function_name = GET_OP2_ZVAL_PTR(BP_VAR_R); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Function name must be a string"); - } - } - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - lcname = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), function_name_strlen, 1, &lcname_len); - if (zend_u_hash_find(EG(function_table), Z_TYPE_P(function_name), lcname, lcname_len+1, (void **) &function)==FAILURE) { - efree(lcname.v); - zend_error_noreturn(E_ERROR, "Call to undefined function %R()", Z_TYPE_P(function_name), function_name_strval); - } - - efree(lcname.v); - if (OP2_TYPE != IS_CONST) { - FREE_OP2(); - } - - EX(object) = NULL; - - EX(fbc) = function; - - ZEND_VM_NEXT_OPCODE(); -} - - -ZEND_VM_HELPER(zend_do_fcall_common_helper, ANY, ANY) -{ - zend_op *opline = EX(opline); - zval **original_return_value; - zend_class_entry *current_scope = NULL; - zval *current_this = NULL; - int return_value_used = RETURN_VALUE_USED(opline); - zend_bool should_change_scope; - zend_op *ctor_opline; - - if (EX(function_state).function->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) { - if (EX(function_state).function->common.fn_flags & ZEND_ACC_ABSTRACT) { - /* FIXME: output identifiers properly */ - zend_error_noreturn(E_ERROR, "Cannot call abstract method %v::%v()", EX(function_state).function->common.scope->name, EX(function_state).function->common.function_name); - ZEND_VM_NEXT_OPCODE(); /* Never reached */ - } - if (EX(function_state).function->common.fn_flags & ZEND_ACC_DEPRECATED) { - zend_error(E_STRICT, "Function %v%s%v() is deprecated", - EX(function_state).function->common.scope ? EX(function_state).function->common.scope->name : EMPTY_ZSTR, - EX(function_state).function->common.scope ? "::" : "", - EX(function_state).function->common.function_name); - } - } - - zend_ptr_stack_2_push(&EG(argument_stack), (void *) opline->extended_value, NULL); - - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - - if (EX(function_state).function->type == ZEND_USER_FUNCTION - || EX(function_state).function->common.scope) { - should_change_scope = 1; - current_this = EG(This); - EG(This) = EX(object); - current_scope = EG(scope); - EG(scope) = (EX(function_state).function->type == ZEND_USER_FUNCTION || !EX(object)) ? EX(function_state).function->common.scope : NULL; - } else { - should_change_scope = 0; - } - - EX_T(opline->result.u.var).var.fcall_returned_reference = 0; - - if (EX(function_state).function->common.scope) { - if (!EG(This) && !(EX(function_state).function->common.fn_flags & ZEND_ACC_STATIC)) { - int severity; - char *severity_word; - if (EX(function_state).function->common.fn_flags & ZEND_ACC_ALLOW_STATIC) { - severity = E_STRICT; - severity_word = "should not"; - } else { - severity = E_ERROR; - severity_word = "cannot"; - } - /* FIXME: output identifiers properly */ - zend_error(severity, "Non-static method %v::%v() %s be called statically", EX(function_state).function->common.scope->name, EX(function_state).function->common.function_name, severity_word); - } - } - if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) { - unsigned char return_reference = EX(function_state).function->common.return_reference; - - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - INIT_ZVAL(*(EX_T(opline->result.u.var).var.ptr)); - - if (EX(function_state).function->common.arg_info) { - zend_uint i=0; - zval **p; - ulong arg_count; - - p = (zval **) EG(argument_stack).top_element-2; - arg_count = (ulong) *p; - - while (arg_count>0) { - zend_verify_arg_type(EX(function_state).function, ++i, *(p-arg_count) TSRMLS_CC); - arg_count--; - } - } - if (!zend_execute_internal) { - /* saves one function call if zend_execute_internal is not used */ - ((zend_internal_function *) EX(function_state).function)->handler(opline->extended_value, EX_T(opline->result.u.var).var.ptr, &EX_T(opline->result.u.var).var.ptr, EX(object), return_value_used TSRMLS_CC); - } else { - zend_execute_internal(EXECUTE_DATA, return_value_used TSRMLS_CC); - } - - EG(current_execute_data) = EXECUTE_DATA; - -/* We shouldn't fix bad extensions here, - because it can break proper ones (Bug #34045) - if (!EX(function_state).function->common.return_reference) { - EX_T(opline->result.u.var).var.ptr->is_ref = 0; - EX_T(opline->result.u.var).var.ptr->refcount = 1; - } -*/ - if (!return_value_used) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); - } else { - EX_T(opline->result.u.var).var.fcall_returned_reference = return_reference; - } - } else if (EX(function_state).function->type == ZEND_USER_FUNCTION) { - EX_T(opline->result.u.var).var.ptr = NULL; - if (EG(symtable_cache_ptr)>=EG(symtable_cache)) { - /*printf("Cache hit! Reusing %x\n", symtable_cache[symtable_cache_ptr]);*/ - EX(function_state).function_symbol_table = *(EG(symtable_cache_ptr)--); - } else { - ALLOC_HASHTABLE(EX(function_state).function_symbol_table); - zend_u_hash_init(EX(function_state).function_symbol_table, 0, NULL, ZVAL_PTR_DTOR, 0, UG(unicode)); - /*printf("Cache miss! Initialized %x\n", function_state.function_symbol_table);*/ - } - EG(active_symbol_table) = EX(function_state).function_symbol_table; - original_return_value = EG(return_value_ptr_ptr); - EG(return_value_ptr_ptr) = EX_T(opline->result.u.var).var.ptr_ptr; - EG(active_op_array) = (zend_op_array *) EX(function_state).function; - - zend_execute(EG(active_op_array) TSRMLS_CC); - EX_T(opline->result.u.var).var.fcall_returned_reference = EG(active_op_array)->return_reference; - - if (return_value_used && !EX_T(opline->result.u.var).var.ptr) { - if (!EG(exception)) { - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - INIT_ZVAL(*EX_T(opline->result.u.var).var.ptr); - } - } else if (!return_value_used && EX_T(opline->result.u.var).var.ptr) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); - } - - EG(opline_ptr) = &EX(opline); - EG(active_op_array) = EX(op_array); - EG(return_value_ptr_ptr)=original_return_value; - if (EG(symtable_cache_ptr)>=EG(symtable_cache_limit)) { - zend_hash_destroy(EX(function_state).function_symbol_table); - FREE_HASHTABLE(EX(function_state).function_symbol_table); - } else { - /* clean before putting into the cache, since clean - could call dtors, which could use cached hash */ - zend_hash_clean(EX(function_state).function_symbol_table); - *(++EG(symtable_cache_ptr)) = EX(function_state).function_symbol_table; - } - EG(active_symbol_table) = EX(symbol_table); - } else { /* ZEND_OVERLOADED_FUNCTION */ - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - INIT_ZVAL(*(EX_T(opline->result.u.var).var.ptr)); - - /* Not sure what should be done here if it's a static method */ - if (EX(object)) { - Z_OBJ_HT_P(EX(object))->call_method(EX(fbc)->common.function_name, opline->extended_value, EX_T(opline->result.u.var).var.ptr, &EX_T(opline->result.u.var).var.ptr, EX(object), return_value_used TSRMLS_CC); - } else { - zend_error_noreturn(E_ERROR, "Cannot call overloaded function for non-object"); - } - - if (EX(function_state).function->type == ZEND_OVERLOADED_FUNCTION_TEMPORARY) { - efree(EX(function_state).function->common.function_name.v); - } - efree(EX(fbc)); - - if (!return_value_used) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); - } else { - EX_T(opline->result.u.var).var.ptr->is_ref = 0; - EX_T(opline->result.u.var).var.ptr->refcount = 1; - } - } - - ctor_opline = (zend_op*)zend_ptr_stack_pop(&EG(arg_types_stack)); - - if (EG(This)) { - if (EG(exception) && ctor_opline) { - if (RETURN_VALUE_USED(ctor_opline)) { - EG(This)->refcount--; - } - if (EG(This)->refcount == 1) { - zend_object_store_ctor_failed(EG(This) TSRMLS_CC); - } - } - if (should_change_scope) { - zval_ptr_dtor(&EG(This)); - } - } - - if (should_change_scope) { - EG(This) = current_this; - EG(scope) = current_scope; - } - zend_ptr_stack_2_pop(&EG(arg_types_stack), (void**)&EX(object), (void**)&EX(fbc)); - - EX(function_state).function = (zend_function *) EX(op_array); - EG(function_state_ptr) = &EX(function_state); - zend_ptr_stack_clear_multiple(TSRMLS_C); - - if (EG(exception)) { - zend_throw_exception_internal(NULL TSRMLS_CC); - if (return_value_used && EX_T(opline->result.u.var).var.ptr) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(61, ZEND_DO_FCALL_BY_NAME, ANY, ANY) -{ - EX(function_state).function = EX(fbc); - ZEND_VM_DISPATCH_TO_HELPER(zend_do_fcall_common_helper); -} - -ZEND_VM_HANDLER(60, ZEND_DO_FCALL, CONST, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *fname = GET_OP1_ZVAL_PTR(BP_VAR_R); - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - if (zend_u_hash_find(EG(function_table), Z_TYPE_P(fname), Z_UNIVAL_P(fname), Z_UNILEN_P(fname)+1, (void **) &EX(function_state).function)==FAILURE) { - /* FIXME: output identifiers properly */ - zend_error_noreturn(E_ERROR, "Call to undefined function %R()", Z_TYPE_P(fname), Z_UNIVAL_P(fname)); - } - EX(object) = NULL; - - FREE_OP1(); - - ZEND_VM_DISPATCH_TO_HELPER(zend_do_fcall_common_helper); -} - -ZEND_VM_HANDLER(62, ZEND_RETURN, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zval *retval_ptr; - zval **retval_ptr_ptr; - zend_free_op free_op1; - - if (EG(active_op_array)->return_reference == ZEND_RETURN_REF) { - - if (OP1_TYPE == IS_CONST || OP1_TYPE == IS_TMP_VAR) { - /* Not supposed to happen, but we'll allow it */ - zend_error(E_NOTICE, "Only variable references should be returned by reference"); - ZEND_VM_C_GOTO(return_by_value); - } - - retval_ptr_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W); - - if (!retval_ptr_ptr) { - zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference"); - } - - if (OP1_TYPE == IS_VAR && !(*retval_ptr_ptr)->is_ref) { - if (opline->extended_value == ZEND_RETURNS_FUNCTION && - EX_T(opline->op1.u.var).var.fcall_returned_reference) { - } else if (opline->extended_value == ZEND_RETURNS_NEW) { - } else if (EX_T(opline->op1.u.var).var.ptr_ptr == &EX_T(opline->op1.u.var).var.ptr) { - if (OP1_TYPE == IS_VAR && !OP1_FREE) { - PZVAL_LOCK(*retval_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */ - } - zend_error(E_NOTICE, "Only variable references should be returned by reference"); - ZEND_VM_C_GOTO(return_by_value); - } - } - - SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr_ptr); - (*retval_ptr_ptr)->refcount++; - - (*EG(return_value_ptr_ptr)) = (*retval_ptr_ptr); - } else { -ZEND_VM_C_LABEL(return_by_value): - - retval_ptr = GET_OP1_ZVAL_PTR(BP_VAR_R); - - if (!IS_OP1_TMP_FREE()) { /* Not a temp var */ - if (EG(active_op_array)->return_reference == ZEND_RETURN_REF || - (PZVAL_IS_REF(retval_ptr) && retval_ptr->refcount > 0)) { - zval *ret; - - ALLOC_ZVAL(ret); - INIT_PZVAL_COPY(ret, retval_ptr); - zval_copy_ctor(ret); - *EG(return_value_ptr_ptr) = ret; - } else { - *EG(return_value_ptr_ptr) = retval_ptr; - retval_ptr->refcount++; - } - } else { - zval *ret; - - ALLOC_ZVAL(ret); - INIT_PZVAL_COPY(ret, retval_ptr); - *EG(return_value_ptr_ptr) = ret; - } - } - FREE_OP1_IF_VAR(); - ZEND_VM_RETURN_FROM_EXECUTE_LOOP(); -} - -ZEND_VM_HANDLER(108, ZEND_THROW, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zval *value; - zval *exception; - zend_free_op free_op1; - - value = GET_OP1_ZVAL_PTR(BP_VAR_R); - - if (Z_TYPE_P(value) != IS_OBJECT) { - zend_error_noreturn(E_ERROR, "Can only throw objects"); - } - /* Not sure if a complete copy is what we want here */ - ALLOC_ZVAL(exception); - INIT_PZVAL_COPY(exception, value); - if (!IS_OP1_TMP_FREE()) { - zval_copy_ctor(exception); - } - - zend_throw_exception_object(exception TSRMLS_CC); - FREE_OP1_IF_VAR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(107, ZEND_CATCH, ANY, ANY) -{ - zend_op *opline = EX(opline); - zend_class_entry *ce; - - /* Check whether an exception has been thrown, if not, jump over code */ - if (EG(exception) == NULL) { - ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->extended_value]); - ZEND_VM_CONTINUE(); /* CHECK_ME */ - } - ce = Z_OBJCE_P(EG(exception)); - if (ce != EX_T(opline->op1.u.var).class_entry) { - if (!instanceof_function(ce, EX_T(opline->op1.u.var).class_entry TSRMLS_CC)) { - if (opline->op1.u.EA.type) { - zend_throw_exception_internal(NULL TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); - } - ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->extended_value]); - ZEND_VM_CONTINUE(); /* CHECK_ME */ - } - } - - zend_u_hash_update(EG(active_symbol_table), Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant), - Z_UNILEN(opline->op2.u.constant)+1, &EG(exception), sizeof(zval *), (void **) NULL); - EG(exception) = NULL; - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(65, ZEND_SEND_VAL, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - if (opline->extended_value==ZEND_DO_FCALL_BY_NAME - && ARG_MUST_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) { - zend_error_noreturn(E_ERROR, "Cannot pass parameter %d by reference", opline->op2.u.opline_num); - } - { - zval *valptr; - zval *value; - zend_free_op free_op1; - - value = GET_OP1_ZVAL_PTR(BP_VAR_R); - - ALLOC_ZVAL(valptr); - INIT_PZVAL_COPY(valptr, value); - if (!IS_OP1_TMP_FREE()) { - zval_copy_ctor(valptr); - } - zend_ptr_stack_push(&EG(argument_stack), valptr); - FREE_OP1_IF_VAR(); - } - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HELPER(zend_send_by_var_helper, VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zval *varptr; - zend_free_op free_op1; - varptr = GET_OP1_ZVAL_PTR(BP_VAR_R); - - if (varptr == &EG(uninitialized_zval)) { - ALLOC_ZVAL(varptr); - INIT_ZVAL(*varptr); - varptr->refcount = 0; - } else if (PZVAL_IS_REF(varptr)) { - zval *original_var = varptr; - - ALLOC_ZVAL(varptr); - *varptr = *original_var; - varptr->is_ref = 0; - varptr->refcount = 0; - zval_copy_ctor(varptr); - } - varptr->refcount++; - zend_ptr_stack_push(&EG(argument_stack), varptr); - FREE_OP1(); /* for string offsets */ - - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(106, ZEND_SEND_VAR_NO_REF, VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *varptr; - - if (opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) { /* Had function_ptr at compile_time */ - if (!(opline->extended_value & ZEND_ARG_SEND_BY_REF)) { - ZEND_VM_DISPATCH_TO_HELPER(zend_send_by_var_helper); - } - } else if (!ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) { - ZEND_VM_DISPATCH_TO_HELPER(zend_send_by_var_helper); - } - - if (OP1_TYPE == IS_VAR && - (opline->extended_value & ZEND_ARG_SEND_FUNCTION) && - EX_T(opline->op1.u.var).var.fcall_returned_reference && - EX_T(opline->op1.u.var).var.ptr) { - varptr = EX_T(opline->op1.u.var).var.ptr; - PZVAL_UNLOCK_EX(varptr, &free_op1, 0); - } else { - varptr = GET_OP1_ZVAL_PTR(BP_VAR_R); - } - if ((!(opline->extended_value & ZEND_ARG_SEND_FUNCTION) || - EX_T(opline->op1.u.var).var.fcall_returned_reference) && - varptr != &EG(uninitialized_zval) && - (PZVAL_IS_REF(varptr) || - (varptr->refcount == 1 && (OP1_TYPE == IS_CV || free_op1.var)))) { - varptr->is_ref = 1; - varptr->refcount++; - zend_ptr_stack_push(&EG(argument_stack), varptr); - } else { - zval *valptr; - - zend_error(E_STRICT, "Only variables should be passed by reference"); - ALLOC_ZVAL(valptr); - INIT_PZVAL_COPY(valptr, varptr); - if (!IS_OP1_TMP_FREE()) { - zval_copy_ctor(valptr); - } - zend_ptr_stack_push(&EG(argument_stack), valptr); - } - FREE_OP1_IF_VAR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(67, ZEND_SEND_REF, VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **varptr_ptr; - zval *varptr; - varptr_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W); - - if (!varptr_ptr) { - zend_error_noreturn(E_ERROR, "Only variables can be passed by reference"); - } - - SEPARATE_ZVAL_TO_MAKE_IS_REF(varptr_ptr); - varptr = *varptr_ptr; - varptr->refcount++; - zend_ptr_stack_push(&EG(argument_stack), varptr); - - FREE_OP1_VAR_PTR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(66, ZEND_SEND_VAR, VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - - if ((opline->extended_value == ZEND_DO_FCALL_BY_NAME) - && ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) { - ZEND_VM_DISPATCH_TO_HANDLER(ZEND_SEND_REF); - } - ZEND_VM_DISPATCH_TO_HELPER(zend_send_by_var_helper); -} - -ZEND_VM_HANDLER(63, ZEND_RECV, ANY, ANY) -{ - zend_op *opline = EX(opline); - zval **param; - zend_uint arg_num = Z_LVAL(opline->op1.u.constant); - - if (zend_ptr_stack_get_arg(arg_num, (void **) ¶m TSRMLS_CC)==FAILURE) { - char *space; - zstr class_name = get_active_class_name(&space TSRMLS_CC); - zend_execute_data *ptr = EX(prev_execute_data); - - if (zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, NULL TSRMLS_CC)) { - if(ptr && ptr->op_array) { - zend_error(E_WARNING, "Missing argument %ld for %v%s%v(), called in %s on line %d and defined", Z_LVAL(opline->op1.u.constant), class_name, space, get_active_function_name(TSRMLS_C), ptr->op_array->filename, ptr->opline->lineno); - } else { - zend_error(E_WARNING, "Missing argument %ld for %v%s%v()", Z_LVAL(opline->op1.u.constant), class_name, space, get_active_function_name(TSRMLS_C)); - } - } - if (opline->result.op_type == IS_VAR) { - PZVAL_UNLOCK_FREE(*EX_T(opline->result.u.var).var.ptr_ptr); - } - } else { - zend_free_op free_res; - zval **var_ptr; - - zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, *param TSRMLS_CC); - var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W); - if (PZVAL_IS_REF(*param)) { - zend_assign_to_variable_reference(var_ptr, param TSRMLS_CC); - } else { - zend_receive(var_ptr, *param TSRMLS_CC); - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(64, ZEND_RECV_INIT, ANY, CONST) -{ - zend_op *opline = EX(opline); - zval **param, *assignment_value; - zend_uint arg_num = Z_LVAL(opline->op1.u.constant); - zend_free_op free_res; - - if (zend_ptr_stack_get_arg(arg_num, (void **) ¶m TSRMLS_CC)==FAILURE) { - if (Z_TYPE(opline->op2.u.constant) == IS_CONSTANT || Z_TYPE(opline->op2.u.constant)==IS_CONSTANT_ARRAY) { - zval *default_value; - - ALLOC_ZVAL(default_value); - *default_value = opline->op2.u.constant; - if (Z_TYPE(opline->op2.u.constant)==IS_CONSTANT_ARRAY) { - zval_copy_ctor(default_value); - } - default_value->refcount=1; - zval_update_constant(&default_value, 0 TSRMLS_CC); - default_value->refcount=0; - default_value->is_ref=0; - param = &default_value; - assignment_value = default_value; - } else { - param = NULL; - assignment_value = &opline->op2.u.constant; - } - zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, assignment_value TSRMLS_CC); - zend_assign_to_variable(NULL, &opline->result, NULL, assignment_value, IS_VAR, EX(Ts) TSRMLS_CC); - } else { - zval **var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W); - - assignment_value = *param; - zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, assignment_value TSRMLS_CC); - if (PZVAL_IS_REF(assignment_value)) { - zend_assign_to_variable_reference(var_ptr, param TSRMLS_CC); - } else { - zend_receive(var_ptr, assignment_value TSRMLS_CC); - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(52, ZEND_BOOL, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - /* PHP 3.0 returned "" for false and 1 for true, here we use 0 and 1 for now */ - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = i_zend_is_true(GET_OP1_ZVAL_PTR(BP_VAR_R)); - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - FREE_OP1(); - - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(50, ZEND_BRK, ANY, CONST) -{ - zend_op *opline = EX(opline); - zend_brk_cont_element *el; - - el = zend_brk_cont(Z_LVAL(opline->op2.u.constant), opline->op1.u.opline_num, - EX(op_array), EX(Ts) TSRMLS_CC); - ZEND_VM_JMP(EX(op_array)->opcodes + el->brk); -} - -ZEND_VM_HANDLER(51, ZEND_CONT, ANY, CONST) -{ - zend_op *opline = EX(opline); - zend_brk_cont_element *el; - - el = zend_brk_cont(Z_LVAL(opline->op2.u.constant), opline->op1.u.opline_num, - EX(op_array), EX(Ts) TSRMLS_CC); - ZEND_VM_JMP(EX(op_array)->opcodes + el->cont); -} - -ZEND_VM_HANDLER(69, ZEND_GOTO, ANY, CONST) -{ - zend_op *brk_opline; - zend_op *opline = EX(opline); - zend_brk_cont_element *el; - - el = zend_brk_cont(Z_LVAL(opline->op2.u.constant), opline->extended_value, - EX(op_array), EX(Ts) TSRMLS_CC); - - brk_opline = EX(op_array)->opcodes + el->brk; - - switch (brk_opline->opcode) { - case ZEND_SWITCH_FREE: - zend_switch_free(brk_opline, EX(Ts) TSRMLS_CC); - break; - case ZEND_FREE: - zendi_zval_dtor(EX_T(brk_opline->op1.u.var).tmp_var); - break; - } - ZEND_VM_JMP(opline->op1.u.jmp_addr); -} - -ZEND_VM_HANDLER(48, ZEND_CASE, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - int switch_expr_is_overloaded=0; - zend_free_op free_op1, free_op2; - - if (OP1_TYPE==IS_VAR) { - if (EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr); - } else { - switch_expr_is_overloaded = 1; - EX_T(opline->op1.u.var).str_offset.str->refcount++; - } - } - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - GET_OP1_ZVAL_PTR(BP_VAR_R), - GET_OP2_ZVAL_PTR(BP_VAR_R) TSRMLS_CC); - - FREE_OP2(); - if (switch_expr_is_overloaded) { - /* We only free op1 if this is a string offset, - * Since if it is a TMP_VAR, it'll be reused by - * other CASE opcodes (whereas string offsets - * are allocated at each get_zval_ptr()) - */ - FREE_OP1(); - EX_T(opline->op1.u.var).var.ptr_ptr = NULL; - AI_USE_PTR(EX_T(opline->op1.u.var).var); - } - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(49, ZEND_SWITCH_FREE, TMP|VAR, ANY) -{ - zend_switch_free(EX(opline), EX(Ts) TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(68, ZEND_NEW, ANY, ANY) -{ - zend_op *opline = EX(opline); - zval *object_zval; - zend_function *constructor; - - if (EX_T(opline->op1.u.var).class_entry->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_IMPLICIT_ABSTRACT_CLASS|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) { - char *class_type; - - if (EX_T(opline->op1.u.var).class_entry->ce_flags & ZEND_ACC_INTERFACE) { - class_type = "interface"; - } else { - class_type = "abstract class"; - } - zend_error_noreturn(E_ERROR, "Cannot instantiate %s %v", class_type, EX_T(opline->op1.u.var).class_entry->name); - } - ALLOC_ZVAL(object_zval); - object_init_ex(object_zval, EX_T(opline->op1.u.var).class_entry); - INIT_PZVAL(object_zval); - - constructor = Z_OBJ_HT_P(object_zval)->get_constructor(object_zval TSRMLS_CC); - - if (constructor == NULL) { - if (RETURN_VALUE_USED(opline)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.ptr = object_zval; - } else { - zval_ptr_dtor(&object_zval); - } - ZEND_VM_JMP(EX(op_array)->opcodes + opline->op2.u.opline_num); - } else { - SELECTIVE_PZVAL_LOCK(object_zval, &opline->result); - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.ptr = object_zval; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), opline); - - /* We are not handling overloaded classes right now */ - EX(object) = object_zval; - EX(fbc) = constructor; - - ZEND_VM_NEXT_OPCODE(); - } -} - -ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMP|VAR|UNUSED|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *obj = GET_OP1_OBJ_ZVAL_PTR(BP_VAR_R); - zend_class_entry *ce; - zend_function *clone; - zend_object_clone_obj_t clone_call; - - if (!obj || Z_TYPE_P(obj) != IS_OBJECT) { - zend_error(E_WARNING, "__clone method called on non-object"); - EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); - EX_T(opline->result.u.var).var.ptr->refcount++; - FREE_OP1_IF_VAR(); - ZEND_VM_NEXT_OPCODE(); - } - - ce = Z_OBJCE_P(obj); - clone = ce ? ce->clone : NULL; - clone_call = Z_OBJ_HT_P(obj)->clone_obj; - if (!clone_call) { - if (ce) { - zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %v", ce->name); - } else { - zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object"); - } - EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); - EX_T(opline->result.u.var).var.ptr->refcount++; - } - - if (ce && clone) { - if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) { - /* Ensure that if we're calling a private function, we're allowed to do so. - */ - if (ce != EG(scope)) { - zend_error_noreturn(E_ERROR, "Call to private %v::__clone() from context '%v'", ce->name, EG(scope) ? EG(scope)->name : EMPTY_ZSTR); - } - } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) { - /* Ensure that if we're calling a protected function, we're allowed to do so. - */ - if (!zend_check_protected(clone->common.scope, EG(scope))) { - zend_error_noreturn(E_ERROR, "Call to protected %v::__clone() from context '%v'", ce->name, EG(scope) ? EG(scope)->name : EMPTY_ZSTR); - } - } - } - - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - if (!EG(exception)) { - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - Z_OBJVAL_P(EX_T(opline->result.u.var).var.ptr) = clone_call(obj TSRMLS_CC); - Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_OBJECT; - EX_T(opline->result.u.var).var.ptr->refcount=1; - EX_T(opline->result.u.var).var.ptr->is_ref=1; - if (!RETURN_VALUE_USED(opline) || EG(exception)) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); - } - } - FREE_OP1_IF_VAR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(99, ZEND_FETCH_CONSTANT, CONST|UNUSED, CONST) -{ - zend_op *opline = EX(opline); - zend_class_entry *ce = NULL; - zval **value; - - if (OP1_TYPE == IS_UNUSED) { -/* This seems to be a reminant of namespaces - if (EG(scope)) { - ce = EG(scope); - if (zend_hash_find(&ce->constants_table, Z_STRVAL(opline->op2.u.constant), Z_STRLEN(opline->op2.u.constant)+1, (void **) &value) == SUCCESS) { - zval_update_constant(value, (void *) 1 TSRMLS_CC); - EX_T(opline->result.u.var).tmp_var = **value; - zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var); - ZEND_VM_NEXT_OPCODE(); - } - } -*/ - if (!zend_u_get_constant(Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant), Z_UNILEN(opline->op2.u.constant), &EX_T(opline->result.u.var).tmp_var, NULL TSRMLS_CC)) { - zend_error(E_NOTICE, "Use of undefined constant %R - assumed '%R'", - Z_TYPE(opline->op2.u.constant), - Z_UNIVAL(opline->op2.u.constant), - Z_TYPE(opline->op2.u.constant), - Z_UNIVAL(opline->op2.u.constant)); - EX_T(opline->result.u.var).tmp_var = opline->op2.u.constant; - zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var); - } - ZEND_VM_NEXT_OPCODE(); - } - - ce = EX_T(opline->op1.u.var).class_entry; - - if (zend_u_hash_find(&ce->constants_table, Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant), Z_UNILEN(opline->op2.u.constant)+1, (void **) &value) == SUCCESS) { - zval_update_constant(value, (void *) 1 TSRMLS_CC); - EX_T(opline->result.u.var).tmp_var = **value; - zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var); - } else { - zend_error_noreturn(E_ERROR, "Undefined class constant '%R'", Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant)); - } - - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(72, ZEND_ADD_ARRAY_ELEMENT, CONST|TMP|VAR|CV, CONST|TMP|VAR|UNUSED|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=GET_OP2_ZVAL_PTR(BP_VAR_R); - -#if !defined(ZEND_VM_SPEC) || OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=GET_OP1_ZVAL_PTR_PTR(BP_VAR_W); - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=GET_OP1_ZVAL_PTR(BP_VAR_R); - } -#else - expr_ptr=GET_OP1_ZVAL_PTR(BP_VAR_R); -#endif - - if (IS_OP1_TMP_FREE()) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if !defined(ZEND_VM_SPEC) || OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - FREE_OP2(); - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - FREE_OP1_VAR_PTR(); - } else { - FREE_OP1_IF_VAR(); - } - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(71, ZEND_INIT_ARRAY, CONST|TMP|VAR|UNUSED|CV, CONST|TMP|VAR|UNUSED|CV) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (OP1_TYPE == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if !defined(ZEND_VM_SPEC) || OP1_TYPE != IS_UNUSED - } else { - ZEND_VM_DISPATCH_TO_HANDLER(ZEND_ADD_ARRAY_ELEMENT); -#endif - } -} - -ZEND_VM_HANDLER(21, ZEND_CAST, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *expr = GET_OP1_ZVAL_PTR(BP_VAR_R); - zval *result = &EX_T(opline->result.u.var).tmp_var; - - *result = *expr; - if (!IS_OP1_TMP_FREE()) { - zendi_zval_copy_ctor(*result); - } - switch (opline->extended_value) { - case IS_NULL: - convert_to_null(result); - break; - case IS_BOOL: - convert_to_boolean(result); - break; - case IS_LONG: - convert_to_long(result); - break; - case IS_DOUBLE: - convert_to_double(result); - break; - case IS_STRING: { - zval var_copy; - int use_copy; - - zend_make_string_zval(result, &var_copy, &use_copy); - if (use_copy) { - zval_dtor(result); - *result = var_copy; - } - break; - } - case IS_UNICODE: { - zval var_copy; - int use_copy; - - zend_make_unicode_zval(result, &var_copy, &use_copy); - if (use_copy) { - zval_dtor(result); - *result = var_copy; - } - break; - } - case IS_ARRAY: - convert_to_array(result); - break; - case IS_OBJECT: - convert_to_object(result); - break; - } - FREE_OP1_IF_VAR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_op_array *new_op_array=NULL; - zval **original_return_value = EG(return_value_ptr_ptr); - int return_value_used = RETURN_VALUE_USED(opline); - zend_free_op free_op1; - zval *inc_filename = GET_OP1_ZVAL_PTR(BP_VAR_R); - zval tmp_inc_filename; - zend_bool failure_retval=0; - - if (UG(unicode) && Z_LVAL(opline->op2.u.constant) == ZEND_EVAL) { - if (Z_TYPE_P(inc_filename) != IS_UNICODE) { - tmp_inc_filename = *inc_filename; - zval_copy_ctor(&tmp_inc_filename); - convert_to_unicode(&tmp_inc_filename); - inc_filename = &tmp_inc_filename; - } - } else if (Z_TYPE_P(inc_filename) == IS_UNICODE) { - char *encpath; - int encpath_len; - - if (FAILURE == zend_path_encode(&encpath, &encpath_len, Z_USTRVAL_P(inc_filename), Z_USTRLEN_P(inc_filename) TSRMLS_CC)) { - failure_retval = 0; - zend_error(E_ERROR, "Failure converting '%R' to filesystem encoding", IS_UNICODE, Z_USTRVAL_P(inc_filename)); - goto skip_compile; - } - - ZVAL_STRINGL(&tmp_inc_filename, encpath, encpath_len, 0); - inc_filename = &tmp_inc_filename; - } else if (Z_TYPE_P(inc_filename) != IS_STRING) { - tmp_inc_filename = *inc_filename; - zval_copy_ctor(&tmp_inc_filename); - convert_to_string(&tmp_inc_filename); - inc_filename = &tmp_inc_filename; - } - - switch (Z_LVAL(opline->op2.u.constant)) { - case ZEND_INCLUDE_ONCE: - case ZEND_REQUIRE_ONCE: { - zend_file_handle file_handle; - char cwd[MAXPATHLEN]; - cwd_state state; - - if (IS_ABSOLUTE_PATH(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename))) { - cwd[0] = '\0'; - } else if (!VCWD_GETCWD(cwd, MAXPATHLEN)) { - cwd[0] = '\0'; - } - - state.cwd_length = strlen(cwd); - state.cwd = zend_strndup(cwd, state.cwd_length); - - failure_retval = (!virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) && - zend_hash_exists(&EG(included_files), state.cwd, state.cwd_length+1)); - - free(state.cwd); - - if (failure_retval) { - /* do nothing */ - } else if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) { - if (!file_handle.opened_path) { - file_handle.opened_path = estrndup(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename)); - } - - if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) { - new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC); - zend_destroy_file_handle(&file_handle TSRMLS_CC); - } else { - zend_file_handle_dtor(&file_handle); - failure_retval=1; - } - } else { - if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) { - zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename)); - } else { - zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename)); - } - } - } - break; - case ZEND_INCLUDE: - case ZEND_REQUIRE: - new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC); - break; - case ZEND_EVAL: { - char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC); - - new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC); - efree(eval_desc); - } - break; - EMPTY_SWITCH_DEFAULT_CASE() - } - -skip_compile: - if (inc_filename==&tmp_inc_filename) { - zval_dtor(&tmp_inc_filename); - } - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - if (new_op_array) { - zval *saved_object; - zend_function *saved_function; - - EG(return_value_ptr_ptr) = EX_T(opline->result.u.var).var.ptr_ptr; - EG(active_op_array) = new_op_array; - EX_T(opline->result.u.var).var.ptr = NULL; - - saved_object = EX(object); - saved_function = EX(function_state).function; - - EX(function_state).function = (zend_function *) new_op_array; - EX(object) = NULL; - - zend_execute(new_op_array TSRMLS_CC); - - EX(function_state).function = saved_function; - EX(object) = saved_object; - - if (!return_value_used) { - if (EX_T(opline->result.u.var).var.ptr) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); - } - } else { /* return value is used */ - if (!EX_T(opline->result.u.var).var.ptr) { /* there was no return statement */ - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - INIT_PZVAL(EX_T(opline->result.u.var).var.ptr); - Z_LVAL_P(EX_T(opline->result.u.var).var.ptr) = 1; - Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_BOOL; - } - } - - EG(opline_ptr) = &EX(opline); - EG(active_op_array) = EX(op_array); - EG(function_state_ptr) = &EX(function_state); - destroy_op_array(new_op_array TSRMLS_CC); - efree(new_op_array); - if (EG(exception)) { - zend_throw_exception_internal(NULL TSRMLS_CC); - } - } else { - if (return_value_used) { - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - INIT_ZVAL(*EX_T(opline->result.u.var).var.ptr); - Z_LVAL_P(EX_T(opline->result.u.var).var.ptr) = failure_retval; - Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_BOOL; - } - } - FREE_OP1(); - EG(return_value_ptr_ptr) = original_return_value; - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(74, ZEND_UNSET_VAR, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zval tmp, *varname; - HashTable *target_symbol_table; - zend_free_op free_op1; - - varname = GET_OP1_ZVAL_PTR(BP_VAR_R); - - if (Z_TYPE_P(varname) != IS_STRING && Z_TYPE_P(varname) != IS_UNICODE) { - tmp = *varname; - zval_copy_ctor(&tmp); - convert_to_text(&tmp); - varname = &tmp; - } else if (OP1_TYPE == IS_CV || OP1_TYPE == IS_VAR) { - varname->refcount++; - } - - if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) { - zend_std_unset_static_property(EX_T(opline->op2.u.var).class_entry, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname) TSRMLS_CC); - } else { - target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), BP_VAR_IS, varname TSRMLS_CC); - if (zend_u_hash_del(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1) == SUCCESS) { - zend_execute_data *ex = EXECUTE_DATA; - ulong hash_value = zend_u_inline_hash_func(Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1); - zend_auto_global *auto_global; - - if (zend_u_hash_quick_find(CG(auto_globals), Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, hash_value, (void**)&auto_global) == SUCCESS) { - CG(auto_globals_cache)[auto_global->index] = NULL; - } - do { - int i; - - if (ex->op_array) { - for (i = 0; i < ex->op_array->last_var; i++) { - if (ex->op_array->vars[i].hash_value == hash_value && - ex->op_array->vars[i].name_len == Z_UNILEN_P(varname) && - !memcmp(ex->op_array->vars[i].name.v, Z_UNIVAL_P(varname).v, Z_TYPE_P(varname)==IS_UNICODE?UBYTES(Z_UNILEN_P(varname)):Z_UNILEN_P(varname))) { - ex->CVs[i] = NULL; - break; - } - } - } - ex = ex->prev_execute_data; - } while (ex && ex->symbol_table == target_symbol_table); - } - } - - if (varname == &tmp) { - zval_dtor(&tmp); - } else if (OP1_TYPE == IS_CV || OP1_TYPE == IS_VAR) { - zval_ptr_dtor(&varname); - } - FREE_OP1(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(75, ZEND_UNSET_DIM, VAR|UNUSED|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_UNSET); - zval *offset = GET_OP2_ZVAL_PTR(BP_VAR_R); - long index; - - if (container) { - if (OP1_TYPE == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - switch (Z_TYPE_PP(container)) { - case IS_ARRAY: { - HashTable *ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, - offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key.u); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } else if (OP2_TYPE == IS_CV || OP2_TYPE == IS_VAR) { - offset->refcount++; - } - - if (zend_u_symtable_del(ht, Z_TYPE_P(offset), offset_key, offset_len+1) == SUCCESS && - ht == &EG(symbol_table)) { - zend_execute_data *ex; - ulong hash_value = zend_u_inline_hash_func(Z_TYPE_P(offset), offset_key, offset_len+1); - - for (ex = EXECUTE_DATA; ex; ex = ex->prev_execute_data) { - if (ex->op_array && ex->symbol_table == ht) { - int i; - - for (i = 0; i < ex->op_array->last_var; i++) { - if (ex->op_array->vars[i].hash_value == hash_value && - ex->op_array->vars[i].name_len == offset_len && - !memcmp(ex->op_array->vars[i].name.v, offset_key.v, Z_TYPE_P(offset)==IS_UNICODE?UBYTES(offset_len):offset_len)) { - ex->CVs[i] = NULL; - break; - } - } - } - } - } - if (free_offset) { - efree(offset_key.v); - } else if (OP2_TYPE == IS_CV || OP2_TYPE == IS_VAR) { - zval_ptr_dtor(&offset); - } - break; - } - case IS_NULL: - zend_u_hash_del(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof("")); - break; - default: - zend_error(E_WARNING, "Illegal offset type in unset"); - break; - } - FREE_OP2(); - break; - } - case IS_OBJECT: - if (!Z_OBJ_HT_P(*container)->unset_dimension) { - zend_error_noreturn(E_ERROR, "Cannot use object as array"); - } - if (IS_OP2_TMP_FREE()) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC); - if (IS_OP2_TMP_FREE()) { - zval_ptr_dtor(&offset); - } else { - FREE_OP2(); - } - break; - case IS_STRING: - case IS_UNICODE: - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - ZEND_VM_CONTINUE(); /* bailed out before */ - default: - FREE_OP2(); - break; - } - } else { - FREE_OP2(); - } - FREE_OP1_VAR_PTR(); - - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|CV, CONST|TMP|VAR|CV) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_UNSET); - zval *offset = GET_OP2_ZVAL_PTR(BP_VAR_R); - - if (container) { - if (OP1_TYPE == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - if (Z_TYPE_PP(container) == IS_OBJECT) { - if (IS_OP2_TMP_FREE()) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); - if (IS_OP2_TMP_FREE()) { - zval_ptr_dtor(&offset); - } else { - FREE_OP2(); - } - } else { - FREE_OP2(); - } - } else { - FREE_OP2(); - } - FREE_OP1_VAR_PTR(); - - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(77, ZEND_FE_RESET, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *array_ptr, **array_ptr_ptr; - HashTable *fe_ht; - zend_object_iterator *iter = NULL; - zend_class_entry *ce = NULL; - zend_bool is_empty = 0; - - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - array_ptr_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_R); - if (array_ptr_ptr == NULL || array_ptr_ptr == &EG(uninitialized_zval_ptr)) { - ALLOC_INIT_ZVAL(array_ptr); - } else if (Z_TYPE_PP(array_ptr_ptr) == IS_OBJECT) { - if(Z_OBJ_HT_PP(array_ptr_ptr)->get_class_entry == NULL) { - zend_error(E_WARNING, "foreach() can not iterate over objects without PHP class"); - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - } - - ce = Z_OBJCE_PP(array_ptr_ptr); - if (!ce || ce->get_iterator == NULL) { - SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr); - (*array_ptr_ptr)->refcount++; - } - array_ptr = *array_ptr_ptr; - } else { - if (Z_TYPE_PP(array_ptr_ptr) == IS_ARRAY) { - SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr); - } - array_ptr = *array_ptr_ptr; - array_ptr->refcount++; - } - } else { - array_ptr = GET_OP1_ZVAL_PTR(BP_VAR_R); - if (IS_OP1_TMP_FREE()) { /* IS_TMP_VAR */ - zval *tmp; - - ALLOC_ZVAL(tmp); - INIT_PZVAL_COPY(tmp, array_ptr); - array_ptr = tmp; - } else if (Z_TYPE_P(array_ptr) == IS_OBJECT) { - ce = Z_OBJCE_P(array_ptr); - if (!ce || !ce->get_iterator) { - array_ptr->refcount++; - } - } else { - if (OP1_TYPE == IS_VAR && - free_op1.var == NULL && - !array_ptr->is_ref && - array_ptr->refcount > 1) { - /* non-separated return value from function */ - zval *tmp; - - ALLOC_ZVAL(tmp); - INIT_PZVAL_COPY(tmp, array_ptr); - zval_copy_ctor(tmp); - array_ptr = tmp; - } else { - array_ptr->refcount++; - } - } - } - - if (OP1_TYPE != IS_TMP_VAR && ce && ce->get_iterator) { - iter = ce->get_iterator(ce, array_ptr, opline->extended_value & ZEND_FE_RESET_REFERENCE TSRMLS_CC); - - if (iter && !EG(exception)) { - array_ptr = zend_iterator_wrap(iter TSRMLS_CC); - } else { - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - FREE_OP1_VAR_PTR(); - } else { - FREE_OP1_IF_VAR(); - } - if (!EG(exception)) { - zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Object of type %v did not create an Iterator", ce->name); - } - zend_throw_exception_internal(NULL TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); - } - } - - PZVAL_LOCK(array_ptr); - EX_T(opline->result.u.var).var.ptr = array_ptr; - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - - if (iter) { - iter->index = 0; - if (iter->funcs->rewind) { - iter->funcs->rewind(iter TSRMLS_CC); - if (EG(exception)) { - array_ptr->refcount--; - zval_ptr_dtor(&array_ptr); - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - FREE_OP1_VAR_PTR(); - } else { - FREE_OP1_IF_VAR(); - } - ZEND_VM_NEXT_OPCODE(); - } - } - is_empty = iter->funcs->valid(iter TSRMLS_CC) != SUCCESS; - if (EG(exception)) { - array_ptr->refcount--; - zval_ptr_dtor(&array_ptr); - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - FREE_OP1_VAR_PTR(); - } else { - FREE_OP1_IF_VAR(); - } - ZEND_VM_NEXT_OPCODE(); - } - iter->index = -1; /* will be set to 0 before using next handler */ - } else if ((fe_ht = HASH_OF(array_ptr)) != NULL) { - zend_hash_internal_pointer_reset(fe_ht); - if (ce) { - zend_object *zobj = zend_objects_get_address(array_ptr TSRMLS_CC); - while (zend_hash_has_more_elements(fe_ht) == SUCCESS) { - zstr str_key; - uint str_key_len; - ulong int_key; - zend_uchar key_type; - - key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL); - if (key_type != HASH_KEY_NON_EXISTANT && - (key_type == HASH_KEY_IS_LONG || - zend_check_property_access(zobj, key_type == HASH_KEY_IS_UNICODE?IS_UNICODE:IS_STRING, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS)) { - break; - } - zend_hash_move_forward(fe_ht); - } - } - is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS; - zend_hash_get_pointer(fe_ht, &EX_T(opline->result.u.var).fe.fe_pos); - } else { - zend_error(E_WARNING, "Invalid argument supplied for foreach()"); - is_empty = 1; - } - - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - FREE_OP1_VAR_PTR(); - } else { - FREE_OP1_IF_VAR(); - } - if (is_empty) { - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - } else { - ZEND_VM_NEXT_OPCODE(); - } -} - -ZEND_VM_HANDLER(78, ZEND_FE_FETCH, VAR, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *array = GET_OP1_ZVAL_PTR(BP_VAR_R); - zval **value; - zstr str_key; - uint str_key_len; - ulong int_key; - HashTable *fe_ht; - zend_object_iterator *iter = NULL; - int key_type = 0; - zend_bool use_key = (zend_bool)(opline->extended_value & ZEND_FE_FETCH_WITH_KEY); - - PZVAL_LOCK(array); - - switch (zend_iterator_unwrap(array, &iter TSRMLS_CC)) { - default: - case ZEND_ITER_INVALID: - zend_error(E_WARNING, "Invalid argument supplied for foreach()"); - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - - case ZEND_ITER_PLAIN_OBJECT: { - zstr class_name, prop_name; - zend_object *zobj = zend_objects_get_address(array TSRMLS_CC); - - fe_ht = HASH_OF(array); - zend_hash_set_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos); - do { - if (zend_hash_get_current_data(fe_ht, (void **) &value)==FAILURE) { - /* reached end of iteration */ - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - } - key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL); - - zend_hash_move_forward(fe_ht); - } while (key_type == HASH_KEY_NON_EXISTANT || - (key_type != HASH_KEY_IS_LONG && - zend_check_property_access(zobj, key_type == HASH_KEY_IS_UNICODE?IS_UNICODE:IS_STRING, str_key, str_key_len-1 TSRMLS_CC) != SUCCESS)); - zend_hash_get_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos); - if (use_key && key_type != HASH_KEY_IS_LONG) { - zend_u_unmangle_property_name(key_type == HASH_KEY_IS_UNICODE?IS_UNICODE:IS_STRING, str_key, str_key_len-1, &class_name, &prop_name); - if (key_type == HASH_KEY_IS_UNICODE) { - str_key_len = u_strlen(prop_name.u); - str_key.u = eustrndup(prop_name.u, str_key_len); - } else { - str_key_len = strlen(prop_name.s); - str_key.s = estrndup(prop_name.s, str_key_len); - } - str_key_len++; - } - break; - } - - case ZEND_ITER_PLAIN_ARRAY: - fe_ht = HASH_OF(array); - zend_hash_set_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos); - if (zend_hash_get_current_data(fe_ht, (void **) &value)==FAILURE) { - /* reached end of iteration */ - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - } - if (use_key) { - key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 1, NULL); - } - zend_hash_move_forward(fe_ht); - zend_hash_get_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos); - break; - - case ZEND_ITER_OBJECT: - /* !iter happens from exception */ - if (iter && ++iter->index > 0) { - /* This could cause an endless loop if index becomes zero again. - * In case that ever happens we need an additional flag. */ - iter->funcs->move_forward(iter TSRMLS_CC); - if (EG(exception)) { - array->refcount--; - zval_ptr_dtor(&array); - ZEND_VM_NEXT_OPCODE(); - } - } - /* If index is zero we come from FE_RESET and checked valid() already. */ - if (!iter || (iter->index > 0 && iter->funcs->valid(iter TSRMLS_CC) == FAILURE)) { - /* reached end of iteration */ - if (EG(exception)) { - array->refcount--; - zval_ptr_dtor(&array); - ZEND_VM_NEXT_OPCODE(); - } - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - } - iter->funcs->get_current_data(iter, &value TSRMLS_CC); - if (EG(exception)) { - array->refcount--; - zval_ptr_dtor(&array); - ZEND_VM_NEXT_OPCODE(); - } - if (!value) { - /* failure in get_current_data */ - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - } - if (use_key) { - if (iter->funcs->get_current_key) { - key_type = iter->funcs->get_current_key(iter, &str_key, &str_key_len, &int_key TSRMLS_CC); - if (EG(exception)) { - array->refcount--; - zval_ptr_dtor(&array); - ZEND_VM_NEXT_OPCODE(); - } - } else { - key_type = HASH_KEY_IS_LONG; - int_key = iter->index; - } - } - break; - } - - if (opline->extended_value & ZEND_FE_FETCH_BYREF) { - SEPARATE_ZVAL_IF_NOT_REF(value); - (*value)->is_ref = 1; - EX_T(opline->result.u.var).var.ptr_ptr = value; - (*value)->refcount++; - } else { - EX_T(opline->result.u.var).var.ptr_ptr = value; - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (use_key) { - zend_op *op_data = opline+1; - zval *key = &EX_T(op_data->result.u.var).tmp_var; - - switch (key_type) { - case HASH_KEY_IS_STRING: - Z_STRVAL_P(key) = str_key.s; - Z_STRLEN_P(key) = str_key_len-1; - Z_TYPE_P(key) = IS_STRING; - break; - case HASH_KEY_IS_UNICODE: - Z_USTRVAL_P(key) = str_key.u; - Z_USTRLEN_P(key) = str_key_len-1; - Z_TYPE_P(key) = IS_UNICODE; - break; - case HASH_KEY_IS_LONG: - Z_LVAL_P(key) = int_key; - Z_TYPE_P(key) = IS_LONG; - break; - default: - case HASH_KEY_NON_EXISTANT: - ZVAL_NULL(key); - break; - } - } - - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(114, ZEND_ISSET_ISEMPTY_VAR, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval tmp, *varname = GET_OP1_ZVAL_PTR(BP_VAR_IS); - zval **value; - zend_bool isset = 1; - HashTable *target_symbol_table; - - if (Z_TYPE_P(varname) != IS_STRING && Z_TYPE_P(varname) != IS_UNICODE) { - tmp = *varname; - zval_copy_ctor(&tmp); - convert_to_text(&tmp); - varname = &tmp; - } - - if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) { - value = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname), 1 TSRMLS_CC); - if (!value) { - isset = 0; - } - } else { - target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), BP_VAR_IS, varname TSRMLS_CC); - if (zend_u_hash_find(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, (void **) &value) == FAILURE) { - isset = 0; - } - } - - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - switch (opline->extended_value) { - case ZEND_ISSET: - if (isset && Z_TYPE_PP(value) == IS_NULL) { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0; - } else { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = isset; - } - break; - case ZEND_ISEMPTY: - if (!isset || !i_zend_is_true(*value)) { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 1; - } else { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0; - } - break; - } - - if (varname == &tmp) { - zval_dtor(&tmp); - } - FREE_OP1(); - - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HELPER_EX(zend_isset_isempty_dim_prop_obj_handler, VAR|UNUSED|CV, CONST|TMP|VAR|CV, int prop_dim) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_IS); - zval **value = NULL; - int result = 0; - long index; - - if (container) { - zend_free_op free_op2; - zval *offset = GET_OP2_ZVAL_PTR(BP_VAR_R); - - if (Z_TYPE_PP(container) == IS_ARRAY) { - HashTable *ht; - int isset = 0; - - ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } - if (zend_u_symtable_find(ht, Z_TYPE_P(offset), offset_key, offset_len+1, (void **) &value) == SUCCESS) { - isset = 1; - } - if (free_offset) { - efree(offset_key.v); - } - break; - } - case IS_NULL: - if (zend_u_hash_find(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), (void **) &value) == SUCCESS) { - isset = 1; - } - break; - default: - zend_error(E_WARNING, "Illegal offset type in isset or empty"); - - break; - } - - switch (opline->extended_value) { - case ZEND_ISSET: - if (isset && Z_TYPE_PP(value) == IS_NULL) { - result = 0; - } else { - result = isset; - } - break; - case ZEND_ISEMPTY: - if (!isset || !i_zend_is_true(*value)) { - result = 0; - } else { - result = 1; - } - break; - } - FREE_OP2(); - } else if (Z_TYPE_PP(container) == IS_OBJECT) { - if (IS_OP2_TMP_FREE()) { - MAKE_REAL_ZVAL_PTR(offset); - } - if (prop_dim) { - result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } else { - result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } - if (IS_OP2_TMP_FREE()) { - zval_ptr_dtor(&offset); - } else { - FREE_OP2(); - } - } else if ((Z_TYPE_PP(container) == IS_STRING || - Z_TYPE_PP(container) == IS_UNICODE) && !prop_dim) { /* string offsets */ - zval tmp; - - if (Z_TYPE_P(offset) != IS_LONG) { - tmp = *offset; - zval_copy_ctor(&tmp); - convert_to_long(&tmp); - offset = &tmp; - } - if (Z_TYPE_P(offset) == IS_LONG) { - switch (opline->extended_value) { - case ZEND_ISSET: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container)) { - result = 1; - } - break; - case ZEND_ISEMPTY: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container) && - ((Z_TYPE_PP(container) == IS_UNICODE)? - (Z_USTRVAL_PP(container)[Z_LVAL_P(offset)] != 0): - (Z_STRVAL_PP(container)[Z_LVAL_P(offset)] != '0'))) { - result = 1; - } - break; - } - } - FREE_OP2(); - } else { - FREE_OP2(); - } - } - - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - switch (opline->extended_value) { - case ZEND_ISSET: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result; - break; - case ZEND_ISEMPTY: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result; - break; - } - - FREE_OP1_VAR_PTR(); - - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(115, ZEND_ISSET_ISEMPTY_DIM_OBJ, VAR|UNUSED|CV, CONST|TMP|VAR|CV) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_isset_isempty_dim_prop_obj_handler, prop_dim, 0); -} - -ZEND_VM_HANDLER(148, ZEND_ISSET_ISEMPTY_PROP_OBJ, VAR|UNUSED|CV, CONST|TMP|VAR|CV) -{ - ZEND_VM_DISPATCH_TO_HELPER_EX(zend_isset_isempty_dim_prop_obj_handler, prop_dim, 1); -} - -ZEND_VM_HANDLER(79, ZEND_EXIT, CONST|TMP|VAR|UNUSED|CV, ANY) -{ -#if !defined(ZEND_VM_SPEC) || (OP1_TYPE != IS_UNUSED) - zend_op *opline = EX(opline); - if (OP1_TYPE != IS_UNUSED) { - zend_free_op free_op1; - zval *ptr = GET_OP1_ZVAL_PTR(BP_VAR_R); - - if (Z_TYPE_P(ptr) == IS_LONG) { - EG(exit_status) = Z_LVAL_P(ptr); - } else { - zend_print_variable(ptr); - } - FREE_OP1(); - } -#endif - zend_bailout(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(57, ZEND_BEGIN_SILENCE, ANY, ANY) -{ - zend_op *opline = EX(opline); - - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = EG(error_reporting); - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_LONG; /* shouldn't be necessary */ - if (EX(old_error_reporting) == NULL) { - EX(old_error_reporting) = &EX_T(opline->result.u.var).tmp_var; - } - - if (EG(error_reporting)) { - zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), "0", 1, ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME); - } - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(142, ZEND_RAISE_ABSTRACT_ERROR, ANY, ANY) -{ - zend_error_noreturn(E_ERROR, "Cannot call abstract method %v::%v()", EG(scope)->name, EX(op_array)->function_name); - ZEND_VM_NEXT_OPCODE(); /* Never reached */ -} - -ZEND_VM_HANDLER(58, ZEND_END_SILENCE, TMP, ANY) -{ - zend_op *opline = EX(opline); - zval restored_error_reporting; - - if (!EG(error_reporting) && Z_LVAL(EX_T(opline->op1.u.var).tmp_var) != 0) { - Z_TYPE(restored_error_reporting) = IS_LONG; - Z_LVAL(restored_error_reporting) = Z_LVAL(EX_T(opline->op1.u.var).tmp_var); - convert_to_string(&restored_error_reporting); - zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), Z_STRVAL(restored_error_reporting), Z_STRLEN(restored_error_reporting), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME); - zendi_zval_dtor(restored_error_reporting); - } - if (EX(old_error_reporting) == &EX_T(opline->op1.u.var).tmp_var) { - EX(old_error_reporting) = NULL; - } - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(152, ZEND_JMP_SET, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *value = GET_OP1_ZVAL_PTR(BP_VAR_R); - - if (i_zend_is_true(value)) { - EX_T(opline->result.u.var).tmp_var = *value; - zendi_zval_copy_ctor(EX_T(opline->result.u.var).tmp_var); - FREE_OP1(); -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - - FREE_OP1(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(22, ZEND_QM_ASSIGN, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *value = GET_OP1_ZVAL_PTR(BP_VAR_R); - - EX_T(opline->result.u.var).tmp_var = *value; - if (!IS_OP1_TMP_FREE()) { - zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var); - } - FREE_OP1_IF_VAR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(101, ZEND_EXT_STMT, ANY, ANY) -{ - if (!EG(no_extensions)) { - zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, EX(op_array) TSRMLS_CC); - } - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(102, ZEND_EXT_FCALL_BEGIN, ANY, ANY) -{ - if (!EG(no_extensions)) { - zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, EX(op_array) TSRMLS_CC); - } - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(103, ZEND_EXT_FCALL_END, ANY, ANY) -{ - if (!EG(no_extensions)) { - zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, EX(op_array) TSRMLS_CC); - } - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(139, ZEND_DECLARE_CLASS, ANY, ANY) -{ - zend_op *opline = EX(opline); - - EX_T(opline->result.u.var).class_entry = do_bind_class(opline, EG(class_table), 0 TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(140, ZEND_DECLARE_INHERITED_CLASS, ANY, ANY) -{ - zend_op *opline = EX(opline); - - EX_T(opline->result.u.var).class_entry = do_bind_inherited_class(opline, EG(class_table), EX_T(opline->extended_value).class_entry, 0 TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(141, ZEND_DECLARE_FUNCTION, ANY, ANY) -{ - do_bind_function(EX(opline), EG(function_table), 0); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(105, ZEND_TICKS, CONST, ANY) -{ - zend_op *opline = EX(opline); - - if (++EG(ticks_count)>=Z_LVAL(opline->op1.u.constant)) { - EG(ticks_count)=0; - if (zend_ticks_function) { - zend_ticks_function(Z_LVAL(opline->op1.u.constant)); - } - } - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(138, ZEND_INSTANCEOF, TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *expr = GET_OP1_ZVAL_PTR(BP_VAR_R); - zend_bool result; - - if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->get_class_entry) { - result = instanceof_function(Z_OBJCE_P(expr), EX_T(opline->op2.u.var).class_entry TSRMLS_CC); - } else { - result = 0; - } - ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var, result); - FREE_OP1(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(104, ZEND_EXT_NOP, ANY, ANY) -{ - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(0, ZEND_NOP, ANY, ANY) -{ - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(144, ZEND_ADD_INTERFACE, ANY, ANY) -{ - zend_op *opline = EX(opline); - zend_class_entry *ce = EX_T(opline->op1.u.var).class_entry; - zend_class_entry *iface = EX_T(opline->op2.u.var).class_entry; - - if (!(iface->ce_flags & ZEND_ACC_INTERFACE)) { - zend_error_noreturn(E_ERROR, "%v cannot implement %v - it is not an interface", ce->name, iface->name); - } - - zend_do_implement_interface(ce, iface TSRMLS_CC); - - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY) -{ - zend_uint op_num = EG(opline_before_exception)-EG(active_op_array)->opcodes; - int i; - zend_uint catch_op_num; - int catched = 0; - zval **stack_zval_pp; - zval restored_error_reporting; - - stack_zval_pp = (zval **) EG(argument_stack).top_element - 1; - while (*stack_zval_pp != NULL) { - zval_ptr_dtor(stack_zval_pp); - EG(argument_stack).top_element--; - EG(argument_stack).top--; - stack_zval_pp--; - } - - for (i=0; ilast_try_catch; i++) { - if (EG(active_op_array)->try_catch_array[i].try_op > op_num) { - /* further blocks will not be relevant... */ - break; - } - if (op_num >= EG(active_op_array)->try_catch_array[i].try_op - && op_num < EG(active_op_array)->try_catch_array[i].catch_op) { - catched = 1; - catch_op_num = EX(op_array)->try_catch_array[i].catch_op; - } - } - - while (EX(fbc)) { - zend_op *ctor_opline = (zend_op*)zend_ptr_stack_pop(&EG(arg_types_stack)); - - if (EX(object)) { - if (ctor_opline && RETURN_VALUE_USED(ctor_opline)) { - EX(object)->refcount--; - } - zval_ptr_dtor(&EX(object)); - } - zend_ptr_stack_2_pop(&EG(arg_types_stack), (void**)&EX(object), (void**)&EX(fbc)); - } - - for (i=0; ilast_brk_cont; i++) { - if (EX(op_array)->brk_cont_array[i].start > op_num) { - /* further blocks will not be relevant... */ - break; - } - if (op_num < EX(op_array)->brk_cont_array[i].brk) { - if (!catched || - catch_op_num >= EX(op_array)->brk_cont_array[i].brk) { - zend_op *brk_opline = &EX(op_array)->opcodes[EX(op_array)->brk_cont_array[i].brk]; - - switch (brk_opline->opcode) { - case ZEND_SWITCH_FREE: - zend_switch_free(brk_opline, EX(Ts) TSRMLS_CC); - break; - case ZEND_FREE: - zendi_zval_dtor(EX_T(brk_opline->op1.u.var).tmp_var); - break; - } - } - } - } - - /* restore previous error_reporting value */ - if (!EG(error_reporting) && EX(old_error_reporting) != NULL && Z_LVAL_P(EX(old_error_reporting)) != 0) { - Z_TYPE(restored_error_reporting) = IS_LONG; - Z_LVAL(restored_error_reporting) = Z_LVAL_P(EX(old_error_reporting)); - convert_to_string(&restored_error_reporting); - zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), Z_STRVAL(restored_error_reporting), Z_STRLEN(restored_error_reporting), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME); - zendi_zval_dtor(restored_error_reporting); - } - EX(old_error_reporting) = NULL; - - if (!catched) { - ZEND_VM_RETURN_FROM_EXECUTE_LOOP(); - } else { - ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[catch_op_num]); - ZEND_VM_CONTINUE(); - } -} - -ZEND_VM_HANDLER(146, ZEND_VERIFY_ABSTRACT_CLASS, ANY, ANY) -{ - zend_verify_abstract_class(EX_T(EX(opline)->op1.u.var).class_entry TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_HANDLER(150, ZEND_USER_OPCODE, ANY, ANY) -{ - int ret = zend_user_opcode_handlers[EX(opline)->opcode](ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_INTERNAL); - - switch (ret) { - case ZEND_USER_OPCODE_CONTINUE: - ZEND_VM_CONTINUE(); - case ZEND_USER_OPCODE_RETURN: - ZEND_VM_RETURN(); - case ZEND_USER_OPCODE_DISPATCH: - ZEND_VM_DISPATCH(EX(opline)->opcode, EX(opline)); - default: - ZEND_VM_DISPATCH(ret & 0xff, EX(opline)); - } -} - -ZEND_VM_HANDLER(151, ZEND_U_NORMALIZE, CONST|TMP|VAR|CV, ANY) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *string = GET_OP1_ZVAL_PTR(BP_VAR_R); - zval *result = &EX_T(opline->result.u.var).tmp_var; - - *result = *string; - if (!IS_OP1_TMP_FREE()) { - zendi_zval_copy_ctor(*result); - } - - if (UG(unicode)) { - zval var_copy; - int use_copy; - UChar *norm; - int norm_len; - - zend_make_unicode_zval(result, &var_copy, &use_copy); - if (use_copy) { - zval_dtor(result); - *result = var_copy; - } - if (zend_normalize_identifier(&norm, &norm_len, - Z_USTRVAL_P(result), Z_USTRLEN_P(result), 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", Z_USTRVAL_P(result)); - } else if (norm != Z_USTRVAL_P(result)) { - efree(Z_USTRVAL_P(result)); - ZVAL_UNICODEL(result, norm, norm_len, 0); - } - } - FREE_OP1_IF_VAR(); - ZEND_VM_NEXT_OPCODE(); -} - -ZEND_VM_EXPORT_HELPER(zend_do_fcall, zend_do_fcall_common_helper) diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h deleted file mode 100644 index 04ccda6a560ea..0000000000000 --- a/Zend/zend_vm_execute.h +++ /dev/null @@ -1,31482 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - | Dmitry Stogov | - +----------------------------------------------------------------------+ -*/ - -static opcode_handler_t zend_user_opcode_handlers[256] = {(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL}; - -static zend_uchar zend_user_opcodes[256] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255}; - -static opcode_handler_t zend_vm_get_opcode_handler(zend_uchar opcode, zend_op* op); - - -#define ZEND_VM_CONTINUE() return 0 -#define ZEND_VM_RETURN() return 1 -#define ZEND_VM_DISPATCH(opcode, opline) return zend_vm_get_opcode_handler(opcode, opline)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - -#define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_INTERNAL execute_data TSRMLS_CC - -ZEND_API void execute(zend_op_array *op_array TSRMLS_DC) -{ - zend_execute_data execute_data; - - - if (EG(exception)) { - return; - } - - /* Initialize execute_data */ - EX(fbc) = NULL; - EX(object) = NULL; - EX(old_error_reporting) = NULL; - if (op_array->T < TEMP_VAR_STACK_LIMIT) { - EX(Ts) = (temp_variable *) do_alloca(sizeof(temp_variable) * op_array->T); - } else { - EX(Ts) = (temp_variable *) safe_emalloc(sizeof(temp_variable), op_array->T, 0); - } - EX(CVs) = (zval***)do_alloca(sizeof(zval**) * op_array->last_var); - memset(EX(CVs), 0, sizeof(zval**) * op_array->last_var); - EX(op_array) = op_array; - EX(original_in_execution) = EG(in_execution); - EX(symbol_table) = EG(active_symbol_table); - EX(prev_execute_data) = EG(current_execute_data); - EG(current_execute_data) = &execute_data; - - EG(in_execution) = 1; - if (op_array->start_op) { - ZEND_VM_SET_OPCODE(op_array->start_op); - } else { - ZEND_VM_SET_OPCODE(op_array->opcodes); - } - - if (op_array->uses_this && EG(This)) { - EG(This)->refcount++; /* For $this pointer */ - if (zend_ascii_hash_add(EG(active_symbol_table), "this", sizeof("this"), &EG(This), sizeof(zval *), NULL)==FAILURE) { - EG(This)->refcount--; - } - } - - EG(opline_ptr) = &EX(opline); - - EX(function_state).function = (zend_function *) op_array; - EG(function_state_ptr) = &EX(function_state); -#if ZEND_DEBUG - /* function_state.function_symbol_table is saved as-is to a stack, - * which is an intentional UMR. Shut it up if we're in DEBUG. - */ - EX(function_state).function_symbol_table = NULL; -#endif - - while (1) { -#ifdef ZEND_WIN32 - if (EG(timed_out)) { - zend_timeout(0); - } -#endif - - if (EX(opline)->handler(&execute_data TSRMLS_CC) > 0) { - return; - } - - } - zend_error_noreturn(E_ERROR, "Arrived at end of main loop which shouldn't happen"); -} - -#undef EX -#define EX(element) execute_data->element - -static int ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ -#if DEBUG_ZEND>=2 - printf("Jumping to %d\n", EX(opline)->op1.u.opline_num); -#endif - ZEND_VM_SET_OPCODE(EX(opline)->op1.u.jmp_addr); - ZEND_VM_CONTINUE(); /* CHECK_ME */ -} - -static int ZEND_INIT_STRING_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zval *tmp = &EX_T(EX(opline)->result.u.var).tmp_var; - - if (EX(opline)->extended_value == IS_UNICODE) { - Z_USTRVAL_P(tmp) = eumalloc(1); - Z_USTRVAL_P(tmp)[0] = 0; - Z_USTRLEN_P(tmp) = 0; - Z_TYPE_P(tmp) = IS_UNICODE; - } else { - Z_STRVAL_P(tmp) = emalloc(1); - Z_STRVAL_P(tmp)[0] = 0; - Z_STRLEN_P(tmp) = 0; - Z_TYPE_P(tmp) = EX(opline)->extended_value; - } - tmp->refcount = 1; - tmp->is_ref = 0; - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval **original_return_value; - zend_class_entry *current_scope = NULL; - zval *current_this = NULL; - int return_value_used = RETURN_VALUE_USED(opline); - zend_bool should_change_scope; - zend_op *ctor_opline; - - if (EX(function_state).function->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) { - if (EX(function_state).function->common.fn_flags & ZEND_ACC_ABSTRACT) { - /* FIXME: output identifiers properly */ - zend_error_noreturn(E_ERROR, "Cannot call abstract method %v::%v()", EX(function_state).function->common.scope->name, EX(function_state).function->common.function_name); - ZEND_VM_NEXT_OPCODE(); /* Never reached */ - } - if (EX(function_state).function->common.fn_flags & ZEND_ACC_DEPRECATED) { - zend_error(E_STRICT, "Function %v%s%v() is deprecated", - EX(function_state).function->common.scope ? EX(function_state).function->common.scope->name : EMPTY_ZSTR, - EX(function_state).function->common.scope ? "::" : "", - EX(function_state).function->common.function_name); - } - } - - zend_ptr_stack_2_push(&EG(argument_stack), (void *) opline->extended_value, NULL); - - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - - if (EX(function_state).function->type == ZEND_USER_FUNCTION - || EX(function_state).function->common.scope) { - should_change_scope = 1; - current_this = EG(This); - EG(This) = EX(object); - current_scope = EG(scope); - EG(scope) = (EX(function_state).function->type == ZEND_USER_FUNCTION || !EX(object)) ? EX(function_state).function->common.scope : NULL; - } else { - should_change_scope = 0; - } - - EX_T(opline->result.u.var).var.fcall_returned_reference = 0; - - if (EX(function_state).function->common.scope) { - if (!EG(This) && !(EX(function_state).function->common.fn_flags & ZEND_ACC_STATIC)) { - int severity; - char *severity_word; - if (EX(function_state).function->common.fn_flags & ZEND_ACC_ALLOW_STATIC) { - severity = E_STRICT; - severity_word = "should not"; - } else { - severity = E_ERROR; - severity_word = "cannot"; - } - /* FIXME: output identifiers properly */ - zend_error(severity, "Non-static method %v::%v() %s be called statically", EX(function_state).function->common.scope->name, EX(function_state).function->common.function_name, severity_word); - } - } - if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) { - unsigned char return_reference = EX(function_state).function->common.return_reference; - - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - INIT_ZVAL(*(EX_T(opline->result.u.var).var.ptr)); - - if (EX(function_state).function->common.arg_info) { - zend_uint i=0; - zval **p; - ulong arg_count; - - p = (zval **) EG(argument_stack).top_element-2; - arg_count = (ulong) *p; - - while (arg_count>0) { - zend_verify_arg_type(EX(function_state).function, ++i, *(p-arg_count) TSRMLS_CC); - arg_count--; - } - } - if (!zend_execute_internal) { - /* saves one function call if zend_execute_internal is not used */ - ((zend_internal_function *) EX(function_state).function)->handler(opline->extended_value, EX_T(opline->result.u.var).var.ptr, &EX_T(opline->result.u.var).var.ptr, EX(object), return_value_used TSRMLS_CC); - } else { - zend_execute_internal(execute_data, return_value_used TSRMLS_CC); - } - - EG(current_execute_data) = execute_data; - -/* We shouldn't fix bad extensions here, - because it can break proper ones (Bug #34045) - if (!EX(function_state).function->common.return_reference) { - EX_T(opline->result.u.var).var.ptr->is_ref = 0; - EX_T(opline->result.u.var).var.ptr->refcount = 1; - } -*/ - if (!return_value_used) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); - } else { - EX_T(opline->result.u.var).var.fcall_returned_reference = return_reference; - } - } else if (EX(function_state).function->type == ZEND_USER_FUNCTION) { - EX_T(opline->result.u.var).var.ptr = NULL; - if (EG(symtable_cache_ptr)>=EG(symtable_cache)) { - /*printf("Cache hit! Reusing %x\n", symtable_cache[symtable_cache_ptr]);*/ - EX(function_state).function_symbol_table = *(EG(symtable_cache_ptr)--); - } else { - ALLOC_HASHTABLE(EX(function_state).function_symbol_table); - zend_u_hash_init(EX(function_state).function_symbol_table, 0, NULL, ZVAL_PTR_DTOR, 0, UG(unicode)); - /*printf("Cache miss! Initialized %x\n", function_state.function_symbol_table);*/ - } - EG(active_symbol_table) = EX(function_state).function_symbol_table; - original_return_value = EG(return_value_ptr_ptr); - EG(return_value_ptr_ptr) = EX_T(opline->result.u.var).var.ptr_ptr; - EG(active_op_array) = (zend_op_array *) EX(function_state).function; - - zend_execute(EG(active_op_array) TSRMLS_CC); - EX_T(opline->result.u.var).var.fcall_returned_reference = EG(active_op_array)->return_reference; - - if (return_value_used && !EX_T(opline->result.u.var).var.ptr) { - if (!EG(exception)) { - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - INIT_ZVAL(*EX_T(opline->result.u.var).var.ptr); - } - } else if (!return_value_used && EX_T(opline->result.u.var).var.ptr) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); - } - - EG(opline_ptr) = &EX(opline); - EG(active_op_array) = EX(op_array); - EG(return_value_ptr_ptr)=original_return_value; - if (EG(symtable_cache_ptr)>=EG(symtable_cache_limit)) { - zend_hash_destroy(EX(function_state).function_symbol_table); - FREE_HASHTABLE(EX(function_state).function_symbol_table); - } else { - /* clean before putting into the cache, since clean - could call dtors, which could use cached hash */ - zend_hash_clean(EX(function_state).function_symbol_table); - *(++EG(symtable_cache_ptr)) = EX(function_state).function_symbol_table; - } - EG(active_symbol_table) = EX(symbol_table); - } else { /* ZEND_OVERLOADED_FUNCTION */ - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - INIT_ZVAL(*(EX_T(opline->result.u.var).var.ptr)); - - /* Not sure what should be done here if it's a static method */ - if (EX(object)) { - Z_OBJ_HT_P(EX(object))->call_method(EX(fbc)->common.function_name, opline->extended_value, EX_T(opline->result.u.var).var.ptr, &EX_T(opline->result.u.var).var.ptr, EX(object), return_value_used TSRMLS_CC); - } else { - zend_error_noreturn(E_ERROR, "Cannot call overloaded function for non-object"); - } - - if (EX(function_state).function->type == ZEND_OVERLOADED_FUNCTION_TEMPORARY) { - efree(EX(function_state).function->common.function_name.v); - } - efree(EX(fbc)); - - if (!return_value_used) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); - } else { - EX_T(opline->result.u.var).var.ptr->is_ref = 0; - EX_T(opline->result.u.var).var.ptr->refcount = 1; - } - } - - ctor_opline = (zend_op*)zend_ptr_stack_pop(&EG(arg_types_stack)); - - if (EG(This)) { - if (EG(exception) && ctor_opline) { - if (RETURN_VALUE_USED(ctor_opline)) { - EG(This)->refcount--; - } - if (EG(This)->refcount == 1) { - zend_object_store_ctor_failed(EG(This) TSRMLS_CC); - } - } - if (should_change_scope) { - zval_ptr_dtor(&EG(This)); - } - } - - if (should_change_scope) { - EG(This) = current_this; - EG(scope) = current_scope; - } - zend_ptr_stack_2_pop(&EG(arg_types_stack), (void**)&EX(object), (void**)&EX(fbc)); - - EX(function_state).function = (zend_function *) EX(op_array); - EG(function_state_ptr) = &EX(function_state); - zend_ptr_stack_clear_multiple(TSRMLS_C); - - if (EG(exception)) { - zend_throw_exception_internal(NULL TSRMLS_CC); - if (return_value_used && EX_T(opline->result.u.var).var.ptr) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - EX(function_state).function = EX(fbc); - return zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_CATCH_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_class_entry *ce; - - /* Check whether an exception has been thrown, if not, jump over code */ - if (EG(exception) == NULL) { - ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->extended_value]); - ZEND_VM_CONTINUE(); /* CHECK_ME */ - } - ce = Z_OBJCE_P(EG(exception)); - if (ce != EX_T(opline->op1.u.var).class_entry) { - if (!instanceof_function(ce, EX_T(opline->op1.u.var).class_entry TSRMLS_CC)) { - if (opline->op1.u.EA.type) { - zend_throw_exception_internal(NULL TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); - } - ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->extended_value]); - ZEND_VM_CONTINUE(); /* CHECK_ME */ - } - } - - zend_u_hash_update(EG(active_symbol_table), Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant), - Z_UNILEN(opline->op2.u.constant)+1, &EG(exception), sizeof(zval *), (void **) NULL); - EG(exception) = NULL; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_RECV_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval **param; - zend_uint arg_num = Z_LVAL(opline->op1.u.constant); - - if (zend_ptr_stack_get_arg(arg_num, (void **) ¶m TSRMLS_CC)==FAILURE) { - char *space; - zstr class_name = get_active_class_name(&space TSRMLS_CC); - zend_execute_data *ptr = EX(prev_execute_data); - - if (zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, NULL TSRMLS_CC)) { - if(ptr && ptr->op_array) { - zend_error(E_WARNING, "Missing argument %ld for %v%s%v(), called in %s on line %d and defined", Z_LVAL(opline->op1.u.constant), class_name, space, get_active_function_name(TSRMLS_C), ptr->op_array->filename, ptr->opline->lineno); - } else { - zend_error(E_WARNING, "Missing argument %ld for %v%s%v()", Z_LVAL(opline->op1.u.constant), class_name, space, get_active_function_name(TSRMLS_C)); - } - } - if (opline->result.op_type == IS_VAR) { - PZVAL_UNLOCK_FREE(*EX_T(opline->result.u.var).var.ptr_ptr); - } - } else { - zend_free_op free_res; - zval **var_ptr; - - zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, *param TSRMLS_CC); - var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W); - if (PZVAL_IS_REF(*param)) { - zend_assign_to_variable_reference(var_ptr, param TSRMLS_CC); - } else { - zend_receive(var_ptr, *param TSRMLS_CC); - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_NEW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *object_zval; - zend_function *constructor; - - if (EX_T(opline->op1.u.var).class_entry->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_IMPLICIT_ABSTRACT_CLASS|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) { - char *class_type; - - if (EX_T(opline->op1.u.var).class_entry->ce_flags & ZEND_ACC_INTERFACE) { - class_type = "interface"; - } else { - class_type = "abstract class"; - } - zend_error_noreturn(E_ERROR, "Cannot instantiate %s %v", class_type, EX_T(opline->op1.u.var).class_entry->name); - } - ALLOC_ZVAL(object_zval); - object_init_ex(object_zval, EX_T(opline->op1.u.var).class_entry); - INIT_PZVAL(object_zval); - - constructor = Z_OBJ_HT_P(object_zval)->get_constructor(object_zval TSRMLS_CC); - - if (constructor == NULL) { - if (RETURN_VALUE_USED(opline)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.ptr = object_zval; - } else { - zval_ptr_dtor(&object_zval); - } - ZEND_VM_JMP(EX(op_array)->opcodes + opline->op2.u.opline_num); - } else { - SELECTIVE_PZVAL_LOCK(object_zval, &opline->result); - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.ptr = object_zval; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), opline); - - /* We are not handling overloaded classes right now */ - EX(object) = object_zval; - EX(fbc) = constructor; - - ZEND_VM_NEXT_OPCODE(); - } -} - -static int ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = EG(error_reporting); - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_LONG; /* shouldn't be necessary */ - if (EX(old_error_reporting) == NULL) { - EX(old_error_reporting) = &EX_T(opline->result.u.var).tmp_var; - } - - if (EG(error_reporting)) { - zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), "0", 1, ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_error_noreturn(E_ERROR, "Cannot call abstract method %v::%v()", EG(scope)->name, EX(op_array)->function_name); - ZEND_VM_NEXT_OPCODE(); /* Never reached */ -} - -static int ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - if (!EG(no_extensions)) { - zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, EX(op_array) TSRMLS_CC); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - if (!EG(no_extensions)) { - zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, EX(op_array) TSRMLS_CC); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - if (!EG(no_extensions)) { - zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, EX(op_array) TSRMLS_CC); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DECLARE_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - EX_T(opline->result.u.var).class_entry = do_bind_class(opline, EG(class_table), 0 TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - EX_T(opline->result.u.var).class_entry = do_bind_inherited_class(opline, EG(class_table), EX_T(opline->extended_value).class_entry, 0 TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - do_bind_function(EX(opline), EG(function_table), 0); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_INTERFACE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_class_entry *ce = EX_T(opline->op1.u.var).class_entry; - zend_class_entry *iface = EX_T(opline->op2.u.var).class_entry; - - if (!(iface->ce_flags & ZEND_ACC_INTERFACE)) { - zend_error_noreturn(E_ERROR, "%v cannot implement %v - it is not an interface", ce->name, iface->name); - } - - zend_do_implement_interface(ce, iface TSRMLS_CC); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_uint op_num = EG(opline_before_exception)-EG(active_op_array)->opcodes; - int i; - zend_uint catch_op_num; - int catched = 0; - zval **stack_zval_pp; - zval restored_error_reporting; - - stack_zval_pp = (zval **) EG(argument_stack).top_element - 1; - while (*stack_zval_pp != NULL) { - zval_ptr_dtor(stack_zval_pp); - EG(argument_stack).top_element--; - EG(argument_stack).top--; - stack_zval_pp--; - } - - for (i=0; ilast_try_catch; i++) { - if (EG(active_op_array)->try_catch_array[i].try_op > op_num) { - /* further blocks will not be relevant... */ - break; - } - if (op_num >= EG(active_op_array)->try_catch_array[i].try_op - && op_num < EG(active_op_array)->try_catch_array[i].catch_op) { - catched = 1; - catch_op_num = EX(op_array)->try_catch_array[i].catch_op; - } - } - - while (EX(fbc)) { - zend_op *ctor_opline = (zend_op*)zend_ptr_stack_pop(&EG(arg_types_stack)); - - if (EX(object)) { - if (ctor_opline && RETURN_VALUE_USED(ctor_opline)) { - EX(object)->refcount--; - } - zval_ptr_dtor(&EX(object)); - } - zend_ptr_stack_2_pop(&EG(arg_types_stack), (void**)&EX(object), (void**)&EX(fbc)); - } - - for (i=0; ilast_brk_cont; i++) { - if (EX(op_array)->brk_cont_array[i].start > op_num) { - /* further blocks will not be relevant... */ - break; - } - if (op_num < EX(op_array)->brk_cont_array[i].brk) { - if (!catched || - catch_op_num >= EX(op_array)->brk_cont_array[i].brk) { - zend_op *brk_opline = &EX(op_array)->opcodes[EX(op_array)->brk_cont_array[i].brk]; - - switch (brk_opline->opcode) { - case ZEND_SWITCH_FREE: - zend_switch_free(brk_opline, EX(Ts) TSRMLS_CC); - break; - case ZEND_FREE: - zendi_zval_dtor(EX_T(brk_opline->op1.u.var).tmp_var); - break; - } - } - } - } - - /* restore previous error_reporting value */ - if (!EG(error_reporting) && EX(old_error_reporting) != NULL && Z_LVAL_P(EX(old_error_reporting)) != 0) { - Z_TYPE(restored_error_reporting) = IS_LONG; - Z_LVAL(restored_error_reporting) = Z_LVAL_P(EX(old_error_reporting)); - convert_to_string(&restored_error_reporting); - zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), Z_STRVAL(restored_error_reporting), Z_STRLEN(restored_error_reporting), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME); - zendi_zval_dtor(restored_error_reporting); - } - EX(old_error_reporting) = NULL; - - if (!catched) { - ZEND_VM_RETURN_FROM_EXECUTE_LOOP(); - } else { - ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[catch_op_num]); - ZEND_VM_CONTINUE(); - } -} - -static int ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_verify_abstract_class(EX_T(EX(opline)->op1.u.var).class_entry TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - int ret = zend_user_opcode_handlers[EX(opline)->opcode](ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_INTERNAL); - - switch (ret) { - case ZEND_USER_OPCODE_CONTINUE: - ZEND_VM_CONTINUE(); - case ZEND_USER_OPCODE_RETURN: - ZEND_VM_RETURN(); - case ZEND_USER_OPCODE_DISPATCH: - ZEND_VM_DISPATCH(EX(opline)->opcode, EX(opline)); - default: - ZEND_VM_DISPATCH(ret & 0xff, EX(opline)); - } -} - -static int ZEND_FETCH_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *class_name; - - - - if (IS_CONST == IS_UNUSED) { - EX_T(opline->result.u.var).class_entry = zend_fetch_class(NULL, 0, opline->extended_value TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); - } - - class_name = &opline->op2.u.constant; - - switch (Z_TYPE_P(class_name)) { - case IS_OBJECT: - EX_T(opline->result.u.var).class_entry = Z_OBJCE_P(class_name); - break; - case IS_STRING: - case IS_UNICODE: - EX_T(opline->result.u.var).class_entry = zend_u_fetch_class(Z_TYPE_P(class_name), Z_UNIVAL_P(class_name), Z_UNILEN_P(class_name), opline->extended_value TSRMLS_CC); - break; - default: - zend_error_noreturn(E_ERROR, "Class name must be a valid object or a string"); - break; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zend_class_entry *ce; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - ce = EX_T(opline->op1.u.var).class_entry; - if(IS_CONST != IS_UNUSED) { - zstr function_name_strval; - unsigned int function_name_strlen; - zend_bool is_const = (IS_CONST == IS_CONST); - - - if (is_const) { - function_name_strval = Z_UNIVAL(opline->op2.u.constant); - function_name_strlen = Z_UNILEN(opline->op2.u.constant); - } else { - function_name = &opline->op2.u.constant; - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Function name must be a string"); - } - function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); - } - - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); - - if (!is_const) { - efree(function_name_strval.v); - - } - } else { - if(!ce->constructor) { - zend_error_noreturn(E_ERROR, "Can not call constructor"); - } - if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { - zend_error(E_COMPILE_ERROR, "Cannot call private %v::__construct()", ce->name); - } - EX(fbc) = ce->constructor; - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (IS_CONST != IS_UNUSED && - EG(This) && - Z_OBJ_HT_P(EG(This))->get_class_entry && - !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) { - /* We are calling method of the other (incompatible) class, - but passing $this. This is done for compatibility with php-4. */ - zend_error(E_STRICT, "Non-static method %v::%v() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name); - - } - if ((EX(object) = EG(This))) { - EX(object)->refcount++; - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zend_function *function; - zstr function_name_strval, lcname; - unsigned int function_name_strlen, lcname_len; - - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - if (IS_CONST == IS_CONST) { - function_name = &opline->op2.u.constant; - } else { - function_name = &opline->op2.u.constant; - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Function name must be a string"); - } - } - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - lcname = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), function_name_strlen, 1, &lcname_len); - if (zend_u_hash_find(EG(function_table), Z_TYPE_P(function_name), lcname, lcname_len+1, (void **) &function)==FAILURE) { - efree(lcname.v); - zend_error_noreturn(E_ERROR, "Call to undefined function %R()", Z_TYPE_P(function_name), function_name_strval); - } - - efree(lcname.v); - if (IS_CONST != IS_CONST) { - - } - - EX(object) = NULL; - - EX(fbc) = function; - - ZEND_VM_NEXT_OPCODE(); -} - - -static int ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval **param, *assignment_value; - zend_uint arg_num = Z_LVAL(opline->op1.u.constant); - zend_free_op free_res; - - if (zend_ptr_stack_get_arg(arg_num, (void **) ¶m TSRMLS_CC)==FAILURE) { - if (Z_TYPE(opline->op2.u.constant) == IS_CONSTANT || Z_TYPE(opline->op2.u.constant)==IS_CONSTANT_ARRAY) { - zval *default_value; - - ALLOC_ZVAL(default_value); - *default_value = opline->op2.u.constant; - if (Z_TYPE(opline->op2.u.constant)==IS_CONSTANT_ARRAY) { - zval_copy_ctor(default_value); - } - default_value->refcount=1; - zval_update_constant(&default_value, 0 TSRMLS_CC); - default_value->refcount=0; - default_value->is_ref=0; - param = &default_value; - assignment_value = default_value; - } else { - param = NULL; - assignment_value = &opline->op2.u.constant; - } - zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, assignment_value TSRMLS_CC); - zend_assign_to_variable(NULL, &opline->result, NULL, assignment_value, IS_VAR, EX(Ts) TSRMLS_CC); - } else { - zval **var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W); - - assignment_value = *param; - zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, assignment_value TSRMLS_CC); - if (PZVAL_IS_REF(assignment_value)) { - zend_assign_to_variable_reference(var_ptr, param TSRMLS_CC); - } else { - zend_receive(var_ptr, assignment_value TSRMLS_CC); - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BRK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_brk_cont_element *el; - - el = zend_brk_cont(Z_LVAL(opline->op2.u.constant), opline->op1.u.opline_num, - EX(op_array), EX(Ts) TSRMLS_CC); - ZEND_VM_JMP(EX(op_array)->opcodes + el->brk); -} - -static int ZEND_CONT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_brk_cont_element *el; - - el = zend_brk_cont(Z_LVAL(opline->op2.u.constant), opline->op1.u.opline_num, - EX(op_array), EX(Ts) TSRMLS_CC); - ZEND_VM_JMP(EX(op_array)->opcodes + el->cont); -} - -static int ZEND_GOTO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *brk_opline; - zend_op *opline = EX(opline); - zend_brk_cont_element *el; - - el = zend_brk_cont(Z_LVAL(opline->op2.u.constant), opline->extended_value, - EX(op_array), EX(Ts) TSRMLS_CC); - - brk_opline = EX(op_array)->opcodes + el->brk; - - switch (brk_opline->opcode) { - case ZEND_SWITCH_FREE: - zend_switch_free(brk_opline, EX(Ts) TSRMLS_CC); - break; - case ZEND_FREE: - zendi_zval_dtor(EX_T(brk_opline->op1.u.var).tmp_var); - break; - } - ZEND_VM_JMP(opline->op1.u.jmp_addr); -} - -static int ZEND_FETCH_CLASS_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *class_name; - zend_free_op free_op2; - - - if (IS_TMP_VAR == IS_UNUSED) { - EX_T(opline->result.u.var).class_entry = zend_fetch_class(NULL, 0, opline->extended_value TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); - } - - class_name = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - switch (Z_TYPE_P(class_name)) { - case IS_OBJECT: - EX_T(opline->result.u.var).class_entry = Z_OBJCE_P(class_name); - break; - case IS_STRING: - case IS_UNICODE: - EX_T(opline->result.u.var).class_entry = zend_u_fetch_class(Z_TYPE_P(class_name), Z_UNIVAL_P(class_name), Z_UNILEN_P(class_name), opline->extended_value TSRMLS_CC); - break; - default: - zend_error_noreturn(E_ERROR, "Class name must be a valid object or a string"); - break; - } - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zend_class_entry *ce; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - ce = EX_T(opline->op1.u.var).class_entry; - if(IS_TMP_VAR != IS_UNUSED) { - zstr function_name_strval; - unsigned int function_name_strlen; - zend_bool is_const = (IS_TMP_VAR == IS_CONST); - zend_free_op free_op2; - - if (is_const) { - function_name_strval = Z_UNIVAL(opline->op2.u.constant); - function_name_strlen = Z_UNILEN(opline->op2.u.constant); - } else { - function_name = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Function name must be a string"); - } - function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); - } - - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); - - if (!is_const) { - efree(function_name_strval.v); - zval_dtor(free_op2.var); - } - } else { - if(!ce->constructor) { - zend_error_noreturn(E_ERROR, "Can not call constructor"); - } - if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { - zend_error(E_COMPILE_ERROR, "Cannot call private %v::__construct()", ce->name); - } - EX(fbc) = ce->constructor; - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (IS_TMP_VAR != IS_UNUSED && - EG(This) && - Z_OBJ_HT_P(EG(This))->get_class_entry && - !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) { - /* We are calling method of the other (incompatible) class, - but passing $this. This is done for compatibility with php-4. */ - zend_error(E_STRICT, "Non-static method %v::%v() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name); - - } - if ((EX(object) = EG(This))) { - EX(object)->refcount++; - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zend_function *function; - zstr function_name_strval, lcname; - unsigned int function_name_strlen, lcname_len; - zend_free_op free_op2; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - if (IS_TMP_VAR == IS_CONST) { - function_name = &opline->op2.u.constant; - } else { - function_name = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Function name must be a string"); - } - } - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - lcname = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), function_name_strlen, 1, &lcname_len); - if (zend_u_hash_find(EG(function_table), Z_TYPE_P(function_name), lcname, lcname_len+1, (void **) &function)==FAILURE) { - efree(lcname.v); - zend_error_noreturn(E_ERROR, "Call to undefined function %R()", Z_TYPE_P(function_name), function_name_strval); - } - - efree(lcname.v); - if (IS_TMP_VAR != IS_CONST) { - zval_dtor(free_op2.var); - } - - EX(object) = NULL; - - EX(fbc) = function; - - ZEND_VM_NEXT_OPCODE(); -} - - -static int ZEND_FETCH_CLASS_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *class_name; - zend_free_op free_op2; - - - if (IS_VAR == IS_UNUSED) { - EX_T(opline->result.u.var).class_entry = zend_fetch_class(NULL, 0, opline->extended_value TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); - } - - class_name = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - switch (Z_TYPE_P(class_name)) { - case IS_OBJECT: - EX_T(opline->result.u.var).class_entry = Z_OBJCE_P(class_name); - break; - case IS_STRING: - case IS_UNICODE: - EX_T(opline->result.u.var).class_entry = zend_u_fetch_class(Z_TYPE_P(class_name), Z_UNIVAL_P(class_name), Z_UNILEN_P(class_name), opline->extended_value TSRMLS_CC); - break; - default: - zend_error_noreturn(E_ERROR, "Class name must be a valid object or a string"); - break; - } - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zend_class_entry *ce; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - ce = EX_T(opline->op1.u.var).class_entry; - if(IS_VAR != IS_UNUSED) { - zstr function_name_strval; - unsigned int function_name_strlen; - zend_bool is_const = (IS_VAR == IS_CONST); - zend_free_op free_op2; - - if (is_const) { - function_name_strval = Z_UNIVAL(opline->op2.u.constant); - function_name_strlen = Z_UNILEN(opline->op2.u.constant); - } else { - function_name = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Function name must be a string"); - } - function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); - } - - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); - - if (!is_const) { - efree(function_name_strval.v); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - } else { - if(!ce->constructor) { - zend_error_noreturn(E_ERROR, "Can not call constructor"); - } - if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { - zend_error(E_COMPILE_ERROR, "Cannot call private %v::__construct()", ce->name); - } - EX(fbc) = ce->constructor; - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (IS_VAR != IS_UNUSED && - EG(This) && - Z_OBJ_HT_P(EG(This))->get_class_entry && - !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) { - /* We are calling method of the other (incompatible) class, - but passing $this. This is done for compatibility with php-4. */ - zend_error(E_STRICT, "Non-static method %v::%v() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name); - - } - if ((EX(object) = EG(This))) { - EX(object)->refcount++; - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zend_function *function; - zstr function_name_strval, lcname; - unsigned int function_name_strlen, lcname_len; - zend_free_op free_op2; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - if (IS_VAR == IS_CONST) { - function_name = &opline->op2.u.constant; - } else { - function_name = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Function name must be a string"); - } - } - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - lcname = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), function_name_strlen, 1, &lcname_len); - if (zend_u_hash_find(EG(function_table), Z_TYPE_P(function_name), lcname, lcname_len+1, (void **) &function)==FAILURE) { - efree(lcname.v); - zend_error_noreturn(E_ERROR, "Call to undefined function %R()", Z_TYPE_P(function_name), function_name_strval); - } - - efree(lcname.v); - if (IS_VAR != IS_CONST) { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - - EX(object) = NULL; - - EX(fbc) = function; - - ZEND_VM_NEXT_OPCODE(); -} - - -static int ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *class_name; - - - - if (IS_UNUSED == IS_UNUSED) { - EX_T(opline->result.u.var).class_entry = zend_fetch_class(NULL, 0, opline->extended_value TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); - } - - class_name = NULL; - - switch (Z_TYPE_P(class_name)) { - case IS_OBJECT: - EX_T(opline->result.u.var).class_entry = Z_OBJCE_P(class_name); - break; - case IS_STRING: - case IS_UNICODE: - EX_T(opline->result.u.var).class_entry = zend_u_fetch_class(Z_TYPE_P(class_name), Z_UNIVAL_P(class_name), Z_UNILEN_P(class_name), opline->extended_value TSRMLS_CC); - break; - default: - zend_error_noreturn(E_ERROR, "Class name must be a valid object or a string"); - break; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zend_class_entry *ce; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - ce = EX_T(opline->op1.u.var).class_entry; - if(IS_UNUSED != IS_UNUSED) { - zstr function_name_strval; - unsigned int function_name_strlen; - zend_bool is_const = (IS_UNUSED == IS_CONST); - - - if (is_const) { - function_name_strval = Z_UNIVAL(opline->op2.u.constant); - function_name_strlen = Z_UNILEN(opline->op2.u.constant); - } else { - function_name = NULL; - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Function name must be a string"); - } - function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); - } - - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); - - if (!is_const) { - efree(function_name_strval.v); - - } - } else { - if(!ce->constructor) { - zend_error_noreturn(E_ERROR, "Can not call constructor"); - } - if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { - zend_error(E_COMPILE_ERROR, "Cannot call private %v::__construct()", ce->name); - } - EX(fbc) = ce->constructor; - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (IS_UNUSED != IS_UNUSED && - EG(This) && - Z_OBJ_HT_P(EG(This))->get_class_entry && - !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) { - /* We are calling method of the other (incompatible) class, - but passing $this. This is done for compatibility with php-4. */ - zend_error(E_STRICT, "Non-static method %v::%v() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name); - - } - if ((EX(object) = EG(This))) { - EX(object)->refcount++; - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_CLASS_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *class_name; - - - - if (IS_CV == IS_UNUSED) { - EX_T(opline->result.u.var).class_entry = zend_fetch_class(NULL, 0, opline->extended_value TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); - } - - class_name = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - switch (Z_TYPE_P(class_name)) { - case IS_OBJECT: - EX_T(opline->result.u.var).class_entry = Z_OBJCE_P(class_name); - break; - case IS_STRING: - case IS_UNICODE: - EX_T(opline->result.u.var).class_entry = zend_u_fetch_class(Z_TYPE_P(class_name), Z_UNIVAL_P(class_name), Z_UNILEN_P(class_name), opline->extended_value TSRMLS_CC); - break; - default: - zend_error_noreturn(E_ERROR, "Class name must be a valid object or a string"); - break; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zend_class_entry *ce; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - ce = EX_T(opline->op1.u.var).class_entry; - if(IS_CV != IS_UNUSED) { - zstr function_name_strval; - unsigned int function_name_strlen; - zend_bool is_const = (IS_CV == IS_CONST); - - - if (is_const) { - function_name_strval = Z_UNIVAL(opline->op2.u.constant); - function_name_strlen = Z_UNILEN(opline->op2.u.constant); - } else { - function_name = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Function name must be a string"); - } - function_name_strval = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), Z_UNILEN_P(function_name), 1, &function_name_strlen); - } - - EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC); - - if (!is_const) { - efree(function_name_strval.v); - - } - } else { - if(!ce->constructor) { - zend_error_noreturn(E_ERROR, "Can not call constructor"); - } - if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { - zend_error(E_COMPILE_ERROR, "Cannot call private %v::__construct()", ce->name); - } - EX(fbc) = ce->constructor; - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (IS_CV != IS_UNUSED && - EG(This) && - Z_OBJ_HT_P(EG(This))->get_class_entry && - !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) { - /* We are calling method of the other (incompatible) class, - but passing $this. This is done for compatibility with php-4. */ - zend_error(E_STRICT, "Non-static method %v::%v() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name); - - } - if ((EX(object) = EG(This))) { - EX(object)->refcount++; - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zend_function *function; - zstr function_name_strval, lcname; - unsigned int function_name_strlen, lcname_len; - - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - if (IS_CV == IS_CONST) { - function_name = &opline->op2.u.constant; - } else { - function_name = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Function name must be a string"); - } - } - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - lcname = zend_u_str_case_fold(Z_TYPE_P(function_name), Z_UNIVAL_P(function_name), function_name_strlen, 1, &lcname_len); - if (zend_u_hash_find(EG(function_table), Z_TYPE_P(function_name), lcname, lcname_len+1, (void **) &function)==FAILURE) { - efree(lcname.v); - zend_error_noreturn(E_ERROR, "Call to undefined function %R()", Z_TYPE_P(function_name), function_name_strval); - } - - efree(lcname.v); - if (IS_CV != IS_CONST) { - - } - - EX(object) = NULL; - - EX(fbc) = function; - - ZEND_VM_NEXT_OPCODE(); -} - - -static int ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - bitwise_not_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant TSRMLS_CC); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - boolean_not_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant TSRMLS_CC); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *z = &opline->op1.u.constant; - zval z_copy; - UErrorCode status = U_ZERO_ERROR; - - /* UTODO: review this - * Convert inline HTML blocks to the output encoding, but only if necessary. */ - if (opline->extended_value && - strcmp(ucnv_getName(ZEND_U_CONVERTER(UG(output_encoding_conv)), &status), - EX(op_array)->script_encoding)) { - zval z_conv; - UConverter *script_enc_conv = NULL; - if (zend_set_converter_encoding(&script_enc_conv, EX(op_array)->script_encoding) == FAILURE) { - zend_error(E_ERROR, "Unsupported encoding [%d]", EX(op_array)->script_encoding); - } - zend_convert_encodings(ZEND_U_CONVERTER(UG(output_encoding_conv)), script_enc_conv, &Z_STRVAL(z_conv), &Z_STRLEN(z_conv), Z_STRVAL_P(z), Z_STRLEN_P(z), &status); - Z_TYPE(z_conv) = IS_STRING; - if (U_SUCCESS(status)) { - zend_print_variable(&z_conv); - } else { - zend_error(E_WARNING, "Could not convert inline HTML for output"); - } - zval_dtor(&z_conv); - ucnv_close(script_enc_conv); - } else if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get_method != NULL && - zend_std_cast_object_tostring(z, &z_copy, ZEND_STR_TYPE, ZEND_U_CONVERTER(UG(output_encoding_conv)) TSRMLS_CC) == SUCCESS) { - zend_print_variable(&z_copy); - zval_dtor(&z_copy); - } else { - zend_print_variable(z); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRINT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 1; - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_LONG; - - return ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_fetch_var_address_helper_SPEC_CONST(int type, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *varname = &opline->op1.u.constant; - zval **retval; - zval tmp_varname; - HashTable *target_symbol_table; - - if (Z_TYPE_P(varname) != IS_STRING && Z_TYPE_P(varname) != IS_UNICODE) { - tmp_varname = *varname; - zval_copy_ctor(&tmp_varname); - convert_to_text(&tmp_varname); - varname = &tmp_varname; - } - - if (opline->op2.u.EA.type == ZEND_FETCH_AUTO_GLOBAL && - CG(auto_globals_cache)[opline->op2.u.var]) { - retval = CG(auto_globals_cache)[opline->op2.u.var]; - } else if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) { - retval = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname), 0 TSRMLS_CC); - } else { - zend_auto_global *auto_global = NULL; - - if (opline->op2.u.EA.type == ZEND_FETCH_AUTO_GLOBAL) { - zend_u_is_auto_global_ex(Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname), 1, &auto_global TSRMLS_CC); - } - target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), type, varname TSRMLS_CC); -/* - if (!target_symbol_table) { - ZEND_VM_NEXT_OPCODE(); - } -*/ - if (zend_u_hash_find(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, (void **) &retval) == FAILURE) { - switch (type) { - case BP_VAR_R: - case BP_VAR_UNSET: - zend_error(E_NOTICE,"Undefined variable: %R", Z_TYPE_P(varname), Z_UNIVAL_P(varname)); - /* break missing intentionally */ - case BP_VAR_IS: - retval = &EG(uninitialized_zval_ptr); - break; - case BP_VAR_RW: - zend_error(E_NOTICE,"Undefined variable: %R", Z_TYPE_P(varname), Z_UNIVAL_P(varname)); - /* break missing intentionally */ - case BP_VAR_W: { - zval *new_zval = &EG(uninitialized_zval); - - new_zval->refcount++; - zend_u_hash_update(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, &new_zval, sizeof(zval *), (void **) &retval); - } - break; - EMPTY_SWITCH_DEFAULT_CASE() - } - } - switch (opline->op2.u.EA.type) { - case ZEND_FETCH_AUTO_GLOBAL: - if (auto_global && (!auto_global->armed || !auto_global->runtime)) { - CG(auto_globals_cache)[opline->op2.u.var] = retval; - } - /* break missing intentionally */ - case ZEND_FETCH_GLOBAL: - if (IS_CONST != IS_TMP_VAR) { - - } - break; - case ZEND_FETCH_LOCAL: - - break; - case ZEND_FETCH_STATIC: - zval_update_constant(retval, (void*) 1 TSRMLS_CC); - break; - case ZEND_FETCH_GLOBAL_LOCK: - if (IS_CONST == IS_VAR && !free_op1.var) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - break; - } - } - - - if (varname == &tmp_varname) { - zval_dtor(varname); - } - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = retval; - PZVAL_LOCK(*retval); - switch (type) { - case BP_VAR_R: - case BP_VAR_IS: - AI_USE_PTR(EX_T(opline->result.u.var).var); - break; - case BP_VAR_UNSET: { - zend_free_op free_res; - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - break; - } - } - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_W_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_CONST(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_CONST(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_FUNC_ARG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_CONST(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), EX(opline)->extended_value)?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_UNSET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_CONST(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_IS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_CONST(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - int ret = i_zend_is_true(&opline->op1.u.constant); - - if (!ret) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - int ret = i_zend_is_true(&opline->op1.u.constant); - - if (ret) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - int retval = i_zend_is_true(&opline->op1.u.constant); - - if (retval) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp on true to %d\n", opline->extended_value); -#endif - ZEND_VM_JMP(&EX(op_array)->opcodes[opline->extended_value]); - } else { -#if DEBUG_ZEND>=2 - printf("Conditional jmp on false to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(&EX(op_array)->opcodes[opline->op2.u.opline_num]); - } -} - -static int ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - int retval = i_zend_is_true(&opline->op1.u.constant); - - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = retval; - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - if (!retval) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - int retval = i_zend_is_true(&opline->op1.u.constant); - - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = retval; - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - if (retval) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DO_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *fname = &opline->op1.u.constant; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - if (zend_u_hash_find(EG(function_table), Z_TYPE_P(fname), Z_UNIVAL_P(fname), Z_UNILEN_P(fname)+1, (void **) &EX(function_state).function)==FAILURE) { - /* FIXME: output identifiers properly */ - zend_error_noreturn(E_ERROR, "Call to undefined function %R()", Z_TYPE_P(fname), Z_UNIVAL_P(fname)); - } - EX(object) = NULL; - - return zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *retval_ptr; - zval **retval_ptr_ptr; - - - if (EG(active_op_array)->return_reference == ZEND_RETURN_REF) { - - if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) { - /* Not supposed to happen, but we'll allow it */ - zend_error(E_NOTICE, "Only variable references should be returned by reference"); - goto return_by_value; - } - - retval_ptr_ptr = NULL; - - if (!retval_ptr_ptr) { - zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference"); - } - - if (IS_CONST == IS_VAR && !(*retval_ptr_ptr)->is_ref) { - if (opline->extended_value == ZEND_RETURNS_FUNCTION && - EX_T(opline->op1.u.var).var.fcall_returned_reference) { - } else if (opline->extended_value == ZEND_RETURNS_NEW) { - } else if (EX_T(opline->op1.u.var).var.ptr_ptr == &EX_T(opline->op1.u.var).var.ptr) { - if (IS_CONST == IS_VAR && !0) { - PZVAL_LOCK(*retval_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */ - } - zend_error(E_NOTICE, "Only variable references should be returned by reference"); - goto return_by_value; - } - } - - SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr_ptr); - (*retval_ptr_ptr)->refcount++; - - (*EG(return_value_ptr_ptr)) = (*retval_ptr_ptr); - } else { -return_by_value: - - retval_ptr = &opline->op1.u.constant; - - if (!0) { /* Not a temp var */ - if (EG(active_op_array)->return_reference == ZEND_RETURN_REF || - (PZVAL_IS_REF(retval_ptr) && retval_ptr->refcount > 0)) { - zval *ret; - - ALLOC_ZVAL(ret); - INIT_PZVAL_COPY(ret, retval_ptr); - zval_copy_ctor(ret); - *EG(return_value_ptr_ptr) = ret; - } else { - *EG(return_value_ptr_ptr) = retval_ptr; - retval_ptr->refcount++; - } - } else { - zval *ret; - - ALLOC_ZVAL(ret); - INIT_PZVAL_COPY(ret, retval_ptr); - *EG(return_value_ptr_ptr) = ret; - } - } - - ZEND_VM_RETURN_FROM_EXECUTE_LOOP(); -} - -static int ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *value; - zval *exception; - - - value = &opline->op1.u.constant; - - if (Z_TYPE_P(value) != IS_OBJECT) { - zend_error_noreturn(E_ERROR, "Can only throw objects"); - } - /* Not sure if a complete copy is what we want here */ - ALLOC_ZVAL(exception); - INIT_PZVAL_COPY(exception, value); - if (!0) { - zval_copy_ctor(exception); - } - - zend_throw_exception_object(exception TSRMLS_CC); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SEND_VAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - if (opline->extended_value==ZEND_DO_FCALL_BY_NAME - && ARG_MUST_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) { - zend_error_noreturn(E_ERROR, "Cannot pass parameter %d by reference", opline->op2.u.opline_num); - } - { - zval *valptr; - zval *value; - - - value = &opline->op1.u.constant; - - ALLOC_ZVAL(valptr); - INIT_PZVAL_COPY(valptr, value); - if (!0) { - zval_copy_ctor(valptr); - } - zend_ptr_stack_push(&EG(argument_stack), valptr); - - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - /* PHP 3.0 returned "" for false and 1 for true, here we use 0 and 1 for now */ - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = i_zend_is_true(&opline->op1.u.constant); - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *obj = &opline->op1.u.constant; - zend_class_entry *ce; - zend_function *clone; - zend_object_clone_obj_t clone_call; - - if (!obj || Z_TYPE_P(obj) != IS_OBJECT) { - zend_error(E_WARNING, "__clone method called on non-object"); - EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); - EX_T(opline->result.u.var).var.ptr->refcount++; - - ZEND_VM_NEXT_OPCODE(); - } - - ce = Z_OBJCE_P(obj); - clone = ce ? ce->clone : NULL; - clone_call = Z_OBJ_HT_P(obj)->clone_obj; - if (!clone_call) { - if (ce) { - zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %v", ce->name); - } else { - zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object"); - } - EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); - EX_T(opline->result.u.var).var.ptr->refcount++; - } - - if (ce && clone) { - if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) { - /* Ensure that if we're calling a private function, we're allowed to do so. - */ - if (ce != EG(scope)) { - zend_error_noreturn(E_ERROR, "Call to private %v::__clone() from context '%v'", ce->name, EG(scope) ? EG(scope)->name : EMPTY_ZSTR); - } - } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) { - /* Ensure that if we're calling a protected function, we're allowed to do so. - */ - if (!zend_check_protected(clone->common.scope, EG(scope))) { - zend_error_noreturn(E_ERROR, "Call to protected %v::__clone() from context '%v'", ce->name, EG(scope) ? EG(scope)->name : EMPTY_ZSTR); - } - } - } - - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - if (!EG(exception)) { - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - Z_OBJVAL_P(EX_T(opline->result.u.var).var.ptr) = clone_call(obj TSRMLS_CC); - Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_OBJECT; - EX_T(opline->result.u.var).var.ptr->refcount=1; - EX_T(opline->result.u.var).var.ptr->is_ref=1; - if (!RETURN_VALUE_USED(opline) || EG(exception)) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *expr = &opline->op1.u.constant; - zval *result = &EX_T(opline->result.u.var).tmp_var; - - *result = *expr; - if (!0) { - zendi_zval_copy_ctor(*result); - } - switch (opline->extended_value) { - case IS_NULL: - convert_to_null(result); - break; - case IS_BOOL: - convert_to_boolean(result); - break; - case IS_LONG: - convert_to_long(result); - break; - case IS_DOUBLE: - convert_to_double(result); - break; - case IS_STRING: { - zval var_copy; - int use_copy; - - zend_make_string_zval(result, &var_copy, &use_copy); - if (use_copy) { - zval_dtor(result); - *result = var_copy; - } - break; - } - case IS_UNICODE: { - zval var_copy; - int use_copy; - - zend_make_unicode_zval(result, &var_copy, &use_copy); - if (use_copy) { - zval_dtor(result); - *result = var_copy; - } - break; - } - case IS_ARRAY: - convert_to_array(result); - break; - case IS_OBJECT: - convert_to_object(result); - break; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op_array *new_op_array=NULL; - zval **original_return_value = EG(return_value_ptr_ptr); - int return_value_used = RETURN_VALUE_USED(opline); - - zval *inc_filename = &opline->op1.u.constant; - zval tmp_inc_filename; - zend_bool failure_retval=0; - - if (UG(unicode) && Z_LVAL(opline->op2.u.constant) == ZEND_EVAL) { - if (Z_TYPE_P(inc_filename) != IS_UNICODE) { - tmp_inc_filename = *inc_filename; - zval_copy_ctor(&tmp_inc_filename); - convert_to_unicode(&tmp_inc_filename); - inc_filename = &tmp_inc_filename; - } - } else if (Z_TYPE_P(inc_filename) == IS_UNICODE) { - char *encpath; - int encpath_len; - - if (FAILURE == zend_path_encode(&encpath, &encpath_len, Z_USTRVAL_P(inc_filename), Z_USTRLEN_P(inc_filename) TSRMLS_CC)) { - failure_retval = 0; - zend_error(E_ERROR, "Failure converting '%R' to filesystem encoding", IS_UNICODE, Z_USTRVAL_P(inc_filename)); - goto skip_compile; - } - - ZVAL_STRINGL(&tmp_inc_filename, encpath, encpath_len, 0); - inc_filename = &tmp_inc_filename; - } else if (Z_TYPE_P(inc_filename) != IS_STRING) { - tmp_inc_filename = *inc_filename; - zval_copy_ctor(&tmp_inc_filename); - convert_to_string(&tmp_inc_filename); - inc_filename = &tmp_inc_filename; - } - - switch (Z_LVAL(opline->op2.u.constant)) { - case ZEND_INCLUDE_ONCE: - case ZEND_REQUIRE_ONCE: { - zend_file_handle file_handle; - char cwd[MAXPATHLEN]; - cwd_state state; - - if (IS_ABSOLUTE_PATH(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename))) { - cwd[0] = '\0'; - } else if (!VCWD_GETCWD(cwd, MAXPATHLEN)) { - cwd[0] = '\0'; - } - - state.cwd_length = strlen(cwd); - state.cwd = zend_strndup(cwd, state.cwd_length); - - failure_retval = (!virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) && - zend_hash_exists(&EG(included_files), state.cwd, state.cwd_length+1)); - - free(state.cwd); - - if (failure_retval) { - /* do nothing */ - } else if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) { - if (!file_handle.opened_path) { - file_handle.opened_path = estrndup(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename)); - } - - if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) { - new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC); - zend_destroy_file_handle(&file_handle TSRMLS_CC); - } else { - zend_file_handle_dtor(&file_handle); - failure_retval=1; - } - } else { - if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) { - zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename)); - } else { - zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename)); - } - } - } - break; - case ZEND_INCLUDE: - case ZEND_REQUIRE: - new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC); - break; - case ZEND_EVAL: { - char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC); - - new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC); - efree(eval_desc); - } - break; - EMPTY_SWITCH_DEFAULT_CASE() - } - -skip_compile: - if (inc_filename==&tmp_inc_filename) { - zval_dtor(&tmp_inc_filename); - } - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - if (new_op_array) { - zval *saved_object; - zend_function *saved_function; - - EG(return_value_ptr_ptr) = EX_T(opline->result.u.var).var.ptr_ptr; - EG(active_op_array) = new_op_array; - EX_T(opline->result.u.var).var.ptr = NULL; - - saved_object = EX(object); - saved_function = EX(function_state).function; - - EX(function_state).function = (zend_function *) new_op_array; - EX(object) = NULL; - - zend_execute(new_op_array TSRMLS_CC); - - EX(function_state).function = saved_function; - EX(object) = saved_object; - - if (!return_value_used) { - if (EX_T(opline->result.u.var).var.ptr) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); - } - } else { /* return value is used */ - if (!EX_T(opline->result.u.var).var.ptr) { /* there was no return statement */ - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - INIT_PZVAL(EX_T(opline->result.u.var).var.ptr); - Z_LVAL_P(EX_T(opline->result.u.var).var.ptr) = 1; - Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_BOOL; - } - } - - EG(opline_ptr) = &EX(opline); - EG(active_op_array) = EX(op_array); - EG(function_state_ptr) = &EX(function_state); - destroy_op_array(new_op_array TSRMLS_CC); - efree(new_op_array); - if (EG(exception)) { - zend_throw_exception_internal(NULL TSRMLS_CC); - } - } else { - if (return_value_used) { - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - INIT_ZVAL(*EX_T(opline->result.u.var).var.ptr); - Z_LVAL_P(EX_T(opline->result.u.var).var.ptr) = failure_retval; - Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_BOOL; - } - } - - EG(return_value_ptr_ptr) = original_return_value; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_UNSET_VAR_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval tmp, *varname; - HashTable *target_symbol_table; - - - varname = &opline->op1.u.constant; - - if (Z_TYPE_P(varname) != IS_STRING && Z_TYPE_P(varname) != IS_UNICODE) { - tmp = *varname; - zval_copy_ctor(&tmp); - convert_to_text(&tmp); - varname = &tmp; - } else if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { - varname->refcount++; - } - - if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) { - zend_std_unset_static_property(EX_T(opline->op2.u.var).class_entry, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname) TSRMLS_CC); - } else { - target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), BP_VAR_IS, varname TSRMLS_CC); - if (zend_u_hash_del(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1) == SUCCESS) { - zend_execute_data *ex = execute_data; - ulong hash_value = zend_u_inline_hash_func(Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1); - zend_auto_global *auto_global; - - if (zend_u_hash_quick_find(CG(auto_globals), Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, hash_value, (void**)&auto_global) == SUCCESS) { - CG(auto_globals_cache)[auto_global->index] = NULL; - } - do { - int i; - - if (ex->op_array) { - for (i = 0; i < ex->op_array->last_var; i++) { - if (ex->op_array->vars[i].hash_value == hash_value && - ex->op_array->vars[i].name_len == Z_UNILEN_P(varname) && - !memcmp(ex->op_array->vars[i].name.v, Z_UNIVAL_P(varname).v, Z_TYPE_P(varname)==IS_UNICODE?UBYTES(Z_UNILEN_P(varname)):Z_UNILEN_P(varname))) { - ex->CVs[i] = NULL; - break; - } - } - } - ex = ex->prev_execute_data; - } while (ex && ex->symbol_table == target_symbol_table); - } - } - - if (varname == &tmp) { - zval_dtor(&tmp); - } else if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { - zval_ptr_dtor(&varname); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FE_RESET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *array_ptr, **array_ptr_ptr; - HashTable *fe_ht; - zend_object_iterator *iter = NULL; - zend_class_entry *ce = NULL; - zend_bool is_empty = 0; - - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - array_ptr_ptr = NULL; - if (array_ptr_ptr == NULL || array_ptr_ptr == &EG(uninitialized_zval_ptr)) { - ALLOC_INIT_ZVAL(array_ptr); - } else if (Z_TYPE_PP(array_ptr_ptr) == IS_OBJECT) { - if(Z_OBJ_HT_PP(array_ptr_ptr)->get_class_entry == NULL) { - zend_error(E_WARNING, "foreach() can not iterate over objects without PHP class"); - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - } - - ce = Z_OBJCE_PP(array_ptr_ptr); - if (!ce || ce->get_iterator == NULL) { - SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr); - (*array_ptr_ptr)->refcount++; - } - array_ptr = *array_ptr_ptr; - } else { - if (Z_TYPE_PP(array_ptr_ptr) == IS_ARRAY) { - SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr); - } - array_ptr = *array_ptr_ptr; - array_ptr->refcount++; - } - } else { - array_ptr = &opline->op1.u.constant; - if (0) { /* IS_TMP_VAR */ - zval *tmp; - - ALLOC_ZVAL(tmp); - INIT_PZVAL_COPY(tmp, array_ptr); - array_ptr = tmp; - } else if (Z_TYPE_P(array_ptr) == IS_OBJECT) { - ce = Z_OBJCE_P(array_ptr); - if (!ce || !ce->get_iterator) { - array_ptr->refcount++; - } - } else { - if (IS_CONST == IS_VAR && - free_op1.var == NULL && - !array_ptr->is_ref && - array_ptr->refcount > 1) { - /* non-separated return value from function */ - zval *tmp; - - ALLOC_ZVAL(tmp); - INIT_PZVAL_COPY(tmp, array_ptr); - zval_copy_ctor(tmp); - array_ptr = tmp; - } else { - array_ptr->refcount++; - } - } - } - - if (IS_CONST != IS_TMP_VAR && ce && ce->get_iterator) { - iter = ce->get_iterator(ce, array_ptr, opline->extended_value & ZEND_FE_RESET_REFERENCE TSRMLS_CC); - - if (iter && !EG(exception)) { - array_ptr = zend_iterator_wrap(iter TSRMLS_CC); - } else { - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - - } else { - - } - if (!EG(exception)) { - zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Object of type %v did not create an Iterator", ce->name); - } - zend_throw_exception_internal(NULL TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); - } - } - - PZVAL_LOCK(array_ptr); - EX_T(opline->result.u.var).var.ptr = array_ptr; - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - - if (iter) { - iter->index = 0; - if (iter->funcs->rewind) { - iter->funcs->rewind(iter TSRMLS_CC); - if (EG(exception)) { - array_ptr->refcount--; - zval_ptr_dtor(&array_ptr); - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); - } - } - is_empty = iter->funcs->valid(iter TSRMLS_CC) != SUCCESS; - if (EG(exception)) { - array_ptr->refcount--; - zval_ptr_dtor(&array_ptr); - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); - } - iter->index = -1; /* will be set to 0 before using next handler */ - } else if ((fe_ht = HASH_OF(array_ptr)) != NULL) { - zend_hash_internal_pointer_reset(fe_ht); - if (ce) { - zend_object *zobj = zend_objects_get_address(array_ptr TSRMLS_CC); - while (zend_hash_has_more_elements(fe_ht) == SUCCESS) { - zstr str_key; - uint str_key_len; - ulong int_key; - zend_uchar key_type; - - key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL); - if (key_type != HASH_KEY_NON_EXISTANT && - (key_type == HASH_KEY_IS_LONG || - zend_check_property_access(zobj, key_type == HASH_KEY_IS_UNICODE?IS_UNICODE:IS_STRING, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS)) { - break; - } - zend_hash_move_forward(fe_ht); - } - } - is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS; - zend_hash_get_pointer(fe_ht, &EX_T(opline->result.u.var).fe.fe_pos); - } else { - zend_error(E_WARNING, "Invalid argument supplied for foreach()"); - is_empty = 1; - } - - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - - } else { - - } - if (is_empty) { - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - } else { - ZEND_VM_NEXT_OPCODE(); - } -} - -static int ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval tmp, *varname = &opline->op1.u.constant; - zval **value; - zend_bool isset = 1; - HashTable *target_symbol_table; - - if (Z_TYPE_P(varname) != IS_STRING && Z_TYPE_P(varname) != IS_UNICODE) { - tmp = *varname; - zval_copy_ctor(&tmp); - convert_to_text(&tmp); - varname = &tmp; - } - - if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) { - value = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname), 1 TSRMLS_CC); - if (!value) { - isset = 0; - } - } else { - target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), BP_VAR_IS, varname TSRMLS_CC); - if (zend_u_hash_find(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, (void **) &value) == FAILURE) { - isset = 0; - } - } - - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - switch (opline->extended_value) { - case ZEND_ISSET: - if (isset && Z_TYPE_PP(value) == IS_NULL) { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0; - } else { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = isset; - } - break; - case ZEND_ISEMPTY: - if (!isset || !i_zend_is_true(*value)) { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 1; - } else { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0; - } - break; - } - - if (varname == &tmp) { - zval_dtor(&tmp); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_EXIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ -#if 0 || (IS_CONST != IS_UNUSED) - zend_op *opline = EX(opline); - if (IS_CONST != IS_UNUSED) { - - zval *ptr = &opline->op1.u.constant; - - if (Z_TYPE_P(ptr) == IS_LONG) { - EG(exit_status) = Z_LVAL_P(ptr); - } else { - zend_print_variable(ptr); - } - - } -#endif - zend_bailout(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *value = &opline->op1.u.constant; - - if (i_zend_is_true(value)) { - EX_T(opline->result.u.var).tmp_var = *value; - zendi_zval_copy_ctor(EX_T(opline->result.u.var).tmp_var); - -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *value = &opline->op1.u.constant; - - EX_T(opline->result.u.var).tmp_var = *value; - if (!0) { - zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_TICKS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - if (++EG(ticks_count)>=Z_LVAL(opline->op1.u.constant)) { - EG(ticks_count)=0; - if (zend_ticks_function) { - zend_ticks_function(Z_LVAL(opline->op1.u.constant)); - } - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_U_NORMALIZE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *string = &opline->op1.u.constant; - zval *result = &EX_T(opline->result.u.var).tmp_var; - - *result = *string; - if (!0) { - zendi_zval_copy_ctor(*result); - } - - if (UG(unicode)) { - zval var_copy; - int use_copy; - UChar *norm; - int norm_len; - - zend_make_unicode_zval(result, &var_copy, &use_copy); - if (use_copy) { - zval_dtor(result); - *result = var_copy; - } - if (zend_normalize_identifier(&norm, &norm_len, - Z_USTRVAL_P(result), Z_USTRLEN_P(result), 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", Z_USTRVAL_P(result)); - } else if (norm != Z_USTRVAL_P(result)) { - efree(Z_USTRVAL_P(result)); - ZVAL_UNICODEL(result, norm, norm_len, 0); - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - add_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - sub_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - mul_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - div_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - mod_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - shift_left_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - shift_right_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - concat_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_identical_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_not_identical_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_not_equal_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_smaller_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - bitwise_or_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - bitwise_and_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - boolean_xor_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_TMP_VAR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *container = &opline->op1.u.constant; - - if (Z_TYPE_P(container) != IS_ARRAY) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - } - } else { - - zval *dim = &opline->op2.u.constant; - - EX_T(opline->result.u.var).var.ptr_ptr = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, BP_VAR_R TSRMLS_CC); - SELECTIVE_PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &opline->result); - - } - AI_USE_PTR(EX_T(opline->result.u.var).var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CASE_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - int switch_expr_is_overloaded=0; - - - if (IS_CONST==IS_VAR) { - if (EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr); - } else { - switch_expr_is_overloaded = 1; - EX_T(opline->op1.u.var).str_offset.str->refcount++; - } - } - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - &opline->op2.u.constant TSRMLS_CC); - - if (switch_expr_is_overloaded) { - /* We only free op1 if this is a string offset, - * Since if it is a TMP_VAR, it'll be reused by - * other CASE opcodes (whereas string offsets - * are allocated at each get_zval_ptr()) - */ - - EX_T(opline->op1.u.var).var.ptr_ptr = NULL; - AI_USE_PTR(EX_T(opline->op1.u.var).var); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_class_entry *ce = NULL; - zval **value; - - if (IS_CONST == IS_UNUSED) { -/* This seems to be a reminant of namespaces - if (EG(scope)) { - ce = EG(scope); - if (zend_hash_find(&ce->constants_table, Z_STRVAL(opline->op2.u.constant), Z_STRLEN(opline->op2.u.constant)+1, (void **) &value) == SUCCESS) { - zval_update_constant(value, (void *) 1 TSRMLS_CC); - EX_T(opline->result.u.var).tmp_var = **value; - zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var); - ZEND_VM_NEXT_OPCODE(); - } - } -*/ - if (!zend_u_get_constant(Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant), Z_UNILEN(opline->op2.u.constant), &EX_T(opline->result.u.var).tmp_var, NULL TSRMLS_CC)) { - zend_error(E_NOTICE, "Use of undefined constant %R - assumed '%R'", - Z_TYPE(opline->op2.u.constant), - Z_UNIVAL(opline->op2.u.constant), - Z_TYPE(opline->op2.u.constant), - Z_UNIVAL(opline->op2.u.constant)); - EX_T(opline->result.u.var).tmp_var = opline->op2.u.constant; - zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var); - } - ZEND_VM_NEXT_OPCODE(); - } - - ce = EX_T(opline->op1.u.var).class_entry; - - if (zend_u_hash_find(&ce->constants_table, Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant), Z_UNILEN(opline->op2.u.constant)+1, (void **) &value) == SUCCESS) { - zval_update_constant(value, (void *) 1 TSRMLS_CC); - EX_T(opline->result.u.var).tmp_var = **value; - zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var); - } else { - zend_error_noreturn(E_ERROR, "Undefined class constant '%R'", Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant)); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=&opline->op2.u.constant; - -#if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=NULL; - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=&opline->op1.u.constant; - } -#else - expr_ptr=&opline->op1.u.constant; -#endif - - if (0) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_CONST == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_CONST != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_ADD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - add_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SUB_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - sub_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MUL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - mul_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DIV_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - div_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MOD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - mod_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - shift_left_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SR_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - shift_right_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CONCAT_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - concat_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_IDENTICAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_identical_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_IDENTICAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_not_identical_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_EQUAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_EQUAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_not_equal_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_smaller_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_OR_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - bitwise_or_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_AND_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - bitwise_and_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_XOR_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_XOR_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - boolean_xor_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CASE_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - int switch_expr_is_overloaded=0; - zend_free_op free_op2; - - if (IS_CONST==IS_VAR) { - if (EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr); - } else { - switch_expr_is_overloaded = 1; - EX_T(opline->op1.u.var).str_offset.str->refcount++; - } - } - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - if (switch_expr_is_overloaded) { - /* We only free op1 if this is a string offset, - * Since if it is a TMP_VAR, it'll be reused by - * other CASE opcodes (whereas string offsets - * are allocated at each get_zval_ptr()) - */ - - EX_T(opline->op1.u.var).var.ptr_ptr = NULL; - AI_USE_PTR(EX_T(opline->op1.u.var).var); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - -#if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=NULL; - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=&opline->op1.u.constant; - } -#else - expr_ptr=&opline->op1.u.constant; -#endif - - if (0) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - zval_dtor(free_op2.var); - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_CONST == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_CONST != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_ADD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - add_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SUB_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - sub_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MUL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - mul_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DIV_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - div_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MOD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - mod_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - shift_left_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - shift_right_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CONCAT_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - concat_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_IDENTICAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_identical_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_not_identical_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_EQUAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_EQUAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_not_equal_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_smaller_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_OR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - bitwise_or_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_AND_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - bitwise_and_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_XOR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_XOR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - boolean_xor_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CASE_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - int switch_expr_is_overloaded=0; - zend_free_op free_op2; - - if (IS_CONST==IS_VAR) { - if (EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr); - } else { - switch_expr_is_overloaded = 1; - EX_T(opline->op1.u.var).str_offset.str->refcount++; - } - } - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - if (switch_expr_is_overloaded) { - /* We only free op1 if this is a string offset, - * Since if it is a TMP_VAR, it'll be reused by - * other CASE opcodes (whereas string offsets - * are allocated at each get_zval_ptr()) - */ - - EX_T(opline->op1.u.var).var.ptr_ptr = NULL; - AI_USE_PTR(EX_T(opline->op1.u.var).var); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - -#if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=NULL; - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=&opline->op1.u.constant; - } -#else - expr_ptr=&opline->op1.u.constant; -#endif - - if (0) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_CONST == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_CONST != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=NULL; - -#if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=NULL; - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=&opline->op1.u.constant; - } -#else - expr_ptr=&opline->op1.u.constant; -#endif - - if (0) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_CONST == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_CONST != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_ADD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - add_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SUB_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - sub_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MUL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - mul_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - div_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MOD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - mod_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - shift_left_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - shift_right_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - concat_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_IDENTICAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_identical_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_not_identical_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_not_equal_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_smaller_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_OR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - bitwise_or_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_AND_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - bitwise_and_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_XOR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_XOR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - boolean_xor_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CASE_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - int switch_expr_is_overloaded=0; - - - if (IS_CONST==IS_VAR) { - if (EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr); - } else { - switch_expr_is_overloaded = 1; - EX_T(opline->op1.u.var).str_offset.str->refcount++; - } - } - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - &opline->op1.u.constant, - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - if (switch_expr_is_overloaded) { - /* We only free op1 if this is a string offset, - * Since if it is a TMP_VAR, it'll be reused by - * other CASE opcodes (whereas string offsets - * are allocated at each get_zval_ptr()) - */ - - EX_T(opline->op1.u.var).var.ptr_ptr = NULL; - AI_USE_PTR(EX_T(opline->op1.u.var).var); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - -#if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=NULL; - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=&opline->op1.u.constant; - } -#else - expr_ptr=&opline->op1.u.constant; -#endif - - if (0) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_CONST == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_CONST != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_BW_NOT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - bitwise_not_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_NOT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - boolean_not_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ECHO_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *z = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval z_copy; - UErrorCode status = U_ZERO_ERROR; - - /* UTODO: review this - * Convert inline HTML blocks to the output encoding, but only if necessary. */ - if (opline->extended_value && - strcmp(ucnv_getName(ZEND_U_CONVERTER(UG(output_encoding_conv)), &status), - EX(op_array)->script_encoding)) { - zval z_conv; - UConverter *script_enc_conv = NULL; - if (zend_set_converter_encoding(&script_enc_conv, EX(op_array)->script_encoding) == FAILURE) { - zend_error(E_ERROR, "Unsupported encoding [%d]", EX(op_array)->script_encoding); - } - zend_convert_encodings(ZEND_U_CONVERTER(UG(output_encoding_conv)), script_enc_conv, &Z_STRVAL(z_conv), &Z_STRLEN(z_conv), Z_STRVAL_P(z), Z_STRLEN_P(z), &status); - Z_TYPE(z_conv) = IS_STRING; - if (U_SUCCESS(status)) { - zend_print_variable(&z_conv); - } else { - zend_error(E_WARNING, "Could not convert inline HTML for output"); - } - zval_dtor(&z_conv); - ucnv_close(script_enc_conv); - } else if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get_method != NULL && - zend_std_cast_object_tostring(z, &z_copy, ZEND_STR_TYPE, ZEND_U_CONVERTER(UG(output_encoding_conv)) TSRMLS_CC) == SUCCESS) { - zend_print_variable(&z_copy); - zval_dtor(&z_copy); - } else { - zend_print_variable(z); - } - - zval_dtor(free_op1.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRINT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 1; - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_LONG; - - return ZEND_ECHO_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_fetch_var_address_helper_SPEC_TMP(int type, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *varname = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval **retval; - zval tmp_varname; - HashTable *target_symbol_table; - - if (Z_TYPE_P(varname) != IS_STRING && Z_TYPE_P(varname) != IS_UNICODE) { - tmp_varname = *varname; - zval_copy_ctor(&tmp_varname); - convert_to_text(&tmp_varname); - varname = &tmp_varname; - } - - if (opline->op2.u.EA.type == ZEND_FETCH_AUTO_GLOBAL && - CG(auto_globals_cache)[opline->op2.u.var]) { - retval = CG(auto_globals_cache)[opline->op2.u.var]; - } else if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) { - retval = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname), 0 TSRMLS_CC); - } else { - zend_auto_global *auto_global = NULL; - - if (opline->op2.u.EA.type == ZEND_FETCH_AUTO_GLOBAL) { - zend_u_is_auto_global_ex(Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname), 1, &auto_global TSRMLS_CC); - } - target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), type, varname TSRMLS_CC); -/* - if (!target_symbol_table) { - ZEND_VM_NEXT_OPCODE(); - } -*/ - if (zend_u_hash_find(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, (void **) &retval) == FAILURE) { - switch (type) { - case BP_VAR_R: - case BP_VAR_UNSET: - zend_error(E_NOTICE,"Undefined variable: %R", Z_TYPE_P(varname), Z_UNIVAL_P(varname)); - /* break missing intentionally */ - case BP_VAR_IS: - retval = &EG(uninitialized_zval_ptr); - break; - case BP_VAR_RW: - zend_error(E_NOTICE,"Undefined variable: %R", Z_TYPE_P(varname), Z_UNIVAL_P(varname)); - /* break missing intentionally */ - case BP_VAR_W: { - zval *new_zval = &EG(uninitialized_zval); - - new_zval->refcount++; - zend_u_hash_update(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, &new_zval, sizeof(zval *), (void **) &retval); - } - break; - EMPTY_SWITCH_DEFAULT_CASE() - } - } - switch (opline->op2.u.EA.type) { - case ZEND_FETCH_AUTO_GLOBAL: - if (auto_global && (!auto_global->armed || !auto_global->runtime)) { - CG(auto_globals_cache)[opline->op2.u.var] = retval; - } - /* break missing intentionally */ - case ZEND_FETCH_GLOBAL: - if (IS_TMP_VAR != IS_TMP_VAR) { - zval_dtor(free_op1.var); - } - break; - case ZEND_FETCH_LOCAL: - zval_dtor(free_op1.var); - break; - case ZEND_FETCH_STATIC: - zval_update_constant(retval, (void*) 1 TSRMLS_CC); - break; - case ZEND_FETCH_GLOBAL_LOCK: - if (IS_TMP_VAR == IS_VAR && !free_op1.var) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - break; - } - } - - - if (varname == &tmp_varname) { - zval_dtor(varname); - } - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = retval; - PZVAL_LOCK(*retval); - switch (type) { - case BP_VAR_R: - case BP_VAR_IS: - AI_USE_PTR(EX_T(opline->result.u.var).var); - break; - case BP_VAR_UNSET: { - zend_free_op free_res; - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - break; - } - } - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_TMP(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_W_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_TMP(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_TMP(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_FUNC_ARG_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_TMP(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), EX(opline)->extended_value)?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_UNSET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_TMP(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_IS_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_TMP(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_JMPZ_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int ret = i_zend_is_true(_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC)); - - zval_dtor(free_op1.var); - if (!ret) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_JMPNZ_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int ret = i_zend_is_true(_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC)); - - zval_dtor(free_op1.var); - if (ret) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_JMPZNZ_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int retval = i_zend_is_true(_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC)); - - zval_dtor(free_op1.var); - if (retval) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp on true to %d\n", opline->extended_value); -#endif - ZEND_VM_JMP(&EX(op_array)->opcodes[opline->extended_value]); - } else { -#if DEBUG_ZEND>=2 - printf("Conditional jmp on false to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(&EX(op_array)->opcodes[opline->op2.u.opline_num]); - } -} - -static int ZEND_JMPZ_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int retval = i_zend_is_true(_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC)); - - zval_dtor(free_op1.var); - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = retval; - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - if (!retval) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_JMPNZ_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int retval = i_zend_is_true(_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC)); - - zval_dtor(free_op1.var); - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = retval; - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - if (retval) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FREE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zendi_zval_dtor(EX_T(EX(opline)->op1.u.var).tmp_var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *retval_ptr; - zval **retval_ptr_ptr; - zend_free_op free_op1; - - if (EG(active_op_array)->return_reference == ZEND_RETURN_REF) { - - if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) { - /* Not supposed to happen, but we'll allow it */ - zend_error(E_NOTICE, "Only variable references should be returned by reference"); - goto return_by_value; - } - - retval_ptr_ptr = NULL; - - if (!retval_ptr_ptr) { - zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference"); - } - - if (IS_TMP_VAR == IS_VAR && !(*retval_ptr_ptr)->is_ref) { - if (opline->extended_value == ZEND_RETURNS_FUNCTION && - EX_T(opline->op1.u.var).var.fcall_returned_reference) { - } else if (opline->extended_value == ZEND_RETURNS_NEW) { - } else if (EX_T(opline->op1.u.var).var.ptr_ptr == &EX_T(opline->op1.u.var).var.ptr) { - if (IS_TMP_VAR == IS_VAR && !1) { - PZVAL_LOCK(*retval_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */ - } - zend_error(E_NOTICE, "Only variable references should be returned by reference"); - goto return_by_value; - } - } - - SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr_ptr); - (*retval_ptr_ptr)->refcount++; - - (*EG(return_value_ptr_ptr)) = (*retval_ptr_ptr); - } else { -return_by_value: - - retval_ptr = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (!1) { /* Not a temp var */ - if (EG(active_op_array)->return_reference == ZEND_RETURN_REF || - (PZVAL_IS_REF(retval_ptr) && retval_ptr->refcount > 0)) { - zval *ret; - - ALLOC_ZVAL(ret); - INIT_PZVAL_COPY(ret, retval_ptr); - zval_copy_ctor(ret); - *EG(return_value_ptr_ptr) = ret; - } else { - *EG(return_value_ptr_ptr) = retval_ptr; - retval_ptr->refcount++; - } - } else { - zval *ret; - - ALLOC_ZVAL(ret); - INIT_PZVAL_COPY(ret, retval_ptr); - *EG(return_value_ptr_ptr) = ret; - } - } - - ZEND_VM_RETURN_FROM_EXECUTE_LOOP(); -} - -static int ZEND_THROW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *value; - zval *exception; - zend_free_op free_op1; - - value = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (Z_TYPE_P(value) != IS_OBJECT) { - zend_error_noreturn(E_ERROR, "Can only throw objects"); - } - /* Not sure if a complete copy is what we want here */ - ALLOC_ZVAL(exception); - INIT_PZVAL_COPY(exception, value); - if (!1) { - zval_copy_ctor(exception); - } - - zend_throw_exception_object(exception TSRMLS_CC); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SEND_VAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - if (opline->extended_value==ZEND_DO_FCALL_BY_NAME - && ARG_MUST_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) { - zend_error_noreturn(E_ERROR, "Cannot pass parameter %d by reference", opline->op2.u.opline_num); - } - { - zval *valptr; - zval *value; - zend_free_op free_op1; - - value = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - ALLOC_ZVAL(valptr); - INIT_PZVAL_COPY(valptr, value); - if (!1) { - zval_copy_ctor(valptr); - } - zend_ptr_stack_push(&EG(argument_stack), valptr); - - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - /* PHP 3.0 returned "" for false and 1 for true, here we use 0 and 1 for now */ - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = i_zend_is_true(_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC)); - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SWITCH_FREE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_switch_free(EX(opline), EX(Ts) TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CLONE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *obj = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zend_class_entry *ce; - zend_function *clone; - zend_object_clone_obj_t clone_call; - - if (!obj || Z_TYPE_P(obj) != IS_OBJECT) { - zend_error(E_WARNING, "__clone method called on non-object"); - EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); - EX_T(opline->result.u.var).var.ptr->refcount++; - - ZEND_VM_NEXT_OPCODE(); - } - - ce = Z_OBJCE_P(obj); - clone = ce ? ce->clone : NULL; - clone_call = Z_OBJ_HT_P(obj)->clone_obj; - if (!clone_call) { - if (ce) { - zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %v", ce->name); - } else { - zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object"); - } - EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); - EX_T(opline->result.u.var).var.ptr->refcount++; - } - - if (ce && clone) { - if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) { - /* Ensure that if we're calling a private function, we're allowed to do so. - */ - if (ce != EG(scope)) { - zend_error_noreturn(E_ERROR, "Call to private %v::__clone() from context '%v'", ce->name, EG(scope) ? EG(scope)->name : EMPTY_ZSTR); - } - } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) { - /* Ensure that if we're calling a protected function, we're allowed to do so. - */ - if (!zend_check_protected(clone->common.scope, EG(scope))) { - zend_error_noreturn(E_ERROR, "Call to protected %v::__clone() from context '%v'", ce->name, EG(scope) ? EG(scope)->name : EMPTY_ZSTR); - } - } - } - - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - if (!EG(exception)) { - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - Z_OBJVAL_P(EX_T(opline->result.u.var).var.ptr) = clone_call(obj TSRMLS_CC); - Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_OBJECT; - EX_T(opline->result.u.var).var.ptr->refcount=1; - EX_T(opline->result.u.var).var.ptr->is_ref=1; - if (!RETURN_VALUE_USED(opline) || EG(exception)) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *expr = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *result = &EX_T(opline->result.u.var).tmp_var; - - *result = *expr; - if (!1) { - zendi_zval_copy_ctor(*result); - } - switch (opline->extended_value) { - case IS_NULL: - convert_to_null(result); - break; - case IS_BOOL: - convert_to_boolean(result); - break; - case IS_LONG: - convert_to_long(result); - break; - case IS_DOUBLE: - convert_to_double(result); - break; - case IS_STRING: { - zval var_copy; - int use_copy; - - zend_make_string_zval(result, &var_copy, &use_copy); - if (use_copy) { - zval_dtor(result); - *result = var_copy; - } - break; - } - case IS_UNICODE: { - zval var_copy; - int use_copy; - - zend_make_unicode_zval(result, &var_copy, &use_copy); - if (use_copy) { - zval_dtor(result); - *result = var_copy; - } - break; - } - case IS_ARRAY: - convert_to_array(result); - break; - case IS_OBJECT: - convert_to_object(result); - break; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op_array *new_op_array=NULL; - zval **original_return_value = EG(return_value_ptr_ptr); - int return_value_used = RETURN_VALUE_USED(opline); - zend_free_op free_op1; - zval *inc_filename = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval tmp_inc_filename; - zend_bool failure_retval=0; - - if (UG(unicode) && Z_LVAL(opline->op2.u.constant) == ZEND_EVAL) { - if (Z_TYPE_P(inc_filename) != IS_UNICODE) { - tmp_inc_filename = *inc_filename; - zval_copy_ctor(&tmp_inc_filename); - convert_to_unicode(&tmp_inc_filename); - inc_filename = &tmp_inc_filename; - } - } else if (Z_TYPE_P(inc_filename) == IS_UNICODE) { - char *encpath; - int encpath_len; - - if (FAILURE == zend_path_encode(&encpath, &encpath_len, Z_USTRVAL_P(inc_filename), Z_USTRLEN_P(inc_filename) TSRMLS_CC)) { - failure_retval = 0; - zend_error(E_ERROR, "Failure converting '%R' to filesystem encoding", IS_UNICODE, Z_USTRVAL_P(inc_filename)); - goto skip_compile; - } - - ZVAL_STRINGL(&tmp_inc_filename, encpath, encpath_len, 0); - inc_filename = &tmp_inc_filename; - } else if (Z_TYPE_P(inc_filename) != IS_STRING) { - tmp_inc_filename = *inc_filename; - zval_copy_ctor(&tmp_inc_filename); - convert_to_string(&tmp_inc_filename); - inc_filename = &tmp_inc_filename; - } - - switch (Z_LVAL(opline->op2.u.constant)) { - case ZEND_INCLUDE_ONCE: - case ZEND_REQUIRE_ONCE: { - zend_file_handle file_handle; - char cwd[MAXPATHLEN]; - cwd_state state; - - if (IS_ABSOLUTE_PATH(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename))) { - cwd[0] = '\0'; - } else if (!VCWD_GETCWD(cwd, MAXPATHLEN)) { - cwd[0] = '\0'; - } - - state.cwd_length = strlen(cwd); - state.cwd = zend_strndup(cwd, state.cwd_length); - - failure_retval = (!virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) && - zend_hash_exists(&EG(included_files), state.cwd, state.cwd_length+1)); - - free(state.cwd); - - if (failure_retval) { - /* do nothing */ - } else if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) { - if (!file_handle.opened_path) { - file_handle.opened_path = estrndup(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename)); - } - - if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) { - new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC); - zend_destroy_file_handle(&file_handle TSRMLS_CC); - } else { - zend_file_handle_dtor(&file_handle); - failure_retval=1; - } - } else { - if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) { - zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename)); - } else { - zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename)); - } - } - } - break; - case ZEND_INCLUDE: - case ZEND_REQUIRE: - new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC); - break; - case ZEND_EVAL: { - char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC); - - new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC); - efree(eval_desc); - } - break; - EMPTY_SWITCH_DEFAULT_CASE() - } - -skip_compile: - if (inc_filename==&tmp_inc_filename) { - zval_dtor(&tmp_inc_filename); - } - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - if (new_op_array) { - zval *saved_object; - zend_function *saved_function; - - EG(return_value_ptr_ptr) = EX_T(opline->result.u.var).var.ptr_ptr; - EG(active_op_array) = new_op_array; - EX_T(opline->result.u.var).var.ptr = NULL; - - saved_object = EX(object); - saved_function = EX(function_state).function; - - EX(function_state).function = (zend_function *) new_op_array; - EX(object) = NULL; - - zend_execute(new_op_array TSRMLS_CC); - - EX(function_state).function = saved_function; - EX(object) = saved_object; - - if (!return_value_used) { - if (EX_T(opline->result.u.var).var.ptr) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); - } - } else { /* return value is used */ - if (!EX_T(opline->result.u.var).var.ptr) { /* there was no return statement */ - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - INIT_PZVAL(EX_T(opline->result.u.var).var.ptr); - Z_LVAL_P(EX_T(opline->result.u.var).var.ptr) = 1; - Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_BOOL; - } - } - - EG(opline_ptr) = &EX(opline); - EG(active_op_array) = EX(op_array); - EG(function_state_ptr) = &EX(function_state); - destroy_op_array(new_op_array TSRMLS_CC); - efree(new_op_array); - if (EG(exception)) { - zend_throw_exception_internal(NULL TSRMLS_CC); - } - } else { - if (return_value_used) { - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - INIT_ZVAL(*EX_T(opline->result.u.var).var.ptr); - Z_LVAL_P(EX_T(opline->result.u.var).var.ptr) = failure_retval; - Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_BOOL; - } - } - zval_dtor(free_op1.var); - EG(return_value_ptr_ptr) = original_return_value; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_UNSET_VAR_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval tmp, *varname; - HashTable *target_symbol_table; - zend_free_op free_op1; - - varname = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (Z_TYPE_P(varname) != IS_STRING && Z_TYPE_P(varname) != IS_UNICODE) { - tmp = *varname; - zval_copy_ctor(&tmp); - convert_to_text(&tmp); - varname = &tmp; - } else if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { - varname->refcount++; - } - - if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) { - zend_std_unset_static_property(EX_T(opline->op2.u.var).class_entry, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname) TSRMLS_CC); - } else { - target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), BP_VAR_IS, varname TSRMLS_CC); - if (zend_u_hash_del(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1) == SUCCESS) { - zend_execute_data *ex = execute_data; - ulong hash_value = zend_u_inline_hash_func(Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1); - zend_auto_global *auto_global; - - if (zend_u_hash_quick_find(CG(auto_globals), Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, hash_value, (void**)&auto_global) == SUCCESS) { - CG(auto_globals_cache)[auto_global->index] = NULL; - } - do { - int i; - - if (ex->op_array) { - for (i = 0; i < ex->op_array->last_var; i++) { - if (ex->op_array->vars[i].hash_value == hash_value && - ex->op_array->vars[i].name_len == Z_UNILEN_P(varname) && - !memcmp(ex->op_array->vars[i].name.v, Z_UNIVAL_P(varname).v, Z_TYPE_P(varname)==IS_UNICODE?UBYTES(Z_UNILEN_P(varname)):Z_UNILEN_P(varname))) { - ex->CVs[i] = NULL; - break; - } - } - } - ex = ex->prev_execute_data; - } while (ex && ex->symbol_table == target_symbol_table); - } - } - - if (varname == &tmp) { - zval_dtor(&tmp); - } else if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { - zval_ptr_dtor(&varname); - } - zval_dtor(free_op1.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FE_RESET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *array_ptr, **array_ptr_ptr; - HashTable *fe_ht; - zend_object_iterator *iter = NULL; - zend_class_entry *ce = NULL; - zend_bool is_empty = 0; - - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - array_ptr_ptr = NULL; - if (array_ptr_ptr == NULL || array_ptr_ptr == &EG(uninitialized_zval_ptr)) { - ALLOC_INIT_ZVAL(array_ptr); - } else if (Z_TYPE_PP(array_ptr_ptr) == IS_OBJECT) { - if(Z_OBJ_HT_PP(array_ptr_ptr)->get_class_entry == NULL) { - zend_error(E_WARNING, "foreach() can not iterate over objects without PHP class"); - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - } - - ce = Z_OBJCE_PP(array_ptr_ptr); - if (!ce || ce->get_iterator == NULL) { - SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr); - (*array_ptr_ptr)->refcount++; - } - array_ptr = *array_ptr_ptr; - } else { - if (Z_TYPE_PP(array_ptr_ptr) == IS_ARRAY) { - SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr); - } - array_ptr = *array_ptr_ptr; - array_ptr->refcount++; - } - } else { - array_ptr = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - if (1) { /* IS_TMP_VAR */ - zval *tmp; - - ALLOC_ZVAL(tmp); - INIT_PZVAL_COPY(tmp, array_ptr); - array_ptr = tmp; - } else if (Z_TYPE_P(array_ptr) == IS_OBJECT) { - ce = Z_OBJCE_P(array_ptr); - if (!ce || !ce->get_iterator) { - array_ptr->refcount++; - } - } else { - if (IS_TMP_VAR == IS_VAR && - free_op1.var == NULL && - !array_ptr->is_ref && - array_ptr->refcount > 1) { - /* non-separated return value from function */ - zval *tmp; - - ALLOC_ZVAL(tmp); - INIT_PZVAL_COPY(tmp, array_ptr); - zval_copy_ctor(tmp); - array_ptr = tmp; - } else { - array_ptr->refcount++; - } - } - } - - if (IS_TMP_VAR != IS_TMP_VAR && ce && ce->get_iterator) { - iter = ce->get_iterator(ce, array_ptr, opline->extended_value & ZEND_FE_RESET_REFERENCE TSRMLS_CC); - - if (iter && !EG(exception)) { - array_ptr = zend_iterator_wrap(iter TSRMLS_CC); - } else { - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - - } else { - - } - if (!EG(exception)) { - zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Object of type %v did not create an Iterator", ce->name); - } - zend_throw_exception_internal(NULL TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); - } - } - - PZVAL_LOCK(array_ptr); - EX_T(opline->result.u.var).var.ptr = array_ptr; - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - - if (iter) { - iter->index = 0; - if (iter->funcs->rewind) { - iter->funcs->rewind(iter TSRMLS_CC); - if (EG(exception)) { - array_ptr->refcount--; - zval_ptr_dtor(&array_ptr); - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); - } - } - is_empty = iter->funcs->valid(iter TSRMLS_CC) != SUCCESS; - if (EG(exception)) { - array_ptr->refcount--; - zval_ptr_dtor(&array_ptr); - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); - } - iter->index = -1; /* will be set to 0 before using next handler */ - } else if ((fe_ht = HASH_OF(array_ptr)) != NULL) { - zend_hash_internal_pointer_reset(fe_ht); - if (ce) { - zend_object *zobj = zend_objects_get_address(array_ptr TSRMLS_CC); - while (zend_hash_has_more_elements(fe_ht) == SUCCESS) { - zstr str_key; - uint str_key_len; - ulong int_key; - zend_uchar key_type; - - key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL); - if (key_type != HASH_KEY_NON_EXISTANT && - (key_type == HASH_KEY_IS_LONG || - zend_check_property_access(zobj, key_type == HASH_KEY_IS_UNICODE?IS_UNICODE:IS_STRING, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS)) { - break; - } - zend_hash_move_forward(fe_ht); - } - } - is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS; - zend_hash_get_pointer(fe_ht, &EX_T(opline->result.u.var).fe.fe_pos); - } else { - zend_error(E_WARNING, "Invalid argument supplied for foreach()"); - is_empty = 1; - } - - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - - } else { - - } - if (is_empty) { - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - } else { - ZEND_VM_NEXT_OPCODE(); - } -} - -static int ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval tmp, *varname = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval **value; - zend_bool isset = 1; - HashTable *target_symbol_table; - - if (Z_TYPE_P(varname) != IS_STRING && Z_TYPE_P(varname) != IS_UNICODE) { - tmp = *varname; - zval_copy_ctor(&tmp); - convert_to_text(&tmp); - varname = &tmp; - } - - if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) { - value = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname), 1 TSRMLS_CC); - if (!value) { - isset = 0; - } - } else { - target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), BP_VAR_IS, varname TSRMLS_CC); - if (zend_u_hash_find(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, (void **) &value) == FAILURE) { - isset = 0; - } - } - - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - switch (opline->extended_value) { - case ZEND_ISSET: - if (isset && Z_TYPE_PP(value) == IS_NULL) { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0; - } else { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = isset; - } - break; - case ZEND_ISEMPTY: - if (!isset || !i_zend_is_true(*value)) { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 1; - } else { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0; - } - break; - } - - if (varname == &tmp) { - zval_dtor(&tmp); - } - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_EXIT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ -#if 0 || (IS_TMP_VAR != IS_UNUSED) - zend_op *opline = EX(opline); - if (IS_TMP_VAR != IS_UNUSED) { - zend_free_op free_op1; - zval *ptr = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (Z_TYPE_P(ptr) == IS_LONG) { - EG(exit_status) = Z_LVAL_P(ptr); - } else { - zend_print_variable(ptr); - } - zval_dtor(free_op1.var); - } -#endif - zend_bailout(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval restored_error_reporting; - - if (!EG(error_reporting) && Z_LVAL(EX_T(opline->op1.u.var).tmp_var) != 0) { - Z_TYPE(restored_error_reporting) = IS_LONG; - Z_LVAL(restored_error_reporting) = Z_LVAL(EX_T(opline->op1.u.var).tmp_var); - convert_to_string(&restored_error_reporting); - zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), Z_STRVAL(restored_error_reporting), Z_STRLEN(restored_error_reporting), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME); - zendi_zval_dtor(restored_error_reporting); - } - if (EX(old_error_reporting) == &EX_T(opline->op1.u.var).tmp_var) { - EX(old_error_reporting) = NULL; - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *value = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (i_zend_is_true(value)) { - EX_T(opline->result.u.var).tmp_var = *value; - zendi_zval_copy_ctor(EX_T(opline->result.u.var).tmp_var); - zval_dtor(free_op1.var); -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - - zval_dtor(free_op1.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *value = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - EX_T(opline->result.u.var).tmp_var = *value; - if (!1) { - zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INSTANCEOF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *expr = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zend_bool result; - - if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->get_class_entry) { - result = instanceof_function(Z_OBJCE_P(expr), EX_T(opline->op2.u.var).class_entry TSRMLS_CC); - } else { - result = 0; - } - ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var, result); - zval_dtor(free_op1.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_U_NORMALIZE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *string = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *result = &EX_T(opline->result.u.var).tmp_var; - - *result = *string; - if (!1) { - zendi_zval_copy_ctor(*result); - } - - if (UG(unicode)) { - zval var_copy; - int use_copy; - UChar *norm; - int norm_len; - - zend_make_unicode_zval(result, &var_copy, &use_copy); - if (use_copy) { - zval_dtor(result); - *result = var_copy; - } - if (zend_normalize_identifier(&norm, &norm_len, - Z_USTRVAL_P(result), Z_USTRLEN_P(result), 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", Z_USTRVAL_P(result)); - } else if (norm != Z_USTRVAL_P(result)) { - efree(Z_USTRVAL_P(result)); - ZVAL_UNICODEL(result, norm, norm_len, 0); - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - add_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SUB_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - sub_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MUL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - mul_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DIV_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - div_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MOD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - mod_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - shift_left_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - shift_right_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CONCAT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - concat_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_not_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_EQUAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_EQUAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_not_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_smaller_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_OR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - bitwise_or_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_AND_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - bitwise_and_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_XOR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_XOR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - boolean_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_TMP_VAR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *container = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (Z_TYPE_P(container) != IS_ARRAY) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - } - } else { - - zval *dim = &opline->op2.u.constant; - - EX_T(opline->result.u.var).var.ptr_ptr = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, BP_VAR_R TSRMLS_CC); - SELECTIVE_PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &opline->result); - - } - AI_USE_PTR(EX_T(opline->result.u.var).var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_CHAR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - add_char_to_string(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant); - /* FREE_OP is missing intentionally here - we're always working on the same temporary variable */ - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_STRING_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - add_string_to_string(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant); - /* FREE_OP is missing intentionally here - we're always working on the same temporary variable */ - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_METHOD_CALL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zstr function_name_strval; - int function_name_strlen; - zend_free_op free_op1; - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - function_name = &opline->op2.u.constant; - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Method name must be a string"); - } - - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - EX(object) = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) { - if (Z_OBJ_HT_P(EX(object))->get_method == NULL) { - zend_error_noreturn(E_ERROR, "Object does not support method calls"); - } - - /* First, locate the function. */ - EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC); - if (!EX(fbc)) { - zend_error_noreturn(E_ERROR, "Call to undefined method %R::%R()", type, Z_OBJ_CLASS_NAME_P(EX(object)), Z_TYPE_P(function_name), function_name_strval); - } - } else { - zend_error_noreturn(E_ERROR, "Call to a member function %R() on a non-object", Z_TYPE_P(function_name), function_name_strval); - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (!PZVAL_IS_REF(EX(object))) { - EX(object)->refcount++; /* For $this pointer */ - } else { - zval *this_ptr; - ALLOC_ZVAL(this_ptr); - INIT_PZVAL_COPY(this_ptr, EX(object)); - zval_copy_ctor(this_ptr); - EX(object) = this_ptr; - } - } - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CASE_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - int switch_expr_is_overloaded=0; - zend_free_op free_op1; - - if (IS_TMP_VAR==IS_VAR) { - if (EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr); - } else { - switch_expr_is_overloaded = 1; - EX_T(opline->op1.u.var).str_offset.str->refcount++; - } - } - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - if (switch_expr_is_overloaded) { - /* We only free op1 if this is a string offset, - * Since if it is a TMP_VAR, it'll be reused by - * other CASE opcodes (whereas string offsets - * are allocated at each get_zval_ptr()) - */ - zval_dtor(free_op1.var); - EX_T(opline->op1.u.var).var.ptr_ptr = NULL; - AI_USE_PTR(EX_T(opline->op1.u.var).var); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=&opline->op2.u.constant; - -#if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=NULL; - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - } -#else - expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); -#endif - - if (1) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_TMP_VAR == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_TMP_VAR != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_ADD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - add_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SUB_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - sub_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MUL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - mul_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DIV_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - div_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MOD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - mod_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - shift_left_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - shift_right_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CONCAT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - concat_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_not_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_EQUAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_EQUAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_not_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_smaller_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_OR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - bitwise_or_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_AND_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - bitwise_and_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_XOR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_XOR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - boolean_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_VAR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *var = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval var_copy; - int use_copy; - - if (opline->extended_value == IS_UNICODE) { - zend_make_unicode_zval(var, &var_copy, &use_copy); - } else { - zend_make_printable_zval(var, &var_copy, &use_copy); - } - if (use_copy) { - var = &var_copy; - } - add_string_to_string(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), var); - if (use_copy) { - zval_dtor(var); - } - /* original comment, possibly problematic: - * FREE_OP is missing intentionally here - we're always working on the same temporary variable - * (Zeev): I don't think it's problematic, we only use variables - * which aren't affected by FREE_OP(Ts, )'s anyway, unless they're - * string offsets or overloaded objects - */ - zval_dtor(free_op2.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_METHOD_CALL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zstr function_name_strval; - int function_name_strlen; - zend_free_op free_op1, free_op2; - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - function_name = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Method name must be a string"); - } - - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - EX(object) = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) { - if (Z_OBJ_HT_P(EX(object))->get_method == NULL) { - zend_error_noreturn(E_ERROR, "Object does not support method calls"); - } - - /* First, locate the function. */ - EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC); - if (!EX(fbc)) { - zend_error_noreturn(E_ERROR, "Call to undefined method %R::%R()", type, Z_OBJ_CLASS_NAME_P(EX(object)), Z_TYPE_P(function_name), function_name_strval); - } - } else { - zend_error_noreturn(E_ERROR, "Call to a member function %R() on a non-object", Z_TYPE_P(function_name), function_name_strval); - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (!PZVAL_IS_REF(EX(object))) { - EX(object)->refcount++; /* For $this pointer */ - } else { - zval *this_ptr; - ALLOC_ZVAL(this_ptr); - INIT_PZVAL_COPY(this_ptr, EX(object)); - zval_copy_ctor(this_ptr); - EX(object) = this_ptr; - } - } - - zval_dtor(free_op2.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CASE_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - int switch_expr_is_overloaded=0; - zend_free_op free_op1, free_op2; - - if (IS_TMP_VAR==IS_VAR) { - if (EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr); - } else { - switch_expr_is_overloaded = 1; - EX_T(opline->op1.u.var).str_offset.str->refcount++; - } - } - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - if (switch_expr_is_overloaded) { - /* We only free op1 if this is a string offset, - * Since if it is a TMP_VAR, it'll be reused by - * other CASE opcodes (whereas string offsets - * are allocated at each get_zval_ptr()) - */ - zval_dtor(free_op1.var); - EX_T(opline->op1.u.var).var.ptr_ptr = NULL; - AI_USE_PTR(EX_T(opline->op1.u.var).var); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - -#if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=NULL; - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - } -#else - expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); -#endif - - if (1) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - zval_dtor(free_op2.var); - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_TMP_VAR == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_TMP_VAR != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_ADD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - add_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SUB_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - sub_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MUL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - mul_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DIV_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - div_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MOD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - mod_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - shift_left_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - shift_right_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CONCAT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - concat_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_IDENTICAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_not_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_EQUAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_EQUAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_not_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_smaller_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_OR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - bitwise_or_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_AND_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - bitwise_and_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_XOR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_XOR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - boolean_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *var = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval var_copy; - int use_copy; - - if (opline->extended_value == IS_UNICODE) { - zend_make_unicode_zval(var, &var_copy, &use_copy); - } else { - zend_make_printable_zval(var, &var_copy, &use_copy); - } - if (use_copy) { - var = &var_copy; - } - add_string_to_string(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), var); - if (use_copy) { - zval_dtor(var); - } - /* original comment, possibly problematic: - * FREE_OP is missing intentionally here - we're always working on the same temporary variable - * (Zeev): I don't think it's problematic, we only use variables - * which aren't affected by FREE_OP(Ts, )'s anyway, unless they're - * string offsets or overloaded objects - */ - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_METHOD_CALL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zstr function_name_strval; - int function_name_strlen; - zend_free_op free_op1, free_op2; - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - function_name = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Method name must be a string"); - } - - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - EX(object) = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) { - if (Z_OBJ_HT_P(EX(object))->get_method == NULL) { - zend_error_noreturn(E_ERROR, "Object does not support method calls"); - } - - /* First, locate the function. */ - EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC); - if (!EX(fbc)) { - zend_error_noreturn(E_ERROR, "Call to undefined method %R::%R()", type, Z_OBJ_CLASS_NAME_P(EX(object)), Z_TYPE_P(function_name), function_name_strval); - } - } else { - zend_error_noreturn(E_ERROR, "Call to a member function %R() on a non-object", Z_TYPE_P(function_name), function_name_strval); - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (!PZVAL_IS_REF(EX(object))) { - EX(object)->refcount++; /* For $this pointer */ - } else { - zval *this_ptr; - ALLOC_ZVAL(this_ptr); - INIT_PZVAL_COPY(this_ptr, EX(object)); - zval_copy_ctor(this_ptr); - EX(object) = this_ptr; - } - } - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CASE_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - int switch_expr_is_overloaded=0; - zend_free_op free_op1, free_op2; - - if (IS_TMP_VAR==IS_VAR) { - if (EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr); - } else { - switch_expr_is_overloaded = 1; - EX_T(opline->op1.u.var).str_offset.str->refcount++; - } - } - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - if (switch_expr_is_overloaded) { - /* We only free op1 if this is a string offset, - * Since if it is a TMP_VAR, it'll be reused by - * other CASE opcodes (whereas string offsets - * are allocated at each get_zval_ptr()) - */ - zval_dtor(free_op1.var); - EX_T(opline->op1.u.var).var.ptr_ptr = NULL; - AI_USE_PTR(EX_T(opline->op1.u.var).var); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - -#if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=NULL; - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - } -#else - expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); -#endif - - if (1) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_TMP_VAR == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_TMP_VAR != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=NULL; - -#if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=NULL; - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - } -#else - expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); -#endif - - if (1) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_TMP_VAR == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_TMP_VAR != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - add_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SUB_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - sub_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MUL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - mul_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DIV_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - div_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MOD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - mod_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - shift_left_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - shift_right_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CONCAT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - concat_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_IDENTICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_not_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_EQUAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_EQUAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_not_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_smaller_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_OR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - bitwise_or_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_AND_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - bitwise_and_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_XOR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_XOR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - boolean_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - zval_dtor(free_op1.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_VAR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *var = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - zval var_copy; - int use_copy; - - if (opline->extended_value == IS_UNICODE) { - zend_make_unicode_zval(var, &var_copy, &use_copy); - } else { - zend_make_printable_zval(var, &var_copy, &use_copy); - } - if (use_copy) { - var = &var_copy; - } - add_string_to_string(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), var); - if (use_copy) { - zval_dtor(var); - } - /* original comment, possibly problematic: - * FREE_OP is missing intentionally here - we're always working on the same temporary variable - * (Zeev): I don't think it's problematic, we only use variables - * which aren't affected by FREE_OP(Ts, )'s anyway, unless they're - * string offsets or overloaded objects - */ - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_METHOD_CALL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zstr function_name_strval; - int function_name_strlen; - zend_free_op free_op1; - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - function_name = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Method name must be a string"); - } - - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - EX(object) = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) { - if (Z_OBJ_HT_P(EX(object))->get_method == NULL) { - zend_error_noreturn(E_ERROR, "Object does not support method calls"); - } - - /* First, locate the function. */ - EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC); - if (!EX(fbc)) { - zend_error_noreturn(E_ERROR, "Call to undefined method %R::%R()", type, Z_OBJ_CLASS_NAME_P(EX(object)), Z_TYPE_P(function_name), function_name_strval); - } - } else { - zend_error_noreturn(E_ERROR, "Call to a member function %R() on a non-object", Z_TYPE_P(function_name), function_name_strval); - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (!PZVAL_IS_REF(EX(object))) { - EX(object)->refcount++; /* For $this pointer */ - } else { - zval *this_ptr; - ALLOC_ZVAL(this_ptr); - INIT_PZVAL_COPY(this_ptr, EX(object)); - zval_copy_ctor(this_ptr); - EX(object) = this_ptr; - } - } - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CASE_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - int switch_expr_is_overloaded=0; - zend_free_op free_op1; - - if (IS_TMP_VAR==IS_VAR) { - if (EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr); - } else { - switch_expr_is_overloaded = 1; - EX_T(opline->op1.u.var).str_offset.str->refcount++; - } - } - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - if (switch_expr_is_overloaded) { - /* We only free op1 if this is a string offset, - * Since if it is a TMP_VAR, it'll be reused by - * other CASE opcodes (whereas string offsets - * are allocated at each get_zval_ptr()) - */ - zval_dtor(free_op1.var); - EX_T(opline->op1.u.var).var.ptr_ptr = NULL; - AI_USE_PTR(EX_T(opline->op1.u.var).var); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - -#if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=NULL; - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - } -#else - expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); -#endif - - if (1) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_TMP_VAR == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_TMP_VAR != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_BW_NOT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - bitwise_not_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_NOT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - boolean_not_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRE_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **var_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets"); - } - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - val->refcount++; - increment_function(val); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC); - zval_ptr_dtor(&val); - } else { - increment_function(*var_ptr); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRE_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **var_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets"); - } - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - val->refcount++; - decrement_function(val); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC); - zval_ptr_dtor(&val); - } else { - decrement_function(*var_ptr); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **var_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets"); - } - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).tmp_var = *EG(uninitialized_zval_ptr); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } - - EX_T(opline->result.u.var).tmp_var = **var_ptr; - zendi_zval_copy_ctor(EX_T(opline->result.u.var).tmp_var); - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - val->refcount++; - increment_function(val); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC); - zval_ptr_dtor(&val); - } else { - increment_function(*var_ptr); - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **var_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets"); - } - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).tmp_var = *EG(uninitialized_zval_ptr); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } - - EX_T(opline->result.u.var).tmp_var = **var_ptr; - zendi_zval_copy_ctor(EX_T(opline->result.u.var).tmp_var); - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - val->refcount++; - decrement_function(val); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC); - zval_ptr_dtor(&val); - } else { - decrement_function(*var_ptr); - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ECHO_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *z = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval z_copy; - UErrorCode status = U_ZERO_ERROR; - - /* UTODO: review this - * Convert inline HTML blocks to the output encoding, but only if necessary. */ - if (opline->extended_value && - strcmp(ucnv_getName(ZEND_U_CONVERTER(UG(output_encoding_conv)), &status), - EX(op_array)->script_encoding)) { - zval z_conv; - UConverter *script_enc_conv = NULL; - if (zend_set_converter_encoding(&script_enc_conv, EX(op_array)->script_encoding) == FAILURE) { - zend_error(E_ERROR, "Unsupported encoding [%d]", EX(op_array)->script_encoding); - } - zend_convert_encodings(ZEND_U_CONVERTER(UG(output_encoding_conv)), script_enc_conv, &Z_STRVAL(z_conv), &Z_STRLEN(z_conv), Z_STRVAL_P(z), Z_STRLEN_P(z), &status); - Z_TYPE(z_conv) = IS_STRING; - if (U_SUCCESS(status)) { - zend_print_variable(&z_conv); - } else { - zend_error(E_WARNING, "Could not convert inline HTML for output"); - } - zval_dtor(&z_conv); - ucnv_close(script_enc_conv); - } else if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get_method != NULL && - zend_std_cast_object_tostring(z, &z_copy, ZEND_STR_TYPE, ZEND_U_CONVERTER(UG(output_encoding_conv)) TSRMLS_CC) == SUCCESS) { - zend_print_variable(&z_copy); - zval_dtor(&z_copy); - } else { - zend_print_variable(z); - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRINT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 1; - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_LONG; - - return ZEND_ECHO_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_fetch_var_address_helper_SPEC_VAR(int type, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *varname = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval **retval; - zval tmp_varname; - HashTable *target_symbol_table; - - if (Z_TYPE_P(varname) != IS_STRING && Z_TYPE_P(varname) != IS_UNICODE) { - tmp_varname = *varname; - zval_copy_ctor(&tmp_varname); - convert_to_text(&tmp_varname); - varname = &tmp_varname; - } - - if (opline->op2.u.EA.type == ZEND_FETCH_AUTO_GLOBAL && - CG(auto_globals_cache)[opline->op2.u.var]) { - retval = CG(auto_globals_cache)[opline->op2.u.var]; - } else if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) { - retval = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname), 0 TSRMLS_CC); - } else { - zend_auto_global *auto_global = NULL; - - if (opline->op2.u.EA.type == ZEND_FETCH_AUTO_GLOBAL) { - zend_u_is_auto_global_ex(Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname), 1, &auto_global TSRMLS_CC); - } - target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), type, varname TSRMLS_CC); -/* - if (!target_symbol_table) { - ZEND_VM_NEXT_OPCODE(); - } -*/ - if (zend_u_hash_find(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, (void **) &retval) == FAILURE) { - switch (type) { - case BP_VAR_R: - case BP_VAR_UNSET: - zend_error(E_NOTICE,"Undefined variable: %R", Z_TYPE_P(varname), Z_UNIVAL_P(varname)); - /* break missing intentionally */ - case BP_VAR_IS: - retval = &EG(uninitialized_zval_ptr); - break; - case BP_VAR_RW: - zend_error(E_NOTICE,"Undefined variable: %R", Z_TYPE_P(varname), Z_UNIVAL_P(varname)); - /* break missing intentionally */ - case BP_VAR_W: { - zval *new_zval = &EG(uninitialized_zval); - - new_zval->refcount++; - zend_u_hash_update(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, &new_zval, sizeof(zval *), (void **) &retval); - } - break; - EMPTY_SWITCH_DEFAULT_CASE() - } - } - switch (opline->op2.u.EA.type) { - case ZEND_FETCH_AUTO_GLOBAL: - if (auto_global && (!auto_global->armed || !auto_global->runtime)) { - CG(auto_globals_cache)[opline->op2.u.var] = retval; - } - /* break missing intentionally */ - case ZEND_FETCH_GLOBAL: - if (IS_VAR != IS_TMP_VAR) { - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } - break; - case ZEND_FETCH_LOCAL: - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - break; - case ZEND_FETCH_STATIC: - zval_update_constant(retval, (void*) 1 TSRMLS_CC); - break; - case ZEND_FETCH_GLOBAL_LOCK: - if (IS_VAR == IS_VAR && !free_op1.var) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - break; - } - } - - - if (varname == &tmp_varname) { - zval_dtor(varname); - } - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = retval; - PZVAL_LOCK(*retval); - switch (type) { - case BP_VAR_R: - case BP_VAR_IS: - AI_USE_PTR(EX_T(opline->result.u.var).var); - break; - case BP_VAR_UNSET: { - zend_free_op free_res; - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - break; - } - } - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_W_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_VAR(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_VAR(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_FUNC_ARG_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_VAR(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), EX(opline)->extended_value)?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_UNSET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_VAR(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_IS_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_VAR(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_JMPZ_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int ret = i_zend_is_true(_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC)); - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (!ret) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_JMPNZ_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int ret = i_zend_is_true(_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC)); - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (ret) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_JMPZNZ_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int retval = i_zend_is_true(_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC)); - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (retval) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp on true to %d\n", opline->extended_value); -#endif - ZEND_VM_JMP(&EX(op_array)->opcodes[opline->extended_value]); - } else { -#if DEBUG_ZEND>=2 - printf("Conditional jmp on false to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(&EX(op_array)->opcodes[opline->op2.u.opline_num]); - } -} - -static int ZEND_JMPZ_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int retval = i_zend_is_true(_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC)); - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = retval; - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - if (!retval) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_JMPNZ_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int retval = i_zend_is_true(_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC)); - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = retval; - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - if (retval) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *retval_ptr; - zval **retval_ptr_ptr; - zend_free_op free_op1; - - if (EG(active_op_array)->return_reference == ZEND_RETURN_REF) { - - if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) { - /* Not supposed to happen, but we'll allow it */ - zend_error(E_NOTICE, "Only variable references should be returned by reference"); - goto return_by_value; - } - - retval_ptr_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (!retval_ptr_ptr) { - zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference"); - } - - if (IS_VAR == IS_VAR && !(*retval_ptr_ptr)->is_ref) { - if (opline->extended_value == ZEND_RETURNS_FUNCTION && - EX_T(opline->op1.u.var).var.fcall_returned_reference) { - } else if (opline->extended_value == ZEND_RETURNS_NEW) { - } else if (EX_T(opline->op1.u.var).var.ptr_ptr == &EX_T(opline->op1.u.var).var.ptr) { - if (IS_VAR == IS_VAR && !(free_op1.var != NULL)) { - PZVAL_LOCK(*retval_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */ - } - zend_error(E_NOTICE, "Only variable references should be returned by reference"); - goto return_by_value; - } - } - - SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr_ptr); - (*retval_ptr_ptr)->refcount++; - - (*EG(return_value_ptr_ptr)) = (*retval_ptr_ptr); - } else { -return_by_value: - - retval_ptr = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (!0) { /* Not a temp var */ - if (EG(active_op_array)->return_reference == ZEND_RETURN_REF || - (PZVAL_IS_REF(retval_ptr) && retval_ptr->refcount > 0)) { - zval *ret; - - ALLOC_ZVAL(ret); - INIT_PZVAL_COPY(ret, retval_ptr); - zval_copy_ctor(ret); - *EG(return_value_ptr_ptr) = ret; - } else { - *EG(return_value_ptr_ptr) = retval_ptr; - retval_ptr->refcount++; - } - } else { - zval *ret; - - ALLOC_ZVAL(ret); - INIT_PZVAL_COPY(ret, retval_ptr); - *EG(return_value_ptr_ptr) = ret; - } - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_RETURN_FROM_EXECUTE_LOOP(); -} - -static int ZEND_THROW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *value; - zval *exception; - zend_free_op free_op1; - - value = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (Z_TYPE_P(value) != IS_OBJECT) { - zend_error_noreturn(E_ERROR, "Can only throw objects"); - } - /* Not sure if a complete copy is what we want here */ - ALLOC_ZVAL(exception); - INIT_PZVAL_COPY(exception, value); - if (!0) { - zval_copy_ctor(exception); - } - - zend_throw_exception_object(exception TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SEND_VAL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - if (opline->extended_value==ZEND_DO_FCALL_BY_NAME - && ARG_MUST_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) { - zend_error_noreturn(E_ERROR, "Cannot pass parameter %d by reference", opline->op2.u.opline_num); - } - { - zval *valptr; - zval *value; - zend_free_op free_op1; - - value = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - ALLOC_ZVAL(valptr); - INIT_PZVAL_COPY(valptr, value); - if (!0) { - zval_copy_ctor(valptr); - } - zend_ptr_stack_push(&EG(argument_stack), valptr); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *varptr; - zend_free_op free_op1; - varptr = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (varptr == &EG(uninitialized_zval)) { - ALLOC_ZVAL(varptr); - INIT_ZVAL(*varptr); - varptr->refcount = 0; - } else if (PZVAL_IS_REF(varptr)) { - zval *original_var = varptr; - - ALLOC_ZVAL(varptr); - *varptr = *original_var; - varptr->is_ref = 0; - varptr->refcount = 0; - zval_copy_ctor(varptr); - } - varptr->refcount++; - zend_ptr_stack_push(&EG(argument_stack), varptr); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; /* for string offsets */ - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *varptr; - - if (opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) { /* Had function_ptr at compile_time */ - if (!(opline->extended_value & ZEND_ARG_SEND_BY_REF)) { - return zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } - } else if (!ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) { - return zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } - - if (IS_VAR == IS_VAR && - (opline->extended_value & ZEND_ARG_SEND_FUNCTION) && - EX_T(opline->op1.u.var).var.fcall_returned_reference && - EX_T(opline->op1.u.var).var.ptr) { - varptr = EX_T(opline->op1.u.var).var.ptr; - PZVAL_UNLOCK_EX(varptr, &free_op1, 0); - } else { - varptr = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - } - if ((!(opline->extended_value & ZEND_ARG_SEND_FUNCTION) || - EX_T(opline->op1.u.var).var.fcall_returned_reference) && - varptr != &EG(uninitialized_zval) && - (PZVAL_IS_REF(varptr) || - (varptr->refcount == 1 && (IS_VAR == IS_CV || free_op1.var)))) { - varptr->is_ref = 1; - varptr->refcount++; - zend_ptr_stack_push(&EG(argument_stack), varptr); - } else { - zval *valptr; - - zend_error(E_STRICT, "Only variables should be passed by reference"); - ALLOC_ZVAL(valptr); - INIT_PZVAL_COPY(valptr, varptr); - if (!0) { - zval_copy_ctor(valptr); - } - zend_ptr_stack_push(&EG(argument_stack), valptr); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **varptr_ptr; - zval *varptr; - varptr_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (!varptr_ptr) { - zend_error_noreturn(E_ERROR, "Only variables can be passed by reference"); - } - - SEPARATE_ZVAL_TO_MAKE_IS_REF(varptr_ptr); - varptr = *varptr_ptr; - varptr->refcount++; - zend_ptr_stack_push(&EG(argument_stack), varptr); - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - if ((opline->extended_value == ZEND_DO_FCALL_BY_NAME) - && ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) { - return ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } - return zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_BOOL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - /* PHP 3.0 returned "" for false and 1 for true, here we use 0 and 1 for now */ - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = i_zend_is_true(_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC)); - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SWITCH_FREE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_switch_free(EX(opline), EX(Ts) TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CLONE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *obj = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zend_class_entry *ce; - zend_function *clone; - zend_object_clone_obj_t clone_call; - - if (!obj || Z_TYPE_P(obj) != IS_OBJECT) { - zend_error(E_WARNING, "__clone method called on non-object"); - EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); - EX_T(opline->result.u.var).var.ptr->refcount++; - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } - - ce = Z_OBJCE_P(obj); - clone = ce ? ce->clone : NULL; - clone_call = Z_OBJ_HT_P(obj)->clone_obj; - if (!clone_call) { - if (ce) { - zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %v", ce->name); - } else { - zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object"); - } - EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); - EX_T(opline->result.u.var).var.ptr->refcount++; - } - - if (ce && clone) { - if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) { - /* Ensure that if we're calling a private function, we're allowed to do so. - */ - if (ce != EG(scope)) { - zend_error_noreturn(E_ERROR, "Call to private %v::__clone() from context '%v'", ce->name, EG(scope) ? EG(scope)->name : EMPTY_ZSTR); - } - } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) { - /* Ensure that if we're calling a protected function, we're allowed to do so. - */ - if (!zend_check_protected(clone->common.scope, EG(scope))) { - zend_error_noreturn(E_ERROR, "Call to protected %v::__clone() from context '%v'", ce->name, EG(scope) ? EG(scope)->name : EMPTY_ZSTR); - } - } - } - - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - if (!EG(exception)) { - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - Z_OBJVAL_P(EX_T(opline->result.u.var).var.ptr) = clone_call(obj TSRMLS_CC); - Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_OBJECT; - EX_T(opline->result.u.var).var.ptr->refcount=1; - EX_T(opline->result.u.var).var.ptr->is_ref=1; - if (!RETURN_VALUE_USED(opline) || EG(exception)) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); - } - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *expr = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *result = &EX_T(opline->result.u.var).tmp_var; - - *result = *expr; - if (!0) { - zendi_zval_copy_ctor(*result); - } - switch (opline->extended_value) { - case IS_NULL: - convert_to_null(result); - break; - case IS_BOOL: - convert_to_boolean(result); - break; - case IS_LONG: - convert_to_long(result); - break; - case IS_DOUBLE: - convert_to_double(result); - break; - case IS_STRING: { - zval var_copy; - int use_copy; - - zend_make_string_zval(result, &var_copy, &use_copy); - if (use_copy) { - zval_dtor(result); - *result = var_copy; - } - break; - } - case IS_UNICODE: { - zval var_copy; - int use_copy; - - zend_make_unicode_zval(result, &var_copy, &use_copy); - if (use_copy) { - zval_dtor(result); - *result = var_copy; - } - break; - } - case IS_ARRAY: - convert_to_array(result); - break; - case IS_OBJECT: - convert_to_object(result); - break; - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op_array *new_op_array=NULL; - zval **original_return_value = EG(return_value_ptr_ptr); - int return_value_used = RETURN_VALUE_USED(opline); - zend_free_op free_op1; - zval *inc_filename = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval tmp_inc_filename; - zend_bool failure_retval=0; - - if (UG(unicode) && Z_LVAL(opline->op2.u.constant) == ZEND_EVAL) { - if (Z_TYPE_P(inc_filename) != IS_UNICODE) { - tmp_inc_filename = *inc_filename; - zval_copy_ctor(&tmp_inc_filename); - convert_to_unicode(&tmp_inc_filename); - inc_filename = &tmp_inc_filename; - } - } else if (Z_TYPE_P(inc_filename) == IS_UNICODE) { - char *encpath; - int encpath_len; - - if (FAILURE == zend_path_encode(&encpath, &encpath_len, Z_USTRVAL_P(inc_filename), Z_USTRLEN_P(inc_filename) TSRMLS_CC)) { - failure_retval = 0; - zend_error(E_ERROR, "Failure converting '%R' to filesystem encoding", IS_UNICODE, Z_USTRVAL_P(inc_filename)); - goto skip_compile; - } - - ZVAL_STRINGL(&tmp_inc_filename, encpath, encpath_len, 0); - inc_filename = &tmp_inc_filename; - } else if (Z_TYPE_P(inc_filename) != IS_STRING) { - tmp_inc_filename = *inc_filename; - zval_copy_ctor(&tmp_inc_filename); - convert_to_string(&tmp_inc_filename); - inc_filename = &tmp_inc_filename; - } - - switch (Z_LVAL(opline->op2.u.constant)) { - case ZEND_INCLUDE_ONCE: - case ZEND_REQUIRE_ONCE: { - zend_file_handle file_handle; - char cwd[MAXPATHLEN]; - cwd_state state; - - if (IS_ABSOLUTE_PATH(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename))) { - cwd[0] = '\0'; - } else if (!VCWD_GETCWD(cwd, MAXPATHLEN)) { - cwd[0] = '\0'; - } - - state.cwd_length = strlen(cwd); - state.cwd = zend_strndup(cwd, state.cwd_length); - - failure_retval = (!virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) && - zend_hash_exists(&EG(included_files), state.cwd, state.cwd_length+1)); - - free(state.cwd); - - if (failure_retval) { - /* do nothing */ - } else if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) { - if (!file_handle.opened_path) { - file_handle.opened_path = estrndup(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename)); - } - - if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) { - new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC); - zend_destroy_file_handle(&file_handle TSRMLS_CC); - } else { - zend_file_handle_dtor(&file_handle); - failure_retval=1; - } - } else { - if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) { - zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename)); - } else { - zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename)); - } - } - } - break; - case ZEND_INCLUDE: - case ZEND_REQUIRE: - new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC); - break; - case ZEND_EVAL: { - char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC); - - new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC); - efree(eval_desc); - } - break; - EMPTY_SWITCH_DEFAULT_CASE() - } - -skip_compile: - if (inc_filename==&tmp_inc_filename) { - zval_dtor(&tmp_inc_filename); - } - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - if (new_op_array) { - zval *saved_object; - zend_function *saved_function; - - EG(return_value_ptr_ptr) = EX_T(opline->result.u.var).var.ptr_ptr; - EG(active_op_array) = new_op_array; - EX_T(opline->result.u.var).var.ptr = NULL; - - saved_object = EX(object); - saved_function = EX(function_state).function; - - EX(function_state).function = (zend_function *) new_op_array; - EX(object) = NULL; - - zend_execute(new_op_array TSRMLS_CC); - - EX(function_state).function = saved_function; - EX(object) = saved_object; - - if (!return_value_used) { - if (EX_T(opline->result.u.var).var.ptr) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); - } - } else { /* return value is used */ - if (!EX_T(opline->result.u.var).var.ptr) { /* there was no return statement */ - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - INIT_PZVAL(EX_T(opline->result.u.var).var.ptr); - Z_LVAL_P(EX_T(opline->result.u.var).var.ptr) = 1; - Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_BOOL; - } - } - - EG(opline_ptr) = &EX(opline); - EG(active_op_array) = EX(op_array); - EG(function_state_ptr) = &EX(function_state); - destroy_op_array(new_op_array TSRMLS_CC); - efree(new_op_array); - if (EG(exception)) { - zend_throw_exception_internal(NULL TSRMLS_CC); - } - } else { - if (return_value_used) { - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - INIT_ZVAL(*EX_T(opline->result.u.var).var.ptr); - Z_LVAL_P(EX_T(opline->result.u.var).var.ptr) = failure_retval; - Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_BOOL; - } - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - EG(return_value_ptr_ptr) = original_return_value; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_UNSET_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval tmp, *varname; - HashTable *target_symbol_table; - zend_free_op free_op1; - - varname = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (Z_TYPE_P(varname) != IS_STRING && Z_TYPE_P(varname) != IS_UNICODE) { - tmp = *varname; - zval_copy_ctor(&tmp); - convert_to_text(&tmp); - varname = &tmp; - } else if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { - varname->refcount++; - } - - if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) { - zend_std_unset_static_property(EX_T(opline->op2.u.var).class_entry, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname) TSRMLS_CC); - } else { - target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), BP_VAR_IS, varname TSRMLS_CC); - if (zend_u_hash_del(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1) == SUCCESS) { - zend_execute_data *ex = execute_data; - ulong hash_value = zend_u_inline_hash_func(Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1); - zend_auto_global *auto_global; - - if (zend_u_hash_quick_find(CG(auto_globals), Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, hash_value, (void**)&auto_global) == SUCCESS) { - CG(auto_globals_cache)[auto_global->index] = NULL; - } - do { - int i; - - if (ex->op_array) { - for (i = 0; i < ex->op_array->last_var; i++) { - if (ex->op_array->vars[i].hash_value == hash_value && - ex->op_array->vars[i].name_len == Z_UNILEN_P(varname) && - !memcmp(ex->op_array->vars[i].name.v, Z_UNIVAL_P(varname).v, Z_TYPE_P(varname)==IS_UNICODE?UBYTES(Z_UNILEN_P(varname)):Z_UNILEN_P(varname))) { - ex->CVs[i] = NULL; - break; - } - } - } - ex = ex->prev_execute_data; - } while (ex && ex->symbol_table == target_symbol_table); - } - } - - if (varname == &tmp) { - zval_dtor(&tmp); - } else if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { - zval_ptr_dtor(&varname); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FE_RESET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *array_ptr, **array_ptr_ptr; - HashTable *fe_ht; - zend_object_iterator *iter = NULL; - zend_class_entry *ce = NULL; - zend_bool is_empty = 0; - - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - array_ptr_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - if (array_ptr_ptr == NULL || array_ptr_ptr == &EG(uninitialized_zval_ptr)) { - ALLOC_INIT_ZVAL(array_ptr); - } else if (Z_TYPE_PP(array_ptr_ptr) == IS_OBJECT) { - if(Z_OBJ_HT_PP(array_ptr_ptr)->get_class_entry == NULL) { - zend_error(E_WARNING, "foreach() can not iterate over objects without PHP class"); - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - } - - ce = Z_OBJCE_PP(array_ptr_ptr); - if (!ce || ce->get_iterator == NULL) { - SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr); - (*array_ptr_ptr)->refcount++; - } - array_ptr = *array_ptr_ptr; - } else { - if (Z_TYPE_PP(array_ptr_ptr) == IS_ARRAY) { - SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr); - } - array_ptr = *array_ptr_ptr; - array_ptr->refcount++; - } - } else { - array_ptr = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - if (0) { /* IS_TMP_VAR */ - zval *tmp; - - ALLOC_ZVAL(tmp); - INIT_PZVAL_COPY(tmp, array_ptr); - array_ptr = tmp; - } else if (Z_TYPE_P(array_ptr) == IS_OBJECT) { - ce = Z_OBJCE_P(array_ptr); - if (!ce || !ce->get_iterator) { - array_ptr->refcount++; - } - } else { - if (IS_VAR == IS_VAR && - free_op1.var == NULL && - !array_ptr->is_ref && - array_ptr->refcount > 1) { - /* non-separated return value from function */ - zval *tmp; - - ALLOC_ZVAL(tmp); - INIT_PZVAL_COPY(tmp, array_ptr); - zval_copy_ctor(tmp); - array_ptr = tmp; - } else { - array_ptr->refcount++; - } - } - } - - if (IS_VAR != IS_TMP_VAR && ce && ce->get_iterator) { - iter = ce->get_iterator(ce, array_ptr, opline->extended_value & ZEND_FE_RESET_REFERENCE TSRMLS_CC); - - if (iter && !EG(exception)) { - array_ptr = zend_iterator_wrap(iter TSRMLS_CC); - } else { - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } else { - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } - if (!EG(exception)) { - zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Object of type %v did not create an Iterator", ce->name); - } - zend_throw_exception_internal(NULL TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); - } - } - - PZVAL_LOCK(array_ptr); - EX_T(opline->result.u.var).var.ptr = array_ptr; - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - - if (iter) { - iter->index = 0; - if (iter->funcs->rewind) { - iter->funcs->rewind(iter TSRMLS_CC); - if (EG(exception)) { - array_ptr->refcount--; - zval_ptr_dtor(&array_ptr); - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } else { - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } - ZEND_VM_NEXT_OPCODE(); - } - } - is_empty = iter->funcs->valid(iter TSRMLS_CC) != SUCCESS; - if (EG(exception)) { - array_ptr->refcount--; - zval_ptr_dtor(&array_ptr); - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } else { - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } - ZEND_VM_NEXT_OPCODE(); - } - iter->index = -1; /* will be set to 0 before using next handler */ - } else if ((fe_ht = HASH_OF(array_ptr)) != NULL) { - zend_hash_internal_pointer_reset(fe_ht); - if (ce) { - zend_object *zobj = zend_objects_get_address(array_ptr TSRMLS_CC); - while (zend_hash_has_more_elements(fe_ht) == SUCCESS) { - zstr str_key; - uint str_key_len; - ulong int_key; - zend_uchar key_type; - - key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL); - if (key_type != HASH_KEY_NON_EXISTANT && - (key_type == HASH_KEY_IS_LONG || - zend_check_property_access(zobj, key_type == HASH_KEY_IS_UNICODE?IS_UNICODE:IS_STRING, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS)) { - break; - } - zend_hash_move_forward(fe_ht); - } - } - is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS; - zend_hash_get_pointer(fe_ht, &EX_T(opline->result.u.var).fe.fe_pos); - } else { - zend_error(E_WARNING, "Invalid argument supplied for foreach()"); - is_empty = 1; - } - - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } else { - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } - if (is_empty) { - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - } else { - ZEND_VM_NEXT_OPCODE(); - } -} - -static int ZEND_FE_FETCH_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *array = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval **value; - zstr str_key; - uint str_key_len; - ulong int_key; - HashTable *fe_ht; - zend_object_iterator *iter = NULL; - int key_type = 0; - zend_bool use_key = (zend_bool)(opline->extended_value & ZEND_FE_FETCH_WITH_KEY); - - PZVAL_LOCK(array); - - switch (zend_iterator_unwrap(array, &iter TSRMLS_CC)) { - default: - case ZEND_ITER_INVALID: - zend_error(E_WARNING, "Invalid argument supplied for foreach()"); - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - - case ZEND_ITER_PLAIN_OBJECT: { - zstr class_name, prop_name; - zend_object *zobj = zend_objects_get_address(array TSRMLS_CC); - - fe_ht = HASH_OF(array); - zend_hash_set_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos); - do { - if (zend_hash_get_current_data(fe_ht, (void **) &value)==FAILURE) { - /* reached end of iteration */ - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - } - key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL); - - zend_hash_move_forward(fe_ht); - } while (key_type == HASH_KEY_NON_EXISTANT || - (key_type != HASH_KEY_IS_LONG && - zend_check_property_access(zobj, key_type == HASH_KEY_IS_UNICODE?IS_UNICODE:IS_STRING, str_key, str_key_len-1 TSRMLS_CC) != SUCCESS)); - zend_hash_get_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos); - if (use_key && key_type != HASH_KEY_IS_LONG) { - zend_u_unmangle_property_name(key_type == HASH_KEY_IS_UNICODE?IS_UNICODE:IS_STRING, str_key, str_key_len-1, &class_name, &prop_name); - if (key_type == HASH_KEY_IS_UNICODE) { - str_key_len = u_strlen(prop_name.u); - str_key.u = eustrndup(prop_name.u, str_key_len); - } else { - str_key_len = strlen(prop_name.s); - str_key.s = estrndup(prop_name.s, str_key_len); - } - str_key_len++; - } - break; - } - - case ZEND_ITER_PLAIN_ARRAY: - fe_ht = HASH_OF(array); - zend_hash_set_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos); - if (zend_hash_get_current_data(fe_ht, (void **) &value)==FAILURE) { - /* reached end of iteration */ - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - } - if (use_key) { - key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 1, NULL); - } - zend_hash_move_forward(fe_ht); - zend_hash_get_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos); - break; - - case ZEND_ITER_OBJECT: - /* !iter happens from exception */ - if (iter && ++iter->index > 0) { - /* This could cause an endless loop if index becomes zero again. - * In case that ever happens we need an additional flag. */ - iter->funcs->move_forward(iter TSRMLS_CC); - if (EG(exception)) { - array->refcount--; - zval_ptr_dtor(&array); - ZEND_VM_NEXT_OPCODE(); - } - } - /* If index is zero we come from FE_RESET and checked valid() already. */ - if (!iter || (iter->index > 0 && iter->funcs->valid(iter TSRMLS_CC) == FAILURE)) { - /* reached end of iteration */ - if (EG(exception)) { - array->refcount--; - zval_ptr_dtor(&array); - ZEND_VM_NEXT_OPCODE(); - } - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - } - iter->funcs->get_current_data(iter, &value TSRMLS_CC); - if (EG(exception)) { - array->refcount--; - zval_ptr_dtor(&array); - ZEND_VM_NEXT_OPCODE(); - } - if (!value) { - /* failure in get_current_data */ - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - } - if (use_key) { - if (iter->funcs->get_current_key) { - key_type = iter->funcs->get_current_key(iter, &str_key, &str_key_len, &int_key TSRMLS_CC); - if (EG(exception)) { - array->refcount--; - zval_ptr_dtor(&array); - ZEND_VM_NEXT_OPCODE(); - } - } else { - key_type = HASH_KEY_IS_LONG; - int_key = iter->index; - } - } - break; - } - - if (opline->extended_value & ZEND_FE_FETCH_BYREF) { - SEPARATE_ZVAL_IF_NOT_REF(value); - (*value)->is_ref = 1; - EX_T(opline->result.u.var).var.ptr_ptr = value; - (*value)->refcount++; - } else { - EX_T(opline->result.u.var).var.ptr_ptr = value; - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (use_key) { - zend_op *op_data = opline+1; - zval *key = &EX_T(op_data->result.u.var).tmp_var; - - switch (key_type) { - case HASH_KEY_IS_STRING: - Z_STRVAL_P(key) = str_key.s; - Z_STRLEN_P(key) = str_key_len-1; - Z_TYPE_P(key) = IS_STRING; - break; - case HASH_KEY_IS_UNICODE: - Z_USTRVAL_P(key) = str_key.u; - Z_USTRLEN_P(key) = str_key_len-1; - Z_TYPE_P(key) = IS_UNICODE; - break; - case HASH_KEY_IS_LONG: - Z_LVAL_P(key) = int_key; - Z_TYPE_P(key) = IS_LONG; - break; - default: - case HASH_KEY_NON_EXISTANT: - ZVAL_NULL(key); - break; - } - } - - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval tmp, *varname = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval **value; - zend_bool isset = 1; - HashTable *target_symbol_table; - - if (Z_TYPE_P(varname) != IS_STRING && Z_TYPE_P(varname) != IS_UNICODE) { - tmp = *varname; - zval_copy_ctor(&tmp); - convert_to_text(&tmp); - varname = &tmp; - } - - if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) { - value = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname), 1 TSRMLS_CC); - if (!value) { - isset = 0; - } - } else { - target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), BP_VAR_IS, varname TSRMLS_CC); - if (zend_u_hash_find(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, (void **) &value) == FAILURE) { - isset = 0; - } - } - - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - switch (opline->extended_value) { - case ZEND_ISSET: - if (isset && Z_TYPE_PP(value) == IS_NULL) { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0; - } else { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = isset; - } - break; - case ZEND_ISEMPTY: - if (!isset || !i_zend_is_true(*value)) { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 1; - } else { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0; - } - break; - } - - if (varname == &tmp) { - zval_dtor(&tmp); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_EXIT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ -#if 0 || (IS_VAR != IS_UNUSED) - zend_op *opline = EX(opline); - if (IS_VAR != IS_UNUSED) { - zend_free_op free_op1; - zval *ptr = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (Z_TYPE_P(ptr) == IS_LONG) { - EG(exit_status) = Z_LVAL_P(ptr); - } else { - zend_print_variable(ptr); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } -#endif - zend_bailout(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *value = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (i_zend_is_true(value)) { - EX_T(opline->result.u.var).tmp_var = *value; - zendi_zval_copy_ctor(EX_T(opline->result.u.var).tmp_var); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *value = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - EX_T(opline->result.u.var).tmp_var = *value; - if (!0) { - zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INSTANCEOF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *expr = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zend_bool result; - - if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->get_class_entry) { - result = instanceof_function(Z_OBJCE_P(expr), EX_T(opline->op2.u.var).class_entry TSRMLS_CC); - } else { - result = 0; - } - ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var, result); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_U_NORMALIZE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *string = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *result = &EX_T(opline->result.u.var).tmp_var; - - *result = *string; - if (!0) { - zendi_zval_copy_ctor(*result); - } - - if (UG(unicode)) { - zval var_copy; - int use_copy; - UChar *norm; - int norm_len; - - zend_make_unicode_zval(result, &var_copy, &use_copy); - if (use_copy) { - zval_dtor(result); - *result = var_copy; - } - if (zend_normalize_identifier(&norm, &norm_len, - Z_USTRVAL_P(result), Z_USTRLEN_P(result), 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", Z_USTRVAL_P(result)); - } else if (norm != Z_USTRVAL_P(result)) { - efree(Z_USTRVAL_P(result)); - ZVAL_UNICODEL(result, norm, norm_len, 0); - } - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - add_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SUB_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - sub_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MUL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - mul_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DIV_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - div_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MOD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - mod_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - shift_left_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - shift_right_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CONCAT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - concat_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_not_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_EQUAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_EQUAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_not_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_smaller_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_OR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - bitwise_or_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_AND_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - bitwise_and_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - boolean_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op1, free_op_data1; - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *object; - zval *property = &opline->op2.u.constant; - zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - znode *result = &opline->result; - zval **retval = &EX_T(result->u.var).var.ptr; - int have_get_ptr = 0; - - EX_T(result->u.var).var.ptr_ptr = NULL; - make_real_object(object_ptr TSRMLS_CC); - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - - FREE_OP(free_op_data1); - - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } else { - /* here we are sure we are dealing with an object */ - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - /* here property is a string */ - if (opline->extended_value == ZEND_ASSIGN_OBJ - && Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - binary_op(*zptr, *zptr, value TSRMLS_CC); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - zval *z = NULL; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - if (Z_OBJ_HT_P(object)->read_property) { - z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - } - break; - case ZEND_ASSIGN_DIM: - if (Z_OBJ_HT_P(object)->read_dimension) { - z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC); - } - break; - } - if (z) { - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - binary_op(z, z, value TSRMLS_CC); - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - break; - case ZEND_ASSIGN_DIM: - Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC); - break; - } - if (!RETURN_VALUE_UNUSED(result)) { - *retval = z; - PZVAL_LOCK(*retval); - } - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - FREE_OP(free_op_data1); - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_helper_SPEC_VAR_CONST(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op_data2, free_op_data1; - zval **var_ptr; - zval *value; - zend_bool increment_opline = 0; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - return zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - break; - case ZEND_ASSIGN_DIM: { - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (object_ptr && IS_VAR != IS_CV && !(free_op1.var != NULL)) { - (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - return zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } else { - zend_op *op_data = opline+1; - zval *dim = &opline->op2.u.constant; - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW); - increment_opline = 1; - } - } - break; - default: - value = &opline->op2.u.constant; - var_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - /* do nothing */ - break; - } - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets"); - } - - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - } - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - objval->refcount++; - binary_op(objval, objval, value TSRMLS_CC); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC); - zval_ptr_dtor(&objval); - } else { - binary_op(*var_ptr, *var_ptr, value TSRMLS_CC); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - FREE_OP(free_op_data1); - FREE_OP_VAR_PTR(free_op_data2); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CONST(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SUB_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CONST(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MUL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CONST(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_DIV_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CONST(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MOD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CONST(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CONST(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_pre_incdec_property_helper_SPEC_VAR_CONST(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *object; - zval *property = &opline->op2.u.constant; - zval **retval = &EX_T(opline->result.u.var).var.ptr; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - incdec_op(*zptr); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - incdec_op(z); - *retval = z; - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_VAR_CONST(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_VAR_CONST(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_post_incdec_property_helper_SPEC_VAR_CONST(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *object; - zval *property = &opline->op2.u.constant; - zval *retval = &EX_T(opline->result.u.var).tmp_var; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - - *retval = *EG(uninitialized_zval_ptr); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - have_get_ptr = 1; - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - *retval = **zptr; - zendi_zval_copy_ctor(*retval); - - incdec_op(*zptr); - - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - zval *z_copy; - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - *retval = *z; - zendi_zval_copy_ctor(*retval); - ALLOC_ZVAL(z_copy); - *z_copy = *z; - zendi_zval_copy_ctor(*z_copy); - INIT_PZVAL(z_copy); - incdec_op(z_copy); - z->refcount++; - Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC); - zval_ptr_dtor(&z_copy); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - *retval = *EG(uninitialized_zval_ptr); - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_VAR_CONST(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_VAR_CONST(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_DIM_R_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *dim = &opline->op2.u.constant; - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && - IS_VAR != IS_CV && - EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC); - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *dim = &opline->op2.u.constant; - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC); - - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *dim = &opline->op2.u.constant; - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); - - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_IS_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *dim = &opline->op2.u.constant; - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_IS TSRMLS_CC); - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R; - zval *dim; - - if (IS_CONST == IS_UNUSED && type == BP_VAR_R) { - zend_error_noreturn(E_ERROR, "Cannot use [] for reading"); - } - dim = &opline->op2.u.constant; - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, type TSRMLS_CC); - - if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *dim = &opline->op2.u.constant; - - /* Not needed in DIM_UNSET - if (opline->extended_value == ZEND_FETCH_ADD_LOCK) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - */ - if (IS_VAR == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC); - - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (EX_T(opline->result.u.var).var.ptr_ptr == NULL) { - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - } else { - zend_free_op free_res; - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_fetch_property_address_read_helper_SPEC_VAR_CONST(int type, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *container; - zval **retval; - zend_free_op free_op1; - - retval = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.ptr_ptr = retval; - - container = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (container == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(error_zval_ptr); - PZVAL_LOCK(*retval); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } - - - if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) { - if (type != BP_VAR_IS) { - zend_error(E_NOTICE, "Trying to get property of non-object"); - } - *retval = EG(uninitialized_zval_ptr); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } else { - - zval *offset = &opline->op2.u.constant; - - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - - /* here we are sure we are dealing with an object */ - *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC); - - if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) { - zval_dtor(*retval); - FREE_ZVAL(*retval); - } else { - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_VAR_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *property = &opline->op2.u.constant; - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_VAR != IS_CV) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr; - } - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *property = &opline->op2.u.constant; - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_IS_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_VAR_CONST(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { - /* Behave like FETCH_OBJ_W */ - zend_free_op free_op1; - zval *property = &opline->op2.u.constant; - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } else { - return zend_fetch_property_address_read_helper_SPEC_VAR_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } -} - -static int ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_res; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *property = &opline->op2.u.constant; - - if (IS_VAR == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op1; - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op1; - zval **object_ptr; - - if (IS_VAR == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) { - /* not an array offset */ - object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - } else { - object_ptr = NULL; - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC); - } else { - zend_free_op free_op_data1; - zval *value; - zval *dim = &opline->op2.u.constant; - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC); - - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC); - FREE_OP_IF_VAR(free_op_data1); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - /* assign_dim has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *value = &opline->op2.u.constant; - - zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (0?IS_TMP_VAR:IS_CONST), EX(Ts) TSRMLS_CC); - /* zend_assign_to_variable() always takes care of op2, never free it! */ - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zstr function_name_strval; - int function_name_strlen; - zend_free_op free_op1; - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - function_name = &opline->op2.u.constant; - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Method name must be a string"); - } - - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - EX(object) = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) { - if (Z_OBJ_HT_P(EX(object))->get_method == NULL) { - zend_error_noreturn(E_ERROR, "Object does not support method calls"); - } - - /* First, locate the function. */ - EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC); - if (!EX(fbc)) { - zend_error_noreturn(E_ERROR, "Call to undefined method %R::%R()", type, Z_OBJ_CLASS_NAME_P(EX(object)), Z_TYPE_P(function_name), function_name_strval); - } - } else { - zend_error_noreturn(E_ERROR, "Call to a member function %R() on a non-object", Z_TYPE_P(function_name), function_name_strval); - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (!PZVAL_IS_REF(EX(object))) { - EX(object)->refcount++; /* For $this pointer */ - } else { - zval *this_ptr; - ALLOC_ZVAL(this_ptr); - INIT_PZVAL_COPY(this_ptr, EX(object)); - zval_copy_ctor(this_ptr); - EX(object) = this_ptr; - } - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CASE_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - int switch_expr_is_overloaded=0; - zend_free_op free_op1; - - if (IS_VAR==IS_VAR) { - if (EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr); - } else { - switch_expr_is_overloaded = 1; - EX_T(opline->op1.u.var).str_offset.str->refcount++; - } - } - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - if (switch_expr_is_overloaded) { - /* We only free op1 if this is a string offset, - * Since if it is a TMP_VAR, it'll be reused by - * other CASE opcodes (whereas string offsets - * are allocated at each get_zval_ptr()) - */ - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - EX_T(opline->op1.u.var).var.ptr_ptr = NULL; - AI_USE_PTR(EX_T(opline->op1.u.var).var); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=&opline->op2.u.constant; - -#if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=_get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - } -#else - expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); -#endif - - if (0) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } else { - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_VAR == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_VAR != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *offset = &opline->op2.u.constant; - long index; - - if (container) { - if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - switch (Z_TYPE_PP(container)) { - case IS_ARRAY: { - HashTable *ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, - offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key.u); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } else if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { - offset->refcount++; - } - - if (zend_u_symtable_del(ht, Z_TYPE_P(offset), offset_key, offset_len+1) == SUCCESS && - ht == &EG(symbol_table)) { - zend_execute_data *ex; - ulong hash_value = zend_u_inline_hash_func(Z_TYPE_P(offset), offset_key, offset_len+1); - - for (ex = execute_data; ex; ex = ex->prev_execute_data) { - if (ex->op_array && ex->symbol_table == ht) { - int i; - - for (i = 0; i < ex->op_array->last_var; i++) { - if (ex->op_array->vars[i].hash_value == hash_value && - ex->op_array->vars[i].name_len == offset_len && - !memcmp(ex->op_array->vars[i].name.v, offset_key.v, Z_TYPE_P(offset)==IS_UNICODE?UBYTES(offset_len):offset_len)) { - ex->CVs[i] = NULL; - break; - } - } - } - } - } - if (free_offset) { - efree(offset_key.v); - } else if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { - zval_ptr_dtor(&offset); - } - break; - } - case IS_NULL: - zend_u_hash_del(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof("")); - break; - default: - zend_error(E_WARNING, "Illegal offset type in unset"); - break; - } - - break; - } - case IS_OBJECT: - if (!Z_OBJ_HT_P(*container)->unset_dimension) { - zend_error_noreturn(E_ERROR, "Cannot use object as array"); - } - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC); - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - break; - case IS_STRING: - case IS_UNICODE: - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - ZEND_VM_CONTINUE(); /* bailed out before */ - default: - - break; - } - } else { - - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *offset = &opline->op2.u.constant; - - if (container) { - if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - if (Z_TYPE_PP(container) == IS_OBJECT) { - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - } else { - - } - } else { - - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CONST(int prop_dim, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval **value = NULL; - int result = 0; - long index; - - if (container) { - - zval *offset = &opline->op2.u.constant; - - if (Z_TYPE_PP(container) == IS_ARRAY) { - HashTable *ht; - int isset = 0; - - ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } - if (zend_u_symtable_find(ht, Z_TYPE_P(offset), offset_key, offset_len+1, (void **) &value) == SUCCESS) { - isset = 1; - } - if (free_offset) { - efree(offset_key.v); - } - break; - } - case IS_NULL: - if (zend_u_hash_find(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), (void **) &value) == SUCCESS) { - isset = 1; - } - break; - default: - zend_error(E_WARNING, "Illegal offset type in isset or empty"); - - break; - } - - switch (opline->extended_value) { - case ZEND_ISSET: - if (isset && Z_TYPE_PP(value) == IS_NULL) { - result = 0; - } else { - result = isset; - } - break; - case ZEND_ISEMPTY: - if (!isset || !i_zend_is_true(*value)) { - result = 0; - } else { - result = 1; - } - break; - } - - } else if (Z_TYPE_PP(container) == IS_OBJECT) { - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - if (prop_dim) { - result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } else { - result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - } else if ((Z_TYPE_PP(container) == IS_STRING || - Z_TYPE_PP(container) == IS_UNICODE) && !prop_dim) { /* string offsets */ - zval tmp; - - if (Z_TYPE_P(offset) != IS_LONG) { - tmp = *offset; - zval_copy_ctor(&tmp); - convert_to_long(&tmp); - offset = &tmp; - } - if (Z_TYPE_P(offset) == IS_LONG) { - switch (opline->extended_value) { - case ZEND_ISSET: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container)) { - result = 1; - } - break; - case ZEND_ISEMPTY: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container) && - ((Z_TYPE_PP(container) == IS_UNICODE)? - (Z_USTRVAL_PP(container)[Z_LVAL_P(offset)] != 0): - (Z_STRVAL_PP(container)[Z_LVAL_P(offset)] != '0'))) { - result = 1; - } - break; - } - } - - } else { - - } - } - - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - switch (opline->extended_value) { - case ZEND_ISSET: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result; - break; - case ZEND_ISEMPTY: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result; - break; - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CONST(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CONST(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ADD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - add_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SUB_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - sub_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MUL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - mul_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DIV_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - div_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MOD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - mod_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - shift_left_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - shift_right_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CONCAT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - concat_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_not_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_EQUAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_EQUAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_not_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_smaller_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_OR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - bitwise_or_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_AND_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - bitwise_and_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_XOR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_XOR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - boolean_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_obj_helper_SPEC_VAR_TMP(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op1, free_op2, free_op_data1; - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *object; - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - znode *result = &opline->result; - zval **retval = &EX_T(result->u.var).var.ptr; - int have_get_ptr = 0; - - EX_T(result->u.var).var.ptr_ptr = NULL; - make_real_object(object_ptr TSRMLS_CC); - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - zval_dtor(free_op2.var); - FREE_OP(free_op_data1); - - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } else { - /* here we are sure we are dealing with an object */ - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - - /* here property is a string */ - if (opline->extended_value == ZEND_ASSIGN_OBJ - && Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - binary_op(*zptr, *zptr, value TSRMLS_CC); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - zval *z = NULL; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - if (Z_OBJ_HT_P(object)->read_property) { - z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - } - break; - case ZEND_ASSIGN_DIM: - if (Z_OBJ_HT_P(object)->read_dimension) { - z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC); - } - break; - } - if (z) { - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - binary_op(z, z, value TSRMLS_CC); - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - break; - case ZEND_ASSIGN_DIM: - Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC); - break; - } - if (!RETURN_VALUE_UNUSED(result)) { - *retval = z; - PZVAL_LOCK(*retval); - } - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - FREE_OP(free_op_data1); - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_helper_SPEC_VAR_TMP(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2, free_op_data2, free_op_data1; - zval **var_ptr; - zval *value; - zend_bool increment_opline = 0; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - return zend_binary_assign_op_obj_helper_SPEC_VAR_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - break; - case ZEND_ASSIGN_DIM: { - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (object_ptr && IS_VAR != IS_CV && !(free_op1.var != NULL)) { - (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - return zend_binary_assign_op_obj_helper_SPEC_VAR_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } else { - zend_op *op_data = opline+1; - zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_RW TSRMLS_CC); - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW); - increment_opline = 1; - } - } - break; - default: - value = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - var_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - /* do nothing */ - break; - } - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets"); - } - - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - zval_dtor(free_op2.var); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - } - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - objval->refcount++; - binary_op(objval, objval, value TSRMLS_CC); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC); - zval_ptr_dtor(&objval); - } else { - binary_op(*var_ptr, *var_ptr, value TSRMLS_CC); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - zval_dtor(free_op2.var); - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - FREE_OP(free_op_data1); - FREE_OP_VAR_PTR(free_op_data2); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_ADD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_TMP(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SUB_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_TMP(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MUL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_TMP(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_DIV_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_TMP(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MOD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_TMP(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_TMP(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_TMP(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_CONCAT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_TMP(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_OR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_TMP(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_AND_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_TMP(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_TMP(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_pre_incdec_property_helper_SPEC_VAR_TMP(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *object; - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval **retval = &EX_T(opline->result.u.var).var.ptr; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - zval_dtor(free_op2.var); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - incdec_op(*zptr); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - incdec_op(z); - *retval = z; - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRE_INC_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_VAR_TMP(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_PRE_DEC_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_VAR_TMP(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_post_incdec_property_helper_SPEC_VAR_TMP(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *object; - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval *retval = &EX_T(opline->result.u.var).tmp_var; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - zval_dtor(free_op2.var); - *retval = *EG(uninitialized_zval_ptr); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - have_get_ptr = 1; - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - *retval = **zptr; - zendi_zval_copy_ctor(*retval); - - incdec_op(*zptr); - - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - zval *z_copy; - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - *retval = *z; - zendi_zval_copy_ctor(*retval); - ALLOC_ZVAL(z_copy); - *z_copy = *z; - zendi_zval_copy_ctor(*z_copy); - INIT_PZVAL(z_copy); - incdec_op(z_copy); - z->refcount++; - Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC); - zval_ptr_dtor(&z_copy); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - *retval = *EG(uninitialized_zval_ptr); - } - } - - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_POST_INC_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_VAR_TMP(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_POST_DEC_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_VAR_TMP(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_DIM_R_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && - IS_VAR != IS_CV && - EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_R TSRMLS_CC); - zval_dtor(free_op2.var); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_W_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_W TSRMLS_CC); - zval_dtor(free_op2.var); - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_RW_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_RW TSRMLS_CC); - zval_dtor(free_op2.var); - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_IS_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_IS TSRMLS_CC); - zval_dtor(free_op2.var); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R; - zval *dim; - - if (IS_TMP_VAR == IS_UNUSED && type == BP_VAR_R) { - zend_error_noreturn(E_ERROR, "Cannot use [] for reading"); - } - dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, type TSRMLS_CC); - zval_dtor(free_op2.var); - if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - /* Not needed in DIM_UNSET - if (opline->extended_value == ZEND_FETCH_ADD_LOCK) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - */ - if (IS_VAR == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_UNSET TSRMLS_CC); - zval_dtor(free_op2.var); - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (EX_T(opline->result.u.var).var.ptr_ptr == NULL) { - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - } else { - zend_free_op free_res; - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_fetch_property_address_read_helper_SPEC_VAR_TMP(int type, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *container; - zval **retval; - zend_free_op free_op1; - - retval = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.ptr_ptr = retval; - - container = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (container == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(error_zval_ptr); - PZVAL_LOCK(*retval); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } - - - if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) { - if (type != BP_VAR_IS) { - zend_error(E_NOTICE, "Trying to get property of non-object"); - } - *retval = EG(uninitialized_zval_ptr); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } else { - zend_free_op free_op2; - zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (1) { - MAKE_REAL_ZVAL_PTR(offset); - } - - /* here we are sure we are dealing with an object */ - *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC); - - if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) { - zval_dtor(*retval); - FREE_ZVAL(*retval); - } else { - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (1) { - zval_ptr_dtor(&offset); - } else { - zval_dtor(free_op2.var); - } - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_R_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_VAR_TMP(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_W_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_VAR != IS_CV) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr; - } - - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC); - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_RW_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC); - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_IS_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_VAR_TMP(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { - /* Behave like FETCH_OBJ_W */ - zend_free_op free_op1, free_op2; - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC); - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } else { - return zend_fetch_property_address_read_helper_SPEC_VAR_TMP(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } -} - -static int ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2, free_res; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (IS_VAR == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op1; - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_DIM_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op1; - zval **object_ptr; - - if (IS_VAR == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) { - /* not an array offset */ - object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - } else { - object_ptr = NULL; - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC); - } else { - zend_free_op free_op2, free_op_data1; - zval *value; - zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 1, BP_VAR_W TSRMLS_CC); - zval_dtor(free_op2.var); - - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC); - FREE_OP_IF_VAR(free_op_data1); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - /* assign_dim has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval *value = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (1?IS_TMP_VAR:IS_TMP_VAR), EX(Ts) TSRMLS_CC); - /* zend_assign_to_variable() always takes care of op2, never free it! */ - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_METHOD_CALL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zstr function_name_strval; - int function_name_strlen; - zend_free_op free_op1, free_op2; - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - function_name = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Method name must be a string"); - } - - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - EX(object) = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) { - if (Z_OBJ_HT_P(EX(object))->get_method == NULL) { - zend_error_noreturn(E_ERROR, "Object does not support method calls"); - } - - /* First, locate the function. */ - EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC); - if (!EX(fbc)) { - zend_error_noreturn(E_ERROR, "Call to undefined method %R::%R()", type, Z_OBJ_CLASS_NAME_P(EX(object)), Z_TYPE_P(function_name), function_name_strval); - } - } else { - zend_error_noreturn(E_ERROR, "Call to a member function %R() on a non-object", Z_TYPE_P(function_name), function_name_strval); - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (!PZVAL_IS_REF(EX(object))) { - EX(object)->refcount++; /* For $this pointer */ - } else { - zval *this_ptr; - ALLOC_ZVAL(this_ptr); - INIT_PZVAL_COPY(this_ptr, EX(object)); - zval_copy_ctor(this_ptr); - EX(object) = this_ptr; - } - } - - zval_dtor(free_op2.var); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CASE_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - int switch_expr_is_overloaded=0; - zend_free_op free_op1, free_op2; - - if (IS_VAR==IS_VAR) { - if (EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr); - } else { - switch_expr_is_overloaded = 1; - EX_T(opline->op1.u.var).str_offset.str->refcount++; - } - } - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - if (switch_expr_is_overloaded) { - /* We only free op1 if this is a string offset, - * Since if it is a TMP_VAR, it'll be reused by - * other CASE opcodes (whereas string offsets - * are allocated at each get_zval_ptr()) - */ - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - EX_T(opline->op1.u.var).var.ptr_ptr = NULL; - AI_USE_PTR(EX_T(opline->op1.u.var).var); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - -#if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=_get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - } -#else - expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); -#endif - - if (0) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - zval_dtor(free_op2.var); - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } else { - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_VAR == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_VAR != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_UNSET_DIM_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - long index; - - if (container) { - if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - switch (Z_TYPE_PP(container)) { - case IS_ARRAY: { - HashTable *ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, - offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key.u); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } else if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { - offset->refcount++; - } - - if (zend_u_symtable_del(ht, Z_TYPE_P(offset), offset_key, offset_len+1) == SUCCESS && - ht == &EG(symbol_table)) { - zend_execute_data *ex; - ulong hash_value = zend_u_inline_hash_func(Z_TYPE_P(offset), offset_key, offset_len+1); - - for (ex = execute_data; ex; ex = ex->prev_execute_data) { - if (ex->op_array && ex->symbol_table == ht) { - int i; - - for (i = 0; i < ex->op_array->last_var; i++) { - if (ex->op_array->vars[i].hash_value == hash_value && - ex->op_array->vars[i].name_len == offset_len && - !memcmp(ex->op_array->vars[i].name.v, offset_key.v, Z_TYPE_P(offset)==IS_UNICODE?UBYTES(offset_len):offset_len)) { - ex->CVs[i] = NULL; - break; - } - } - } - } - } - if (free_offset) { - efree(offset_key.v); - } else if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { - zval_ptr_dtor(&offset); - } - break; - } - case IS_NULL: - zend_u_hash_del(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof("")); - break; - default: - zend_error(E_WARNING, "Illegal offset type in unset"); - break; - } - zval_dtor(free_op2.var); - break; - } - case IS_OBJECT: - if (!Z_OBJ_HT_P(*container)->unset_dimension) { - zend_error_noreturn(E_ERROR, "Cannot use object as array"); - } - if (1) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC); - if (1) { - zval_ptr_dtor(&offset); - } else { - zval_dtor(free_op2.var); - } - break; - case IS_STRING: - case IS_UNICODE: - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - ZEND_VM_CONTINUE(); /* bailed out before */ - default: - zval_dtor(free_op2.var); - break; - } - } else { - zval_dtor(free_op2.var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_UNSET_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (container) { - if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - if (Z_TYPE_PP(container) == IS_OBJECT) { - if (1) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); - if (1) { - zval_ptr_dtor(&offset); - } else { - zval_dtor(free_op2.var); - } - } else { - zval_dtor(free_op2.var); - } - } else { - zval_dtor(free_op2.var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_TMP(int prop_dim, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval **value = NULL; - int result = 0; - long index; - - if (container) { - zend_free_op free_op2; - zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (Z_TYPE_PP(container) == IS_ARRAY) { - HashTable *ht; - int isset = 0; - - ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } - if (zend_u_symtable_find(ht, Z_TYPE_P(offset), offset_key, offset_len+1, (void **) &value) == SUCCESS) { - isset = 1; - } - if (free_offset) { - efree(offset_key.v); - } - break; - } - case IS_NULL: - if (zend_u_hash_find(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), (void **) &value) == SUCCESS) { - isset = 1; - } - break; - default: - zend_error(E_WARNING, "Illegal offset type in isset or empty"); - - break; - } - - switch (opline->extended_value) { - case ZEND_ISSET: - if (isset && Z_TYPE_PP(value) == IS_NULL) { - result = 0; - } else { - result = isset; - } - break; - case ZEND_ISEMPTY: - if (!isset || !i_zend_is_true(*value)) { - result = 0; - } else { - result = 1; - } - break; - } - zval_dtor(free_op2.var); - } else if (Z_TYPE_PP(container) == IS_OBJECT) { - if (1) { - MAKE_REAL_ZVAL_PTR(offset); - } - if (prop_dim) { - result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } else { - result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } - if (1) { - zval_ptr_dtor(&offset); - } else { - zval_dtor(free_op2.var); - } - } else if ((Z_TYPE_PP(container) == IS_STRING || - Z_TYPE_PP(container) == IS_UNICODE) && !prop_dim) { /* string offsets */ - zval tmp; - - if (Z_TYPE_P(offset) != IS_LONG) { - tmp = *offset; - zval_copy_ctor(&tmp); - convert_to_long(&tmp); - offset = &tmp; - } - if (Z_TYPE_P(offset) == IS_LONG) { - switch (opline->extended_value) { - case ZEND_ISSET: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container)) { - result = 1; - } - break; - case ZEND_ISEMPTY: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container) && - ((Z_TYPE_PP(container) == IS_UNICODE)? - (Z_USTRVAL_PP(container)[Z_LVAL_P(offset)] != 0): - (Z_STRVAL_PP(container)[Z_LVAL_P(offset)] != '0'))) { - result = 1; - } - break; - } - } - zval_dtor(free_op2.var); - } else { - zval_dtor(free_op2.var); - } - } - - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - switch (opline->extended_value) { - case ZEND_ISSET: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result; - break; - case ZEND_ISEMPTY: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result; - break; - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_TMP(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_TMP(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ADD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - add_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SUB_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - sub_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MUL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - mul_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DIV_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - div_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MOD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - mod_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - shift_left_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - shift_right_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CONCAT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - concat_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_not_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_EQUAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_EQUAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_not_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_smaller_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_OR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - bitwise_or_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_AND_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - bitwise_and_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_XOR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_XOR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - - boolean_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_obj_helper_SPEC_VAR_VAR(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op1, free_op2, free_op_data1; - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *object; - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - znode *result = &opline->result; - zval **retval = &EX_T(result->u.var).var.ptr; - int have_get_ptr = 0; - - EX_T(result->u.var).var.ptr_ptr = NULL; - make_real_object(object_ptr TSRMLS_CC); - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - FREE_OP(free_op_data1); - - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } else { - /* here we are sure we are dealing with an object */ - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - /* here property is a string */ - if (opline->extended_value == ZEND_ASSIGN_OBJ - && Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - binary_op(*zptr, *zptr, value TSRMLS_CC); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - zval *z = NULL; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - if (Z_OBJ_HT_P(object)->read_property) { - z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - } - break; - case ZEND_ASSIGN_DIM: - if (Z_OBJ_HT_P(object)->read_dimension) { - z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC); - } - break; - } - if (z) { - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - binary_op(z, z, value TSRMLS_CC); - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - break; - case ZEND_ASSIGN_DIM: - Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC); - break; - } - if (!RETURN_VALUE_UNUSED(result)) { - *retval = z; - PZVAL_LOCK(*retval); - } - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - FREE_OP(free_op_data1); - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_helper_SPEC_VAR_VAR(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2, free_op_data2, free_op_data1; - zval **var_ptr; - zval *value; - zend_bool increment_opline = 0; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - return zend_binary_assign_op_obj_helper_SPEC_VAR_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - break; - case ZEND_ASSIGN_DIM: { - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (object_ptr && IS_VAR != IS_CV && !(free_op1.var != NULL)) { - (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - return zend_binary_assign_op_obj_helper_SPEC_VAR_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } else { - zend_op *op_data = opline+1; - zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW); - increment_opline = 1; - } - } - break; - default: - value = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - var_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - /* do nothing */ - break; - } - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets"); - } - - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - } - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - objval->refcount++; - binary_op(objval, objval, value TSRMLS_CC); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC); - zval_ptr_dtor(&objval); - } else { - binary_op(*var_ptr, *var_ptr, value TSRMLS_CC); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - FREE_OP(free_op_data1); - FREE_OP_VAR_PTR(free_op_data2); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_ADD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_VAR(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SUB_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_VAR(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MUL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_VAR(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_DIV_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_VAR(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MOD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_VAR(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_VAR(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_VAR(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_CONCAT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_VAR(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_OR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_VAR(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_AND_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_VAR(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_XOR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_VAR(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_pre_incdec_property_helper_SPEC_VAR_VAR(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *object; - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval **retval = &EX_T(opline->result.u.var).var.ptr; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - incdec_op(*zptr); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - incdec_op(z); - *retval = z; - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRE_INC_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_VAR_VAR(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_PRE_DEC_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_VAR_VAR(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_post_incdec_property_helper_SPEC_VAR_VAR(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *object; - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval *retval = &EX_T(opline->result.u.var).tmp_var; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - *retval = *EG(uninitialized_zval_ptr); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - have_get_ptr = 1; - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - *retval = **zptr; - zendi_zval_copy_ctor(*retval); - - incdec_op(*zptr); - - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - zval *z_copy; - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - *retval = *z; - zendi_zval_copy_ctor(*retval); - ALLOC_ZVAL(z_copy); - *z_copy = *z; - zendi_zval_copy_ctor(*z_copy); - INIT_PZVAL(z_copy); - incdec_op(z_copy); - z->refcount++; - Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC); - zval_ptr_dtor(&z_copy); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - *retval = *EG(uninitialized_zval_ptr); - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_POST_INC_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_VAR_VAR(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_POST_DEC_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_VAR_VAR(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_DIM_R_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && - IS_VAR != IS_CV && - EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_W_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_RW_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_IS_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_IS TSRMLS_CC); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R; - zval *dim; - - if (IS_VAR == IS_UNUSED && type == BP_VAR_R) { - zend_error_noreturn(E_ERROR, "Cannot use [] for reading"); - } - dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, type TSRMLS_CC); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_UNSET_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - /* Not needed in DIM_UNSET - if (opline->extended_value == ZEND_FETCH_ADD_LOCK) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - */ - if (IS_VAR == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (EX_T(opline->result.u.var).var.ptr_ptr == NULL) { - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - } else { - zend_free_op free_res; - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_fetch_property_address_read_helper_SPEC_VAR_VAR(int type, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *container; - zval **retval; - zend_free_op free_op1; - - retval = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.ptr_ptr = retval; - - container = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (container == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(error_zval_ptr); - PZVAL_LOCK(*retval); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } - - - if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) { - if (type != BP_VAR_IS) { - zend_error(E_NOTICE, "Trying to get property of non-object"); - } - *retval = EG(uninitialized_zval_ptr); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } else { - zend_free_op free_op2; - zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - - /* here we are sure we are dealing with an object */ - *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC); - - if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) { - zval_dtor(*retval); - FREE_ZVAL(*retval); - } else { - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (0) { - zval_ptr_dtor(&offset); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_R_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_VAR_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_W_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_VAR != IS_CV) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr; - } - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_RW_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_IS_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_VAR_VAR(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { - /* Behave like FETCH_OBJ_W */ - zend_free_op free_op1, free_op2; - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } else { - return zend_fetch_property_address_read_helper_SPEC_VAR_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } -} - -static int ZEND_FETCH_OBJ_UNSET_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2, free_res; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (IS_VAR == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op1; - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_DIM_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op1; - zval **object_ptr; - - if (IS_VAR == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) { - /* not an array offset */ - object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - } else { - object_ptr = NULL; - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC); - } else { - zend_free_op free_op2, free_op_data1; - zval *value; - zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC); - FREE_OP_IF_VAR(free_op_data1); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - /* assign_dim has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval *value = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (0?IS_TMP_VAR:IS_VAR), EX(Ts) TSRMLS_CC); - /* zend_assign_to_variable() always takes care of op2, never free it! */ - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **variable_ptr_ptr; - zval **value_ptr_ptr = _get_zval_ptr_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (IS_VAR == IS_VAR && - value_ptr_ptr && - !(*value_ptr_ptr)->is_ref && - opline->extended_value == ZEND_RETURNS_FUNCTION && - !EX_T(opline->op2.u.var).var.fcall_returned_reference) { - if (free_op2.var == NULL) { - PZVAL_LOCK(*value_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */ - } - zend_error(E_STRICT, "Only variables should be assigned by reference"); - return ZEND_ASSIGN_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } - if (IS_VAR == IS_VAR && EX_T(opline->op1.u.var).var.ptr_ptr == &EX_T(opline->op1.u.var).var.ptr) { - zend_error(E_ERROR, "Cannot assign by reference to overloaded object"); - } - - variable_ptr_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zend_assign_to_variable_reference(variable_ptr_ptr, value_ptr_ptr TSRMLS_CC); - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = variable_ptr_ptr; - PZVAL_LOCK(*variable_ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_METHOD_CALL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zstr function_name_strval; - int function_name_strlen; - zend_free_op free_op1, free_op2; - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - function_name = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Method name must be a string"); - } - - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - EX(object) = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) { - if (Z_OBJ_HT_P(EX(object))->get_method == NULL) { - zend_error_noreturn(E_ERROR, "Object does not support method calls"); - } - - /* First, locate the function. */ - EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC); - if (!EX(fbc)) { - zend_error_noreturn(E_ERROR, "Call to undefined method %R::%R()", type, Z_OBJ_CLASS_NAME_P(EX(object)), Z_TYPE_P(function_name), function_name_strval); - } - } else { - zend_error_noreturn(E_ERROR, "Call to a member function %R() on a non-object", Z_TYPE_P(function_name), function_name_strval); - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (!PZVAL_IS_REF(EX(object))) { - EX(object)->refcount++; /* For $this pointer */ - } else { - zval *this_ptr; - ALLOC_ZVAL(this_ptr); - INIT_PZVAL_COPY(this_ptr, EX(object)); - zval_copy_ctor(this_ptr); - EX(object) = this_ptr; - } - } - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CASE_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - int switch_expr_is_overloaded=0; - zend_free_op free_op1, free_op2; - - if (IS_VAR==IS_VAR) { - if (EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr); - } else { - switch_expr_is_overloaded = 1; - EX_T(opline->op1.u.var).str_offset.str->refcount++; - } - } - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - if (switch_expr_is_overloaded) { - /* We only free op1 if this is a string offset, - * Since if it is a TMP_VAR, it'll be reused by - * other CASE opcodes (whereas string offsets - * are allocated at each get_zval_ptr()) - */ - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - EX_T(opline->op1.u.var).var.ptr_ptr = NULL; - AI_USE_PTR(EX_T(opline->op1.u.var).var); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - -#if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=_get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - } -#else - expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); -#endif - - if (0) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } else { - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_VAR == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_VAR != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_UNSET_DIM_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - long index; - - if (container) { - if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - switch (Z_TYPE_PP(container)) { - case IS_ARRAY: { - HashTable *ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, - offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key.u); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } else if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { - offset->refcount++; - } - - if (zend_u_symtable_del(ht, Z_TYPE_P(offset), offset_key, offset_len+1) == SUCCESS && - ht == &EG(symbol_table)) { - zend_execute_data *ex; - ulong hash_value = zend_u_inline_hash_func(Z_TYPE_P(offset), offset_key, offset_len+1); - - for (ex = execute_data; ex; ex = ex->prev_execute_data) { - if (ex->op_array && ex->symbol_table == ht) { - int i; - - for (i = 0; i < ex->op_array->last_var; i++) { - if (ex->op_array->vars[i].hash_value == hash_value && - ex->op_array->vars[i].name_len == offset_len && - !memcmp(ex->op_array->vars[i].name.v, offset_key.v, Z_TYPE_P(offset)==IS_UNICODE?UBYTES(offset_len):offset_len)) { - ex->CVs[i] = NULL; - break; - } - } - } - } - } - if (free_offset) { - efree(offset_key.v); - } else if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { - zval_ptr_dtor(&offset); - } - break; - } - case IS_NULL: - zend_u_hash_del(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof("")); - break; - default: - zend_error(E_WARNING, "Illegal offset type in unset"); - break; - } - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - break; - } - case IS_OBJECT: - if (!Z_OBJ_HT_P(*container)->unset_dimension) { - zend_error_noreturn(E_ERROR, "Cannot use object as array"); - } - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC); - if (0) { - zval_ptr_dtor(&offset); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - break; - case IS_STRING: - case IS_UNICODE: - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - ZEND_VM_CONTINUE(); /* bailed out before */ - default: - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - break; - } - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_UNSET_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (container) { - if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - if (Z_TYPE_PP(container) == IS_OBJECT) { - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); - if (0) { - zval_ptr_dtor(&offset); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_VAR(int prop_dim, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval **value = NULL; - int result = 0; - long index; - - if (container) { - zend_free_op free_op2; - zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (Z_TYPE_PP(container) == IS_ARRAY) { - HashTable *ht; - int isset = 0; - - ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } - if (zend_u_symtable_find(ht, Z_TYPE_P(offset), offset_key, offset_len+1, (void **) &value) == SUCCESS) { - isset = 1; - } - if (free_offset) { - efree(offset_key.v); - } - break; - } - case IS_NULL: - if (zend_u_hash_find(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), (void **) &value) == SUCCESS) { - isset = 1; - } - break; - default: - zend_error(E_WARNING, "Illegal offset type in isset or empty"); - - break; - } - - switch (opline->extended_value) { - case ZEND_ISSET: - if (isset && Z_TYPE_PP(value) == IS_NULL) { - result = 0; - } else { - result = isset; - } - break; - case ZEND_ISEMPTY: - if (!isset || !i_zend_is_true(*value)) { - result = 0; - } else { - result = 1; - } - break; - } - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } else if (Z_TYPE_PP(container) == IS_OBJECT) { - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - if (prop_dim) { - result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } else { - result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } - if (0) { - zval_ptr_dtor(&offset); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - } else if ((Z_TYPE_PP(container) == IS_STRING || - Z_TYPE_PP(container) == IS_UNICODE) && !prop_dim) { /* string offsets */ - zval tmp; - - if (Z_TYPE_P(offset) != IS_LONG) { - tmp = *offset; - zval_copy_ctor(&tmp); - convert_to_long(&tmp); - offset = &tmp; - } - if (Z_TYPE_P(offset) == IS_LONG) { - switch (opline->extended_value) { - case ZEND_ISSET: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container)) { - result = 1; - } - break; - case ZEND_ISEMPTY: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container) && - ((Z_TYPE_PP(container) == IS_UNICODE)? - (Z_USTRVAL_PP(container)[Z_LVAL_P(offset)] != 0): - (Z_STRVAL_PP(container)[Z_LVAL_P(offset)] != '0'))) { - result = 1; - } - break; - } - } - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - } - - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - switch (opline->extended_value) { - case ZEND_ISSET: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result; - break; - case ZEND_ISEMPTY: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result; - break; - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_VAR(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_VAR(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op1, free_op_data1; - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *object; - zval *property = NULL; - zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - znode *result = &opline->result; - zval **retval = &EX_T(result->u.var).var.ptr; - int have_get_ptr = 0; - - EX_T(result->u.var).var.ptr_ptr = NULL; - make_real_object(object_ptr TSRMLS_CC); - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - - FREE_OP(free_op_data1); - - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } else { - /* here we are sure we are dealing with an object */ - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - /* here property is a string */ - if (opline->extended_value == ZEND_ASSIGN_OBJ - && Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - binary_op(*zptr, *zptr, value TSRMLS_CC); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - zval *z = NULL; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - if (Z_OBJ_HT_P(object)->read_property) { - z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - } - break; - case ZEND_ASSIGN_DIM: - if (Z_OBJ_HT_P(object)->read_dimension) { - z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC); - } - break; - } - if (z) { - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - binary_op(z, z, value TSRMLS_CC); - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - break; - case ZEND_ASSIGN_DIM: - Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC); - break; - } - if (!RETURN_VALUE_UNUSED(result)) { - *retval = z; - PZVAL_LOCK(*retval); - } - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - FREE_OP(free_op_data1); - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_helper_SPEC_VAR_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op_data2, free_op_data1; - zval **var_ptr; - zval *value; - zend_bool increment_opline = 0; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - return zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - break; - case ZEND_ASSIGN_DIM: { - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (object_ptr && IS_VAR != IS_CV && !(free_op1.var != NULL)) { - (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - return zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } else { - zend_op *op_data = opline+1; - zval *dim = NULL; - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW); - increment_opline = 1; - } - } - break; - default: - value = NULL; - var_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - /* do nothing */ - break; - } - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets"); - } - - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - } - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - objval->refcount++; - binary_op(objval, objval, value TSRMLS_CC); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC); - zval_ptr_dtor(&objval); - } else { - binary_op(*var_ptr, *var_ptr, value TSRMLS_CC); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - FREE_OP(free_op_data1); - FREE_OP_VAR_PTR(free_op_data2); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *dim = NULL; - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC); - - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *dim = NULL; - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); - - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R; - zval *dim; - - if (IS_UNUSED == IS_UNUSED && type == BP_VAR_R) { - zend_error_noreturn(E_ERROR, "Cannot use [] for reading"); - } - dim = NULL; - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, type TSRMLS_CC); - - if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op1; - zval **object_ptr; - - if (IS_VAR == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) { - /* not an array offset */ - object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - } else { - object_ptr = NULL; - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC); - } else { - zend_free_op free_op_data1; - zval *value; - zval *dim = NULL; - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC); - - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC); - FREE_OP_IF_VAR(free_op_data1); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - /* assign_dim has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=NULL; - -#if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=_get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - } -#else - expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); -#endif - - if (0) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } else { - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_VAR == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_VAR != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_ADD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - add_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SUB_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - sub_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MUL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - mul_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DIV_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - div_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MOD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - mod_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - shift_left_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - shift_right_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CONCAT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - concat_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_IDENTICAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_not_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_EQUAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_EQUAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_not_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_smaller_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_OR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - bitwise_or_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_AND_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - bitwise_and_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - - boolean_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_obj_helper_SPEC_VAR_CV(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op1, free_op_data1; - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *object; - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - znode *result = &opline->result; - zval **retval = &EX_T(result->u.var).var.ptr; - int have_get_ptr = 0; - - EX_T(result->u.var).var.ptr_ptr = NULL; - make_real_object(object_ptr TSRMLS_CC); - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - - FREE_OP(free_op_data1); - - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } else { - /* here we are sure we are dealing with an object */ - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - /* here property is a string */ - if (opline->extended_value == ZEND_ASSIGN_OBJ - && Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - binary_op(*zptr, *zptr, value TSRMLS_CC); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - zval *z = NULL; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - if (Z_OBJ_HT_P(object)->read_property) { - z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - } - break; - case ZEND_ASSIGN_DIM: - if (Z_OBJ_HT_P(object)->read_dimension) { - z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC); - } - break; - } - if (z) { - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - binary_op(z, z, value TSRMLS_CC); - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - break; - case ZEND_ASSIGN_DIM: - Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC); - break; - } - if (!RETURN_VALUE_UNUSED(result)) { - *retval = z; - PZVAL_LOCK(*retval); - } - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - FREE_OP(free_op_data1); - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_helper_SPEC_VAR_CV(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op_data2, free_op_data1; - zval **var_ptr; - zval *value; - zend_bool increment_opline = 0; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - return zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - break; - case ZEND_ASSIGN_DIM: { - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (object_ptr && IS_VAR != IS_CV && !(free_op1.var != NULL)) { - (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - return zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } else { - zend_op *op_data = opline+1; - zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW); - increment_opline = 1; - } - } - break; - default: - value = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - var_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - /* do nothing */ - break; - } - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets"); - } - - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - } - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - objval->refcount++; - binary_op(objval, objval, value TSRMLS_CC); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC); - zval_ptr_dtor(&objval); - } else { - binary_op(*var_ptr, *var_ptr, value TSRMLS_CC); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - FREE_OP(free_op_data1); - FREE_OP_VAR_PTR(free_op_data2); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CV(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SUB_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CV(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MUL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CV(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_DIV_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CV(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MOD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CV(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CV(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CV(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CV(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_pre_incdec_property_helper_SPEC_VAR_CV(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *object; - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - zval **retval = &EX_T(opline->result.u.var).var.ptr; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - incdec_op(*zptr); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - incdec_op(z); - *retval = z; - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_VAR_CV(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_VAR_CV(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_post_incdec_property_helper_SPEC_VAR_CV(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *object; - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - zval *retval = &EX_T(opline->result.u.var).tmp_var; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - - *retval = *EG(uninitialized_zval_ptr); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - have_get_ptr = 1; - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - *retval = **zptr; - zendi_zval_copy_ctor(*retval); - - incdec_op(*zptr); - - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - zval *z_copy; - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - *retval = *z; - zendi_zval_copy_ctor(*retval); - ALLOC_ZVAL(z_copy); - *z_copy = *z; - zendi_zval_copy_ctor(*z_copy); - INIT_PZVAL(z_copy); - incdec_op(z_copy); - z->refcount++; - Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC); - zval_ptr_dtor(&z_copy); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - *retval = *EG(uninitialized_zval_ptr); - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_VAR_CV(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_POST_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_VAR_CV(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_DIM_R_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && - IS_VAR != IS_CV && - EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC); - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC); - - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); - - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_IS_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_IS TSRMLS_CC); - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R; - zval *dim; - - if (IS_CV == IS_UNUSED && type == BP_VAR_R) { - zend_error_noreturn(E_ERROR, "Cannot use [] for reading"); - } - dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, type TSRMLS_CC); - - if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - /* Not needed in DIM_UNSET - if (opline->extended_value == ZEND_FETCH_ADD_LOCK) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - */ - if (IS_VAR == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC); - - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - if (EX_T(opline->result.u.var).var.ptr_ptr == NULL) { - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - } else { - zend_free_op free_res; - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_fetch_property_address_read_helper_SPEC_VAR_CV(int type, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *container; - zval **retval; - zend_free_op free_op1; - - retval = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.ptr_ptr = retval; - - container = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (container == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(error_zval_ptr); - PZVAL_LOCK(*retval); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } - - - if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) { - if (type != BP_VAR_IS) { - zend_error(E_NOTICE, "Trying to get property of non-object"); - } - *retval = EG(uninitialized_zval_ptr); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } else { - - zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - - /* here we are sure we are dealing with an object */ - *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC); - - if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) { - zval_dtor(*retval); - FREE_ZVAL(*retval); - } else { - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_VAR_CV(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_VAR != IS_CV) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr; - } - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_IS_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_VAR_CV(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { - /* Behave like FETCH_OBJ_W */ - zend_free_op free_op1; - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - ZEND_VM_NEXT_OPCODE(); - } else { - return zend_fetch_property_address_read_helper_SPEC_VAR_CV(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } -} - -static int ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_res; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (IS_VAR == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_VAR == IS_VAR && (free_op1.var != NULL) && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op1; - zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC); - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op1; - zval **object_ptr; - - if (IS_VAR == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) { - /* not an array offset */ - object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - } else { - object_ptr = NULL; - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC); - } else { - zend_free_op free_op_data1; - zval *value; - zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC); - - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC); - FREE_OP_IF_VAR(free_op_data1); - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - /* assign_dim has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *value = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (0?IS_TMP_VAR:IS_CV), EX(Ts) TSRMLS_CC); - /* zend_assign_to_variable() always takes care of op2, never free it! */ - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **variable_ptr_ptr; - zval **value_ptr_ptr = _get_zval_ptr_ptr_cv(&opline->op2, EX(Ts), BP_VAR_W TSRMLS_CC); - - if (IS_CV == IS_VAR && - value_ptr_ptr && - !(*value_ptr_ptr)->is_ref && - opline->extended_value == ZEND_RETURNS_FUNCTION && - !EX_T(opline->op2.u.var).var.fcall_returned_reference) { - if (free_op2.var == NULL) { - PZVAL_LOCK(*value_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */ - } - zend_error(E_STRICT, "Only variables should be assigned by reference"); - return ZEND_ASSIGN_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } - if (IS_VAR == IS_VAR && EX_T(opline->op1.u.var).var.ptr_ptr == &EX_T(opline->op1.u.var).var.ptr) { - zend_error(E_ERROR, "Cannot assign by reference to overloaded object"); - } - - variable_ptr_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zend_assign_to_variable_reference(variable_ptr_ptr, value_ptr_ptr TSRMLS_CC); - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = variable_ptr_ptr; - PZVAL_LOCK(*variable_ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zstr function_name_strval; - int function_name_strlen; - zend_free_op free_op1; - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - function_name = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Method name must be a string"); - } - - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - EX(object) = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - - if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) { - if (Z_OBJ_HT_P(EX(object))->get_method == NULL) { - zend_error_noreturn(E_ERROR, "Object does not support method calls"); - } - - /* First, locate the function. */ - EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC); - if (!EX(fbc)) { - zend_error_noreturn(E_ERROR, "Call to undefined method %R::%R()", type, Z_OBJ_CLASS_NAME_P(EX(object)), Z_TYPE_P(function_name), function_name_strval); - } - } else { - zend_error_noreturn(E_ERROR, "Call to a member function %R() on a non-object", Z_TYPE_P(function_name), function_name_strval); - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (!PZVAL_IS_REF(EX(object))) { - EX(object)->refcount++; /* For $this pointer */ - } else { - zval *this_ptr; - ALLOC_ZVAL(this_ptr); - INIT_PZVAL_COPY(this_ptr, EX(object)); - zval_copy_ctor(this_ptr); - EX(object) = this_ptr; - } - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CASE_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - int switch_expr_is_overloaded=0; - zend_free_op free_op1; - - if (IS_VAR==IS_VAR) { - if (EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr); - } else { - switch_expr_is_overloaded = 1; - EX_T(opline->op1.u.var).str_offset.str->refcount++; - } - } - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - if (switch_expr_is_overloaded) { - /* We only free op1 if this is a string offset, - * Since if it is a TMP_VAR, it'll be reused by - * other CASE opcodes (whereas string offsets - * are allocated at each get_zval_ptr()) - */ - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - EX_T(opline->op1.u.var).var.ptr_ptr = NULL; - AI_USE_PTR(EX_T(opline->op1.u.var).var); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - -#if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=_get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - } -#else - expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); -#endif - - if (0) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } else { - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_VAR == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_VAR != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - long index; - - if (container) { - if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - switch (Z_TYPE_PP(container)) { - case IS_ARRAY: { - HashTable *ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, - offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key.u); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } else if (IS_CV == IS_CV || IS_CV == IS_VAR) { - offset->refcount++; - } - - if (zend_u_symtable_del(ht, Z_TYPE_P(offset), offset_key, offset_len+1) == SUCCESS && - ht == &EG(symbol_table)) { - zend_execute_data *ex; - ulong hash_value = zend_u_inline_hash_func(Z_TYPE_P(offset), offset_key, offset_len+1); - - for (ex = execute_data; ex; ex = ex->prev_execute_data) { - if (ex->op_array && ex->symbol_table == ht) { - int i; - - for (i = 0; i < ex->op_array->last_var; i++) { - if (ex->op_array->vars[i].hash_value == hash_value && - ex->op_array->vars[i].name_len == offset_len && - !memcmp(ex->op_array->vars[i].name.v, offset_key.v, Z_TYPE_P(offset)==IS_UNICODE?UBYTES(offset_len):offset_len)) { - ex->CVs[i] = NULL; - break; - } - } - } - } - } - if (free_offset) { - efree(offset_key.v); - } else if (IS_CV == IS_CV || IS_CV == IS_VAR) { - zval_ptr_dtor(&offset); - } - break; - } - case IS_NULL: - zend_u_hash_del(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof("")); - break; - default: - zend_error(E_WARNING, "Illegal offset type in unset"); - break; - } - - break; - } - case IS_OBJECT: - if (!Z_OBJ_HT_P(*container)->unset_dimension) { - zend_error_noreturn(E_ERROR, "Cannot use object as array"); - } - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC); - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - break; - case IS_STRING: - case IS_UNICODE: - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - ZEND_VM_CONTINUE(); /* bailed out before */ - default: - - break; - } - } else { - - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (container) { - if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - if (Z_TYPE_PP(container) == IS_OBJECT) { - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - } else { - - } - } else { - - } - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CV(int prop_dim, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC); - zval **value = NULL; - int result = 0; - long index; - - if (container) { - - zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_PP(container) == IS_ARRAY) { - HashTable *ht; - int isset = 0; - - ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } - if (zend_u_symtable_find(ht, Z_TYPE_P(offset), offset_key, offset_len+1, (void **) &value) == SUCCESS) { - isset = 1; - } - if (free_offset) { - efree(offset_key.v); - } - break; - } - case IS_NULL: - if (zend_u_hash_find(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), (void **) &value) == SUCCESS) { - isset = 1; - } - break; - default: - zend_error(E_WARNING, "Illegal offset type in isset or empty"); - - break; - } - - switch (opline->extended_value) { - case ZEND_ISSET: - if (isset && Z_TYPE_PP(value) == IS_NULL) { - result = 0; - } else { - result = isset; - } - break; - case ZEND_ISEMPTY: - if (!isset || !i_zend_is_true(*value)) { - result = 0; - } else { - result = 1; - } - break; - } - - } else if (Z_TYPE_PP(container) == IS_OBJECT) { - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - if (prop_dim) { - result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } else { - result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - } else if ((Z_TYPE_PP(container) == IS_STRING || - Z_TYPE_PP(container) == IS_UNICODE) && !prop_dim) { /* string offsets */ - zval tmp; - - if (Z_TYPE_P(offset) != IS_LONG) { - tmp = *offset; - zval_copy_ctor(&tmp); - convert_to_long(&tmp); - offset = &tmp; - } - if (Z_TYPE_P(offset) == IS_LONG) { - switch (opline->extended_value) { - case ZEND_ISSET: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container)) { - result = 1; - } - break; - case ZEND_ISEMPTY: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container) && - ((Z_TYPE_PP(container) == IS_UNICODE)? - (Z_USTRVAL_PP(container)[Z_LVAL_P(offset)] != 0): - (Z_STRVAL_PP(container)[Z_LVAL_P(offset)] != '0'))) { - result = 1; - } - break; - } - } - - } else { - - } - } - - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - switch (opline->extended_value) { - case ZEND_ISSET: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result; - break; - case ZEND_ISEMPTY: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result; - break; - } - - if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CV(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CV(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *obj = _get_obj_zval_ptr_unused(TSRMLS_C); - zend_class_entry *ce; - zend_function *clone; - zend_object_clone_obj_t clone_call; - - if (!obj || Z_TYPE_P(obj) != IS_OBJECT) { - zend_error(E_WARNING, "__clone method called on non-object"); - EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); - EX_T(opline->result.u.var).var.ptr->refcount++; - - ZEND_VM_NEXT_OPCODE(); - } - - ce = Z_OBJCE_P(obj); - clone = ce ? ce->clone : NULL; - clone_call = Z_OBJ_HT_P(obj)->clone_obj; - if (!clone_call) { - if (ce) { - zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %v", ce->name); - } else { - zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object"); - } - EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); - EX_T(opline->result.u.var).var.ptr->refcount++; - } - - if (ce && clone) { - if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) { - /* Ensure that if we're calling a private function, we're allowed to do so. - */ - if (ce != EG(scope)) { - zend_error_noreturn(E_ERROR, "Call to private %v::__clone() from context '%v'", ce->name, EG(scope) ? EG(scope)->name : EMPTY_ZSTR); - } - } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) { - /* Ensure that if we're calling a protected function, we're allowed to do so. - */ - if (!zend_check_protected(clone->common.scope, EG(scope))) { - zend_error_noreturn(E_ERROR, "Call to protected %v::__clone() from context '%v'", ce->name, EG(scope) ? EG(scope)->name : EMPTY_ZSTR); - } - } - } - - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - if (!EG(exception)) { - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - Z_OBJVAL_P(EX_T(opline->result.u.var).var.ptr) = clone_call(obj TSRMLS_CC); - Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_OBJECT; - EX_T(opline->result.u.var).var.ptr->refcount=1; - EX_T(opline->result.u.var).var.ptr->is_ref=1; - if (!RETURN_VALUE_USED(opline) || EG(exception)) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_EXIT_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ -#if 0 || (IS_UNUSED != IS_UNUSED) - zend_op *opline = EX(opline); - if (IS_UNUSED != IS_UNUSED) { - - zval *ptr = NULL; - - if (Z_TYPE_P(ptr) == IS_LONG) { - EG(exit_status) = Z_LVAL_P(ptr); - } else { - zend_print_variable(ptr); - } - - } -#endif - zend_bailout(); - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op_data1; - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *object; - zval *property = &opline->op2.u.constant; - zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - znode *result = &opline->result; - zval **retval = &EX_T(result->u.var).var.ptr; - int have_get_ptr = 0; - - EX_T(result->u.var).var.ptr_ptr = NULL; - make_real_object(object_ptr TSRMLS_CC); - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - - FREE_OP(free_op_data1); - - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } else { - /* here we are sure we are dealing with an object */ - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - /* here property is a string */ - if (opline->extended_value == ZEND_ASSIGN_OBJ - && Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - binary_op(*zptr, *zptr, value TSRMLS_CC); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - zval *z = NULL; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - if (Z_OBJ_HT_P(object)->read_property) { - z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - } - break; - case ZEND_ASSIGN_DIM: - if (Z_OBJ_HT_P(object)->read_dimension) { - z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC); - } - break; - } - if (z) { - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - binary_op(z, z, value TSRMLS_CC); - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - break; - case ZEND_ASSIGN_DIM: - Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC); - break; - } - if (!RETURN_VALUE_UNUSED(result)) { - *retval = z; - PZVAL_LOCK(*retval); - } - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - FREE_OP(free_op_data1); - } - - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_helper_SPEC_UNUSED_CONST(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op_data2, free_op_data1; - zval **var_ptr; - zval *value; - zend_bool increment_opline = 0; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - return zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - break; - case ZEND_ASSIGN_DIM: { - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - - if (object_ptr && IS_UNUSED != IS_CV && !0) { - (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - return zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } else { - zend_op *op_data = opline+1; - zval *dim = &opline->op2.u.constant; - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), NULL, dim, 0, BP_VAR_RW TSRMLS_CC); - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW); - increment_opline = 1; - } - } - break; - default: - value = &opline->op2.u.constant; - var_ptr = NULL; - /* do nothing */ - break; - } - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets"); - } - - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - } - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - objval->refcount++; - binary_op(objval, objval, value TSRMLS_CC); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC); - zval_ptr_dtor(&objval); - } else { - binary_op(*var_ptr, *var_ptr, value TSRMLS_CC); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - FREE_OP(free_op_data1); - FREE_OP_VAR_PTR(free_op_data2); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *object; - zval *property = &opline->op2.u.constant; - zval **retval = &EX_T(opline->result.u.var).var.ptr; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - incdec_op(*zptr); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - incdec_op(z); - *retval = z; - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_post_incdec_property_helper_SPEC_UNUSED_CONST(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *object; - zval *property = &opline->op2.u.constant; - zval *retval = &EX_T(opline->result.u.var).tmp_var; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - - *retval = *EG(uninitialized_zval_ptr); - - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - have_get_ptr = 1; - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - *retval = **zptr; - zendi_zval_copy_ctor(*retval); - - incdec_op(*zptr); - - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - zval *z_copy; - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - *retval = *z; - zendi_zval_copy_ctor(*retval); - ALLOC_ZVAL(z_copy); - *z_copy = *z; - zendi_zval_copy_ctor(*z_copy); - INIT_PZVAL(z_copy); - incdec_op(z_copy); - z->refcount++; - Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC); - zval_ptr_dtor(&z_copy); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - *retval = *EG(uninitialized_zval_ptr); - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_UNUSED_CONST(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_UNUSED_CONST(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_fetch_property_address_read_helper_SPEC_UNUSED_CONST(int type, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *container; - zval **retval; - - - retval = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.ptr_ptr = retval; - - container = _get_obj_zval_ptr_unused(TSRMLS_C); - - if (container == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(error_zval_ptr); - PZVAL_LOCK(*retval); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); - } - - - if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) { - if (type != BP_VAR_IS) { - zend_error(E_NOTICE, "Trying to get property of non-object"); - } - *retval = EG(uninitialized_zval_ptr); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } else { - - zval *offset = &opline->op2.u.constant; - - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - - /* here we are sure we are dealing with an object */ - *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC); - - if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) { - zval_dtor(*retval); - FREE_ZVAL(*retval); - } else { - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_UNUSED_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *property = &opline->op2.u.constant; - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_UNUSED != IS_CV) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr; - } - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_UNUSED == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *property = &opline->op2.u.constant; - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_RW TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_UNUSED == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_UNUSED_CONST(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { - /* Behave like FETCH_OBJ_W */ - zend_free_op free_op1; - zval *property = &opline->op2.u.constant; - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_UNUSED == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); - } else { - return zend_fetch_property_address_read_helper_SPEC_UNUSED_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } -} - -static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_res; - zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *property = &opline->op2.u.constant; - - if (IS_UNUSED == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_UNUSED == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC); - - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zstr function_name_strval; - int function_name_strlen; - - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - function_name = &opline->op2.u.constant; - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Method name must be a string"); - } - - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - EX(object) = _get_obj_zval_ptr_unused(TSRMLS_C); - - if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) { - if (Z_OBJ_HT_P(EX(object))->get_method == NULL) { - zend_error_noreturn(E_ERROR, "Object does not support method calls"); - } - - /* First, locate the function. */ - EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC); - if (!EX(fbc)) { - zend_error_noreturn(E_ERROR, "Call to undefined method %R::%R()", type, Z_OBJ_CLASS_NAME_P(EX(object)), Z_TYPE_P(function_name), function_name_strval); - } - } else { - zend_error_noreturn(E_ERROR, "Call to a member function %R() on a non-object", Z_TYPE_P(function_name), function_name_strval); - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (!PZVAL_IS_REF(EX(object))) { - EX(object)->refcount++; /* For $this pointer */ - } else { - zval *this_ptr; - ALLOC_ZVAL(this_ptr); - INIT_PZVAL_COPY(this_ptr, EX(object)); - zval_copy_ctor(this_ptr); - EX(object) = this_ptr; - } - } - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_class_entry *ce = NULL; - zval **value; - - if (IS_UNUSED == IS_UNUSED) { -/* This seems to be a reminant of namespaces - if (EG(scope)) { - ce = EG(scope); - if (zend_hash_find(&ce->constants_table, Z_STRVAL(opline->op2.u.constant), Z_STRLEN(opline->op2.u.constant)+1, (void **) &value) == SUCCESS) { - zval_update_constant(value, (void *) 1 TSRMLS_CC); - EX_T(opline->result.u.var).tmp_var = **value; - zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var); - ZEND_VM_NEXT_OPCODE(); - } - } -*/ - if (!zend_u_get_constant(Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant), Z_UNILEN(opline->op2.u.constant), &EX_T(opline->result.u.var).tmp_var, NULL TSRMLS_CC)) { - zend_error(E_NOTICE, "Use of undefined constant %R - assumed '%R'", - Z_TYPE(opline->op2.u.constant), - Z_UNIVAL(opline->op2.u.constant), - Z_TYPE(opline->op2.u.constant), - Z_UNIVAL(opline->op2.u.constant)); - EX_T(opline->result.u.var).tmp_var = opline->op2.u.constant; - zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var); - } - ZEND_VM_NEXT_OPCODE(); - } - - ce = EX_T(opline->op1.u.var).class_entry; - - if (zend_u_hash_find(&ce->constants_table, Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant), Z_UNILEN(opline->op2.u.constant)+1, (void **) &value) == SUCCESS) { - zval_update_constant(value, (void *) 1 TSRMLS_CC); - EX_T(opline->result.u.var).tmp_var = **value; - zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var); - } else { - zend_error_noreturn(E_ERROR, "Undefined class constant '%R'", Z_TYPE(opline->op2.u.constant), Z_UNIVAL(opline->op2.u.constant)); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_UNUSED == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_UNUSED != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_UNSET_DIM_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *offset = &opline->op2.u.constant; - long index; - - if (container) { - if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - switch (Z_TYPE_PP(container)) { - case IS_ARRAY: { - HashTable *ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, - offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key.u); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } else if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { - offset->refcount++; - } - - if (zend_u_symtable_del(ht, Z_TYPE_P(offset), offset_key, offset_len+1) == SUCCESS && - ht == &EG(symbol_table)) { - zend_execute_data *ex; - ulong hash_value = zend_u_inline_hash_func(Z_TYPE_P(offset), offset_key, offset_len+1); - - for (ex = execute_data; ex; ex = ex->prev_execute_data) { - if (ex->op_array && ex->symbol_table == ht) { - int i; - - for (i = 0; i < ex->op_array->last_var; i++) { - if (ex->op_array->vars[i].hash_value == hash_value && - ex->op_array->vars[i].name_len == offset_len && - !memcmp(ex->op_array->vars[i].name.v, offset_key.v, Z_TYPE_P(offset)==IS_UNICODE?UBYTES(offset_len):offset_len)) { - ex->CVs[i] = NULL; - break; - } - } - } - } - } - if (free_offset) { - efree(offset_key.v); - } else if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { - zval_ptr_dtor(&offset); - } - break; - } - case IS_NULL: - zend_u_hash_del(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof("")); - break; - default: - zend_error(E_WARNING, "Illegal offset type in unset"); - break; - } - - break; - } - case IS_OBJECT: - if (!Z_OBJ_HT_P(*container)->unset_dimension) { - zend_error_noreturn(E_ERROR, "Cannot use object as array"); - } - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC); - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - break; - case IS_STRING: - case IS_UNICODE: - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - ZEND_VM_CONTINUE(); /* bailed out before */ - default: - - break; - } - } else { - - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *offset = &opline->op2.u.constant; - - if (container) { - if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - if (Z_TYPE_PP(container) == IS_OBJECT) { - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - } else { - - } - } else { - - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CONST(int prop_dim, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval **value = NULL; - int result = 0; - long index; - - if (container) { - - zval *offset = &opline->op2.u.constant; - - if (Z_TYPE_PP(container) == IS_ARRAY) { - HashTable *ht; - int isset = 0; - - ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } - if (zend_u_symtable_find(ht, Z_TYPE_P(offset), offset_key, offset_len+1, (void **) &value) == SUCCESS) { - isset = 1; - } - if (free_offset) { - efree(offset_key.v); - } - break; - } - case IS_NULL: - if (zend_u_hash_find(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), (void **) &value) == SUCCESS) { - isset = 1; - } - break; - default: - zend_error(E_WARNING, "Illegal offset type in isset or empty"); - - break; - } - - switch (opline->extended_value) { - case ZEND_ISSET: - if (isset && Z_TYPE_PP(value) == IS_NULL) { - result = 0; - } else { - result = isset; - } - break; - case ZEND_ISEMPTY: - if (!isset || !i_zend_is_true(*value)) { - result = 0; - } else { - result = 1; - } - break; - } - - } else if (Z_TYPE_PP(container) == IS_OBJECT) { - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - if (prop_dim) { - result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } else { - result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - } else if ((Z_TYPE_PP(container) == IS_STRING || - Z_TYPE_PP(container) == IS_UNICODE) && !prop_dim) { /* string offsets */ - zval tmp; - - if (Z_TYPE_P(offset) != IS_LONG) { - tmp = *offset; - zval_copy_ctor(&tmp); - convert_to_long(&tmp); - offset = &tmp; - } - if (Z_TYPE_P(offset) == IS_LONG) { - switch (opline->extended_value) { - case ZEND_ISSET: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container)) { - result = 1; - } - break; - case ZEND_ISEMPTY: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container) && - ((Z_TYPE_PP(container) == IS_UNICODE)? - (Z_USTRVAL_PP(container)[Z_LVAL_P(offset)] != 0): - (Z_STRVAL_PP(container)[Z_LVAL_P(offset)] != '0'))) { - result = 1; - } - break; - } - } - - } else { - - } - } - - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - switch (opline->extended_value) { - case ZEND_ISSET: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result; - break; - case ZEND_ISEMPTY: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result; - break; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CONST(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CONST(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMP(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op2, free_op_data1; - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *object; - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - znode *result = &opline->result; - zval **retval = &EX_T(result->u.var).var.ptr; - int have_get_ptr = 0; - - EX_T(result->u.var).var.ptr_ptr = NULL; - make_real_object(object_ptr TSRMLS_CC); - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - zval_dtor(free_op2.var); - FREE_OP(free_op_data1); - - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } else { - /* here we are sure we are dealing with an object */ - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - - /* here property is a string */ - if (opline->extended_value == ZEND_ASSIGN_OBJ - && Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - binary_op(*zptr, *zptr, value TSRMLS_CC); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - zval *z = NULL; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - if (Z_OBJ_HT_P(object)->read_property) { - z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - } - break; - case ZEND_ASSIGN_DIM: - if (Z_OBJ_HT_P(object)->read_dimension) { - z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC); - } - break; - } - if (z) { - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - binary_op(z, z, value TSRMLS_CC); - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - break; - case ZEND_ASSIGN_DIM: - Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC); - break; - } - if (!RETURN_VALUE_UNUSED(result)) { - *retval = z; - PZVAL_LOCK(*retval); - } - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - FREE_OP(free_op_data1); - } - - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_helper_SPEC_UNUSED_TMP(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2, free_op_data2, free_op_data1; - zval **var_ptr; - zval *value; - zend_bool increment_opline = 0; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - return zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - break; - case ZEND_ASSIGN_DIM: { - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - - if (object_ptr && IS_UNUSED != IS_CV && !0) { - (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - return zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } else { - zend_op *op_data = opline+1; - zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), NULL, dim, 1, BP_VAR_RW TSRMLS_CC); - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW); - increment_opline = 1; - } - } - break; - default: - value = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - var_ptr = NULL; - /* do nothing */ - break; - } - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets"); - } - - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - zval_dtor(free_op2.var); - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - } - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - objval->refcount++; - binary_op(objval, objval, value TSRMLS_CC); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC); - zval_ptr_dtor(&objval); - } else { - binary_op(*var_ptr, *var_ptr, value TSRMLS_CC); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - zval_dtor(free_op2.var); - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - FREE_OP(free_op_data1); - FREE_OP_VAR_PTR(free_op_data2); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_ADD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SUB_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MUL_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_DIV_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MOD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SL_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SR_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_pre_incdec_property_helper_SPEC_UNUSED_TMP(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *object; - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval **retval = &EX_T(opline->result.u.var).var.ptr; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - zval_dtor(free_op2.var); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - incdec_op(*zptr); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - incdec_op(z); - *retval = z; - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_UNUSED_TMP(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_UNUSED_TMP(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_post_incdec_property_helper_SPEC_UNUSED_TMP(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *object; - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval *retval = &EX_T(opline->result.u.var).tmp_var; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - zval_dtor(free_op2.var); - *retval = *EG(uninitialized_zval_ptr); - - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - have_get_ptr = 1; - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - *retval = **zptr; - zendi_zval_copy_ctor(*retval); - - incdec_op(*zptr); - - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - zval *z_copy; - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - *retval = *z; - zendi_zval_copy_ctor(*retval); - ALLOC_ZVAL(z_copy); - *z_copy = *z; - zendi_zval_copy_ctor(*z_copy); - INIT_PZVAL(z_copy); - incdec_op(z_copy); - z->refcount++; - Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC); - zval_ptr_dtor(&z_copy); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - *retval = *EG(uninitialized_zval_ptr); - } - } - - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_POST_INC_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_UNUSED_TMP(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_UNUSED_TMP(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_fetch_property_address_read_helper_SPEC_UNUSED_TMP(int type, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *container; - zval **retval; - - - retval = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.ptr_ptr = retval; - - container = _get_obj_zval_ptr_unused(TSRMLS_C); - - if (container == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(error_zval_ptr); - PZVAL_LOCK(*retval); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); - } - - - if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) { - if (type != BP_VAR_IS) { - zend_error(E_NOTICE, "Trying to get property of non-object"); - } - *retval = EG(uninitialized_zval_ptr); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } else { - zend_free_op free_op2; - zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (1) { - MAKE_REAL_ZVAL_PTR(offset); - } - - /* here we are sure we are dealing with an object */ - *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC); - - if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) { - zval_dtor(*retval); - FREE_ZVAL(*retval); - } else { - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (1) { - zval_ptr_dtor(&offset); - } else { - zval_dtor(free_op2.var); - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_UNUSED_TMP(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_UNUSED != IS_CV) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr; - } - - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC); - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - if (IS_UNUSED == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_RW TSRMLS_CC); - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - if (IS_UNUSED == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_UNUSED_TMP(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { - /* Behave like FETCH_OBJ_W */ - zend_free_op free_op1, free_op2; - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC); - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - if (IS_UNUSED == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); - } else { - return zend_fetch_property_address_read_helper_SPEC_UNUSED_TMP(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } -} - -static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2, free_res; - zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (IS_UNUSED == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - if (IS_UNUSED == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC); - - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zstr function_name_strval; - int function_name_strlen; - zend_free_op free_op2; - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - function_name = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Method name must be a string"); - } - - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - EX(object) = _get_obj_zval_ptr_unused(TSRMLS_C); - - if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) { - if (Z_OBJ_HT_P(EX(object))->get_method == NULL) { - zend_error_noreturn(E_ERROR, "Object does not support method calls"); - } - - /* First, locate the function. */ - EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC); - if (!EX(fbc)) { - zend_error_noreturn(E_ERROR, "Call to undefined method %R::%R()", type, Z_OBJ_CLASS_NAME_P(EX(object)), Z_TYPE_P(function_name), function_name_strval); - } - } else { - zend_error_noreturn(E_ERROR, "Call to a member function %R() on a non-object", Z_TYPE_P(function_name), function_name_strval); - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (!PZVAL_IS_REF(EX(object))) { - EX(object)->refcount++; /* For $this pointer */ - } else { - zval *this_ptr; - ALLOC_ZVAL(this_ptr); - INIT_PZVAL_COPY(this_ptr, EX(object)); - zval_copy_ctor(this_ptr); - EX(object) = this_ptr; - } - } - - zval_dtor(free_op2.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_UNUSED == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_UNUSED != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_UNSET_DIM_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - long index; - - if (container) { - if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - switch (Z_TYPE_PP(container)) { - case IS_ARRAY: { - HashTable *ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, - offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key.u); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } else if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { - offset->refcount++; - } - - if (zend_u_symtable_del(ht, Z_TYPE_P(offset), offset_key, offset_len+1) == SUCCESS && - ht == &EG(symbol_table)) { - zend_execute_data *ex; - ulong hash_value = zend_u_inline_hash_func(Z_TYPE_P(offset), offset_key, offset_len+1); - - for (ex = execute_data; ex; ex = ex->prev_execute_data) { - if (ex->op_array && ex->symbol_table == ht) { - int i; - - for (i = 0; i < ex->op_array->last_var; i++) { - if (ex->op_array->vars[i].hash_value == hash_value && - ex->op_array->vars[i].name_len == offset_len && - !memcmp(ex->op_array->vars[i].name.v, offset_key.v, Z_TYPE_P(offset)==IS_UNICODE?UBYTES(offset_len):offset_len)) { - ex->CVs[i] = NULL; - break; - } - } - } - } - } - if (free_offset) { - efree(offset_key.v); - } else if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { - zval_ptr_dtor(&offset); - } - break; - } - case IS_NULL: - zend_u_hash_del(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof("")); - break; - default: - zend_error(E_WARNING, "Illegal offset type in unset"); - break; - } - zval_dtor(free_op2.var); - break; - } - case IS_OBJECT: - if (!Z_OBJ_HT_P(*container)->unset_dimension) { - zend_error_noreturn(E_ERROR, "Cannot use object as array"); - } - if (1) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC); - if (1) { - zval_ptr_dtor(&offset); - } else { - zval_dtor(free_op2.var); - } - break; - case IS_STRING: - case IS_UNICODE: - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - ZEND_VM_CONTINUE(); /* bailed out before */ - default: - zval_dtor(free_op2.var); - break; - } - } else { - zval_dtor(free_op2.var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_UNSET_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (container) { - if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - if (Z_TYPE_PP(container) == IS_OBJECT) { - if (1) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); - if (1) { - zval_ptr_dtor(&offset); - } else { - zval_dtor(free_op2.var); - } - } else { - zval_dtor(free_op2.var); - } - } else { - zval_dtor(free_op2.var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_TMP(int prop_dim, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval **value = NULL; - int result = 0; - long index; - - if (container) { - zend_free_op free_op2; - zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (Z_TYPE_PP(container) == IS_ARRAY) { - HashTable *ht; - int isset = 0; - - ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } - if (zend_u_symtable_find(ht, Z_TYPE_P(offset), offset_key, offset_len+1, (void **) &value) == SUCCESS) { - isset = 1; - } - if (free_offset) { - efree(offset_key.v); - } - break; - } - case IS_NULL: - if (zend_u_hash_find(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), (void **) &value) == SUCCESS) { - isset = 1; - } - break; - default: - zend_error(E_WARNING, "Illegal offset type in isset or empty"); - - break; - } - - switch (opline->extended_value) { - case ZEND_ISSET: - if (isset && Z_TYPE_PP(value) == IS_NULL) { - result = 0; - } else { - result = isset; - } - break; - case ZEND_ISEMPTY: - if (!isset || !i_zend_is_true(*value)) { - result = 0; - } else { - result = 1; - } - break; - } - zval_dtor(free_op2.var); - } else if (Z_TYPE_PP(container) == IS_OBJECT) { - if (1) { - MAKE_REAL_ZVAL_PTR(offset); - } - if (prop_dim) { - result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } else { - result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } - if (1) { - zval_ptr_dtor(&offset); - } else { - zval_dtor(free_op2.var); - } - } else if ((Z_TYPE_PP(container) == IS_STRING || - Z_TYPE_PP(container) == IS_UNICODE) && !prop_dim) { /* string offsets */ - zval tmp; - - if (Z_TYPE_P(offset) != IS_LONG) { - tmp = *offset; - zval_copy_ctor(&tmp); - convert_to_long(&tmp); - offset = &tmp; - } - if (Z_TYPE_P(offset) == IS_LONG) { - switch (opline->extended_value) { - case ZEND_ISSET: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container)) { - result = 1; - } - break; - case ZEND_ISEMPTY: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container) && - ((Z_TYPE_PP(container) == IS_UNICODE)? - (Z_USTRVAL_PP(container)[Z_LVAL_P(offset)] != 0): - (Z_STRVAL_PP(container)[Z_LVAL_P(offset)] != '0'))) { - result = 1; - } - break; - } - } - zval_dtor(free_op2.var); - } else { - zval_dtor(free_op2.var); - } - } - - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - switch (opline->extended_value) { - case ZEND_ISSET: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result; - break; - case ZEND_ISEMPTY: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result; - break; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_TMP(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_TMP(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_binary_assign_op_obj_helper_SPEC_UNUSED_VAR(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op2, free_op_data1; - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *object; - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - znode *result = &opline->result; - zval **retval = &EX_T(result->u.var).var.ptr; - int have_get_ptr = 0; - - EX_T(result->u.var).var.ptr_ptr = NULL; - make_real_object(object_ptr TSRMLS_CC); - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - FREE_OP(free_op_data1); - - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } else { - /* here we are sure we are dealing with an object */ - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - /* here property is a string */ - if (opline->extended_value == ZEND_ASSIGN_OBJ - && Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - binary_op(*zptr, *zptr, value TSRMLS_CC); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - zval *z = NULL; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - if (Z_OBJ_HT_P(object)->read_property) { - z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - } - break; - case ZEND_ASSIGN_DIM: - if (Z_OBJ_HT_P(object)->read_dimension) { - z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC); - } - break; - } - if (z) { - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - binary_op(z, z, value TSRMLS_CC); - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - break; - case ZEND_ASSIGN_DIM: - Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC); - break; - } - if (!RETURN_VALUE_UNUSED(result)) { - *retval = z; - PZVAL_LOCK(*retval); - } - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - FREE_OP(free_op_data1); - } - - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_helper_SPEC_UNUSED_VAR(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2, free_op_data2, free_op_data1; - zval **var_ptr; - zval *value; - zend_bool increment_opline = 0; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - return zend_binary_assign_op_obj_helper_SPEC_UNUSED_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - break; - case ZEND_ASSIGN_DIM: { - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - - if (object_ptr && IS_UNUSED != IS_CV && !0) { - (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - return zend_binary_assign_op_obj_helper_SPEC_UNUSED_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } else { - zend_op *op_data = opline+1; - zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), NULL, dim, 0, BP_VAR_RW TSRMLS_CC); - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW); - increment_opline = 1; - } - } - break; - default: - value = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - var_ptr = NULL; - /* do nothing */ - break; - } - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets"); - } - - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - } - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - objval->refcount++; - binary_op(objval, objval, value TSRMLS_CC); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC); - zval_ptr_dtor(&objval); - } else { - binary_op(*var_ptr, *var_ptr, value TSRMLS_CC); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - FREE_OP(free_op_data1); - FREE_OP_VAR_PTR(free_op_data2); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_ADD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SUB_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MUL_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_DIV_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MOD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SL_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SR_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_CONCAT_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_OR_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_AND_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_pre_incdec_property_helper_SPEC_UNUSED_VAR(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *object; - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval **retval = &EX_T(opline->result.u.var).var.ptr; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - incdec_op(*zptr); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - incdec_op(z); - *retval = z; - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRE_INC_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_UNUSED_VAR(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_PRE_DEC_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_UNUSED_VAR(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_post_incdec_property_helper_SPEC_UNUSED_VAR(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *object; - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval *retval = &EX_T(opline->result.u.var).tmp_var; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - *retval = *EG(uninitialized_zval_ptr); - - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - have_get_ptr = 1; - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - *retval = **zptr; - zendi_zval_copy_ctor(*retval); - - incdec_op(*zptr); - - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - zval *z_copy; - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - *retval = *z; - zendi_zval_copy_ctor(*retval); - ALLOC_ZVAL(z_copy); - *z_copy = *z; - zendi_zval_copy_ctor(*z_copy); - INIT_PZVAL(z_copy); - incdec_op(z_copy); - z->refcount++; - Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC); - zval_ptr_dtor(&z_copy); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - *retval = *EG(uninitialized_zval_ptr); - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_POST_INC_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_UNUSED_VAR(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_POST_DEC_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_UNUSED_VAR(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_fetch_property_address_read_helper_SPEC_UNUSED_VAR(int type, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *container; - zval **retval; - - - retval = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.ptr_ptr = retval; - - container = _get_obj_zval_ptr_unused(TSRMLS_C); - - if (container == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(error_zval_ptr); - PZVAL_LOCK(*retval); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); - } - - - if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) { - if (type != BP_VAR_IS) { - zend_error(E_NOTICE, "Trying to get property of non-object"); - } - *retval = EG(uninitialized_zval_ptr); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } else { - zend_free_op free_op2; - zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - - /* here we are sure we are dealing with an object */ - *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC); - - if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) { - zval_dtor(*retval); - FREE_ZVAL(*retval); - } else { - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (0) { - zval_ptr_dtor(&offset); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_R_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_UNUSED_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_UNUSED != IS_CV) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr; - } - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - if (IS_UNUSED == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_RW TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - if (IS_UNUSED == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_IS_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_UNUSED_VAR(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { - /* Behave like FETCH_OBJ_W */ - zend_free_op free_op1, free_op2; - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - if (IS_UNUSED == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); - } else { - return zend_fetch_property_address_read_helper_SPEC_UNUSED_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } -} - -static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2, free_res; - zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (IS_UNUSED == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - if (IS_UNUSED == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC); - - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_METHOD_CALL_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zstr function_name_strval; - int function_name_strlen; - zend_free_op free_op2; - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - function_name = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Method name must be a string"); - } - - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - EX(object) = _get_obj_zval_ptr_unused(TSRMLS_C); - - if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) { - if (Z_OBJ_HT_P(EX(object))->get_method == NULL) { - zend_error_noreturn(E_ERROR, "Object does not support method calls"); - } - - /* First, locate the function. */ - EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC); - if (!EX(fbc)) { - zend_error_noreturn(E_ERROR, "Call to undefined method %R::%R()", type, Z_OBJ_CLASS_NAME_P(EX(object)), Z_TYPE_P(function_name), function_name_strval); - } - } else { - zend_error_noreturn(E_ERROR, "Call to a member function %R() on a non-object", Z_TYPE_P(function_name), function_name_strval); - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (!PZVAL_IS_REF(EX(object))) { - EX(object)->refcount++; /* For $this pointer */ - } else { - zval *this_ptr; - ALLOC_ZVAL(this_ptr); - INIT_PZVAL_COPY(this_ptr, EX(object)); - zval_copy_ctor(this_ptr); - EX(object) = this_ptr; - } - } - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_UNUSED == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_UNUSED != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_UNSET_DIM_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - long index; - - if (container) { - if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - switch (Z_TYPE_PP(container)) { - case IS_ARRAY: { - HashTable *ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, - offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key.u); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } else if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { - offset->refcount++; - } - - if (zend_u_symtable_del(ht, Z_TYPE_P(offset), offset_key, offset_len+1) == SUCCESS && - ht == &EG(symbol_table)) { - zend_execute_data *ex; - ulong hash_value = zend_u_inline_hash_func(Z_TYPE_P(offset), offset_key, offset_len+1); - - for (ex = execute_data; ex; ex = ex->prev_execute_data) { - if (ex->op_array && ex->symbol_table == ht) { - int i; - - for (i = 0; i < ex->op_array->last_var; i++) { - if (ex->op_array->vars[i].hash_value == hash_value && - ex->op_array->vars[i].name_len == offset_len && - !memcmp(ex->op_array->vars[i].name.v, offset_key.v, Z_TYPE_P(offset)==IS_UNICODE?UBYTES(offset_len):offset_len)) { - ex->CVs[i] = NULL; - break; - } - } - } - } - } - if (free_offset) { - efree(offset_key.v); - } else if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { - zval_ptr_dtor(&offset); - } - break; - } - case IS_NULL: - zend_u_hash_del(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof("")); - break; - default: - zend_error(E_WARNING, "Illegal offset type in unset"); - break; - } - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - break; - } - case IS_OBJECT: - if (!Z_OBJ_HT_P(*container)->unset_dimension) { - zend_error_noreturn(E_ERROR, "Cannot use object as array"); - } - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC); - if (0) { - zval_ptr_dtor(&offset); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - break; - case IS_STRING: - case IS_UNICODE: - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - ZEND_VM_CONTINUE(); /* bailed out before */ - default: - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - break; - } - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_UNSET_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (container) { - if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - if (Z_TYPE_PP(container) == IS_OBJECT) { - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); - if (0) { - zval_ptr_dtor(&offset); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_VAR(int prop_dim, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval **value = NULL; - int result = 0; - long index; - - if (container) { - zend_free_op free_op2; - zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (Z_TYPE_PP(container) == IS_ARRAY) { - HashTable *ht; - int isset = 0; - - ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } - if (zend_u_symtable_find(ht, Z_TYPE_P(offset), offset_key, offset_len+1, (void **) &value) == SUCCESS) { - isset = 1; - } - if (free_offset) { - efree(offset_key.v); - } - break; - } - case IS_NULL: - if (zend_u_hash_find(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), (void **) &value) == SUCCESS) { - isset = 1; - } - break; - default: - zend_error(E_WARNING, "Illegal offset type in isset or empty"); - - break; - } - - switch (opline->extended_value) { - case ZEND_ISSET: - if (isset && Z_TYPE_PP(value) == IS_NULL) { - result = 0; - } else { - result = isset; - } - break; - case ZEND_ISEMPTY: - if (!isset || !i_zend_is_true(*value)) { - result = 0; - } else { - result = 1; - } - break; - } - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } else if (Z_TYPE_PP(container) == IS_OBJECT) { - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - if (prop_dim) { - result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } else { - result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } - if (0) { - zval_ptr_dtor(&offset); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - } else if ((Z_TYPE_PP(container) == IS_STRING || - Z_TYPE_PP(container) == IS_UNICODE) && !prop_dim) { /* string offsets */ - zval tmp; - - if (Z_TYPE_P(offset) != IS_LONG) { - tmp = *offset; - zval_copy_ctor(&tmp); - convert_to_long(&tmp); - offset = &tmp; - } - if (Z_TYPE_P(offset) == IS_LONG) { - switch (opline->extended_value) { - case ZEND_ISSET: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container)) { - result = 1; - } - break; - case ZEND_ISEMPTY: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container) && - ((Z_TYPE_PP(container) == IS_UNICODE)? - (Z_USTRVAL_PP(container)[Z_LVAL_P(offset)] != 0): - (Z_STRVAL_PP(container)[Z_LVAL_P(offset)] != '0'))) { - result = 1; - } - break; - } - } - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - } - - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - switch (opline->extended_value) { - case ZEND_ISSET: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result; - break; - case ZEND_ISEMPTY: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result; - break; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_VAR(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_VAR(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op_data1; - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *object; - zval *property = NULL; - zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - znode *result = &opline->result; - zval **retval = &EX_T(result->u.var).var.ptr; - int have_get_ptr = 0; - - EX_T(result->u.var).var.ptr_ptr = NULL; - make_real_object(object_ptr TSRMLS_CC); - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - - FREE_OP(free_op_data1); - - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } else { - /* here we are sure we are dealing with an object */ - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - /* here property is a string */ - if (opline->extended_value == ZEND_ASSIGN_OBJ - && Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - binary_op(*zptr, *zptr, value TSRMLS_CC); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - zval *z = NULL; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - if (Z_OBJ_HT_P(object)->read_property) { - z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - } - break; - case ZEND_ASSIGN_DIM: - if (Z_OBJ_HT_P(object)->read_dimension) { - z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC); - } - break; - } - if (z) { - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - binary_op(z, z, value TSRMLS_CC); - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - break; - case ZEND_ASSIGN_DIM: - Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC); - break; - } - if (!RETURN_VALUE_UNUSED(result)) { - *retval = z; - PZVAL_LOCK(*retval); - } - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - FREE_OP(free_op_data1); - } - - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op_data2, free_op_data1; - zval **var_ptr; - zval *value; - zend_bool increment_opline = 0; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - return zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - break; - case ZEND_ASSIGN_DIM: { - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - - if (object_ptr && IS_UNUSED != IS_CV && !0) { - (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - return zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } else { - zend_op *op_data = opline+1; - zval *dim = NULL; - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), NULL, dim, 0, BP_VAR_RW TSRMLS_CC); - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW); - increment_opline = 1; - } - } - break; - default: - value = NULL; - var_ptr = NULL; - /* do nothing */ - break; - } - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets"); - } - - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - } - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - objval->refcount++; - binary_op(objval, objval, value TSRMLS_CC); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC); - zval_ptr_dtor(&objval); - } else { - binary_op(*var_ptr, *var_ptr, value TSRMLS_CC); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - FREE_OP(free_op_data1); - FREE_OP_VAR_PTR(free_op_data2); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_ADD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SUB_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MUL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_DIV_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MOD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SR_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_CONCAT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_OR_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_AND_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_UNUSED == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_UNUSED != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op_data1; - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *object; - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - znode *result = &opline->result; - zval **retval = &EX_T(result->u.var).var.ptr; - int have_get_ptr = 0; - - EX_T(result->u.var).var.ptr_ptr = NULL; - make_real_object(object_ptr TSRMLS_CC); - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - - FREE_OP(free_op_data1); - - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } else { - /* here we are sure we are dealing with an object */ - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - /* here property is a string */ - if (opline->extended_value == ZEND_ASSIGN_OBJ - && Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - binary_op(*zptr, *zptr, value TSRMLS_CC); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - zval *z = NULL; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - if (Z_OBJ_HT_P(object)->read_property) { - z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - } - break; - case ZEND_ASSIGN_DIM: - if (Z_OBJ_HT_P(object)->read_dimension) { - z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC); - } - break; - } - if (z) { - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - binary_op(z, z, value TSRMLS_CC); - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - break; - case ZEND_ASSIGN_DIM: - Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC); - break; - } - if (!RETURN_VALUE_UNUSED(result)) { - *retval = z; - PZVAL_LOCK(*retval); - } - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - FREE_OP(free_op_data1); - } - - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_helper_SPEC_UNUSED_CV(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op_data2, free_op_data1; - zval **var_ptr; - zval *value; - zend_bool increment_opline = 0; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - return zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - break; - case ZEND_ASSIGN_DIM: { - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - - if (object_ptr && IS_UNUSED != IS_CV && !0) { - (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - return zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } else { - zend_op *op_data = opline+1; - zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), NULL, dim, 0, BP_VAR_RW TSRMLS_CC); - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW); - increment_opline = 1; - } - } - break; - default: - value = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - var_ptr = NULL; - /* do nothing */ - break; - } - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets"); - } - - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - } - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - objval->refcount++; - binary_op(objval, objval, value TSRMLS_CC); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC); - zval_ptr_dtor(&objval); - } else { - binary_op(*var_ptr, *var_ptr, value TSRMLS_CC); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - FREE_OP(free_op_data1); - FREE_OP_VAR_PTR(free_op_data2); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CV(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CV(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CV(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CV(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CV(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CV(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SR_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CV(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CV(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CV(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CV(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_UNUSED_CV(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_pre_incdec_property_helper_SPEC_UNUSED_CV(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *object; - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - zval **retval = &EX_T(opline->result.u.var).var.ptr; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - incdec_op(*zptr); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - incdec_op(z); - *retval = z; - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_UNUSED_CV(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_UNUSED_CV(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_post_incdec_property_helper_SPEC_UNUSED_CV(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *object; - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - zval *retval = &EX_T(opline->result.u.var).tmp_var; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - - *retval = *EG(uninitialized_zval_ptr); - - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - have_get_ptr = 1; - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - *retval = **zptr; - zendi_zval_copy_ctor(*retval); - - incdec_op(*zptr); - - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - zval *z_copy; - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - *retval = *z; - zendi_zval_copy_ctor(*retval); - ALLOC_ZVAL(z_copy); - *z_copy = *z; - zendi_zval_copy_ctor(*z_copy); - INIT_PZVAL(z_copy); - incdec_op(z_copy); - z->refcount++; - Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC); - zval_ptr_dtor(&z_copy); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - *retval = *EG(uninitialized_zval_ptr); - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_UNUSED_CV(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_UNUSED_CV(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_fetch_property_address_read_helper_SPEC_UNUSED_CV(int type, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *container; - zval **retval; - - - retval = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.ptr_ptr = retval; - - container = _get_obj_zval_ptr_unused(TSRMLS_C); - - if (container == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(error_zval_ptr); - PZVAL_LOCK(*retval); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); - } - - - if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) { - if (type != BP_VAR_IS) { - zend_error(E_NOTICE, "Trying to get property of non-object"); - } - *retval = EG(uninitialized_zval_ptr); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } else { - - zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - - /* here we are sure we are dealing with an object */ - *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC); - - if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) { - zval_dtor(*retval); - FREE_ZVAL(*retval); - } else { - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_UNUSED_CV(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_UNUSED != IS_CV) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr; - } - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_UNUSED == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_RW TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_UNUSED == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_UNUSED_CV(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { - /* Behave like FETCH_OBJ_W */ - zend_free_op free_op1; - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_UNUSED == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); - } else { - return zend_fetch_property_address_read_helper_SPEC_UNUSED_CV(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } -} - -static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_res; - zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (IS_UNUSED == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_UNUSED == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - - zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC); - - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zstr function_name_strval; - int function_name_strlen; - - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - function_name = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Method name must be a string"); - } - - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - EX(object) = _get_obj_zval_ptr_unused(TSRMLS_C); - - if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) { - if (Z_OBJ_HT_P(EX(object))->get_method == NULL) { - zend_error_noreturn(E_ERROR, "Object does not support method calls"); - } - - /* First, locate the function. */ - EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC); - if (!EX(fbc)) { - zend_error_noreturn(E_ERROR, "Call to undefined method %R::%R()", type, Z_OBJ_CLASS_NAME_P(EX(object)), Z_TYPE_P(function_name), function_name_strval); - } - } else { - zend_error_noreturn(E_ERROR, "Call to a member function %R() on a non-object", Z_TYPE_P(function_name), function_name_strval); - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (!PZVAL_IS_REF(EX(object))) { - EX(object)->refcount++; /* For $this pointer */ - } else { - zval *this_ptr; - ALLOC_ZVAL(this_ptr); - INIT_PZVAL_COPY(this_ptr, EX(object)); - zval_copy_ctor(this_ptr); - EX(object) = this_ptr; - } - } - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_UNUSED == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_UNUSED != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_UNSET_DIM_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - long index; - - if (container) { - if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - switch (Z_TYPE_PP(container)) { - case IS_ARRAY: { - HashTable *ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, - offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key.u); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } else if (IS_CV == IS_CV || IS_CV == IS_VAR) { - offset->refcount++; - } - - if (zend_u_symtable_del(ht, Z_TYPE_P(offset), offset_key, offset_len+1) == SUCCESS && - ht == &EG(symbol_table)) { - zend_execute_data *ex; - ulong hash_value = zend_u_inline_hash_func(Z_TYPE_P(offset), offset_key, offset_len+1); - - for (ex = execute_data; ex; ex = ex->prev_execute_data) { - if (ex->op_array && ex->symbol_table == ht) { - int i; - - for (i = 0; i < ex->op_array->last_var; i++) { - if (ex->op_array->vars[i].hash_value == hash_value && - ex->op_array->vars[i].name_len == offset_len && - !memcmp(ex->op_array->vars[i].name.v, offset_key.v, Z_TYPE_P(offset)==IS_UNICODE?UBYTES(offset_len):offset_len)) { - ex->CVs[i] = NULL; - break; - } - } - } - } - } - if (free_offset) { - efree(offset_key.v); - } else if (IS_CV == IS_CV || IS_CV == IS_VAR) { - zval_ptr_dtor(&offset); - } - break; - } - case IS_NULL: - zend_u_hash_del(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof("")); - break; - default: - zend_error(E_WARNING, "Illegal offset type in unset"); - break; - } - - break; - } - case IS_OBJECT: - if (!Z_OBJ_HT_P(*container)->unset_dimension) { - zend_error_noreturn(E_ERROR, "Cannot use object as array"); - } - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC); - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - break; - case IS_STRING: - case IS_UNICODE: - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - ZEND_VM_CONTINUE(); /* bailed out before */ - default: - - break; - } - } else { - - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (container) { - if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - if (Z_TYPE_PP(container) == IS_OBJECT) { - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - } else { - - } - } else { - - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CV(int prop_dim, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C); - zval **value = NULL; - int result = 0; - long index; - - if (container) { - - zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_PP(container) == IS_ARRAY) { - HashTable *ht; - int isset = 0; - - ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } - if (zend_u_symtable_find(ht, Z_TYPE_P(offset), offset_key, offset_len+1, (void **) &value) == SUCCESS) { - isset = 1; - } - if (free_offset) { - efree(offset_key.v); - } - break; - } - case IS_NULL: - if (zend_u_hash_find(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), (void **) &value) == SUCCESS) { - isset = 1; - } - break; - default: - zend_error(E_WARNING, "Illegal offset type in isset or empty"); - - break; - } - - switch (opline->extended_value) { - case ZEND_ISSET: - if (isset && Z_TYPE_PP(value) == IS_NULL) { - result = 0; - } else { - result = isset; - } - break; - case ZEND_ISEMPTY: - if (!isset || !i_zend_is_true(*value)) { - result = 0; - } else { - result = 1; - } - break; - } - - } else if (Z_TYPE_PP(container) == IS_OBJECT) { - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - if (prop_dim) { - result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } else { - result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - } else if ((Z_TYPE_PP(container) == IS_STRING || - Z_TYPE_PP(container) == IS_UNICODE) && !prop_dim) { /* string offsets */ - zval tmp; - - if (Z_TYPE_P(offset) != IS_LONG) { - tmp = *offset; - zval_copy_ctor(&tmp); - convert_to_long(&tmp); - offset = &tmp; - } - if (Z_TYPE_P(offset) == IS_LONG) { - switch (opline->extended_value) { - case ZEND_ISSET: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container)) { - result = 1; - } - break; - case ZEND_ISEMPTY: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container) && - ((Z_TYPE_PP(container) == IS_UNICODE)? - (Z_USTRVAL_PP(container)[Z_LVAL_P(offset)] != 0): - (Z_STRVAL_PP(container)[Z_LVAL_P(offset)] != '0'))) { - result = 1; - } - break; - } - } - - } else { - - } - } - - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - switch (opline->extended_value) { - case ZEND_ISSET: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result; - break; - case ZEND_ISEMPTY: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result; - break; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CV(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CV(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_BW_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - bitwise_not_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - boolean_not_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRE_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **var_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC); - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets"); - } - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - val->refcount++; - increment_function(val); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC); - zval_ptr_dtor(&val); - } else { - increment_function(*var_ptr); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRE_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **var_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC); - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets"); - } - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - val->refcount++; - decrement_function(val); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC); - zval_ptr_dtor(&val); - } else { - decrement_function(*var_ptr); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **var_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC); - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets"); - } - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).tmp_var = *EG(uninitialized_zval_ptr); - } - - ZEND_VM_NEXT_OPCODE(); - } - - EX_T(opline->result.u.var).tmp_var = **var_ptr; - zendi_zval_copy_ctor(EX_T(opline->result.u.var).tmp_var); - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - val->refcount++; - increment_function(val); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC); - zval_ptr_dtor(&val); - } else { - increment_function(*var_ptr); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **var_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC); - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets"); - } - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).tmp_var = *EG(uninitialized_zval_ptr); - } - - ZEND_VM_NEXT_OPCODE(); - } - - EX_T(opline->result.u.var).tmp_var = **var_ptr; - zendi_zval_copy_ctor(EX_T(opline->result.u.var).tmp_var); - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - val->refcount++; - decrement_function(val); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC); - zval_ptr_dtor(&val); - } else { - decrement_function(*var_ptr); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *z = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - zval z_copy; - UErrorCode status = U_ZERO_ERROR; - - /* UTODO: review this - * Convert inline HTML blocks to the output encoding, but only if necessary. */ - if (opline->extended_value && - strcmp(ucnv_getName(ZEND_U_CONVERTER(UG(output_encoding_conv)), &status), - EX(op_array)->script_encoding)) { - zval z_conv; - UConverter *script_enc_conv = NULL; - if (zend_set_converter_encoding(&script_enc_conv, EX(op_array)->script_encoding) == FAILURE) { - zend_error(E_ERROR, "Unsupported encoding [%d]", EX(op_array)->script_encoding); - } - zend_convert_encodings(ZEND_U_CONVERTER(UG(output_encoding_conv)), script_enc_conv, &Z_STRVAL(z_conv), &Z_STRLEN(z_conv), Z_STRVAL_P(z), Z_STRLEN_P(z), &status); - Z_TYPE(z_conv) = IS_STRING; - if (U_SUCCESS(status)) { - zend_print_variable(&z_conv); - } else { - zend_error(E_WARNING, "Could not convert inline HTML for output"); - } - zval_dtor(&z_conv); - ucnv_close(script_enc_conv); - } else if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get_method != NULL && - zend_std_cast_object_tostring(z, &z_copy, ZEND_STR_TYPE, ZEND_U_CONVERTER(UG(output_encoding_conv)) TSRMLS_CC) == SUCCESS) { - zend_print_variable(&z_copy); - zval_dtor(&z_copy); - } else { - zend_print_variable(z); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRINT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 1; - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_LONG; - - return ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_fetch_var_address_helper_SPEC_CV(int type, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *varname = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - zval **retval; - zval tmp_varname; - HashTable *target_symbol_table; - - if (Z_TYPE_P(varname) != IS_STRING && Z_TYPE_P(varname) != IS_UNICODE) { - tmp_varname = *varname; - zval_copy_ctor(&tmp_varname); - convert_to_text(&tmp_varname); - varname = &tmp_varname; - } - - if (opline->op2.u.EA.type == ZEND_FETCH_AUTO_GLOBAL && - CG(auto_globals_cache)[opline->op2.u.var]) { - retval = CG(auto_globals_cache)[opline->op2.u.var]; - } else if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) { - retval = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname), 0 TSRMLS_CC); - } else { - zend_auto_global *auto_global = NULL; - - if (opline->op2.u.EA.type == ZEND_FETCH_AUTO_GLOBAL) { - zend_u_is_auto_global_ex(Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname), 1, &auto_global TSRMLS_CC); - } - target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), type, varname TSRMLS_CC); -/* - if (!target_symbol_table) { - ZEND_VM_NEXT_OPCODE(); - } -*/ - if (zend_u_hash_find(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, (void **) &retval) == FAILURE) { - switch (type) { - case BP_VAR_R: - case BP_VAR_UNSET: - zend_error(E_NOTICE,"Undefined variable: %R", Z_TYPE_P(varname), Z_UNIVAL_P(varname)); - /* break missing intentionally */ - case BP_VAR_IS: - retval = &EG(uninitialized_zval_ptr); - break; - case BP_VAR_RW: - zend_error(E_NOTICE,"Undefined variable: %R", Z_TYPE_P(varname), Z_UNIVAL_P(varname)); - /* break missing intentionally */ - case BP_VAR_W: { - zval *new_zval = &EG(uninitialized_zval); - - new_zval->refcount++; - zend_u_hash_update(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, &new_zval, sizeof(zval *), (void **) &retval); - } - break; - EMPTY_SWITCH_DEFAULT_CASE() - } - } - switch (opline->op2.u.EA.type) { - case ZEND_FETCH_AUTO_GLOBAL: - if (auto_global && (!auto_global->armed || !auto_global->runtime)) { - CG(auto_globals_cache)[opline->op2.u.var] = retval; - } - /* break missing intentionally */ - case ZEND_FETCH_GLOBAL: - if (IS_CV != IS_TMP_VAR) { - - } - break; - case ZEND_FETCH_LOCAL: - - break; - case ZEND_FETCH_STATIC: - zval_update_constant(retval, (void*) 1 TSRMLS_CC); - break; - case ZEND_FETCH_GLOBAL_LOCK: - if (IS_CV == IS_VAR && !free_op1.var) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - break; - } - } - - - if (varname == &tmp_varname) { - zval_dtor(varname); - } - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = retval; - PZVAL_LOCK(*retval); - switch (type) { - case BP_VAR_R: - case BP_VAR_IS: - AI_USE_PTR(EX_T(opline->result.u.var).var); - break; - case BP_VAR_UNSET: { - zend_free_op free_res; - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - break; - } - } - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_CV(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_W_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_CV(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_CV(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_FUNC_ARG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_CV(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), EX(opline)->extended_value)?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_UNSET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_CV(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_IS_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_var_address_helper_SPEC_CV(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - int ret = i_zend_is_true(_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC)); - - if (!ret) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - int ret = i_zend_is_true(_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC)); - - if (ret) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - int retval = i_zend_is_true(_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC)); - - if (retval) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp on true to %d\n", opline->extended_value); -#endif - ZEND_VM_JMP(&EX(op_array)->opcodes[opline->extended_value]); - } else { -#if DEBUG_ZEND>=2 - printf("Conditional jmp on false to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(&EX(op_array)->opcodes[opline->op2.u.opline_num]); - } -} - -static int ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - int retval = i_zend_is_true(_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC)); - - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = retval; - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - if (!retval) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - int retval = i_zend_is_true(_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC)); - - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = retval; - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - if (retval) { -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *retval_ptr; - zval **retval_ptr_ptr; - - - if (EG(active_op_array)->return_reference == ZEND_RETURN_REF) { - - if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) { - /* Not supposed to happen, but we'll allow it */ - zend_error(E_NOTICE, "Only variable references should be returned by reference"); - goto return_by_value; - } - - retval_ptr_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - - if (!retval_ptr_ptr) { - zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference"); - } - - if (IS_CV == IS_VAR && !(*retval_ptr_ptr)->is_ref) { - if (opline->extended_value == ZEND_RETURNS_FUNCTION && - EX_T(opline->op1.u.var).var.fcall_returned_reference) { - } else if (opline->extended_value == ZEND_RETURNS_NEW) { - } else if (EX_T(opline->op1.u.var).var.ptr_ptr == &EX_T(opline->op1.u.var).var.ptr) { - if (IS_CV == IS_VAR && !0) { - PZVAL_LOCK(*retval_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */ - } - zend_error(E_NOTICE, "Only variable references should be returned by reference"); - goto return_by_value; - } - } - - SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr_ptr); - (*retval_ptr_ptr)->refcount++; - - (*EG(return_value_ptr_ptr)) = (*retval_ptr_ptr); - } else { -return_by_value: - - retval_ptr = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (!0) { /* Not a temp var */ - if (EG(active_op_array)->return_reference == ZEND_RETURN_REF || - (PZVAL_IS_REF(retval_ptr) && retval_ptr->refcount > 0)) { - zval *ret; - - ALLOC_ZVAL(ret); - INIT_PZVAL_COPY(ret, retval_ptr); - zval_copy_ctor(ret); - *EG(return_value_ptr_ptr) = ret; - } else { - *EG(return_value_ptr_ptr) = retval_ptr; - retval_ptr->refcount++; - } - } else { - zval *ret; - - ALLOC_ZVAL(ret); - INIT_PZVAL_COPY(ret, retval_ptr); - *EG(return_value_ptr_ptr) = ret; - } - } - - ZEND_VM_RETURN_FROM_EXECUTE_LOOP(); -} - -static int ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *value; - zval *exception; - - - value = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(value) != IS_OBJECT) { - zend_error_noreturn(E_ERROR, "Can only throw objects"); - } - /* Not sure if a complete copy is what we want here */ - ALLOC_ZVAL(exception); - INIT_PZVAL_COPY(exception, value); - if (!0) { - zval_copy_ctor(exception); - } - - zend_throw_exception_object(exception TSRMLS_CC); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SEND_VAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - if (opline->extended_value==ZEND_DO_FCALL_BY_NAME - && ARG_MUST_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) { - zend_error_noreturn(E_ERROR, "Cannot pass parameter %d by reference", opline->op2.u.opline_num); - } - { - zval *valptr; - zval *value; - - - value = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - - ALLOC_ZVAL(valptr); - INIT_PZVAL_COPY(valptr, value); - if (!0) { - zval_copy_ctor(valptr); - } - zend_ptr_stack_push(&EG(argument_stack), valptr); - - } - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *varptr; - - varptr = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (varptr == &EG(uninitialized_zval)) { - ALLOC_ZVAL(varptr); - INIT_ZVAL(*varptr); - varptr->refcount = 0; - } else if (PZVAL_IS_REF(varptr)) { - zval *original_var = varptr; - - ALLOC_ZVAL(varptr); - *varptr = *original_var; - varptr->is_ref = 0; - varptr->refcount = 0; - zval_copy_ctor(varptr); - } - varptr->refcount++; - zend_ptr_stack_push(&EG(argument_stack), varptr); - ; /* for string offsets */ - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *varptr; - - if (opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) { /* Had function_ptr at compile_time */ - if (!(opline->extended_value & ZEND_ARG_SEND_BY_REF)) { - return zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } - } else if (!ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) { - return zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } - - if (IS_CV == IS_VAR && - (opline->extended_value & ZEND_ARG_SEND_FUNCTION) && - EX_T(opline->op1.u.var).var.fcall_returned_reference && - EX_T(opline->op1.u.var).var.ptr) { - varptr = EX_T(opline->op1.u.var).var.ptr; - PZVAL_UNLOCK_EX(varptr, &free_op1, 0); - } else { - varptr = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - } - if ((!(opline->extended_value & ZEND_ARG_SEND_FUNCTION) || - EX_T(opline->op1.u.var).var.fcall_returned_reference) && - varptr != &EG(uninitialized_zval) && - (PZVAL_IS_REF(varptr) || - (varptr->refcount == 1 && (IS_CV == IS_CV || free_op1.var)))) { - varptr->is_ref = 1; - varptr->refcount++; - zend_ptr_stack_push(&EG(argument_stack), varptr); - } else { - zval *valptr; - - zend_error(E_STRICT, "Only variables should be passed by reference"); - ALLOC_ZVAL(valptr); - INIT_PZVAL_COPY(valptr, varptr); - if (!0) { - zval_copy_ctor(valptr); - } - zend_ptr_stack_push(&EG(argument_stack), valptr); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **varptr_ptr; - zval *varptr; - varptr_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - - if (!varptr_ptr) { - zend_error_noreturn(E_ERROR, "Only variables can be passed by reference"); - } - - SEPARATE_ZVAL_TO_MAKE_IS_REF(varptr_ptr); - varptr = *varptr_ptr; - varptr->refcount++; - zend_ptr_stack_push(&EG(argument_stack), varptr); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - if ((opline->extended_value == ZEND_DO_FCALL_BY_NAME) - && ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) { - return ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } - return zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - /* PHP 3.0 returned "" for false and 1 for true, here we use 0 and 1 for now */ - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = i_zend_is_true(_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC)); - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *obj = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - zend_class_entry *ce; - zend_function *clone; - zend_object_clone_obj_t clone_call; - - if (!obj || Z_TYPE_P(obj) != IS_OBJECT) { - zend_error(E_WARNING, "__clone method called on non-object"); - EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); - EX_T(opline->result.u.var).var.ptr->refcount++; - - ZEND_VM_NEXT_OPCODE(); - } - - ce = Z_OBJCE_P(obj); - clone = ce ? ce->clone : NULL; - clone_call = Z_OBJ_HT_P(obj)->clone_obj; - if (!clone_call) { - if (ce) { - zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %v", ce->name); - } else { - zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object"); - } - EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); - EX_T(opline->result.u.var).var.ptr->refcount++; - } - - if (ce && clone) { - if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) { - /* Ensure that if we're calling a private function, we're allowed to do so. - */ - if (ce != EG(scope)) { - zend_error_noreturn(E_ERROR, "Call to private %v::__clone() from context '%v'", ce->name, EG(scope) ? EG(scope)->name : EMPTY_ZSTR); - } - } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) { - /* Ensure that if we're calling a protected function, we're allowed to do so. - */ - if (!zend_check_protected(clone->common.scope, EG(scope))) { - zend_error_noreturn(E_ERROR, "Call to protected %v::__clone() from context '%v'", ce->name, EG(scope) ? EG(scope)->name : EMPTY_ZSTR); - } - } - } - - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - if (!EG(exception)) { - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - Z_OBJVAL_P(EX_T(opline->result.u.var).var.ptr) = clone_call(obj TSRMLS_CC); - Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_OBJECT; - EX_T(opline->result.u.var).var.ptr->refcount=1; - EX_T(opline->result.u.var).var.ptr->is_ref=1; - if (!RETURN_VALUE_USED(opline) || EG(exception)) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *expr = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - zval *result = &EX_T(opline->result.u.var).tmp_var; - - *result = *expr; - if (!0) { - zendi_zval_copy_ctor(*result); - } - switch (opline->extended_value) { - case IS_NULL: - convert_to_null(result); - break; - case IS_BOOL: - convert_to_boolean(result); - break; - case IS_LONG: - convert_to_long(result); - break; - case IS_DOUBLE: - convert_to_double(result); - break; - case IS_STRING: { - zval var_copy; - int use_copy; - - zend_make_string_zval(result, &var_copy, &use_copy); - if (use_copy) { - zval_dtor(result); - *result = var_copy; - } - break; - } - case IS_UNICODE: { - zval var_copy; - int use_copy; - - zend_make_unicode_zval(result, &var_copy, &use_copy); - if (use_copy) { - zval_dtor(result); - *result = var_copy; - } - break; - } - case IS_ARRAY: - convert_to_array(result); - break; - case IS_OBJECT: - convert_to_object(result); - break; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op_array *new_op_array=NULL; - zval **original_return_value = EG(return_value_ptr_ptr); - int return_value_used = RETURN_VALUE_USED(opline); - - zval *inc_filename = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - zval tmp_inc_filename; - zend_bool failure_retval=0; - - if (UG(unicode) && Z_LVAL(opline->op2.u.constant) == ZEND_EVAL) { - if (Z_TYPE_P(inc_filename) != IS_UNICODE) { - tmp_inc_filename = *inc_filename; - zval_copy_ctor(&tmp_inc_filename); - convert_to_unicode(&tmp_inc_filename); - inc_filename = &tmp_inc_filename; - } - } else if (Z_TYPE_P(inc_filename) == IS_UNICODE) { - char *encpath; - int encpath_len; - - if (FAILURE == zend_path_encode(&encpath, &encpath_len, Z_USTRVAL_P(inc_filename), Z_USTRLEN_P(inc_filename) TSRMLS_CC)) { - failure_retval = 0; - zend_error(E_ERROR, "Failure converting '%R' to filesystem encoding", IS_UNICODE, Z_USTRVAL_P(inc_filename)); - goto skip_compile; - } - - ZVAL_STRINGL(&tmp_inc_filename, encpath, encpath_len, 0); - inc_filename = &tmp_inc_filename; - } else if (Z_TYPE_P(inc_filename) != IS_STRING) { - tmp_inc_filename = *inc_filename; - zval_copy_ctor(&tmp_inc_filename); - convert_to_string(&tmp_inc_filename); - inc_filename = &tmp_inc_filename; - } - - switch (Z_LVAL(opline->op2.u.constant)) { - case ZEND_INCLUDE_ONCE: - case ZEND_REQUIRE_ONCE: { - zend_file_handle file_handle; - char cwd[MAXPATHLEN]; - cwd_state state; - - if (IS_ABSOLUTE_PATH(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename))) { - cwd[0] = '\0'; - } else if (!VCWD_GETCWD(cwd, MAXPATHLEN)) { - cwd[0] = '\0'; - } - - state.cwd_length = strlen(cwd); - state.cwd = zend_strndup(cwd, state.cwd_length); - - failure_retval = (!virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) && - zend_hash_exists(&EG(included_files), state.cwd, state.cwd_length+1)); - - free(state.cwd); - - if (failure_retval) { - /* do nothing */ - } else if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) { - if (!file_handle.opened_path) { - file_handle.opened_path = estrndup(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename)); - } - - if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) { - new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC); - zend_destroy_file_handle(&file_handle TSRMLS_CC); - } else { - zend_file_handle_dtor(&file_handle); - failure_retval=1; - } - } else { - if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) { - zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename)); - } else { - zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename)); - } - } - } - break; - case ZEND_INCLUDE: - case ZEND_REQUIRE: - new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC); - break; - case ZEND_EVAL: { - char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC); - - new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC); - efree(eval_desc); - } - break; - EMPTY_SWITCH_DEFAULT_CASE() - } - -skip_compile: - if (inc_filename==&tmp_inc_filename) { - zval_dtor(&tmp_inc_filename); - } - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - if (new_op_array) { - zval *saved_object; - zend_function *saved_function; - - EG(return_value_ptr_ptr) = EX_T(opline->result.u.var).var.ptr_ptr; - EG(active_op_array) = new_op_array; - EX_T(opline->result.u.var).var.ptr = NULL; - - saved_object = EX(object); - saved_function = EX(function_state).function; - - EX(function_state).function = (zend_function *) new_op_array; - EX(object) = NULL; - - zend_execute(new_op_array TSRMLS_CC); - - EX(function_state).function = saved_function; - EX(object) = saved_object; - - if (!return_value_used) { - if (EX_T(opline->result.u.var).var.ptr) { - zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr); - } - } else { /* return value is used */ - if (!EX_T(opline->result.u.var).var.ptr) { /* there was no return statement */ - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - INIT_PZVAL(EX_T(opline->result.u.var).var.ptr); - Z_LVAL_P(EX_T(opline->result.u.var).var.ptr) = 1; - Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_BOOL; - } - } - - EG(opline_ptr) = &EX(opline); - EG(active_op_array) = EX(op_array); - EG(function_state_ptr) = &EX(function_state); - destroy_op_array(new_op_array TSRMLS_CC); - efree(new_op_array); - if (EG(exception)) { - zend_throw_exception_internal(NULL TSRMLS_CC); - } - } else { - if (return_value_used) { - ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr); - INIT_ZVAL(*EX_T(opline->result.u.var).var.ptr); - Z_LVAL_P(EX_T(opline->result.u.var).var.ptr) = failure_retval; - Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_BOOL; - } - } - - EG(return_value_ptr_ptr) = original_return_value; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_UNSET_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval tmp, *varname; - HashTable *target_symbol_table; - - - varname = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(varname) != IS_STRING && Z_TYPE_P(varname) != IS_UNICODE) { - tmp = *varname; - zval_copy_ctor(&tmp); - convert_to_text(&tmp); - varname = &tmp; - } else if (IS_CV == IS_CV || IS_CV == IS_VAR) { - varname->refcount++; - } - - if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) { - zend_std_unset_static_property(EX_T(opline->op2.u.var).class_entry, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname) TSRMLS_CC); - } else { - target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), BP_VAR_IS, varname TSRMLS_CC); - if (zend_u_hash_del(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1) == SUCCESS) { - zend_execute_data *ex = execute_data; - ulong hash_value = zend_u_inline_hash_func(Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1); - zend_auto_global *auto_global; - - if (zend_u_hash_quick_find(CG(auto_globals), Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, hash_value, (void**)&auto_global) == SUCCESS) { - CG(auto_globals_cache)[auto_global->index] = NULL; - } - do { - int i; - - if (ex->op_array) { - for (i = 0; i < ex->op_array->last_var; i++) { - if (ex->op_array->vars[i].hash_value == hash_value && - ex->op_array->vars[i].name_len == Z_UNILEN_P(varname) && - !memcmp(ex->op_array->vars[i].name.v, Z_UNIVAL_P(varname).v, Z_TYPE_P(varname)==IS_UNICODE?UBYTES(Z_UNILEN_P(varname)):Z_UNILEN_P(varname))) { - ex->CVs[i] = NULL; - break; - } - } - } - ex = ex->prev_execute_data; - } while (ex && ex->symbol_table == target_symbol_table); - } - } - - if (varname == &tmp) { - zval_dtor(&tmp); - } else if (IS_CV == IS_CV || IS_CV == IS_VAR) { - zval_ptr_dtor(&varname); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FE_RESET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *array_ptr, **array_ptr_ptr; - HashTable *fe_ht; - zend_object_iterator *iter = NULL; - zend_class_entry *ce = NULL; - zend_bool is_empty = 0; - - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - array_ptr_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - if (array_ptr_ptr == NULL || array_ptr_ptr == &EG(uninitialized_zval_ptr)) { - ALLOC_INIT_ZVAL(array_ptr); - } else if (Z_TYPE_PP(array_ptr_ptr) == IS_OBJECT) { - if(Z_OBJ_HT_PP(array_ptr_ptr)->get_class_entry == NULL) { - zend_error(E_WARNING, "foreach() can not iterate over objects without PHP class"); - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - } - - ce = Z_OBJCE_PP(array_ptr_ptr); - if (!ce || ce->get_iterator == NULL) { - SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr); - (*array_ptr_ptr)->refcount++; - } - array_ptr = *array_ptr_ptr; - } else { - if (Z_TYPE_PP(array_ptr_ptr) == IS_ARRAY) { - SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr); - } - array_ptr = *array_ptr_ptr; - array_ptr->refcount++; - } - } else { - array_ptr = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - if (0) { /* IS_TMP_VAR */ - zval *tmp; - - ALLOC_ZVAL(tmp); - INIT_PZVAL_COPY(tmp, array_ptr); - array_ptr = tmp; - } else if (Z_TYPE_P(array_ptr) == IS_OBJECT) { - ce = Z_OBJCE_P(array_ptr); - if (!ce || !ce->get_iterator) { - array_ptr->refcount++; - } - } else { - if (IS_CV == IS_VAR && - free_op1.var == NULL && - !array_ptr->is_ref && - array_ptr->refcount > 1) { - /* non-separated return value from function */ - zval *tmp; - - ALLOC_ZVAL(tmp); - INIT_PZVAL_COPY(tmp, array_ptr); - zval_copy_ctor(tmp); - array_ptr = tmp; - } else { - array_ptr->refcount++; - } - } - } - - if (IS_CV != IS_TMP_VAR && ce && ce->get_iterator) { - iter = ce->get_iterator(ce, array_ptr, opline->extended_value & ZEND_FE_RESET_REFERENCE TSRMLS_CC); - - if (iter && !EG(exception)) { - array_ptr = zend_iterator_wrap(iter TSRMLS_CC); - } else { - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - - } else { - - } - if (!EG(exception)) { - zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Object of type %v did not create an Iterator", ce->name); - } - zend_throw_exception_internal(NULL TSRMLS_CC); - ZEND_VM_NEXT_OPCODE(); - } - } - - PZVAL_LOCK(array_ptr); - EX_T(opline->result.u.var).var.ptr = array_ptr; - EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr; - - if (iter) { - iter->index = 0; - if (iter->funcs->rewind) { - iter->funcs->rewind(iter TSRMLS_CC); - if (EG(exception)) { - array_ptr->refcount--; - zval_ptr_dtor(&array_ptr); - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); - } - } - is_empty = iter->funcs->valid(iter TSRMLS_CC) != SUCCESS; - if (EG(exception)) { - array_ptr->refcount--; - zval_ptr_dtor(&array_ptr); - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); - } - iter->index = -1; /* will be set to 0 before using next handler */ - } else if ((fe_ht = HASH_OF(array_ptr)) != NULL) { - zend_hash_internal_pointer_reset(fe_ht); - if (ce) { - zend_object *zobj = zend_objects_get_address(array_ptr TSRMLS_CC); - while (zend_hash_has_more_elements(fe_ht) == SUCCESS) { - zstr str_key; - uint str_key_len; - ulong int_key; - zend_uchar key_type; - - key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL); - if (key_type != HASH_KEY_NON_EXISTANT && - (key_type == HASH_KEY_IS_LONG || - zend_check_property_access(zobj, key_type == HASH_KEY_IS_UNICODE?IS_UNICODE:IS_STRING, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS)) { - break; - } - zend_hash_move_forward(fe_ht); - } - } - is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS; - zend_hash_get_pointer(fe_ht, &EX_T(opline->result.u.var).fe.fe_pos); - } else { - zend_error(E_WARNING, "Invalid argument supplied for foreach()"); - is_empty = 1; - } - - if (opline->extended_value & ZEND_FE_RESET_VARIABLE) { - - } else { - - } - if (is_empty) { - ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num); - } else { - ZEND_VM_NEXT_OPCODE(); - } -} - -static int ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval tmp, *varname = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC); - zval **value; - zend_bool isset = 1; - HashTable *target_symbol_table; - - if (Z_TYPE_P(varname) != IS_STRING && Z_TYPE_P(varname) != IS_UNICODE) { - tmp = *varname; - zval_copy_ctor(&tmp); - convert_to_text(&tmp); - varname = &tmp; - } - - if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) { - value = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname), 1 TSRMLS_CC); - if (!value) { - isset = 0; - } - } else { - target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), BP_VAR_IS, varname TSRMLS_CC); - if (zend_u_hash_find(target_symbol_table, Z_TYPE_P(varname), Z_UNIVAL_P(varname), Z_UNILEN_P(varname)+1, (void **) &value) == FAILURE) { - isset = 0; - } - } - - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - switch (opline->extended_value) { - case ZEND_ISSET: - if (isset && Z_TYPE_PP(value) == IS_NULL) { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0; - } else { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = isset; - } - break; - case ZEND_ISEMPTY: - if (!isset || !i_zend_is_true(*value)) { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 1; - } else { - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0; - } - break; - } - - if (varname == &tmp) { - zval_dtor(&tmp); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_EXIT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ -#if 0 || (IS_CV != IS_UNUSED) - zend_op *opline = EX(opline); - if (IS_CV != IS_UNUSED) { - - zval *ptr = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(ptr) == IS_LONG) { - EG(exit_status) = Z_LVAL_P(ptr); - } else { - zend_print_variable(ptr); - } - - } -#endif - zend_bailout(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *value = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (i_zend_is_true(value)) { - EX_T(opline->result.u.var).tmp_var = *value; - zendi_zval_copy_ctor(EX_T(opline->result.u.var).tmp_var); - -#if DEBUG_ZEND>=2 - printf("Conditional jmp to %d\n", opline->op2.u.opline_num); -#endif - ZEND_VM_JMP(opline->op2.u.jmp_addr); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *value = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - - EX_T(opline->result.u.var).tmp_var = *value; - if (!0) { - zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INSTANCEOF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *expr = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - zend_bool result; - - if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->get_class_entry) { - result = instanceof_function(Z_OBJCE_P(expr), EX_T(opline->op2.u.var).class_entry TSRMLS_CC); - } else { - result = 0; - } - ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var, result); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_U_NORMALIZE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *string = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - zval *result = &EX_T(opline->result.u.var).tmp_var; - - *result = *string; - if (!0) { - zendi_zval_copy_ctor(*result); - } - - if (UG(unicode)) { - zval var_copy; - int use_copy; - UChar *norm; - int norm_len; - - zend_make_unicode_zval(result, &var_copy, &use_copy); - if (use_copy) { - zval_dtor(result); - *result = var_copy; - } - if (zend_normalize_identifier(&norm, &norm_len, - Z_USTRVAL_P(result), Z_USTRLEN_P(result), 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", Z_USTRVAL_P(result)); - } else if (norm != Z_USTRVAL_P(result)) { - efree(Z_USTRVAL_P(result)); - ZVAL_UNICODEL(result, norm, norm_len, 0); - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - add_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - sub_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - mul_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - div_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - mod_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - shift_left_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - shift_right_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - concat_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_not_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_not_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_smaller_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - bitwise_or_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - bitwise_and_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - boolean_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_obj_helper_SPEC_CV_CONST(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op_data1; - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - zval *object; - zval *property = &opline->op2.u.constant; - zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - znode *result = &opline->result; - zval **retval = &EX_T(result->u.var).var.ptr; - int have_get_ptr = 0; - - EX_T(result->u.var).var.ptr_ptr = NULL; - make_real_object(object_ptr TSRMLS_CC); - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - - FREE_OP(free_op_data1); - - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } else { - /* here we are sure we are dealing with an object */ - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - /* here property is a string */ - if (opline->extended_value == ZEND_ASSIGN_OBJ - && Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - binary_op(*zptr, *zptr, value TSRMLS_CC); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - zval *z = NULL; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - if (Z_OBJ_HT_P(object)->read_property) { - z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - } - break; - case ZEND_ASSIGN_DIM: - if (Z_OBJ_HT_P(object)->read_dimension) { - z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC); - } - break; - } - if (z) { - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - binary_op(z, z, value TSRMLS_CC); - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - break; - case ZEND_ASSIGN_DIM: - Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC); - break; - } - if (!RETURN_VALUE_UNUSED(result)) { - *retval = z; - PZVAL_LOCK(*retval); - } - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - FREE_OP(free_op_data1); - } - - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_helper_SPEC_CV_CONST(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op_data2, free_op_data1; - zval **var_ptr; - zval *value; - zend_bool increment_opline = 0; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - return zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - break; - case ZEND_ASSIGN_DIM: { - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - - if (object_ptr && IS_CV != IS_CV && !0) { - (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - return zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } else { - zend_op *op_data = opline+1; - zval *dim = &opline->op2.u.constant; - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW); - increment_opline = 1; - } - } - break; - default: - value = &opline->op2.u.constant; - var_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC); - /* do nothing */ - break; - } - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets"); - } - - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - } - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - objval->refcount++; - binary_op(objval, objval, value TSRMLS_CC); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC); - zval_ptr_dtor(&objval); - } else { - binary_op(*var_ptr, *var_ptr, value TSRMLS_CC); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - FREE_OP(free_op_data1); - FREE_OP_VAR_PTR(free_op_data2); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CONST(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CONST(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CONST(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CONST(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CONST(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CONST(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CONST(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CONST(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_pre_incdec_property_helper_SPEC_CV_CONST(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - zval *object; - zval *property = &opline->op2.u.constant; - zval **retval = &EX_T(opline->result.u.var).var.ptr; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - incdec_op(*zptr); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - incdec_op(z); - *retval = z; - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_CV_CONST(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_CV_CONST(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_post_incdec_property_helper_SPEC_CV_CONST(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - zval *object; - zval *property = &opline->op2.u.constant; - zval *retval = &EX_T(opline->result.u.var).tmp_var; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - - *retval = *EG(uninitialized_zval_ptr); - - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - have_get_ptr = 1; - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - *retval = **zptr; - zendi_zval_copy_ctor(*retval); - - incdec_op(*zptr); - - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - zval *z_copy; - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - *retval = *z; - zendi_zval_copy_ctor(*retval); - ALLOC_ZVAL(z_copy); - *z_copy = *z; - zendi_zval_copy_ctor(*z_copy); - INIT_PZVAL(z_copy); - incdec_op(z_copy); - z->refcount++; - Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC); - zval_ptr_dtor(&z_copy); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - *retval = *EG(uninitialized_zval_ptr); - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_CV_CONST(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_POST_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_CV_CONST(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *dim = &opline->op2.u.constant; - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && - IS_CV != IS_CV && - EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *dim = &opline->op2.u.constant; - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC); - - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *dim = &opline->op2.u.constant; - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); - - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *dim = &opline->op2.u.constant; - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC), dim, 0, BP_VAR_IS TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R; - zval *dim; - - if (IS_CONST == IS_UNUSED && type == BP_VAR_R) { - zend_error_noreturn(E_ERROR, "Cannot use [] for reading"); - } - dim = &opline->op2.u.constant; - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 0, type TSRMLS_CC); - - if (IS_CV == IS_VAR && type == BP_VAR_W && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC); - zval *dim = &opline->op2.u.constant; - - /* Not needed in DIM_UNSET - if (opline->extended_value == ZEND_FETCH_ADD_LOCK) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - */ - if (IS_CV == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC); - - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (EX_T(opline->result.u.var).var.ptr_ptr == NULL) { - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - } else { - zend_free_op free_res; - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_fetch_property_address_read_helper_SPEC_CV_CONST(int type, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *container; - zval **retval; - - - retval = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.ptr_ptr = retval; - - container = _get_zval_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC); - - if (container == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(error_zval_ptr); - PZVAL_LOCK(*retval); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); - } - - - if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) { - if (type != BP_VAR_IS) { - zend_error(E_NOTICE, "Trying to get property of non-object"); - } - *retval = EG(uninitialized_zval_ptr); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } else { - - zval *offset = &opline->op2.u.constant; - - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - - /* here we are sure we are dealing with an object */ - *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC); - - if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) { - zval_dtor(*retval); - FREE_ZVAL(*retval); - } else { - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_CV_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *property = &opline->op2.u.constant; - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_CV != IS_CV) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr; - } - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *property = &opline->op2.u.constant; - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_CV_CONST(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { - /* Behave like FETCH_OBJ_W */ - zend_free_op free_op1; - zval *property = &opline->op2.u.constant; - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); - } else { - return zend_fetch_property_address_read_helper_SPEC_CV_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } -} - -static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_res; - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - zval *property = &opline->op2.u.constant; - - if (IS_CV == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC); - - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - - zval **object_ptr; - - if (IS_CV == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) { - /* not an array offset */ - object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - } else { - object_ptr = NULL; - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC); - } else { - zend_free_op free_op_data1; - zval *value; - zval *dim = &opline->op2.u.constant; - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC); - - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC); - FREE_OP_IF_VAR(free_op_data1); - } - - /* assign_dim has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *value = &opline->op2.u.constant; - - zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (0?IS_TMP_VAR:IS_CONST), EX(Ts) TSRMLS_CC); - /* zend_assign_to_variable() always takes care of op2, never free it! */ - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zstr function_name_strval; - int function_name_strlen; - - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - function_name = &opline->op2.u.constant; - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Method name must be a string"); - } - - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - EX(object) = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) { - if (Z_OBJ_HT_P(EX(object))->get_method == NULL) { - zend_error_noreturn(E_ERROR, "Object does not support method calls"); - } - - /* First, locate the function. */ - EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC); - if (!EX(fbc)) { - zend_error_noreturn(E_ERROR, "Call to undefined method %R::%R()", type, Z_OBJ_CLASS_NAME_P(EX(object)), Z_TYPE_P(function_name), function_name_strval); - } - } else { - zend_error_noreturn(E_ERROR, "Call to a member function %R() on a non-object", Z_TYPE_P(function_name), function_name_strval); - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (!PZVAL_IS_REF(EX(object))) { - EX(object)->refcount++; /* For $this pointer */ - } else { - zval *this_ptr; - ALLOC_ZVAL(this_ptr); - INIT_PZVAL_COPY(this_ptr, EX(object)); - zval_copy_ctor(this_ptr); - EX(object) = this_ptr; - } - } - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CASE_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - int switch_expr_is_overloaded=0; - - - if (IS_CV==IS_VAR) { - if (EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr); - } else { - switch_expr_is_overloaded = 1; - EX_T(opline->op1.u.var).str_offset.str->refcount++; - } - } - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - &opline->op2.u.constant TSRMLS_CC); - - if (switch_expr_is_overloaded) { - /* We only free op1 if this is a string offset, - * Since if it is a TMP_VAR, it'll be reused by - * other CASE opcodes (whereas string offsets - * are allocated at each get_zval_ptr()) - */ - - EX_T(opline->op1.u.var).var.ptr_ptr = NULL; - AI_USE_PTR(EX_T(opline->op1.u.var).var); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=&opline->op2.u.constant; - -#if 0 || IS_CV == IS_VAR || IS_CV == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=_get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - } -#else - expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); -#endif - - if (0) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_CV == IS_VAR || IS_CV == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_CV == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_CV != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC); - zval *offset = &opline->op2.u.constant; - long index; - - if (container) { - if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - switch (Z_TYPE_PP(container)) { - case IS_ARRAY: { - HashTable *ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, - offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key.u); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } else if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { - offset->refcount++; - } - - if (zend_u_symtable_del(ht, Z_TYPE_P(offset), offset_key, offset_len+1) == SUCCESS && - ht == &EG(symbol_table)) { - zend_execute_data *ex; - ulong hash_value = zend_u_inline_hash_func(Z_TYPE_P(offset), offset_key, offset_len+1); - - for (ex = execute_data; ex; ex = ex->prev_execute_data) { - if (ex->op_array && ex->symbol_table == ht) { - int i; - - for (i = 0; i < ex->op_array->last_var; i++) { - if (ex->op_array->vars[i].hash_value == hash_value && - ex->op_array->vars[i].name_len == offset_len && - !memcmp(ex->op_array->vars[i].name.v, offset_key.v, Z_TYPE_P(offset)==IS_UNICODE?UBYTES(offset_len):offset_len)) { - ex->CVs[i] = NULL; - break; - } - } - } - } - } - if (free_offset) { - efree(offset_key.v); - } else if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { - zval_ptr_dtor(&offset); - } - break; - } - case IS_NULL: - zend_u_hash_del(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof("")); - break; - default: - zend_error(E_WARNING, "Illegal offset type in unset"); - break; - } - - break; - } - case IS_OBJECT: - if (!Z_OBJ_HT_P(*container)->unset_dimension) { - zend_error_noreturn(E_ERROR, "Cannot use object as array"); - } - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC); - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - break; - case IS_STRING: - case IS_UNICODE: - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - ZEND_VM_CONTINUE(); /* bailed out before */ - default: - - break; - } - } else { - - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC); - zval *offset = &opline->op2.u.constant; - - if (container) { - if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - if (Z_TYPE_PP(container) == IS_OBJECT) { - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - } else { - - } - } else { - - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CONST(int prop_dim, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC); - zval **value = NULL; - int result = 0; - long index; - - if (container) { - - zval *offset = &opline->op2.u.constant; - - if (Z_TYPE_PP(container) == IS_ARRAY) { - HashTable *ht; - int isset = 0; - - ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } - if (zend_u_symtable_find(ht, Z_TYPE_P(offset), offset_key, offset_len+1, (void **) &value) == SUCCESS) { - isset = 1; - } - if (free_offset) { - efree(offset_key.v); - } - break; - } - case IS_NULL: - if (zend_u_hash_find(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), (void **) &value) == SUCCESS) { - isset = 1; - } - break; - default: - zend_error(E_WARNING, "Illegal offset type in isset or empty"); - - break; - } - - switch (opline->extended_value) { - case ZEND_ISSET: - if (isset && Z_TYPE_PP(value) == IS_NULL) { - result = 0; - } else { - result = isset; - } - break; - case ZEND_ISEMPTY: - if (!isset || !i_zend_is_true(*value)) { - result = 0; - } else { - result = 1; - } - break; - } - - } else if (Z_TYPE_PP(container) == IS_OBJECT) { - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - if (prop_dim) { - result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } else { - result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - } else if ((Z_TYPE_PP(container) == IS_STRING || - Z_TYPE_PP(container) == IS_UNICODE) && !prop_dim) { /* string offsets */ - zval tmp; - - if (Z_TYPE_P(offset) != IS_LONG) { - tmp = *offset; - zval_copy_ctor(&tmp); - convert_to_long(&tmp); - offset = &tmp; - } - if (Z_TYPE_P(offset) == IS_LONG) { - switch (opline->extended_value) { - case ZEND_ISSET: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container)) { - result = 1; - } - break; - case ZEND_ISEMPTY: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container) && - ((Z_TYPE_PP(container) == IS_UNICODE)? - (Z_USTRVAL_PP(container)[Z_LVAL_P(offset)] != 0): - (Z_STRVAL_PP(container)[Z_LVAL_P(offset)] != '0'))) { - result = 1; - } - break; - } - } - - } else { - - } - } - - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - switch (opline->extended_value) { - case ZEND_ISSET: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result; - break; - case ZEND_ISEMPTY: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result; - break; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CONST(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CONST(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ADD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - add_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SUB_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - sub_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MUL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - mul_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DIV_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - div_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MOD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - mod_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - shift_left_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - shift_right_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CONCAT_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - concat_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_not_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_EQUAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_EQUAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_not_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_smaller_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_OR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - bitwise_or_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_AND_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - bitwise_and_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_XOR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_XOR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - boolean_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_obj_helper_SPEC_CV_TMP(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op2, free_op_data1; - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - zval *object; - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - znode *result = &opline->result; - zval **retval = &EX_T(result->u.var).var.ptr; - int have_get_ptr = 0; - - EX_T(result->u.var).var.ptr_ptr = NULL; - make_real_object(object_ptr TSRMLS_CC); - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - zval_dtor(free_op2.var); - FREE_OP(free_op_data1); - - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } else { - /* here we are sure we are dealing with an object */ - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - - /* here property is a string */ - if (opline->extended_value == ZEND_ASSIGN_OBJ - && Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - binary_op(*zptr, *zptr, value TSRMLS_CC); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - zval *z = NULL; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - if (Z_OBJ_HT_P(object)->read_property) { - z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - } - break; - case ZEND_ASSIGN_DIM: - if (Z_OBJ_HT_P(object)->read_dimension) { - z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC); - } - break; - } - if (z) { - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - binary_op(z, z, value TSRMLS_CC); - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - break; - case ZEND_ASSIGN_DIM: - Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC); - break; - } - if (!RETURN_VALUE_UNUSED(result)) { - *retval = z; - PZVAL_LOCK(*retval); - } - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - FREE_OP(free_op_data1); - } - - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_helper_SPEC_CV_TMP(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2, free_op_data2, free_op_data1; - zval **var_ptr; - zval *value; - zend_bool increment_opline = 0; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - return zend_binary_assign_op_obj_helper_SPEC_CV_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - break; - case ZEND_ASSIGN_DIM: { - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - - if (object_ptr && IS_CV != IS_CV && !0) { - (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - return zend_binary_assign_op_obj_helper_SPEC_CV_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } else { - zend_op *op_data = opline+1; - zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 1, BP_VAR_RW TSRMLS_CC); - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW); - increment_opline = 1; - } - } - break; - default: - value = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - var_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC); - /* do nothing */ - break; - } - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets"); - } - - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - zval_dtor(free_op2.var); - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - } - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - objval->refcount++; - binary_op(objval, objval, value TSRMLS_CC); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC); - zval_ptr_dtor(&objval); - } else { - binary_op(*var_ptr, *var_ptr, value TSRMLS_CC); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - zval_dtor(free_op2.var); - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - FREE_OP(free_op_data1); - FREE_OP_VAR_PTR(free_op_data2); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_ADD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_TMP(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SUB_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_TMP(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MUL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_TMP(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_DIV_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_TMP(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MOD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_TMP(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_TMP(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_TMP(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_CONCAT_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_TMP(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_OR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_TMP(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_AND_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_TMP(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_XOR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_TMP(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_pre_incdec_property_helper_SPEC_CV_TMP(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - zval *object; - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval **retval = &EX_T(opline->result.u.var).var.ptr; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - zval_dtor(free_op2.var); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - incdec_op(*zptr); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - incdec_op(z); - *retval = z; - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRE_INC_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_CV_TMP(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_PRE_DEC_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_CV_TMP(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_post_incdec_property_helper_SPEC_CV_TMP(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - zval *object; - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval *retval = &EX_T(opline->result.u.var).tmp_var; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - zval_dtor(free_op2.var); - *retval = *EG(uninitialized_zval_ptr); - - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - have_get_ptr = 1; - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - *retval = **zptr; - zendi_zval_copy_ctor(*retval); - - incdec_op(*zptr); - - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - zval *z_copy; - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - *retval = *z; - zendi_zval_copy_ctor(*retval); - ALLOC_ZVAL(z_copy); - *z_copy = *z; - zendi_zval_copy_ctor(*z_copy); - INIT_PZVAL(z_copy); - incdec_op(z_copy); - z->refcount++; - Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC); - zval_ptr_dtor(&z_copy); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - *retval = *EG(uninitialized_zval_ptr); - } - } - - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_POST_INC_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_CV_TMP(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_POST_DEC_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_CV_TMP(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_DIM_R_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && - IS_CV != IS_CV && - EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), dim, 1, BP_VAR_R TSRMLS_CC); - zval_dtor(free_op2.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_W_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 1, BP_VAR_W TSRMLS_CC); - zval_dtor(free_op2.var); - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_RW_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 1, BP_VAR_RW TSRMLS_CC); - zval_dtor(free_op2.var); - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_IS_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC), dim, 1, BP_VAR_IS TSRMLS_CC); - zval_dtor(free_op2.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R; - zval *dim; - - if (IS_TMP_VAR == IS_UNUSED && type == BP_VAR_R) { - zend_error_noreturn(E_ERROR, "Cannot use [] for reading"); - } - dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 1, type TSRMLS_CC); - zval_dtor(free_op2.var); - if (IS_CV == IS_VAR && type == BP_VAR_W && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_UNSET_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC); - zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - /* Not needed in DIM_UNSET - if (opline->extended_value == ZEND_FETCH_ADD_LOCK) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - */ - if (IS_CV == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_UNSET TSRMLS_CC); - zval_dtor(free_op2.var); - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (EX_T(opline->result.u.var).var.ptr_ptr == NULL) { - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - } else { - zend_free_op free_res; - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_fetch_property_address_read_helper_SPEC_CV_TMP(int type, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *container; - zval **retval; - - - retval = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.ptr_ptr = retval; - - container = _get_zval_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC); - - if (container == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(error_zval_ptr); - PZVAL_LOCK(*retval); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); - } - - - if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) { - if (type != BP_VAR_IS) { - zend_error(E_NOTICE, "Trying to get property of non-object"); - } - *retval = EG(uninitialized_zval_ptr); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } else { - zend_free_op free_op2; - zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (1) { - MAKE_REAL_ZVAL_PTR(offset); - } - - /* here we are sure we are dealing with an object */ - *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC); - - if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) { - zval_dtor(*retval); - FREE_ZVAL(*retval); - } else { - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (1) { - zval_ptr_dtor(&offset); - } else { - zval_dtor(free_op2.var); - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_R_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_CV_TMP(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_W_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_CV != IS_CV) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr; - } - - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC); - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_RW_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC); - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_IS_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_CV_TMP(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { - /* Behave like FETCH_OBJ_W */ - zend_free_op free_op1, free_op2; - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC); - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); - } else { - return zend_fetch_property_address_read_helper_SPEC_CV_TMP(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } -} - -static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2, free_res; - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (IS_CV == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - if (1) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); - if (1) { - zval_ptr_dtor(&property); - } else { - zval_dtor(free_op2.var); - } - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC); - - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_DIM_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - - zval **object_ptr; - - if (IS_CV == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) { - /* not an array offset */ - object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - } else { - object_ptr = NULL; - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC); - } else { - zend_free_op free_op2, free_op_data1; - zval *value; - zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 1, BP_VAR_W TSRMLS_CC); - zval_dtor(free_op2.var); - - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC); - FREE_OP_IF_VAR(free_op_data1); - } - - /* assign_dim has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval *value = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (1?IS_TMP_VAR:IS_TMP_VAR), EX(Ts) TSRMLS_CC); - /* zend_assign_to_variable() always takes care of op2, never free it! */ - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_METHOD_CALL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zstr function_name_strval; - int function_name_strlen; - zend_free_op free_op2; - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - function_name = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Method name must be a string"); - } - - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - EX(object) = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) { - if (Z_OBJ_HT_P(EX(object))->get_method == NULL) { - zend_error_noreturn(E_ERROR, "Object does not support method calls"); - } - - /* First, locate the function. */ - EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC); - if (!EX(fbc)) { - zend_error_noreturn(E_ERROR, "Call to undefined method %R::%R()", type, Z_OBJ_CLASS_NAME_P(EX(object)), Z_TYPE_P(function_name), function_name_strval); - } - } else { - zend_error_noreturn(E_ERROR, "Call to a member function %R() on a non-object", Z_TYPE_P(function_name), function_name_strval); - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (!PZVAL_IS_REF(EX(object))) { - EX(object)->refcount++; /* For $this pointer */ - } else { - zval *this_ptr; - ALLOC_ZVAL(this_ptr); - INIT_PZVAL_COPY(this_ptr, EX(object)); - zval_copy_ctor(this_ptr); - EX(object) = this_ptr; - } - } - - zval_dtor(free_op2.var); - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CASE_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - int switch_expr_is_overloaded=0; - zend_free_op free_op2; - - if (IS_CV==IS_VAR) { - if (EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr); - } else { - switch_expr_is_overloaded = 1; - EX_T(opline->op1.u.var).str_offset.str->refcount++; - } - } - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - zval_dtor(free_op2.var); - if (switch_expr_is_overloaded) { - /* We only free op1 if this is a string offset, - * Since if it is a TMP_VAR, it'll be reused by - * other CASE opcodes (whereas string offsets - * are allocated at each get_zval_ptr()) - */ - - EX_T(opline->op1.u.var).var.ptr_ptr = NULL; - AI_USE_PTR(EX_T(opline->op1.u.var).var); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - -#if 0 || IS_CV == IS_VAR || IS_CV == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=_get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - } -#else - expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); -#endif - - if (0) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_CV == IS_VAR || IS_CV == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - zval_dtor(free_op2.var); - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_CV == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_CV != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_UNSET_DIM_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC); - zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - long index; - - if (container) { - if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - switch (Z_TYPE_PP(container)) { - case IS_ARRAY: { - HashTable *ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, - offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key.u); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } else if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { - offset->refcount++; - } - - if (zend_u_symtable_del(ht, Z_TYPE_P(offset), offset_key, offset_len+1) == SUCCESS && - ht == &EG(symbol_table)) { - zend_execute_data *ex; - ulong hash_value = zend_u_inline_hash_func(Z_TYPE_P(offset), offset_key, offset_len+1); - - for (ex = execute_data; ex; ex = ex->prev_execute_data) { - if (ex->op_array && ex->symbol_table == ht) { - int i; - - for (i = 0; i < ex->op_array->last_var; i++) { - if (ex->op_array->vars[i].hash_value == hash_value && - ex->op_array->vars[i].name_len == offset_len && - !memcmp(ex->op_array->vars[i].name.v, offset_key.v, Z_TYPE_P(offset)==IS_UNICODE?UBYTES(offset_len):offset_len)) { - ex->CVs[i] = NULL; - break; - } - } - } - } - } - if (free_offset) { - efree(offset_key.v); - } else if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { - zval_ptr_dtor(&offset); - } - break; - } - case IS_NULL: - zend_u_hash_del(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof("")); - break; - default: - zend_error(E_WARNING, "Illegal offset type in unset"); - break; - } - zval_dtor(free_op2.var); - break; - } - case IS_OBJECT: - if (!Z_OBJ_HT_P(*container)->unset_dimension) { - zend_error_noreturn(E_ERROR, "Cannot use object as array"); - } - if (1) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC); - if (1) { - zval_ptr_dtor(&offset); - } else { - zval_dtor(free_op2.var); - } - break; - case IS_STRING: - case IS_UNICODE: - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - ZEND_VM_CONTINUE(); /* bailed out before */ - default: - zval_dtor(free_op2.var); - break; - } - } else { - zval_dtor(free_op2.var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_UNSET_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC); - zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (container) { - if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - if (Z_TYPE_PP(container) == IS_OBJECT) { - if (1) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); - if (1) { - zval_ptr_dtor(&offset); - } else { - zval_dtor(free_op2.var); - } - } else { - zval_dtor(free_op2.var); - } - } else { - zval_dtor(free_op2.var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_TMP(int prop_dim, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC); - zval **value = NULL; - int result = 0; - long index; - - if (container) { - zend_free_op free_op2; - zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (Z_TYPE_PP(container) == IS_ARRAY) { - HashTable *ht; - int isset = 0; - - ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } - if (zend_u_symtable_find(ht, Z_TYPE_P(offset), offset_key, offset_len+1, (void **) &value) == SUCCESS) { - isset = 1; - } - if (free_offset) { - efree(offset_key.v); - } - break; - } - case IS_NULL: - if (zend_u_hash_find(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), (void **) &value) == SUCCESS) { - isset = 1; - } - break; - default: - zend_error(E_WARNING, "Illegal offset type in isset or empty"); - - break; - } - - switch (opline->extended_value) { - case ZEND_ISSET: - if (isset && Z_TYPE_PP(value) == IS_NULL) { - result = 0; - } else { - result = isset; - } - break; - case ZEND_ISEMPTY: - if (!isset || !i_zend_is_true(*value)) { - result = 0; - } else { - result = 1; - } - break; - } - zval_dtor(free_op2.var); - } else if (Z_TYPE_PP(container) == IS_OBJECT) { - if (1) { - MAKE_REAL_ZVAL_PTR(offset); - } - if (prop_dim) { - result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } else { - result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } - if (1) { - zval_ptr_dtor(&offset); - } else { - zval_dtor(free_op2.var); - } - } else if ((Z_TYPE_PP(container) == IS_STRING || - Z_TYPE_PP(container) == IS_UNICODE) && !prop_dim) { /* string offsets */ - zval tmp; - - if (Z_TYPE_P(offset) != IS_LONG) { - tmp = *offset; - zval_copy_ctor(&tmp); - convert_to_long(&tmp); - offset = &tmp; - } - if (Z_TYPE_P(offset) == IS_LONG) { - switch (opline->extended_value) { - case ZEND_ISSET: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container)) { - result = 1; - } - break; - case ZEND_ISEMPTY: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container) && - ((Z_TYPE_PP(container) == IS_UNICODE)? - (Z_USTRVAL_PP(container)[Z_LVAL_P(offset)] != 0): - (Z_STRVAL_PP(container)[Z_LVAL_P(offset)] != '0'))) { - result = 1; - } - break; - } - } - zval_dtor(free_op2.var); - } else { - zval_dtor(free_op2.var); - } - } - - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - switch (opline->extended_value) { - case ZEND_ISSET: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result; - break; - case ZEND_ISEMPTY: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result; - break; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_TMP(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_TMP(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ADD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - add_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SUB_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - sub_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MUL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - mul_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DIV_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - div_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MOD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - mod_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - shift_left_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - shift_right_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CONCAT_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - concat_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_not_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_EQUAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_EQUAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_not_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_smaller_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_OR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - bitwise_or_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_AND_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - bitwise_and_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_XOR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_XOR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - - boolean_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_obj_helper_SPEC_CV_VAR(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op2, free_op_data1; - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - zval *object; - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - znode *result = &opline->result; - zval **retval = &EX_T(result->u.var).var.ptr; - int have_get_ptr = 0; - - EX_T(result->u.var).var.ptr_ptr = NULL; - make_real_object(object_ptr TSRMLS_CC); - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - FREE_OP(free_op_data1); - - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } else { - /* here we are sure we are dealing with an object */ - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - /* here property is a string */ - if (opline->extended_value == ZEND_ASSIGN_OBJ - && Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - binary_op(*zptr, *zptr, value TSRMLS_CC); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - zval *z = NULL; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - if (Z_OBJ_HT_P(object)->read_property) { - z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - } - break; - case ZEND_ASSIGN_DIM: - if (Z_OBJ_HT_P(object)->read_dimension) { - z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC); - } - break; - } - if (z) { - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - binary_op(z, z, value TSRMLS_CC); - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - break; - case ZEND_ASSIGN_DIM: - Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC); - break; - } - if (!RETURN_VALUE_UNUSED(result)) { - *retval = z; - PZVAL_LOCK(*retval); - } - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - FREE_OP(free_op_data1); - } - - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_helper_SPEC_CV_VAR(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2, free_op_data2, free_op_data1; - zval **var_ptr; - zval *value; - zend_bool increment_opline = 0; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - return zend_binary_assign_op_obj_helper_SPEC_CV_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - break; - case ZEND_ASSIGN_DIM: { - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - - if (object_ptr && IS_CV != IS_CV && !0) { - (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - return zend_binary_assign_op_obj_helper_SPEC_CV_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } else { - zend_op *op_data = opline+1; - zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW); - increment_opline = 1; - } - } - break; - default: - value = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - var_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC); - /* do nothing */ - break; - } - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets"); - } - - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - } - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - objval->refcount++; - binary_op(objval, objval, value TSRMLS_CC); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC); - zval_ptr_dtor(&objval); - } else { - binary_op(*var_ptr, *var_ptr, value TSRMLS_CC); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - FREE_OP(free_op_data1); - FREE_OP_VAR_PTR(free_op_data2); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_ADD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_VAR(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SUB_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_VAR(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MUL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_VAR(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_DIV_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_VAR(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MOD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_VAR(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_VAR(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_VAR(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_CONCAT_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_VAR(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_OR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_VAR(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_AND_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_VAR(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_XOR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_VAR(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_pre_incdec_property_helper_SPEC_CV_VAR(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - zval *object; - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval **retval = &EX_T(opline->result.u.var).var.ptr; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - incdec_op(*zptr); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - incdec_op(z); - *retval = z; - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRE_INC_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_CV_VAR(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_PRE_DEC_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_CV_VAR(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_post_incdec_property_helper_SPEC_CV_VAR(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - zval *object; - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zval *retval = &EX_T(opline->result.u.var).tmp_var; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - *retval = *EG(uninitialized_zval_ptr); - - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - have_get_ptr = 1; - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - *retval = **zptr; - zendi_zval_copy_ctor(*retval); - - incdec_op(*zptr); - - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - zval *z_copy; - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - *retval = *z; - zendi_zval_copy_ctor(*retval); - ALLOC_ZVAL(z_copy); - *z_copy = *z; - zendi_zval_copy_ctor(*z_copy); - INIT_PZVAL(z_copy); - incdec_op(z_copy); - z->refcount++; - Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC); - zval_ptr_dtor(&z_copy); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - *retval = *EG(uninitialized_zval_ptr); - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_POST_INC_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_CV_VAR(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_POST_DEC_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_CV_VAR(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_DIM_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && - IS_CV != IS_CV && - EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_IS_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC), dim, 0, BP_VAR_IS TSRMLS_CC); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R; - zval *dim; - - if (IS_VAR == IS_UNUSED && type == BP_VAR_R) { - zend_error_noreturn(E_ERROR, "Cannot use [] for reading"); - } - dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 0, type TSRMLS_CC); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - if (IS_CV == IS_VAR && type == BP_VAR_W && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC); - zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - /* Not needed in DIM_UNSET - if (opline->extended_value == ZEND_FETCH_ADD_LOCK) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - */ - if (IS_CV == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (EX_T(opline->result.u.var).var.ptr_ptr == NULL) { - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - } else { - zend_free_op free_res; - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_fetch_property_address_read_helper_SPEC_CV_VAR(int type, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *container; - zval **retval; - - - retval = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.ptr_ptr = retval; - - container = _get_zval_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC); - - if (container == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(error_zval_ptr); - PZVAL_LOCK(*retval); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); - } - - - if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) { - if (type != BP_VAR_IS) { - zend_error(E_NOTICE, "Trying to get property of non-object"); - } - *retval = EG(uninitialized_zval_ptr); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } else { - zend_free_op free_op2; - zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - - /* here we are sure we are dealing with an object */ - *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC); - - if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) { - zval_dtor(*retval); - FREE_ZVAL(*retval); - } else { - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (0) { - zval_ptr_dtor(&offset); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_CV_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_CV != IS_CV) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr; - } - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2; - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_IS_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_CV_VAR(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { - /* Behave like FETCH_OBJ_W */ - zend_free_op free_op1, free_op2; - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); - } else { - return zend_fetch_property_address_read_helper_SPEC_CV_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } -} - -static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_op2, free_res; - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (IS_CV == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC); - - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_DIM_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - - zval **object_ptr; - - if (IS_CV == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) { - /* not an array offset */ - object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - } else { - object_ptr = NULL; - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC); - } else { - zend_free_op free_op2, free_op_data1; - zval *value; - zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC); - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC); - FREE_OP_IF_VAR(free_op_data1); - } - - /* assign_dim has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval *value = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (0?IS_TMP_VAR:IS_VAR), EX(Ts) TSRMLS_CC); - /* zend_assign_to_variable() always takes care of op2, never free it! */ - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval **variable_ptr_ptr; - zval **value_ptr_ptr = _get_zval_ptr_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (IS_VAR == IS_VAR && - value_ptr_ptr && - !(*value_ptr_ptr)->is_ref && - opline->extended_value == ZEND_RETURNS_FUNCTION && - !EX_T(opline->op2.u.var).var.fcall_returned_reference) { - if (free_op2.var == NULL) { - PZVAL_LOCK(*value_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */ - } - zend_error(E_STRICT, "Only variables should be assigned by reference"); - return ZEND_ASSIGN_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } - if (IS_CV == IS_VAR && EX_T(opline->op1.u.var).var.ptr_ptr == &EX_T(opline->op1.u.var).var.ptr) { - zend_error(E_ERROR, "Cannot assign by reference to overloaded object"); - } - - variable_ptr_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - zend_assign_to_variable_reference(variable_ptr_ptr, value_ptr_ptr TSRMLS_CC); - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = variable_ptr_ptr; - PZVAL_LOCK(*variable_ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_METHOD_CALL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zstr function_name_strval; - int function_name_strlen; - zend_free_op free_op2; - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - function_name = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Method name must be a string"); - } - - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - EX(object) = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) { - if (Z_OBJ_HT_P(EX(object))->get_method == NULL) { - zend_error_noreturn(E_ERROR, "Object does not support method calls"); - } - - /* First, locate the function. */ - EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC); - if (!EX(fbc)) { - zend_error_noreturn(E_ERROR, "Call to undefined method %R::%R()", type, Z_OBJ_CLASS_NAME_P(EX(object)), Z_TYPE_P(function_name), function_name_strval); - } - } else { - zend_error_noreturn(E_ERROR, "Call to a member function %R() on a non-object", Z_TYPE_P(function_name), function_name_strval); - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (!PZVAL_IS_REF(EX(object))) { - EX(object)->refcount++; /* For $this pointer */ - } else { - zval *this_ptr; - ALLOC_ZVAL(this_ptr); - INIT_PZVAL_COPY(this_ptr, EX(object)); - zval_copy_ctor(this_ptr); - EX(object) = this_ptr; - } - } - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CASE_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - int switch_expr_is_overloaded=0; - zend_free_op free_op2; - - if (IS_CV==IS_VAR) { - if (EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr); - } else { - switch_expr_is_overloaded = 1; - EX_T(opline->op1.u.var).str_offset.str->refcount++; - } - } - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC); - - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - if (switch_expr_is_overloaded) { - /* We only free op1 if this is a string offset, - * Since if it is a TMP_VAR, it'll be reused by - * other CASE opcodes (whereas string offsets - * are allocated at each get_zval_ptr()) - */ - - EX_T(opline->op1.u.var).var.ptr_ptr = NULL; - AI_USE_PTR(EX_T(opline->op1.u.var).var); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - -#if 0 || IS_CV == IS_VAR || IS_CV == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=_get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - } -#else - expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); -#endif - - if (0) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_CV == IS_VAR || IS_CV == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_CV == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_CV != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_UNSET_DIM_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC); - zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - long index; - - if (container) { - if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - switch (Z_TYPE_PP(container)) { - case IS_ARRAY: { - HashTable *ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, - offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key.u); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } else if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { - offset->refcount++; - } - - if (zend_u_symtable_del(ht, Z_TYPE_P(offset), offset_key, offset_len+1) == SUCCESS && - ht == &EG(symbol_table)) { - zend_execute_data *ex; - ulong hash_value = zend_u_inline_hash_func(Z_TYPE_P(offset), offset_key, offset_len+1); - - for (ex = execute_data; ex; ex = ex->prev_execute_data) { - if (ex->op_array && ex->symbol_table == ht) { - int i; - - for (i = 0; i < ex->op_array->last_var; i++) { - if (ex->op_array->vars[i].hash_value == hash_value && - ex->op_array->vars[i].name_len == offset_len && - !memcmp(ex->op_array->vars[i].name.v, offset_key.v, Z_TYPE_P(offset)==IS_UNICODE?UBYTES(offset_len):offset_len)) { - ex->CVs[i] = NULL; - break; - } - } - } - } - } - if (free_offset) { - efree(offset_key.v); - } else if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { - zval_ptr_dtor(&offset); - } - break; - } - case IS_NULL: - zend_u_hash_del(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof("")); - break; - default: - zend_error(E_WARNING, "Illegal offset type in unset"); - break; - } - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - break; - } - case IS_OBJECT: - if (!Z_OBJ_HT_P(*container)->unset_dimension) { - zend_error_noreturn(E_ERROR, "Cannot use object as array"); - } - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC); - if (0) { - zval_ptr_dtor(&offset); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - break; - case IS_STRING: - case IS_UNICODE: - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - ZEND_VM_CONTINUE(); /* bailed out before */ - default: - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - break; - } - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_UNSET_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC); - zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (container) { - if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - if (Z_TYPE_PP(container) == IS_OBJECT) { - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); - if (0) { - zval_ptr_dtor(&offset); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_VAR(int prop_dim, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC); - zval **value = NULL; - int result = 0; - long index; - - if (container) { - zend_free_op free_op2; - zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC); - - if (Z_TYPE_PP(container) == IS_ARRAY) { - HashTable *ht; - int isset = 0; - - ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } - if (zend_u_symtable_find(ht, Z_TYPE_P(offset), offset_key, offset_len+1, (void **) &value) == SUCCESS) { - isset = 1; - } - if (free_offset) { - efree(offset_key.v); - } - break; - } - case IS_NULL: - if (zend_u_hash_find(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), (void **) &value) == SUCCESS) { - isset = 1; - } - break; - default: - zend_error(E_WARNING, "Illegal offset type in isset or empty"); - - break; - } - - switch (opline->extended_value) { - case ZEND_ISSET: - if (isset && Z_TYPE_PP(value) == IS_NULL) { - result = 0; - } else { - result = isset; - } - break; - case ZEND_ISEMPTY: - if (!isset || !i_zend_is_true(*value)) { - result = 0; - } else { - result = 1; - } - break; - } - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } else if (Z_TYPE_PP(container) == IS_OBJECT) { - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - if (prop_dim) { - result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } else { - result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } - if (0) { - zval_ptr_dtor(&offset); - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - } else if ((Z_TYPE_PP(container) == IS_STRING || - Z_TYPE_PP(container) == IS_UNICODE) && !prop_dim) { /* string offsets */ - zval tmp; - - if (Z_TYPE_P(offset) != IS_LONG) { - tmp = *offset; - zval_copy_ctor(&tmp); - convert_to_long(&tmp); - offset = &tmp; - } - if (Z_TYPE_P(offset) == IS_LONG) { - switch (opline->extended_value) { - case ZEND_ISSET: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container)) { - result = 1; - } - break; - case ZEND_ISEMPTY: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container) && - ((Z_TYPE_PP(container) == IS_UNICODE)? - (Z_USTRVAL_PP(container)[Z_LVAL_P(offset)] != 0): - (Z_STRVAL_PP(container)[Z_LVAL_P(offset)] != '0'))) { - result = 1; - } - break; - } - } - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } else { - if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}; - } - } - - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - switch (opline->extended_value) { - case ZEND_ISSET: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result; - break; - case ZEND_ISEMPTY: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result; - break; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_VAR(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_VAR(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op_data1; - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - zval *object; - zval *property = NULL; - zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - znode *result = &opline->result; - zval **retval = &EX_T(result->u.var).var.ptr; - int have_get_ptr = 0; - - EX_T(result->u.var).var.ptr_ptr = NULL; - make_real_object(object_ptr TSRMLS_CC); - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - - FREE_OP(free_op_data1); - - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } else { - /* here we are sure we are dealing with an object */ - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - /* here property is a string */ - if (opline->extended_value == ZEND_ASSIGN_OBJ - && Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - binary_op(*zptr, *zptr, value TSRMLS_CC); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - zval *z = NULL; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - if (Z_OBJ_HT_P(object)->read_property) { - z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - } - break; - case ZEND_ASSIGN_DIM: - if (Z_OBJ_HT_P(object)->read_dimension) { - z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC); - } - break; - } - if (z) { - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - binary_op(z, z, value TSRMLS_CC); - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - break; - case ZEND_ASSIGN_DIM: - Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC); - break; - } - if (!RETURN_VALUE_UNUSED(result)) { - *retval = z; - PZVAL_LOCK(*retval); - } - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - FREE_OP(free_op_data1); - } - - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_helper_SPEC_CV_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op_data2, free_op_data1; - zval **var_ptr; - zval *value; - zend_bool increment_opline = 0; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - return zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - break; - case ZEND_ASSIGN_DIM: { - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - - if (object_ptr && IS_CV != IS_CV && !0) { - (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - return zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } else { - zend_op *op_data = opline+1; - zval *dim = NULL; - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW); - increment_opline = 1; - } - } - break; - default: - value = NULL; - var_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC); - /* do nothing */ - break; - } - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets"); - } - - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - } - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - objval->refcount++; - binary_op(objval, objval, value TSRMLS_CC); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC); - zval_ptr_dtor(&objval); - } else { - binary_op(*var_ptr, *var_ptr, value TSRMLS_CC); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - FREE_OP(free_op_data1); - FREE_OP_VAR_PTR(free_op_data2); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_UNUSED(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_UNUSED(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_UNUSED(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_UNUSED(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_UNUSED(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SL_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_UNUSED(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_UNUSED(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_UNUSED(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_UNUSED(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_UNUSED(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_UNUSED(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *dim = NULL; - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC); - - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *dim = NULL; - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); - - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R; - zval *dim; - - if (IS_UNUSED == IS_UNUSED && type == BP_VAR_R) { - zend_error_noreturn(E_ERROR, "Cannot use [] for reading"); - } - dim = NULL; - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 0, type TSRMLS_CC); - - if (IS_CV == IS_VAR && type == BP_VAR_W && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - - zval **object_ptr; - - if (IS_CV == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) { - /* not an array offset */ - object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - } else { - object_ptr = NULL; - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC); - } else { - zend_free_op free_op_data1; - zval *value; - zval *dim = NULL; - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC); - - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC); - FREE_OP_IF_VAR(free_op_data1); - } - - /* assign_dim has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=NULL; - -#if 0 || IS_CV == IS_VAR || IS_CV == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=_get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - } -#else - expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); -#endif - - if (0) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_CV == IS_VAR || IS_CV == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_CV == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_CV != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - add_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - sub_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - mul_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - div_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - mod_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - shift_left_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - shift_right_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - concat_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_not_identical_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_not_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_smaller_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - bitwise_or_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - bitwise_and_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - - boolean_xor_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_obj_helper_SPEC_CV_CV(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - zend_free_op free_op_data1; - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - zval *object; - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - znode *result = &opline->result; - zval **retval = &EX_T(result->u.var).var.ptr; - int have_get_ptr = 0; - - EX_T(result->u.var).var.ptr_ptr = NULL; - make_real_object(object_ptr TSRMLS_CC); - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - - FREE_OP(free_op_data1); - - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } else { - /* here we are sure we are dealing with an object */ - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - /* here property is a string */ - if (opline->extended_value == ZEND_ASSIGN_OBJ - && Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - binary_op(*zptr, *zptr, value TSRMLS_CC); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - zval *z = NULL; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - if (Z_OBJ_HT_P(object)->read_property) { - z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - } - break; - case ZEND_ASSIGN_DIM: - if (Z_OBJ_HT_P(object)->read_dimension) { - z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC); - } - break; - } - if (z) { - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - binary_op(z, z, value TSRMLS_CC); - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - break; - case ZEND_ASSIGN_DIM: - Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC); - break; - } - if (!RETURN_VALUE_UNUSED(result)) { - *retval = z; - PZVAL_LOCK(*retval); - } - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to assign property of non-object"); - if (!RETURN_VALUE_UNUSED(result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - FREE_OP(free_op_data1); - } - - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_binary_assign_op_helper_SPEC_CV_CV(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op_data2, free_op_data1; - zval **var_ptr; - zval *value; - zend_bool increment_opline = 0; - - switch (opline->extended_value) { - case ZEND_ASSIGN_OBJ: - return zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - break; - case ZEND_ASSIGN_DIM: { - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - - if (object_ptr && IS_CV != IS_CV && !0) { - (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */ - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - return zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } else { - zend_op *op_data = opline+1; - zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW); - increment_opline = 1; - } - } - break; - default: - value = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - var_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC); - /* do nothing */ - break; - } - - if (!var_ptr) { - zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets"); - } - - if (*var_ptr == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr); - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - } - ZEND_VM_NEXT_OPCODE(); - } - - SEPARATE_ZVAL_IF_NOT_REF(var_ptr); - - if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get) - && Z_OBJ_HANDLER_PP(var_ptr, set)) { - /* proxy object */ - zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC); - objval->refcount++; - binary_op(objval, objval, value TSRMLS_CC); - Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC); - zval_ptr_dtor(&objval); - } else { - binary_op(*var_ptr, *var_ptr, value TSRMLS_CC); - } - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = var_ptr; - PZVAL_LOCK(*var_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (increment_opline) { - ZEND_VM_INC_OPCODE(); - FREE_OP(free_op_data1); - FREE_OP_VAR_PTR(free_op_data2); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CV(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CV(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CV(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CV(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CV(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CV(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CV(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CV(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_pre_incdec_property_helper_SPEC_CV_CV(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - zval *object; - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - zval **retval = &EX_T(opline->result.u.var).var.ptr; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - have_get_ptr = 1; - incdec_op(*zptr); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = *zptr; - PZVAL_LOCK(*retval); - } - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - z->refcount++; - SEPARATE_ZVAL_IF_NOT_REF(&z); - incdec_op(z); - *retval = z; - Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(uninitialized_zval_ptr); - PZVAL_LOCK(*retval); - } - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_CV_CV(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_PRE_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_pre_incdec_property_helper_SPEC_CV_CV(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int zend_post_incdec_property_helper_SPEC_CV_CV(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - zval *object; - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - zval *retval = &EX_T(opline->result.u.var).tmp_var; - int have_get_ptr = 0; - - make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */ - object = *object_ptr; - - if (Z_TYPE_P(object) != IS_OBJECT) { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - - *retval = *EG(uninitialized_zval_ptr); - - ZEND_VM_NEXT_OPCODE(); - } - - /* here we are sure we are dealing with an object */ - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - - if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) { - zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC); - if (zptr != NULL) { /* NULL means no success in getting PTR */ - have_get_ptr = 1; - SEPARATE_ZVAL_IF_NOT_REF(zptr); - - *retval = **zptr; - zendi_zval_copy_ctor(*retval); - - incdec_op(*zptr); - - } - } - - if (!have_get_ptr) { - if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) { - zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC); - zval *z_copy; - - if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) { - zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC); - - if (z->refcount == 0) { - zval_dtor(z); - FREE_ZVAL(z); - } - z = value; - } - *retval = *z; - zendi_zval_copy_ctor(*retval); - ALLOC_ZVAL(z_copy); - *z_copy = *z; - zendi_zval_copy_ctor(*z_copy); - INIT_PZVAL(z_copy); - incdec_op(z_copy); - z->refcount++; - Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC); - zval_ptr_dtor(&z_copy); - zval_ptr_dtor(&z); - } else { - zend_error(E_WARNING, "Attempt to increment/decrement property of non-object"); - *retval = *EG(uninitialized_zval_ptr); - } - } - - if (0) { - zval_ptr_dtor(&property); - } else { - - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_CV_CV(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_POST_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_post_incdec_property_helper_SPEC_CV_CV(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && - IS_CV != IS_CV && - EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC); - - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC); - - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC), dim, 0, BP_VAR_IS TSRMLS_CC); - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R; - zval *dim; - - if (IS_CV == IS_UNUSED && type == BP_VAR_R) { - zend_error_noreturn(E_ERROR, "Cannot use [] for reading"); - } - dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 0, type TSRMLS_CC); - - if (IS_CV == IS_VAR && type == BP_VAR_W && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC); - zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - /* Not needed in DIM_UNSET - if (opline->extended_value == ZEND_FETCH_ADD_LOCK) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - } - */ - if (IS_CV == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC); - - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (EX_T(opline->result.u.var).var.ptr_ptr == NULL) { - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - } else { - zend_free_op free_res; - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_fetch_property_address_read_helper_SPEC_CV_CV(int type, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *container; - zval **retval; - - - retval = &EX_T(opline->result.u.var).var.ptr; - EX_T(opline->result.u.var).var.ptr_ptr = retval; - - container = _get_zval_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC); - - if (container == EG(error_zval_ptr)) { - if (!RETURN_VALUE_UNUSED(&opline->result)) { - *retval = EG(error_zval_ptr); - PZVAL_LOCK(*retval); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); - } - - - if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) { - if (type != BP_VAR_IS) { - zend_error(E_NOTICE, "Trying to get property of non-object"); - } - *retval = EG(uninitialized_zval_ptr); - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } else { - - zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - - /* here we are sure we are dealing with an object */ - *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC); - - if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) { - zval_dtor(*retval); - FREE_ZVAL(*retval); - } else { - SELECTIVE_PZVAL_LOCK(*retval, &opline->result); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_CV_CV(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_CV != IS_CV) { - PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr); - EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr; - } - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1; - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_fetch_property_address_read_helper_SPEC_CV_CV(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) { - /* Behave like FETCH_OBJ_W */ - zend_free_op free_op1; - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - ZEND_VM_NEXT_OPCODE(); - } else { - return zend_fetch_property_address_read_helper_SPEC_CV_CV(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } -} - -static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op1, free_res; - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (IS_CV == IS_CV) { - if (container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - } - if (0) { - MAKE_REAL_ZVAL_PTR(property); - } - zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC); - if (0) { - zval_ptr_dtor(&property); - } else { - - } - if (IS_CV == IS_VAR && 0 && - READY_TO_DESTROY(free_op1.var) && - !RETURN_VALUE_UNUSED(&opline->result)) { - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res); - if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr); - } - PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr); - FREE_OP_VAR_PTR(free_res); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - - zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC); - - /* assign_obj has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_op *op_data = opline+1; - - zval **object_ptr; - - if (IS_CV == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) { - /* not an array offset */ - object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - } else { - object_ptr = NULL; - } - - if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) { - zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC); - } else { - zend_free_op free_op_data1; - zval *value; - zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC); - - value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R); - zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC); - FREE_OP_IF_VAR(free_op_data1); - } - - /* assign_dim has two opcodes! */ - ZEND_VM_INC_OPCODE(); - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *value = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (0?IS_TMP_VAR:IS_CV), EX(Ts) TSRMLS_CC); - /* zend_assign_to_variable() always takes care of op2, never free it! */ - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zend_free_op free_op2; - zval **variable_ptr_ptr; - zval **value_ptr_ptr = _get_zval_ptr_ptr_cv(&opline->op2, EX(Ts), BP_VAR_W TSRMLS_CC); - - if (IS_CV == IS_VAR && - value_ptr_ptr && - !(*value_ptr_ptr)->is_ref && - opline->extended_value == ZEND_RETURNS_FUNCTION && - !EX_T(opline->op2.u.var).var.fcall_returned_reference) { - if (free_op2.var == NULL) { - PZVAL_LOCK(*value_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */ - } - zend_error(E_STRICT, "Only variables should be assigned by reference"); - return ZEND_ASSIGN_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); - } - if (IS_CV == IS_VAR && EX_T(opline->op1.u.var).var.ptr_ptr == &EX_T(opline->op1.u.var).var.ptr) { - zend_error(E_ERROR, "Cannot assign by reference to overloaded object"); - } - - variable_ptr_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - zend_assign_to_variable_reference(variable_ptr_ptr, value_ptr_ptr TSRMLS_CC); - - if (!RETURN_VALUE_UNUSED(&opline->result)) { - EX_T(opline->result.u.var).var.ptr_ptr = variable_ptr_ptr; - PZVAL_LOCK(*variable_ptr_ptr); - AI_USE_PTR(EX_T(opline->result.u.var).var); - } - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - zval *function_name; - zstr function_name_strval; - int function_name_strlen; - - /* FIXME: type is default */ - zend_uchar type = UG(unicode)?IS_UNICODE:IS_STRING; - - zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL); - - function_name = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_P(function_name) != IS_STRING && Z_TYPE_P(function_name) != IS_UNICODE) { - zend_error_noreturn(E_ERROR, "Method name must be a string"); - } - - function_name_strval = Z_UNIVAL_P(function_name); - function_name_strlen = Z_UNILEN_P(function_name); - - EX(object) = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) { - if (Z_OBJ_HT_P(EX(object))->get_method == NULL) { - zend_error_noreturn(E_ERROR, "Object does not support method calls"); - } - - /* First, locate the function. */ - EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC); - if (!EX(fbc)) { - zend_error_noreturn(E_ERROR, "Call to undefined method %R::%R()", type, Z_OBJ_CLASS_NAME_P(EX(object)), Z_TYPE_P(function_name), function_name_strval); - } - } else { - zend_error_noreturn(E_ERROR, "Call to a member function %R() on a non-object", Z_TYPE_P(function_name), function_name_strval); - } - - if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) { - EX(object) = NULL; - } else { - if (!PZVAL_IS_REF(EX(object))) { - EX(object)->refcount++; /* For $this pointer */ - } else { - zval *this_ptr; - ALLOC_ZVAL(this_ptr); - INIT_PZVAL_COPY(this_ptr, EX(object)); - zval_copy_ctor(this_ptr); - EX(object) = this_ptr; - } - } - - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_CASE_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - int switch_expr_is_overloaded=0; - - - if (IS_CV==IS_VAR) { - if (EX_T(opline->op1.u.var).var.ptr_ptr) { - PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr); - } else { - switch_expr_is_overloaded = 1; - EX_T(opline->op1.u.var).str_offset.str->refcount++; - } - } - is_equal_function(&EX_T(opline->result.u.var).tmp_var, - _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), - _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC); - - if (switch_expr_is_overloaded) { - /* We only free op1 if this is a string offset, - * Since if it is a TMP_VAR, it'll be reused by - * other CASE opcodes (whereas string offsets - * are allocated at each get_zval_ptr()) - */ - - EX_T(opline->op1.u.var).var.ptr_ptr = NULL; - AI_USE_PTR(EX_T(opline->op1.u.var).var); - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval *array_ptr = &EX_T(opline->result.u.var).tmp_var; - zval *expr_ptr; - zval *offset=_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - -#if 0 || IS_CV == IS_VAR || IS_CV == IS_CV - zval **expr_ptr_ptr = NULL; - - if (opline->extended_value) { - expr_ptr_ptr=_get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC); - expr_ptr = *expr_ptr_ptr; - } else { - expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); - } -#else - expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC); -#endif - - if (0) { /* temporary variable */ - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - } else { -#if 0 || IS_CV == IS_VAR || IS_CV == IS_CV - if (opline->extended_value) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr); - expr_ptr = *expr_ptr_ptr; - expr_ptr->refcount++; - } else -#endif - if (PZVAL_IS_REF(expr_ptr)) { - zval *new_expr; - - ALLOC_ZVAL(new_expr); - INIT_PZVAL_COPY(new_expr, expr_ptr); - expr_ptr = new_expr; - zendi_zval_copy_ctor(*expr_ptr); - } else { - expr_ptr->refcount++; - } - } - if (offset) { - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_LONG: - case IS_BOOL: - zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL); - break; - case IS_STRING: - case IS_UNICODE: - zend_u_symtable_update(Z_ARRVAL_P(array_ptr), Z_TYPE_P(offset), Z_UNIVAL_P(offset), Z_UNILEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL); - break; - case IS_NULL: - zend_u_hash_update(Z_ARRVAL_P(array_ptr), ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), &expr_ptr, sizeof(zval *), NULL); - break; - default: - zend_error(E_WARNING, "Illegal offset type"); - zval_ptr_dtor(&expr_ptr); - /* do nothing */ - break; - } - - } else { - zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL); - } - if (opline->extended_value) { - - } else { - - } - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - array_init(&EX_T(opline->result.u.var).tmp_var); - if (IS_CV == IS_UNUSED) { - ZEND_VM_NEXT_OPCODE(); -#if 0 || IS_CV != IS_UNUSED - } else { - return ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -#endif - } -} - -static int ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC); - zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - long index; - - if (container) { - if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - switch (Z_TYPE_PP(container)) { - case IS_ARRAY: { - HashTable *ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - zend_hash_index_del(ht, index); - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, - offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key.u); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } else if (IS_CV == IS_CV || IS_CV == IS_VAR) { - offset->refcount++; - } - - if (zend_u_symtable_del(ht, Z_TYPE_P(offset), offset_key, offset_len+1) == SUCCESS && - ht == &EG(symbol_table)) { - zend_execute_data *ex; - ulong hash_value = zend_u_inline_hash_func(Z_TYPE_P(offset), offset_key, offset_len+1); - - for (ex = execute_data; ex; ex = ex->prev_execute_data) { - if (ex->op_array && ex->symbol_table == ht) { - int i; - - for (i = 0; i < ex->op_array->last_var; i++) { - if (ex->op_array->vars[i].hash_value == hash_value && - ex->op_array->vars[i].name_len == offset_len && - !memcmp(ex->op_array->vars[i].name.v, offset_key.v, Z_TYPE_P(offset)==IS_UNICODE?UBYTES(offset_len):offset_len)) { - ex->CVs[i] = NULL; - break; - } - } - } - } - } - if (free_offset) { - efree(offset_key.v); - } else if (IS_CV == IS_CV || IS_CV == IS_VAR) { - zval_ptr_dtor(&offset); - } - break; - } - case IS_NULL: - zend_u_hash_del(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof("")); - break; - default: - zend_error(E_WARNING, "Illegal offset type in unset"); - break; - } - - break; - } - case IS_OBJECT: - if (!Z_OBJ_HT_P(*container)->unset_dimension) { - zend_error_noreturn(E_ERROR, "Cannot use object as array"); - } - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC); - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - break; - case IS_STRING: - case IS_UNICODE: - zend_error_noreturn(E_ERROR, "Cannot unset string offsets"); - ZEND_VM_CONTINUE(); /* bailed out before */ - default: - - break; - } - } else { - - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC); - zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (container) { - if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) { - SEPARATE_ZVAL_IF_NOT_REF(container); - } - if (Z_TYPE_PP(container) == IS_OBJECT) { - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC); - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - } else { - - } - } else { - - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CV(int prop_dim, ZEND_OPCODE_HANDLER_ARGS) -{ - zend_op *opline = EX(opline); - - zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC); - zval **value = NULL; - int result = 0; - long index; - - if (container) { - - zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC); - - if (Z_TYPE_PP(container) == IS_ARRAY) { - HashTable *ht; - int isset = 0; - - ht = Z_ARRVAL_PP(container); - - switch (Z_TYPE_P(offset)) { - case IS_DOUBLE: - index = (long) Z_DVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_RESOURCE: - case IS_BOOL: - case IS_LONG: - index = Z_LVAL_P(offset); - if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) { - isset = 1; - } - break; - case IS_STRING: - case IS_UNICODE: { - zstr offset_key = Z_UNIVAL_P(offset); - int offset_len = Z_UNILEN_P(offset); - int free_offset = 0; - - if (UG(unicode) && ht == &EG(symbol_table) && Z_TYPE_P(offset) == IS_UNICODE) { - /* Identifier normalization */ - UChar *norm; - int norm_len; - - if (zend_normalize_identifier(&norm, &norm_len, offset_key.u, offset_len, 0) == FAILURE) { - zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key); - } else if (norm != offset_key.u) { - offset_key.u = norm; - offset_len = norm_len; - free_offset = 1; - } - } - if (zend_u_symtable_find(ht, Z_TYPE_P(offset), offset_key, offset_len+1, (void **) &value) == SUCCESS) { - isset = 1; - } - if (free_offset) { - efree(offset_key.v); - } - break; - } - case IS_NULL: - if (zend_u_hash_find(ht, ZEND_STR_TYPE, EMPTY_ZSTR, sizeof(""), (void **) &value) == SUCCESS) { - isset = 1; - } - break; - default: - zend_error(E_WARNING, "Illegal offset type in isset or empty"); - - break; - } - - switch (opline->extended_value) { - case ZEND_ISSET: - if (isset && Z_TYPE_PP(value) == IS_NULL) { - result = 0; - } else { - result = isset; - } - break; - case ZEND_ISEMPTY: - if (!isset || !i_zend_is_true(*value)) { - result = 0; - } else { - result = 1; - } - break; - } - - } else if (Z_TYPE_PP(container) == IS_OBJECT) { - if (0) { - MAKE_REAL_ZVAL_PTR(offset); - } - if (prop_dim) { - result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } else { - result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC); - } - if (0) { - zval_ptr_dtor(&offset); - } else { - - } - } else if ((Z_TYPE_PP(container) == IS_STRING || - Z_TYPE_PP(container) == IS_UNICODE) && !prop_dim) { /* string offsets */ - zval tmp; - - if (Z_TYPE_P(offset) != IS_LONG) { - tmp = *offset; - zval_copy_ctor(&tmp); - convert_to_long(&tmp); - offset = &tmp; - } - if (Z_TYPE_P(offset) == IS_LONG) { - switch (opline->extended_value) { - case ZEND_ISSET: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container)) { - result = 1; - } - break; - case ZEND_ISEMPTY: - if (Z_LVAL_P(offset) >= 0 && - Z_LVAL_P(offset) < Z_UNILEN_PP(container) && - ((Z_TYPE_PP(container) == IS_UNICODE)? - (Z_USTRVAL_PP(container)[Z_LVAL_P(offset)] != 0): - (Z_STRVAL_PP(container)[Z_LVAL_P(offset)] != '0'))) { - result = 1; - } - break; - } - } - - } else { - - } - } - - Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL; - - switch (opline->extended_value) { - case ZEND_ISSET: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result; - break; - case ZEND_ISEMPTY: - Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result; - break; - } - - ZEND_VM_NEXT_OPCODE(); -} - -static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CV(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CV(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - -static int ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", EX(opline)->opcode, EX(opline)->op1.op_type, EX(opline)->op2.op_type); - ZEND_VM_RETURN_FROM_EXECUTE_LOOP(); -} - - -void zend_init_opcodes_handlers() -{ - static const opcode_handler_t labels[] = { - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_NOP_SPEC_HANDLER, - ZEND_ADD_SPEC_CONST_CONST_HANDLER, - ZEND_ADD_SPEC_CONST_TMP_HANDLER, - ZEND_ADD_SPEC_CONST_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ADD_SPEC_CONST_CV_HANDLER, - ZEND_ADD_SPEC_TMP_CONST_HANDLER, - ZEND_ADD_SPEC_TMP_TMP_HANDLER, - ZEND_ADD_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ADD_SPEC_TMP_CV_HANDLER, - ZEND_ADD_SPEC_VAR_CONST_HANDLER, - ZEND_ADD_SPEC_VAR_TMP_HANDLER, - ZEND_ADD_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ADD_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ADD_SPEC_CV_CONST_HANDLER, - ZEND_ADD_SPEC_CV_TMP_HANDLER, - ZEND_ADD_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ADD_SPEC_CV_CV_HANDLER, - ZEND_SUB_SPEC_CONST_CONST_HANDLER, - ZEND_SUB_SPEC_CONST_TMP_HANDLER, - ZEND_SUB_SPEC_CONST_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SUB_SPEC_CONST_CV_HANDLER, - ZEND_SUB_SPEC_TMP_CONST_HANDLER, - ZEND_SUB_SPEC_TMP_TMP_HANDLER, - ZEND_SUB_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SUB_SPEC_TMP_CV_HANDLER, - ZEND_SUB_SPEC_VAR_CONST_HANDLER, - ZEND_SUB_SPEC_VAR_TMP_HANDLER, - ZEND_SUB_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SUB_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SUB_SPEC_CV_CONST_HANDLER, - ZEND_SUB_SPEC_CV_TMP_HANDLER, - ZEND_SUB_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SUB_SPEC_CV_CV_HANDLER, - ZEND_MUL_SPEC_CONST_CONST_HANDLER, - ZEND_MUL_SPEC_CONST_TMP_HANDLER, - ZEND_MUL_SPEC_CONST_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_MUL_SPEC_CONST_CV_HANDLER, - ZEND_MUL_SPEC_TMP_CONST_HANDLER, - ZEND_MUL_SPEC_TMP_TMP_HANDLER, - ZEND_MUL_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_MUL_SPEC_TMP_CV_HANDLER, - ZEND_MUL_SPEC_VAR_CONST_HANDLER, - ZEND_MUL_SPEC_VAR_TMP_HANDLER, - ZEND_MUL_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_MUL_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_MUL_SPEC_CV_CONST_HANDLER, - ZEND_MUL_SPEC_CV_TMP_HANDLER, - ZEND_MUL_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_MUL_SPEC_CV_CV_HANDLER, - ZEND_DIV_SPEC_CONST_CONST_HANDLER, - ZEND_DIV_SPEC_CONST_TMP_HANDLER, - ZEND_DIV_SPEC_CONST_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_DIV_SPEC_CONST_CV_HANDLER, - ZEND_DIV_SPEC_TMP_CONST_HANDLER, - ZEND_DIV_SPEC_TMP_TMP_HANDLER, - ZEND_DIV_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_DIV_SPEC_TMP_CV_HANDLER, - ZEND_DIV_SPEC_VAR_CONST_HANDLER, - ZEND_DIV_SPEC_VAR_TMP_HANDLER, - ZEND_DIV_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_DIV_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_DIV_SPEC_CV_CONST_HANDLER, - ZEND_DIV_SPEC_CV_TMP_HANDLER, - ZEND_DIV_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_DIV_SPEC_CV_CV_HANDLER, - ZEND_MOD_SPEC_CONST_CONST_HANDLER, - ZEND_MOD_SPEC_CONST_TMP_HANDLER, - ZEND_MOD_SPEC_CONST_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_MOD_SPEC_CONST_CV_HANDLER, - ZEND_MOD_SPEC_TMP_CONST_HANDLER, - ZEND_MOD_SPEC_TMP_TMP_HANDLER, - ZEND_MOD_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_MOD_SPEC_TMP_CV_HANDLER, - ZEND_MOD_SPEC_VAR_CONST_HANDLER, - ZEND_MOD_SPEC_VAR_TMP_HANDLER, - ZEND_MOD_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_MOD_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_MOD_SPEC_CV_CONST_HANDLER, - ZEND_MOD_SPEC_CV_TMP_HANDLER, - ZEND_MOD_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_MOD_SPEC_CV_CV_HANDLER, - ZEND_SL_SPEC_CONST_CONST_HANDLER, - ZEND_SL_SPEC_CONST_TMP_HANDLER, - ZEND_SL_SPEC_CONST_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SL_SPEC_CONST_CV_HANDLER, - ZEND_SL_SPEC_TMP_CONST_HANDLER, - ZEND_SL_SPEC_TMP_TMP_HANDLER, - ZEND_SL_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SL_SPEC_TMP_CV_HANDLER, - ZEND_SL_SPEC_VAR_CONST_HANDLER, - ZEND_SL_SPEC_VAR_TMP_HANDLER, - ZEND_SL_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SL_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SL_SPEC_CV_CONST_HANDLER, - ZEND_SL_SPEC_CV_TMP_HANDLER, - ZEND_SL_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SL_SPEC_CV_CV_HANDLER, - ZEND_SR_SPEC_CONST_CONST_HANDLER, - ZEND_SR_SPEC_CONST_TMP_HANDLER, - ZEND_SR_SPEC_CONST_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SR_SPEC_CONST_CV_HANDLER, - ZEND_SR_SPEC_TMP_CONST_HANDLER, - ZEND_SR_SPEC_TMP_TMP_HANDLER, - ZEND_SR_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SR_SPEC_TMP_CV_HANDLER, - ZEND_SR_SPEC_VAR_CONST_HANDLER, - ZEND_SR_SPEC_VAR_TMP_HANDLER, - ZEND_SR_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SR_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SR_SPEC_CV_CONST_HANDLER, - ZEND_SR_SPEC_CV_TMP_HANDLER, - ZEND_SR_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SR_SPEC_CV_CV_HANDLER, - ZEND_CONCAT_SPEC_CONST_CONST_HANDLER, - ZEND_CONCAT_SPEC_CONST_TMP_HANDLER, - ZEND_CONCAT_SPEC_CONST_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_CONCAT_SPEC_CONST_CV_HANDLER, - ZEND_CONCAT_SPEC_TMP_CONST_HANDLER, - ZEND_CONCAT_SPEC_TMP_TMP_HANDLER, - ZEND_CONCAT_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_CONCAT_SPEC_TMP_CV_HANDLER, - ZEND_CONCAT_SPEC_VAR_CONST_HANDLER, - ZEND_CONCAT_SPEC_VAR_TMP_HANDLER, - ZEND_CONCAT_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_CONCAT_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_CONCAT_SPEC_CV_CONST_HANDLER, - ZEND_CONCAT_SPEC_CV_TMP_HANDLER, - ZEND_CONCAT_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_CONCAT_SPEC_CV_CV_HANDLER, - ZEND_BW_OR_SPEC_CONST_CONST_HANDLER, - ZEND_BW_OR_SPEC_CONST_TMP_HANDLER, - ZEND_BW_OR_SPEC_CONST_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BW_OR_SPEC_CONST_CV_HANDLER, - ZEND_BW_OR_SPEC_TMP_CONST_HANDLER, - ZEND_BW_OR_SPEC_TMP_TMP_HANDLER, - ZEND_BW_OR_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BW_OR_SPEC_TMP_CV_HANDLER, - ZEND_BW_OR_SPEC_VAR_CONST_HANDLER, - ZEND_BW_OR_SPEC_VAR_TMP_HANDLER, - ZEND_BW_OR_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BW_OR_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BW_OR_SPEC_CV_CONST_HANDLER, - ZEND_BW_OR_SPEC_CV_TMP_HANDLER, - ZEND_BW_OR_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BW_OR_SPEC_CV_CV_HANDLER, - ZEND_BW_AND_SPEC_CONST_CONST_HANDLER, - ZEND_BW_AND_SPEC_CONST_TMP_HANDLER, - ZEND_BW_AND_SPEC_CONST_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BW_AND_SPEC_CONST_CV_HANDLER, - ZEND_BW_AND_SPEC_TMP_CONST_HANDLER, - ZEND_BW_AND_SPEC_TMP_TMP_HANDLER, - ZEND_BW_AND_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BW_AND_SPEC_TMP_CV_HANDLER, - ZEND_BW_AND_SPEC_VAR_CONST_HANDLER, - ZEND_BW_AND_SPEC_VAR_TMP_HANDLER, - ZEND_BW_AND_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BW_AND_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BW_AND_SPEC_CV_CONST_HANDLER, - ZEND_BW_AND_SPEC_CV_TMP_HANDLER, - ZEND_BW_AND_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BW_AND_SPEC_CV_CV_HANDLER, - ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER, - ZEND_BW_XOR_SPEC_CONST_TMP_HANDLER, - ZEND_BW_XOR_SPEC_CONST_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BW_XOR_SPEC_CONST_CV_HANDLER, - ZEND_BW_XOR_SPEC_TMP_CONST_HANDLER, - ZEND_BW_XOR_SPEC_TMP_TMP_HANDLER, - ZEND_BW_XOR_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BW_XOR_SPEC_TMP_CV_HANDLER, - ZEND_BW_XOR_SPEC_VAR_CONST_HANDLER, - ZEND_BW_XOR_SPEC_VAR_TMP_HANDLER, - ZEND_BW_XOR_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BW_XOR_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BW_XOR_SPEC_CV_CONST_HANDLER, - ZEND_BW_XOR_SPEC_CV_TMP_HANDLER, - ZEND_BW_XOR_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BW_XOR_SPEC_CV_CV_HANDLER, - ZEND_BW_NOT_SPEC_CONST_HANDLER, - ZEND_BW_NOT_SPEC_CONST_HANDLER, - ZEND_BW_NOT_SPEC_CONST_HANDLER, - ZEND_BW_NOT_SPEC_CONST_HANDLER, - ZEND_BW_NOT_SPEC_CONST_HANDLER, - ZEND_BW_NOT_SPEC_TMP_HANDLER, - ZEND_BW_NOT_SPEC_TMP_HANDLER, - ZEND_BW_NOT_SPEC_TMP_HANDLER, - ZEND_BW_NOT_SPEC_TMP_HANDLER, - ZEND_BW_NOT_SPEC_TMP_HANDLER, - ZEND_BW_NOT_SPEC_VAR_HANDLER, - ZEND_BW_NOT_SPEC_VAR_HANDLER, - ZEND_BW_NOT_SPEC_VAR_HANDLER, - ZEND_BW_NOT_SPEC_VAR_HANDLER, - ZEND_BW_NOT_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BW_NOT_SPEC_CV_HANDLER, - ZEND_BW_NOT_SPEC_CV_HANDLER, - ZEND_BW_NOT_SPEC_CV_HANDLER, - ZEND_BW_NOT_SPEC_CV_HANDLER, - ZEND_BW_NOT_SPEC_CV_HANDLER, - ZEND_BOOL_NOT_SPEC_CONST_HANDLER, - ZEND_BOOL_NOT_SPEC_CONST_HANDLER, - ZEND_BOOL_NOT_SPEC_CONST_HANDLER, - ZEND_BOOL_NOT_SPEC_CONST_HANDLER, - ZEND_BOOL_NOT_SPEC_CONST_HANDLER, - ZEND_BOOL_NOT_SPEC_TMP_HANDLER, - ZEND_BOOL_NOT_SPEC_TMP_HANDLER, - ZEND_BOOL_NOT_SPEC_TMP_HANDLER, - ZEND_BOOL_NOT_SPEC_TMP_HANDLER, - ZEND_BOOL_NOT_SPEC_TMP_HANDLER, - ZEND_BOOL_NOT_SPEC_VAR_HANDLER, - ZEND_BOOL_NOT_SPEC_VAR_HANDLER, - ZEND_BOOL_NOT_SPEC_VAR_HANDLER, - ZEND_BOOL_NOT_SPEC_VAR_HANDLER, - ZEND_BOOL_NOT_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BOOL_NOT_SPEC_CV_HANDLER, - ZEND_BOOL_NOT_SPEC_CV_HANDLER, - ZEND_BOOL_NOT_SPEC_CV_HANDLER, - ZEND_BOOL_NOT_SPEC_CV_HANDLER, - ZEND_BOOL_NOT_SPEC_CV_HANDLER, - ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER, - ZEND_BOOL_XOR_SPEC_CONST_TMP_HANDLER, - ZEND_BOOL_XOR_SPEC_CONST_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BOOL_XOR_SPEC_CONST_CV_HANDLER, - ZEND_BOOL_XOR_SPEC_TMP_CONST_HANDLER, - ZEND_BOOL_XOR_SPEC_TMP_TMP_HANDLER, - ZEND_BOOL_XOR_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BOOL_XOR_SPEC_TMP_CV_HANDLER, - ZEND_BOOL_XOR_SPEC_VAR_CONST_HANDLER, - ZEND_BOOL_XOR_SPEC_VAR_TMP_HANDLER, - ZEND_BOOL_XOR_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BOOL_XOR_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER, - ZEND_BOOL_XOR_SPEC_CV_TMP_HANDLER, - ZEND_BOOL_XOR_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER, - ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER, - ZEND_IS_IDENTICAL_SPEC_CONST_TMP_HANDLER, - ZEND_IS_IDENTICAL_SPEC_CONST_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_IDENTICAL_SPEC_CONST_CV_HANDLER, - ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER, - ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER, - ZEND_IS_IDENTICAL_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_IDENTICAL_SPEC_TMP_CV_HANDLER, - ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER, - ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER, - ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_IDENTICAL_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER, - ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER, - ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER, - ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER, - ZEND_IS_NOT_IDENTICAL_SPEC_CONST_TMP_HANDLER, - ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CV_HANDLER, - ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER, - ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER, - ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV_HANDLER, - ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER, - ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER, - ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER, - ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER, - ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER, - ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER, - ZEND_IS_EQUAL_SPEC_CONST_TMP_HANDLER, - ZEND_IS_EQUAL_SPEC_CONST_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_EQUAL_SPEC_CONST_CV_HANDLER, - ZEND_IS_EQUAL_SPEC_TMP_CONST_HANDLER, - ZEND_IS_EQUAL_SPEC_TMP_TMP_HANDLER, - ZEND_IS_EQUAL_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_EQUAL_SPEC_TMP_CV_HANDLER, - ZEND_IS_EQUAL_SPEC_VAR_CONST_HANDLER, - ZEND_IS_EQUAL_SPEC_VAR_TMP_HANDLER, - ZEND_IS_EQUAL_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_EQUAL_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER, - ZEND_IS_EQUAL_SPEC_CV_TMP_HANDLER, - ZEND_IS_EQUAL_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER, - ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER, - ZEND_IS_NOT_EQUAL_SPEC_CONST_TMP_HANDLER, - ZEND_IS_NOT_EQUAL_SPEC_CONST_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_NOT_EQUAL_SPEC_CONST_CV_HANDLER, - ZEND_IS_NOT_EQUAL_SPEC_TMP_CONST_HANDLER, - ZEND_IS_NOT_EQUAL_SPEC_TMP_TMP_HANDLER, - ZEND_IS_NOT_EQUAL_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_NOT_EQUAL_SPEC_TMP_CV_HANDLER, - ZEND_IS_NOT_EQUAL_SPEC_VAR_CONST_HANDLER, - ZEND_IS_NOT_EQUAL_SPEC_VAR_TMP_HANDLER, - ZEND_IS_NOT_EQUAL_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_NOT_EQUAL_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER, - ZEND_IS_NOT_EQUAL_SPEC_CV_TMP_HANDLER, - ZEND_IS_NOT_EQUAL_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER, - ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER, - ZEND_IS_SMALLER_SPEC_CONST_TMP_HANDLER, - ZEND_IS_SMALLER_SPEC_CONST_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_SMALLER_SPEC_CONST_CV_HANDLER, - ZEND_IS_SMALLER_SPEC_TMP_CONST_HANDLER, - ZEND_IS_SMALLER_SPEC_TMP_TMP_HANDLER, - ZEND_IS_SMALLER_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_SMALLER_SPEC_TMP_CV_HANDLER, - ZEND_IS_SMALLER_SPEC_VAR_CONST_HANDLER, - ZEND_IS_SMALLER_SPEC_VAR_TMP_HANDLER, - ZEND_IS_SMALLER_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_SMALLER_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_SMALLER_SPEC_CV_CONST_HANDLER, - ZEND_IS_SMALLER_SPEC_CV_TMP_HANDLER, - ZEND_IS_SMALLER_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER, - ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER, - ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMP_HANDLER, - ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_HANDLER, - ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_CONST_HANDLER, - ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_TMP_HANDLER, - ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_CV_HANDLER, - ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_CONST_HANDLER, - ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_TMP_HANDLER, - ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_HANDLER, - ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMP_HANDLER, - ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_HANDLER, - ZEND_CAST_SPEC_CONST_HANDLER, - ZEND_CAST_SPEC_CONST_HANDLER, - ZEND_CAST_SPEC_CONST_HANDLER, - ZEND_CAST_SPEC_CONST_HANDLER, - ZEND_CAST_SPEC_CONST_HANDLER, - ZEND_CAST_SPEC_TMP_HANDLER, - ZEND_CAST_SPEC_TMP_HANDLER, - ZEND_CAST_SPEC_TMP_HANDLER, - ZEND_CAST_SPEC_TMP_HANDLER, - ZEND_CAST_SPEC_TMP_HANDLER, - ZEND_CAST_SPEC_VAR_HANDLER, - ZEND_CAST_SPEC_VAR_HANDLER, - ZEND_CAST_SPEC_VAR_HANDLER, - ZEND_CAST_SPEC_VAR_HANDLER, - ZEND_CAST_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_CAST_SPEC_CV_HANDLER, - ZEND_CAST_SPEC_CV_HANDLER, - ZEND_CAST_SPEC_CV_HANDLER, - ZEND_CAST_SPEC_CV_HANDLER, - ZEND_CAST_SPEC_CV_HANDLER, - ZEND_QM_ASSIGN_SPEC_CONST_HANDLER, - ZEND_QM_ASSIGN_SPEC_CONST_HANDLER, - ZEND_QM_ASSIGN_SPEC_CONST_HANDLER, - ZEND_QM_ASSIGN_SPEC_CONST_HANDLER, - ZEND_QM_ASSIGN_SPEC_CONST_HANDLER, - ZEND_QM_ASSIGN_SPEC_TMP_HANDLER, - ZEND_QM_ASSIGN_SPEC_TMP_HANDLER, - ZEND_QM_ASSIGN_SPEC_TMP_HANDLER, - ZEND_QM_ASSIGN_SPEC_TMP_HANDLER, - ZEND_QM_ASSIGN_SPEC_TMP_HANDLER, - ZEND_QM_ASSIGN_SPEC_VAR_HANDLER, - ZEND_QM_ASSIGN_SPEC_VAR_HANDLER, - ZEND_QM_ASSIGN_SPEC_VAR_HANDLER, - ZEND_QM_ASSIGN_SPEC_VAR_HANDLER, - ZEND_QM_ASSIGN_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_QM_ASSIGN_SPEC_CV_HANDLER, - ZEND_QM_ASSIGN_SPEC_CV_HANDLER, - ZEND_QM_ASSIGN_SPEC_CV_HANDLER, - ZEND_QM_ASSIGN_SPEC_CV_HANDLER, - ZEND_QM_ASSIGN_SPEC_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER, - ZEND_ASSIGN_ADD_SPEC_VAR_TMP_HANDLER, - ZEND_ASSIGN_ADD_SPEC_VAR_VAR_HANDLER, - ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_HANDLER, - ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER, - ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_HANDLER, - ZEND_ASSIGN_ADD_SPEC_UNUSED_TMP_HANDLER, - ZEND_ASSIGN_ADD_SPEC_UNUSED_VAR_HANDLER, - ZEND_ASSIGN_ADD_SPEC_UNUSED_UNUSED_HANDLER, - ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_HANDLER, - ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER, - ZEND_ASSIGN_ADD_SPEC_CV_TMP_HANDLER, - ZEND_ASSIGN_ADD_SPEC_CV_VAR_HANDLER, - ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_HANDLER, - ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_SUB_SPEC_VAR_CONST_HANDLER, - ZEND_ASSIGN_SUB_SPEC_VAR_TMP_HANDLER, - ZEND_ASSIGN_SUB_SPEC_VAR_VAR_HANDLER, - ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_HANDLER, - ZEND_ASSIGN_SUB_SPEC_VAR_CV_HANDLER, - ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_HANDLER, - ZEND_ASSIGN_SUB_SPEC_UNUSED_TMP_HANDLER, - ZEND_ASSIGN_SUB_SPEC_UNUSED_VAR_HANDLER, - ZEND_ASSIGN_SUB_SPEC_UNUSED_UNUSED_HANDLER, - ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_HANDLER, - ZEND_ASSIGN_SUB_SPEC_CV_CONST_HANDLER, - ZEND_ASSIGN_SUB_SPEC_CV_TMP_HANDLER, - ZEND_ASSIGN_SUB_SPEC_CV_VAR_HANDLER, - ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_HANDLER, - ZEND_ASSIGN_SUB_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_MUL_SPEC_VAR_CONST_HANDLER, - ZEND_ASSIGN_MUL_SPEC_VAR_TMP_HANDLER, - ZEND_ASSIGN_MUL_SPEC_VAR_VAR_HANDLER, - ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_HANDLER, - ZEND_ASSIGN_MUL_SPEC_VAR_CV_HANDLER, - ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_HANDLER, - ZEND_ASSIGN_MUL_SPEC_UNUSED_TMP_HANDLER, - ZEND_ASSIGN_MUL_SPEC_UNUSED_VAR_HANDLER, - ZEND_ASSIGN_MUL_SPEC_UNUSED_UNUSED_HANDLER, - ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_HANDLER, - ZEND_ASSIGN_MUL_SPEC_CV_CONST_HANDLER, - ZEND_ASSIGN_MUL_SPEC_CV_TMP_HANDLER, - ZEND_ASSIGN_MUL_SPEC_CV_VAR_HANDLER, - ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_HANDLER, - ZEND_ASSIGN_MUL_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_DIV_SPEC_VAR_CONST_HANDLER, - ZEND_ASSIGN_DIV_SPEC_VAR_TMP_HANDLER, - ZEND_ASSIGN_DIV_SPEC_VAR_VAR_HANDLER, - ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_HANDLER, - ZEND_ASSIGN_DIV_SPEC_VAR_CV_HANDLER, - ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_HANDLER, - ZEND_ASSIGN_DIV_SPEC_UNUSED_TMP_HANDLER, - ZEND_ASSIGN_DIV_SPEC_UNUSED_VAR_HANDLER, - ZEND_ASSIGN_DIV_SPEC_UNUSED_UNUSED_HANDLER, - ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_HANDLER, - ZEND_ASSIGN_DIV_SPEC_CV_CONST_HANDLER, - ZEND_ASSIGN_DIV_SPEC_CV_TMP_HANDLER, - ZEND_ASSIGN_DIV_SPEC_CV_VAR_HANDLER, - ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_HANDLER, - ZEND_ASSIGN_DIV_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_MOD_SPEC_VAR_CONST_HANDLER, - ZEND_ASSIGN_MOD_SPEC_VAR_TMP_HANDLER, - ZEND_ASSIGN_MOD_SPEC_VAR_VAR_HANDLER, - ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_HANDLER, - ZEND_ASSIGN_MOD_SPEC_VAR_CV_HANDLER, - ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_HANDLER, - ZEND_ASSIGN_MOD_SPEC_UNUSED_TMP_HANDLER, - ZEND_ASSIGN_MOD_SPEC_UNUSED_VAR_HANDLER, - ZEND_ASSIGN_MOD_SPEC_UNUSED_UNUSED_HANDLER, - ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_HANDLER, - ZEND_ASSIGN_MOD_SPEC_CV_CONST_HANDLER, - ZEND_ASSIGN_MOD_SPEC_CV_TMP_HANDLER, - ZEND_ASSIGN_MOD_SPEC_CV_VAR_HANDLER, - ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_HANDLER, - ZEND_ASSIGN_MOD_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_SL_SPEC_VAR_CONST_HANDLER, - ZEND_ASSIGN_SL_SPEC_VAR_TMP_HANDLER, - ZEND_ASSIGN_SL_SPEC_VAR_VAR_HANDLER, - ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_HANDLER, - ZEND_ASSIGN_SL_SPEC_VAR_CV_HANDLER, - ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_HANDLER, - ZEND_ASSIGN_SL_SPEC_UNUSED_TMP_HANDLER, - ZEND_ASSIGN_SL_SPEC_UNUSED_VAR_HANDLER, - ZEND_ASSIGN_SL_SPEC_UNUSED_UNUSED_HANDLER, - ZEND_ASSIGN_SL_SPEC_UNUSED_CV_HANDLER, - ZEND_ASSIGN_SL_SPEC_CV_CONST_HANDLER, - ZEND_ASSIGN_SL_SPEC_CV_TMP_HANDLER, - ZEND_ASSIGN_SL_SPEC_CV_VAR_HANDLER, - ZEND_ASSIGN_SL_SPEC_CV_UNUSED_HANDLER, - ZEND_ASSIGN_SL_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_SR_SPEC_VAR_CONST_HANDLER, - ZEND_ASSIGN_SR_SPEC_VAR_TMP_HANDLER, - ZEND_ASSIGN_SR_SPEC_VAR_VAR_HANDLER, - ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_HANDLER, - ZEND_ASSIGN_SR_SPEC_VAR_CV_HANDLER, - ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_HANDLER, - ZEND_ASSIGN_SR_SPEC_UNUSED_TMP_HANDLER, - ZEND_ASSIGN_SR_SPEC_UNUSED_VAR_HANDLER, - ZEND_ASSIGN_SR_SPEC_UNUSED_UNUSED_HANDLER, - ZEND_ASSIGN_SR_SPEC_UNUSED_CV_HANDLER, - ZEND_ASSIGN_SR_SPEC_CV_CONST_HANDLER, - ZEND_ASSIGN_SR_SPEC_CV_TMP_HANDLER, - ZEND_ASSIGN_SR_SPEC_CV_VAR_HANDLER, - ZEND_ASSIGN_SR_SPEC_CV_UNUSED_HANDLER, - ZEND_ASSIGN_SR_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_HANDLER, - ZEND_ASSIGN_CONCAT_SPEC_VAR_TMP_HANDLER, - ZEND_ASSIGN_CONCAT_SPEC_VAR_VAR_HANDLER, - ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_HANDLER, - ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_HANDLER, - ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_HANDLER, - ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMP_HANDLER, - ZEND_ASSIGN_CONCAT_SPEC_UNUSED_VAR_HANDLER, - ZEND_ASSIGN_CONCAT_SPEC_UNUSED_UNUSED_HANDLER, - ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_HANDLER, - ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_HANDLER, - ZEND_ASSIGN_CONCAT_SPEC_CV_TMP_HANDLER, - ZEND_ASSIGN_CONCAT_SPEC_CV_VAR_HANDLER, - ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_HANDLER, - ZEND_ASSIGN_CONCAT_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_HANDLER, - ZEND_ASSIGN_BW_OR_SPEC_VAR_TMP_HANDLER, - ZEND_ASSIGN_BW_OR_SPEC_VAR_VAR_HANDLER, - ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_HANDLER, - ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_HANDLER, - ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_HANDLER, - ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMP_HANDLER, - ZEND_ASSIGN_BW_OR_SPEC_UNUSED_VAR_HANDLER, - ZEND_ASSIGN_BW_OR_SPEC_UNUSED_UNUSED_HANDLER, - ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_HANDLER, - ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_HANDLER, - ZEND_ASSIGN_BW_OR_SPEC_CV_TMP_HANDLER, - ZEND_ASSIGN_BW_OR_SPEC_CV_VAR_HANDLER, - ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_HANDLER, - ZEND_ASSIGN_BW_OR_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_HANDLER, - ZEND_ASSIGN_BW_AND_SPEC_VAR_TMP_HANDLER, - ZEND_ASSIGN_BW_AND_SPEC_VAR_VAR_HANDLER, - ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_HANDLER, - ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_HANDLER, - ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_HANDLER, - ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMP_HANDLER, - ZEND_ASSIGN_BW_AND_SPEC_UNUSED_VAR_HANDLER, - ZEND_ASSIGN_BW_AND_SPEC_UNUSED_UNUSED_HANDLER, - ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_HANDLER, - ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_HANDLER, - ZEND_ASSIGN_BW_AND_SPEC_CV_TMP_HANDLER, - ZEND_ASSIGN_BW_AND_SPEC_CV_VAR_HANDLER, - ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_HANDLER, - ZEND_ASSIGN_BW_AND_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_HANDLER, - ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMP_HANDLER, - ZEND_ASSIGN_BW_XOR_SPEC_VAR_VAR_HANDLER, - ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_HANDLER, - ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_HANDLER, - ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_HANDLER, - ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMP_HANDLER, - ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_VAR_HANDLER, - ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_UNUSED_HANDLER, - ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_HANDLER, - ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_HANDLER, - ZEND_ASSIGN_BW_XOR_SPEC_CV_TMP_HANDLER, - ZEND_ASSIGN_BW_XOR_SPEC_CV_VAR_HANDLER, - ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_HANDLER, - ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_PRE_INC_SPEC_VAR_HANDLER, - ZEND_PRE_INC_SPEC_VAR_HANDLER, - ZEND_PRE_INC_SPEC_VAR_HANDLER, - ZEND_PRE_INC_SPEC_VAR_HANDLER, - ZEND_PRE_INC_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_PRE_INC_SPEC_CV_HANDLER, - ZEND_PRE_INC_SPEC_CV_HANDLER, - ZEND_PRE_INC_SPEC_CV_HANDLER, - ZEND_PRE_INC_SPEC_CV_HANDLER, - ZEND_PRE_INC_SPEC_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_PRE_DEC_SPEC_VAR_HANDLER, - ZEND_PRE_DEC_SPEC_VAR_HANDLER, - ZEND_PRE_DEC_SPEC_VAR_HANDLER, - ZEND_PRE_DEC_SPEC_VAR_HANDLER, - ZEND_PRE_DEC_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_PRE_DEC_SPEC_CV_HANDLER, - ZEND_PRE_DEC_SPEC_CV_HANDLER, - ZEND_PRE_DEC_SPEC_CV_HANDLER, - ZEND_PRE_DEC_SPEC_CV_HANDLER, - ZEND_PRE_DEC_SPEC_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_POST_INC_SPEC_VAR_HANDLER, - ZEND_POST_INC_SPEC_VAR_HANDLER, - ZEND_POST_INC_SPEC_VAR_HANDLER, - ZEND_POST_INC_SPEC_VAR_HANDLER, - ZEND_POST_INC_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_POST_INC_SPEC_CV_HANDLER, - ZEND_POST_INC_SPEC_CV_HANDLER, - ZEND_POST_INC_SPEC_CV_HANDLER, - ZEND_POST_INC_SPEC_CV_HANDLER, - ZEND_POST_INC_SPEC_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_POST_DEC_SPEC_VAR_HANDLER, - ZEND_POST_DEC_SPEC_VAR_HANDLER, - ZEND_POST_DEC_SPEC_VAR_HANDLER, - ZEND_POST_DEC_SPEC_VAR_HANDLER, - ZEND_POST_DEC_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_POST_DEC_SPEC_CV_HANDLER, - ZEND_POST_DEC_SPEC_CV_HANDLER, - ZEND_POST_DEC_SPEC_CV_HANDLER, - ZEND_POST_DEC_SPEC_CV_HANDLER, - ZEND_POST_DEC_SPEC_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_SPEC_VAR_CONST_HANDLER, - ZEND_ASSIGN_SPEC_VAR_TMP_HANDLER, - ZEND_ASSIGN_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_SPEC_CV_CONST_HANDLER, - ZEND_ASSIGN_SPEC_CV_TMP_HANDLER, - ZEND_ASSIGN_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER, - ZEND_ECHO_SPEC_CONST_HANDLER, - ZEND_ECHO_SPEC_CONST_HANDLER, - ZEND_ECHO_SPEC_CONST_HANDLER, - ZEND_ECHO_SPEC_CONST_HANDLER, - ZEND_ECHO_SPEC_CONST_HANDLER, - ZEND_ECHO_SPEC_TMP_HANDLER, - ZEND_ECHO_SPEC_TMP_HANDLER, - ZEND_ECHO_SPEC_TMP_HANDLER, - ZEND_ECHO_SPEC_TMP_HANDLER, - ZEND_ECHO_SPEC_TMP_HANDLER, - ZEND_ECHO_SPEC_VAR_HANDLER, - ZEND_ECHO_SPEC_VAR_HANDLER, - ZEND_ECHO_SPEC_VAR_HANDLER, - ZEND_ECHO_SPEC_VAR_HANDLER, - ZEND_ECHO_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ECHO_SPEC_CV_HANDLER, - ZEND_ECHO_SPEC_CV_HANDLER, - ZEND_ECHO_SPEC_CV_HANDLER, - ZEND_ECHO_SPEC_CV_HANDLER, - ZEND_ECHO_SPEC_CV_HANDLER, - ZEND_PRINT_SPEC_CONST_HANDLER, - ZEND_PRINT_SPEC_CONST_HANDLER, - ZEND_PRINT_SPEC_CONST_HANDLER, - ZEND_PRINT_SPEC_CONST_HANDLER, - ZEND_PRINT_SPEC_CONST_HANDLER, - ZEND_PRINT_SPEC_TMP_HANDLER, - ZEND_PRINT_SPEC_TMP_HANDLER, - ZEND_PRINT_SPEC_TMP_HANDLER, - ZEND_PRINT_SPEC_TMP_HANDLER, - ZEND_PRINT_SPEC_TMP_HANDLER, - ZEND_PRINT_SPEC_VAR_HANDLER, - ZEND_PRINT_SPEC_VAR_HANDLER, - ZEND_PRINT_SPEC_VAR_HANDLER, - ZEND_PRINT_SPEC_VAR_HANDLER, - ZEND_PRINT_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_PRINT_SPEC_CV_HANDLER, - ZEND_PRINT_SPEC_CV_HANDLER, - ZEND_PRINT_SPEC_CV_HANDLER, - ZEND_PRINT_SPEC_CV_HANDLER, - ZEND_PRINT_SPEC_CV_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMP_SPEC_HANDLER, - ZEND_JMPZ_SPEC_CONST_HANDLER, - ZEND_JMPZ_SPEC_CONST_HANDLER, - ZEND_JMPZ_SPEC_CONST_HANDLER, - ZEND_JMPZ_SPEC_CONST_HANDLER, - ZEND_JMPZ_SPEC_CONST_HANDLER, - ZEND_JMPZ_SPEC_TMP_HANDLER, - ZEND_JMPZ_SPEC_TMP_HANDLER, - ZEND_JMPZ_SPEC_TMP_HANDLER, - ZEND_JMPZ_SPEC_TMP_HANDLER, - ZEND_JMPZ_SPEC_TMP_HANDLER, - ZEND_JMPZ_SPEC_VAR_HANDLER, - ZEND_JMPZ_SPEC_VAR_HANDLER, - ZEND_JMPZ_SPEC_VAR_HANDLER, - ZEND_JMPZ_SPEC_VAR_HANDLER, - ZEND_JMPZ_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_JMPZ_SPEC_CV_HANDLER, - ZEND_JMPZ_SPEC_CV_HANDLER, - ZEND_JMPZ_SPEC_CV_HANDLER, - ZEND_JMPZ_SPEC_CV_HANDLER, - ZEND_JMPZ_SPEC_CV_HANDLER, - ZEND_JMPNZ_SPEC_CONST_HANDLER, - ZEND_JMPNZ_SPEC_CONST_HANDLER, - ZEND_JMPNZ_SPEC_CONST_HANDLER, - ZEND_JMPNZ_SPEC_CONST_HANDLER, - ZEND_JMPNZ_SPEC_CONST_HANDLER, - ZEND_JMPNZ_SPEC_TMP_HANDLER, - ZEND_JMPNZ_SPEC_TMP_HANDLER, - ZEND_JMPNZ_SPEC_TMP_HANDLER, - ZEND_JMPNZ_SPEC_TMP_HANDLER, - ZEND_JMPNZ_SPEC_TMP_HANDLER, - ZEND_JMPNZ_SPEC_VAR_HANDLER, - ZEND_JMPNZ_SPEC_VAR_HANDLER, - ZEND_JMPNZ_SPEC_VAR_HANDLER, - ZEND_JMPNZ_SPEC_VAR_HANDLER, - ZEND_JMPNZ_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_JMPNZ_SPEC_CV_HANDLER, - ZEND_JMPNZ_SPEC_CV_HANDLER, - ZEND_JMPNZ_SPEC_CV_HANDLER, - ZEND_JMPNZ_SPEC_CV_HANDLER, - ZEND_JMPNZ_SPEC_CV_HANDLER, - ZEND_JMPZNZ_SPEC_CONST_HANDLER, - ZEND_JMPZNZ_SPEC_CONST_HANDLER, - ZEND_JMPZNZ_SPEC_CONST_HANDLER, - ZEND_JMPZNZ_SPEC_CONST_HANDLER, - ZEND_JMPZNZ_SPEC_CONST_HANDLER, - ZEND_JMPZNZ_SPEC_TMP_HANDLER, - ZEND_JMPZNZ_SPEC_TMP_HANDLER, - ZEND_JMPZNZ_SPEC_TMP_HANDLER, - ZEND_JMPZNZ_SPEC_TMP_HANDLER, - ZEND_JMPZNZ_SPEC_TMP_HANDLER, - ZEND_JMPZNZ_SPEC_VAR_HANDLER, - ZEND_JMPZNZ_SPEC_VAR_HANDLER, - ZEND_JMPZNZ_SPEC_VAR_HANDLER, - ZEND_JMPZNZ_SPEC_VAR_HANDLER, - ZEND_JMPZNZ_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_JMPZNZ_SPEC_CV_HANDLER, - ZEND_JMPZNZ_SPEC_CV_HANDLER, - ZEND_JMPZNZ_SPEC_CV_HANDLER, - ZEND_JMPZNZ_SPEC_CV_HANDLER, - ZEND_JMPZNZ_SPEC_CV_HANDLER, - ZEND_JMPZ_EX_SPEC_CONST_HANDLER, - ZEND_JMPZ_EX_SPEC_CONST_HANDLER, - ZEND_JMPZ_EX_SPEC_CONST_HANDLER, - ZEND_JMPZ_EX_SPEC_CONST_HANDLER, - ZEND_JMPZ_EX_SPEC_CONST_HANDLER, - ZEND_JMPZ_EX_SPEC_TMP_HANDLER, - ZEND_JMPZ_EX_SPEC_TMP_HANDLER, - ZEND_JMPZ_EX_SPEC_TMP_HANDLER, - ZEND_JMPZ_EX_SPEC_TMP_HANDLER, - ZEND_JMPZ_EX_SPEC_TMP_HANDLER, - ZEND_JMPZ_EX_SPEC_VAR_HANDLER, - ZEND_JMPZ_EX_SPEC_VAR_HANDLER, - ZEND_JMPZ_EX_SPEC_VAR_HANDLER, - ZEND_JMPZ_EX_SPEC_VAR_HANDLER, - ZEND_JMPZ_EX_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_JMPZ_EX_SPEC_CV_HANDLER, - ZEND_JMPZ_EX_SPEC_CV_HANDLER, - ZEND_JMPZ_EX_SPEC_CV_HANDLER, - ZEND_JMPZ_EX_SPEC_CV_HANDLER, - ZEND_JMPZ_EX_SPEC_CV_HANDLER, - ZEND_JMPNZ_EX_SPEC_CONST_HANDLER, - ZEND_JMPNZ_EX_SPEC_CONST_HANDLER, - ZEND_JMPNZ_EX_SPEC_CONST_HANDLER, - ZEND_JMPNZ_EX_SPEC_CONST_HANDLER, - ZEND_JMPNZ_EX_SPEC_CONST_HANDLER, - ZEND_JMPNZ_EX_SPEC_TMP_HANDLER, - ZEND_JMPNZ_EX_SPEC_TMP_HANDLER, - ZEND_JMPNZ_EX_SPEC_TMP_HANDLER, - ZEND_JMPNZ_EX_SPEC_TMP_HANDLER, - ZEND_JMPNZ_EX_SPEC_TMP_HANDLER, - ZEND_JMPNZ_EX_SPEC_VAR_HANDLER, - ZEND_JMPNZ_EX_SPEC_VAR_HANDLER, - ZEND_JMPNZ_EX_SPEC_VAR_HANDLER, - ZEND_JMPNZ_EX_SPEC_VAR_HANDLER, - ZEND_JMPNZ_EX_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_JMPNZ_EX_SPEC_CV_HANDLER, - ZEND_JMPNZ_EX_SPEC_CV_HANDLER, - ZEND_JMPNZ_EX_SPEC_CV_HANDLER, - ZEND_JMPNZ_EX_SPEC_CV_HANDLER, - ZEND_JMPNZ_EX_SPEC_CV_HANDLER, - ZEND_CASE_SPEC_CONST_CONST_HANDLER, - ZEND_CASE_SPEC_CONST_TMP_HANDLER, - ZEND_CASE_SPEC_CONST_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_CASE_SPEC_CONST_CV_HANDLER, - ZEND_CASE_SPEC_TMP_CONST_HANDLER, - ZEND_CASE_SPEC_TMP_TMP_HANDLER, - ZEND_CASE_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_CASE_SPEC_TMP_CV_HANDLER, - ZEND_CASE_SPEC_VAR_CONST_HANDLER, - ZEND_CASE_SPEC_VAR_TMP_HANDLER, - ZEND_CASE_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_CASE_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_CASE_SPEC_CV_CONST_HANDLER, - ZEND_CASE_SPEC_CV_TMP_HANDLER, - ZEND_CASE_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_CASE_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SWITCH_FREE_SPEC_TMP_HANDLER, - ZEND_SWITCH_FREE_SPEC_TMP_HANDLER, - ZEND_SWITCH_FREE_SPEC_TMP_HANDLER, - ZEND_SWITCH_FREE_SPEC_TMP_HANDLER, - ZEND_SWITCH_FREE_SPEC_TMP_HANDLER, - ZEND_SWITCH_FREE_SPEC_VAR_HANDLER, - ZEND_SWITCH_FREE_SPEC_VAR_HANDLER, - ZEND_SWITCH_FREE_SPEC_VAR_HANDLER, - ZEND_SWITCH_FREE_SPEC_VAR_HANDLER, - ZEND_SWITCH_FREE_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BRK_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BRK_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BRK_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BRK_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BRK_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_CONT_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_CONT_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_CONT_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_CONT_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_CONT_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BOOL_SPEC_CONST_HANDLER, - ZEND_BOOL_SPEC_CONST_HANDLER, - ZEND_BOOL_SPEC_CONST_HANDLER, - ZEND_BOOL_SPEC_CONST_HANDLER, - ZEND_BOOL_SPEC_CONST_HANDLER, - ZEND_BOOL_SPEC_TMP_HANDLER, - ZEND_BOOL_SPEC_TMP_HANDLER, - ZEND_BOOL_SPEC_TMP_HANDLER, - ZEND_BOOL_SPEC_TMP_HANDLER, - ZEND_BOOL_SPEC_TMP_HANDLER, - ZEND_BOOL_SPEC_VAR_HANDLER, - ZEND_BOOL_SPEC_VAR_HANDLER, - ZEND_BOOL_SPEC_VAR_HANDLER, - ZEND_BOOL_SPEC_VAR_HANDLER, - ZEND_BOOL_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BOOL_SPEC_CV_HANDLER, - ZEND_BOOL_SPEC_CV_HANDLER, - ZEND_BOOL_SPEC_CV_HANDLER, - ZEND_BOOL_SPEC_CV_HANDLER, - ZEND_BOOL_SPEC_CV_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_INIT_STRING_SPEC_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ADD_CHAR_SPEC_TMP_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ADD_STRING_SPEC_TMP_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ADD_VAR_SPEC_TMP_TMP_HANDLER, - ZEND_ADD_VAR_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ADD_VAR_SPEC_TMP_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_BEGIN_SILENCE_SPEC_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_END_SILENCE_SPEC_TMP_HANDLER, - ZEND_END_SILENCE_SPEC_TMP_HANDLER, - ZEND_END_SILENCE_SPEC_TMP_HANDLER, - ZEND_END_SILENCE_SPEC_TMP_HANDLER, - ZEND_END_SILENCE_SPEC_TMP_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER, - ZEND_DO_FCALL_SPEC_CONST_HANDLER, - ZEND_DO_FCALL_SPEC_CONST_HANDLER, - ZEND_DO_FCALL_SPEC_CONST_HANDLER, - ZEND_DO_FCALL_SPEC_CONST_HANDLER, - ZEND_DO_FCALL_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER, - ZEND_RETURN_SPEC_CONST_HANDLER, - ZEND_RETURN_SPEC_CONST_HANDLER, - ZEND_RETURN_SPEC_CONST_HANDLER, - ZEND_RETURN_SPEC_CONST_HANDLER, - ZEND_RETURN_SPEC_CONST_HANDLER, - ZEND_RETURN_SPEC_TMP_HANDLER, - ZEND_RETURN_SPEC_TMP_HANDLER, - ZEND_RETURN_SPEC_TMP_HANDLER, - ZEND_RETURN_SPEC_TMP_HANDLER, - ZEND_RETURN_SPEC_TMP_HANDLER, - ZEND_RETURN_SPEC_VAR_HANDLER, - ZEND_RETURN_SPEC_VAR_HANDLER, - ZEND_RETURN_SPEC_VAR_HANDLER, - ZEND_RETURN_SPEC_VAR_HANDLER, - ZEND_RETURN_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_RETURN_SPEC_CV_HANDLER, - ZEND_RETURN_SPEC_CV_HANDLER, - ZEND_RETURN_SPEC_CV_HANDLER, - ZEND_RETURN_SPEC_CV_HANDLER, - ZEND_RETURN_SPEC_CV_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_SPEC_HANDLER, - ZEND_RECV_INIT_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_RECV_INIT_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_RECV_INIT_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_RECV_INIT_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_RECV_INIT_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SEND_VAL_SPEC_CONST_HANDLER, - ZEND_SEND_VAL_SPEC_CONST_HANDLER, - ZEND_SEND_VAL_SPEC_CONST_HANDLER, - ZEND_SEND_VAL_SPEC_CONST_HANDLER, - ZEND_SEND_VAL_SPEC_CONST_HANDLER, - ZEND_SEND_VAL_SPEC_TMP_HANDLER, - ZEND_SEND_VAL_SPEC_TMP_HANDLER, - ZEND_SEND_VAL_SPEC_TMP_HANDLER, - ZEND_SEND_VAL_SPEC_TMP_HANDLER, - ZEND_SEND_VAL_SPEC_TMP_HANDLER, - ZEND_SEND_VAL_SPEC_VAR_HANDLER, - ZEND_SEND_VAL_SPEC_VAR_HANDLER, - ZEND_SEND_VAL_SPEC_VAR_HANDLER, - ZEND_SEND_VAL_SPEC_VAR_HANDLER, - ZEND_SEND_VAL_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SEND_VAL_SPEC_CV_HANDLER, - ZEND_SEND_VAL_SPEC_CV_HANDLER, - ZEND_SEND_VAL_SPEC_CV_HANDLER, - ZEND_SEND_VAL_SPEC_CV_HANDLER, - ZEND_SEND_VAL_SPEC_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SEND_VAR_SPEC_VAR_HANDLER, - ZEND_SEND_VAR_SPEC_VAR_HANDLER, - ZEND_SEND_VAR_SPEC_VAR_HANDLER, - ZEND_SEND_VAR_SPEC_VAR_HANDLER, - ZEND_SEND_VAR_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SEND_VAR_SPEC_CV_HANDLER, - ZEND_SEND_VAR_SPEC_CV_HANDLER, - ZEND_SEND_VAR_SPEC_CV_HANDLER, - ZEND_SEND_VAR_SPEC_CV_HANDLER, - ZEND_SEND_VAR_SPEC_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SEND_REF_SPEC_VAR_HANDLER, - ZEND_SEND_REF_SPEC_VAR_HANDLER, - ZEND_SEND_REF_SPEC_VAR_HANDLER, - ZEND_SEND_REF_SPEC_VAR_HANDLER, - ZEND_SEND_REF_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SEND_REF_SPEC_CV_HANDLER, - ZEND_SEND_REF_SPEC_CV_HANDLER, - ZEND_SEND_REF_SPEC_CV_HANDLER, - ZEND_SEND_REF_SPEC_CV_HANDLER, - ZEND_SEND_REF_SPEC_CV_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_NEW_SPEC_HANDLER, - ZEND_GOTO_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_GOTO_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_GOTO_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_GOTO_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_GOTO_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FREE_SPEC_TMP_HANDLER, - ZEND_FREE_SPEC_TMP_HANDLER, - ZEND_FREE_SPEC_TMP_HANDLER, - ZEND_FREE_SPEC_TMP_HANDLER, - ZEND_FREE_SPEC_TMP_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER, - ZEND_INIT_ARRAY_SPEC_CONST_TMP_HANDLER, - ZEND_INIT_ARRAY_SPEC_CONST_VAR_HANDLER, - ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER, - ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER, - ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER, - ZEND_INIT_ARRAY_SPEC_TMP_TMP_HANDLER, - ZEND_INIT_ARRAY_SPEC_TMP_VAR_HANDLER, - ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER, - ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER, - ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER, - ZEND_INIT_ARRAY_SPEC_VAR_TMP_HANDLER, - ZEND_INIT_ARRAY_SPEC_VAR_VAR_HANDLER, - ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER, - ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER, - ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER, - ZEND_INIT_ARRAY_SPEC_UNUSED_TMP_HANDLER, - ZEND_INIT_ARRAY_SPEC_UNUSED_VAR_HANDLER, - ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER, - ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER, - ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER, - ZEND_INIT_ARRAY_SPEC_CV_TMP_HANDLER, - ZEND_INIT_ARRAY_SPEC_CV_VAR_HANDLER, - ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER, - ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMP_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_VAR_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_VAR_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_VAR_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMP_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_VAR_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER, - ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER, - ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER, - ZEND_UNSET_VAR_SPEC_CONST_HANDLER, - ZEND_UNSET_VAR_SPEC_CONST_HANDLER, - ZEND_UNSET_VAR_SPEC_CONST_HANDLER, - ZEND_UNSET_VAR_SPEC_CONST_HANDLER, - ZEND_UNSET_VAR_SPEC_CONST_HANDLER, - ZEND_UNSET_VAR_SPEC_TMP_HANDLER, - ZEND_UNSET_VAR_SPEC_TMP_HANDLER, - ZEND_UNSET_VAR_SPEC_TMP_HANDLER, - ZEND_UNSET_VAR_SPEC_TMP_HANDLER, - ZEND_UNSET_VAR_SPEC_TMP_HANDLER, - ZEND_UNSET_VAR_SPEC_VAR_HANDLER, - ZEND_UNSET_VAR_SPEC_VAR_HANDLER, - ZEND_UNSET_VAR_SPEC_VAR_HANDLER, - ZEND_UNSET_VAR_SPEC_VAR_HANDLER, - ZEND_UNSET_VAR_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_UNSET_VAR_SPEC_CV_HANDLER, - ZEND_UNSET_VAR_SPEC_CV_HANDLER, - ZEND_UNSET_VAR_SPEC_CV_HANDLER, - ZEND_UNSET_VAR_SPEC_CV_HANDLER, - ZEND_UNSET_VAR_SPEC_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER, - ZEND_UNSET_DIM_SPEC_VAR_TMP_HANDLER, - ZEND_UNSET_DIM_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER, - ZEND_UNSET_DIM_SPEC_UNUSED_CONST_HANDLER, - ZEND_UNSET_DIM_SPEC_UNUSED_TMP_HANDLER, - ZEND_UNSET_DIM_SPEC_UNUSED_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_UNSET_DIM_SPEC_UNUSED_CV_HANDLER, - ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER, - ZEND_UNSET_DIM_SPEC_CV_TMP_HANDLER, - ZEND_UNSET_DIM_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER, - ZEND_UNSET_OBJ_SPEC_VAR_TMP_HANDLER, - ZEND_UNSET_OBJ_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER, - ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER, - ZEND_UNSET_OBJ_SPEC_UNUSED_TMP_HANDLER, - ZEND_UNSET_OBJ_SPEC_UNUSED_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER, - ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER, - ZEND_UNSET_OBJ_SPEC_CV_TMP_HANDLER, - ZEND_UNSET_OBJ_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER, - ZEND_FE_RESET_SPEC_CONST_HANDLER, - ZEND_FE_RESET_SPEC_CONST_HANDLER, - ZEND_FE_RESET_SPEC_CONST_HANDLER, - ZEND_FE_RESET_SPEC_CONST_HANDLER, - ZEND_FE_RESET_SPEC_CONST_HANDLER, - ZEND_FE_RESET_SPEC_TMP_HANDLER, - ZEND_FE_RESET_SPEC_TMP_HANDLER, - ZEND_FE_RESET_SPEC_TMP_HANDLER, - ZEND_FE_RESET_SPEC_TMP_HANDLER, - ZEND_FE_RESET_SPEC_TMP_HANDLER, - ZEND_FE_RESET_SPEC_VAR_HANDLER, - ZEND_FE_RESET_SPEC_VAR_HANDLER, - ZEND_FE_RESET_SPEC_VAR_HANDLER, - ZEND_FE_RESET_SPEC_VAR_HANDLER, - ZEND_FE_RESET_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FE_RESET_SPEC_CV_HANDLER, - ZEND_FE_RESET_SPEC_CV_HANDLER, - ZEND_FE_RESET_SPEC_CV_HANDLER, - ZEND_FE_RESET_SPEC_CV_HANDLER, - ZEND_FE_RESET_SPEC_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FE_FETCH_SPEC_VAR_HANDLER, - ZEND_FE_FETCH_SPEC_VAR_HANDLER, - ZEND_FE_FETCH_SPEC_VAR_HANDLER, - ZEND_FE_FETCH_SPEC_VAR_HANDLER, - ZEND_FE_FETCH_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_EXIT_SPEC_CONST_HANDLER, - ZEND_EXIT_SPEC_CONST_HANDLER, - ZEND_EXIT_SPEC_CONST_HANDLER, - ZEND_EXIT_SPEC_CONST_HANDLER, - ZEND_EXIT_SPEC_CONST_HANDLER, - ZEND_EXIT_SPEC_TMP_HANDLER, - ZEND_EXIT_SPEC_TMP_HANDLER, - ZEND_EXIT_SPEC_TMP_HANDLER, - ZEND_EXIT_SPEC_TMP_HANDLER, - ZEND_EXIT_SPEC_TMP_HANDLER, - ZEND_EXIT_SPEC_VAR_HANDLER, - ZEND_EXIT_SPEC_VAR_HANDLER, - ZEND_EXIT_SPEC_VAR_HANDLER, - ZEND_EXIT_SPEC_VAR_HANDLER, - ZEND_EXIT_SPEC_VAR_HANDLER, - ZEND_EXIT_SPEC_UNUSED_HANDLER, - ZEND_EXIT_SPEC_UNUSED_HANDLER, - ZEND_EXIT_SPEC_UNUSED_HANDLER, - ZEND_EXIT_SPEC_UNUSED_HANDLER, - ZEND_EXIT_SPEC_UNUSED_HANDLER, - ZEND_EXIT_SPEC_CV_HANDLER, - ZEND_EXIT_SPEC_CV_HANDLER, - ZEND_EXIT_SPEC_CV_HANDLER, - ZEND_EXIT_SPEC_CV_HANDLER, - ZEND_EXIT_SPEC_CV_HANDLER, - ZEND_FETCH_R_SPEC_CONST_HANDLER, - ZEND_FETCH_R_SPEC_CONST_HANDLER, - ZEND_FETCH_R_SPEC_CONST_HANDLER, - ZEND_FETCH_R_SPEC_CONST_HANDLER, - ZEND_FETCH_R_SPEC_CONST_HANDLER, - ZEND_FETCH_R_SPEC_TMP_HANDLER, - ZEND_FETCH_R_SPEC_TMP_HANDLER, - ZEND_FETCH_R_SPEC_TMP_HANDLER, - ZEND_FETCH_R_SPEC_TMP_HANDLER, - ZEND_FETCH_R_SPEC_TMP_HANDLER, - ZEND_FETCH_R_SPEC_VAR_HANDLER, - ZEND_FETCH_R_SPEC_VAR_HANDLER, - ZEND_FETCH_R_SPEC_VAR_HANDLER, - ZEND_FETCH_R_SPEC_VAR_HANDLER, - ZEND_FETCH_R_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_R_SPEC_CV_HANDLER, - ZEND_FETCH_R_SPEC_CV_HANDLER, - ZEND_FETCH_R_SPEC_CV_HANDLER, - ZEND_FETCH_R_SPEC_CV_HANDLER, - ZEND_FETCH_R_SPEC_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_DIM_R_SPEC_VAR_CONST_HANDLER, - ZEND_FETCH_DIM_R_SPEC_VAR_TMP_HANDLER, - ZEND_FETCH_DIM_R_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_DIM_R_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER, - ZEND_FETCH_DIM_R_SPEC_CV_TMP_HANDLER, - ZEND_FETCH_DIM_R_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HANDLER, - ZEND_FETCH_OBJ_R_SPEC_VAR_TMP_HANDLER, - ZEND_FETCH_OBJ_R_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLER, - ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER, - ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMP_HANDLER, - ZEND_FETCH_OBJ_R_SPEC_UNUSED_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER, - ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER, - ZEND_FETCH_OBJ_R_SPEC_CV_TMP_HANDLER, - ZEND_FETCH_OBJ_R_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER, - ZEND_FETCH_W_SPEC_CONST_HANDLER, - ZEND_FETCH_W_SPEC_CONST_HANDLER, - ZEND_FETCH_W_SPEC_CONST_HANDLER, - ZEND_FETCH_W_SPEC_CONST_HANDLER, - ZEND_FETCH_W_SPEC_CONST_HANDLER, - ZEND_FETCH_W_SPEC_TMP_HANDLER, - ZEND_FETCH_W_SPEC_TMP_HANDLER, - ZEND_FETCH_W_SPEC_TMP_HANDLER, - ZEND_FETCH_W_SPEC_TMP_HANDLER, - ZEND_FETCH_W_SPEC_TMP_HANDLER, - ZEND_FETCH_W_SPEC_VAR_HANDLER, - ZEND_FETCH_W_SPEC_VAR_HANDLER, - ZEND_FETCH_W_SPEC_VAR_HANDLER, - ZEND_FETCH_W_SPEC_VAR_HANDLER, - ZEND_FETCH_W_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_W_SPEC_CV_HANDLER, - ZEND_FETCH_W_SPEC_CV_HANDLER, - ZEND_FETCH_W_SPEC_CV_HANDLER, - ZEND_FETCH_W_SPEC_CV_HANDLER, - ZEND_FETCH_W_SPEC_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER, - ZEND_FETCH_DIM_W_SPEC_VAR_TMP_HANDLER, - ZEND_FETCH_DIM_W_SPEC_VAR_VAR_HANDLER, - ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER, - ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER, - ZEND_FETCH_DIM_W_SPEC_CV_TMP_HANDLER, - ZEND_FETCH_DIM_W_SPEC_CV_VAR_HANDLER, - ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER, - ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER, - ZEND_FETCH_OBJ_W_SPEC_VAR_TMP_HANDLER, - ZEND_FETCH_OBJ_W_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER, - ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER, - ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMP_HANDLER, - ZEND_FETCH_OBJ_W_SPEC_UNUSED_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER, - ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER, - ZEND_FETCH_OBJ_W_SPEC_CV_TMP_HANDLER, - ZEND_FETCH_OBJ_W_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER, - ZEND_FETCH_RW_SPEC_CONST_HANDLER, - ZEND_FETCH_RW_SPEC_CONST_HANDLER, - ZEND_FETCH_RW_SPEC_CONST_HANDLER, - ZEND_FETCH_RW_SPEC_CONST_HANDLER, - ZEND_FETCH_RW_SPEC_CONST_HANDLER, - ZEND_FETCH_RW_SPEC_TMP_HANDLER, - ZEND_FETCH_RW_SPEC_TMP_HANDLER, - ZEND_FETCH_RW_SPEC_TMP_HANDLER, - ZEND_FETCH_RW_SPEC_TMP_HANDLER, - ZEND_FETCH_RW_SPEC_TMP_HANDLER, - ZEND_FETCH_RW_SPEC_VAR_HANDLER, - ZEND_FETCH_RW_SPEC_VAR_HANDLER, - ZEND_FETCH_RW_SPEC_VAR_HANDLER, - ZEND_FETCH_RW_SPEC_VAR_HANDLER, - ZEND_FETCH_RW_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_RW_SPEC_CV_HANDLER, - ZEND_FETCH_RW_SPEC_CV_HANDLER, - ZEND_FETCH_RW_SPEC_CV_HANDLER, - ZEND_FETCH_RW_SPEC_CV_HANDLER, - ZEND_FETCH_RW_SPEC_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER, - ZEND_FETCH_DIM_RW_SPEC_VAR_TMP_HANDLER, - ZEND_FETCH_DIM_RW_SPEC_VAR_VAR_HANDLER, - ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER, - ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER, - ZEND_FETCH_DIM_RW_SPEC_CV_TMP_HANDLER, - ZEND_FETCH_DIM_RW_SPEC_CV_VAR_HANDLER, - ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER, - ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER, - ZEND_FETCH_OBJ_RW_SPEC_VAR_TMP_HANDLER, - ZEND_FETCH_OBJ_RW_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER, - ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER, - ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMP_HANDLER, - ZEND_FETCH_OBJ_RW_SPEC_UNUSED_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER, - ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER, - ZEND_FETCH_OBJ_RW_SPEC_CV_TMP_HANDLER, - ZEND_FETCH_OBJ_RW_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER, - ZEND_FETCH_IS_SPEC_CONST_HANDLER, - ZEND_FETCH_IS_SPEC_CONST_HANDLER, - ZEND_FETCH_IS_SPEC_CONST_HANDLER, - ZEND_FETCH_IS_SPEC_CONST_HANDLER, - ZEND_FETCH_IS_SPEC_CONST_HANDLER, - ZEND_FETCH_IS_SPEC_TMP_HANDLER, - ZEND_FETCH_IS_SPEC_TMP_HANDLER, - ZEND_FETCH_IS_SPEC_TMP_HANDLER, - ZEND_FETCH_IS_SPEC_TMP_HANDLER, - ZEND_FETCH_IS_SPEC_TMP_HANDLER, - ZEND_FETCH_IS_SPEC_VAR_HANDLER, - ZEND_FETCH_IS_SPEC_VAR_HANDLER, - ZEND_FETCH_IS_SPEC_VAR_HANDLER, - ZEND_FETCH_IS_SPEC_VAR_HANDLER, - ZEND_FETCH_IS_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_IS_SPEC_CV_HANDLER, - ZEND_FETCH_IS_SPEC_CV_HANDLER, - ZEND_FETCH_IS_SPEC_CV_HANDLER, - ZEND_FETCH_IS_SPEC_CV_HANDLER, - ZEND_FETCH_IS_SPEC_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_DIM_IS_SPEC_VAR_CONST_HANDLER, - ZEND_FETCH_DIM_IS_SPEC_VAR_TMP_HANDLER, - ZEND_FETCH_DIM_IS_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_DIM_IS_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER, - ZEND_FETCH_DIM_IS_SPEC_CV_TMP_HANDLER, - ZEND_FETCH_DIM_IS_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_IS_SPEC_VAR_CONST_HANDLER, - ZEND_FETCH_OBJ_IS_SPEC_VAR_TMP_HANDLER, - ZEND_FETCH_OBJ_IS_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_IS_SPEC_VAR_CV_HANDLER, - ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER, - ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMP_HANDLER, - ZEND_FETCH_OBJ_IS_SPEC_UNUSED_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER, - ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER, - ZEND_FETCH_OBJ_IS_SPEC_CV_TMP_HANDLER, - ZEND_FETCH_OBJ_IS_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_CONST_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_CONST_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_CONST_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_CONST_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_CONST_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_TMP_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_TMP_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_TMP_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_TMP_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_TMP_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_VAR_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_VAR_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_VAR_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_VAR_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_CV_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_CV_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_CV_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_CV_HANDLER, - ZEND_FETCH_FUNC_ARG_SPEC_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER, - ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMP_HANDLER, - ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_VAR_HANDLER, - ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER, - ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER, - ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMP_HANDLER, - ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_VAR_HANDLER, - ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER, - ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER, - ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMP_HANDLER, - ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER, - ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER, - ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMP_HANDLER, - ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER, - ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER, - ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP_HANDLER, - ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER, - ZEND_FETCH_UNSET_SPEC_CONST_HANDLER, - ZEND_FETCH_UNSET_SPEC_CONST_HANDLER, - ZEND_FETCH_UNSET_SPEC_CONST_HANDLER, - ZEND_FETCH_UNSET_SPEC_CONST_HANDLER, - ZEND_FETCH_UNSET_SPEC_CONST_HANDLER, - ZEND_FETCH_UNSET_SPEC_TMP_HANDLER, - ZEND_FETCH_UNSET_SPEC_TMP_HANDLER, - ZEND_FETCH_UNSET_SPEC_TMP_HANDLER, - ZEND_FETCH_UNSET_SPEC_TMP_HANDLER, - ZEND_FETCH_UNSET_SPEC_TMP_HANDLER, - ZEND_FETCH_UNSET_SPEC_VAR_HANDLER, - ZEND_FETCH_UNSET_SPEC_VAR_HANDLER, - ZEND_FETCH_UNSET_SPEC_VAR_HANDLER, - ZEND_FETCH_UNSET_SPEC_VAR_HANDLER, - ZEND_FETCH_UNSET_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_UNSET_SPEC_CV_HANDLER, - ZEND_FETCH_UNSET_SPEC_CV_HANDLER, - ZEND_FETCH_UNSET_SPEC_CV_HANDLER, - ZEND_FETCH_UNSET_SPEC_CV_HANDLER, - ZEND_FETCH_UNSET_SPEC_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER, - ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMP_HANDLER, - ZEND_FETCH_DIM_UNSET_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER, - ZEND_FETCH_DIM_UNSET_SPEC_CV_TMP_HANDLER, - ZEND_FETCH_DIM_UNSET_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER, - ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMP_HANDLER, - ZEND_FETCH_OBJ_UNSET_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER, - ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER, - ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMP_HANDLER, - ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER, - ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER, - ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMP_HANDLER, - ZEND_FETCH_OBJ_UNSET_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER, - ZEND_FETCH_DIM_TMP_VAR_SPEC_CONST_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_DIM_TMP_VAR_SPEC_TMP_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_CONSTANT_SPEC_CONST_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_STMT_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_FCALL_END_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_EXT_NOP_SPEC_HANDLER, - ZEND_TICKS_SPEC_CONST_HANDLER, - ZEND_TICKS_SPEC_CONST_HANDLER, - ZEND_TICKS_SPEC_CONST_HANDLER, - ZEND_TICKS_SPEC_CONST_HANDLER, - ZEND_TICKS_SPEC_CONST_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER, - ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER, - ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER, - ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER, - ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER, - ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER, - ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER, - ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER, - ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_CATCH_SPEC_HANDLER, - ZEND_THROW_SPEC_CONST_HANDLER, - ZEND_THROW_SPEC_CONST_HANDLER, - ZEND_THROW_SPEC_CONST_HANDLER, - ZEND_THROW_SPEC_CONST_HANDLER, - ZEND_THROW_SPEC_CONST_HANDLER, - ZEND_THROW_SPEC_TMP_HANDLER, - ZEND_THROW_SPEC_TMP_HANDLER, - ZEND_THROW_SPEC_TMP_HANDLER, - ZEND_THROW_SPEC_TMP_HANDLER, - ZEND_THROW_SPEC_TMP_HANDLER, - ZEND_THROW_SPEC_VAR_HANDLER, - ZEND_THROW_SPEC_VAR_HANDLER, - ZEND_THROW_SPEC_VAR_HANDLER, - ZEND_THROW_SPEC_VAR_HANDLER, - ZEND_THROW_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_THROW_SPEC_CV_HANDLER, - ZEND_THROW_SPEC_CV_HANDLER, - ZEND_THROW_SPEC_CV_HANDLER, - ZEND_THROW_SPEC_CV_HANDLER, - ZEND_THROW_SPEC_CV_HANDLER, - ZEND_FETCH_CLASS_SPEC_CONST_HANDLER, - ZEND_FETCH_CLASS_SPEC_TMP_HANDLER, - ZEND_FETCH_CLASS_SPEC_VAR_HANDLER, - ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER, - ZEND_FETCH_CLASS_SPEC_CV_HANDLER, - ZEND_FETCH_CLASS_SPEC_CONST_HANDLER, - ZEND_FETCH_CLASS_SPEC_TMP_HANDLER, - ZEND_FETCH_CLASS_SPEC_VAR_HANDLER, - ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER, - ZEND_FETCH_CLASS_SPEC_CV_HANDLER, - ZEND_FETCH_CLASS_SPEC_CONST_HANDLER, - ZEND_FETCH_CLASS_SPEC_TMP_HANDLER, - ZEND_FETCH_CLASS_SPEC_VAR_HANDLER, - ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER, - ZEND_FETCH_CLASS_SPEC_CV_HANDLER, - ZEND_FETCH_CLASS_SPEC_CONST_HANDLER, - ZEND_FETCH_CLASS_SPEC_TMP_HANDLER, - ZEND_FETCH_CLASS_SPEC_VAR_HANDLER, - ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER, - ZEND_FETCH_CLASS_SPEC_CV_HANDLER, - ZEND_FETCH_CLASS_SPEC_CONST_HANDLER, - ZEND_FETCH_CLASS_SPEC_TMP_HANDLER, - ZEND_FETCH_CLASS_SPEC_VAR_HANDLER, - ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER, - ZEND_FETCH_CLASS_SPEC_CV_HANDLER, - ZEND_CLONE_SPEC_CONST_HANDLER, - ZEND_CLONE_SPEC_CONST_HANDLER, - ZEND_CLONE_SPEC_CONST_HANDLER, - ZEND_CLONE_SPEC_CONST_HANDLER, - ZEND_CLONE_SPEC_CONST_HANDLER, - ZEND_CLONE_SPEC_TMP_HANDLER, - ZEND_CLONE_SPEC_TMP_HANDLER, - ZEND_CLONE_SPEC_TMP_HANDLER, - ZEND_CLONE_SPEC_TMP_HANDLER, - ZEND_CLONE_SPEC_TMP_HANDLER, - ZEND_CLONE_SPEC_VAR_HANDLER, - ZEND_CLONE_SPEC_VAR_HANDLER, - ZEND_CLONE_SPEC_VAR_HANDLER, - ZEND_CLONE_SPEC_VAR_HANDLER, - ZEND_CLONE_SPEC_VAR_HANDLER, - ZEND_CLONE_SPEC_UNUSED_HANDLER, - ZEND_CLONE_SPEC_UNUSED_HANDLER, - ZEND_CLONE_SPEC_UNUSED_HANDLER, - ZEND_CLONE_SPEC_UNUSED_HANDLER, - ZEND_CLONE_SPEC_UNUSED_HANDLER, - ZEND_CLONE_SPEC_CV_HANDLER, - ZEND_CLONE_SPEC_CV_HANDLER, - ZEND_CLONE_SPEC_CV_HANDLER, - ZEND_CLONE_SPEC_CV_HANDLER, - ZEND_CLONE_SPEC_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_INIT_METHOD_CALL_SPEC_TMP_CONST_HANDLER, - ZEND_INIT_METHOD_CALL_SPEC_TMP_TMP_HANDLER, - ZEND_INIT_METHOD_CALL_SPEC_TMP_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_INIT_METHOD_CALL_SPEC_TMP_CV_HANDLER, - ZEND_INIT_METHOD_CALL_SPEC_VAR_CONST_HANDLER, - ZEND_INIT_METHOD_CALL_SPEC_VAR_TMP_HANDLER, - ZEND_INIT_METHOD_CALL_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_INIT_METHOD_CALL_SPEC_VAR_CV_HANDLER, - ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER, - ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMP_HANDLER, - ZEND_INIT_METHOD_CALL_SPEC_UNUSED_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER, - ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER, - ZEND_INIT_METHOD_CALL_SPEC_CV_TMP_HANDLER, - ZEND_INIT_METHOD_CALL_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_TMP_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_CV_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_TMP_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_CV_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_TMP_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_CV_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_TMP_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_CV_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_TMP_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_HANDLER, - ZEND_INIT_STATIC_METHOD_CALL_SPEC_CV_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_HANDLER, - ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CONST_HANDLER, - ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_TMP_HANDLER, - ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CV_HANDLER, - ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CONST_HANDLER, - ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_TMP_HANDLER, - ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CV_HANDLER, - ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER, - ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMP_HANDLER, - ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER, - ZEND_PRE_INC_OBJ_SPEC_VAR_TMP_HANDLER, - ZEND_PRE_INC_OBJ_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER, - ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER, - ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMP_HANDLER, - ZEND_PRE_INC_OBJ_SPEC_UNUSED_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER, - ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER, - ZEND_PRE_INC_OBJ_SPEC_CV_TMP_HANDLER, - ZEND_PRE_INC_OBJ_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST_HANDLER, - ZEND_PRE_DEC_OBJ_SPEC_VAR_TMP_HANDLER, - ZEND_PRE_DEC_OBJ_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_HANDLER, - ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER, - ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMP_HANDLER, - ZEND_PRE_DEC_OBJ_SPEC_UNUSED_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_HANDLER, - ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_HANDLER, - ZEND_PRE_DEC_OBJ_SPEC_CV_TMP_HANDLER, - ZEND_PRE_DEC_OBJ_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_PRE_DEC_OBJ_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER, - ZEND_POST_INC_OBJ_SPEC_VAR_TMP_HANDLER, - ZEND_POST_INC_OBJ_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER, - ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER, - ZEND_POST_INC_OBJ_SPEC_UNUSED_TMP_HANDLER, - ZEND_POST_INC_OBJ_SPEC_UNUSED_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER, - ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER, - ZEND_POST_INC_OBJ_SPEC_CV_TMP_HANDLER, - ZEND_POST_INC_OBJ_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_HANDLER, - ZEND_POST_DEC_OBJ_SPEC_VAR_TMP_HANDLER, - ZEND_POST_DEC_OBJ_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_POST_DEC_OBJ_SPEC_VAR_CV_HANDLER, - ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER, - ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMP_HANDLER, - ZEND_POST_DEC_OBJ_SPEC_UNUSED_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_HANDLER, - ZEND_POST_DEC_OBJ_SPEC_CV_CONST_HANDLER, - ZEND_POST_DEC_OBJ_SPEC_CV_TMP_HANDLER, - ZEND_POST_DEC_OBJ_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_POST_DEC_OBJ_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_HANDLER, - ZEND_ASSIGN_OBJ_SPEC_VAR_TMP_HANDLER, - ZEND_ASSIGN_OBJ_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_OBJ_SPEC_VAR_CV_HANDLER, - ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_HANDLER, - ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMP_HANDLER, - ZEND_ASSIGN_OBJ_SPEC_UNUSED_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_HANDLER, - ZEND_ASSIGN_OBJ_SPEC_CV_CONST_HANDLER, - ZEND_ASSIGN_OBJ_SPEC_CV_TMP_HANDLER, - ZEND_ASSIGN_OBJ_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_OBJ_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_INSTANCEOF_SPEC_TMP_HANDLER, - ZEND_INSTANCEOF_SPEC_TMP_HANDLER, - ZEND_INSTANCEOF_SPEC_TMP_HANDLER, - ZEND_INSTANCEOF_SPEC_TMP_HANDLER, - ZEND_INSTANCEOF_SPEC_TMP_HANDLER, - ZEND_INSTANCEOF_SPEC_VAR_HANDLER, - ZEND_INSTANCEOF_SPEC_VAR_HANDLER, - ZEND_INSTANCEOF_SPEC_VAR_HANDLER, - ZEND_INSTANCEOF_SPEC_VAR_HANDLER, - ZEND_INSTANCEOF_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_INSTANCEOF_SPEC_CV_HANDLER, - ZEND_INSTANCEOF_SPEC_CV_HANDLER, - ZEND_INSTANCEOF_SPEC_CV_HANDLER, - ZEND_INSTANCEOF_SPEC_CV_HANDLER, - ZEND_INSTANCEOF_SPEC_CV_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_DECLARE_FUNCTION_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_ADD_INTERFACE_SPEC_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_DIM_SPEC_VAR_CONST_HANDLER, - ZEND_ASSIGN_DIM_SPEC_VAR_TMP_HANDLER, - ZEND_ASSIGN_DIM_SPEC_VAR_VAR_HANDLER, - ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_HANDLER, - ZEND_ASSIGN_DIM_SPEC_VAR_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ASSIGN_DIM_SPEC_CV_CONST_HANDLER, - ZEND_ASSIGN_DIM_SPEC_CV_TMP_HANDLER, - ZEND_ASSIGN_DIM_SPEC_CV_VAR_HANDLER, - ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_HANDLER, - ZEND_ASSIGN_DIM_SPEC_CV_CV_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_CONST_HANDLER, - ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_TMP_HANDLER, - ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_CV_HANDLER, - ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER, - ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMP_HANDLER, - ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER, - ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER, - ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMP_HANDLER, - ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_USER_OPCODE_SPEC_HANDLER, - ZEND_U_NORMALIZE_SPEC_CONST_HANDLER, - ZEND_U_NORMALIZE_SPEC_CONST_HANDLER, - ZEND_U_NORMALIZE_SPEC_CONST_HANDLER, - ZEND_U_NORMALIZE_SPEC_CONST_HANDLER, - ZEND_U_NORMALIZE_SPEC_CONST_HANDLER, - ZEND_U_NORMALIZE_SPEC_TMP_HANDLER, - ZEND_U_NORMALIZE_SPEC_TMP_HANDLER, - ZEND_U_NORMALIZE_SPEC_TMP_HANDLER, - ZEND_U_NORMALIZE_SPEC_TMP_HANDLER, - ZEND_U_NORMALIZE_SPEC_TMP_HANDLER, - ZEND_U_NORMALIZE_SPEC_VAR_HANDLER, - ZEND_U_NORMALIZE_SPEC_VAR_HANDLER, - ZEND_U_NORMALIZE_SPEC_VAR_HANDLER, - ZEND_U_NORMALIZE_SPEC_VAR_HANDLER, - ZEND_U_NORMALIZE_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_U_NORMALIZE_SPEC_CV_HANDLER, - ZEND_U_NORMALIZE_SPEC_CV_HANDLER, - ZEND_U_NORMALIZE_SPEC_CV_HANDLER, - ZEND_U_NORMALIZE_SPEC_CV_HANDLER, - ZEND_U_NORMALIZE_SPEC_CV_HANDLER, - ZEND_JMP_SET_SPEC_CONST_HANDLER, - ZEND_JMP_SET_SPEC_CONST_HANDLER, - ZEND_JMP_SET_SPEC_CONST_HANDLER, - ZEND_JMP_SET_SPEC_CONST_HANDLER, - ZEND_JMP_SET_SPEC_CONST_HANDLER, - ZEND_JMP_SET_SPEC_TMP_HANDLER, - ZEND_JMP_SET_SPEC_TMP_HANDLER, - ZEND_JMP_SET_SPEC_TMP_HANDLER, - ZEND_JMP_SET_SPEC_TMP_HANDLER, - ZEND_JMP_SET_SPEC_TMP_HANDLER, - ZEND_JMP_SET_SPEC_VAR_HANDLER, - ZEND_JMP_SET_SPEC_VAR_HANDLER, - ZEND_JMP_SET_SPEC_VAR_HANDLER, - ZEND_JMP_SET_SPEC_VAR_HANDLER, - ZEND_JMP_SET_SPEC_VAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_JMP_SET_SPEC_CV_HANDLER, - ZEND_JMP_SET_SPEC_CV_HANDLER, - ZEND_JMP_SET_SPEC_CV_HANDLER, - ZEND_JMP_SET_SPEC_CV_HANDLER, - ZEND_JMP_SET_SPEC_CV_HANDLER, - ZEND_NULL_HANDLER - }; - zend_opcode_handlers = (opcode_handler_t*)labels; -} -static opcode_handler_t zend_vm_get_opcode_handler(zend_uchar opcode, zend_op* op) -{ - static const int zend_vm_decode[] = { - _UNUSED_CODE, /* 0 */ - _CONST_CODE, /* 1 = IS_CONST */ - _TMP_CODE, /* 2 = IS_TMP_VAR */ - _UNUSED_CODE, /* 3 */ - _VAR_CODE, /* 4 = IS_VAR */ - _UNUSED_CODE, /* 5 */ - _UNUSED_CODE, /* 6 */ - _UNUSED_CODE, /* 7 */ - _UNUSED_CODE, /* 8 = IS_UNUSED */ - _UNUSED_CODE, /* 9 */ - _UNUSED_CODE, /* 10 */ - _UNUSED_CODE, /* 11 */ - _UNUSED_CODE, /* 12 */ - _UNUSED_CODE, /* 13 */ - _UNUSED_CODE, /* 14 */ - _UNUSED_CODE, /* 15 */ - _CV_CODE /* 16 = IS_CV */ - }; - return zend_opcode_handlers[opcode * 25 + zend_vm_decode[op->op1.op_type] * 5 + zend_vm_decode[op->op2.op_type]]; -} - -ZEND_API void zend_vm_set_opcode_handler(zend_op* op) -{ - op->handler = zend_vm_get_opcode_handler(zend_user_opcodes[op->opcode], op); -} - -ZEND_API int zend_do_fcall(ZEND_OPCODE_HANDLER_ARGS) -{ - return zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - diff --git a/Zend/zend_vm_execute.skl b/Zend/zend_vm_execute.skl deleted file mode 100644 index b7a269d39c111..0000000000000 --- a/Zend/zend_vm_execute.skl +++ /dev/null @@ -1,77 +0,0 @@ -{%DEFINES%} - -ZEND_API void {%EXECUTOR_NAME%}(zend_op_array *op_array TSRMLS_DC) -{ - zend_execute_data execute_data; - {%HELPER_VARS%} - - {%INTERNAL_LABELS%} - - if (EG(exception)) { - return; - } - - /* Initialize execute_data */ - EX(fbc) = NULL; - EX(object) = NULL; - EX(old_error_reporting) = NULL; - if (op_array->T < TEMP_VAR_STACK_LIMIT) { - EX(Ts) = (temp_variable *) do_alloca(sizeof(temp_variable) * op_array->T); - } else { - EX(Ts) = (temp_variable *) safe_emalloc(sizeof(temp_variable), op_array->T, 0); - } - EX(CVs) = (zval***)do_alloca(sizeof(zval**) * op_array->last_var); - memset(EX(CVs), 0, sizeof(zval**) * op_array->last_var); - EX(op_array) = op_array; - EX(original_in_execution) = EG(in_execution); - EX(symbol_table) = EG(active_symbol_table); - EX(prev_execute_data) = EG(current_execute_data); - EG(current_execute_data) = &execute_data; - - EG(in_execution) = 1; - if (op_array->start_op) { - ZEND_VM_SET_OPCODE(op_array->start_op); - } else { - ZEND_VM_SET_OPCODE(op_array->opcodes); - } - - if (op_array->uses_this && EG(This)) { - EG(This)->refcount++; /* For $this pointer */ - if (zend_ascii_hash_add(EG(active_symbol_table), "this", sizeof("this"), &EG(This), sizeof(zval *), NULL)==FAILURE) { - EG(This)->refcount--; - } - } - - EG(opline_ptr) = &EX(opline); - - EX(function_state).function = (zend_function *) op_array; - EG(function_state_ptr) = &EX(function_state); -#if ZEND_DEBUG - /* function_state.function_symbol_table is saved as-is to a stack, - * which is an intentional UMR. Shut it up if we're in DEBUG. - */ - EX(function_state).function_symbol_table = NULL; -#endif - - while (1) { - {%ZEND_VM_CONTINUE_LABEL%} -#ifdef ZEND_WIN32 - if (EG(timed_out)) { - zend_timeout(0); - } -#endif - - {%ZEND_VM_DISPATCH%} { - {%INTERNAL_EXECUTOR%} - } - - } - zend_error_noreturn(E_ERROR, "Arrived at end of main loop which shouldn't happen"); -} - -{%EXTERNAL_EXECUTOR%} - -void {%INITIALIZER_NAME%}() -{ - {%EXTERNAL_LABELS%} -} diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php deleted file mode 100644 index bb42f5155599d..0000000000000 --- a/Zend/zend_vm_gen.php +++ /dev/null @@ -1,1302 +0,0 @@ - | - +----------------------------------------------------------------------+ - - $Id$ -*/ - -$header_text = <<< DATA -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - | Dmitry Stogov | - +----------------------------------------------------------------------+ -*/ - - -DATA; - -/* - This script creates zend_vm_execute.h and zend_vm_opcodes.h - from existing zend_vm_def.h and zend_vm_execute.skl -*/ - -error_reporting(E_ALL); - -define("ZEND_VM_KIND_CALL", 1); -define("ZEND_VM_KIND_SWITCH", 2); -define("ZEND_VM_KIND_GOTO", 3); - -$op_types = array( - "ANY", - "CONST", - "TMP", - "VAR", - "UNUSED", - "CV" -); - -$prefix = array( - "ANY" => "", - "TMP" => "_TMP", - "VAR" => "_VAR", - "CONST" => "_CONST", - "UNUSED" => "_UNUSED", - "CV" => "_CV", -); - -$typecode = array( - "ANY" => 0, - "TMP" => 1, - "VAR" => 2, - "CONST" => 0, - "UNUSED" => 3, - "CV" => 4, -); - -$op1_type = array( - "ANY" => "opline->op1.op_type", - "TMP" => "IS_TMP_VAR", - "VAR" => "IS_VAR", - "CONST" => "IS_CONST", - "UNUSED" => "IS_UNUSED", - "CV" => "IS_CV", -); - -$op2_type = array( - "ANY" => "opline->op2.op_type", - "TMP" => "IS_TMP_VAR", - "VAR" => "IS_VAR", - "CONST" => "IS_CONST", - "UNUSED" => "IS_UNUSED", - "CV" => "IS_CV", -); - -$op1_free = array( - "ANY" => "(free_op1.var != NULL)", - "TMP" => "1", - "VAR" => "(free_op1.var != NULL)", - "CONST" => "0", - "UNUSED" => "0", - "CV" => "0", -); - -$op2_free = array( - "ANY" => "(free_op2.var != NULL)", - "TMP" => "1", - "VAR" => "(free_op2.var != NULL)", - "CONST" => "0", - "UNUSED" => "0", - "CV" => "0", -); - -$op1_get_zval_ptr = array( - "ANY" => "get_zval_ptr(&opline->op1, EX(Ts), &free_op1, \\1)", - "TMP" => "_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC)", - "VAR" => "_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC)", - "CONST" => "&opline->op1.u.constant", - "UNUSED" => "NULL", - "CV" => "_get_zval_ptr_cv(&opline->op1, EX(Ts), \\1 TSRMLS_CC)", -); - -$op2_get_zval_ptr = array( - "ANY" => "get_zval_ptr(&opline->op2, EX(Ts), &free_op2, \\1)", - "TMP" => "_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC)", - "VAR" => "_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC)", - "CONST" => "&opline->op2.u.constant", - "UNUSED" => "NULL", - "CV" => "_get_zval_ptr_cv(&opline->op2, EX(Ts), \\1 TSRMLS_CC)", -); - -$op1_get_zval_ptr_ptr = array( - "ANY" => "get_zval_ptr_ptr(&opline->op1, EX(Ts), &free_op1, \\1)", - "TMP" => "NULL", - "VAR" => "_get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC)", - "CONST" => "NULL", - "UNUSED" => "NULL", - "CV" => "_get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), \\1 TSRMLS_CC)", -); - -$op2_get_zval_ptr_ptr = array( - "ANY" => "get_zval_ptr_ptr(&opline->op2, EX(Ts), &free_op2, \\1)", - "TMP" => "NULL", - "VAR" => "_get_zval_ptr_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC)", - "CONST" => "NULL", - "UNUSED" => "NULL", - "CV" => "_get_zval_ptr_ptr_cv(&opline->op2, EX(Ts), \\1 TSRMLS_CC)", -); - -$op1_get_obj_zval_ptr = array( - "ANY" => "get_obj_zval_ptr(&opline->op1, EX(Ts), &free_op1, \\1)", - "TMP" => "_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC)", - "VAR" => "_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC)", - "CONST" => "&opline->op1.u.constant", - "UNUSED" => "_get_obj_zval_ptr_unused(TSRMLS_C)", - "CV" => "_get_zval_ptr_cv(&opline->op1, EX(Ts), \\1 TSRMLS_CC)", -); - -$op2_get_obj_zval_ptr = array( - "ANY" => "get_obj_zval_ptr(&opline->op2, EX(Ts), &free_op2, \\1)", - "TMP" => "_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC)", - "VAR" => "_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC)", - "CONST" => "&opline->op2.u.constant", - "UNUSED" => "_get_obj_zval_ptr_unused(TSRMLS_C)", - "CV" => "_get_zval_ptr_cv(&opline->op2, EX(Ts), \\1 TSRMLS_CC)", -); - -$op1_get_obj_zval_ptr_ptr = array( - "ANY" => "get_obj_zval_ptr_ptr(&opline->op1, EX(Ts), &free_op1, \\1)", - "TMP" => "NULL", - "VAR" => "_get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC)", - "CONST" => "NULL", - "UNUSED" => "_get_obj_zval_ptr_ptr_unused(TSRMLS_C)", - "CV" => "_get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), \\1 TSRMLS_CC)", -); - -$op2_get_obj_zval_ptr_ptr = array( - "ANY" => "get_obj_zval_ptr_ptr(&opline->op2, EX(Ts), &free_op2, \\1)", - "TMP" => "NULL", - "VAR" => "_get_zval_ptr_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC)", - "CONST" => "NULL", - "UNUSED" => "_get_obj_zval_ptr_ptr_unused(TSRMLS_C)", - "CV" => "_get_zval_ptr_ptr_cv(&opline->op2, EX(Ts), \\1 TSRMLS_CC)", -); - -$op1_is_tmp_free = array( - "ANY" => "IS_TMP_FREE(free_op1)", - "TMP" => "1", - "VAR" => "0", - "CONST" => "0", - "UNUSED" => "0", - "CV" => "0", -); - -$op2_is_tmp_free = array( - "ANY" => "IS_TMP_FREE(free_op2)", - "TMP" => "1", - "VAR" => "0", - "CONST" => "0", - "UNUSED" => "0", - "CV" => "0", -); - -$op1_free_op = array( - "ANY" => "FREE_OP(free_op1)", - "TMP" => "zval_dtor(free_op1.var)", - "VAR" => "if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}", - "CONST" => "", - "UNUSED" => "", - "CV" => "", -); - -$op2_free_op = array( - "ANY" => "FREE_OP(free_op2)", - "TMP" => "zval_dtor(free_op2.var)", - "VAR" => "if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}", - "CONST" => "", - "UNUSED" => "", - "CV" => "", -); - -$op1_free_op_if_var = array( - "ANY" => "FREE_OP_IF_VAR(free_op1)", - "TMP" => "", - "VAR" => "if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}", - "CONST" => "", - "UNUSED" => "", - "CV" => "", -); - -$op2_free_op_if_var = array( - "ANY" => "FREE_OP_IF_VAR(free_op2)", - "TMP" => "", - "VAR" => "if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}", - "CONST" => "", - "UNUSED" => "", - "CV" => "", -); - -$op1_free_op_var_ptr = array( - "ANY" => "if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}", - "TMP" => "", - "VAR" => "if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}", - "CONST" => "", - "UNUSED" => "", - "CV" => "", -); - -$op2_free_op_var_ptr = array( - "ANY" => "if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}", - "TMP" => "", - "VAR" => "if (free_op2.var) {zval_ptr_dtor(&free_op2.var);}", - "CONST" => "", - "UNUSED" => "", - "CV" => "", -); - -$list = array(); // list of opcode handlers and helpers in original order -$opcodes = array(); // opcode handlers by code -$helpers = array(); // opcode helpers by name -$params = array(); // parameters of helpers -$opnames = array(); // opcode name to code mapping -$line_no = 1; - -// Writes $s into resulting executor -function out($f, $s) { - global $line_no; - - fputs($f,$s); - $line_no += substr_count($s, "\n"); -} - -// Resets #line directives in resulting executor -function out_line($f) { - global $line_no, $executor_file; - - fputs($f,"#line ".($line_no+1)." \"".$executor_file."\"\n"); - ++$line_no; -} - -// Returns name of specialized helper -function helper_name($name, $spec, $op1, $op2) { - global $prefix, $helpers; - - if (isset($helpers[$name])) { - // If we haven't helper with specified spicialized operands then - // using unspecialized helper - if (!isset($helpers[$name]["op1"][$op1]) && - isset($helpers[$name]["op1"]["ANY"])) { - $op1 = "ANY"; - } - if (!isset($helpers[$name]["op2"][$op2]) && - isset($helpers[$name]["op2"]["ANY"])) { - $op2 = "ANY"; - } - } - return $name.($spec?"_SPEC":"").$prefix[$op1].$prefix[$op2]; -} - -// Generates code for opcode handler or helper -function gen_code($f, $spec, $kind, $code, $op1, $op2) { - global $op1_type, $op2_type, $op1_get_zval_ptr, $op2_get_zval_ptr, - $op1_get_zval_ptr_ptr, $op2_get_zval_ptr_ptr, - $op1_get_obj_zval_ptr, $op2_get_obj_zval_ptr, - $op1_get_obj_zval_ptr_ptr, $op2_get_obj_zval_ptr_ptr, - $op1_is_tmp_free, $op2_is_tmp_free, $op1_free, $op2_free, - $op1_free_op, $op2_free_op, $op1_free_op_if_var, $op2_free_op_if_var, - $op1_free_op_var_ptr, $op2_free_op_var_ptr, $prefix; - - // Specializing - $code = preg_replace( - array( - "/OP1_TYPE/", - "/OP2_TYPE/", - "/OP1_FREE/", - "/OP2_FREE/", - "/GET_OP1_ZVAL_PTR\(([^)]*)\)/", - "/GET_OP2_ZVAL_PTR\(([^)]*)\)/", - "/GET_OP1_ZVAL_PTR_PTR\(([^)]*)\)/", - "/GET_OP2_ZVAL_PTR_PTR\(([^)]*)\)/", - "/GET_OP1_OBJ_ZVAL_PTR\(([^)]*)\)/", - "/GET_OP2_OBJ_ZVAL_PTR\(([^)]*)\)/", - "/GET_OP1_OBJ_ZVAL_PTR_PTR\(([^)]*)\)/", - "/GET_OP2_OBJ_ZVAL_PTR_PTR\(([^)]*)\)/", - "/IS_OP1_TMP_FREE\(\)/", - "/IS_OP2_TMP_FREE\(\)/", - "/FREE_OP1\(\)/", - "/FREE_OP2\(\)/", - "/FREE_OP1_IF_VAR\(\)/", - "/FREE_OP2_IF_VAR\(\)/", - "/FREE_OP1_VAR_PTR\(\)/", - "/FREE_OP2_VAR_PTR\(\)/", - "/^#ifdef\s+ZEND_VM_SPEC\s*\n/m", - "/^#ifndef\s+ZEND_VM_SPEC\s*\n/m", - "/\!defined\(ZEND_VM_SPEC\)/m", - "/defined\(ZEND_VM_SPEC\)/m", - "/ZEND_VM_C_LABEL\(\s*([A-Za-z_]*)\s*\)/m", - "/ZEND_VM_C_GOTO\(\s*([A-Za-z_]*)\s*\)/m", - "/^#if\s+1\s*\\|\\|.*[^\\\\]$/m", - "/^#if\s+0\s*&&.*[^\\\\]$/m" - ), - array( - $op1_type[$op1], - $op2_type[$op2], - $op1_free[$op1], - $op2_free[$op2], - $op1_get_zval_ptr[$op1], - $op2_get_zval_ptr[$op2], - $op1_get_zval_ptr_ptr[$op1], - $op2_get_zval_ptr_ptr[$op2], - $op1_get_obj_zval_ptr[$op1], - $op2_get_obj_zval_ptr[$op2], - $op1_get_obj_zval_ptr_ptr[$op1], - $op2_get_obj_zval_ptr_ptr[$op2], - $op1_is_tmp_free[$op1], - $op2_is_tmp_free[$op2], - $op1_free_op[$op1], - $op2_free_op[$op2], - $op1_free_op_if_var[$op1], - $op2_free_op_if_var[$op2], - $op1_free_op_var_ptr[$op1], - $op2_free_op_var_ptr[$op2], - ($op1!="ANY"||$op2!="ANY")?"#if 1\n":"#if 0\n", - ($op1!="ANY"||$op2!="ANY")?"#if 0\n":"#if 1\n", - ($op1!="ANY"||$op2!="ANY")?"0":"1", - ($op1!="ANY"||$op2!="ANY")?"1":"0", - "\\1".(($spec && $kind != ZEND_VM_KIND_CALL)?("_SPEC".$prefix[$op1].$prefix[$op2]):""), - "goto \\1".(($spec && $kind != ZEND_VM_KIND_CALL)?("_SPEC".$prefix[$op1].$prefix[$op2]):""), - "#if 1", - "#if 0", - ), - $code); - - // Updating code according to selected threading model - switch($kind) { - case ZEND_VM_KIND_CALL: - $code = preg_replace( - array( - "/EXECUTE_DATA/m", - "/ZEND_VM_DISPATCH_TO_HANDLER\(\s*([A-Z_]*)\s*\)/m", - "/ZEND_VM_DISPATCH_TO_HELPER\(\s*([A-Za-z_]*)\s*\)/me", - "/ZEND_VM_DISPATCH_TO_HELPER_EX\(\s*([A-Za-z_]*)\s*,\s*[A-Za-z_]*\s*,\s*(.*)\s*\);/me", - ), - array( - "execute_data", - "return \\1".($spec?"_SPEC":"").$prefix[$op1].$prefix[$op2]."_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)", - "'return '.helper_name('\\1',$spec,'$op1','$op2').'(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)'", - "'return '.helper_name('\\1',$spec,'$op1','$op2').'(\\2, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);'", - ), - $code); - break; - case ZEND_VM_KIND_SWITCH: - $code = preg_replace( - array( - "/EXECUTE_DATA/m", - "/ZEND_VM_DISPATCH_TO_HANDLER\(\s*([A-Z_]*)\s*\)/m", - "/ZEND_VM_DISPATCH_TO_HELPER\(\s*([A-Za-z_]*)\s*\)/me", - "/ZEND_VM_DISPATCH_TO_HELPER_EX\(\s*([A-Za-z_]*)\s*,\s*([A-Za-z_]*)\s*,\s*(.*)\s*\);/me", - ), - array( - "&execute_data", - "goto \\1".($spec?"_SPEC":"").$prefix[$op1].$prefix[$op2]."_LABEL", - "'goto '.helper_name('\\1',$spec,'$op1','$op2')", - "'\\2 = \\3; goto '.helper_name('\\1',$spec,'$op1','$op2').';'", - ), - $code); - break; - case ZEND_VM_KIND_GOTO: - $code = preg_replace( - array( - "/EXECUTE_DATA/m", - "/ZEND_VM_DISPATCH_TO_HANDLER\(\s*([A-Z_]*)\s*\)/m", - "/ZEND_VM_DISPATCH_TO_HELPER\(\s*([A-Za-z_]*)\s*\)/me", - "/ZEND_VM_DISPATCH_TO_HELPER_EX\(\s*([A-Za-z_]*)\s*,\s*([A-Za-z_]*)\s*,\s*(.*)\s*\);/me", - ), - array( - "&execute_data", - "goto \\1".($spec?"_SPEC":"").$prefix[$op1].$prefix[$op2]."_HANDLER", - "'goto '.helper_name('\\1',$spec,'$op1','$op2')", - "'\\2 = \\3; goto '.helper_name('\\1',$spec,'$op1','$op2').';'", - ), - $code); - break; - } - - /* Remove unused free_op1 and free_op2 declarations */ - if ($spec && preg_match_all('/^\s*zend_free_op\s+[^;]+;\s*$/me', $code, $matches, PREG_SET_ORDER)) { - $n = 0; - foreach ($matches as $match) { - $code = preg_replace('/'.preg_quote($match[0],'/').'/', "\$D$n", $code); - ++$n; - } - $del_free_op1 = (strpos($code, "free_op1") === false); - $del_free_op2 = (strpos($code, "free_op2") === false); - $n = 0; - foreach ($matches as $match) { - $dcl = $match[0]; - $changed = 0; - if ($del_free_op1 && strpos($dcl, "free_op1") !== false) { - $dcl = preg_replace("/free_op1\s*,\s*/", "", $dcl); - $dcl = preg_replace("/free_op1\s*;/", ";", $dcl); - $changed = 1; - } - if ($del_free_op2 && strpos($dcl, "free_op2") !== false) { - $dcl = preg_replace("/free_op2\s*,\s*/", "", $dcl); - $dcl = preg_replace("/free_op2\s*;/", ";", $dcl); - $changed = 1; - } - if ($changed) { - $dcl = preg_replace("/,\s*;/", ";", $dcl); - $dcl = preg_replace("/zend_free_op\s*;/", "", $dcl); - } - $code = preg_replace("/\\\$D$n/", $dcl, $code); - ++$n; - } - } - - /* Remove unnecessary ';' */ - $code = preg_replace('/^\s*;\s*$/m', '', $code); - - /* Remove WS */ - $code = preg_replace('/[ \t]+\n/m', "\n", $code); - - out($f, $code); -} - -// Generates opcode handler -function gen_handler($f, $spec, $kind, $name, $op1, $op2, $use, $code, $lineno) { - global $definition_file, $prefix, $typecode, $opnames; - - if (ZEND_VM_LINES) { - out($f, "#line $lineno \"$definition_file\"\n"); - } - - // Generate opcode handler's entry point according to selected threading model - switch($kind) { - case ZEND_VM_KIND_CALL: - out($f,"static int ".$name.($spec?"_SPEC":"").$prefix[$op1].$prefix[$op2]."_HANDLER(ZEND_OPCODE_HANDLER_ARGS)\n"); - break; - case ZEND_VM_KIND_SWITCH: - if ($spec) { - out($f,"case ".((string)($opnames[$name]*25+($typecode[$op1]*5)+$typecode[$op2])).": /*".$name."_SPEC".$prefix[$op1].$prefix[$op2]."_HANDLER*/"); - } else { - out($f,"case ".$name.":"); - } - if ($use) { - // This handler is used by other handlers. We will add label to call it. - out($f," ".$name.($spec?"_SPEC":"").$prefix[$op1].$prefix[$op2]."_LABEL:\n"); - } else { - out($f,"\n"); - } - break; - case ZEND_VM_KIND_GOTO: - out($f,$name.($spec?"_SPEC":"").$prefix[$op1].$prefix[$op2]."_HANDLER:\n"); - break; - } - - // Generate opcode handler's code - gen_code($f, $spec, $kind, $code, $op1, $op2); -} - -// Generates helper -function gen_helper($f, $spec, $kind, $name, $op1, $op2, $param, $code, $lineno) { - global $definition_file, $prefix; - - if (ZEND_VM_LINES) { - out($f, "#line $lineno \"$definition_file\"\n"); - } - - // Generate helper's entry point according to selected threading model - switch($kind) { - case ZEND_VM_KIND_CALL: - if ($param == null) { - // Helper without parameters - out($f, "static int ".$name.($spec?"_SPEC":"").$prefix[$op1].$prefix[$op2]."(ZEND_OPCODE_HANDLER_ARGS)\n"); - } else { - // Helper with parameter - out($f, "static int ".$name.($spec?"_SPEC":"").$prefix[$op1].$prefix[$op2]."(".$param.", ZEND_OPCODE_HANDLER_ARGS)\n"); - } - break; - case ZEND_VM_KIND_SWITCH: - out($f, $name.($spec?"_SPEC":"").$prefix[$op1].$prefix[$op2].":\n"); - break; - case ZEND_VM_KIND_GOTO: - out($f, $name.($spec?"_SPEC":"").$prefix[$op1].$prefix[$op2].":\n"); - break; - } - - // Generate helper's code - gen_code($f, $spec, $kind, $code, $op1, $op2); -} - -// Generates array of opcode handlers (specialized or unspecialized) -function gen_labels($f, $spec, $kind, $prolog) { - global $opcodes, $op_types, $prefix, $typecode; - - $next = 0; - if ($spec) { - // Emit labels for specialized executor - - // For each opcode in opcode number order - foreach($opcodes as $num => $dsc) { - while ($next != $num) { - // If some opcode numbers are not used then fill hole with pointers - // to handler of undefined opcode - $op1t = $op_types; - // For each op1.op_type except ANY - foreach($op1t as $op1) { - if ($op1 != "ANY") { - $op2t = $op_types; - // For each op2.op_type except ANY - foreach($op2t as $op2) { - if ($op2 != "ANY") { - // Emit pointer to handler of undefined opcode - switch ($kind) { - case ZEND_VM_KIND_CALL: - out($f,$prolog."ZEND_NULL_HANDLER,\n"); - break; - case ZEND_VM_KIND_SWITCH: - out($f,$prolog."(opcode_handler_t)-1,\n"); - break; - case ZEND_VM_KIND_GOTO: - out($f,$prolog."(opcode_handler_t)&&ZEND_NULL_HANDLER,\n"); - break; - } - } - } - } - } - $next++; - } - $next = $num + 1; - $op1t = $op_types; - // For each op1.op_type except ANY - foreach($op1t as $op1) { - if ($op1 != "ANY") { - if (!isset($dsc["op1"][$op1])) { - // Try to use unspecialized handler - $op1 = "ANY"; - } - $op2t = $op_types; - // For each op2.op_type except ANY - foreach($op2t as $op2) { - if ($op2 != "ANY") { - if (!isset($dsc["op2"][$op2])) { - // Try to use unspecialized handler - $op2 = "ANY"; - } - // Check if specialized handler is defined - if (isset($dsc["op1"][$op1]) && - isset($dsc["op2"][$op2])) { - // Emit pointer to specialized handler - switch ($kind) { - case ZEND_VM_KIND_CALL: - out($f,$prolog.$dsc["op"]."_SPEC".$prefix[$op1].$prefix[$op2]."_HANDLER,\n"); - break; - case ZEND_VM_KIND_SWITCH: - out($f,$prolog."(opcode_handler_t)".((string)($num*25+$typecode[$op1]*5+$typecode[$op2])).",\n"); - break; - case ZEND_VM_KIND_GOTO: - out($f,$prolog."(opcode_handler_t)&&".$dsc["op"]."_SPEC".$prefix[$op1].$prefix[$op2]."_HANDLER,\n"); - break; - } - } else { - // Emit pinter to handler of undefined opcode - switch ($kind) { - case ZEND_VM_KIND_CALL: - out($f,$prolog."ZEND_NULL_HANDLER,\n"); - break; - case ZEND_VM_KIND_SWITCH: - out($f,$prolog."(opcode_handler_t)-1,\n"); - break; - case ZEND_VM_KIND_GOTO: - out($f,$prolog."(opcode_handler_t)&&ZEND_NULL_HANDLER,\n"); - break; - } - } - } - } - } - } - } - } else { - // Emit labels for unspecialized executor - - // For each opcode in opcode number order - foreach($opcodes as $num => $dsc) { - while ($next != $num) { - // If some opcode numbers are not used then fill hole with pointers - // to handler of undefined opcode - switch ($kind) { - case ZEND_VM_KIND_CALL: - out($f,$prolog."ZEND_NULL_HANDLER,\n"); - break; - case ZEND_VM_KIND_SWITCH: - out($f,$prolog."(opcode_handler_t)-1,\n"); - break; - case ZEND_VM_KIND_GOTO: - out($f,$prolog."(opcode_handler_t)&&ZEND_NULL_HANDLER,\n"); - break; - } - $next++; - } - $next = $num+1; - // Emit pointer to unspecialized handler - switch ($kind) { - case ZEND_VM_KIND_CALL: - out($f,$prolog.$dsc["op"]."_HANDLER,\n"); - break; - case ZEND_VM_KIND_SWITCH: - out($f,$prolog."(opcode_handler_t)".((string)$num).",\n"); - break; - case ZEND_VM_KIND_GOTO: - out($f,$prolog."(opcode_handler_t)&&".$dsc["op"]."_HANDLER,\n"); - break; - } - } - } - - // Emit last handler's label (undefined opcode) - switch ($kind) { - case ZEND_VM_KIND_CALL: - out($f,$prolog."ZEND_NULL_HANDLER\n"); - break; - case ZEND_VM_KIND_SWITCH: - out($f,$prolog."(opcode_handler_t)-1\n"); - break; - case ZEND_VM_KIND_GOTO: - out($f,$prolog."(opcode_handler_t)&&ZEND_NULL_HANDLER\n"); - break; - } -} - -// Generates handler for undefined opcodes (CALL threading model) -function gen_null_handler($f) { - static $done = 0; - - // New and all executors with CALL threading model can use the same handler - // for undefined opcodes, do we emit code for it only once - if (!$done) { - $done = 1; - out($f,"static int ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)\n"); - out($f,"{\n"); - out($f,"\tzend_error_noreturn(E_ERROR, \"Invalid opcode %d/%d/%d.\", EX(opline)->opcode, EX(opline)->op1.op_type, EX(opline)->op2.op_type);\n"); - out($f,"\tZEND_VM_RETURN_FROM_EXECUTE_LOOP();\n"); - out($f,"}\n\n"); - } -} - -// Generates all opcode handlers and helpers (specialized or unspecilaized) -function gen_executor_code($f, $spec, $kind, $prolog) { - global $list, $opcodes, $helpers, $op_types; - - if ($spec) { - // Produce specialized executor - $op1t = $op_types; - // for each op1.op_type - foreach($op1t as $op1) { - $op2t = $op_types; - // for each op2.op_type - foreach($op2t as $op2) { - // for each handlers in helpers in original order - foreach ($list as $lineno => $dsc) { - if (isset($dsc["handler"])) { - $num = $dsc["handler"]; - // Check if handler accepts such types of operands (op1 and op2) - if (isset($opcodes[$num]["op1"][$op1]) && - isset($opcodes[$num]["op2"][$op2])) { - // Generate handler code - gen_handler($f, 1, $kind, $opcodes[$num]["op"], $op1, $op2, isset($opcodes[$num]["use"]), $opcodes[$num]["code"], $lineno); - } - } else if (isset($dsc["helper"])) { - $num = $dsc["helper"]; - // Check if handler accepts such types of operands (op1 and op2) - if (isset($helpers[$num]["op1"][$op1]) && - isset($helpers[$num]["op2"][$op2])) { - // Generate helper code - gen_helper($f, 1, $kind, $num, $op1, $op2, $helpers[$num]["param"], $helpers[$num]["code"], $lineno); - } - } else { - var_dump($dsc); - die("??? $kind:$num\n"); - } - } - } - } - } else { - // Produce unspecialized executor - - // for each handlers in helpers in original order - foreach ($list as $lineno => $dsc) { - if (isset($dsc["handler"])) { - $num = $dsc["handler"]; - // Generate handler code - gen_handler($f, 0, $kind, $opcodes[$num]["op"], "ANY", "ANY", isset($opcodes[$num]["use"]), $opcodes[$num]["code"], $lineno); - } else if (isset($dsc["helper"])) { - $num = $dsc["helper"]; - // Generate helper code - gen_helper($f, 0, $kind, $num, "ANY", "ANY", $helpers[$num]["param"], $helpers[$num]["code"], $lineno); - } else { - var_dump($dsc); - die("??? $kind:$num\n"); - } - } - } - - if (ZEND_VM_LINES) { - // Reset #line directives - out_line($f); - } - - // Generate handler for undefined opcodes - switch ($kind) { - case ZEND_VM_KIND_CALL: - gen_null_handler($f); - break; - case ZEND_VM_KIND_SWITCH: - out($f,"default:\n"); - out($f,"\tzend_error_noreturn(E_ERROR, \"Invalid opcode %d/%d/%d.\", EX(opline)->opcode, EX(opline)->op1.op_type, EX(opline)->op2.op_type);\n"); - out($f,"\tZEND_VM_RETURN_FROM_EXECUTE_LOOP();\n"); - break; - case ZEND_VM_KIND_GOTO: - out($f,"ZEND_NULL_HANDLER:\n"); - out($f,"\tzend_error_noreturn(E_ERROR, \"Invalid opcode %d/%d/%d.\", EX(opline)->opcode, EX(opline)->op1.op_type, EX(opline)->op2.op_type);\n"); - out($f,"\tZEND_VM_RETURN_FROM_EXECUTE_LOOP();\n"); - break; - } -} - -function skip_blanks($f, $prolog, $epilog) { - if (trim($prolog) != "" || trim($epilog) != "") { - out($f, $prolog.$epilog); - } -} - -// Generates executor from skeleton file and definition (specialized or unspecialized) -function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name, $old) { - global $params, $skeleton_file, $line_no; - - $lineno = 0; - foreach ($skl as $line) { - // Skeleton file contains special markers in form %NAME% those are - // substituted by custom code - if (preg_match("/(.*)[{][%]([A-Z_]*)[%][}](.*)/", $line, $m)) { - switch ($m[2]) { - case "DEFINES": - if (ZEND_VM_OLD_EXECUTOR) { - out($f,"static int zend_vm_old_executor = 0;\n\n"); - } - out($f,"static opcode_handler_t zend_vm_get_opcode_handler(zend_uchar opcode, zend_op* op);\n\n"); - switch ($kind) { - case ZEND_VM_KIND_CALL: - out($f,"\n"); - out($f,"#define ZEND_VM_CONTINUE() return 0\n"); - out($f,"#define ZEND_VM_RETURN() return 1\n"); - out($f,"#define ZEND_VM_DISPATCH(opcode, opline) return zend_vm_get_opcode_handler(opcode, opline)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);\n\n"); - out($f,"#define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_INTERNAL execute_data TSRMLS_CC\n"); - break; - case ZEND_VM_KIND_SWITCH: - out($f,"\n"); - out($f,"#define ZEND_VM_CONTINUE() goto zend_vm_continue\n"); - out($f,"#define ZEND_VM_RETURN() return\n"); - out($f,"#define ZEND_VM_DISPATCH(opcode, opline) dispatch_handler = zend_vm_get_opcode_handler(opcode, opline); goto zend_vm_dispatch;\n\n"); - out($f,"#define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_INTERNAL &execute_data TSRMLS_CC\n"); - break; - case ZEND_VM_KIND_GOTO: - out($f,"\n"); - out($f,"#define ZEND_VM_CONTINUE() goto *(void**)(EX(opline)->handler)\n"); - out($f,"#define ZEND_VM_RETURN() return\n"); - out($f,"#define ZEND_VM_DISPATCH(opcode, opline) goto *(void**)(zend_vm_get_opcode_handler(opcode, opline));\n\n"); - out($f,"#define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_INTERNAL &execute_data TSRMLS_CC\n"); - break; - } - break; - case "EXECUTOR_NAME": - out($f, $m[1].$executor_name.$m[3]."\n"); - break; - case "HELPER_VARS": - if ($kind != ZEND_VM_KIND_CALL) { - if ($kind == ZEND_VM_KIND_SWITCH) { - out($f,$m[1]."opcode_handler_t dispatch_handler;\n"); - } - // Emit local variables those are used for helpers' parameters - foreach ($params as $param => $x) { - out($f,$m[1].$param.";\n"); - } - } else { - skip_blanks($f, $m[1], $m[3]."\n"); - } - break; - case "INTERNAL_LABELS": - if ($kind == ZEND_VM_KIND_GOTO) { - // Emit array of labels of opcode handlers and code for - // zend_opcode_handlers initialization - $prolog = $m[1]; - out($f,$prolog."if (op_array == NULL) {\n"); - out($f,$prolog."\tstatic const opcode_handler_t labels[] = {\n"); - gen_labels($f, $spec, $kind, $prolog."\t\t"); - out($f,$prolog."\t};\n"); - out($f,$prolog."\tzend_opcode_handlers = (opcode_handler_t*)labels;\n"); - out($f,$prolog."\treturn;\n"); - out($f,$prolog."}\n"); - } else { - skip_blanks($f, $m[1], $m[3]); - } - break; - case "ZEND_VM_CONTINUE_LABEL": - if ($kind == ZEND_VM_KIND_SWITCH) { - // Only SWITCH dispatch method use it - out($f,"zend_vm_continue:".$m[3]."\n"); - } else { - skip_blanks($f, $m[1], $m[3]); - } - break; - case "ZEND_VM_DISPATCH": - // Emit code that dispatches to opcode handler - switch ($kind) { - case ZEND_VM_KIND_CALL: - out($f, $m[1]."if (EX(opline)->handler(&execute_data TSRMLS_CC) > 0)".$m[3]."\n"); - break; - case ZEND_VM_KIND_SWITCH: - out($f, $m[1]."dispatch_handler = EX(opline)->handler;\nzend_vm_dispatch:\n".$m[1]."switch ((int)dispatch_handler)".$m[3]."\n"); - break; - case ZEND_VM_KIND_GOTO: - out($f, $m[1]."goto *(void**)(EX(opline)->handler);".$m[3]."\n"); - break; - } - break; - case "INTERNAL_EXECUTOR": - if ($kind == ZEND_VM_KIND_CALL) { - // Executor is defined as a set of functions - out($f, $m[1]."return;".$m[3]."\n"); - } else { - // Emit executor code - gen_executor_code($f, $spec, $kind, $m[1]); - } - break; - case "EXTERNAL_EXECUTOR": - if ($kind == ZEND_VM_KIND_CALL) { - // Unspecialized executor with CALL threading is the same as the - // old one, so we don't need to produce code twitch - if (!$old || ZEND_VM_SPEC || (ZEND_VM_KIND != ZEND_VM_KIND_CALL)) { - out($f,"#undef EX\n"); - out($f,"#define EX(element) execute_data->element\n\n"); - // Emit executor code - gen_executor_code($f, $spec, $kind, $m[1]); - } - } - break; - case "INITIALIZER_NAME": - out($f, $m[1].$initializer_name.$m[3]."\n"); - break; - case "EXTERNAL_LABELS": - // Emit code that initializes zend_opcode_handlers array - $prolog = $m[1]; - if ($kind == ZEND_VM_KIND_GOTO) { - // Labels are defined in the executor itself, so we call it - // with op_array NULL and it sets zend_opcode_handlers array - out($f,$prolog."TSRMLS_FETCH();\n"); - out($f,$prolog."zend_execute(NULL TSRMLS_CC);\n"); - } else { - if ($old) { - // Reserving space for user-defined opcodes - out($f,$prolog."static opcode_handler_t labels[512] = {\n"); - } else { - out($f,$prolog."static const opcode_handler_t labels[] = {\n"); - } - gen_labels($f, $spec, $kind, $prolog."\t"); - out($f,$prolog."};\n"); - out($f,$prolog."zend_opcode_handlers = (opcode_handler_t*)labels;\n"); - if ($old) { - // Setup old executor - out($f,$prolog."zend_vm_old_executor = 1;\n"); - out($f,$prolog."zend_execute = old_execute;\n"); - } - } - break; - default: - die("ERROR: Unknown keyword ".$m[2]." in skeleton file.\n"); - } - } else { - // Copy the line as is - out($f, $line); - } - } -} - -function gen_vm($def, $skel) { - global $definition_file, $skeleton_file, $executor_file, - $op_types, $list, $opcodes, $helpers, $params, $opnames; - - // Load definition file - $in = @file($def); - if (!$in) { - die("ERROR: Can not open definition file '$def'\n"); - } - // We need absolute path to definition file to use it in #line directives - $definition_file = realpath($def); - - // Load skeleton file - $skl = @file($skel); - if (!$skl) { - die("ERROR: Can not open skeleton file '$skel'\n"); - } - // We need absolute path to skeleton file to use it in #line directives - $skeleton_file = realpath($skel); - - // Parse definition file into tree - $lineno = 0; - $handler = null; - $helper = null; - $max_opcode_len = 0; - $max_opcode = 0; - $export = array(); - foreach ($in as $line) { - ++$lineno; - if (strpos($line,"ZEND_VM_HANDLER(") === 0) { - // Parsing opcode handler's definition - if (preg_match( - "/^ZEND_VM_HANDLER\(\s*([0-9]+)\s*,\s*([A-Z_]+)\s*,\s*([A-Z|]+)\s*,\s*([A-Z|]+)\s*\)/", - $line, - $m) == 0) { - die("ERROR ($def:$lineno): Invalid ZEND_VM_HANDLER definition.\n"); - } - $code = (int)$m[1]; - $op = $m[2]; - $len = strlen($op); - $op1 = array_flip(explode("|",$m[3])); - $op2 = array_flip(explode("|",$m[4])); - - if ($len > $max_opcode_len) { - $max_opcode_len = $len; - } - if ($code > $max_opcode) { - $max_opcode = $code; - } - if (isset($opcodes[$code])) { - die("ERROR ($def:$lineno): Opcode with code '$code' is already defined.\n"); - } - if (isset($opnames[$op])) { - die("ERROR ($def:$lineno): Opcode with name '$op' is already defined.\n"); - } - $opcodes[$code] = array("op"=>$op,"op1"=>$op1,"op2"=>$op2,"code"=>""); - $opnames[$op] = $code; - $handler = $code; - $helper = null; - $list[$lineno] = array("handler"=>$handler); - } else if (strpos($line,"ZEND_VM_HELPER(") === 0) { - // Parsing helper's definition - if (preg_match( - "/^ZEND_VM_HELPER\(\s*([A-Za-z_]+)\s*,\s*([A-Z|]+)\s*,\s*([A-Z|]+)\s*\)/", - $line, - $m) == 0) { - die("ERROR ($def:$lineno): Invalid ZEND_VM_HELPER definition.\n"); - } - $helper = $m[1]; - $op1 = array_flip(explode("|",$m[2])); - $op2 = array_flip(explode("|",$m[3])); - if (isset($helpers[$helper])) { - die("ERROR ($def:$lineno): Helper with name '$helper' is already defined.\n"); - } - $helpers[$helper] = array("op1"=>$op1,"op2"=>$op2,"param"=>null,"code"=>""); - $handler = null; - $list[$lineno] = array("helper"=>$helper); - } else if (strpos($line,"ZEND_VM_HELPER_EX(") === 0) { - // Parsing helper with parameter definition - if (preg_match( - "/^ZEND_VM_HELPER_EX\(\s*([A-Za-z_]+)\s*,\s*([A-Z|]+)\s*,\s*([A-Z|]+)\s*,\s*(.*)\s*\)/", - $line, - $m) == 0) { - die("ERROR ($def:$lineno): Invalid ZEND_VM_HELPER definition.\n"); - } - $helper = $m[1]; - $op1 = array_flip(explode("|",$m[2])); - $op2 = array_flip(explode("|",$m[3])); - $param = $m[4]; - if (isset($helpers[$helper])) { - die("ERROR ($def:$lineno): Helper with name '$helper' is already defined.\n"); - } - - // Store parameter - $params[$param] = 1; - - $helpers[$helper] = array("op1"=>$op1,"op2"=>$op2,"param"=>$param,"code"=>""); - $handler = null; - $list[$lineno] = array("helper"=>$helper); - } else if (strpos($line,"ZEND_VM_EXPORT_HANDLER(") === 0) { - if (preg_match( - "/^ZEND_VM_EXPORT_HANDLER\(\s*([A-Za-z_]+)\s*,\s*([A-Z_]+)\s*\)/", - $line, - $m) == 0) { - die("ERROR ($def:$lineno): Invalid ZEND_VM_EXPORT_HANDLER definition.\n"); - } - if (!isset($opnames[$m[2]])) { - die("ERROR ($def:$lineno): opcode '{$m[2]}' is not defined.\n"); - } - $export[] = array("handler",$m[1],$m[2]); - } else if (strpos($line,"ZEND_VM_EXPORT_HELPER(") === 0) { - if (preg_match( - "/^ZEND_VM_EXPORT_HELPER\(\s*([A-Za-z_]+)\s*,\s*([A-Za-z_]+)\s*\)/", - $line, - $m) == 0) { - die("ERROR ($def:$lineno): Invalid ZEND_VM_EXPORT_HELPER definition.\n"); - } - if (!isset($helpers[$m[2]])) { - die("ERROR ($def:$lineno): helper '{$m[2]}' is not defined.\n"); - } - $export[] = array("helper",$m[1],$m[2]); - } else if ($handler !== null) { - // Add line of code to current opcode handler - $opcodes[$handler]["code"] .= $line; - } else if ($helper !== null) { - // Add line of code to current helper - $helpers[$helper]["code"] .= $line; - } - } - - ksort($opcodes); - - // Search for opcode handlers those are used by other opcode handlers - foreach ($opcodes as $dsc) { - if (preg_match("/ZEND_VM_DISPATCH_TO_HANDLER\(\s*([A-Z_]*)\s*\)/m", $dsc["code"], $m)) { - $op = $m[1]; - if (!isset($opnames[$op])) { - die("ERROR ($def:$lineno): Opcode with name '$op' is not defined.\n"); - } - $code = $opnames[$op]; - $opcodes[$code]['use'] = 1; - } - } - - // Generate opcode #defines (zend_vm_opcodes.h) - $code_len = strlen((string)$max_opcode); - $f = fopen("zend_vm_opcodes.h", "w+") or die("ERROR: Cannot create zend_vm_opcodes.h\n"); - - // Insert header - out($f, $GLOBALS['header_text']); - - foreach ($opcodes as $code => $dsc) { - $code = str_pad((string)$code,$code_len," ",STR_PAD_LEFT); - $op = str_pad($dsc["op"],$max_opcode_len); - fputs($f,"#define $op $code\n"); - } - fclose($f); - echo "zend_vm_opcodes.h generated successfully.\n"; - - // Generate zend_vm_execute.h - $f = fopen("zend_vm_execute.h", "w+") or die("ERROR: Cannot create zend_vm_execute.h\n"); - $executor_file = realpath("zend_vm_execute.h"); - - // Insert header - out($f, $GLOBALS['header_text']); - - // Support for ZEND_USER_OPCODE - out($f, "static opcode_handler_t zend_user_opcode_handlers[256] = {"); - for ($i = 0; $i < 255; ++$i) { - out($f, "(opcode_handler_t)NULL,"); - } - out($f, "(opcode_handler_t)NULL};\n\n"); - - out($f, "static zend_uchar zend_user_opcodes[256] = {"); - for ($i = 0; $i < 255; ++$i) { - out($f, "$i,"); - } - out($f, "255};\n\n"); - - // Generate specialized executor - gen_executor($f, $skl, ZEND_VM_SPEC, ZEND_VM_KIND, "execute", "zend_init_opcodes_handlers", 0); - - // Generate un-specialized executor - if (ZEND_VM_OLD_EXECUTOR) { - out($f,"\n/* Old executor */\n\n"); - out($f,"#undef EX\n"); - out($f,"#define EX(element) execute_data.element\n\n"); - out($f,"#undef ZEND_VM_CONTINUE\n\n"); - out($f,"#undef ZEND_VM_RETURN\n\n"); - out($f,"#undef ZEND_VM_DISPATCH\n\n"); - out($f,"#undef ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_INTERNAL\n\n"); - gen_executor($f, $skl, 0, ZEND_VM_KIND_CALL, "old_execute", "zend_vm_use_old_executor", 1); - } - - // Generate zend_vm_get_opcode_handler() function - out($f, "static opcode_handler_t zend_vm_get_opcode_handler(zend_uchar opcode, zend_op* op)\n"); - out($f, "{\n"); - if (!ZEND_VM_SPEC) { - out($f, "\treturn zend_opcode_handlers[opcode];\n"); - } else { - if (ZEND_VM_OLD_EXECUTOR) { - out($f, "\tif (zend_vm_old_executor) {\n"); - out($f, "\t\treturn zend_opcode_handlers[opcode];\n"); - out($f, "\t} else {\n"); - } - out($f, "\t\tstatic const int zend_vm_decode[] = {\n"); - out($f, "\t\t\t_UNUSED_CODE, /* 0 */\n"); - out($f, "\t\t\t_CONST_CODE, /* 1 = IS_CONST */\n"); - out($f, "\t\t\t_TMP_CODE, /* 2 = IS_TMP_VAR */\n"); - out($f, "\t\t\t_UNUSED_CODE, /* 3 */\n"); - out($f, "\t\t\t_VAR_CODE, /* 4 = IS_VAR */\n"); - out($f, "\t\t\t_UNUSED_CODE, /* 5 */\n"); - out($f, "\t\t\t_UNUSED_CODE, /* 6 */\n"); - out($f, "\t\t\t_UNUSED_CODE, /* 7 */\n"); - out($f, "\t\t\t_UNUSED_CODE, /* 8 = IS_UNUSED */\n"); - out($f, "\t\t\t_UNUSED_CODE, /* 9 */\n"); - out($f, "\t\t\t_UNUSED_CODE, /* 10 */\n"); - out($f, "\t\t\t_UNUSED_CODE, /* 11 */\n"); - out($f, "\t\t\t_UNUSED_CODE, /* 12 */\n"); - out($f, "\t\t\t_UNUSED_CODE, /* 13 */\n"); - out($f, "\t\t\t_UNUSED_CODE, /* 14 */\n"); - out($f, "\t\t\t_UNUSED_CODE, /* 15 */\n"); - out($f, "\t\t\t_CV_CODE /* 16 = IS_CV */\n"); - out($f, "\t\t};\n"); - out($f, "\t\treturn zend_opcode_handlers[opcode * 25 + zend_vm_decode[op->op1.op_type] * 5 + zend_vm_decode[op->op2.op_type]];\n"); - if (ZEND_VM_OLD_EXECUTOR) { - out($f, "\t}\n"); - } - } - out($f, "}\n\n"); - - // Generate zend_vm_get_opcode_handler() function - out($f, "ZEND_API void zend_vm_set_opcode_handler(zend_op* op)\n"); - out($f, "{\n"); - out($f, "\top->handler = zend_vm_get_opcode_handler(zend_user_opcodes[op->opcode], op);\n"); - out($f, "}\n\n"); - - // Export handlers and helpers - if (count($export) > 0 && - !ZEND_VM_OLD_EXECUTOR && - ZEND_VM_KIND != ZEND_VM_KIND_CALL) { - out($f,"#undef EX\n"); - out($f,"#define EX(element) execute_data->element\n\n"); - out($f,"#undef ZEND_VM_CONTINUE\n"); - out($f,"#undef ZEND_VM_RETURN\n"); - out($f,"#undef ZEND_VM_DISPATCH\n"); - out($f,"#undef ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_INTERNAL\n\n"); - out($f,"#define ZEND_VM_CONTINUE() return 0\n"); - out($f,"#define ZEND_VM_RETURN() return 1\n"); - out($f,"#define ZEND_VM_DISPATCH(opcode, opline) return zend_vm_get_opcode_handler(opcode, opline)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);\n\n"); - out($f,"#define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_INTERNAL execute_data TSRMLS_CC\n\n"); - } - foreach ($export as $dsk) { - list($kind, $func, $name) = $dsk; - out($f, "ZEND_API int $func("); - if ($kind == "handler") { - out($f, "ZEND_OPCODE_HANDLER_ARGS)\n"); - $code = $opcodes[$opnames[$name]]['code']; - } else { - $h = $helpers[$name]; - if ($h['param'] == null) { - out($f, "ZEND_OPCODE_HANDLER_ARGS)\n"); - } else { - out($f, $h['param']. ", ZEND_OPCODE_HANDLER_ARGS)\n"); - } - $code = $h['code']; - } - $done = 0; - if (ZEND_VM_OLD_EXECUTOR) { - if ($kind == "handler") { - out($f, "{\n\treturn ".$name."_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);\n}\n\n"); - $done = 1; - } else if ($helpers[$name]["param"] == null) { - out($f, "{\n\treturn ".$name."(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);\n}\n\n"); - $done = 1; - } - } else if (ZEND_VM_KIND == ZEND_VM_KIND_CALL) { - if ($kind == "handler") { - $op = $opcodes[$opnames[$name]]; - if (isset($op['op1']["ANY"]) && isset($op['op2']["ANY"])) { - out($f, "{\n\treturn ".$name.(ZEND_VM_SPEC?"_SPEC":"")."_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);\n}\n\n"); - $done = 1; - } - } else if ($helpers[$name]["param"] == null) { - $h = $helpers[$name]; - if (isset($h['op1']["ANY"]) && isset($h['op2']["ANY"])) { - out($f, "{\n\treturn ".$name.(ZEND_VM_SPEC?"_SPEC":"")."(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);\n}\n\n"); - $done = 1; - } - } - } - if (!$done) { - gen_code($f, 0, ZEND_VM_KIND_CALL, $code, 'ANY', 'ANY'); - } - } - - fclose($f); - echo "zend_vm_execute.h generated successfully.\n"; -} - -function usage() { - echo("\nUsage: php zend_vm_gen.php [options]\n". - "\nOptions:". - "\n --with-vm-kind=CALL|SWITCH|GOTO - select threading model (default is CALL)". - "\n --without-specializer - disable executor specialization". - "\n --with-old-executor - enable old executor". - "\n --with-lines - enable #line directives". - "\n\n"); -} - -// Parse arguments -for ($i = 1; $i < $argc; $i++) { - if (strpos($argv[$i],"--with-vm-kind=") === 0) { - $kind = substr($argv[$i], strlen("--with-vm-kind=")); - switch ($kind) { - case "CALL": - define("ZEND_VM_KIND", ZEND_VM_KIND_CALL); - break; - case "SWITCH": - define("ZEND_VM_KIND", ZEND_VM_KIND_SWITCH); - break; - case "GOTO": - define("ZEND_VM_KIND", ZEND_VM_KIND_GOTO); - break; - default: - echo("ERROR: Invalid vm kind '$kind'\n"); - usage(); - die(); - } - } else if ($argv[$i] == "--without-specializer") { - // Disabling specialization - define("ZEND_VM_SPEC", 0); - } else if ($argv[$i] == "--with-old-executor") { - // Disabling code for old-style executor - define("ZEND_VM_OLD_EXECUTOR", 1); - } else if ($argv[$i] == "--with-lines") { - // Enabling debuging using original zend_vm_def.h - define("ZEND_VM_LINES", 1); - } else if ($argv[$i] == "--help") { - usage(); - exit(); - } else { - echo("ERROR: Invalid option '".$argv[$i]."'\n"); - usage(); - die(); - } -} - -// Using defaults -if (!defined("ZEND_VM_KIND")) { - // Using CALL threading by default - define("ZEND_VM_KIND", ZEND_VM_KIND_CALL); -} -if (!defined("ZEND_VM_SPEC")) { - // Using specialized executor by default - define("ZEND_VM_SPEC", 1); -} -if (!defined("ZEND_VM_OLD_EXECUTOR")) { - // Include old-style executor by default - define("ZEND_VM_OLD_EXECUTOR", 0); -} -if (!defined("ZEND_VM_LINES")) { - // Disabling #line directives - define("ZEND_VM_LINES", 0); -} - -gen_vm("zend_vm_def.h", "zend_vm_execute.skl"); - -?> diff --git a/Zend/zend_vm_opcodes.h b/Zend/zend_vm_opcodes.h deleted file mode 100644 index 2a56b4b8d39b5..0000000000000 --- a/Zend/zend_vm_opcodes.h +++ /dev/null @@ -1,152 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | Zend Engine | - +----------------------------------------------------------------------+ - | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.00 of the Zend license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.zend.com/license/2_00.txt. | - | If you did not receive a copy of the Zend license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@zend.com so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Andi Gutmans | - | Zeev Suraski | - | Dmitry Stogov | - +----------------------------------------------------------------------+ -*/ - -#define ZEND_NOP 0 -#define ZEND_ADD 1 -#define ZEND_SUB 2 -#define ZEND_MUL 3 -#define ZEND_DIV 4 -#define ZEND_MOD 5 -#define ZEND_SL 6 -#define ZEND_SR 7 -#define ZEND_CONCAT 8 -#define ZEND_BW_OR 9 -#define ZEND_BW_AND 10 -#define ZEND_BW_XOR 11 -#define ZEND_BW_NOT 12 -#define ZEND_BOOL_NOT 13 -#define ZEND_BOOL_XOR 14 -#define ZEND_IS_IDENTICAL 15 -#define ZEND_IS_NOT_IDENTICAL 16 -#define ZEND_IS_EQUAL 17 -#define ZEND_IS_NOT_EQUAL 18 -#define ZEND_IS_SMALLER 19 -#define ZEND_IS_SMALLER_OR_EQUAL 20 -#define ZEND_CAST 21 -#define ZEND_QM_ASSIGN 22 -#define ZEND_ASSIGN_ADD 23 -#define ZEND_ASSIGN_SUB 24 -#define ZEND_ASSIGN_MUL 25 -#define ZEND_ASSIGN_DIV 26 -#define ZEND_ASSIGN_MOD 27 -#define ZEND_ASSIGN_SL 28 -#define ZEND_ASSIGN_SR 29 -#define ZEND_ASSIGN_CONCAT 30 -#define ZEND_ASSIGN_BW_OR 31 -#define ZEND_ASSIGN_BW_AND 32 -#define ZEND_ASSIGN_BW_XOR 33 -#define ZEND_PRE_INC 34 -#define ZEND_PRE_DEC 35 -#define ZEND_POST_INC 36 -#define ZEND_POST_DEC 37 -#define ZEND_ASSIGN 38 -#define ZEND_ASSIGN_REF 39 -#define ZEND_ECHO 40 -#define ZEND_PRINT 41 -#define ZEND_JMP 42 -#define ZEND_JMPZ 43 -#define ZEND_JMPNZ 44 -#define ZEND_JMPZNZ 45 -#define ZEND_JMPZ_EX 46 -#define ZEND_JMPNZ_EX 47 -#define ZEND_CASE 48 -#define ZEND_SWITCH_FREE 49 -#define ZEND_BRK 50 -#define ZEND_CONT 51 -#define ZEND_BOOL 52 -#define ZEND_INIT_STRING 53 -#define ZEND_ADD_CHAR 54 -#define ZEND_ADD_STRING 55 -#define ZEND_ADD_VAR 56 -#define ZEND_BEGIN_SILENCE 57 -#define ZEND_END_SILENCE 58 -#define ZEND_INIT_FCALL_BY_NAME 59 -#define ZEND_DO_FCALL 60 -#define ZEND_DO_FCALL_BY_NAME 61 -#define ZEND_RETURN 62 -#define ZEND_RECV 63 -#define ZEND_RECV_INIT 64 -#define ZEND_SEND_VAL 65 -#define ZEND_SEND_VAR 66 -#define ZEND_SEND_REF 67 -#define ZEND_NEW 68 -#define ZEND_GOTO 69 -#define ZEND_FREE 70 -#define ZEND_INIT_ARRAY 71 -#define ZEND_ADD_ARRAY_ELEMENT 72 -#define ZEND_INCLUDE_OR_EVAL 73 -#define ZEND_UNSET_VAR 74 -#define ZEND_UNSET_DIM 75 -#define ZEND_UNSET_OBJ 76 -#define ZEND_FE_RESET 77 -#define ZEND_FE_FETCH 78 -#define ZEND_EXIT 79 -#define ZEND_FETCH_R 80 -#define ZEND_FETCH_DIM_R 81 -#define ZEND_FETCH_OBJ_R 82 -#define ZEND_FETCH_W 83 -#define ZEND_FETCH_DIM_W 84 -#define ZEND_FETCH_OBJ_W 85 -#define ZEND_FETCH_RW 86 -#define ZEND_FETCH_DIM_RW 87 -#define ZEND_FETCH_OBJ_RW 88 -#define ZEND_FETCH_IS 89 -#define ZEND_FETCH_DIM_IS 90 -#define ZEND_FETCH_OBJ_IS 91 -#define ZEND_FETCH_FUNC_ARG 92 -#define ZEND_FETCH_DIM_FUNC_ARG 93 -#define ZEND_FETCH_OBJ_FUNC_ARG 94 -#define ZEND_FETCH_UNSET 95 -#define ZEND_FETCH_DIM_UNSET 96 -#define ZEND_FETCH_OBJ_UNSET 97 -#define ZEND_FETCH_DIM_TMP_VAR 98 -#define ZEND_FETCH_CONSTANT 99 -#define ZEND_EXT_STMT 101 -#define ZEND_EXT_FCALL_BEGIN 102 -#define ZEND_EXT_FCALL_END 103 -#define ZEND_EXT_NOP 104 -#define ZEND_TICKS 105 -#define ZEND_SEND_VAR_NO_REF 106 -#define ZEND_CATCH 107 -#define ZEND_THROW 108 -#define ZEND_FETCH_CLASS 109 -#define ZEND_CLONE 110 -#define ZEND_INIT_METHOD_CALL 112 -#define ZEND_INIT_STATIC_METHOD_CALL 113 -#define ZEND_ISSET_ISEMPTY_VAR 114 -#define ZEND_ISSET_ISEMPTY_DIM_OBJ 115 -#define ZEND_PRE_INC_OBJ 132 -#define ZEND_PRE_DEC_OBJ 133 -#define ZEND_POST_INC_OBJ 134 -#define ZEND_POST_DEC_OBJ 135 -#define ZEND_ASSIGN_OBJ 136 -#define ZEND_INSTANCEOF 138 -#define ZEND_DECLARE_CLASS 139 -#define ZEND_DECLARE_INHERITED_CLASS 140 -#define ZEND_DECLARE_FUNCTION 141 -#define ZEND_RAISE_ABSTRACT_ERROR 142 -#define ZEND_ADD_INTERFACE 144 -#define ZEND_VERIFY_ABSTRACT_CLASS 146 -#define ZEND_ASSIGN_DIM 147 -#define ZEND_ISSET_ISEMPTY_PROP_OBJ 148 -#define ZEND_HANDLE_EXCEPTION 149 -#define ZEND_USER_OPCODE 150 -#define ZEND_U_NORMALIZE 151 -#define ZEND_JMP_SET 152 diff --git a/acconfig.h.in b/acconfig.h.in deleted file mode 100644 index f87979c2fdb02..0000000000000 --- a/acconfig.h.in +++ /dev/null @@ -1 +0,0 @@ -/* Leave this file alone */ diff --git a/acinclude.m4 b/acinclude.m4 deleted file mode 100644 index 37e1f21d2510f..0000000000000 --- a/acinclude.m4 +++ /dev/null @@ -1,2744 +0,0 @@ -dnl -dnl $Id$ -dnl -dnl This file contains local autoconf functions. -dnl - -dnl ------------------------------------------------------------------------- -dnl Output stylize macros for configure (help/runtime) -dnl ------------------------------------------------------------------------- - -dnl -dnl PHP_HELP_SEPARATOR(title) -dnl -dnl Adds separator title into the configure --help display. -dnl -AC_DEFUN([PHP_HELP_SEPARATOR],[ -AC_ARG_ENABLE([],[ -$1 -],[]) -]) - -dnl -dnl PHP_CONFIGURE_PART(title) -dnl -dnl Adds separator title configure output (idea borrowed from mm) -dnl -AC_DEFUN([PHP_CONFIGURE_PART],[ - AC_MSG_RESULT() - AC_MSG_RESULT([${T_MD}$1${T_ME}]) -]) - -dnl ------------------------------------------------------------------------- -dnl Build system helper macros -dnl ------------------------------------------------------------------------- - -dnl -dnl PHP_DEF_HAVE(what) -dnl -dnl Generates 'AC_DEFINE(HAVE_WHAT, 1, [ ])' -dnl -AC_DEFUN([PHP_DEF_HAVE],[AC_DEFINE([HAVE_]translit($1,a-z_.-,A-Z___), 1, [ ])]) - -dnl -dnl PHP_RUN_ONCE(namespace, variable, code) -dnl -dnl execute code, if variable is not set in namespace -dnl -AC_DEFUN([PHP_RUN_ONCE],[ - changequote({,}) - unique=`echo $2|$SED 's/[^a-zA-Z0-9]/_/g'` - changequote([,]) - cmd="echo $ac_n \"\$$1$unique$ac_c\"" - if test -n "$unique" && test "`eval $cmd`" = "" ; then - eval "$1$unique=set" - $3 - fi -]) - -dnl -dnl PHP_EXPAND_PATH(path, variable) -dnl -dnl expands path to an absolute path and assigns it to variable -dnl -AC_DEFUN([PHP_EXPAND_PATH],[ - if test -z "$1" || echo "$1" | grep '^/' >/dev/null ; then - $2=$1 - else - changequote({,}) - ep_dir="`echo $1|$SED 's%/*[^/][^/]*/*$%%'`" - changequote([,]) - ep_realdir="`(cd \"$ep_dir\" && pwd)`" - $2="$ep_realdir/`basename \"$1\"`" - fi -]) - -dnl -dnl PHP_DEFINE(WHAT [, value[, directory]]) -dnl -dnl Creates builddir/include/what.h and in there #define WHAT value -dnl -AC_DEFUN([PHP_DEFINE],[ - [echo "#define ]$1[]ifelse([$2],,[ 1],[ $2])[" > ]ifelse([$3],,[include],[$3])[/php_]translit($1,A-Z,a-z)[.h] -]) - -dnl -dnl PHP_SUBST(varname) -dnl -dnl Adds variable with it's value into Makefile, e.g.: -dnl CC = gcc -dnl -AC_DEFUN([PHP_SUBST],[ - PHP_VAR_SUBST="$PHP_VAR_SUBST $1" -]) - -dnl -dnl PHP_SUBST_OLD(varname) -dnl -dnl Same as PHP_SUBST() but also substitutes all @VARNAME@ -dnl instances in every file passed to AC_OUTPUT() -dnl -AC_DEFUN([PHP_SUBST_OLD],[ - PHP_SUBST($1) - AC_SUBST($1) -]) - -dnl -dnl PHP_OUTPUT(file) -dnl -dnl Adds "file" to the list of files generated by AC_OUTPUT -dnl This macro can be used several times. -dnl -AC_DEFUN([PHP_OUTPUT],[ - PHP_OUTPUT_FILES="$PHP_OUTPUT_FILES $1" -]) - - -dnl ------------------------------------------------------------------------- -dnl Build system base macros -dnl ------------------------------------------------------------------------- - -dnl -dnl PHP_CANONICAL_HOST_TARGET -dnl -AC_DEFUN([PHP_CANONICAL_HOST_TARGET],[ - AC_REQUIRE([AC_CANONICAL_HOST])dnl - AC_REQUIRE([AC_CANONICAL_TARGET])dnl - dnl Make sure we do not continue if host_alias is empty. - if test -z "$host_alias" && test -n "$host"; then - host_alias=$host - fi - if test -z "$host_alias"; then - AC_MSG_ERROR([host_alias is not set!]) - fi -]) - -dnl -dnl PHP_INIT_BUILD_SYSTEM -dnl -AC_DEFUN([PHP_INIT_BUILD_SYSTEM],[ -AC_REQUIRE([PHP_CANONICAL_HOST_TARGET])dnl -test -d include || $php_shtool mkdir include -> Makefile.objects -> Makefile.fragments -dnl We need to play tricks here to avoid matching the grep line itself -pattern=define -$EGREP $pattern'.*include/php' $srcdir/configure|$SED 's/.*>//'|xargs touch 2>/dev/null -]) - -dnl -dnl PHP_GEN_GLOBAL_MAKEFILE -dnl -dnl Generates the global makefile. -dnl -AC_DEFUN([PHP_GEN_GLOBAL_MAKEFILE],[ - cat >Makefile <> Makefile - done - - cat $abs_srcdir/Makefile.global Makefile.fragments Makefile.objects >> Makefile -]) - -dnl -dnl PHP_ADD_MAKEFILE_FRAGMENT([srcfile [, ext_srcdir [, ext_builddir]]]) -dnl -dnl Processes a file called Makefile.frag in the source directory -dnl of the most recently added extension. $(srcdir) and $(builddir) -dnl are substituted with the proper paths. Can be used to supply -dnl custom rules and/or additional targets. -dnl -AC_DEFUN([PHP_ADD_MAKEFILE_FRAGMENT],[ - ifelse($1,,src=$ext_srcdir/Makefile.frag,src=$1) - ifelse($2,,ac_srcdir=$ext_srcdir,ac_srcdir=$2) - ifelse($3,,ac_builddir=$ext_builddir,ac_builddir=$3) - $SED -e "s#\$(srcdir)#$ac_srcdir#g" -e "s#\$(builddir)#$ac_builddir#g" $src >> Makefile.fragments -]) - -dnl -dnl PHP_ADD_SOURCES(source-path, sources [, special-flags [, type]]) -dnl -dnl Adds sources which are located relative to source-path to the -dnl array of type type. Sources are processed with optional -dnl special-flags which are passed to the compiler. Sources -dnl can be either written in C or C++ (filenames shall end in .c -dnl or .cpp, respectively). -dnl -dnl Note: If source-path begins with a "/", the "/" is removed and -dnl the path is interpreted relative to the top build-directory. -dnl -dnl which array to append to? -AC_DEFUN([PHP_ADD_SOURCES],[ - PHP_ADD_SOURCES_X($1, $2, $3, ifelse($4,cli,PHP_CLI_OBJS,ifelse($4,sapi,PHP_SAPI_OBJS,PHP_GLOBAL_OBJS))) -]) - -dnl -dnl _PHP_ASSIGN_BUILD_VARS(type) -dnl internal, don't use -AC_DEFUN([_PHP_ASSIGN_BUILD_VARS],[ -ifelse($1,shared,[ - b_c_pre=$shared_c_pre - b_cxx_pre=$shared_cxx_pre - b_c_meta=$shared_c_meta - b_cxx_meta=$shared_cxx_meta - b_c_post=$shared_c_post - b_cxx_post=$shared_cxx_post -],[ - b_c_pre=$php_c_pre - b_cxx_pre=$php_cxx_pre - b_c_meta=$php_c_meta - b_cxx_meta=$php_cxx_meta - b_c_post=$php_c_post - b_cxx_post=$php_cxx_post -])dnl - b_lo=[$]$1_lo -]) - -dnl -dnl PHP_ADD_SOURCES_X(source-path, sources[, special-flags[, target-var[, shared[, special-post-flags]]]]) -dnl -dnl Additional to PHP_ADD_SOURCES (see above), this lets you set the -dnl name of the array target-var directly, as well as whether -dnl shared objects will be built from the sources. -dnl -dnl Should not be used directly. -dnl -AC_DEFUN([PHP_ADD_SOURCES_X],[ -dnl relative to source- or build-directory? -dnl ac_srcdir/ac_bdir include trailing slash - case $1 in - ""[)] ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;; - /*[)] ac_srcdir=`echo "$1"|cut -c 2-`"/"; ac_bdir=$ac_srcdir; ac_inc="-I$ac_bdir -I$abs_srcdir/$ac_bdir" ;; - *[)] ac_srcdir="$abs_srcdir/$1/"; ac_bdir="$1/"; ac_inc="-I$ac_bdir -I$ac_srcdir" ;; - esac - -dnl how to build .. shared or static? - ifelse($5,yes,_PHP_ASSIGN_BUILD_VARS(shared),_PHP_ASSIGN_BUILD_VARS(php)) - -dnl iterate over the sources - old_IFS=[$]IFS - for ac_src in $2; do - -dnl remove the suffix - IFS=. - set $ac_src - ac_obj=[$]1 - IFS=$old_IFS - -dnl append to the array which has been dynamically chosen at m4 time - $4="[$]$4 [$]ac_bdir[$]ac_obj.lo" - -dnl choose the right compiler/flags/etc. for the source-file - case $ac_src in - *.c[)] ac_comp="$b_c_pre $3 $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $6$b_c_post" ;; - *.s[)] ac_comp="$b_c_pre $3 $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $6$b_c_post" ;; - *.S[)] ac_comp="$b_c_pre $3 $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $6$b_c_post" ;; - *.cpp|*.cc|*.cxx[)] ac_comp="$b_cxx_pre $3 $ac_inc $b_cxx_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $6$b_cxx_post" ;; - esac - -dnl create a rule for the object/source combo - cat >>Makefile.objects< conftest.c - cmd='$CC $1 -c conftest.c' - if eval $cmd 2>&1 | $EGREP -e $1 >/dev/null ; then - ac_result=no - else - ac_result=yes - fi - eval $gcc_arg_name=$ac_result - rm -f conftest.* - ]) - if eval test "\$$gcc_arg_name" = "yes"; then - $2 - else - : - $3 - fi -]) - -dnl -dnl PHP_LIBGCC_LIBPATH(gcc) -dnl -dnl Stores the location of libgcc in libgcc_libpath -dnl -AC_DEFUN([PHP_LIBGCC_LIBPATH],[ - changequote({,}) - libgcc_libpath=`$1 --print-libgcc-file-name|$SED 's%/*[^/][^/]*$%%'` - changequote([,]) -]) - -dnl ------------------------------------------------------------------------- -dnl Macros to modify LIBS, INCLUDES, etc. variables -dnl ------------------------------------------------------------------------- - -dnl -dnl PHP_REMOVE_USR_LIB(NAME) -dnl -dnl Removes all -L/usr/$PHP_LIBDIR entries from variable NAME -dnl -AC_DEFUN([PHP_REMOVE_USR_LIB],[ - unset ac_new_flags - for i in [$]$1; do - case [$]i in - -L/usr/$PHP_LIBDIR|-L/usr/$PHP_LIBDIR/[)] ;; - *[)] ac_new_flags="[$]ac_new_flags [$]i" ;; - esac - done - $1=[$]ac_new_flags -]) - -dnl -dnl PHP_EVAL_LIBLINE(libline, SHARED-LIBADD) -dnl -dnl Use this macro, if you need to add libraries and or library search -dnl paths to the PHP build system which are only given in compiler -dnl notation. -dnl -AC_DEFUN([PHP_EVAL_LIBLINE],[ - for ac_i in $1; do - case $ac_i in - -pthread[)] - if test "$ext_shared" = "yes"; then - $2="[$]$2 -pthread" - else - PHP_RUN_ONCE(EXTRA_LDFLAGS, [$ac_i], [EXTRA_LDFLAGS="$EXTRA_LDFLAGS $ac_i"]) - fi - ;; - -l*[)] - ac_ii=`echo $ac_i|cut -c 3-` - PHP_ADD_LIBRARY($ac_ii,1,$2) - ;; - -L*[)] - ac_ii=`echo $ac_i|cut -c 3-` - PHP_ADD_LIBPATH($ac_ii,$2) - ;; - esac - done -]) - -dnl -dnl PHP_EVAL_INCLINE(headerline) -dnl -dnl Use this macro, if you need to add header search paths to the PHP -dnl build system which are only given in compiler notation. -dnl -AC_DEFUN([PHP_EVAL_INCLINE],[ - for ac_i in $1; do - case $ac_i in - -I*[)] - ac_ii=`echo $ac_i|cut -c 3-` - PHP_ADD_INCLUDE($ac_ii) - ;; - esac - done -]) - -dnl internal, don't use -AC_DEFUN([_PHP_ADD_LIBPATH_GLOBAL],[ - PHP_RUN_ONCE(LIBPATH, $1, [ - test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$1" - LDFLAGS="$LDFLAGS -L$1" - PHP_RPATHS="$PHP_RPATHS $1" - ]) -])dnl -dnl -dnl -dnl PHP_ADD_LIBPATH(path [, SHARED-LIBADD]) -dnl -dnl Adds a path to linkpath/runpath (LDFLAGS) -dnl -AC_DEFUN([PHP_ADD_LIBPATH],[ - if test "$1" != "/usr/$PHP_LIBDIR" && test "$1" != "/usr/lib"; then - PHP_EXPAND_PATH($1, ai_p) - ifelse([$2],,[ - _PHP_ADD_LIBPATH_GLOBAL([$ai_p]) - ],[ - if test "$ext_shared" = "yes"; then - $2="$ld_runpath_switch$ai_p -L$ai_p [$]$2" - else - _PHP_ADD_LIBPATH_GLOBAL([$ai_p]) - fi - ]) - fi -]) - -dnl -dnl PHP_UTILIZE_RPATHS() -dnl -dnl builds RPATHS/LDFLAGS from PHP_RPATHS -dnl -AC_DEFUN([PHP_UTILIZE_RPATHS],[ - OLD_RPATHS=$PHP_RPATHS - unset PHP_RPATHS - - for i in $OLD_RPATHS; do -dnl Can be passed to native cc/libtool - PHP_LDFLAGS="$PHP_LDFLAGS -L$i" -dnl Libtool-specific - PHP_RPATHS="$PHP_RPATHS -R $i" -dnl cc-specific - NATIVE_RPATHS="$NATIVE_RPATHS $ld_runpath_switch$i" - done - - if test "$PHP_RPATH" = "no"; then - unset PHP_RPATHS - unset NATIVE_RPATHS - fi -]) - -dnl -dnl PHP_ADD_INCLUDE(path [,before]) -dnl -dnl add an include path. -dnl if before is 1, add in the beginning of INCLUDES. -dnl -AC_DEFUN([PHP_ADD_INCLUDE],[ - if test "$1" != "/usr/include"; then - PHP_EXPAND_PATH($1, ai_p) - PHP_RUN_ONCE(INCLUDEPATH, $ai_p, [ - if test "$2"; then - INCLUDES="-I$ai_p $INCLUDES" - else - INCLUDES="$INCLUDES -I$ai_p" - fi - ]) - fi -]) - -dnl internal, don't use -AC_DEFUN([_PHP_X_ADD_LIBRARY],[dnl - ifelse([$2],,$3="-l$1 [$]$3", $3="[$]$3 -l$1") dnl -])dnl -dnl -dnl internal, don't use -AC_DEFUN([_PHP_ADD_LIBRARY_SKELETON],[ - case $1 in - c|c_r|pthread*[)] ;; - *[)] ifelse($3,,[ - _PHP_X_ADD_LIBRARY($1,$2,$5) - ],[ - if test "$ext_shared" = "yes"; then - _PHP_X_ADD_LIBRARY($1,$2,$3) - else - $4($1,$2) - fi - ]) ;; - esac -])dnl -dnl -dnl -dnl PHP_ADD_LIBRARY(library[, append[, shared-libadd]]) -dnl -dnl add a library to the link line -dnl -AC_DEFUN([PHP_ADD_LIBRARY],[ - _PHP_ADD_LIBRARY_SKELETON([$1],[$2],[$3],[PHP_ADD_LIBRARY],[LIBS]) -]) - -dnl -dnl PHP_ADD_LIBRARY_DEFER(library[, append[, shared-libadd]]) -dnl -dnl add a library to the link line (deferred, not used during configure) -dnl -AC_DEFUN([PHP_ADD_LIBRARY_DEFER],[ - _PHP_ADD_LIBRARY_SKELETON([$1],[$2],[$3],[PHP_ADD_LIBRARY_DEFER],[DLIBS]) -]) - -dnl -dnl PHP_ADD_LIBRARY_WITH_PATH(library, path[, shared-libadd]) -dnl -dnl add a library to the link line and path to linkpath/runpath. -dnl if shared-libadd is not empty and $ext_shared is yes, -dnl shared-libadd will be assigned the library information -dnl -AC_DEFUN([PHP_ADD_LIBRARY_WITH_PATH],[ -ifelse($3,,[ - if test -n "$2"; then - PHP_ADD_LIBPATH($2) - fi - PHP_ADD_LIBRARY($1) -],[ - if test "$ext_shared" = "yes"; then - $3="-l$1 [$]$3" - if test -n "$2"; then - PHP_ADD_LIBPATH($2,$3) - fi - else - PHP_ADD_LIBRARY_WITH_PATH($1,$2) - fi -]) -]) - -dnl -dnl PHP_ADD_LIBRARY_DEFER_WITH_PATH(library, path[, shared-libadd]) -dnl -dnl add a library to the link line (deferred) -dnl and path to linkpath/runpath (not deferred) -dnl if shared-libadd is not empty and $ext_shared is yes, -dnl shared-libadd will be assigned the library information -dnl -AC_DEFUN([PHP_ADD_LIBRARY_DEFER_WITH_PATH],[ -ifelse($3,,[ - if test -n "$2"; then - PHP_ADD_LIBPATH($2) - fi - PHP_ADD_LIBRARY_DEFER($1) -],[ - if test "$ext_shared" = "yes"; then - $3="-l$1 [$]$3" - if test -n "$2"; then - PHP_ADD_LIBPATH($2,$3) - fi - else - PHP_ADD_LIBRARY_DEFER_WITH_PATH($1,$2) - fi -]) -]) - -dnl -dnl PHP_ADD_FRAMEWORK(framework [,before]) -dnl -dnl add a (Darwin / Mac OS X) framework to the link -dnl line. if before is 1, the framework is added -dnl to the beginning of the line. -dnl -AC_DEFUN([PHP_ADD_FRAMEWORK], [ - PHP_RUN_ONCE(FRAMEWORKS, $1, [ - if test "$2"; then - PHP_FRAMEWORKS="-framework $1 $PHP_FRAMEWORKS" - else - PHP_FRAMEWORKS="$PHP_FRAMEWORKS -framework $1" - fi - ]) -]) - -dnl -dnl PHP_ADD_FRAMEWORKPATH(path [,before]) -dnl -dnl add a (Darwin / Mac OS X) framework path to the link -dnl and include lines. default paths include (but are -dnl not limited to) /Local/Library/Frameworks and -dnl /System/Library/Frameworks, so these don't need -dnl to be specifically added. if before is 1, the -dnl framework path is added to the beginning of the -dnl relevant lines. -dnl -AC_DEFUN([PHP_ADD_FRAMEWORKPATH], [ - PHP_EXPAND_PATH($1, ai_p) - PHP_RUN_ONCE(FRAMEWORKPATH, $ai_p, [ - if test "$2"; then - PHP_FRAMEWORKPATH="-F$ai_p $PHP_FRAMEWORKPATH" - else - PHP_FRAMEWORKPATH="$PHP_FRAMEWORKPATH -F$ai_p" - fi - ]) -]) - -dnl -dnl PHP_ADD_FRAMEWORK_WITH_PATH(framework, path) -dnl -dnl Adds a (Darwin / Mac OS X) framework path and the -dnl framework itself to the link and include lines. -dnl -AC_DEFUN([PHP_ADD_FRAMEWORK_WITH_PATH], [ - PHP_ADD_FRAMEWORKPATH($2) - PHP_ADD_FRAMEWORK($1) -]) - -dnl -dnl PHP_SET_LIBTOOL_VARIABLE(var) -dnl -dnl Set libtool variable -dnl -AC_DEFUN([PHP_SET_LIBTOOL_VARIABLE],[ - if test -z "$LIBTOOL"; then - LIBTOOL='$(SHELL) $(top_builddir)/libtool $1' - else - LIBTOOL="$LIBTOOL $1" - fi -]) - -dnl ------------------------------------------------------------------------- -dnl Wrapper macros for AC_ARG_WITH / AC_ARG_ENABLE -dnl ------------------------------------------------------------------------- - -dnl PHP_ARG_ANALYZE_EX -dnl internal -AC_DEFUN([PHP_ARG_ANALYZE_EX],[ -ext_output="yes, shared" -ext_shared=yes -case [$]$1 in -shared,*[)] - $1=`echo "[$]$1"|$SED 's/^shared,//'` - ;; -shared[)] - $1=yes - ;; -no[)] - ext_output=no - ext_shared=no - ;; -*[)] - ext_output=yes - ext_shared=no - ;; -esac - -PHP_ALWAYS_SHARED([$1]) -]) - -dnl PHP_ARG_ANALYZE -dnl internal -AC_DEFUN([PHP_ARG_ANALYZE],[ -ifelse([$3],yes,[PHP_ARG_ANALYZE_EX([$1])],[ext_output=ifelse([$]$1,,no,[$]$1)]) -ifelse([$2],,,[AC_MSG_RESULT([$ext_output])]) -]) - -dnl -dnl PHP_ARG_WITH(arg-name, check message, help text[, default-val[, extension-or-not]]) -dnl Sets PHP_ARG_NAME either to the user value or to the default value. -dnl default-val defaults to no. This will also set the variable ext_shared, -dnl and will overwrite any previous variable of that name. -dnl If extension-or-not is yes (default), then do the ENABLE_ALL check and run -dnl the PHP_ARG_ANALYZE_EX. -dnl -AC_DEFUN([PHP_ARG_WITH],[ -PHP_REAL_ARG_WITH([$1],[$2],[$3],[$4],PHP_[]translit($1,a-z0-9-,A-Z0-9_),[ifelse($5,,yes,$5)]) -]) - -dnl PHP_REAL_ARG_WITH -dnl internal -AC_DEFUN([PHP_REAL_ARG_WITH],[ -ifelse([$2],,,[AC_MSG_CHECKING([$2])]) -AC_ARG_WITH($1,[$3],$5=[$]withval, -[ - $5=ifelse($4,,no,$4) - - if test "$PHP_ENABLE_ALL" && test "$6" = "yes"; then - $5=$PHP_ENABLE_ALL - fi -]) -PHP_ARG_ANALYZE($5,[$2],$6) -]) - -dnl -dnl PHP_ARG_ENABLE(arg-name, check message, help text[, default-val[, extension-or-not]]) -dnl Sets PHP_ARG_NAME either to the user value or to the default value. -dnl default-val defaults to no. This will also set the variable ext_shared, -dnl and will overwrite any previous variable of that name. -dnl If extension-or-not is yes (default), then do the ENABLE_ALL check and run -dnl the PHP_ARG_ANALYZE_EX. -dnl -AC_DEFUN([PHP_ARG_ENABLE],[ -PHP_REAL_ARG_ENABLE([$1],[$2],[$3],[$4],PHP_[]translit($1,a-z-,A-Z_),[ifelse($5,,yes,$5)]) -]) - -dnl PHP_REAL_ARG_ENABLE -dnl internal -AC_DEFUN([PHP_REAL_ARG_ENABLE],[ -ifelse([$2],,,[AC_MSG_CHECKING([$2])]) -AC_ARG_ENABLE($1,[$3],$5=[$]enableval, -[ - $5=ifelse($4,,no,$4) - - if test "$PHP_ENABLE_ALL" && test "$6" = "yes"; then - $5=$PHP_ENABLE_ALL - fi -]) -PHP_ARG_ANALYZE($5,[$2],$6) -]) - -dnl ------------------------------------------------------------------------- -dnl Build macros -dnl ------------------------------------------------------------------------- - -dnl -dnl PHP_SET_SYM_FILE(path) -dnl -dnl set the path of the file which contains the symbol export list -dnl -AC_DEFUN([PHP_SET_SYM_FILE], -[ - PHP_SYM_FILE=$1 -]) - -dnl -dnl PHP_BUILD_THREAD_SAFE -dnl -AC_DEFUN([PHP_BUILD_THREAD_SAFE],[ - enable_maintainer_zts=yes - if test "$pthreads_working" != "yes"; then - AC_MSG_ERROR([ZTS currently requires working POSIX threads. We were unable to verify that your system supports Pthreads.]) - fi -]) - -dnl -dnl PHP_REQUIRE_CXX -dnl -AC_DEFUN([PHP_REQUIRE_CXX],[ - if test -z "$php_cxx_done"; then - AC_PROG_CXX - AC_PROG_CXXCPP - php_cxx_done=yes - fi -]) - -dnl -dnl PHP_BUILD_SHARED -dnl -AC_DEFUN([PHP_BUILD_SHARED],[ - PHP_BUILD_PROGRAM - OVERALL_TARGET=libphp6.la - php_build_target=shared - - php_c_pre=$shared_c_pre - php_c_meta=$shared_c_meta - php_c_post=$shared_c_post - php_cxx_pre=$shared_cxx_pre - php_cxx_meta=$shared_cxx_meta - php_cxx_post=$shared_cxx_post - php_lo=$shared_lo -]) - -dnl -dnl PHP_BUILD_STATIC -dnl -AC_DEFUN([PHP_BUILD_STATIC],[ - PHP_BUILD_PROGRAM - OVERALL_TARGET=libphp6.la - php_build_target=static -]) - -dnl -dnl PHP_BUILD_BUNDLE -dnl -AC_DEFUN([PHP_BUILD_BUNDLE],[ - PHP_BUILD_PROGRAM - OVERALL_TARGET=libs/libphp6.bundle - php_build_target=static -]) - -dnl -dnl PHP_BUILD_PROGRAM -dnl -AC_DEFUN([PHP_BUILD_PROGRAM],[ - OVERALL_TARGET=[]ifelse($1,,php,$1) - php_c_pre='$(LIBTOOL) --mode=compile $(CC)' - php_c_meta='$(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS)' - php_c_post= - php_cxx_pre='$(LIBTOOL) --mode=compile $(CXX)' - php_cxx_meta='$(COMMON_FLAGS) $(CXXFLAGS_CLEAN) $(EXTRA_CXXFLAGS)' - php_cxx_post= - php_lo=lo - - case $with_pic in - yes) pic_setting='-prefer-pic';; - no) pic_setting='-prefer-non-pic';; - esac - - shared_c_pre='$(LIBTOOL) --mode=compile $(CC)' - shared_c_meta='$(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) '$pic_setting - shared_c_post= - shared_cxx_pre='$(LIBTOOL) --mode=compile $(CXX)' - shared_cxx_meta='$(COMMON_FLAGS) $(CXXFLAGS_CLEAN) $(EXTRA_CXXFLAGS) '$pic_setting - shared_cxx_post= - shared_lo=lo - - php_build_target=program -]) - -dnl -dnl PHP_SHARED_MODULE(module-name, object-var, build-dir, cxx) -dnl -dnl Basically sets up the link-stage for building module-name -dnl from object_var in build-dir. -dnl -AC_DEFUN([PHP_SHARED_MODULE],[ - install_modules="install-modules" - - case $host_alias in - *aix*[)] - suffix=so - link_cmd='$(LIBTOOL) --mode=link ifelse($4,,[$(CC)],[$(CXX)]) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -Wl,-G -o '$3'/$1.la -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $($2) $(translit($1,a-z_-,A-Z__)_SHARED_LIBADD) && mv -f '$3'/.libs/$1.so '$3'/$1.so' - ;; - *netware*[)] - suffix=nlm - link_cmd='$(LIBTOOL) --mode=link ifelse($4,,[$(CC)],[$(CXX)]) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o [$]@ -shared -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $($2) ifelse($1, php5lib, , -L$(top_builddir)/netware -lphp5lib) $(translit(ifelse($1, php5lib, $1, m4_substr($1, 3)),a-z_-,A-Z__)_SHARED_LIBADD)' - ;; - *[)] - suffix=la - link_cmd='$(LIBTOOL) --mode=link ifelse($4,,[$(CC)],[$(CXX)]) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o [$]@ -export-dynamic -avoid-version -prefer-pic -module -rpath $(phplibdir) $(EXTRA_LDFLAGS) $($2) $(translit($1,a-z_-,A-Z__)_SHARED_LIBADD)' - ;; - esac - - PHP_MODULES="$PHP_MODULES \$(phplibdir)/$1.$suffix" - PHP_SUBST($2) - cat >>Makefile.objects<>)dnl -<>dnl -changequote([,]), [#include -#if STDC_HEADERS -#include -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif], ac_cv_type_in_addr_t=yes, ac_cv_type_in_addr_t=no)])dnl -AC_MSG_RESULT([$ac_cv_type_in_addr_t]) -if test $ac_cv_type_in_addr_t = no; then - AC_DEFINE(in_addr_t, u_int, [ ]) -fi -]) - -dnl -dnl PHP_TIME_R_TYPE -dnl -dnl Check type of reentrant time-related functions -dnl Type can be: irix, hpux or POSIX -dnl -AC_DEFUN([PHP_TIME_R_TYPE],[ -AC_CACHE_CHECK(for type of reentrant time-related functions, ac_cv_time_r_type,[ -AC_TRY_RUN([ -#include - -main() { -char buf[27]; -struct tm t; -time_t old = 0; -int r, s; - -s = gmtime_r(&old, &t); -r = (int) asctime_r(&t, buf, 26); -if (r == s && s == 0) return (0); -return (1); -} -],[ - ac_cv_time_r_type=hpux -],[ - AC_TRY_RUN([ -#include -main() { - struct tm t, *s; - time_t old = 0; - char buf[27], *p; - - s = gmtime_r(&old, &t); - p = asctime_r(&t, buf, 26); - if (p == buf && s == &t) return (0); - return (1); -} - ],[ - ac_cv_time_r_type=irix - ],[ - ac_cv_time_r_type=POSIX - ],[ - ac_cv_time_r_type=POSIX - ]) -],[ - ac_cv_time_r_type=POSIX -]) -]) - case $ac_cv_time_r_type in - hpux[)] AC_DEFINE(PHP_HPUX_TIME_R,1,[Whether you have HP-UX 10.x]) ;; - irix[)] AC_DEFINE(PHP_IRIX_TIME_R,1,[Whether you have IRIX-style functions]) ;; - esac -]) - -dnl -dnl PHP_DOES_PWRITE_WORK -dnl internal -AC_DEFUN([PHP_DOES_PWRITE_WORK],[ - AC_TRY_RUN([ -#include -#include -#include -#include -#include -$1 - main() { - int fd = open("conftest_in", O_WRONLY|O_CREAT, 0600); - - if (fd < 0) exit(1); - if (pwrite(fd, "text", 4, 0) != 4) exit(1); - /* Linux glibc breakage until 2.2.5 */ - if (pwrite(fd, "text", 4, -1) != -1 || errno != EINVAL) exit(1); - exit(0); - } - - ],[ - ac_cv_pwrite=yes - ],[ - ac_cv_pwrite=no - ],[ - ac_cv_pwrite=no - ]) -]) - -dnl PHP_DOES_PREAD_WORK -dnl internal -AC_DEFUN([PHP_DOES_PREAD_WORK],[ - echo test > conftest_in - AC_TRY_RUN([ -#include -#include -#include -#include -#include -$1 - main() { - char buf[3]; - int fd = open("conftest_in", O_RDONLY); - if (fd < 0) exit(1); - if (pread(fd, buf, 2, 0) != 2) exit(1); - /* Linux glibc breakage until 2.2.5 */ - if (pread(fd, buf, 2, -1) != -1 || errno != EINVAL) exit(1); - exit(0); - } - ],[ - ac_cv_pread=yes - ],[ - ac_cv_pread=no - ],[ - ac_cv_pread=no - ]) - rm -f conftest_in -]) - -dnl -dnl PHP_PWRITE_TEST -dnl -AC_DEFUN([PHP_PWRITE_TEST],[ - AC_CACHE_CHECK(whether pwrite works,ac_cv_pwrite,[ - PHP_DOES_PWRITE_WORK - if test "$ac_cv_pwrite" = "no"; then - PHP_DOES_PWRITE_WORK([ssize_t pwrite(int, void *, size_t, off64_t);]) - if test "$ac_cv_pwrite" = "yes"; then - ac_cv_pwrite=64 - fi - fi - ]) - - if test "$ac_cv_pwrite" != "no"; then - AC_DEFINE(HAVE_PWRITE, 1, [ ]) - if test "$ac_cv_pwrite" = "64"; then - AC_DEFINE(PHP_PWRITE_64, 1, [whether pwrite64 is default]) - fi - fi -]) - -dnl -dnl PHP_PREAD_TEST -dnl -AC_DEFUN([PHP_PREAD_TEST],[ - AC_CACHE_CHECK(whether pread works,ac_cv_pread,[ - PHP_DOES_PREAD_WORK - if test "$ac_cv_pread" = "no"; then - PHP_DOES_PREAD_WORK([ssize_t pread(int, void *, size_t, off64_t);]) - if test "$ac_cv_pread" = "yes"; then - ac_cv_pread=64 - fi - fi - ]) - - if test "$ac_cv_pread" != "no"; then - AC_DEFINE(HAVE_PREAD, 1, [ ]) - if test "$ac_cv_pread" = "64"; then - AC_DEFINE(PHP_PREAD_64, 1, [whether pread64 is default]) - fi - fi -]) - -dnl -dnl PHP_MISSING_TIME_R_DECL -dnl -AC_DEFUN([PHP_MISSING_TIME_R_DECL],[ - AC_MSG_CHECKING([for missing declarations of reentrant functions]) - AC_TRY_COMPILE([#include ],[struct tm *(*func)() = localtime_r],[ - : - ],[ - AC_DEFINE(MISSING_LOCALTIME_R_DECL,1,[Whether localtime_r is declared]) - ]) - AC_TRY_COMPILE([#include ],[struct tm *(*func)() = gmtime_r],[ - : - ],[ - AC_DEFINE(MISSING_GMTIME_R_DECL,1,[Whether gmtime_r is declared]) - ]) - AC_TRY_COMPILE([#include ],[char *(*func)() = asctime_r],[ - : - ],[ - AC_DEFINE(MISSING_ASCTIME_R_DECL,1,[Whether asctime_r is declared]) - ]) - AC_TRY_COMPILE([#include ],[char *(*func)() = ctime_r],[ - : - ],[ - AC_DEFINE(MISSING_CTIME_R_DECL,1,[Whether ctime_r is declared]) - ]) - AC_TRY_COMPILE([#include ],[char *(*func)() = strtok_r],[ - : - ],[ - AC_DEFINE(MISSING_STRTOK_R_DECL,1,[Whether strtok_r is declared]) - ]) - AC_MSG_RESULT([done]) -]) - -dnl -dnl PHP_READDIR_R_TYPE -dnl -AC_DEFUN([PHP_READDIR_R_TYPE],[ - dnl HAVE_READDIR_R is also defined by libmysql - AC_CHECK_FUNC(readdir_r,ac_cv_func_readdir_r=yes,ac_cv_func_readdir=no) - if test "$ac_cv_func_readdir_r" = "yes"; then - AC_CACHE_CHECK(for type of readdir_r, ac_cv_what_readdir_r,[ - AC_TRY_RUN([ -#define _REENTRANT -#include -#include - -#ifndef PATH_MAX -#define PATH_MAX 1024 -#endif - -main() { - DIR *dir; - char entry[sizeof(struct dirent)+PATH_MAX]; - struct dirent *pentry = (struct dirent *) &entry; - - dir = opendir("/"); - if (!dir) - exit(1); - if (readdir_r(dir, (struct dirent *) entry, &pentry) == 0) - exit(0); - exit(1); -} - ],[ - ac_cv_what_readdir_r=POSIX - ],[ - AC_TRY_CPP([ -#define _REENTRANT -#include -#include -int readdir_r(DIR *, struct dirent *); - ],[ - ac_cv_what_readdir_r=old-style - ],[ - ac_cv_what_readdir_r=none - ]) - ],[ - ac_cv_what_readdir_r=none - ]) - ]) - case $ac_cv_what_readdir_r in - POSIX) - AC_DEFINE(HAVE_POSIX_READDIR_R,1,[whether you have POSIX readdir_r]);; - old-style) - AC_DEFINE(HAVE_OLD_READDIR_R,1,[whether you have old-style readdir_r]);; - esac - fi -]) - -dnl -dnl PHP_TM_GMTOFF -dnl -AC_DEFUN([PHP_TM_GMTOFF],[ -AC_CACHE_CHECK([for tm_gmtoff in struct tm], ac_cv_struct_tm_gmtoff, -[AC_TRY_COMPILE([#include -#include <$ac_cv_struct_tm>], [struct tm tm; tm.tm_gmtoff;], - ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no)]) - -if test "$ac_cv_struct_tm_gmtoff" = yes; then - AC_DEFINE(HAVE_TM_GMTOFF,1,[whether you have tm_gmtoff in struct tm]) -fi -]) - -dnl -dnl PHP_STRUCT_FLOCK -dnl -AC_DEFUN([PHP_STRUCT_FLOCK],[ -AC_CACHE_CHECK(for struct flock,ac_cv_struct_flock, - AC_TRY_COMPILE([ -#include -#include - ], - [struct flock x;], - [ - ac_cv_struct_flock=yes - ],[ - ac_cv_struct_flock=no - ]) -) -if test "$ac_cv_struct_flock" = "yes" ; then - AC_DEFINE(HAVE_STRUCT_FLOCK, 1,[whether you have struct flock]) -fi -]) - -dnl -dnl PHP_SOCKLEN_T -dnl -AC_DEFUN([PHP_SOCKLEN_T],[ -AC_CACHE_CHECK(for socklen_t,ac_cv_socklen_t, - AC_TRY_COMPILE([ -#include -#include -],[ -socklen_t x; -],[ - ac_cv_socklen_t=yes -],[ - ac_cv_socklen_t=no -])) -if test "$ac_cv_socklen_t" = "yes"; then - AC_DEFINE(HAVE_SOCKLEN_T, 1, [Whether you have socklen_t]) -fi -]) - -dnl -dnl PHP_MISSING_FCLOSE_DECL -dnl -dnl See if we have broken header files like SunOS has. -dnl -AC_DEFUN([PHP_MISSING_FCLOSE_DECL],[ - AC_MSG_CHECKING([for fclose declaration]) - AC_TRY_COMPILE([#include ],[int (*func)() = fclose],[ - AC_DEFINE(MISSING_FCLOSE_DECL,0,[ ]) - AC_MSG_RESULT([ok]) - ],[ - AC_DEFINE(MISSING_FCLOSE_DECL,1,[ ]) - AC_MSG_RESULT([missing]) - ]) -]) - -dnl -dnl PHP_AC_BROKEN_SPRINTF -dnl -dnl Check for broken sprintf(), C99 conformance -dnl -AC_DEFUN([PHP_AC_BROKEN_SPRINTF],[ - AC_CACHE_CHECK(whether sprintf is broken, ac_cv_broken_sprintf,[ - AC_TRY_RUN([main() {char buf[20];exit(sprintf(buf,"testing 123")!=11); }],[ - ac_cv_broken_sprintf=no - ],[ - ac_cv_broken_sprintf=yes - ],[ - ac_cv_broken_sprintf=no - ]) - ]) - if test "$ac_cv_broken_sprintf" = "yes"; then - AC_DEFINE(PHP_BROKEN_SPRINTF, 1, [Whether sprintf is C99 conform]) - else - AC_DEFINE(PHP_BROKEN_SPRINTF, 0, [Whether sprintf is C99 conform]) - fi -]) - -dnl -dnl PHP_AC_BROKEN_SNPRINTF -dnl -dnl Check for broken snprintf(), C99 conformance -dnl -AC_DEFUN([PHP_AC_BROKEN_SNPRINTF],[ - AC_CACHE_CHECK(whether snprintf is broken, ac_cv_broken_snprintf,[ - AC_TRY_RUN([ -#define NULL (0L) -main() { - char buf[20]; - int res = 0; - res = res || (snprintf(buf, 2, "marcus") != 6); - res = res || (buf[1] != '\0'); - /* Implementations may consider this as an encoding error */ - snprintf(buf, 0, "boerger"); - /* However, they MUST ignore the pointer */ - res = res || (buf[0] != 'm'); - res = res || (snprintf(NULL, 0, "boerger") != 7); - res = res || (snprintf(buf, sizeof(buf), "%f", 0.12345678) != 8); - exit(res); -} - ],[ - ac_cv_broken_snprintf=no - ],[ - ac_cv_broken_snprintf=yes - ],[ - ac_cv_broken_snprintf=no - ]) - ]) - if test "$ac_cv_broken_snprintf" = "yes"; then - AC_DEFINE(PHP_BROKEN_SNPRINTF, 1, [Whether snprintf is C99 conform]) - else - AC_DEFINE(PHP_BROKEN_SNPRINTF, 0, [Whether snprintf is C99 conform]) - fi -]) - -dnl -dnl PHP_SOLARIS_PIC_WEIRDNESS -dnl -dnl Solaris requires main code to be position independent in order -dnl to let shared objects find symbols. Weird. Ugly. -dnl -dnl Must be run after all --with-NN options that let the user -dnl choose dynamic extensions, and after the gcc test. -dnl -AC_DEFUN([PHP_SOLARIS_PIC_WEIRDNESS],[ - AC_MSG_CHECKING([whether -fPIC is required]) - if test -n "$EXT_SHARED"; then - os=`uname -sr 2>/dev/null` - case $os in - "SunOS 5.6"|"SunOS 5.7"[)] - case $CC in - gcc*|egcs*) - CFLAGS="$CFLAGS -fPIC";; - *[)] - CFLAGS="$CFLAGS -fpic";; - esac - AC_MSG_RESULT([yes]);; - *[)] - AC_MSG_RESULT([no]);; - esac - else - AC_MSG_RESULT([no]) - fi -]) - -dnl -dnl PHP_SYS_LFS -dnl -dnl The problem is that the default compilation flags in Solaris 2.6 won't -dnl let programs access large files; you need to tell the compiler that -dnl you actually want your programs to work on large files. For more -dnl details about this brain damage please see: -dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html -dnl -dnl Written by Paul Eggert . -dnl -AC_DEFUN([PHP_SYS_LFS], -[dnl - # If available, prefer support for large files unless the user specified - # one of the CPPFLAGS, LDFLAGS, or LIBS variables. - AC_MSG_CHECKING([whether large file support needs explicit enabling]) - ac_getconfs='' - ac_result=yes - ac_set='' - ac_shellvars='CPPFLAGS LDFLAGS LIBS' - for ac_shellvar in $ac_shellvars; do - case $ac_shellvar in - CPPFLAGS[)] ac_lfsvar=LFS_CFLAGS ;; - *[)] ac_lfsvar=LFS_$ac_shellvar ;; - esac - eval test '"${'$ac_shellvar'+set}"' = set && ac_set=$ac_shellvar - (getconf $ac_lfsvar) >/dev/null 2>&1 || { ac_result=no; break; } - ac_getconf=`getconf $ac_lfsvar` - ac_getconfs=$ac_getconfs$ac_getconf - eval ac_test_$ac_shellvar=\$ac_getconf - done - case "$ac_result$ac_getconfs" in - yes[)] ac_result=no ;; - esac - case "$ac_result$ac_set" in - yes?*[)] ac_result="yes, but $ac_set is already set, so use its settings" - esac - AC_MSG_RESULT([$ac_result]) - case $ac_result in - yes[)] - for ac_shellvar in $ac_shellvars; do - eval $ac_shellvar=\$ac_test_$ac_shellvar - done ;; - esac -]) - -dnl -dnl PHP_SOCKADDR_CHECKS -dnl -AC_DEFUN([PHP_SOCKADDR_CHECKS], [ - dnl Check for struct sockaddr_storage exists - AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_sockaddr_storage, - [AC_TRY_COMPILE([#include -#include ], - [struct sockaddr_storage s; s], - [ac_cv_sockaddr_storage=yes], [ac_cv_sockaddr_storage=no]) - ]) - if test "$ac_cv_sockaddr_storage" = "yes"; then - AC_DEFINE(HAVE_SOCKADDR_STORAGE, 1, [Whether you have struct sockaddr_storage]) - fi - dnl Check if field sa_len exists in struct sockaddr - AC_CACHE_CHECK([for field sa_len in struct sockaddr],ac_cv_sockaddr_sa_len,[ - AC_TRY_COMPILE([#include -#include ], - [static struct sockaddr sa; int n = (int) sa.sa_len; return n;], - [ac_cv_sockaddr_sa_len=yes], [ac_cv_sockaddr_sa_len=no]) - ]) - if test "$ac_cv_sockaddr_sa_len" = "yes"; then - AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1, [Whether struct sockaddr has field sa_len]) - fi -]) - -dnl -dnl PHP_DECLARED_TIMEZONE -dnl -AC_DEFUN([PHP_DECLARED_TIMEZONE],[ - AC_CACHE_CHECK(for declared timezone, ac_cv_declared_timezone,[ - AC_TRY_COMPILE([ -#include -#include -#ifdef HAVE_SYS_TIME_H -#include -#endif -],[ - time_t foo = (time_t) timezone; -],[ - ac_cv_declared_timezone=yes -],[ - ac_cv_declared_timezone=no -])]) - if test "$ac_cv_declared_timezone" = "yes"; then - AC_DEFINE(HAVE_DECLARED_TIMEZONE, 1, [Whether system headers declare timezone]) - fi -]) - -dnl -dnl PHP_EBCDIC -dnl -AC_DEFUN([PHP_EBCDIC], [ - AC_CACHE_CHECK([whether system uses EBCDIC],ac_cv_ebcdic,[ - AC_TRY_RUN( [ -int main(void) { - return (unsigned char)'A' != (unsigned char)0xC1; -} -],[ - ac_cv_ebcdic=yes -],[ - ac_cv_ebcdic=no -],[ - ac_cv_ebcdic=no -])]) - if test "$ac_cv_ebcdic" = "yes"; then - AC_DEFINE(CHARSET_EBCDIC,1, [Define if system uses EBCDIC]) - fi -]) - -dnl -dnl PHP_BROKEN_GETCWD -dnl -dnl Some systems, notably Solaris, cause getcwd() or realpath to fail if a -dnl component of the path has execute but not read permissions -dnl -AC_DEFUN([PHP_BROKEN_GETCWD],[ - AC_MSG_CHECKING([for broken getcwd]) - os=`uname -sr 2>/dev/null` - case $os in - SunOS*[)] - AC_DEFINE(HAVE_BROKEN_GETCWD,1, [Define if system has broken getcwd]) - AC_MSG_RESULT([yes]);; - *[)] - AC_MSG_RESULT([no]);; - esac -]) - -dnl -dnl PHP_BROKEN_GLIBC_FOPEN_APPEND -dnl -AC_DEFUN([PHP_BROKEN_GLIBC_FOPEN_APPEND], [ - AC_MSG_CHECKING([for broken libc stdio]) - AC_CACHE_VAL(have_broken_glibc_fopen_append,[ - AC_TRY_RUN([ -#include -int main(int argc, char *argv[]) -{ - FILE *fp; - long position; - char *filename = "/tmp/phpglibccheck"; - - fp = fopen(filename, "w"); - if (fp == NULL) { - perror("fopen"); - exit(2); - } - fputs("foobar", fp); - fclose(fp); - - fp = fopen(filename, "a+"); - position = ftell(fp); - fclose(fp); - unlink(filename); - if (position == 0) - return 1; - return 0; -} -], -[have_broken_glibc_fopen_append=no], -[have_broken_glibc_fopen_append=yes ], -AC_TRY_COMPILE([ -#include -],[ -#if !__GLIBC_PREREQ(2,2) -choke me -#endif -], -[have_broken_glibc_fopen_append=yes], -[have_broken_glibc_fopen_append=no ]) -)]) - - if test "$have_broken_glibc_fopen_append" = "yes"; then - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_BROKEN_GLIBC_FOPEN_APPEND,1, [Define if your glibc borks on fopen with mode a+]) - else - AC_MSG_RESULT(no) - fi -]) - -dnl -dnl PHP_FOPENCOOKIE -dnl -AC_DEFUN([PHP_FOPENCOOKIE], [ - AC_CHECK_FUNC(fopencookie, [have_glibc_fopencookie=yes]) - - if test "$have_glibc_fopencookie" = "yes"; then -dnl this comes in two flavors: -dnl newer glibcs (since 2.1.2 ? ) -dnl have a type called cookie_io_functions_t -AC_TRY_COMPILE([ -#define _GNU_SOURCE -#include -], [cookie_io_functions_t cookie;], [have_cookie_io_functions_t=yes], []) - - if test "$have_cookie_io_functions_t" = "yes"; then - cookie_io_functions_t=cookie_io_functions_t - have_fopen_cookie=yes - -dnl even newer glibcs have a different seeker definition... -AC_TRY_RUN([ -#define _GNU_SOURCE -#include - -struct cookiedata { - __off64_t pos; -}; - -__ssize_t reader(void *cookie, char *buffer, size_t size) -{ return size; } -__ssize_t writer(void *cookie, const char *buffer, size_t size) -{ return size; } -int closer(void *cookie) -{ return 0; } -int seeker(void *cookie, __off64_t *position, int whence) -{ ((struct cookiedata*)cookie)->pos = *position; return 0; } - -cookie_io_functions_t funcs = {reader, writer, seeker, closer}; - -main() { - struct cookiedata g = { 0 }; - FILE *fp = fopencookie(&g, "r", funcs); - - if (fp && fseek(fp, 8192, SEEK_SET) == 0 && g.pos == 8192) - exit(0); - exit(1); -} - -], [ - cookie_io_functions_use_off64_t=yes -], [ - cookie_io_functions_use_off64_t=no -], [ - cookie_io_functions_use_off64_t=no -]) - - else - -dnl older glibc versions (up to 2.1.2 ?) -dnl call it _IO_cookie_io_functions_t -AC_TRY_COMPILE([ -#define _GNU_SOURCE -#include -], [ _IO_cookie_io_functions_t cookie; ], [have_IO_cookie_io_functions_t=yes], []) - if test "$have_cookie_io_functions_t" = "yes" ; then - cookie_io_functions_t=_IO_cookie_io_functions_t - have_fopen_cookie=yes - fi - fi - - if test "$have_fopen_cookie" = "yes" ; then - AC_DEFINE(HAVE_FOPENCOOKIE, 1, [ ]) - AC_DEFINE_UNQUOTED(COOKIE_IO_FUNCTIONS_T, $cookie_io_functions_t, [ ]) - if test "$cookie_io_functions_use_off64_t" = "yes" ; then - AC_DEFINE(COOKIE_SEEKER_USES_OFF64_T, 1, [ ]) - fi - fi - fi -]) - -dnl ------------------------------------------------------------------------- -dnl Library/function existance and build sanity checks -dnl ------------------------------------------------------------------------- - -dnl -dnl PHP_CHECK_LIBRARY(library, function [, action-found [, action-not-found [, extra-libs]]]) -dnl -dnl Wrapper for AC_CHECK_LIB -dnl -AC_DEFUN([PHP_CHECK_LIBRARY], [ - save_old_LDFLAGS=$LDFLAGS - ac_stuff="$5" - - save_ext_shared=$ext_shared - ext_shared=yes - PHP_EVAL_LIBLINE([$]ac_stuff, LDFLAGS) - AC_CHECK_LIB([$1],[$2],[ - LDFLAGS=$save_old_LDFLAGS - ext_shared=$save_ext_shared - $3 - ],[ - LDFLAGS=$save_old_LDFLAGS - ext_shared=$save_ext_shared - unset ac_cv_lib_$1[]_$2 - $4 - ])dnl -]) - -dnl -dnl PHP_CHECK_FRAMEWORK(framework, function [, action-found [, action-not-found ]]) -dnl -dnl El cheapo wrapper for AC_CHECK_LIB -dnl -AC_DEFUN([PHP_CHECK_FRAMEWORK], [ - save_old_LDFLAGS=$LDFLAGS - LDFLAGS="-framework $1 $LDFLAGS" - dnl supplying "c" to AC_CHECK_LIB is technically cheating, but - dnl rewriting AC_CHECK_LIB is overkill and this only affects - dnl the "checking.." output anyway. - AC_CHECK_LIB(c,[$2],[ - LDFLAGS=$save_old_LDFLAGS - $3 - ],[ - LDFLAGS=$save_old_LDFLAGS - $4 - ]) -]) - -dnl -dnl PHP_CHECK_FUNC_LIB(func, libs) -dnl -dnl This macro checks whether 'func' or '__func' exists -dnl in the specified library. -dnl Defines HAVE_func and HAVE_library if found and adds the library to LIBS. -dnl This should be called in the ACTION-IF-NOT-FOUND part of PHP_CHECK_FUNC -dnl -dnl -dnl autoconf undefines the builtin "shift" :-( -dnl If possible, we use the builtin shift anyway, otherwise we use -dnl the ubercool definition I have tested so far with FreeBSD/GNU m4 -ifdef([builtin],[builtin(define, phpshift, [builtin(shift, $@)])],[ -define([phpshift],[ifelse(index([$@],[,]),-1,,[substr([$@],incr(index([$@],[,])))])]) -]) -dnl -AC_DEFUN([PHP_CHECK_FUNC_LIB],[ - ifelse($2,,:,[ - unset ac_cv_lib_$2[]_$1 - unset ac_cv_lib_$2[]___$1 - unset found - AC_CHECK_LIB($2, $1, [found=yes], [ - AC_CHECK_LIB($2, __$1, [found=yes], [found=no]) - ]) - - if test "$found" = "yes"; then - ac_libs=$LIBS - LIBS="$LIBS -l$2" - AC_TRY_RUN([main() { return (0); }],[found=yes],[found=no],[found=no]) - LIBS=$ac_libs - fi - - if test "$found" = "yes"; then - PHP_ADD_LIBRARY($2) - PHP_DEF_HAVE($1) - PHP_DEF_HAVE(lib$2) - ac_cv_func_$1=yes - else - PHP_CHECK_FUNC_LIB($1,phpshift(phpshift($@))) - fi - ]) -]) - -dnl -dnl PHP_CHECK_FUNC(func, ...) -dnl -dnl This macro checks whether 'func' or '__func' exists -dnl in the default libraries and as a fall back in the specified library. -dnl Defines HAVE_func and HAVE_library if found and adds the library to LIBS. -dnl -AC_DEFUN([PHP_CHECK_FUNC],[ - unset ac_cv_func_$1 - unset ac_cv_func___$1 - unset found - - AC_CHECK_FUNC($1, [found=yes],[ AC_CHECK_FUNC(__$1,[found=yes],[found=no]) ]) - - case $found in - yes[)] - PHP_DEF_HAVE($1) - ac_cv_func_$1=yes - ;; - ifelse($#,1,,[ - *[)] PHP_CHECK_FUNC_LIB($@) ;; - ]) - esac -]) - -dnl -dnl PHP_TEST_BUILD(function, action-if-ok, action-if-not-ok [, extra-libs [, extra-source]]) -dnl -dnl This macro checks whether build works and given function exists. -dnl -AC_DEFUN([PHP_TEST_BUILD], [ - old_LIBS=$LIBS - LIBS="$4 $LIBS" - AC_TRY_RUN([ - $5 - char $1(); - int main() { - $1(); - return 0; - } - ], [ - LIBS=$old_LIBS - $2 - ],[ - LIBS=$old_LIBS - $3 - ],[ - LIBS=$old_LIBS - ]) -]) - -dnl ------------------------------------------------------------------------- -dnl Platform characteristics checks -dnl ------------------------------------------------------------------------- - -dnl -dnl PHP_SHLIB_SUFFIX_NAMES -dnl -dnl Determines link library suffix SHLIB_SUFFIX_NAME -dnl which can be: .so, .sl or .dylib -dnl -dnl Determines shared library suffix SHLIB_DL_SUFFIX_NAME -dnl suffix can be: .so or .sl -dnl -AC_DEFUN([PHP_SHLIB_SUFFIX_NAMES],[ - AC_REQUIRE([PHP_CANONICAL_HOST_TARGET])dnl - PHP_SUBST_OLD(SHLIB_SUFFIX_NAME) - PHP_SUBST_OLD(SHLIB_DL_SUFFIX_NAME) - SHLIB_SUFFIX_NAME=so - SHLIB_DL_SUFFIX_NAME=$SHLIB_SUFFIX_NAME - case $host_alias in - *hpux*[)] - SHLIB_SUFFIX_NAME=sl - SHLIB_DL_SUFFIX_NAME=sl - ;; - *darwin*[)] - SHLIB_SUFFIX_NAME=dylib - SHLIB_DL_SUFFIX_NAME=so - ;; - esac -]) - -dnl -dnl PHP_CHECK_64BIT([do if 32], [do if 64]) -dnl -dnl This macro is used to detect if we're at 64-bit platform or not. -dnl It could be useful for those external libs, that have different precompiled -dnl versions in different directories. -dnl -AC_DEFUN([PHP_CHECK_64BIT],[ - AC_CHECK_SIZEOF(long int, 4) - AC_MSG_CHECKING([checking if we're at 64-bit platform]) - if test "$ac_cv_sizeof_long_int" = "4" ; then - AC_MSG_RESULT([no]) - $1 - else - AC_MSG_RESULT([yes]) - $2 - fi -]) - -dnl -dnl PHP_C_BIGENDIAN -dnl -dnl Replacement macro for AC_C_BIGENDIAN -dnl -AC_DEFUN([PHP_C_BIGENDIAN], -[AC_CACHE_CHECK([whether byte ordering is bigendian], ac_cv_c_bigendian_php, - [ - ac_cv_c_bigendian_php=unknown - AC_TRY_RUN( - [ -int main(void) -{ - short one = 1; - char *cp = (char *)&one; - - if (*cp == 0) { - return(0); - } else { - return(1); - } -} - ], [ac_cv_c_bigendian_php=yes], [ac_cv_c_bigendian_php=no], [ac_cv_c_bigendian_php=unknown]) - ]) - if test $ac_cv_c_bigendian_php = yes; then - AC_DEFINE(WORDS_BIGENDIAN, [], [Define if processor uses big-endian word]) - fi -]) - -dnl ------------------------------------------------------------------------- -dnl Checks for programs: PHP_PROG_ -dnl ------------------------------------------------------------------------- - -dnl -dnl PHP_PROG_SENDMAIL -dnl -dnl Search for the sendmail binary -dnl -AC_DEFUN([PHP_PROG_SENDMAIL], [ - PHP_ALT_PATH=/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib:/usr/lib - AC_PATH_PROG(PROG_SENDMAIL, sendmail,[], $PATH:$PHP_ALT_PATH) - if test -n "$PROG_SENDMAIL"; then - AC_DEFINE(HAVE_SENDMAIL,1,[whether you have sendmail]) - fi - PHP_SUBST(PROG_SENDMAIL) -]) - -dnl -dnl PHP_PROG_AWK -dnl -dnl Some vendors force mawk before gawk; mawk is broken so we don't like that -dnl -AC_DEFUN([PHP_PROG_AWK], [ - AC_CHECK_PROGS(AWK, gawk nawk awk mawk, bork, /usr/xpg4/bin/:$PATH) - case "$AWK" in - *mawk) - AC_MSG_WARN([mawk is known to have problems on some systems. You should install GNU awk]) - ;; - *gawk) - ;; - bork) - AC_MSG_ERROR([Could not find awk; Install GNU awk]) - ;; - *) - AC_MSG_CHECKING([if $AWK is broken]) - if ! $AWK 'function foo() {}' >/dev/null 2>&1 ; then - AC_MSG_RESULT([yes]) - AC_MSG_ERROR([You should install GNU awk]) - else - AC_MSG_RESULT([no]) - fi - ;; - esac - PHP_SUBST(AWK) -]) - -dnl -dnl PHP_PROG_BISON -dnl -dnl Search for bison and check it's version -dnl -AC_DEFUN([PHP_PROG_BISON], [ - AC_PROG_YACC - LIBZEND_BISON_CHECK - PHP_SUBST(YACC) -]) - -dnl -dnl PHP_PROG_LEX -dnl -dnl Search for (f)lex and check it's version -dnl -AC_DEFUN([PHP_PROG_LEX], [ -dnl we only support certain flex versions - flex_version_list="2.5.4" - - AC_PROG_LEX - if test -n "$LEX"; then -dnl AC_DECL_YYTEXT is obsolete since autoconf 2.50 and merged into AC_PROG_LEX -dnl this is what causes that annoying "PHP_PROG_LEX is expanded from" warning with autoconf 2.50+ -dnl it should be removed once we drop support of autoconf 2.13 (if ever) - AC_DECL_YYTEXT - : - fi - dnl ## Make flex scanners use const if they can, even if __STDC__ is not - dnl ## true, for compilers like Sun's that only set __STDC__ true in - dnl ## "limit-to-ANSI-standard" mode, not in "ANSI-compatible" mode - AC_C_CONST - if test "$ac_cv_c_const" = "yes" ; then - LEX_CFLAGS="-DYY_USE_CONST" - fi - - if test "$LEX"; then - AC_CACHE_CHECK([for flex version], php_cv_flex_version, [ - flex_version=`$LEX -V -v --version 2>/dev/null | $SED -e 's/^.* //'` - php_cv_flex_version=invalid - for flex_check_version in $flex_version_list; do - if test "$flex_version" = "$flex_check_version"; then - php_cv_flex_version="$flex_check_version (ok)" - fi - done - ]) - else - flex_version=none - fi - - case $php_cv_flex_version in - ""|invalid[)] - flex_msg="flex versions supported for regeneration of the Zend/PHP parsers: $flex_version_list (found: $flex_version)." - AC_MSG_WARN([$flex_msg]) - LEX="echo \"error: $flex_msg\" 1>&2 ; exit 1;" - ;; - esac - PHP_SUBST(LEX) -]) - -dnl -dnl PHP_PROG_RE2C -dnl -dnl Search for the re2c binary and check the version -dnl -AC_DEFUN([PHP_PROG_RE2C],[ - AC_CHECK_PROG(RE2C, re2c, re2c) - if test -n "$RE2C"; then - AC_CACHE_CHECK([for re2c version], php_cv_re2c_version, [ - re2c_vernum=`echo "" | re2c --vernum 2>/dev/null` - if test -z "$re2c_vernum" || test "$re2c_vernum" -lt "911"; then - php_cv_re2c_version=invalid - else - php_cv_re2c_version="`echo "" | re2c --version | cut -d ' ' -f 2 2>/dev/null` (ok)" - fi - ]) - fi - case $php_cv_re2c_version in - ""|invalid[)] - AC_MSG_WARN([You will need re2c 0.9.11 or later if you want to regenerate PHP parsers.]) - RE2C="exit 0;" - ;; - esac - PHP_SUBST(RE2C) -]) - -dnl ------------------------------------------------------------------------- -dnl Common setup macros: PHP_SETUP_ -dnl ------------------------------------------------------------------------- - -dnl -dnl PHP_SETUP_ICU([shared-add]) -dnl -dnl Common setup macro for ICU -dnl -AC_DEFUN([PHP_SETUP_ICU],[ - unset PHP_ICU_DIR - - AC_MSG_CHECKING([for location of ICU headers and libraries]) - - AC_ARG_WITH(icu-dir, - [ --with-icu-dir=DIR Specify where ICU libraries and headers can be found], - [ - if test "x$withval" != "xyes"; then - PHP_ICU_DIR=$withval - else - PHP_ICU_DIR=DEFAULT - fi - ], [ - PHP_ICU_DIR=DEFAULT - ]) - - if test "$PHP_ICU_DIR" = "DEFAULT"; then - ICU_CONFIG=icu-config - for i in /usr/local/bin /usr/bin; do - if test -x "$i/icu-config"; then - ICU_CONFIG=$i/icu-config - break; - fi - done - else - ICU_CONFIG="$PHP_ICU_DIR/bin/icu-config" - fi - - dnl Trust icu-config to know better what the install prefix is.. - icu_install_prefix=`$ICU_CONFIG --prefix 2> /dev/null` - if test "$?" != "0" || test -z "$icu_install_prefix"; then - AC_MSG_RESULT([not found]) - AC_MSG_ERROR([Unable to detect ICU prefix or $ICU_CONFIG failed. Please verify ICU install prefix and make sure icu-config works.]) - else - AC_MSG_RESULT([found in $icu_install_prefix]) - - dnl Check ICU version - AC_MSG_CHECKING([for ICU 3.4 or greater]) - icu_version_full=`$ICU_CONFIG --version` - ac_IFS=$IFS - IFS="." - set $icu_version_full - IFS=$ac_IFS - icu_version=`expr [$]1 \* 1000 + [$]2` - AC_MSG_RESULT([found $icu_version_full]) - - if test "$icu_version" -lt "3004"; then - AC_MSG_ERROR([ICU version 3.4 or later is required]) - fi - - ICU_INCS=`$ICU_CONFIG --cppflags-searchpath` - ICU_LIBS=`$ICU_CONFIG --ldflags --ldflags-icuio` - PHP_EVAL_INCLINE($ICU_INCS) - PHP_EVAL_LIBLINE($ICU_LIBS, $1) - fi -]) - - -dnl -dnl PHP_SETUP_KERBEROS(shared-add [, action-found [, action-not-found]]) -dnl -dnl Common setup macro for kerberos -dnl -AC_DEFUN([PHP_SETUP_KERBEROS],[ - found_kerberos=no - unset KERBEROS_CFLAGS - unset KERBEROS_LIBS - - dnl First try to find krb5-config - if test -z "$KRB5_CONFIG"; then - AC_PATH_PROG(KRB5_CONFIG, krb5-config, no, [$PATH:/usr/kerberos/bin:/usr/local/bin]) - fi - - dnl If krb5-config is found try using it - if test "$PHP_KERBEROS" = "yes" && test -x "$KRB5_CONFIG"; then - KERBEROS_LIBS=`$KRB5_CONFIG --libs gssapi` - KERBEROS_CFLAGS=`$KRB5_CONFIG --cflags gssapi` - - if test -n "$KERBEROS_LIBS" && test -n "$KERBEROS_CFLAGS"; then - found_kerberos=yes - PHP_EVAL_LIBLINE($KERBEROS_LIBS, $1) - PHP_EVAL_INCLINE($KERBEROS_CFLAGS) - fi - fi - - dnl If still not found use old skool method - if test "$found_kerberos" = "no"; then - - if test "$PHP_KERBEROS" = "yes"; then - PHP_KERBEROS="/usr/kerberos /usr/local /usr" - fi - - for i in $PHP_KERBEROS; do - if test -f $i/$PHP_LIBDIR/libkrb5.a || test -f $i/$PHP_LIBDIR/libkrb5.$SHLIB_SUFFIX_NAME; then - PHP_KERBEROS_DIR=$i - break - fi - done - - if test "$PHP_KERBEROS_DIR"; then - found_kerberos=yes - PHP_ADD_LIBPATH($PHP_KERBEROS_DIR/$PHP_LIBDIR, $1) - PHP_ADD_LIBRARY(gssapi_krb5, 1, $1) - PHP_ADD_LIBRARY(krb5, 1, $1) - PHP_ADD_LIBRARY(k5crypto, 1, $1) - PHP_ADD_LIBRARY(com_err, 1, $1) - PHP_ADD_INCLUDE($PHP_KERBEROS_DIR/include) - fi - fi - - if test "$found_kerberos" = "yes"; then -ifelse([$2],[],:,[$2]) -ifelse([$3],[],,[else $3]) - fi -]) - -dnl -dnl PHP_SETUP_OPENSSL(shared-add [, action-found [, action-not-found]]) -dnl -dnl Common setup macro for openssl -dnl -AC_DEFUN([PHP_SETUP_OPENSSL],[ - found_openssl=no - unset OPENSSL_INCDIR - unset OPENSSL_LIBDIR - - dnl Empty variable means 'no' - test -z "$PHP_OPENSSL" && PHP_OPENSSL=no - test -z "$PHP_IMAP_SSL" && PHP_IMAP_SSL=no - - dnl Fallbacks for different configure options - if test "$PHP_OPENSSL" != "no"; then - PHP_OPENSSL_DIR=$PHP_OPENSSL - elif test "$PHP_IMAP_SSL" != "no"; then - PHP_OPENSSL_DIR=$PHP_IMAP_SSL - fi - - dnl First try to find pkg-config - if test -z "$PKG_CONFIG"; then - AC_PATH_PROG(PKG_CONFIG, pkg-config, no) - fi - - dnl If pkg-config is found try using it - if test "$PHP_OPENSSL_DIR" = "yes" && test -x "$PKG_CONFIG" && $PKG_CONFIG --exists openssl; then - if $PKG_CONFIG --atleast-version=0.9.6 openssl; then - found_openssl=yes - OPENSSL_LIBS=`$PKG_CONFIG --libs openssl` - OPENSSL_INCS=`$PKG_CONFIG --cflags-only-I openssl` - OPENSSL_INCDIR=`$PKG_CONFIG --variable=includedir openssl` - else - AC_MSG_ERROR([OpenSSL version 0.9.6 or greater required.]) - fi - - if test -n "$OPENSSL_LIBS" && test -n "$OPENSSL_INCS"; then - PHP_EVAL_LIBLINE($OPENSSL_LIBS, $1) - PHP_EVAL_INCLINE($OPENSSL_INCS) - fi - fi - - dnl If pkg-config fails for some reason, revert to the old method - if test "$found_openssl" = "no"; then - - if test "$PHP_OPENSSL_DIR" = "yes"; then - PHP_OPENSSL_DIR="/usr/local/ssl /usr/local /usr /usr/local/openssl" - fi - - for i in $PHP_OPENSSL_DIR; do - if test -r $i/include/openssl/evp.h; then - OPENSSL_INCDIR=$i/include - fi - if test -r $i/$PHP_LIBDIR/libssl.a -o -r $i/$PHP_LIBDIR/libssl.$SHLIB_SUFFIX_NAME; then - OPENSSL_LIBDIR=$i/$PHP_LIBDIR - fi - test -n "$OPENSSL_INCDIR" && test -n "$OPENSSL_LIBDIR" && break - done - - if test -z "$OPENSSL_INCDIR"; then - AC_MSG_ERROR([Cannot find OpenSSL's ]) - fi - - if test -z "$OPENSSL_LIBDIR"; then - AC_MSG_ERROR([Cannot find OpenSSL's libraries]) - fi - - old_CPPFLAGS=$CPPFLAGS - CPPFLAGS=-I$OPENSSL_INCDIR - AC_MSG_CHECKING([for OpenSSL version]) - AC_EGREP_CPP(yes,[ -#include -#if OPENSSL_VERSION_NUMBER >= 0x0090600fL - yes -#endif - ],[ - AC_MSG_RESULT([>= 0.9.6]) - ],[ - AC_MSG_ERROR([OpenSSL version 0.9.6 or greater required.]) - ]) - CPPFLAGS=$old_CPPFLAGS - - PHP_ADD_INCLUDE($OPENSSL_INCDIR) - - PHP_CHECK_LIBRARY(crypto, CRYPTO_free, [ - PHP_ADD_LIBRARY(crypto,,$1) - ],[ - AC_MSG_ERROR([libcrypto not found!]) - ],[ - -L$OPENSSL_LIBDIR - ]) - - old_LIBS=$LIBS - LIBS="$LIBS -lcrypto" - PHP_CHECK_LIBRARY(ssl, SSL_CTX_set_ssl_version, [ - found_openssl=yes - ],[ - AC_MSG_ERROR([libssl not found!]) - ],[ - -L$OPENSSL_LIBDIR - ]) - LIBS=$old_LIBS - PHP_ADD_LIBRARY(ssl,,$1) - - PHP_ADD_LIBPATH($OPENSSL_LIBDIR, $1) - fi - - if test "$found_openssl" = "yes"; then - dnl For apache 1.3.x static build - OPENSSL_INCDIR_OPT=-I$OPENSSL_INCDIR - AC_SUBST(OPENSSL_INCDIR_OPT) - -ifelse([$2],[],:,[$2]) -ifelse([$3],[],,[else $3]) - fi -]) - -dnl -dnl PHP_SETUP_ICONV(shared-add [, action-found [, action-not-found]]) -dnl -dnl Common setup macro for iconv -dnl -AC_DEFUN([PHP_SETUP_ICONV], [ - found_iconv=no - unset ICONV_DIR - - # Create the directories for a VPATH build: - $php_shtool mkdir -p ext/iconv - - echo > ext/iconv/php_have_bsd_iconv.h - echo > ext/iconv/php_have_glibc_iconv.h - echo > ext/iconv/php_have_libiconv.h - echo > ext/iconv/php_have_iconv.h - echo > ext/iconv/php_php_iconv_impl.h - echo > ext/iconv/php_php_iconv_h_path.h - echo > ext/iconv/php_iconv_supports_errno.h - - dnl - dnl Check libc first if no path is provided in --with-iconv - dnl - if test "$PHP_ICONV" = "yes"; then - AC_CHECK_FUNC(iconv, [ - found_iconv=yes - ],[ - AC_CHECK_FUNC(libiconv,[ - PHP_DEFINE(HAVE_LIBICONV,1,[ext/iconv]) - AC_DEFINE(HAVE_LIBICONV, 1, [ ]) - found_iconv=yes - ]) - ]) - fi - - dnl - dnl Check external libs for iconv funcs - dnl - if test "$found_iconv" = "no"; then - - for i in $PHP_ICONV /usr/local /usr; do - if test -r $i/include/giconv.h; then - AC_DEFINE(HAVE_GICONV_H, 1, [ ]) - ICONV_DIR=$i - iconv_lib_name=giconv - break - elif test -r $i/include/iconv.h; then - ICONV_DIR=$i - iconv_lib_name=iconv - break - fi - done - - if test -z "$ICONV_DIR"; then - AC_MSG_ERROR([Please specify the install prefix of iconv with --with-iconv=]) - fi - - if test -f $ICONV_DIR/$PHP_LIBDIR/lib$iconv_lib_name.a || - test -f $ICONV_DIR/$PHP_LIBDIR/lib$iconv_lib_name.$SHLIB_SUFFIX_NAME - then - PHP_CHECK_LIBRARY($iconv_lib_name, libiconv, [ - found_iconv=yes - PHP_DEFINE(HAVE_LIBICONV,1,[ext/iconv]) - AC_DEFINE(HAVE_LIBICONV,1,[ ]) - ], [ - PHP_CHECK_LIBRARY($iconv_lib_name, iconv, [ - found_iconv=yes - ], [], [ - -L$ICONV_DIR/$PHP_LIBDIR - ]) - ], [ - -L$ICONV_DIR/$PHP_LIBDIR - ]) - fi - fi - - if test "$found_iconv" = "yes"; then - PHP_DEFINE(HAVE_ICONV,1,[ext/iconv]) - AC_DEFINE(HAVE_ICONV,1,[ ]) - if test -n "$ICONV_DIR"; then - PHP_ADD_LIBRARY_WITH_PATH($iconv_lib_name, $ICONV_DIR/$PHP_LIBDIR, $1) - PHP_ADD_INCLUDE($ICONV_DIR/include) - fi - $2 -ifelse([$3],[],,[else $3]) - fi -]) - -dnl -dnl PHP_SETUP_LIBXML(shared-add [, action-found [, action-not-found]]) -dnl -dnl Common setup macro for libxml -dnl -AC_DEFUN([PHP_SETUP_LIBXML], [ -AC_CACHE_CHECK([for xml2-config path], ac_cv_php_xml2_config_path, -[ - for i in $PHP_LIBXML_DIR /usr/local /usr; do - if test -x "$i/bin/xml2-config"; then - ac_cv_php_xml2_config_path="$i/bin/xml2-config" - break - fi - done -]) - - if test -x "$ac_cv_php_xml2_config_path"; then - XML2_CONFIG="$ac_cv_php_xml2_config_path" - libxml_full_version=`$XML2_CONFIG --version` - ac_IFS=$IFS - IFS="." - set $libxml_full_version - IFS=$ac_IFS - LIBXML_VERSION=`expr [$]1 \* 1000000 + [$]2 \* 1000 + [$]3` - if test "$LIBXML_VERSION" -ge "2006011"; then - LIBXML_LIBS=`$XML2_CONFIG --libs` - LIBXML_INCS=`$XML2_CONFIG --cflags` - PHP_EVAL_LIBLINE($LIBXML_LIBS, $1) - PHP_EVAL_INCLINE($LIBXML_INCS) - - dnl Check that build works with given libs - AC_CACHE_CHECK(whether libxml build works, php_cv_libxml_build_works, [ - PHP_TEST_BUILD(xmlInitParser, - [ - php_cv_libxml_build_works=yes - ], [ - AC_MSG_RESULT(no) - AC_MSG_ERROR([build test failed. Please check the config.log for details.]) - ], [ - [$]$1 - ]) - ]) - if test "$php_cv_libxml_build_works" = "yes"; then - AC_DEFINE(HAVE_LIBXML, 1, [ ]) - fi - $2 - else - AC_MSG_ERROR([libxml2 version 2.6.11 or greater required.]) - fi -ifelse([$3],[],,[else $3]) - fi -]) - -dnl ------------------------------------------------------------------------- -dnl Misc. macros -dnl ------------------------------------------------------------------------- - -dnl -dnl PHP_INSTALL_HEADERS(path [, file ...]) -dnl -dnl PHP header files to be installed -dnl -AC_DEFUN([PHP_INSTALL_HEADERS],[ - ifelse([$2],[],[ - for header_file in $1; do - PHP_RUN_ONCE(INSTALLHEADERS, $header_file, [ - INSTALL_HEADERS="$INSTALL_HEADERS $header_file" - ]) - done - ], [ - header_path=$1 - for header_file in $2; do - hp_hf="$header_path/$header_file" - PHP_RUN_ONCE(INSTALLHEADERS, $hp_hf, [ - INSTALL_HEADERS="$INSTALL_HEADERS $hp_hf" - ]) - done - ]) -]) - -dnl -dnl PHP_AP_EXTRACT_VERSION(/path/httpd) -dnl -dnl This macro is used to get a comparable -dnl version for apache1/2. -dnl -AC_DEFUN([PHP_AP_EXTRACT_VERSION],[ - ac_output=`$1 -v 2>&1 | grep version` - ac_IFS=$IFS -IFS="- /. -" - set $ac_output - IFS=$ac_IFS - - APACHE_VERSION=`expr [$]4 \* 1000000 + [$]5 \* 1000 + [$]6` -]) - -dnl -dnl PHP_DEBUG_MACRO(filename) -dnl -AC_DEFUN([PHP_DEBUG_MACRO],[ - DEBUG_LOG=$1 - cat >$1 <conftest.$ac_ext <>$1 2>&1 - rm -fr conftest* -]) - -dnl -dnl PHP_CONFIG_NICE(filename) -dnl -dnl Generates the config.nice file -dnl -AC_DEFUN([PHP_CONFIG_NICE],[ - AC_REQUIRE([AC_PROG_EGREP]) - AC_REQUIRE([LT_AC_PROG_SED]) - PHP_SUBST(EGREP) - PHP_SUBST(SED) - test -f $1 && mv $1 $1.old - rm -f $1.old - cat >$1<> $1 - fi - done - - echo "'[$]0' \\" >> $1 - if test `expr -- [$]0 : "'.*"` = 0; then - CONFIGURE_COMMAND="$CONFIGURE_COMMAND '[$]0'" - else - CONFIGURE_COMMAND="$CONFIGURE_COMMAND [$]0" - fi - for arg in $ac_configure_args; do - if test `expr -- $arg : "'.*"` = 0; then - if test `expr -- $arg : "--.*"` = 0; then - break; - fi - echo "'[$]arg' \\" >> $1 - CONFIGURE_COMMAND="$CONFIGURE_COMMAND '[$]arg'" - else - if test `expr -- $arg : "'--.*"` = 0; then - break; - fi - echo "[$]arg \\" >> $1 - CONFIGURE_COMMAND="$CONFIGURE_COMMAND [$]arg" - fi - done - echo '"[$]@"' >> $1 - chmod +x $1 - PHP_SUBST_OLD(CONFIGURE_COMMAND) -]) - -dnl -dnl PHP_REGEX -dnl -AC_DEFUN([PHP_REGEX],[ - if test "$REGEX_TYPE" = "php"; then - AC_DEFINE(HAVE_REGEX_T_RE_MAGIC, 1, [ ]) - AC_DEFINE(HSREGEX,1,[ ]) - AC_DEFINE(REGEX,1,[ ]) - PHP_ADD_SOURCES(regex, regcomp.c regexec.c regerror.c regfree.c) - elif test "$REGEX_TYPE" = "system"; then - AC_DEFINE(REGEX,0,[ ]) - dnl Check if field re_magic exists in struct regex_t - AC_CACHE_CHECK([whether field re_magic exists in struct regex_t], ac_cv_regex_t_re_magic, [ - AC_TRY_COMPILE([#include -#include ], [regex_t rt; rt.re_magic;], - [ac_cv_regex_t_re_magic=yes], [ac_cv_regex_t_re_magic=no]) - ]) - if test "$ac_cv_regex_t_re_magic" = "yes"; then - AC_DEFINE([HAVE_REGEX_T_RE_MAGIC], [ ], 1) - fi - fi - AC_MSG_CHECKING([which regex library to use]) - AC_MSG_RESULT([$REGEX_TYPE]) -]) - -dnl -dnl PHP_CHECK_PDO_INCLUDES([found [, not-found]]) -dnl -AC_DEFUN([PHP_CHECK_PDO_INCLUDES],[ - AC_CACHE_CHECK([for PDO includes], pdo_inc_path, [ - AC_MSG_CHECKING([for PDO includes]) - if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then - pdo_inc_path=$abs_srcdir/ext - elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then - pdo_inc_path=$abs_srcdir/ext - elif test -f $prefix/include/php/ext/pdo/php_pdo_driver.h; then - pdo_inc_path=$prefix/include/php/ext - fi - ]) - if test -n "$pdo_inc_path"; then -ifelse([$1],[],:,[$1]) - else -ifelse([$2],[],[AC_MSG_ERROR([Cannot find php_pdo_driver.h.])],[$2]) - fi -]) - -dnl -dnl PHP_DETECT_ICC -dnl -AC_DEFUN([PHP_DETECT_ICC], -[ - ICC="no" - AC_MSG_CHECKING([for icc]) - AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER], - ICC="no" - AC_MSG_RESULT([no]), - ICC="yes" - AC_MSG_RESULT([yes]) - ) -]) - -dnl -dnl PHP_CRYPT_R_STYLE -dnl detect the style of crypt_r() is any is available -dnl see APR_CHECK_CRYPT_R_STYLE() for original version -dnl -AC_DEFUN([PHP_CRYPT_R_STYLE], -[ - AC_CACHE_CHECK([which data struct is used by crypt_r], php_cv_crypt_r_style,[ - php_cv_crypt_r_style=none - AC_TRY_COMPILE([ -#define _REENTRANT 1 -#include -],[ -CRYPTD buffer; -crypt_r("passwd", "hash", &buffer); -], -php_cv_crypt_r_style=cryptd) - - if test "$php_cv_crypt_r_style" = "none"; then - AC_TRY_COMPILE([ -#define _REENTRANT 1 -#include -],[ -struct crypt_data buffer; -crypt_r("passwd", "hash", &buffer); -], -php_cv_crypt_r_style=struct_crypt_data) - fi - - if test "$php_cv_crypt_r_style" = "none"; then - AC_TRY_COMPILE([ -#define _REENTRANT 1 -#define _GNU_SOURCE -#include -],[ -struct crypt_data buffer; -crypt_r("passwd", "hash", &buffer); -], -php_cv_crypt_r_style=struct_crypt_data_gnu_source) - fi - ]) - - if test "$php_cv_crypt_r_style" = "cryptd"; then - AC_DEFINE(CRYPT_R_CRYPTD, 1, [Define if crypt_r has uses CRYPTD]) - fi - if test "$php_cv_crypt_r_style" = "struct_crypt_data" -o "$php_cv_crypt_r_style" = "struct_crypt_data_gnu_source"; then - AC_DEFINE(CRYPT_R_STRUCT_CRYPT_DATA, 1, [Define if crypt_r uses struct crypt_data]) - fi - if test "$php_cv_crypt_r_style" = "struct_crypt_data_gnu_source"; then - AC_DEFINE(CRYPT_R_GNU_SOURCE, 1, [Define if struct crypt_data requires _GNU_SOURCE]) - fi - if test "$php_cv_crypt_r_style" = "none"; then - AC_MSG_ERROR([Unable to detect data struct used by crypt_r]) - fi -]) - -AC_DEFUN([PHP_TEST_WRITE_STDOUT],[ - AC_CACHE_CHECK(whether writing to stdout works,ac_cv_write_stdout,[ - AC_TRY_RUN([ -#ifdef HAVE_UNISTD_H -#include -#endif - -#define TEXT "This is the test message -- " - -main() -{ - int n; - - n = write(1, TEXT, sizeof(TEXT)-1); - return (!(n == sizeof(TEXT)-1)); -} - ],[ - ac_cv_write_stdout=yes - ],[ - ac_cv_write_stdout=no - ],[ - ac_cv_write_stdout=no - ]) - ]) - if test "$ac_cv_write_stdout" = "yes"; then - AC_DEFINE(PHP_WRITE_STDOUT, 1, [whether write(2) works]) - fi -]) - diff --git a/build/build.mk b/build/build.mk deleted file mode 100644 index 58c82422320a0..0000000000000 --- a/build/build.mk +++ /dev/null @@ -1,73 +0,0 @@ -# +----------------------------------------------------------------------+ -# | PHP Version 5 | -# +----------------------------------------------------------------------+ -# | Copyright (c) 1997-2006 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 | -# | available through the world-wide-web at the following url: | -# | http://www.php.net/license/3_01.txt | -# | If you did not receive a copy of the PHP license and are unable to | -# | obtain it through the world-wide-web, please send a note to | -# | license@php.net so we can mail you a copy immediately. | -# +----------------------------------------------------------------------+ -# | Author: Sascha Schumann | -# +----------------------------------------------------------------------+ -# -# $Id$ -# -# -# Makefile to generate build tools -# - -ZENDDIR = Zend - -SUBDIRS = $(ZENDDIR) TSRM - -STAMP = buildmk.stamp - -ALWAYS = generated_lists - - -all: $(STAMP) $(ALWAYS) - @$(MAKE) -s -f build/build2.mk - -generated_lists: - @echo makefile_am_files = $(ZENDDIR)/Makefile.am \ - TSRM/Makefile.am > $@ - @echo config_h_files = $(ZENDDIR)/acconfig.h TSRM/acconfig.h >> $@ - @echo config_m4_files = $(ZENDDIR)/Zend.m4 TSRM/tsrm.m4 TSRM/threads.m4 \ - $(ZENDDIR)/acinclude.m4 ext/*/config*.m4 sapi/*/config.m4 >> $@ - -$(STAMP): build/buildcheck.sh - @build/buildcheck.sh $(STAMP) - -snapshot: - distname='$(DISTNAME)'; \ - if test -z "$$distname"; then \ - distname='php5-snapshot'; \ - fi; \ - myname=`basename \`pwd\`` ; \ - cd .. && cp -rp $$myname $$distname; \ - cd $$distname; \ - rm -f $(SUBDIRS) 2>/dev/null || true; \ - for i in $(SUBDIRS); do \ - test -d $$i || (test -d ../$$i && cp -rp ../$$i $$i); \ - done; \ - find . -type l -exec rm {} \; ; \ - $(MAKE) -f build/build.mk; \ - cd ..; \ - tar cf $$distname.tar $$distname; \ - rm -rf $$distname $$distname.tar.*; \ - bzip2 -9 $$distname.tar; \ - md5sum $$distname.tar.bz2; \ - sync; sleep 2; \ - md5sum $$distname.tar.bz2; \ - bzip2 -t $$distname.tar.bz2 - -cvsclean-work: - @for i in `find . -name .cvsignore`; do \ - (cd `dirname $$i` 2>/dev/null && rm -rf `cat .cvsignore | grep -v config.nice | sed 's/[\r\n]/ /g'` *.o *.a .libs || true); \ - done - -.PHONY: $(ALWAYS) snapshot diff --git a/build/build2.mk b/build/build2.mk deleted file mode 100644 index 341ff4279e36e..0000000000000 --- a/build/build2.mk +++ /dev/null @@ -1,60 +0,0 @@ -# +----------------------------------------------------------------------+ -# | PHP Version 5 | -# +----------------------------------------------------------------------+ -# | Copyright (c) 1997-2006 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 | -# | available through the world-wide-web at the following url: | -# | http://www.php.net/license/3_01.txt | -# | If you did not receive a copy of the PHP license and are unable to | -# | obtain it through the world-wide-web, please send a note to | -# | license@php.net so we can mail you a copy immediately. | -# +----------------------------------------------------------------------+ -# | Author: Sascha Schumann | -# +----------------------------------------------------------------------+ -# -# $Id$ -# - -include generated_lists - -TOUCH_FILES = mkinstalldirs install-sh missing - -LT_TARGETS = ltmain.sh config.guess config.sub - -config_h_in = main/php_config.h.in - -acconfig_h_SOURCES = acconfig.h.in $(config_h_files) - -targets = $(TOUCH_FILES) configure $(config_h_in) - -PHP_AUTOCONF ?= 'autoconf' -PHP_AUTOHEADER ?= 'autoheader' - -SUPPRESS_WARNINGS ?= 2>&1 | (egrep -v '(AC_TRY_RUN called without default to allow cross compiling|AC_PROG_CXXCPP was called before AC_PROG_CXX|defined in acinclude.m4 but never used|AC_PROG_LEX invoked multiple times|AC_DECL_YYTEXT is expanded from...|the top level)'||true) - -all: $(targets) - -acconfig.h: $(acconfig_h_SOURCES) - @echo rebuilding $@ - cat $(acconfig_h_SOURCES) > $@ - -$(config_h_in): configure acconfig.h -# explicitly remove target since autoheader does not seem to work -# correctly otherwise (timestamps are not updated) - @echo rebuilding $@ - @rm -f $@ - $(PHP_AUTOHEADER) $(SUPPRESS_WARNINGS) - -$(TOUCH_FILES): - touch $(TOUCH_FILES) - -aclocal.m4: configure.in acinclude.m4 - @echo rebuilding $@ - cat acinclude.m4 ./build/libtool.m4 > $@ - -configure: aclocal.m4 configure.in $(config_m4_files) - @echo rebuilding $@ - $(PHP_AUTOCONF) $(SUPPRESS_WARNINGS) - diff --git a/build/buildcheck.sh b/build/buildcheck.sh deleted file mode 100755 index 3dcee32ed4628..0000000000000 --- a/build/buildcheck.sh +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -# +----------------------------------------------------------------------+ -# | PHP Version 5 | -# +----------------------------------------------------------------------+ -# | Copyright (c) 1997-2006 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 | -# | available through the world-wide-web at the following url: | -# | http://www.php.net/license/3_01.txt | -# | If you did not receive a copy of the PHP license and are unable to | -# | obtain it through the world-wide-web, please send a note to | -# | license@php.net so we can mail you a copy immediately. | -# +----------------------------------------------------------------------+ -# | Authors: Stig Bakken | -# | Sascha Schumann | -# +----------------------------------------------------------------------+ -# -# $Id: buildcheck.sh,v 1.39 2006-01-01 13:09:48 sniper Exp $ -# - -echo "buildconf: checking installation..." - -stamp=$1 - -# Allow the autoconf executable to be overridden by $PHP_AUTOCONF. -if test -z "$PHP_AUTOCONF"; then - PHP_AUTOCONF='autoconf' -fi - -# autoconf 2.13 or newer -ac_version=`$PHP_AUTOCONF --version 2>/dev/null|head -n 1|sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'` -if test -z "$ac_version"; then -echo "buildconf: autoconf not found." -echo " You need autoconf version 2.13 or newer installed" -echo " to build PHP from CVS." -exit 1 -fi -IFS=.; set $ac_version; IFS=' ' -if test "$1" = "2" -a "$2" -lt "13" || test "$1" -lt "2"; then -echo "buildconf: autoconf version $ac_version found." -echo " You need autoconf version 2.13 or newer installed" -echo " to build PHP from CVS." -exit 1 -else -echo "buildconf: autoconf version $ac_version (ok)" -fi - -if test "$1" = "2" && test "$2" -ge "50"; then - echo "buildconf: Your version of autoconf likely contains buggy cache code." - echo " Running cvsclean for you." - echo " To avoid this, install autoconf-2.13." - ./cvsclean - stamp= -fi - -test -n "$stamp" && touch $stamp - -exit 0 diff --git a/build/config-stubs b/build/config-stubs deleted file mode 100755 index 28208085a7513..0000000000000 --- a/build/config-stubs +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -# -# $Id$ - -dir=$1; shift -for stubfile in $dir/*/config0.m4 $dir/*/config.m4 $dir/*/config9.m4; do - echo "sinclude($stubfile)" -done diff --git a/build/genif.sh b/build/genif.sh deleted file mode 100644 index 61d1f00454889..0000000000000 --- a/build/genif.sh +++ /dev/null @@ -1,41 +0,0 @@ -#! /bin/sh - -# $Id: genif.sh,v 1.6 2005-06-21 13:47:38 sniper Exp $ -# replacement for genif.pl - -infile=$1 -shift -srcdir=$1 -shift -extra_module_ptrs=$1 -shift -awk=$1 -shift - -if test -z "$infile" || test -z "$srcdir"; then - echo "please supply infile and srcdir" - exit 1 -fi - -header_list= -olddir=`pwd` -cd $srcdir - -module_ptrs="$extra_module_ptrs`echo $@ | $awk -f ./build/order_by_dep.awk`" - -for ext in ${1+"$@"} ; do - header_list="$header_list ext/$ext/*.h" -done - -includes=`$awk -f ./build/print_include.awk $header_list` - -cd $olddir - -cat $infile | \ - sed \ - -e "s'@EXT_INCLUDE_CODE@'$includes'" \ - -e "s'@EXT_MODULE_PTRS@'$module_ptrs'" \ - -e 's/@NEWLINE@/\ -/g' - - diff --git a/build/libtool.m4 b/build/libtool.m4 deleted file mode 100644 index a4ccb3c7bc6c5..0000000000000 --- a/build/libtool.m4 +++ /dev/null @@ -1,6246 +0,0 @@ -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- -## Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 -## Free Software Foundation, Inc. -## Originally by Gordon Matzigkeit , 1996 -## -## This file is free software; the Free Software Foundation gives -## unlimited permission to copy and/or distribute it, with or without -## modifications, as long as this notice is preserved. - -# serial 47 AC_PROG_LIBTOOL - -ifdef([AC_ACVERSION],[ -# autoconf 2.13 compatibility -# Set PATH_SEPARATOR variable -# --------------------------------- -# Find the correct PATH separator. Usually this is :', but -# DJGPP uses ;' like DOS. -if test "X${PATH_SEPARATOR+set}" != Xset; then - UNAME=${UNAME-`uname 2>/dev/null`} - case X$UNAME in - *-DOS) lt_cv_sys_path_separator=';' ;; - *) lt_cv_sys_path_separator=':' ;; - esac - PATH_SEPARATOR=$lt_cv_sys_path_separator -fi -]) - -# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) -# ----------------------------------------------------------- -# If this macro is not defined by Autoconf, define it here. -ifdef([AC_PROVIDE_IFELSE], - [], - [define([AC_PROVIDE_IFELSE], - [ifdef([AC_PROVIDE_$1], - [$2], [$3])])]) - -# AC_PROG_LIBTOOL -# --------------- -AC_DEFUN([AC_PROG_LIBTOOL], -[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl -dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX -dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. - AC_PROVIDE_IFELSE([AC_PROG_CXX], - [AC_LIBTOOL_CXX], - [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX - ])]) - -dnl dnl And a similar setup for Fortran 77 support -dnl AC_PROVIDE_IFELSE([AC_PROG_F77], -dnl [AC_LIBTOOL_F77], -dnl [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 -dnl ])]) - -dnl dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. -dnl dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run -dnl dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. -dnl AC_PROVIDE_IFELSE([AC_PROG_GCJ], -dnl [AC_LIBTOOL_GCJ], -dnl [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], -dnl [AC_LIBTOOL_GCJ], -dnl [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], -dnl [AC_LIBTOOL_GCJ], -dnl [ifdef([AC_PROG_GCJ], -dnl [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) -dnl ifdef([A][M_PROG_GCJ], -dnl [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) -dnl ifdef([LT_AC_PROG_GCJ], -dnl [define([LT_AC_PROG_GCJ], -dnl defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) -dnl ]) -])# AC_PROG_LIBTOOL - - -# _AC_PROG_LIBTOOL -# ---------------- -AC_DEFUN([_AC_PROG_LIBTOOL], -[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl -AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl -dnl AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl -dnl AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -# Prevent multiple expansion -define([AC_PROG_LIBTOOL], []) -])# _AC_PROG_LIBTOOL - - -# AC_LIBTOOL_SETUP -# ---------------- -AC_DEFUN([AC_LIBTOOL_SETUP], -[AC_PREREQ(2.13)dnl -AC_REQUIRE([AC_ENABLE_SHARED])dnl -AC_REQUIRE([AC_ENABLE_STATIC])dnl -AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_LD])dnl -AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl -AC_REQUIRE([AC_PROG_NM])dnl - -AC_REQUIRE([AC_PROG_LN_S])dnl -AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl -# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! -AC_REQUIRE([AC_OBJEXT])dnl -AC_REQUIRE([AC_EXEEXT])dnl -dnl - -AC_LIBTOOL_SYS_MAX_CMD_LEN -AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE -AC_LIBTOOL_OBJDIR - -AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl -_LT_AC_PROG_ECHO_BACKSLASH - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e 1s/^X//' -[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] - -# Same as above, but do not quote variable references. -[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Constants: -rm="rm -f" - -# Global variables: -default_ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a -ltmain="$ac_aux_dir/ltmain.sh" -ofile="$default_ofile" -with_gnu_ld="$lt_cv_prog_gnu_ld" - -AC_CHECK_TOOL(AR, ar, false) -AC_CHECK_TOOL(RANLIB, ranlib, :) -AC_CHECK_TOOL(STRIP, strip, :) - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -test -z "$AS" && AS=as -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$DLLTOOL" && DLLTOOL=dlltool -test -z "$LD" && LD=ld -test -z "$LN_S" && LN_S="ln -s" -test -z "$MAGIC_CMD" && MAGIC_CMD=file -test -z "$NM" && NM=nm -test -z "$SED" && SED=sed -test -z "$OBJDUMP" && OBJDUMP=objdump -test -z "$RANLIB" && RANLIB=: -test -z "$STRIP" && STRIP=: -test -z "$ac_objext" && ac_objext=o - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" - ;; - *) - old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - AC_PATH_MAGIC - fi - ;; -esac - -AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) -AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], -enable_win32_dll=yes, enable_win32_dll=no) - -AC_ARG_ENABLE([libtool-lock], -[ --disable-libtool-lock avoid locking (might break parallel builds)]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -AC_ARG_WITH([pic], -[ --with-pic try to use only PIC/non-PIC objects [default=use both]], - [pic_mode="$withval"], - [pic_mode=default]) -test -z "$pic_mode" && pic_mode=default - -# Use C for the default configuration in the libtool script -tagname= -AC_LIBTOOL_LANG_C_CONFIG -_LT_AC_TAGCONFIG -])# AC_LIBTOOL_SETUP - - -# _LT_AC_SYS_COMPILER -# ------------------- -AC_DEFUN([_LT_AC_SYS_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_AC_SYS_COMPILER - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -AC_DEFUN([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` -]) - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -AC_DEFUN([_LT_COMPILER_BOILERPLATE], -[ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -AC_DEFUN([_LT_LINKER_BOILERPLATE], -[ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* -])# _LT_LINKER_BOILERPLATE - - -dnl autoconf 2.13 compatibility -dnl _LT_AC_TRY_LINK() -AC_DEFUN(_LT_AC_TRY_LINK, [ -cat > conftest.$ac_ext <&5 - cat conftest.$ac_ext >&6 -ifelse([$2], , , [$2 - rm -rf conftest* -])dnl -fi -rm -f conftest*]) - - -# _LT_AC_SYS_LIBPATH_AIX -# ---------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], -[_LT_AC_TRY_LINK([ -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi],[]) -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi -])# _LT_AC_SYS_LIBPATH_AIX - - -# _LT_AC_SHELL_INIT(ARG) -# ---------------------- -AC_DEFUN([_LT_AC_SHELL_INIT], -[ifdef([AC_DIVERSION_NOTICE], - [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], - [AC_DIVERT_PUSH(NOTICE)]) -$1 -AC_DIVERT_POP -])# _LT_AC_SHELL_INIT - - -# _LT_AC_PROG_ECHO_BACKSLASH -# -------------------------- -# Add some code to the start of the generated configure script which -# will find an echo command which doesn't interpret backslashes. -AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], -[_LT_AC_SHELL_INIT([ -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` - ;; -esac - -echo=${ECHO-echo} -if test "X[$]1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X[$]1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then - # Yippee, $echo works! - : -else - # Restart under the correct shell. - exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} -fi - -if test "X[$]1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null 2>&1 && unset CDPATH - -if test -z "$ECHO"; then -if test "X${echo_test_string+set}" != Xset; then -# find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if (echo_test_string=`eval $cmd`) 2>/dev/null && - echo_test_string=`eval $cmd` && - (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null - then - break - fi - done -fi - -if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : -else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$echo" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - echo='print -r' - elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} - else - # Try using printf. - echo='printf %s\n' - if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - echo="$CONFIG_SHELL [$]0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$CONFIG_SHELL [$]0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do - if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "[$]0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} - else - # Oops. We lost completely, so just stick with echo. - echo=echo - fi - fi - fi - fi -fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -ECHO=$echo -if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then - ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" -fi - -AC_SUBST(ECHO) -])])# _LT_AC_PROG_ECHO_BACKSLASH - - -# _LT_AC_LOCK -# ----------- -AC_DEFUN([_LT_AC_LOCK], -[dnl -#AC_ARG_ENABLE([libtool-lock], -#[ --disable-libtool-lock avoid locking (might break parallel builds)]) -#test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_SAVE - AC_LANG_C - AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_RESTORE]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], -[*-*-cygwin* | *-*-mingw* | *-*-pw32*) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; - ]) -esac - -need_locks="$enable_libtool_lock" - -])# _LT_AC_LOCK - - -# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], -[AC_REQUIRE([LT_AC_PROG_SED]) -AC_CACHE_CHECK([$1], [$2], - [$2=no - ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"configure:__oline__: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "configure:__oline__: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed >conftest.exp - $SED '/^$/d' conftest.err >conftest.er2 - if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $rm conftest* -]) - -if test x"[$]$2" = xyes; then - ifelse([$5], , :, [$5]) -else - ifelse([$6], , :, [$6]) -fi -])# AC_LIBTOOL_COMPILER_OPTION - - -# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ------------------------------------------------------------ -# Check whether the given compiler option works -AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], -[AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - printf "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed > conftest.exp - $SED '/^$/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - ifelse([$4], , :, [$4]) -else - ifelse([$5], , :, [$5]) -fi -])# AC_LIBTOOL_LINKER_OPTION - - -# AC_LIBTOOL_SYS_MAX_CMD_LEN -# -------------------------- -AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], -[# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - *) - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ - = "XX$teststring") >/dev/null 2>&1 && - new_result=`expr "X$teststring" : ".*" 2>&1` && - lt_cv_sys_max_cmd_len=$new_result && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - teststring= - # Add a significant safety factor because C++ compilers can tack on massive - # amounts of additional arguments before passing them to the linker. - # It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -])# AC_LIBTOOL_SYS_MAX_CMD_LEN - - -# _LT_AC_CHECK_DLFCN -# -------------------- -AC_DEFUN([_LT_AC_CHECK_DLFCN], -[AC_CHECK_HEADERS(dlfcn.h)dnl -])# _LT_AC_CHECK_DLFCN - - -# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# ------------------------------------------------------------------ -AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], -[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - - exit (status); -}] -EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_unknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_AC_TRY_DLOPEN_SELF - - -# AC_LIBTOOL_DLOPEN_SELF -# ------------------- -AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], -[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_AC_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - LDFLAGS="$LDFLAGS $link_static_flag" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_AC_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -])# AC_LIBTOOL_DLOPEN_SELF - - -# AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) -# --------------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler -AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], -[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"configure:__oline__: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "configure:__oline__: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed > out/conftest.exp - $SED '/^$/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.err || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* -]) -])# AC_LIBTOOL_PROG_CC_C_O - - -# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) -# ----------------------------------------- -# Check to see if we can do hard links to lock some files if needed -AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], -[AC_REQUIRE([_LT_AC_LOCK])dnl - -hard_links="nottested" -if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([\`$CC' does not support \`-c -o', so \`make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS - - -# AC_LIBTOOL_OBJDIR -# ----------------- -AC_DEFUN([AC_LIBTOOL_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -])# AC_LIBTOOL_OBJDIR - - -# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) -# ---------------------------------------------- -# Check hardcoding attributes. -AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_AC_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ - test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \ - test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existant directories. - if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_AC_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_AC_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_AC_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH - - -# AC_LIBTOOL_SYS_LIB_STRIP -# ------------------------ -AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], -[striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) -fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -])# AC_LIBTOOL_SYS_LIB_STRIP - - -# AC_LIBTOOL_SYS_DYNAMIC_LINKER -# ----------------------------- -# PORTME Fill in your ld.so characteristics -AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], -[AC_MSG_CHECKING([dynamic linker characteristics]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. - if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` - else - sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' - fi - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -kfreebsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='GNU ld.so' - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[123]]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - *) # from 3.2 on - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # find out which ABI we are using - libsuff= - case $host_cpu in - x86_64*|s390x*|powerpc64*) - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *64-bit*) - libsuff=64 - sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" - ;; - esac - fi - rm -rf conftest* - ;; - esac - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`$SED -e 's/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g' /etc/ld.so.conf | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -knetbsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='GNU ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -sco3.2v5*) - version_type=osf - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no -])# AC_LIBTOOL_SYS_DYNAMIC_LINKER - - -# _LT_AC_TAGCONFIG -# ---------------- -AC_DEFUN([_LT_AC_TAGCONFIG], -[AC_ARG_WITH([tags], -[ --with-tags[=TAGS] include additional configurations [automatic] -], -[tagnames="$withval"]) - -if test -f "$ltmain" && test -n "$tagnames"; then - if test ! -f "${ofile}"; then - AC_MSG_WARN([output file \`$ofile' does not exist]) - fi - - if test -z "$LTCC"; then - eval "`$SHELL ${ofile} --config | grep '^LTCC='`" - if test -z "$LTCC"; then - AC_MSG_WARN([output file \`$ofile' does not look like a libtool script]) - else - AC_MSG_WARN([using \`LTCC=$LTCC', extracted from \`$ofile']) - fi - fi - - # Extract list of available tagged configurations in $ofile. - # Note that this assumes the entire list is on one line. - available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` - - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for tagname in $tagnames; do - IFS="$lt_save_ifs" - # Check whether tagname contains only valid characters - case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in - "") ;; - *) AC_MSG_ERROR([invalid tag name: $tagname]) - ;; - esac - - if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null - then - AC_MSG_ERROR([tag name \"$tagname\" already exists]) - fi - - # Update the list of available tags. - if test -n "$tagname"; then - echo appending configuration tag \"$tagname\" to $ofile - - case $tagname in - CXX) - if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_LIBTOOL_LANG_CXX_CONFIG - else - tagname="" - fi - ;; - -# F77) -# if test -n "$F77" && test "X$F77" != "Xno"; then -# AC_LIBTOOL_LANG_F77_CONFIG -# else -# tagname="" -# fi -# ;; -# -# GCJ) -# if test -n "$GCJ" && test "X$GCJ" != "Xno"; then -# AC_LIBTOOL_LANG_GCJ_CONFIG -# else -# tagname="" -# fi -# ;; -# -# RC) -# AC_LIBTOOL_LANG_RC_CONFIG -# ;; - - *) - AC_MSG_ERROR([Unsupported tag name: $tagname]) - ;; - esac - - # Append the new tag name to the list of available tags. - if test -n "$tagname" ; then - available_tags="$available_tags $tagname" - fi - fi - done - IFS="$lt_save_ifs" - - # Now substitute the updated list of available tags. - if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then - mv "${ofile}T" "$ofile" - chmod +x "$ofile" - else - rm -f "${ofile}T" - AC_MSG_ERROR([unable to update list of available tagged configurations.]) - fi -fi -])# _LT_AC_TAGCONFIG - - -# AC_LIBTOOL_DLOPEN -# ----------------- -# enable checks for dlopen support -AC_DEFUN([AC_LIBTOOL_DLOPEN], - [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) -])# AC_LIBTOOL_DLOPEN - - -# AC_LIBTOOL_WIN32_DLL -# -------------------- -# declare package support for building win32 DLLs -AC_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) -])# AC_LIBTOOL_WIN32_DLL - - -# AC_ENABLE_SHARED([DEFAULT]) -# --------------------------- -# implement the --enable-shared flag -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_SHARED], -[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([shared], -changequote(<<, >>)dnl -<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT], -changequote([, ])dnl - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]AC_ENABLE_SHARED_DEFAULT) -])# AC_ENABLE_SHARED - - -# AC_DISABLE_SHARED -# ----------------- -#- set the default shared flag to --disable-shared -AC_DEFUN([AC_DISABLE_SHARED], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_SHARED(no) -])# AC_DISABLE_SHARED - - -# AC_ENABLE_STATIC([DEFAULT]) -# --------------------------- -# implement the --enable-static flag -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_STATIC], -[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([static], -changequote(<<, >>)dnl -<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT], -changequote([, ])dnl - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]AC_ENABLE_STATIC_DEFAULT) -])# AC_ENABLE_STATIC - - -# AC_DISABLE_STATIC -# ----------------- -# set the default static flag to --disable-static -AC_DEFUN([AC_DISABLE_STATIC], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_STATIC(no) -])# AC_DISABLE_STATIC - - -# AC_ENABLE_FAST_INSTALL([DEFAULT]) -# --------------------------------- -# implement the --enable-fast-install flag -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_FAST_INSTALL], -[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([fast-install], -changequote(<<, >>)dnl -<< --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT], -changequote([, ])dnl - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) -])# AC_ENABLE_FAST_INSTALL - - -# AC_DISABLE_FAST_INSTALL -# ----------------------- -# set the default to --disable-fast-install -AC_DEFUN([AC_DISABLE_FAST_INSTALL], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_FAST_INSTALL(no) -])# AC_DISABLE_FAST_INSTALL - - -# AC_LIBTOOL_PICMODE([MODE]) -# -------------------------- -# implement the --with-pic flag -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -AC_DEFUN([AC_LIBTOOL_PICMODE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -pic_mode=ifelse($#,1,$1,default) -])# AC_LIBTOOL_PICMODE - - -# AC_PROG_EGREP -# ------------- -# This is predefined starting with Autoconf 2.54, so this conditional -# definition can be removed once we require Autoconf 2.54 or later. -ifdef([AC_PROG_EGREP], [], [AC_DEFUN([AC_PROG_EGREP], -[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], - [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 - then ac_cv_prog_egrep='grep -E' - else ac_cv_prog_egrep='egrep' - fi]) - EGREP=$ac_cv_prog_egrep - AC_SUBST([EGREP]) -])]) - - -# AC_PATH_TOOL_PREFIX -# ------------------- -# find a file program which can recognise shared library -AC_DEFUN([AC_PATH_TOOL_PREFIX], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="ifelse([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -])# AC_PATH_TOOL_PREFIX - - -# AC_PATH_MAGIC -# ------------- -# find a file program which can recognise a shared library -AC_DEFUN([AC_PATH_MAGIC], -[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# AC_PATH_MAGIC - - -# AC_PROG_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([AC_PROG_LD], -[AC_ARG_WITH([gnu-ld], -[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no]) -AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux*) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -nto-qnx*) - lt_cv_deplibs_check_method=unknown - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -sco3.2v5*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown -])# AC_DEPLIBS_CHECK_METHOD - - -# AC_PROG_NM -# ---------- -# find the pathname to a BSD-compatible name lister -AC_DEFUN([AC_PROG_NM], -[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/${ac_tool_prefix}nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - esac - fi - done - IFS="$lt_save_ifs" - test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm -fi]) -NM="$lt_cv_path_NM" -])# AC_PROG_NM - - -# AC_CHECK_LIBM -# ------------- -# check for math library -AC_DEFUN([AC_CHECK_LIBM], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -])# AC_CHECK_LIBM - - -# AC_LIBLTDL_CONVENIENCE([DIRECTORY]) -# ----------------------------------- -# sets LIBLTDL to the link flags for the libltdl convenience library and -# LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-convenience to the configure arguments. Note that -# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, -# it is assumed to be `libltdl'. LIBLTDL will be prefixed with -# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/' -# (note the single quotes!). If your package is not flat and you're not -# using automake, define top_builddir and top_srcdir appropriately in -# the Makefiles. -AC_DEFUN([AC_LIBLTDL_CONVENIENCE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - case $enable_ltdl_convenience in - no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; - "") enable_ltdl_convenience=yes - ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; - esac - LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la - LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) - # For backwards non-gettext consistent compatibility... - INCLTDL="$LTDLINCL" -])# AC_LIBLTDL_CONVENIENCE - - -# AC_LIBLTDL_INSTALLABLE([DIRECTORY]) -# ----------------------------------- -# sets LIBLTDL to the link flags for the libltdl installable library and -# LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-install to the configure arguments. Note that -# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, -# and an installed libltdl is not found, it is assumed to be `libltdl'. -# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with -# '${top_srcdir}/' (note the single quotes!). If your package is not -# flat and you're not using automake, define top_builddir and top_srcdir -# appropriately in the Makefiles. -# In the future, this macro may have to be called after AC_PROG_LIBTOOL. -AC_DEFUN([AC_LIBLTDL_INSTALLABLE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - AC_CHECK_LIB(ltdl, lt_dlinit, - [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], - [if test x"$enable_ltdl_install" = xno; then - AC_MSG_WARN([libltdl not installed, but installation disabled]) - else - enable_ltdl_install=yes - fi - ]) - if test x"$enable_ltdl_install" = x"yes"; then - ac_configure_args="$ac_configure_args --enable-ltdl-install" - LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la - LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) - else - ac_configure_args="$ac_configure_args --enable-ltdl-install=no" - LIBLTDL="-lltdl" - LTDLINCL= - fi - # For backwards non-gettext consistent compatibility... - INCLTDL="$LTDLINCL" -])# AC_LIBLTDL_INSTALLABLE - - -# AC_LIBTOOL_CXX -# -------------- -# enable support for C++ libraries -AC_DEFUN([AC_LIBTOOL_CXX], -[AC_REQUIRE([_LT_AC_LANG_CXX]) -])# AC_LIBTOOL_CXX - - -# _LT_AC_LANG_CXX -# --------------- -AC_DEFUN([_LT_AC_LANG_CXX], -[AC_REQUIRE([AC_PROG_CXX]) -AC_REQUIRE([_LT_AC_PROG_CXXCPP]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) -])# _LT_AC_LANG_CXX - -# _LT_AC_PROG_CXXCPP -# --------------- -AC_DEFUN([_LT_AC_PROG_CXXCPP], -[ -AC_REQUIRE([AC_PROG_CXX]) -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -fi -])# _LT_AC_PROG_CXXCPP - -# AC_LIBTOOL_F77 -# -------------- -# enable support for Fortran 77 libraries -#AC_DEFUN([AC_LIBTOOL_F77], -#[AC_REQUIRE([_LT_AC_LANG_F77]) -#])# AC_LIBTOOL_F77 - - -# _LT_AC_LANG_F77 -# --------------- -#AC_DEFUN([_LT_AC_LANG_F77], -#[AC_REQUIRE([AC_PROG_F77]) -#_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) -#])# _LT_AC_LANG_F77 - - -# AC_LIBTOOL_GCJ -# -------------- -# enable support for GCJ libraries -#AC_DEFUN([AC_LIBTOOL_GCJ], -#[AC_REQUIRE([_LT_AC_LANG_GCJ]) -#])# AC_LIBTOOL_GCJ - - -# _LT_AC_LANG_GCJ -# --------------- -#AC_DEFUN([_LT_AC_LANG_GCJ], -#[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], -# [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], -# [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], -# [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], -# [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], -# [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) -#_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) -#])# _LT_AC_LANG_GCJ - - -# AC_LIBTOOL_RC -# -------------- -# enable support for Windows resource files -#AC_DEFUN([AC_LIBTOOL_RC], -#[AC_REQUIRE([LT_AC_PROG_RC]) -#_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) -#])# AC_LIBTOOL_RC - - -# AC_LIBTOOL_LANG_C_CONFIG -# ------------------------ -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) -AC_DEFUN([_LT_AC_LANG_C_CONFIG], -[lt_save_CC="$CC" -AC_LANG_SAVE -AC_LANG_C - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;\n" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}\n' - -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# -# Check for any special shared library compilation flags. -# -_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)= -if test "$GCC" = no; then - case $host_os in - sco3.2v5*) - _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf' - ;; - esac -fi -if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then - AC_MSG_WARN([\`$CC' requires \`$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries]) - if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[ ]]" >/dev/null; then : - else - AC_MSG_WARN([add \`$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure]) - _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no - fi -fi - - -# -# Check to make sure the static flag actually works. -# -AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works], - _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), - $_LT_AC_TAGVAR(lt_prog_compiler_static, $1), - [], - [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) - - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) -AC_LIBTOOL_SYS_LIB_STRIP -AC_LIBTOOL_DLOPEN_SELF($1) - -# Report which librarie types wil actually be built -AC_MSG_CHECKING([if libtool supports shared libraries]) -AC_MSG_RESULT([$can_build_shared]) - -AC_MSG_CHECKING([whether to build shared libraries]) -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -AC_MSG_RESULT([$enable_shared]) - -AC_MSG_CHECKING([whether to build static libraries]) -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -AC_MSG_RESULT([$enable_static]) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_RESTORE -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_C_CONFIG - - -# AC_LIBTOOL_LANG_CXX_CONFIG -# -------------------------- -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) -AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], -[AC_LANG_SAVE -AC_LANG_CPLUSPLUS -AC_REQUIRE([AC_PROG_CXX]) -AC_REQUIRE([_LT_AC_PROG_CXXCPP]) - -_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_AC_TAGVAR(allow_undefined_flag, $1)= -_LT_AC_TAGVAR(always_export_symbols, $1)=no -_LT_AC_TAGVAR(archive_expsym_cmds, $1)= -_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_direct, $1)=no -_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= -_LT_AC_TAGVAR(hardcode_minus_L, $1)=no -_LT_AC_TAGVAR(hardcode_automatic, $1)=no -_LT_AC_TAGVAR(module_cmds, $1)= -_LT_AC_TAGVAR(module_expsym_cmds, $1)= -_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown -_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_AC_TAGVAR(no_undefined_flag, $1)= -_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= -_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Dependencies to place before and after the object being linked: -_LT_AC_TAGVAR(predep_objects, $1)= -_LT_AC_TAGVAR(postdep_objects, $1)= -_LT_AC_TAGVAR(predeps, $1)= -_LT_AC_TAGVAR(postdeps, $1)= -_LT_AC_TAGVAR(compiler_lib_search_path, $1)= - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;\n" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_LD=$LD -lt_save_GCC=$GCC -GCC=$GXX -lt_save_with_gnu_ld=$with_gnu_ld -lt_save_path_LD=$lt_cv_path_LD -if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx -else - unset lt_cv_prog_gnu_ld -fi -if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX -else - unset lt_cv_path_LD -fi -test -z "${LDCXX+set}" || LD=$LDCXX -CC=${CXX-"c++"} -compiler=$CC -_LT_AC_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) - -# We don't want -fno-exception wen compiling C++ code, so set the -# no_builtin_flag separately -if test "$GXX" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' -else - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= -fi - -if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - AC_PROG_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ - grep 'no-whole-archive' > /dev/null; then - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - -else - GXX=no - with_gnu_ld=no - wlarc= -fi - -# PORTME: fill in a description of your system's C++ link characteristics -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -_LT_AC_TAGVAR(ld_shlibs, $1)=yes -case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_AC_TAGVAR(archive_cmds, $1)='' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - else - # We have old collect2 - _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # -bexpall does not export symbols beginning with underscore (_) - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - # Exported symbols can be pulled into shared objects from archives - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(always_export_symbols, $1)=no - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_automatic, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - if test "$GXX" = yes ; then - lt_int_apple_cc_single_mod=no - output_verbose_link_cmd='echo' - if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then - lt_int_apple_cc_single_mod=yes - fi - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - fi - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - fi - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - freebsd[[12]]*) - # C++ shared libraries reported to be fairly broken before switch to ELF - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - freebsd-elf*) - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - freebsd* | kfreebsd*-gnu | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_AC_TAGVAR(ld_shlibs, $1)=yes - ;; - gnu*) - ;; - hpux9*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - ia64*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - ;; - *) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - ia64*) - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - *) - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*|ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - ia64*|hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' - fi - fi - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - linux*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc*) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC*) - # Portland Group C++ compiler - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - esac - ;; - lynxos*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - m88k*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - openbsd2*) - # C++ shared libraries are fairly broken - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - openbsd*) - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd='echo' - ;; - osf3*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ - $rm $lib.exp' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - psos*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - sco*) - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The C++ compiler is used as linker so we must use $wl - # flag to pass the commands to the underlying system - # linker. We must also pass each convience library through - # to the system linker between allextract/defaultextract. - # The C++ compiler will combine linker options so we - # cannot just pass the convience library names through - # without $wl. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' - ;; - esac - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | grep -v '^2\.7' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - fi - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - fi - ;; - esac - ;; - sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - vxworks*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; -esac -AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) -test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_AC_TAGVAR(GCC, $1)="$GXX" -_LT_AC_TAGVAR(LD, $1)="$LD" - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -AC_LIBTOOL_POSTDEP_PREDEP($1) -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) -AC_LIBTOOL_SYS_LIB_STRIP -AC_LIBTOOL_DLOPEN_SELF($1) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_RESTORE -CC=$lt_save_CC -LDCXX=$LD -LD=$lt_save_LD -GCC=$lt_save_GCC -with_gnu_ldcxx=$with_gnu_ld -with_gnu_ld=$lt_save_with_gnu_ld -lt_cv_path_LDCXX=$lt_cv_path_LD -lt_cv_path_LD=$lt_save_path_LD -lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld -lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -])# AC_LIBTOOL_LANG_CXX_CONFIG - -# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) -# ------------------------ -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$cfgfile" -ifelse([$1], [], -[#! $SHELL - -# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 -# Free Software Foundation, Inc. -# -# This file is part of GNU Libtool: -# Originally by Gordon Matzigkeit , 1996 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="$SED -e 1s/^X//" - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# The names of the tagged configurations supported by this script. -available_tags= - -# ### BEGIN LIBTOOL CONFIG], -[# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# A language-specific compiler. -CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) - -# Is the compiler the GNU C compiler? -with_gcc=$_LT_AC_TAGVAR(GCC, $1) - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_[]_LT_AC_TAGVAR(LD, $1) - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) - -# Commands used to build and install a shared archive. -archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) -archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) -module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" - -# Set to yes if exported symbols are required. -always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) - -# The commands to list exported symbols. -export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) - -# Symbols that must always be exported. -include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) - -ifelse([$1],[], -[# ### END LIBTOOL CONFIG], -[# ### END LIBTOOL TAG CONFIG: $tagname]) - -__EOF__ - -ifelse([$1],[], [ - case $host_os in - aix3*) - cat <<\EOF >> "$cfgfile" - -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -EOF - ;; - esac - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || \ - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -]) -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi -])# AC_LIBTOOL_CONFIG - - -# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------------------- -AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], -[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl - -_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - - AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI - - -# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE -# --------------------------------- -AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], -[AC_REQUIRE([AC_CANONICAL_HOST]) -AC_REQUIRE([AC_PROG_NM]) -AC_REQUIRE([AC_OBJEXT]) -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Transform an extracted symbol line into a proper C declaration -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) # Its linker distinguishes data from code symbols - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - ;; -linux*) - if test "$host_cpu" = ia64; then - symcode='[[ABCDGIRSTW]]' - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris* | sysv5*) - symcode='[[BDRT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Try without a prefix undercore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if grep ' nm_test_var$' "$nlist" >/dev/null; then - if grep ' nm_test_func$' "$nlist" >/dev/null; then - cat < conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' - - cat <> conftest.$ac_ext -#if defined (__STDC__) && __STDC__ -# define lt_ptr_t void * -#else -# define lt_ptr_t char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - lt_ptr_t address; -} -lt_preloaded_symbols[[]] = -{ -EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext - cat <<\EOF >> conftest.$ac_ext - {0, (lt_ptr_t) 0} -}; - -#ifdef __cplusplus -} -#endif -EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -f conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi -]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE - - -# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) -# --------------------------------------- -AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], -[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_AC_TAGVAR(lt_prog_compiler_static, $1)= - -AC_MSG_CHECKING([for $compiler option to produce PIC]) - ifelse([$1],[CXX],[ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | os2* | pw32*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix4* | aix5*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | kfreebsd*-gnu | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" - if test "$host_cpu" != ia64; then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux*) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - icpc* | ecpc*) - # Intel C++ - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC*) - # Portland Group C++ compiler. - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - sco*) - case $cc_basename in - CC*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - *) - ;; - esac - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - unixware*) - ;; - vxworks*) - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - esac - ;; - - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - newsos6) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - linux*) - case $cc_basename in - icc* | ecc*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - esac - ;; - - osf3* | osf4* | osf5*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - sco3.2v5*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn' - ;; - - solaris*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - unicos*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then - AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], - _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), - [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" - ;; -esac -]) - - -# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) -# ------------------------------------ -# See if the linker supports building shared libraries. -AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], -[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -ifelse([$1],[CXX],[ - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix4* | aix5*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - else - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw*) - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' - ;; - *) - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac -],[ - runpath_var= - _LT_AC_TAGVAR(allow_undefined_flag, $1)= - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_AC_TAGVAR(archive_cmds, $1)= - _LT_AC_TAGVAR(archive_expsym_cmds, $1)= - _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= - _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_minus_L, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown - _LT_AC_TAGVAR(hardcode_automatic, $1)=no - _LT_AC_TAGVAR(module_cmds, $1)= - _LT_AC_TAGVAR(module_expsym_cmds, $1)= - _LT_AC_TAGVAR(always_export_symbols, $1)=no - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_AC_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - _LT_CC_BASENAME([$compiler]) - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - _LT_AC_TAGVAR(ld_shlibs, $1)=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_AC_TAGVAR(ld_shlibs, $1)=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(always_export_symbols, $1)=no - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - linux*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris* | sysv5*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - _LT_AC_TAGVAR(ld_shlibs, $1)=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sunos4*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$link_static_flag"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - else - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_AC_TAGVAR(archive_cmds, $1)='' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - else - # We have old collect2 - _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # -bexpall does not export symbols beginning with underscore (_) - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - # Exported symbols can be pulled into shared objects from archives - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - # see comment about different semantics on the GNU ld section - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - - bsdi[[45]]*) - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' - _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_automatic, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - fi - ;; - - dgux*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - freebsd1*) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | kfreebsd*-gnu | dragonfly*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10* | hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*|ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*|ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - ia64*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - ;; - *) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - openbsd*) - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - ;; - - os2*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - sco3.2v5*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ;; - - solaris*) - _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine linker options so we - # cannot just pass the convience library names through - # without $wl, iff we do not link with $LD. - # Luckily, gcc supports the same syntax we need for Sun Studio. - # Supported since Solaris 2.6 (maybe 2.5.1?) - case $wlarc in - '') - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; - *) - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; - esac ;; - esac - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_AC_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_AC_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4.2uw2*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - hardcode_runpath_var=yes - runpath_var=LD_RUN_PATH - ;; - - sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text' - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - runpath_var='LD_RUN_PATH' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv5*) - _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' - # $CC -shared without GNU ld will not create a library from C++ - # object files and a static libstdc++, better avoid it by now - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - ;; - - uts4*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - fi -]) -AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) -test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -# -# Do we need to explicitly link libc? -# -case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_AC_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_MSG_CHECKING([whether -lc should be explicitly linked in]) - $rm conftest* - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) - _LT_AC_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) - then - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - else - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) - ;; - esac - fi - ;; -esac -])# AC_LIBTOOL_PROG_LD_SHLIBS - - -# _LT_AC_FILE_LTDLL_C -# ------------------- -# Be careful that the start marker always follows a newline. -AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ -# /* ltdll.c starts here */ -# #define WIN32_LEAN_AND_MEAN -# #include -# #undef WIN32_LEAN_AND_MEAN -# #include -# -# #ifndef __CYGWIN__ -# # ifdef __CYGWIN32__ -# # define __CYGWIN__ __CYGWIN32__ -# # endif -# #endif -# -# #ifdef __cplusplus -# extern "C" { -# #endif -# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); -# #ifdef __cplusplus -# } -# #endif -# -# #ifdef __CYGWIN__ -# #include -# DECLARE_CYGWIN_DLL( DllMain ); -# #endif -# HINSTANCE __hDllInstance_base; -# -# BOOL APIENTRY -# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) -# { -# __hDllInstance_base = hInst; -# return TRUE; -# } -# /* ltdll.c ends here */ -])# _LT_AC_FILE_LTDLL_C - - -# _LT_AC_TAGVAR(VARNAME, [TAGNAME]) -# --------------------------------- -AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) - - -# old names -AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) -AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) -AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) -AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) -AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) - -# This is just to silence aclocal about the macro not being used -ifelse([AC_DISABLE_FAST_INSTALL]) - -#AC_DEFUN([LT_AC_PROG_GCJ], -#[AC_CHECK_TOOL(GCJ, gcj, no) -# test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" -# AC_SUBST(GCJFLAGS) -#]) - -#AC_DEFUN([LT_AC_PROG_RC], -#[AC_CHECK_TOOL(RC, windres, no) -#]) - -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ -# LT_AC_PROG_SED -# -------------- -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -AC_DEFUN([LT_AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if test -f "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_MSG_RESULT([$SED]) -]) diff --git a/build/mkdep.awk b/build/mkdep.awk deleted file mode 100644 index d953b8ab6c65f..0000000000000 --- a/build/mkdep.awk +++ /dev/null @@ -1,75 +0,0 @@ -# +----------------------------------------------------------------------+ -# | PHP Version 5 | -# +----------------------------------------------------------------------+ -# | Copyright (c) 2000-2005 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 | -# | available through the world-wide-web at the following url: | -# | http://www.php.net/license/3_01.txt | -# | If you did not receive a copy of the PHP license and are unable to | -# | obtain it through the world-wide-web, please send a note to | -# | license@php.net so we can mail you a copy immediately. | -# +----------------------------------------------------------------------+ -# | Author: Sascha Schumann | -# +----------------------------------------------------------------------+ -# -# $Id$ -# -# Usage: -# -# echo top_srcdir top_builddir srcdir CPP [CPP-ARGS] filenames | \ -# awk -f mkdep.awk > dependencies - - -{ - top_srcdir=$1 - top_builddir=$2 - srcdir=$3 - cmd=$4 - - for (i = 5; i <= NF; i++) { - if (match($i, "^-[A-Z]") == 0) - break; - cmd=cmd " " $i - } - - dif=i-1 - - for (; i <= NF; i++) - filenames[i-dif]=$i - - no_files=NF-dif - - for(i = 1; i <= no_files; i++) { - if (system("test -r " filenames[i]) != 0) - continue - - target=filenames[i] - sub(srcdir "/", "", target) - target2=target - sub("\.(c|cpp)$", ".lo", target); - sub("\.(c|cpp)$", ".slo", target2); - - for (e in used) - delete used[e] - - cmdx=cmd " " filenames[i] - done=0 - while ((cmdx | getline) > 0) { - if (match($0, "^# [0-9]* \".*\.h\"") != 0) { - if (sub(top_srcdir, "$(top_srcdir)", $3) == 0) - sub(top_builddir, "$(top_builddir)", $3) - if (substr($3,2,1) != "/" && used[$3] != 1) { - if (done == 0) - printf(target " " target2 ":") - done=1 - printf(" \\\n\t" substr($3,2,length($3)-2)) - used[$3] = 1; - } - } - } - if (done == 1) - print "\n" - } -} diff --git a/build/order_by_dep.awk b/build/order_by_dep.awk deleted file mode 100644 index 38128b2e1b56a..0000000000000 --- a/build/order_by_dep.awk +++ /dev/null @@ -1,89 +0,0 @@ -BEGIN { - orig_rs = RS; - orig_fs = FS; - RS=" "; - mod_count = 0; - SUBSEP=":"; -} - -function get_deps(module_name, depline, cmd) -{ - # this could probably be made *much* better - RS=orig_rs; - FS="[(,) \t]+" - cmd = "grep PHP_ADD_EXTENSION_DEP ext/" module_name "/config*.m4" - while (cmd | getline) { -# printf("GOT: %s,%s,%s,%s,%s\n", $1, $2, $3, $4, $5); - if (!length($5)) { - $5 = 0; - } - mod_deps[module_name, $4] = $5; - } - close(cmd) - RS=" "; - FS=orig_fs; -} - -function get_module_index(name, i) -{ - for (i in mods) { - if (mods[i] == name) { - return i; - } - } - return -1; -} - -function do_deps(mod_idx, module_name, mod_name_len, dep, ext, val, depidx) -{ - module_name = mods[mod_idx]; - mod_name_len = length(module_name); - - for (ext in mod_deps) { - if (substr(ext, 0, mod_name_len+1) != module_name SUBSEP) { - continue; - } - val = mod_deps[ext]; - ext = substr(ext, mod_name_len+2, length(ext)-mod_name_len); - - depidx = get_module_index(ext); - if (depidx >= 0) { - do_deps(depidx); - } - } - - #printf(" phpext_%s_ptr,\n", module_name); - printf(" phpext_%s_ptr,@NEWLINE@", module_name); - delete mods[mod_idx]; -} - -function count(arr, n, i) -{ - n = 0; - for (i in arr) - n++; - return n; -} - -/^[a-zA-Z0-9_-]+/ { - # mini hack for pedantic awk - gsub("[^a-zA-Z0-9_-]", "", $1) - # add each item to array - mods[mod_count++] = $1 - - # see if it has any module deps - get_deps($1); -} -END { - # order it correctly - out_count = 0; - - while (count(mods)) { - # count down, since we need to assemble it in reverse order - for (i = mod_count-1; i >= 0; --i) { - if (i in mods) { - do_deps(i); - } - } - } -} diff --git a/build/print_include.awk b/build/print_include.awk deleted file mode 100644 index a4919fae87343..0000000000000 --- a/build/print_include.awk +++ /dev/null @@ -1,6 +0,0 @@ -/phpext_/ { - if (old_filename != FILENAME) { - printf "#include \"" FILENAME "\"@NEWLINE@" - old_filename = FILENAME - } -} diff --git a/build/scan_makefile_in.awk b/build/scan_makefile_in.awk deleted file mode 100644 index 0c6d20398fee9..0000000000000 --- a/build/scan_makefile_in.awk +++ /dev/null @@ -1,32 +0,0 @@ -BEGIN { - mode=0 - sources="" -} - -mode == 0 && /^LTLIBRARY_SOURCES.*\\$/ { - if (match($0, "[^=]*$")) { - sources=substr($0, RSTART, RLENGTH-1) - } - mode=1 - next -} - -mode == 0 && /^LTLIBRARY_SOURCES.*/ { - if (match($0, "[^=]*$")) { - sources=substr($0, RSTART, RLENGTH) - } -} - -mode == 1 && /.*\\$/ { - sources=sources substr($0, 0, length - 1) - next -} - -mode == 1 { - sources=sources $0 - mode=0 -} - -END { - print sources -} diff --git a/build/shtool b/build/shtool deleted file mode 100755 index cd5352d22925f..0000000000000 --- a/build/shtool +++ /dev/null @@ -1,1123 +0,0 @@ -#!/bin/sh -## -## GNU shtool -- The GNU Portable Shell Tool -## Copyright (c) 1994-2005 Ralf S. Engelschall -## -## See http://www.gnu.org/software/shtool/ for more information. -## See ftp://ftp.gnu.org/gnu/shtool/ for latest version. -## -## Version: 2.0.2 (15-Jun-2005) -## Contents: 4/19 available modules -## - -## -## This program is free software; you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 2 of the License, or -## (at your option) any later version. -## -## This program is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with this program; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, -## USA, or contact Ralf S. Engelschall . -## -## NOTICE: Given that you include this file verbatim into your own -## source tree, you are justified in saying that it remains separate -## from your package, and that this way you are simply just using GNU -## shtool. So, in this situation, there is no requirement that your -## package itself is licensed under the GNU General Public License in -## order to take advantage of GNU shtool. -## - -## -## Usage: shtool [] [ [] []] -## -## Available commands: -## echo Print string with optional construct expansion -## install Install a program, script or datafile -## mkdir Make one or more directories -## path Deal with program paths -## -## Not available commands (because module was not built-in): -## mdate Pretty-print modification time of a file or dir -## table Pretty-print a field-separated list as a table -## prop Display progress with a running propeller -## move Move files with simultaneous substitution -## mkln Make link with calculation of relative paths -## mkshadow Make a shadow tree through symbolic links -## fixperm Fix file permissions inside a source tree -## rotate Logfile rotation -## tarball Roll distribution tarballs -## subst Apply sed(1) substitution operations -## platform Platform Identification Utility -## arx Extended archive command -## slo Separate linker options by library class -## scpp Sharing C Pre-Processor -## version Maintain a version information file -## - -if [ $# -eq 0 ]; then - echo "$0:Error: invalid command line" 1>&2 - echo "$0:Hint: run \`$0 -h' for usage" 1>&2 - exit 1 -fi -if [ ".$1" = ".-h" ] || [ ".$1" = ".--help" ]; then - echo "This is GNU shtool, version 2.0.2 (15-Jun-2005)" - echo "Copyright (c) 1994-2005 Ralf S. Engelschall " - echo "Report bugs to " - echo '' - echo "Usage: shtool [] [ [] []]" - echo '' - echo 'Available global :' - echo ' -v, --version display shtool version information' - echo ' -h, --help display shtool usage help page (this one)' - echo ' -d, --debug display shell trace information' - echo ' -r, --recreate recreate this shtool script via shtoolize' - echo '' - echo 'Available [] []:' - echo ' echo [-n|--newline] [-e|--expand] [ ...]' - echo ' install [-v|--verbose] [-t|--trace] [-d|--mkdir] [-c|--copy]' - echo ' [-C|--compare-copy] [-s|--strip] [-m|--mode ]' - echo ' [-o|--owner ] [-g|--group ] [-e|--exec' - echo ' ] [ ...] ' - echo ' mkdir [-t|--trace] [-f|--force] [-p|--parents] [-m|--mode' - echo ' ] [-o|--owner ] [-g|--group ] ' - echo ' [ ...]' - echo ' path [-s|--suppress] [-r|--reverse] [-d|--dirname] [-b|--basename]' - echo ' [-m|--magic] [-p|--path ] [ ...]' - echo '' - echo 'Not available (because module was not built-in):' - echo ' mdate [-n|--newline] [-z|--zero] [-s|--shorten] [-d|--digits]' - echo ' [-f|--field-sep ] [-o|--order ] ' - echo ' table [-F|--field-sep ] [-w|--width ] [-c|--columns' - echo ' ] [-s|--strip ] ...' - echo ' prop [-p|--prefix ]' - echo ' move [-v|--verbose] [-t|--trace] [-e|--expand] [-p|--preserve]' - echo ' ' - echo ' mkln [-t|--trace] [-f|--force] [-s|--symbolic] ' - echo ' [ ...] ' - echo ' mkshadow [-v|--verbose] [-t|--trace] [-a|--all] ' - echo ' fixperm [-v|--verbose] [-t|--trace] [ ...]' - echo ' rotate [-v|--verbose] [-t|--trace] [-f|--force] [-n|--num-files' - echo ' ] [-s|--size ] [-c|--copy] [-r|--remove]' - echo ' [-a|--archive-dir ] [-z|--compress [:]]' - echo ' [-b|--background] [-d|--delay] [-p|--pad ] [-m|--mode' - echo ' ] [-o|--owner ] [-g|--group ] [-M|--migrate' - echo ' ] [-P|--prolog ] [-E|--epilog ] [...]' - echo ' tarball [-t|--trace] [-v|--verbose] [-o|--output ]' - echo ' [-c|--compress ] [-d|--directory ] [-u|--user' - echo ' ] [-g|--group ] [-e|--exclude ]' - echo ' [ ...]' - echo ' subst [-v|--verbose] [-t|--trace] [-n|--nop] [-w|--warning]' - echo ' [-q|--quiet] [-s|--stealth] [-i|--interactive] [-b|--backup' - echo ' ] [-e|--exec ] [-f|--file ] []' - echo ' [...]' - echo ' platform [-F|--format ] [-S|--sep ] [-C|--conc' - echo ' ] [-L|--lower] [-U|--upper] [-v|--verbose]' - echo ' [-c|--concise] [-n|--no-newline] [-t|--type ]' - echo ' [-V|--version] [-h|--help]' - echo ' arx [-t|--trace] [-C|--command ] [' - echo ' ...]' - echo ' slo [-p|--prefix ] -- -L -l [-L -l' - echo ' ...]' - echo ' scpp [-v|--verbose] [-p|--preserve] [-f|--filter ]' - echo ' [-o|--output ] [-t|--template ] [-M|--mark' - echo ' ] [-D|--define ] [-C|--class ]' - echo ' [ ...]' - echo ' version [-l|--language ] [-n|--name ] [-p|--prefix' - echo ' ] [-s|--set ] [-e|--edit] [-i|--increase' - echo ' ] [-d|--display ] ' - echo '' - exit 0 -fi -if [ ".$1" = ".-v" ] || [ ".$1" = ".--version" ]; then - echo "GNU shtool 2.0.2 (15-Jun-2005)" - exit 0 -fi -if [ ".$1" = ".-r" ] || [ ".$1" = ".--recreate" ]; then - shtoolize -oshtool echo install mkdir path - exit 0 -fi -if [ ".$1" = ".-d" ] || [ ".$1" = ".--debug" ]; then - shift - set -x -fi -name=`echo "$0" | sed -e 's;.*/\([^/]*\)$;\1;' -e 's;-sh$;;' -e 's;\.sh$;;'` -case "$name" in - echo|install|mkdir|path ) - # implicit tool command selection - tool="$name" - ;; - * ) - # explicit tool command selection - tool="$1" - shift - ;; -esac -arg_spec="" -opt_spec="" -gen_tmpfile=no - -## -## DISPATCH INTO SCRIPT PROLOG -## - -case $tool in - echo ) - str_tool="echo" - str_usage="[-n|--newline] [-e|--expand] [ ...]" - arg_spec="0+" - opt_spec="n.e." - opt_alias="n:newline,e:expand" - opt_n=no - opt_e=no - ;; - install ) - str_tool="install" - str_usage="[-v|--verbose] [-t|--trace] [-d|--mkdir] [-c|--copy] [-C|--compare-copy] [-s|--strip] [-m|--mode ] [-o|--owner ] [-g|--group ] [-e|--exec ] [ ...] " - arg_spec="1+" - opt_spec="v.t.d.c.C.s.m:o:g:e+" - opt_alias="v:verbose,t:trace,d:mkdir,c:copy,C:compare-copy,s:strip,m:mode,o:owner,g:group,e:exec" - opt_v=no - opt_t=no - opt_d=no - opt_c=no - opt_C=no - opt_s=no - opt_m="0755" - opt_o="" - opt_g="" - opt_e="" - ;; - mkdir ) - str_tool="mkdir" - str_usage="[-t|--trace] [-f|--force] [-p|--parents] [-m|--mode ] [-o|--owner ] [-g|--group ] [ ...]" - arg_spec="1+" - opt_spec="t.f.p.m:o:g:" - opt_alias="t:trace,f:force,p:parents,m:mode,o:owner,g:group" - opt_t=no - opt_f=no - opt_p=no - opt_m="" - opt_o="" - opt_g="" - ;; - path ) - str_tool="path" - str_usage="[-s|--suppress] [-r|--reverse] [-d|--dirname] [-b|--basename] [-m|--magic] [-p|--path ] [ ...]" - gen_tmpfile=yes - arg_spec="1+" - opt_spec="s.r.d.b.m.p:" - opt_alias="s:suppress,r:reverse,d:dirname,b:basename,m:magic,p:path" - opt_s=no - opt_r=no - opt_d=no - opt_b=no - opt_m=no - opt_p="$PATH" - ;; - -* ) - echo "$0:Error: unknown option \`$tool'" 2>&1 - echo "$0:Hint: run \`$0 -h' for usage" 2>&1 - exit 1 - ;; - * ) - echo "$0:Error: unknown command \`$tool'" 2>&1 - echo "$0:Hint: run \`$0 -h' for usage" 2>&1 - exit 1 - ;; -esac - -## -## COMMON UTILITY CODE -## - -# commonly used ASCII values -ASC_TAB=" " -ASC_NL=" -" - -# determine name of tool -if [ ".$tool" != . ]; then - # used inside shtool script - toolcmd="$0 $tool" - toolcmdhelp="shtool $tool" - msgprefix="shtool:$tool" -else - # used as standalone script - toolcmd="$0" - toolcmdhelp="sh $0" - msgprefix="$str_tool" -fi - -# parse argument specification string -eval `echo $arg_spec |\ - sed -e 's/^\([0-9]*\)\([+=]\)/arg_NUMS=\1; arg_MODE=\2/'` - -# parse option specification string -eval `echo h.$opt_spec |\ - sed -e 's/\([a-zA-Z0-9]\)\([.:+]\)/opt_MODE_\1=\2;/g'` - -# parse option alias string -eval `echo h:help,$opt_alias |\ - sed -e 's/-/_/g' -e 's/\([a-zA-Z0-9]\):\([^,]*\),*/opt_ALIAS_\2=\1;/g'` - -# interate over argument line -opt_PREV='' -while [ $# -gt 0 ]; do - # special option stops processing - if [ ".$1" = ".--" ]; then - shift - break - fi - - # determine option and argument - opt_ARG_OK=no - if [ ".$opt_PREV" != . ]; then - # merge previous seen option with argument - opt_OPT="$opt_PREV" - opt_ARG="$1" - opt_ARG_OK=yes - opt_PREV='' - else - # split argument into option and argument - case "$1" in - --[a-zA-Z0-9]*=*) - eval `echo "x$1" |\ - sed -e 's/^x--\([a-zA-Z0-9-]*\)=\(.*\)$/opt_OPT="\1";opt_ARG="\2"/'` - opt_STR=`echo $opt_OPT | sed -e 's/-/_/g'` - eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}" - ;; - --[a-zA-Z0-9]*) - opt_OPT=`echo "x$1" | cut -c4-` - opt_STR=`echo $opt_OPT | sed -e 's/-/_/g'` - eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}" - opt_ARG='' - ;; - -[a-zA-Z0-9]*) - eval `echo "x$1" |\ - sed -e 's/^x-\([a-zA-Z0-9]\)/opt_OPT="\1";/' \ - -e 's/";\(.*\)$/"; opt_ARG="\1"/'` - ;; - -[a-zA-Z0-9]) - opt_OPT=`echo "x$1" | cut -c3-` - opt_ARG='' - ;; - *) - break - ;; - esac - fi - - # eat up option - shift - - # determine whether option needs an argument - eval "opt_MODE=\$opt_MODE_${opt_OPT}" - if [ ".$opt_ARG" = . ] && [ ".$opt_ARG_OK" != .yes ]; then - if [ ".$opt_MODE" = ".:" ] || [ ".$opt_MODE" = ".+" ]; then - opt_PREV="$opt_OPT" - continue - fi - fi - - # process option - case $opt_MODE in - '.' ) - # boolean option - eval "opt_${opt_OPT}=yes" - ;; - ':' ) - # option with argument (multiple occurances override) - eval "opt_${opt_OPT}=\"\$opt_ARG\"" - ;; - '+' ) - # option with argument (multiple occurances append) - eval "opt_${opt_OPT}=\"\$opt_${opt_OPT}\${ASC_NL}\$opt_ARG\"" - ;; - * ) - echo "$msgprefix:Error: unknown option: \`$opt_OPT'" 1>&2 - echo "$msgprefix:Hint: run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2 - exit 1 - ;; - esac -done -if [ ".$opt_PREV" != . ]; then - echo "$msgprefix:Error: missing argument to option \`$opt_PREV'" 1>&2 - echo "$msgprefix:Hint: run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2 - exit 1 -fi - -# process help option -if [ ".$opt_h" = .yes ]; then - echo "Usage: $toolcmdhelp $str_usage" - exit 0 -fi - -# complain about incorrect number of arguments -case $arg_MODE in - '=' ) - if [ $# -ne $arg_NUMS ]; then - echo "$msgprefix:Error: invalid number of arguments (exactly $arg_NUMS expected)" 1>&2 - echo "$msgprefix:Hint: run \`$toolcmd -h' or \`man shtool' for details" 1>&2 - exit 1 - fi - ;; - '+' ) - if [ $# -lt $arg_NUMS ]; then - echo "$msgprefix:Error: invalid number of arguments (at least $arg_NUMS expected)" 1>&2 - echo "$msgprefix:Hint: run \`$toolcmd -h' or \`man shtool' for details" 1>&2 - exit 1 - fi - ;; -esac - -# establish a temporary file on request -if [ ".$gen_tmpfile" = .yes ]; then - # create (explicitly) secure temporary directory - if [ ".$TMPDIR" != . ]; then - tmpdir="$TMPDIR" - elif [ ".$TEMPDIR" != . ]; then - tmpdir="$TEMPDIR" - else - tmpdir="/tmp" - fi - tmpdir="$tmpdir/.shtool.$$" - ( umask 077 - rm -rf "$tmpdir" >/dev/null 2>&1 || true - mkdir "$tmpdir" >/dev/null 2>&1 - if [ $? -ne 0 ]; then - echo "$msgprefix:Error: failed to create temporary directory \`$tmpdir'" 1>&2 - exit 1 - fi - ) - - # create (implicitly) secure temporary file - tmpfile="$tmpdir/shtool.tmp" - touch "$tmpfile" -fi - -# utility function: map string to lower case -util_lower () { - echo "$1" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' -} - -# utility function: map string to upper case -util_upper () { - echo "$1" | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' -} - -# cleanup procedure -shtool_exit () { - rc="$1" - if [ ".$gen_tmpfile" = .yes ]; then - rm -rf "$tmpdir" >/dev/null 2>&1 || true - fi - exit $rc -} - -## -## DISPATCH INTO SCRIPT BODY -## - -case $tool in - -echo ) - ## - ## echo -- Print string with optional construct expansion - ## Copyright (c) 1998-2005 Ralf S. Engelschall - ## - - text="$*" - - # check for broken escape sequence expansion - seo='' - bytes=`echo '\1' | wc -c | awk '{ printf("%s", $1); }'` - if [ ".$bytes" != .3 ]; then - bytes=`echo -E '\1' | wc -c | awk '{ printf("%s", $1); }'` - if [ ".$bytes" = .3 ]; then - seo='-E' - fi - fi - - # check for existing -n option (to suppress newline) - minusn='' - bytes=`echo -n 123 2>/dev/null | wc -c | awk '{ printf("%s", $1); }'` - if [ ".$bytes" = .3 ]; then - minusn='-n' - fi - - # determine terminal bold sequence - term_bold='' - term_norm='' - if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[Bb]'`" != . ]; then - case $TERM in - # for the most important terminal types we directly know the sequences - xterm|xterm*|vt220|vt220*) - term_bold=`awk 'BEGIN { printf("%c%c%c%c", 27, 91, 49, 109); }' /dev/null` - term_norm=`awk 'BEGIN { printf("%c%c%c", 27, 91, 109); }' /dev/null` - ;; - vt100|vt100*|cygwin) - term_bold=`awk 'BEGIN { printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }' /dev/null` - term_norm=`awk 'BEGIN { printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }' /dev/null` - ;; - # for all others, we try to use a possibly existing `tput' or `tcout' utility - * ) - paths=`echo $PATH | sed -e 's/:/ /g'` - for tool in tput tcout; do - for dir in $paths; do - if [ -r "$dir/$tool" ]; then - for seq in bold md smso; do # 'smso' is last - bold="`$dir/$tool $seq 2>/dev/null`" - if [ ".$bold" != . ]; then - term_bold="$bold" - break - fi - done - if [ ".$term_bold" != . ]; then - for seq in sgr0 me rmso init reset; do # 'reset' is last - norm="`$dir/$tool $seq 2>/dev/null`" - if [ ".$norm" != . ]; then - term_norm="$norm" - break - fi - done - fi - break - fi - done - if [ ".$term_bold" != . ] && [ ".$term_norm" != . ]; then - break; - fi - done - ;; - esac - if [ ".$term_bold" = . ] || [ ".$term_norm" = . ]; then - echo "$msgprefix:Warning: unable to determine terminal sequence for bold mode" 1>&2 - term_bold='' - term_norm='' - fi - fi - - # determine user name - username='' - if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[uUgG]'`" != . ]; then - username="`(id -un) 2>/dev/null`" - if [ ".$username" = . ]; then - str="`(id) 2>/dev/null`" - if [ ".`echo $str | grep '^uid[ ]*=[ ]*[0-9]*('`" != . ]; then - username=`echo $str | sed -e 's/^uid[ ]*=[ ]*[0-9]*(//' -e 's/).*$//'` - fi - if [ ".$username" = . ]; then - username="$LOGNAME" - if [ ".$username" = . ]; then - username="$USER" - if [ ".$username" = . ]; then - username="`(whoami) 2>/dev/null |\ - awk '{ printf("%s", $1); }'`" - if [ ".$username" = . ]; then - username="`(who am i) 2>/dev/null |\ - awk '{ printf("%s", $1); }'`" - if [ ".$username" = . ]; then - username='unknown' - fi - fi - fi - fi - fi - fi - fi - - # determine user id - userid='' - if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%U'`" != . ]; then - userid="`(id -u) 2>/dev/null`" - if [ ".$userid" = . ]; then - userid="`(id -u ${username}) 2>/dev/null`" - if [ ".$userid" = . ]; then - str="`(id) 2>/dev/null`" - if [ ".`echo $str | grep '^uid[ ]*=[ ]*[0-9]*('`" != . ]; then - userid=`echo $str | sed -e 's/^uid[ ]*=[ ]*//' -e 's/(.*$//'` - fi - if [ ".$userid" = . ]; then - userid=`(getent passwd ${username}) 2>/dev/null | \ - sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'` - if [ ".$userid" = . ]; then - userid=`grep "^${username}:" /etc/passwd 2>/dev/null | \ - sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'` - if [ ".$userid" = . ]; then - userid=`(ypcat passwd) 2>/dev/null | - grep "^${username}:" | \ - sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'` - if [ ".$userid" = . ]; then - userid='?' - fi - fi - fi - fi - fi - fi - fi - - # determine (primary) group id - groupid='' - if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[gG]'`" != . ]; then - groupid="`(id -g ${username}) 2>/dev/null`" - if [ ".$groupid" = . ]; then - str="`(id) 2>/dev/null`" - if [ ".`echo $str | grep 'gid[ ]*=[ ]*[0-9]*('`" != . ]; then - groupid=`echo $str | sed -e 's/^.*gid[ ]*=[ ]*//' -e 's/(.*$//'` - fi - if [ ".$groupid" = . ]; then - groupid=`(getent passwd ${username}) 2>/dev/null | \ - sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'` - if [ ".$groupid" = . ]; then - groupid=`grep "^${username}:" /etc/passwd 2>/dev/null | \ - sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'` - if [ ".$groupid" = . ]; then - groupid=`(ypcat passwd) 2>/dev/null | grep "^${username}:" | \ - sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'` - if [ ".$groupid" = . ]; then - groupid='?' - fi - fi - fi - fi - fi - fi - - # determine (primary) group name - groupname='' - if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%g'`" != . ]; then - groupname="`(id -gn ${username}) 2>/dev/null`" - if [ ".$groupname" = . ]; then - str="`(id) 2>/dev/null`" - if [ ".`echo $str | grep 'gid[ ]*=[ ]*[0-9]*('`" != . ]; then - groupname=`echo $str | sed -e 's/^.*gid[ ]*=[ ]*[0-9]*(//' -e 's/).*$//'` - fi - if [ ".$groupname" = . ]; then - groupname=`(getent group) 2>/dev/null | \ - grep "^[^:]*:[^:]*:${groupid}:" | \ - sed -e 's/:.*$//'` - if [ ".$groupname" = . ]; then - groupname=`grep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \ - sed -e 's/:.*$//'` - if [ ".$groupname" = . ]; then - groupname=`(ypcat group) 2>/dev/null | \ - grep "^[^:]*:[^:]*:${groupid}:" | \ - sed -e 's/:.*$//'` - if [ ".$groupname" = . ]; then - groupname='?' - fi - fi - fi - fi - fi - fi - - # determine host and domain name - hostname='' - domainname='' - if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%h'`" != . ]; then - hostname="`(uname -n) 2>/dev/null |\ - awk '{ printf("%s", $1); }'`" - if [ ".$hostname" = . ]; then - hostname="`(hostname) 2>/dev/null |\ - awk '{ printf("%s", $1); }'`" - if [ ".$hostname" = . ]; then - hostname='unknown' - fi - fi - case $hostname in - *.* ) - domainname=".`echo $hostname | cut -d. -f2-`" - hostname="`echo $hostname | cut -d. -f1`" - ;; - esac - fi - if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%d'`" != . ]; then - if [ ".$domainname" = . ]; then - if [ -f /etc/resolv.conf ]; then - domainname="`grep '^[ ]*domain' /etc/resolv.conf | sed -e 'q' |\ - sed -e 's/.*domain//' \ - -e 's/^[ ]*//' -e 's/^ *//' -e 's/^ *//' \ - -e 's/^\.//' -e 's/^/./' |\ - awk '{ printf("%s", $1); }'`" - if [ ".$domainname" = . ]; then - domainname="`grep '^[ ]*search' /etc/resolv.conf | sed -e 'q' |\ - sed -e 's/.*search//' \ - -e 's/^[ ]*//' -e 's/^ *//' -e 's/^ *//' \ - -e 's/ .*//' -e 's/ .*//' \ - -e 's/^\.//' -e 's/^/./' |\ - awk '{ printf("%s", $1); }'`" - fi - fi - fi - fi - - # determine current time - time_day='' - time_month='' - time_year='' - time_monthname='' - if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[DMYm]'`" != . ]; then - time_day=`date '+%d'` - time_month=`date '+%m'` - time_year=`date '+%Y' 2>/dev/null` - if [ ".$time_year" = . ]; then - time_year=`date '+%y'` - case $time_year in - [5-9][0-9]) time_year="19$time_year" ;; - [0-4][0-9]) time_year="20$time_year" ;; - esac - fi - case $time_month in - 1|01) time_monthname='Jan' ;; - 2|02) time_monthname='Feb' ;; - 3|03) time_monthname='Mar' ;; - 4|04) time_monthname='Apr' ;; - 5|05) time_monthname='May' ;; - 6|06) time_monthname='Jun' ;; - 7|07) time_monthname='Jul' ;; - 8|08) time_monthname='Aug' ;; - 9|09) time_monthname='Sep' ;; - 10) time_monthname='Oct' ;; - 11) time_monthname='Nov' ;; - 12) time_monthname='Dec' ;; - esac - fi - - # expand special ``%x'' constructs - if [ ".$opt_e" = .yes ]; then - text=`echo $seo "$text" |\ - sed -e "s/%B/${term_bold}/g" \ - -e "s/%b/${term_norm}/g" \ - -e "s/%u/${username}/g" \ - -e "s/%U/${userid}/g" \ - -e "s/%g/${groupname}/g" \ - -e "s/%G/${groupid}/g" \ - -e "s/%h/${hostname}/g" \ - -e "s/%d/${domainname}/g" \ - -e "s/%D/${time_day}/g" \ - -e "s/%M/${time_month}/g" \ - -e "s/%Y/${time_year}/g" \ - -e "s/%m/${time_monthname}/g" 2>/dev/null` - fi - - # create output - if [ .$opt_n = .no ]; then - echo $seo "$text" - else - # the harder part: echo -n is best, because - # awk may complain about some \xx sequences. - if [ ".$minusn" != . ]; then - echo $seo $minusn "$text" - else - echo dummy | awk '{ printf("%s", TEXT); }' TEXT="$text" - fi - fi - - shtool_exit 0 - ;; - -install ) - ## - ## install -- Install a program, script or datafile - ## Copyright (c) 1997-2005 Ralf S. Engelschall - ## - - # special case: "shtool install -d [...]" internally - # maps to "shtool mkdir -f -p -m 755 [...]" - if [ "$opt_d" = yes ]; then - cmd="$0 mkdir -f -p -m 755" - if [ ".$opt_o" != . ]; then - cmd="$cmd -o '$opt_o'" - fi - if [ ".$opt_g" != . ]; then - cmd="$cmd -g '$opt_g'" - fi - if [ ".$opt_v" = .yes ]; then - cmd="$cmd -v" - fi - if [ ".$opt_t" = .yes ]; then - cmd="$cmd -t" - fi - for dir in "$@"; do - eval "$cmd $dir" || shtool_exit $? - done - shtool_exit 0 - fi - - # determine source(s) and destination - argc=$# - srcs="" - while [ $# -gt 1 ]; do - srcs="$srcs $1" - shift - done - dstpath="$1" - - # type check for destination - dstisdir=0 - if [ -d $dstpath ]; then - dstpath=`echo "$dstpath" | sed -e 's:/$::'` - dstisdir=1 - fi - - # consistency check for destination - if [ $argc -gt 2 ] && [ $dstisdir = 0 ]; then - echo "$msgprefix:Error: multiple sources require destination to be directory" 1>&2 - shtool_exit 1 - fi - - # iterate over all source(s) - for src in $srcs; do - dst=$dstpath - - # if destination is a directory, append the input filename - if [ $dstisdir = 1 ]; then - dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'` - dst="$dst/$dstfile" - fi - - # check for correct arguments - if [ ".$src" = ".$dst" ]; then - echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2 - continue - fi - if [ -d "$src" ]; then - echo "$msgprefix:Warning: source \`$src' is a directory - skipped" 1>&2 - continue - fi - - # make a temp file name in the destination directory - dsttmp=`echo $dst |\ - sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \ - -e "s;\$;/#INST@$$#;"` - - # verbosity - if [ ".$opt_v" = .yes ]; then - echo "$src -> $dst" 1>&2 - fi - - # copy or move the file name to the temp name - # (because we might be not allowed to change the source) - if [ ".$opt_C" = .yes ]; then - opt_c=yes - fi - if [ ".$opt_c" = .yes ]; then - if [ ".$opt_t" = .yes ]; then - echo "cp $src $dsttmp" 1>&2 - fi - cp $src $dsttmp || shtool_exit $? - else - if [ ".$opt_t" = .yes ]; then - echo "mv $src $dsttmp" 1>&2 - fi - mv $src $dsttmp || shtool_exit $? - fi - - # adjust the target file - if [ ".$opt_e" != . ]; then - sed='sed' - OIFS="$IFS"; IFS="$ASC_NL"; set -- $opt_e; IFS="$OIFS" - for e - do - sed="$sed -e '$e'" - done - cp $dsttmp $dsttmp.old - chmod u+w $dsttmp - eval "$sed <$dsttmp.old >$dsttmp" || shtool_exit $? - rm -f $dsttmp.old - fi - if [ ".$opt_s" = .yes ]; then - if [ ".$opt_t" = .yes ]; then - echo "strip $dsttmp" 1>&2 - fi - strip $dsttmp || shtool_exit $? - fi - if [ ".$opt_o" != . ]; then - if [ ".$opt_t" = .yes ]; then - echo "chown $opt_o $dsttmp" 1>&2 - fi - chown $opt_o $dsttmp || shtool_exit $? - fi - if [ ".$opt_g" != . ]; then - if [ ".$opt_t" = .yes ]; then - echo "chgrp $opt_g $dsttmp" 1>&2 - fi - chgrp $opt_g $dsttmp || shtool_exit $? - fi - if [ ".$opt_m" != ".-" ]; then - if [ ".$opt_t" = .yes ]; then - echo "chmod $opt_m $dsttmp" 1>&2 - fi - chmod $opt_m $dsttmp || shtool_exit $? - fi - - # determine whether to do a quick install - # (has to be done _after_ the strip was already done) - quick=no - if [ ".$opt_C" = .yes ]; then - if [ -r $dst ]; then - if cmp -s $src $dst; then - quick=yes - fi - fi - fi - - # finally, install the file to the real destination - if [ $quick = yes ]; then - if [ ".$opt_t" = .yes ]; then - echo "rm -f $dsttmp" 1>&2 - fi - rm -f $dsttmp - else - if [ ".$opt_t" = .yes ]; then - echo "rm -f $dst && mv $dsttmp $dst" 1>&2 - fi - rm -f $dst && mv $dsttmp $dst - fi - done - - shtool_exit 0 - ;; - -mkdir ) - ## - ## mkdir -- Make one or more directories - ## Copyright (c) 1996-2005 Ralf S. Engelschall - ## - - errstatus=0 - for p in ${1+"$@"}; do - # if the directory already exists... - if [ -d "$p" ]; then - if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then - echo "$msgprefix:Error: directory already exists: $p" 1>&2 - errstatus=1 - break - else - continue - fi - fi - # if the directory has to be created... - if [ ".$opt_p" = .no ]; then - if [ ".$opt_t" = .yes ]; then - echo "mkdir $p" 1>&2 - fi - mkdir $p || errstatus=$? - if [ ".$opt_o" != . ]; then - if [ ".$opt_t" = .yes ]; then - echo "chown $opt_o $p" 1>&2 - fi - chown $opt_o $p || errstatus=$? - fi - if [ ".$opt_g" != . ]; then - if [ ".$opt_t" = .yes ]; then - echo "chgrp $opt_g $p" 1>&2 - fi - chgrp $opt_g $p || errstatus=$? - fi - if [ ".$opt_m" != . ]; then - if [ ".$opt_t" = .yes ]; then - echo "chmod $opt_m $p" 1>&2 - fi - chmod $opt_m $p || errstatus=$? - fi - else - # the smart situation - set fnord `echo ":$p" |\ - sed -e 's/^:\//%/' \ - -e 's/^://' \ - -e 's/\// /g' \ - -e 's/^%/\//'` - shift - pathcomp='' - for d in ${1+"$@"}; do - pathcomp="$pathcomp$d" - case "$pathcomp" in - -* ) pathcomp="./$pathcomp" ;; - esac - if [ ! -d "$pathcomp" ]; then - if [ ".$opt_t" = .yes ]; then - echo "mkdir $pathcomp" 1>&2 - fi - mkdir $pathcomp || errstatus=$? - if [ ".$opt_o" != . ]; then - if [ ".$opt_t" = .yes ]; then - echo "chown $opt_o $pathcomp" 1>&2 - fi - chown $opt_o $pathcomp || errstatus=$? - fi - if [ ".$opt_g" != . ]; then - if [ ".$opt_t" = .yes ]; then - echo "chgrp $opt_g $pathcomp" 1>&2 - fi - chgrp $opt_g $pathcomp || errstatus=$? - fi - if [ ".$opt_m" != . ]; then - if [ ".$opt_t" = .yes ]; then - echo "chmod $opt_m $pathcomp" 1>&2 - fi - chmod $opt_m $pathcomp || errstatus=$? - fi - fi - pathcomp="$pathcomp/" - done - fi - done - - shtool_exit $errstatus - ;; - -path ) - ## - ## path -- Deal with program paths - ## Copyright (c) 1998-2005 Ralf S. Engelschall - ## - - namelist="$*" - - # check whether the test command supports the -x option - if [ -x /bin/sh ] 2>/dev/null; then - minusx="-x" - else - minusx="-r" - fi - - # split path string - paths="`echo $opt_p |\ - sed -e 's/^:/.:/' \ - -e 's/::/:.:/g' \ - -e 's/:$/:./' \ - -e 's/:/ /g'`" - - # SPECIAL REQUEST - # translate forward to reverse path - if [ ".$opt_r" = .yes ]; then - if [ "x$namelist" = "x." ]; then - rp='.' - else - rp='' - for pe in `IFS="$IFS/"; echo $namelist`; do - rp="../$rp" - done - fi - echo $rp | sed -e 's:/$::' - shtool_exit 0 - fi - - # SPECIAL REQUEST - # strip out directory or base name - if [ ".$opt_d" = .yes ]; then - echo "$namelist" |\ - sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' - shtool_exit 0 - fi - if [ ".$opt_b" = .yes ]; then - echo "$namelist" |\ - sed -e 's;.*/\([^/]*\)$;\1;' - shtool_exit 0 - fi - - # MAGIC SITUATION - # Perl Interpreter (perl) - if [ ".$opt_m" = .yes ] && [ ".$namelist" = .perl ]; then - rm -f $tmpfile >/dev/null 2>&1 - touch $tmpfile - found=0 - pc=99 - for dir in $paths; do - dir=`echo $dir | sed -e 's;/*$;;'` - nc=99 - for name in perl perl5 miniperl; do - if [ $minusx "$dir/$name" ] && [ ! -d "$dir/$name" ]; then - perl="$dir/$name" - pv=`$perl -e 'printf("%.3f", $]);'` - echo "$pv:$pc:$nc:$perl" >>$tmpfile - found=1 - fi - nc=`expr $nc - 1` - done - pc=`expr $pc - 1` - done - if [ $found = 1 ]; then - perl="`cat $tmpfile | sort -r -u | sed -e 'q' | cut -d: -f4`" - rm -f $tmpfile >/dev/null 2>&1 - echo "$perl" - shtool_exit 0 - fi - rm -f $tmpfile >/dev/null 2>&1 - shtool_exit 1 - fi - - # MAGIC SITUATION - # C pre-processor (cpp) - if [ ".$opt_m" = .yes ] && [ ".$namelist" = .cpp ]; then - echo >$tmpfile.c "#include " - echo >>$tmpfile.c "Syntax Error" - # 1. try the standard cc -E approach - cpp="${CC-cc} -E" - (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out - my_error=`grep -v '^ *+' $tmpfile.out` - if [ ".$my_error" != . ]; then - # 2. try the cc -E approach and GCC's -traditional-ccp option - cpp="${CC-cc} -E -traditional-cpp" - (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out - my_error=`grep -v '^ *+' $tmpfile.out` - if [ ".$my_error" != . ]; then - # 3. try a standalone cpp command in path and lib dirs - for path in $paths /lib /usr/lib /usr/local/lib; do - path=`echo $path | sed -e 's;/*$;;'` - if [ $minusx "$path/cpp" ] && [ ! -d "$path/cpp" ]; then - cpp="$path/cpp" - break - fi - done - if [ ".$cpp" != . ]; then - (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out - my_error=`grep -v '^ *+' $tmpfile.out` - if [ ".$my_error" != . ]; then - # ok, we gave up... - cpp='' - fi - fi - fi - fi - rm -f $tmpfile >/dev/null 2>&1 - rm -f $tmpfile.c $tmpfile.out >/dev/null 2>&1 - if [ ".$cpp" != . ]; then - echo "$cpp" - shtool_exit 0 - fi - shtool_exit 1 - fi - - # STANDARD SITUATION - # iterate over names - for name in $namelist; do - # iterate over paths - for path in $paths; do - path=`echo $path | sed -e 's;/*$;;'` - if [ $minusx "$path/$name" ] && [ ! -d "$path/$name" ]; then - if [ ".$opt_s" != .yes ]; then - echo "$path/$name" - fi - shtool_exit 0 - fi - done - done - - shtool_exit 1 - ;; - -esac - -shtool_exit 0 - diff --git a/buildconf b/buildconf deleted file mode 100755 index 1dca40e4703de..0000000000000 --- a/buildconf +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/sh -# $Id$ - -eval `grep '^EXTRA_VERSION=' configure.in` -case "$EXTRA_VERSION" in - *-dev) - dev=1 - ;; - *) - dev=0 - ;; -esac - -devok=0 -debug=no - -while test $# -gt 0; do - if test "$1" = "--force"; then - devok=1 - echo "Forcing buildconf" - fi - - if test "$1" = "--debug"; then - debug=yes - fi - - shift -done - -if test "$dev" = "0" -a "$devok" = "0"; then - echo "You should not run buildconf in a release package." - echo "use buildconf --force to override this check." - exit 1 -fi - -if test -z "$ZENDDIR"; then - if grep "PHP_MAJOR_VERSION 6" main/php_version.h >/dev/null; then - v=5 - else - v=4 - fi - - if test "$v" = "5"; then - if test -r "Zend/OBJECTS2_HOWTO"; then - : - else - mv Zend ZendEngine1 2>/dev/null - mv ZendEngine2 Zend - fi - else - if test -r "Zend/zend_execute_globals.h"; then - : - else - mv Zend ZendEngine2 2>/dev/null - mv ZendEngine1 Zend - fi - fi - - ZENDDIR=Zend - echo "using default Zend directory" -fi - -rm -f generated_lists - -if test "$debug" = "yes"; then - ${MAKE:-make} -s -f build/build.mk ZENDDIR="$ZENDDIR" SUPPRESS_WARNINGS="" -else - ${MAKE:-make} -s -f build/build.mk ZENDDIR="$ZENDDIR" -fi diff --git a/buildconf.bat b/buildconf.bat deleted file mode 100644 index a21732604fa34..0000000000000 --- a/buildconf.bat +++ /dev/null @@ -1,2 +0,0 @@ -@echo off -cscript /nologo win32\build\buildconf.js diff --git a/config.guess b/config.guess deleted file mode 100644 index ad5281e66e9de..0000000000000 --- a/config.guess +++ /dev/null @@ -1,1466 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - -timestamp='2005-08-03' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerppc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[45]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep __LP64__ >/dev/null - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - i*:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - x86:Interix*:[34]*) - echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' - exit ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - arm*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips - #undef mipsel - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips64 - #undef mips64el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #ifdef __INTEL_COMPILER - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` - test x"${LIBC}" != x && { - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit - } - test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } - ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - *86) UNAME_PROCESSOR=i686 ;; - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/config.sub b/config.sub deleted file mode 100644 index 1c366dfde9ab3..0000000000000 --- a/config.sub +++ /dev/null @@ -1,1579 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - -timestamp='2005-07-08' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ - kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray) - os= - basic_machine=$1 - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64vr | mips64vrel \ - | mips64orion | mips64orionel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | ms1 \ - | msp430 \ - | ns16k | ns32k \ - | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b \ - | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | v850 | v850e \ - | we32k \ - | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k) - basic_machine=$basic_machine-unknown - ;; - m32c) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | ms1-* \ - | msp430-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tron-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa-* \ - | ymp-* \ - | z8k-*) - ;; - m32c-*) - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16c) - basic_machine=cr16c-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -zvmoe) - os=-zvmoe - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/configure.in b/configure.in deleted file mode 100644 index 7450e236dc985..0000000000000 --- a/configure.in +++ /dev/null @@ -1,1434 +0,0 @@ - ## $Id$ -*- autoconf -*- -dnl ## Process this file with autoconf to produce a configure script. - -divert(1) - -dnl ## Diversion 1 is the autoconf + automake setup phase. We also -dnl ## set the PHP version, deal with platform-specific compile -dnl ## options and check for the basic compile tools. - -dnl ## Diversion 2 is the initial checking of OS features, programs, -dnl ## libraries and so on. - -dnl ## In diversion 3 we check for compile-time options to the PHP -dnl ## core and how to deal with different system dependencies. This -dnl ## includes what regex library is used and whether debugging or short -dnl ## tags are enabled, and the default behaviour of php.ini options. -dnl ## This is also where an SAPI interface is selected (choosing between -dnl ## Apache module, CGI etc.) - -dnl ## In diversion 4 we check user-configurable general settings. - -dnl ## In diversion 5 we check which extensions should be compiled. -dnl ## All of these are normally in the extension directories. -dnl ## Diversion 5 is the last one. Here we generate files and clean up. - -dnl include Zend specific macro definitions first -dnl ------------------------------------------------------------------------- -sinclude(Zend/acinclude.m4) - -dnl Basic autoconf + automake initialization, generation of config.nice. -dnl ------------------------------------------------------------------------- - -AC_PREREQ(2.13) -AC_INIT(README.CVS-RULES) - -PHP_CONFIG_NICE(config.nice) - -PHP_CANONICAL_HOST_TARGET - -AC_CONFIG_HEADER(main/php_config.h) - -MAJOR_VERSION=6 -MINOR_VERSION=0 -RELEASE_VERSION=0 -EXTRA_VERSION="-dev" -PHP_VERSION="$MAJOR_VERSION.$MINOR_VERSION.$RELEASE_VERSION$EXTRA_VERSION" -PHP_VERSION_ID=`expr [$]MAJOR_VERSION \* 10000 + [$]MINOR_VERSION \* 100 + [$]RELEASE_VERSION` - -dnl Define where extension directories are located in the configure context -AC_DEFUN([PHP_EXT_BUILDDIR],[ext/$1])dnl -AC_DEFUN([PHP_EXT_DIR],[ext/$1])dnl -AC_DEFUN([PHP_EXT_SRCDIR],[$abs_srcdir/ext/$1])dnl -AC_DEFUN([PHP_ALWAYS_SHARED],[])dnl - -dnl Setting up the PHP version based on the information above. -dnl ------------------------------------------------------------------------- - -echo "/* automatically generated by configure */" > php_version.h.new -echo "/* edit configure.in to change version number */" >> php_version.h.new -echo "#define PHP_MAJOR_VERSION $MAJOR_VERSION" >> php_version.h.new -echo "#define PHP_MINOR_VERSION $MINOR_VERSION" >> php_version.h.new -echo "#define PHP_RELEASE_VERSION $RELEASE_VERSION" >> php_version.h.new -echo "#define PHP_EXTRA_VERSION \"$EXTRA_VERSION\"" >> php_version.h.new -echo "#define PHP_VERSION \"$PHP_VERSION\"" >> php_version.h.new -echo "#define PHP_VERSION_ID $PHP_VERSION_ID" >> php_version.h.new -cmp php_version.h.new $srcdir/main/php_version.h >/dev/null 2>&1 -if test $? -ne 0 ; then - rm -f $srcdir/main/php_version.h && mv php_version.h.new $srcdir/main/php_version.h && \ - echo 'Updated main/php_version.h' -else - rm -f php_version.h.new -fi - - -dnl Catch common errors here to save a few seconds of our users' time -dnl ------------------------------------------------------------------------- - -if test "$with_shared_apache" != "no" && test -n "$with_shared_apache" ; then - AC_MSG_ERROR([--with-shared-apache is not supported. Please refer to the documentation for using APXS]) -fi - -if test -n "$with_apache" && test -n "$with_apxs"; then - AC_MSG_ERROR([--with-apache and --with-apxs cannot be used together]) -fi - -if test -n "$with_apxs2filter" && test -n "$with_apxs2"; then - AC_MSG_ERROR([--with-apxs2filter and --with-apxs2 cannot be used together]) -fi - - -dnl Settings we want to make before the checks. -dnl ------------------------------------------------------------------------- - -cwd=`pwd` - -php_shtool=$srcdir/build/shtool -T_MD=`$php_shtool echo -n -e %B` -T_ME=`$php_shtool echo -n -e %b` - -PHP_INIT_BUILD_SYSTEM - -dnl We want this one before the checks, so the checks can modify CFLAGS. -test -z "$CFLAGS" && auto_cflags=1 - -abs_srcdir=`(cd $srcdir; pwd)` -abs_builddir=`pwd` - -php_abs_top_srcdir=$abs_srcdir -php_abs_top_builddir=$abs_builddir - -dnl Because ``make install'' is often performed by the superuser, -dnl we create the libs subdirectory as the user who configures PHP. -dnl Otherwise, the current user will not be able to delete libs -dnl or the contents of libs. - -$php_shtool mkdir -p libs -rm -f libs/* - -dnl Checks for programs. -dnl ------------------------------------------------------------------------- - -AC_PROG_CC -PHP_DETECT_ICC -AC_PROG_CC_C_O -dnl Change to AC_PROG_CC_STDC when we start requiring a post-2.13 autoconf -dnl AC_PROG_CC_STDC -AC_PROG_CPP -AC_AIX -AC_PROG_LN_S - -dnl Support systems with system libraries in e.g. /usr/lib64 -AC_ARG_WITH(libdir, -[ --with-libdir=NAME Look for libraries in .../NAME rather than .../lib], -[PHP_LIBDIR=$withval], [PHP_LIBDIR=lib]) - -dnl check for -R, etc. switch -PHP_RUNPATH_SWITCH - -dnl Checks for some support/generator progs -PHP_PROG_RE2C -PHP_PROG_AWK -PHP_PROG_BISON -PHP_PROG_LEX - -dnl Platform-specific compile settings. -dnl ------------------------------------------------------------------------- - -dnl See bug #28605 -case $host_cpu in -alpha*) - if test "$GCC" = "yes"; then - CFLAGS="$CFLAGS -mieee" - else - CFLAGS="$CFLAGS -ieee" - fi - ;; -esac - -case $host_alias in -*solaris*) - CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS" - if test "${enable_libgcc+set}" != "set" && test "$GCC" = "yes"; then - enable_libgcc=yes - fi - ;; -*dgux*) - CPPFLAGS="$CPPFLAGS -D_BSD_TIMEOFDAY_FLAVOR";; -*darwin*|*rhapsody*) - if test -n "$GCC"; then - PHP_CHECK_GCC_ARG(-no-cpp-precomp, gcc_no_cpp_precomp=yes) - if test "$gcc_no_cpp_precomp" = "yes"; then - CPPFLAGS="$CPPFLAGS -no-cpp-precomp" - fi - fi - AC_DEFINE(BIND_8_COMPAT, 1, [Enabling BIND8 compatibility for Panther]) - php_multiple_shlib_versions_ok=yes;; -*beos*) - beos_threads=1 - LIBS="$LIBS -lbe -lroot";; -*mips*) - CPPFLAGS="$CPPFLAGS -D_XPG_IV";; -*hpux*) - if test "$GCC" = "yes"; then - CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED" - fi - ;; -*netware*) - PHP_BUILD_PROGRAM - PHP_ADD_SOURCES(/main, internal_functions.c,,PHP_GLOBAL_OBJS) - PHP_ADD_SOURCES(win32, sendmail.c, -I$CFLAGS, PHP_GLOBAL_OBJS) - PHP5LIB_SHARED_LIBADD=\$\(EXTRA_LIBS\) - EXTENSION_DIR=sys:/php$MAJOR_VERSION/ext - PHP_SUBST(PHP5LIB_SHARED_LIBADD) - PHP_SHARED_MODULE(php5lib, PHP_GLOBAL_OBJS, netware) - ;; -esac - -# Disable PIC mode by default where it is known to be safe to do so, -# to avoid the performance hit from the lost register -AC_MSG_CHECKING([whether to force non-PIC code in shared modules]) -case $host_alias in -i?86-*-linux*|i?86-*-freebsd*) - if test "${with_pic+set}" != "set" || test "$with_pic" = "no"; then - with_pic=no - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) - fi - ;; -*) AC_MSG_RESULT(no) ;; -esac - - -dnl Include Zend and TSRM configurations. -dnl ------------------------------------------------------------------------- - -sinclude(Zend/Zend.m4) -sinclude(TSRM/threads.m4) -sinclude(TSRM/tsrm.m4) - - -divert(2) - -dnl ## Diversion 2 is where we set PHP-specific options and come up -dnl ## with reasonable default values for them. We check for pthreads here -dnl ## because the information is needed by the SAPI configuration. -dnl ## This is also where an SAPI interface is selected (choosing between -dnl ## Apache module, CGI etc.) - -dnl . -dnl ------------------------------------------------------------------------- - -PTHREADS_CHECK -PHP_HELP_SEPARATOR([SAPI modules:]) -PHP_SHLIB_SUFFIX_NAMES -PHP_SAPI=default -PHP_BUILD_PROGRAM - - -dnl SAPI configuration. -dnl ------------------------------------------------------------------------- - -dnl paths to the targets are relative to the build directory -SAPI_SHARED=libs/libphp6.$SHLIB_DL_SUFFIX_NAME -SAPI_STATIC=libs/libphp6.a -SAPI_LIBTOOL=libphp6.la - -PHP_CONFIGURE_PART(Configuring SAPI modules) - -esyscmd(./build/config-stubs sapi) - -dnl Show which main SAPI was selected -AC_MSG_CHECKING([for chosen SAPI module]) -AC_MSG_RESULT([$PHP_SAPI]) - -if test "$enable_maintainer_zts" = "yes"; then - PTHREADS_ASSIGN_VARS - PTHREADS_FLAGS -fi - -if test "$PHP_ENABLE_FASTCGI" = "yes"; then - PHP_CONFIGURE_PART(Running FastCGI checks) - sinclude(sapi/cgi/libfcgi/acinclude.m4) - sinclude(sapi/cgi/libfcgi/libfcgi.m4) -fi - -divert(3) - -dnl ## In diversion 3 we check for compile-time options to the PHP -dnl ## core and how to deal with different system dependencies. This -dnl ## includes what regex library is used and whether debugging or short -dnl ## tags are enabled, and the default behaviour of php.ini options. - - -dnl Starting system checks. -dnl ------------------------------------------------------------------------- - -PHP_CONFIGURE_PART(Running system checks) - -dnl Find sendmail binary -PHP_PROG_SENDMAIL - -dnl Check whether the system uses EBCDIC (not ASCII) as its native codeset -PHP_EBCDIC - -dnl Check whether the system byte ordering is bigendian -PHP_C_BIGENDIAN - -dnl Check whether writing to stdout works -PHP_TEST_WRITE_STDOUT - -dnl Check for /usr/pkg/{lib,include} which is where NetBSD puts binary -dnl and source packages. This should be harmless on other OSs. -if test -d /usr/pkg/include -a -d /usr/pkg/lib ; then - CPPFLAGS="$CPPFLAGS -I/usr/pkg/include" - LDFLAGS="$LDFLAGS -L/usr/pkg/lib" -fi -test -d /usr/ucblib && PHP_ADD_LIBPATH(/usr/ucblib) - - -dnl First, library checks. -dnl ------------------------------------------------------------------------- - -dnl Some systems (OpenServer 5) dislike -lsocket -lnsl, so we try -dnl to avoid -lnsl checks, if we already have the functions which -dnl are usually in libnsl -dnl Also, uClibc will bark at linking with glibc's libnsl. - -PHP_CHECK_FUNC(socket, socket) -PHP_CHECK_FUNC(socketpair, socket) -PHP_CHECK_FUNC(htonl, socket) -PHP_CHECK_FUNC(gethostname, nsl) -PHP_CHECK_FUNC(gethostbyaddr, nsl) -PHP_CHECK_FUNC(yp_get_default_domain, nsl) - -PHP_CHECK_FUNC(dlopen, dl) -if test "$ac_cv_func_dlopen" = "yes"; then - AC_DEFINE(HAVE_LIBDL, 1, [ ]) -fi -AC_CHECK_LIB(m, sin) - -dnl Check for resolver routines. -dnl Need to check for both res_search and __res_search -dnl in -lc, -lbind, -lresolv and -lsocket -PHP_CHECK_FUNC(res_search, resolv, bind, socket) - -dnl Check for inet_aton and dn_skipname -dnl in -lc, -lbind and -lresolv -PHP_CHECK_FUNC(inet_aton, resolv, bind) -PHP_CHECK_FUNC(dn_skipname, resolv, bind) - - -dnl Then headers. -dnl ------------------------------------------------------------------------- - -dnl Checks for header files. -AC_HEADER_STDC -AC_HEADER_DIRENT - -dnl QNX requires unix.h to allow functions in libunix to work properly -AC_CHECK_HEADERS([ \ -inttypes.h \ -stdint.h \ -dirent.h \ -ApplicationServices/ApplicationServices.h \ -sys/param.h \ -sys/types.h \ -sys/time.h \ -netinet/in.h \ -alloca.h \ -arpa/inet.h \ -arpa/nameser.h \ -assert.h \ -crypt.h \ -fcntl.h \ -grp.h \ -ieeefp.h \ -langinfo.h \ -limits.h \ -locale.h \ -monetary.h \ -mach-o/dyld.h \ -netdb.h \ -pwd.h \ -resolv.h \ -signal.h \ -stdarg.h \ -stdlib.h \ -string.h \ -syslog.h \ -sysexits.h \ -sys/ioctl.h \ -sys/file.h \ -sys/mman.h \ -sys/mount.h \ -sys/poll.h \ -sys/resource.h \ -sys/select.h \ -sys/socket.h \ -sys/statfs.h \ -sys/statvfs.h \ -sys/vfs.h \ -sys/sysexits.h \ -sys/varargs.h \ -sys/wait.h \ -sys/loadavg.h \ -termios.h \ -unistd.h \ -unix.h \ -utime.h \ -sys/utsname.h \ -sys/ipc.h \ -dlfcn.h \ -assert.h -],[],[],[ -#ifdef HAVE_SYS_PARAM_H -#include -#endif -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_SYS_TIME_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_ARPA_NAMESER_H -#include -#endif -]) - -PHP_FOPENCOOKIE -PHP_BROKEN_GETCWD -PHP_BROKEN_GLIBC_FOPEN_APPEND - -dnl Checks for typedefs, structures, and compiler characteristics. -dnl ------------------------------------------------------------------------- - -AC_STRUCT_TM -AC_STRUCT_TIMEZONE - -PHP_MISSING_TIME_R_DECL -PHP_MISSING_FCLOSE_DECL - -PHP_TM_GMTOFF -PHP_STRUCT_FLOCK -PHP_SOCKLEN_T - -AC_CHECK_SIZEOF(intmax_t, 0) -AC_CHECK_SIZEOF(size_t, 8) -AC_CHECK_SIZEOF(ssize_t, 8) -AC_CHECK_SIZEOF(ptrdiff_t, 8) -AC_CHECK_SIZEOF(long long, 8) -AC_CHECK_SIZEOF(long long int, 8) -AC_CHECK_SIZEOF(long, 8) -AC_CHECK_SIZEOF(int, 4) - -dnl Check for members of the stat structure -AC_STRUCT_ST_BLKSIZE -dnl AC_STRUCT_ST_BLOCKS will screw QNX because fileblocks.o does not exists -dnl The WARNING_LEVEL required because cc in QNX hates -w option without an argument -if test "`uname -s 2>/dev/null`" != "QNX"; then - AC_STRUCT_ST_BLOCKS -else - AC_MSG_WARN([warnings level for cc set to 0]) - WARNING_LEVEL=0 -fi -AC_STRUCT_ST_RDEV - -dnl Checks for types -AC_TYPE_SIZE_T -AC_TYPE_UID_T - -dnl Checks for sockaddr_storage and sockaddr.sa_len -PHP_SOCKADDR_CHECKS - -dnl Check for IPv6 support -AC_CACHE_CHECK([for IPv6 support], ac_cv_ipv6_support, -[AC_TRY_LINK([ #include -#include -#include ], [struct sockaddr_in6 s; struct in6_addr t=in6addr_any; int i=AF_INET6; s; t.s6_addr[0] = 0;], - [ac_cv_ipv6_support=yes], [ac_cv_ipv6_support=no])]) - -dnl Checks for library functions. -dnl ------------------------------------------------------------------------- - -AC_FUNC_VPRINTF -AC_CHECK_FUNCS( -alphasort \ -asctime_r \ -chroot \ -ctime_r \ -cuserid \ -crypt \ -flock \ -ftok \ -funopen \ -gai_strerror \ -gcvt \ -getloadavg \ -getlogin \ -getprotobyname \ -getprotobynumber \ -getservbyname \ -getservbyport \ -getrusage \ -gettimeofday \ -gmtime_r \ -getpwnam_r \ -getgrnam_r \ -grantpt \ -inet_ntoa \ -inet_ntop \ -inet_pton \ -isascii \ -link \ -localtime_r \ -lockf \ -lchown \ -lrand48 \ -memcpy \ -memmove \ -mkstemp \ -mmap \ -nl_langinfo \ -perror \ -poll \ -ptsname \ -putenv \ -realpath \ -random \ -rand_r \ -regcomp \ -res_search \ -scandir \ -setitimer \ -setlocale \ -localeconv \ -setenv \ -setpgid \ -setsockopt \ -setvbuf \ -shutdown \ -sin \ -snprintf \ -srand48 \ -srandom \ -statfs \ -statvfs \ -std_syslog \ -strcasecmp \ -strcoll \ -strdup \ -strerror \ -strftime \ -strptime \ -strstr \ -strtok_r \ -symlink \ -tempnam \ -tzset \ -unlockpt \ -unsetenv \ -usleep \ -nanosleep \ -utime \ -vsnprintf \ -) - -dnl Check for getaddrinfo, should be a better way, but... -dnl Also check for working getaddrinfo -AC_CACHE_CHECK([for getaddrinfo], ac_cv_func_getaddrinfo, -[AC_TRY_LINK([#include ], - [struct addrinfo *g,h;g=&h;getaddrinfo("","",g,&g);], - AC_TRY_RUN([ -#include -#include -#ifndef AF_INET -# include -#endif -int main(void) { - struct addrinfo *ai, *pai, hints; - - memset(&hints, 0, sizeof(hints)); - hints.ai_flags = AI_NUMERICHOST; - - if (getaddrinfo("127.0.0.1", 0, &hints, &ai) < 0) { - exit(1); - } - - if (ai == 0) { - exit(1); - } - - pai = ai; - - while (pai) { - if (pai->ai_family != AF_INET) { - /* 127.0.0.1/NUMERICHOST should only resolve ONE way */ - exit(1); - } - if (pai->ai_addr->sa_family != AF_INET) { - /* 127.0.0.1/NUMERICHOST should only resolve ONE way */ - exit(1); - } - pai = pai->ai_next; - } - freeaddrinfo(ai); - exit(0); -} - ],ac_cv_func_getaddrinfo=yes, ac_cv_func_getaddrinfo=no, ac_cv_func_getaddrinfo=no), -ac_cv_func_getaddrinfo=no)]) -if test "$ac_cv_func_getaddrinfo" = yes; then - AC_DEFINE(HAVE_GETADDRINFO,1,[Define if you have the getaddrinfo function]) -fi - -AC_REPLACE_FUNCS(strlcat strlcpy getopt) -AC_FUNC_UTIME_NULL -AC_FUNC_ALLOCA -dnl PHP_AC_BROKEN_SPRINTF -dnl PHP_AC_BROKEN_SNPRINTF -PHP_DECLARED_TIMEZONE -PHP_TIME_R_TYPE -PHP_READDIR_R_TYPE -PHP_CHECK_IN_ADDR_T - -AC_CHECK_FUNCS(crypt_r, [ php_crypt_r="1" ], [ php_crypt_r="0" ]) -if test "x$php_crypt_r" = "x1"; then - PHP_CRYPT_R_STYLE -fi - -divert(4) - -dnl ## In diversion 4 we check user-configurable general settings. - -dnl General settings. -dnl ------------------------------------------------------------------------- -PHP_CONFIGURE_PART(General settings) - -PHP_HELP_SEPARATOR([General settings:]) - -PHP_ARG_ENABLE(gcov, whether to include gcov symbols, -[ --enable-gcov Enable GCOV code coverage (requires LTP) - FOR DEVELOPERS ONLY!!], no, no) - -if test "$PHP_GCOV" = "yes"; then - - if test "$GCC" != "yes"; then - AC_MSG_ERROR([GCC is required for --enable-gcov]) - fi - - dnl Check if ccache is being used - case `$php_shtool path $CC` in - *ccache*[)] gcc_ccache=yes;; - *[)] gcc_ccache=no;; - esac - - if test "$gcc_ccache" = "yes" && (test -z "$CCACHE_DISABLE" || test "$CCACHE_DISABLE" != "1"); then - AC_MSG_ERROR([ccache must be disabled when --enable-gcov option is used. You can disable ccache by setting environment variable CCACHE_DISABLE=1.]) - fi - - ltp_version_list="1.5" - - AC_CHECK_PROG(LTP, lcov, lcov) - AC_CHECK_PROG(LTP_GENHTML, genhtml, genhtml) - PHP_SUBST(LTP) - PHP_SUBST(LTP_GENHTML) - - if test "$LTP"; then - AC_CACHE_CHECK([for ltp version], php_cv_ltp_version, [ - php_cv_ltp_version=invalid - ltp_version=`$LTP -v 2>/dev/null | $SED -e 's/^.* //'` - for ltp_check_version in $ltp_version_list; do - if test "$ltp_version" = "$ltp_check_version"; then - php_cv_ltp_version="$ltp_check_version (ok)" - fi - done - ]) - else - ltp_msg="To enable code coverage reporting you must have one of the following LTP versions installed: $ltp_version_list" - AC_MSG_ERROR([$ltp_msg]) - fi - - case $php_cv_ltp_version in - ""|invalid[)] - ltp_msg="You must have one of the following versions of LTP: $ltp_version_list (found: $ltp_version)." - AC_MSG_ERROR([$ltp_msg]) - LTP="exit 0;" - ;; - esac - - if test -z "$LTP_GENHTML"; then - AC_MSG_ERROR([Could not find genhtml from the LTP package]) - fi - - AC_DEFINE(HAVE_GCOV, 1, [Whether you have gcov]) - PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/Makefile.gcov, $abs_srcdir) - - dnl Remove all optimization flags from CFLAGS - changequote({,}) - CFLAGS=`echo "$CFLAGS" | $SED -e 's/-O[0-9]*//g'` - CXXFLAGS=`echo "$CXXFLAGS" | $SED -e 's/-O[0-9]*//g'` - changequote([,]) - - dnl Add the special gcc flags - CFLAGS="$CFLAGS -O0 -fprofile-arcs -ftest-coverage" - CXXFLAGS="$CXXFLAGS -O0 -fprofile-arcs -ftest-coverage" -fi - -PHP_ARG_ENABLE(debug, whether to include debugging symbols, -[ --enable-debug Compile with debugging symbols], no, no) - -if test "$PHP_DEBUG" = "yes"; then - PHP_DEBUG=1 - ZEND_DEBUG=yes - changequote({,}) - CFLAGS=`echo "$CFLAGS" | $SED -e 's/-O[0-9]*//g'` - CXXFLAGS=`echo "$CXXFLAGS" | $SED -e 's/-O[0-9]*//g'` - changequote([,]) - dnl add -O0 only if GCC or ICC is used - if test "$GCC" = "yes" || test "$ICC" = "yes"; then - CFLAGS="$CFLAGS -O0" - CXXFLAGS="$CXXFLAGS -O0" - fi -else - PHP_DEBUG=0 - ZEND_DEBUG=no -fi - -PHP_ARG_WITH(layout,[layout of installed files], -[ --with-layout=TYPE Set how installed files will be laid out. Type is - one of "PHP" or "GNU" [TYPE=PHP]], PHP, no) - -case $PHP_LAYOUT in - GNU) - oldstyleextdir=no - ;; - *) - oldstyleextdir=yes - ;; -esac - -PHP_ARG_WITH(config-file-path,[path to configuration file], -[ --with-config-file-path=PATH - Set the path in which to look for php.ini - [PREFIX/lib]], DEFAULT, no) - -if test "$PHP_CONFIG_FILE_PATH" = "DEFAULT"; then - case $PHP_LAYOUT in - GNU) - PHP_CONFIG_FILE_PATH=$sysconfdir - ;; - *) - PHP_CONFIG_FILE_PATH=$libdir - ;; - esac -fi - -PHP_ARG_WITH(config-file-scan-dir,[where to scan for configuration files], -[ --with-config-file-scan-dir=PATH - Set the path where to scan for configuration files], DEFAULT, no) -if test "$PHP_CONFIG_FILE_SCAN_DIR" = "DEFAULT"; then - PHP_CONFIG_FILE_SCAN_DIR= -fi - -test -n "$DEBUG_CFLAGS" && CFLAGS="$CFLAGS $DEBUG_CFLAGS" - -PHP_ARG_ENABLE(sigchild,whether to enable PHP's own SIGCHLD handler, -[ --enable-sigchild Enable PHP's own SIGCHLD handler], no, no) - -if test "$PHP_SIGCHILD" = "yes"; then - AC_DEFINE(PHP_SIGCHILD, 1, [ ]) -else - AC_DEFINE(PHP_SIGCHILD, 0, [ ]) -fi - -PHP_ARG_ENABLE(rpath, whether to enable runpaths, -[ --disable-rpath Disable passing additional runtime library - search paths], yes, no) - -PHP_ARG_ENABLE(libgcc, whether to explicitly link against libgcc, -[ --enable-libgcc Enable explicitly linking against libgcc], no, no) - -if test "$PHP_LIBGCC" = "yes"; then - PHP_LIBGCC_LIBPATH(gcc) - if test -z "$libgcc_libpath"; then - AC_MSG_ERROR([Cannot locate libgcc. Make sure that gcc is in your path]) - fi - PHP_ADD_LIBPATH($libgcc_libpath) - PHP_ADD_LIBRARY(gcc, yes) -fi - -PHP_ARG_ENABLE(short-tags,whether to enable short tags by default, -[ --disable-short-tags Disable the short-form meta_ccld<' > TSRM/tsrm_config.h - -test -d Zend || $php_shtool mkdir Zend - -cat >Zend/zend_config.h < -#if defined(APACHE) && defined(PHP_API_VERSION) -#undef HAVE_DLFCN_H -#endif -FEO - -# run this only when generating all the files? -if test -n "\$REDO_ALL"; then - # Hacking while airborne considered harmful. - # - echo "creating main/internal_functions.c" - extensions="$EXT_STATIC" -dnl mv -f main/internal_functions.c main/internal_functions.c.old 2>/dev/null - sh $srcdir/build/genif.sh $srcdir/main/internal_functions.c.in $srcdir "$EXTRA_MODULE_PTRS" $AWK \$extensions > main/internal_functions.c - - echo "creating main/internal_functions_cli.c" - cli_extensions="$EXT_CLI_STATIC" - sh $srcdir/build/genif.sh $srcdir/main/internal_functions.c.in $srcdir "$EXTRA_MODULE_PTRS" $AWK \$cli_extensions > main/internal_functions_cli.c - -dnl if cmp main/internal_functions.c.old main/internal_functions.c > /dev/null 2>&1; then -dnl echo "main/internal_functions.c is unchanged" -dnl mv main/internal_functions.c.old main/internal_functions.c -dnl else -dnl rm -f main/internal_functions.c.old -dnl fi - - if test "$UNAME" = "FreeBSD" && test "$PHP_SAPI" = "apache2filter" && test "$TSRM_PTH" != "pth-config" ; then - echo "+--------------------------------------------------------------------+" - echo "| *** WARNING *** |" - echo "| |" - echo "| In order to build PHP as a Apache2 module on FreeBSD, you have to |" - echo "| add --with-tsrm-pth to your ./configure line. Therefore you need |" - echo "| to install gnu-pth from /usr/ports/devel/pth. |" - fi - - if test -n "$PHP_APXS_BROKEN"; then - echo "+--------------------------------------------------------------------+" - echo "| WARNING: Your $APXS script is most likely broken." - echo "| |" - echo "| Please go read http://www.php.net/faq.build#faq.build.apxs |" - echo "| and make the changes described there and try again. |" - fi - - # Warn about CGI version with no extra security options. - if test "$PHP_SAPI" = "cgi"; then - if test "$REDIRECT" = "0"; then - if test "$DISCARD_PATH" = "0"; then - echo "+--------------------------------------------------------------------+" - echo "| *** WARNING *** |" - echo "| |" - echo "| You will be compiling the CGI version of PHP without any |" - echo "| redirection checking. By putting this cgi binary somewhere in |" - echo "| your web space, users may be able to circumvent existing .htaccess |" - echo "| security by loading files directly through the parser. See |" - echo "| http://www.php.net/manual/security.php for more details. |" - fi - fi - fi - - - if test -n "$DEBUG_LOG"; then - rm -f config.cache -cat < processes when using a local Oracle-DB | -| please recompile PHP and specify --enable-sigchild when configuring| -| (This problem has been reported under Linux using Oracle >= 8.1.5) | -X - fi - fi - -cat < | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if HAVE_BCMATH - -#include "php_ini.h" -#include "ext/standard/info.h" -#include "php_bcmath.h" -#include "libbcmath/src/bcmath.h" - -ZEND_DECLARE_MODULE_GLOBALS(bcmath); -static PHP_GINIT_FUNCTION(bcmath); -static PHP_GSHUTDOWN_FUNCTION(bcmath); - -/* {{{ arginfo */ -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_bcadd, 0, 0, 2) - ZEND_ARG_INFO(0, left_operand) - ZEND_ARG_INFO(0, right_operand) - ZEND_ARG_INFO(0, scale) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_bcsub, 0, 0, 2) - ZEND_ARG_INFO(0, left_operand) - ZEND_ARG_INFO(0, right_operand) - ZEND_ARG_INFO(0, scale) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_bcmul, 0, 0, 2) - ZEND_ARG_INFO(0, left_operand) - ZEND_ARG_INFO(0, right_operand) - ZEND_ARG_INFO(0, scale) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_bcdiv, 0, 0, 2) - ZEND_ARG_INFO(0, left_operand) - ZEND_ARG_INFO(0, right_operand) - ZEND_ARG_INFO(0, scale) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_bcmod, 0) - ZEND_ARG_INFO(0, left_operand) - ZEND_ARG_INFO(0, right_operand) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_bcpowmod, 0, 0, 3) - ZEND_ARG_INFO(0, x) - ZEND_ARG_INFO(0, y) - ZEND_ARG_INFO(0, mod) - ZEND_ARG_INFO(0, scale) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_bcpow, 0, 0, 2) - ZEND_ARG_INFO(0, x) - ZEND_ARG_INFO(0, y) - ZEND_ARG_INFO(0, scale) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_bcsqrt, 0, 0, 1) - ZEND_ARG_INFO(0, operand) - ZEND_ARG_INFO(0, scale) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_bccomp, 0, 0, 2) - ZEND_ARG_INFO(0, left_operand) - ZEND_ARG_INFO(0, right_operand) - ZEND_ARG_INFO(0, scale) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_bcscale, 0) - ZEND_ARG_INFO(0, scale) -ZEND_END_ARG_INFO() - -/* }}} */ - -zend_function_entry bcmath_functions[] = { - PHP_FE(bcadd, arginfo_bcadd) - PHP_FE(bcsub, arginfo_bcsub) - PHP_FE(bcmul, arginfo_bcmul) - PHP_FE(bcdiv, arginfo_bcdiv) - PHP_FE(bcmod, arginfo_bcmod) - PHP_FE(bcpow, arginfo_bcpow) - PHP_FE(bcsqrt, arginfo_bcsqrt) - PHP_FE(bcscale, arginfo_bcscale) - PHP_FE(bccomp, arginfo_bccomp) - PHP_FE(bcpowmod, arginfo_bcpowmod) - {NULL, NULL, NULL} -}; - -zend_module_entry bcmath_module_entry = { - STANDARD_MODULE_HEADER, - "bcmath", - bcmath_functions, - PHP_MINIT(bcmath), - PHP_MSHUTDOWN(bcmath), - NULL, - NULL, - PHP_MINFO(bcmath), - NO_VERSION_YET, - PHP_MODULE_GLOBALS(bcmath), - PHP_GINIT(bcmath), - PHP_GSHUTDOWN(bcmath), - NULL, - STANDARD_MODULE_PROPERTIES_EX -}; - -#ifdef COMPILE_DL_BCMATH -ZEND_GET_MODULE(bcmath) -#endif - -/* {{{ PHP_INI */ -PHP_INI_BEGIN() - STD_PHP_INI_ENTRY("bcmath.scale", "0", PHP_INI_ALL, OnUpdateLong, bc_precision, zend_bcmath_globals, bcmath_globals) -PHP_INI_END() -/* }}} */ - -/* {{{ PHP_GINIT_FUNCTION - */ -static PHP_GINIT_FUNCTION(bcmath) -{ - bcmath_globals->bc_precision = 0; - bc_init_numbers(TSRMLS_C); -} -/* }}} */ - -/* {{{ PHP_GSHUTDOWN_FUNCTION - */ -static PHP_GSHUTDOWN_FUNCTION(bcmath) -{ - _bc_free_num_ex(&bcmath_globals->_zero_, 1); - _bc_free_num_ex(&bcmath_globals->_one_, 1); - _bc_free_num_ex(&bcmath_globals->_two_, 1); -} -/* }}} */ - -/* {{{ PHP_MINIT_FUNCTION - */ -PHP_MINIT_FUNCTION(bcmath) -{ - REGISTER_INI_ENTRIES(); - - return SUCCESS; -} -/* }}} */ - -/* {{{ PHP_MSHUTDOWN_FUNCTION - */ -PHP_MSHUTDOWN_FUNCTION(bcmath) -{ - UNREGISTER_INI_ENTRIES(); - - return SUCCESS; -} -/* }}} */ - -/* {{{ PHP_MINFO_FUNCTION - */ -PHP_MINFO_FUNCTION(bcmath) -{ - php_info_print_table_start(); - php_info_print_table_row(2, "BCMath support", "enabled"); - php_info_print_table_end(); -} -/* }}} */ - -/* {{{ php_str2num - Convert to bc_num detecting scale */ -static void php_str2num(bc_num *num, char *str TSRMLS_DC) -{ - char *p; - - if (!(p = strchr(str, '.'))) { - bc_str2num(num, str, 0 TSRMLS_CC); - return; - } - - bc_str2num(num, str, strlen(p+1) TSRMLS_CC); -} -/* }}} */ - - -/* {{{ proto string bcadd(string left_operand, string right_operand [, int scale]) U - Returns the sum of two arbitrary precision numbers */ -PHP_FUNCTION(bcadd) -{ - char *left, *right; - int left_len, right_len; - long scale = BCG(bc_precision); - bc_num first, second, result; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", &left, &left_len, &right, &right_len, &scale) == FAILURE) { - return; - } - - if (scale < 0) { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Invalid scale given, using zero"); - scale = 0; - } - - bc_init_num(&first TSRMLS_CC); - bc_init_num(&second TSRMLS_CC); - bc_init_num(&result TSRMLS_CC); - php_str2num(&first, left TSRMLS_CC); - php_str2num(&second, right TSRMLS_CC); - - bc_add(first, second, &result, scale); - if (result->n_scale > scale) { - result->n_scale = scale; - } - - RETVAL_STRING(bc_num2str(result), 0); - - bc_free_num(&first); - bc_free_num(&second); - bc_free_num(&result); -} -/* }}} */ - -/* {{{ proto string bcsub(string left_operand, string right_operand [, int scale]) U - Returns the difference between two arbitrary precision numbers */ -PHP_FUNCTION(bcsub) -{ - char *left, *right; - int left_len, right_len; - long scale = BCG(bc_precision); - bc_num first, second, result; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", &left, &left_len, &right, &right_len, &scale) == FAILURE) { - return; - } - - if (scale < 0) { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Invalid scale given, using zero"); - scale = 0; - } - - bc_init_num(&first TSRMLS_CC); - bc_init_num(&second TSRMLS_CC); - bc_init_num(&result TSRMLS_CC); - php_str2num(&first, left TSRMLS_CC); - php_str2num(&second, right TSRMLS_CC); - - bc_sub(first, second, &result, scale); - if (result->n_scale > scale) { - result->n_scale = scale; - } - - RETVAL_STRING(bc_num2str(result), 0); - - bc_free_num(&first); - bc_free_num(&second); - bc_free_num(&result); -} -/* }}} */ - -/* {{{ proto string bcmul(string left_operand, string right_operand [, int scale]) U - Returns the multiplication of two arbitrary precision numbers */ -PHP_FUNCTION(bcmul) -{ - char *left, *right; - int left_len, right_len; - long scale = BCG(bc_precision); - bc_num first, second, result; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", &left, &left_len, &right, &right_len, &scale) == FAILURE) { - return; - } - - if (scale < 0) { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Invalid scale given, using zero"); - scale = 0; - } - - bc_init_num(&first TSRMLS_CC); - bc_init_num(&second TSRMLS_CC); - bc_init_num(&result TSRMLS_CC); - php_str2num(&first, left TSRMLS_CC); - php_str2num(&second, right TSRMLS_CC); - - bc_multiply(first, second, &result, scale TSRMLS_CC); - if (result->n_scale > scale) { - result->n_scale = scale; - } - - RETVAL_STRING(bc_num2str(result), 0); - - bc_free_num(&first); - bc_free_num(&second); - bc_free_num(&result); -} -/* }}} */ - -/* {{{ proto string bcdiv(string left_operand, string right_operand [, int scale]) U - Returns the quotient of two arbitrary precision numbers (division) */ -PHP_FUNCTION(bcdiv) -{ - char *left, *right; - int left_len, right_len; - long scale = BCG(bc_precision); - bc_num first, second, result; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", &left, &left_len, &right, &right_len, &scale) == FAILURE) { - return; - } - - if (scale < 0) { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Invalid scale given, using zero"); - scale = 0; - } - - bc_init_num(&first TSRMLS_CC); - bc_init_num(&second TSRMLS_CC); - bc_init_num(&result TSRMLS_CC); - php_str2num(&first, left TSRMLS_CC); - php_str2num(&second, right TSRMLS_CC); - - if (bc_divide(first, second, &result, scale TSRMLS_CC) == 0) { - if (result->n_scale > scale) { - result->n_scale = scale; - } - RETVAL_STRING(bc_num2str(result), 0); - } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Division by zero"); - RETVAL_NULL(); - } - - bc_free_num(&first); - bc_free_num(&second); - bc_free_num(&result); -} -/* }}} */ - -/* {{{ proto string bcmod(string left_operand, string right_operand) U - Returns the modulus of the two arbitrary precision operands */ -PHP_FUNCTION(bcmod) -{ - char *left, *right; - int left_len, right_len; - bc_num first, second, result; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &left, &left_len, &right, &right_len) == FAILURE) { - return; - } - - bc_init_num(&first TSRMLS_CC); - bc_init_num(&second TSRMLS_CC); - bc_init_num(&result TSRMLS_CC); - php_str2num(&first, left TSRMLS_CC); - php_str2num(&second, right TSRMLS_CC); - - if (bc_modulo(first, second, &result, 0 TSRMLS_CC) == 0) { - RETVAL_STRING(bc_num2str(result), 0); - } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Division by zero"); - RETVAL_NULL(); - } - - bc_free_num(&first); - bc_free_num(&second); - bc_free_num(&result); -} -/* }}} */ - -/* {{{ proto string bcpowmod(string x, string y, string mod [, int scale]) U - Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous */ -PHP_FUNCTION(bcpowmod) -{ - char *left, *right, *modulous; - int left_len, right_len, modulous_len; - bc_num first, second, mod, result; - long scale = BCG(bc_precision); - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss|l", &left, &left_len, &right, &right_len, &modulous, &modulous_len, &scale) == FAILURE) { - return; - } - - if (scale < 0) { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Invalid scale given, using zero"); - scale = 0; - } - - bc_init_num(&first TSRMLS_CC); - bc_init_num(&second TSRMLS_CC); - bc_init_num(&mod TSRMLS_CC); - bc_init_num(&result TSRMLS_CC); - php_str2num(&first, left TSRMLS_CC); - php_str2num(&second, right TSRMLS_CC); - php_str2num(&mod, modulous TSRMLS_CC); - if (bc_raisemod(first, second, mod, &result, scale TSRMLS_CC) == 0) { - if (result->n_scale > scale) { - result->n_scale = scale; - } - RETVAL_STRING(bc_num2str(result), 0); - } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Division by zero"); - RETVAL_NULL(); - } - - - bc_free_num(&first); - bc_free_num(&second); - bc_free_num(&mod); - bc_free_num(&result); -} -/* }}} */ - -/* {{{ proto string bcpow(string x, string y [, int scale]) U - Returns the value of an arbitrary precision number raised to the power of another */ -PHP_FUNCTION(bcpow) -{ - char *left, *right; - int left_len, right_len; - long scale = BCG(bc_precision); - bc_num first, second, result; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", &left, &left_len, &right, &right_len, &scale) == FAILURE) { - return; - } - - if (scale < 0) { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Invalid scale given, using zero"); - scale = 0; - } - - bc_init_num(&first TSRMLS_CC); - bc_init_num(&second TSRMLS_CC); - bc_init_num(&result TSRMLS_CC); - php_str2num(&first, left TSRMLS_CC); - php_str2num(&second, right TSRMLS_CC); - - bc_raise (first, second, &result, scale TSRMLS_CC); - if (result->n_scale > scale) { - result->n_scale = scale; - } - if (result->n_scale > scale) { - result->n_scale = scale; - } - RETVAL_STRING(bc_num2str(result), 0); - - bc_free_num(&first); - bc_free_num(&second); - bc_free_num(&result); -} -/* }}} */ - -/* {{{ proto string bcsqrt(string operand [, int scale]) U - Returns the square root of an arbitray precision number */ -PHP_FUNCTION(bcsqrt) -{ - char *operand; - int operand_len; - long scale = BCG(bc_precision); - bc_num result; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &operand, &operand_len, &scale) == FAILURE) { - return; - } - - if (scale < 0) { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Invalid scale given, using zero"); - scale = 0; - } - - bc_init_num(&result TSRMLS_CC); - php_str2num(&result, operand TSRMLS_CC); - if (bc_sqrt (&result, scale TSRMLS_CC) != 0) { - if (result->n_scale > scale) { - result->n_scale = scale; - } - RETVAL_STRING(bc_num2str(result), 0); - } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Square root of negative number"); - RETVAL_NULL(); - } - bc_free_num(&result); -} -/* }}} */ - -/* {{{ proto int bccomp(string left_operand, string right_operand [, int scale]) U - Compares two arbitrary precision numbers */ -PHP_FUNCTION(bccomp) -{ - char *left, *right; - int left_len, right_len; - long scale = BCG(bc_precision); - bc_num first, second; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", &left, &left_len, &right, &right_len, &scale) == FAILURE) { - return; - } - - if (scale < 0) { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Invalid scale given, using zero"); - scale = 0; - } - - bc_init_num(&first TSRMLS_CC); - bc_init_num(&second TSRMLS_CC); - - bc_str2num(&first, left, scale TSRMLS_CC); - bc_str2num(&second, right, scale TSRMLS_CC); - - RETVAL_LONG(bc_compare(first, second)); - - bc_free_num(&first); - bc_free_num(&second); -} -/* }}} */ - -/* {{{ proto bool bcscale(int scale) U - Sets default scale parameter for all bc math functions */ -PHP_FUNCTION(bcscale) -{ - long scale; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &scale) == FAILURE) { - return; - } - - if (scale < 0) { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Invalid scale given, using zero"); - scale = 0; - } - - BCG(bc_precision) = scale; - - RETURN_TRUE; -} -/* }}} */ - - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/bcmath/config.m4 b/ext/bcmath/config.m4 deleted file mode 100644 index 3a4ad8c3b3dc0..0000000000000 --- a/ext/bcmath/config.m4 +++ /dev/null @@ -1,17 +0,0 @@ -dnl -dnl $Id$ -dnl - -PHP_ARG_ENABLE(bcmath, whether to enable bc style precision math functions, -[ --enable-bcmath Enable bc style precision math functions]) - -if test "$PHP_BCMATH" != "no"; then - PHP_NEW_EXTENSION(bcmath, bcmath.c \ -libbcmath/src/add.c libbcmath/src/div.c libbcmath/src/init.c libbcmath/src/neg.c libbcmath/src/outofmem.c libbcmath/src/raisemod.c libbcmath/src/rt.c libbcmath/src/sub.c \ -libbcmath/src/compare.c libbcmath/src/divmod.c libbcmath/src/int2num.c libbcmath/src/num2long.c libbcmath/src/output.c libbcmath/src/recmul.c \ -libbcmath/src/sqrt.c libbcmath/src/zero.c libbcmath/src/debug.c libbcmath/src/doaddsub.c libbcmath/src/nearzero.c libbcmath/src/num2str.c libbcmath/src/raise.c \ -libbcmath/src/rmzero.c libbcmath/src/str2num.c, - $ext_shared,,-I@ext_srcdir@/libbcmath/src) - PHP_ADD_BUILD_DIR($ext_builddir/libbcmath/src) - AC_DEFINE(HAVE_BCMATH, 1, [Whether you have bcmath]) -fi diff --git a/ext/bcmath/config.w32 b/ext/bcmath/config.w32 deleted file mode 100644 index 3579eadfae798..0000000000000 --- a/ext/bcmath/config.w32 +++ /dev/null @@ -1,14 +0,0 @@ -// $Id$ -// vim:ft=javascript - -ARG_ENABLE("bcmath", "bc style precision math functions", "yes"); - -if (PHP_BCMATH == "yes") { - EXTENSION("bcmath", "bcmath.c", null, "-Iext/bcmath/libbcmath/src"); - ADD_SOURCES("ext/bcmath/libbcmath/src", "add.c div.c init.c neg.c \ - outofmem.c raisemod.c rt.c sub.c compare.c divmod.c int2num.c \ - num2long.c output.c recmul.c sqrt.c zero.c debug.c doaddsub.c \ - nearzero.c num2str.c raise.c rmzero.c str2num.c", "bcmath"); - - AC_DEFINE('HAVE_BCMATH', 1, 'Have BCMATH library'); -} diff --git a/ext/bcmath/libbcmath/AUTHORS b/ext/bcmath/libbcmath/AUTHORS deleted file mode 100644 index 982db9dc405e3..0000000000000 --- a/ext/bcmath/libbcmath/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -Phil Nelson wrote bcmath library. - - diff --git a/ext/bcmath/libbcmath/COPYING.LIB b/ext/bcmath/libbcmath/COPYING.LIB deleted file mode 100644 index c4792dd27a32d..0000000000000 --- a/ext/bcmath/libbcmath/COPYING.LIB +++ /dev/null @@ -1,515 +0,0 @@ - - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations -below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. -^L - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it -becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. -^L - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control -compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. -^L - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. -^L - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. -^L - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. -^L - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply, and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License -may add an explicit geographical distribution limitation excluding those -countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. -^L - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS -^L - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms -of the ordinary General Public License). - - To apply these terms, attach the following notices to the library. -It is safest to attach them to the start of each source file to most -effectively convey the exclusion of warranty; and each file should -have at least the "copyright" line and a pointer to where the full -notice is found. - - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper -mail. - -You should also get your employer (if you work as a programmer) or -your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James -Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/ext/bcmath/libbcmath/ChangeLog b/ext/bcmath/libbcmath/ChangeLog deleted file mode 100644 index b8d459a2bbfe0..0000000000000 --- a/ext/bcmath/libbcmath/ChangeLog +++ /dev/null @@ -1,10 +0,0 @@ -Wed Jun 7 09:39:02 2000 Phil Nelson - - * configure.in and many others: version number now at 0.2. - Many other changes/additions for getting a distribution - to work. - -2000-05-21 Phil Nelson - - * Initial setup of bcmath library., calling it version 0.1. - diff --git a/ext/bcmath/libbcmath/FAQ b/ext/bcmath/libbcmath/FAQ deleted file mode 100644 index 6499b1cffb53e..0000000000000 --- a/ext/bcmath/libbcmath/FAQ +++ /dev/null @@ -1,21 +0,0 @@ -BCMATH FAQ: - -1) Why BCMATH? - -The math routines of GNU bc become more generally useful in a -library form. By separating the BCMATH library from GNU bc, -GNU bc can be under the GPL and BCMATH can be under the LGPL. - -2) Why BCMATH when GMP exists? - -GMP has "integers" (no digits after a decimal), "rational numbers" -(stored as 2 integers) and "floats". None of these will correctly -represent a POSIX BC number. Floats are the closest, but will not -behave correctly for many computations. For example, BC numbers have -a "scale" that represent the number of digits to represent after the -decimal point. The multiplying two of these numbers requires one to -calculate an exact number of digits after the decimal point regardless -of the number of digits in the integer part. GMP floats have a -"fixed, but arbitrary" mantissa and so multiplying two floats will end -up dropping digits BC must calculate. - diff --git a/ext/bcmath/libbcmath/INSTALL b/ext/bcmath/libbcmath/INSTALL deleted file mode 100644 index 8893a0782735e..0000000000000 --- a/ext/bcmath/libbcmath/INSTALL +++ /dev/null @@ -1,9 +0,0 @@ -Currently, only libbcmath.a is built. To build and install it, do - - configure - make - make install - -Typical configure parameters are available. (e.g. PREFIX) - -Bugs and comments to philnelson@acm.org. diff --git a/ext/bcmath/libbcmath/Makefile.am b/ext/bcmath/libbcmath/Makefile.am deleted file mode 100644 index e5be8201b3110..0000000000000 --- a/ext/bcmath/libbcmath/Makefile.am +++ /dev/null @@ -1,12 +0,0 @@ -## Process this file with automake to produce Makefile.in - -SUBDIRS= src doc - -MAINTAINERCLEANFILES = aclocal.m4 config.h.in configure Makefile.in \ - stamp-h.in *~ - -dist-hook: - cp $(srcdir)/doc/bcmath.1 $(distdir)/doc - cp $(srcdir)/src/private.h $(distdir)/src - cp $(srcdir)/FAQ $(distdir) - diff --git a/ext/bcmath/libbcmath/NEWS b/ext/bcmath/libbcmath/NEWS deleted file mode 100644 index 431d7b315d17f..0000000000000 --- a/ext/bcmath/libbcmath/NEWS +++ /dev/null @@ -1,3 +0,0 @@ -NEWS for bcmath library: - - May 2000: The library is created. diff --git a/ext/bcmath/libbcmath/README b/ext/bcmath/libbcmath/README deleted file mode 100644 index cae5e5dc431d7..0000000000000 --- a/ext/bcmath/libbcmath/README +++ /dev/null @@ -1,9 +0,0 @@ -This is bcmath, a library of arbitrary precision math routines. -These routines, in a different form, are the routines that to -the arbitrary precision calculations for GNU bc and GNU dc. - -This library is provided to make these routines useful in a -larger context with less restrictions on the use of them. - -These routines do not duplicate functionality of the GNU gmp -library. gmp is similar, but the actual computation is different. diff --git a/ext/bcmath/libbcmath/acconfig.h b/ext/bcmath/libbcmath/acconfig.h deleted file mode 100644 index 4d301dcacf2a0..0000000000000 --- a/ext/bcmath/libbcmath/acconfig.h +++ /dev/null @@ -1,9 +0,0 @@ -/* PACKAGE name */ -#undef PACKAGE - -/* Package VERSION number */ -#undef VERSION - -/* Define to `size_t' if and don't define. */ -#undef ptrdiff_t - diff --git a/ext/bcmath/libbcmath/aclocal.m4 b/ext/bcmath/libbcmath/aclocal.m4 deleted file mode 100644 index e60c9eb55c786..0000000000000 --- a/ext/bcmath/libbcmath/aclocal.m4 +++ /dev/null @@ -1,127 +0,0 @@ -dnl aclocal.m4 generated automatically by aclocal 1.4 - -dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl This program is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without -dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A -dnl PARTICULAR PURPOSE. - -# Do all the work for Automake. This macro actually does too much -- -# some checks are only needed if your package does certain things. -# But this isn't really a big deal. - -# serial 1 - -dnl Usage: -dnl AM_INIT_AUTOMAKE(package,version, [no-define]) - -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_REQUIRE([AC_PROG_INSTALL]) -PACKAGE=[$1] -AC_SUBST(PACKAGE) -VERSION=[$2] -AC_SUBST(VERSION) -dnl test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) -fi -ifelse([$3],, -AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) -AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) -AC_REQUIRE([AM_SANITY_CHECK]) -AC_REQUIRE([AC_ARG_PROGRAM]) -dnl FIXME This is truly gross. -missing_dir=`cd $ac_aux_dir && pwd` -AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) -AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) -AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) -AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) -AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) -AC_REQUIRE([AC_PROG_MAKE_SET])]) - -# -# Check to make sure that the build environment is sane. -# - -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftestfile -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` - if test "[$]*" = "X"; then - # -L didn't work. - set X `ls -t $srcdir/configure conftestfile` - fi - if test "[$]*" != "X $srcdir/configure conftestfile" \ - && test "[$]*" != "X conftestfile $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi - - test "[$]2" = conftestfile - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -rm -f conftest* -AC_MSG_RESULT(yes)]) - -dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) -dnl The program must properly implement --version. -AC_DEFUN([AM_MISSING_PROG], -[AC_MSG_CHECKING(for working $2) -# Run test in a subshell; some versions of sh will print an error if -# an executable is not found, even if stderr is redirected. -# Redirect stdin to placate older versions of autoconf. Sigh. -if ($2 --version) < /dev/null > /dev/null 2>&1; then - $1=$2 - AC_MSG_RESULT(found) -else - $1="$3/missing $2" - AC_MSG_RESULT(missing) -fi -AC_SUBST($1)]) - -# Like AC_CONFIG_HEADER, but automatically create stamp file. - -AC_DEFUN([AM_CONFIG_HEADER], -[AC_PREREQ([2.12]) -AC_CONFIG_HEADER([$1]) -dnl When config.status generates a header, we must update the stamp-h file. -dnl This file resides in the same directory as the config header -dnl that is generated. We must strip everything past the first ":", -dnl and everything past the last "/". -AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl -ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>, -<>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>, -<>; do - case " <<$>>CONFIG_HEADERS " in - *" <<$>>am_file "*<<)>> - echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx - ;; - esac - am_indx=`expr "<<$>>am_indx" + 1` -done<<>>dnl>>) -changequote([,]))]) - diff --git a/ext/bcmath/libbcmath/config.h.in b/ext/bcmath/libbcmath/config.h.in deleted file mode 100644 index 21cfb9255f9fb..0000000000000 --- a/ext/bcmath/libbcmath/config.h.in +++ /dev/null @@ -1,41 +0,0 @@ -/* config.h.in. Generated automatically from configure.in by autoheader. */ - -/* Define to empty if the keyword does not work. */ -#undef const - -/* Define to `unsigned' if doesn't define. */ -#undef size_t - -/* Define if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define to `size_t' if and don't define. */ -#undef ptrdiff_t - -/* Define if you have the header file. */ -#undef HAVE_LIB_H - -/* Define if you have the header file. */ -#undef HAVE_LIMITS_H - -/* Define if you have the header file. */ -#undef HAVE_STDARG_H - -/* Define if you have the header file. */ -#undef HAVE_STDDEF_H - -/* Define if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define if you have the header file. */ -#undef HAVE_STRING_H - -/* Define if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Name of package */ -#undef PACKAGE - -/* Version number of package */ -#undef VERSION - diff --git a/ext/bcmath/libbcmath/configure b/ext/bcmath/libbcmath/configure deleted file mode 100644 index 026fd039c78d5..0000000000000 --- a/ext/bcmath/libbcmath/configure +++ /dev/null @@ -1,1859 +0,0 @@ -#! /bin/sh - -# Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.13 -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. - -# Defaults: -ac_help= -ac_default_prefix=/usr/local -# Any additions from configure.in: - -# Initialize some variables set by options. -# The variables have the same names as the options, with -# dashes changed to underlines. -build=NONE -cache_file=./config.cache -exec_prefix=NONE -host=NONE -no_create= -nonopt=NONE -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -target=NONE -verbose= -x_includes=NONE -x_libraries=NONE -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' -includedir='${prefix}/include' -oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} -# Maximum number of lines to put in a shell here document. -ac_max_here_lines=12 - -ac_prev= -for ac_option -do - - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" - ac_prev= - continue - fi - - case "$ac_option" in - -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) ac_optarg= ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case "$ac_option" in - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir="$ac_optarg" ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$ac_optarg" ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file="$ac_optarg" ;; - - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir="$ac_optarg" ;; - - -disable-* | --disable-*) - ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; - - -enable-* | --enable-*) - ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "enable_${ac_feature}='$ac_optarg'" ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix="$ac_optarg" ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he) - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat << EOF -Usage: configure [options] [host] -Options: [defaults in brackets after descriptions] -Configuration: - --cache-file=FILE cache test results in FILE - --help print this message - --no-create do not create output files - --quiet, --silent do not print \`checking...' messages - --version print the version of autoconf that created configure -Directory and file names: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [same as prefix] - --bindir=DIR user executables in DIR [EPREFIX/bin] - --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] - --libexecdir=DIR program executables in DIR [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data in DIR - [PREFIX/share] - --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data in DIR - [PREFIX/com] - --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] - --libdir=DIR object code libraries in DIR [EPREFIX/lib] - --includedir=DIR C header files in DIR [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] - --infodir=DIR info documentation in DIR [PREFIX/info] - --mandir=DIR man documentation in DIR [PREFIX/man] - --srcdir=DIR find the sources in DIR [configure dir or ..] - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM - run sed PROGRAM on installed program names -EOF - cat << EOF -Host type: - --build=BUILD configure for building on BUILD [BUILD=HOST] - --host=HOST configure for HOST [guessed] - --target=TARGET configure for TARGET [TARGET=HOST] -Features and packages: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -EOF - if test -n "$ac_help"; then - echo "--enable and --with options recognized:$ac_help" - fi - exit 0 ;; - - -host | --host | --hos | --ho) - ac_prev=host ;; - -host=* | --host=* | --hos=* | --ho=*) - host="$ac_optarg" ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir="$ac_optarg" ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir="$ac_optarg" ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir="$ac_optarg" ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir="$ac_optarg" ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - localstatedir="$ac_optarg" ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir="$ac_optarg" ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir="$ac_optarg" ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix="$ac_optarg" ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix="$ac_optarg" ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix="$ac_optarg" ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name="$ac_optarg" ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir="$ac_optarg" ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir="$ac_optarg" ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site="$ac_optarg" ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir="$ac_optarg" ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir="$ac_optarg" ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target="$ac_optarg" ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.13" - exit 0 ;; - - -with-* | --with-*) - ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "with_${ac_package}='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`echo $ac_option|sed -e 's/-*without-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=no" ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes="$ac_optarg" ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries="$ac_optarg" ;; - - -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } - ;; - - *) - if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then - echo "configure: warning: $ac_option: invalid host type" 1>&2 - fi - if test "x$nonopt" != xNONE; then - { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } - fi - nonopt="$ac_option" - ;; - - esac -done - -if test -n "$ac_prev"; then - { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } -fi - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 6 checking for... messages and results -# 5 compiler messages saved in config.log -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 -fi -exec 5>./config.log - -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -" 1>&5 - -# Strip out --no-create and --no-recursion so they do not pile up. -# Also quote any args containing shell metacharacters. -ac_configure_args= -for ac_arg -do - case "$ac_arg" in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ac_configure_args="$ac_configure_args '$ac_arg'" ;; - *) ac_configure_args="$ac_configure_args $ac_arg" ;; - esac -done - -# NLS nuisances. -# Only set these to C if already set. These must not be set unconditionally -# because not all systems understand e.g. LANG=C (notably SCO). -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! -# Non-C LC_CTYPE values break the ctype check. -if test "${LANG+set}" = set; then LANG=C; export LANG; fi -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi -if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo > confdefs.h - -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file=doc/bcmath.1 - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then its parent. - ac_prog=$0 - ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. - srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } - else - { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } - fi -fi -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` - -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - echo "loading cache $cache_file" - . $cache_file -else - echo "creating cache $cache_file" - > $cache_file -fi - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -ac_exeext= -ac_objext=o -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ac_n= ac_c=' -' ac_t=' ' - else - ac_n=-n ac_c= ac_t= - fi -else - ac_n= ac_c='\c' ac_t= -fi - - -ac_aux_dir= -for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do - if test -f $ac_dir/install-sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f $ac_dir/install.sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - fi -done -if test -z "$ac_aux_dir"; then - { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } -fi -ac_config_guess=$ac_aux_dir/config.guess -ac_config_sub=$ac_aux_dir/config.sub -ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# ./install, which can be erroneously created by make from ./install.sh. -echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:556: checking for a BSD compatible install" >&5 -if test -z "$INSTALL"; then -if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" - for ac_dir in $PATH; do - # Account for people who put trailing slashes in PATH elements. - case "$ac_dir/" in - /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - if test -f $ac_dir/$ac_prog; then - if test $ac_prog = install && - grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - else - ac_cv_path_install="$ac_dir/$ac_prog -c" - break 2 - fi - fi - done - ;; - esac - done - IFS="$ac_save_IFS" - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL="$ac_cv_path_install" - else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the path is relative. - INSTALL="$ac_install_sh" - fi -fi -echo "$ac_t""$INSTALL" 1>&6 - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 -echo "configure:609: checking whether build environment is sane" >&5 -# Just in case -sleep 1 -echo timestamp > conftestfile -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t $srcdir/configure conftestfile` - fi - if test "$*" != "X $srcdir/configure conftestfile" \ - && test "$*" != "X conftestfile $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - { echo "configure: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" 1>&2; exit 1; } - fi - - test "$2" = conftestfile - ) -then - # Ok. - : -else - { echo "configure: error: newly created file is older than distributed files! -Check your system clock" 1>&2; exit 1; } -fi -rm -f conftest* -echo "$ac_t""yes" 1>&6 -if test "$program_transform_name" = s,x,x,; then - program_transform_name= -else - # Double any \ or $. echo might interpret backslashes. - cat <<\EOF_SED > conftestsed -s,\\,\\\\,g; s,\$,$$,g -EOF_SED - program_transform_name="`echo $program_transform_name|sed -f conftestsed`" - rm -f conftestsed -fi -test "$program_prefix" != NONE && - program_transform_name="s,^,${program_prefix},; $program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" - -# sed with no file args requires a program. -test "$program_transform_name" = "" && program_transform_name="s,x,x," - -echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 -echo "configure:666: checking whether ${MAKE-make} sets \${MAKE}" >&5 -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftestmake <<\EOF -all: - @echo 'ac_maketemp="${MAKE}"' -EOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` -if test -n "$ac_maketemp"; then - eval ac_cv_prog_make_${ac_make}_set=yes -else - eval ac_cv_prog_make_${ac_make}_set=no -fi -rm -f conftestmake -fi -if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$ac_t""yes" 1>&6 - SET_MAKE= -else - echo "$ac_t""no" 1>&6 - SET_MAKE="MAKE=${MAKE-make}" -fi - - -PACKAGE="bcmath" - -VERSION="0.2" - -if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then - { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } -fi -cat >> confdefs.h <> confdefs.h <&6 -echo "configure:712: checking for working aclocal" >&5 -# Run test in a subshell; some versions of sh will print an error if -# an executable is not found, even if stderr is redirected. -# Redirect stdin to placate older versions of autoconf. Sigh. -if (aclocal --version) < /dev/null > /dev/null 2>&1; then - ACLOCAL=aclocal - echo "$ac_t""found" 1>&6 -else - ACLOCAL="$missing_dir/missing aclocal" - echo "$ac_t""missing" 1>&6 -fi - -echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 -echo "configure:725: checking for working autoconf" >&5 -# Run test in a subshell; some versions of sh will print an error if -# an executable is not found, even if stderr is redirected. -# Redirect stdin to placate older versions of autoconf. Sigh. -if (autoconf --version) < /dev/null > /dev/null 2>&1; then - AUTOCONF=autoconf - echo "$ac_t""found" 1>&6 -else - AUTOCONF="$missing_dir/missing autoconf" - echo "$ac_t""missing" 1>&6 -fi - -echo $ac_n "checking for working automake""... $ac_c" 1>&6 -echo "configure:738: checking for working automake" >&5 -# Run test in a subshell; some versions of sh will print an error if -# an executable is not found, even if stderr is redirected. -# Redirect stdin to placate older versions of autoconf. Sigh. -if (automake --version) < /dev/null > /dev/null 2>&1; then - AUTOMAKE=automake - echo "$ac_t""found" 1>&6 -else - AUTOMAKE="$missing_dir/missing automake" - echo "$ac_t""missing" 1>&6 -fi - -echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 -echo "configure:751: checking for working autoheader" >&5 -# Run test in a subshell; some versions of sh will print an error if -# an executable is not found, even if stderr is redirected. -# Redirect stdin to placate older versions of autoconf. Sigh. -if (autoheader --version) < /dev/null > /dev/null 2>&1; then - AUTOHEADER=autoheader - echo "$ac_t""found" 1>&6 -else - AUTOHEADER="$missing_dir/missing autoheader" - echo "$ac_t""missing" 1>&6 -fi - -echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 -echo "configure:764: checking for working makeinfo" >&5 -# Run test in a subshell; some versions of sh will print an error if -# an executable is not found, even if stderr is redirected. -# Redirect stdin to placate older versions of autoconf. Sigh. -if (makeinfo --version) < /dev/null > /dev/null 2>&1; then - MAKEINFO=makeinfo - echo "$ac_t""found" 1>&6 -else - MAKEINFO="$missing_dir/missing makeinfo" - echo "$ac_t""missing" 1>&6 -fi - - - - - - -# Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:784: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="gcc" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:814: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_prog_rejected=no - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - break - fi - done - IFS="$ac_save_ifs" -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# -gt 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - set dummy "$ac_dir/$ac_word" "$@" - shift - ac_cv_prog_CC="$@" - fi -fi -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - if test -z "$CC"; then - case "`uname -s`" in - *win32* | *WIN32*) - # Extract the first word of "cl", so it can be a program name with args. -set dummy cl; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:865: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="cl" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - ;; - esac - fi - test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } -fi - -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:897: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -cat > conftest.$ac_ext << EOF - -#line 908 "configure" -#include "confdefs.h" - -main(){return(0);} -EOF -if { (eval echo configure:913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - ac_cv_prog_cc_works=yes - # If we can't run a trivial program, we are probably using a cross compiler. - if (./conftest; exit) 2>/dev/null; then - ac_cv_prog_cc_cross=no - else - ac_cv_prog_cc_cross=yes - fi -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - ac_cv_prog_cc_works=no -fi -rm -fr conftest* -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 -if test $ac_cv_prog_cc_works = no; then - { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } -fi -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:939: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 -echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 -cross_compiling=$ac_cv_prog_cc_cross - -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:944: checking whether we are using GNU C" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - ac_cv_prog_gcc=yes -else - ac_cv_prog_gcc=no -fi -fi - -echo "$ac_t""$ac_cv_prog_gcc" 1>&6 - -if test $ac_cv_prog_gcc = yes; then - GCC=yes -else - GCC= -fi - -ac_test_CFLAGS="${CFLAGS+set}" -ac_save_CFLAGS="$CFLAGS" -CFLAGS= -echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:972: checking whether ${CC-cc} accepts -g" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - echo 'void f(){}' > conftest.c -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then - ac_cv_prog_cc_g=yes -else - ac_cv_prog_cc_g=no -fi -rm -f conftest* - -fi - -echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 -if test "$ac_test_CFLAGS" = set; then - CFLAGS="$ac_save_CFLAGS" -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi - - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# ./install, which can be erroneously created by make from ./install.sh. -echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1016: checking for a BSD compatible install" >&5 -if test -z "$INSTALL"; then -if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" - for ac_dir in $PATH; do - # Account for people who put trailing slashes in PATH elements. - case "$ac_dir/" in - /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - if test -f $ac_dir/$ac_prog; then - if test $ac_prog = install && - grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - else - ac_cv_path_install="$ac_dir/$ac_prog -c" - break 2 - fi - fi - done - ;; - esac - done - IFS="$ac_save_IFS" - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL="$ac_cv_path_install" - else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the path is relative. - INSTALL="$ac_install_sh" - fi -fi -echo "$ac_t""$INSTALL" 1>&6 - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -# Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1071: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_RANLIB="ranlib" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" -fi -fi -RANLIB="$ac_cv_prog_RANLIB" -if test -n "$RANLIB"; then - echo "$ac_t""$RANLIB" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 -echo "configure:1099: checking whether ${MAKE-make} sets \${MAKE}" >&5 -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftestmake <<\EOF -all: - @echo 'ac_maketemp="${MAKE}"' -EOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` -if test -n "$ac_maketemp"; then - eval ac_cv_prog_make_${ac_make}_set=yes -else - eval ac_cv_prog_make_${ac_make}_set=no -fi -rm -f conftestmake -fi -if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$ac_t""yes" 1>&6 - SET_MAKE= -else - echo "$ac_t""no" 1>&6 - SET_MAKE="MAKE=${MAKE-make}" -fi - - -echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1127: checking how to run the C preprocessor" >&5 -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then -if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - # This must be in double quotes, not single quotes, because CPP may get - # substituted into the Makefile and "${CC-cc}" will confuse make. - CPP="${CC-cc} -E" - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. - cat > conftest.$ac_ext < -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1148: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP="${CC-cc} -E -traditional-cpp" - cat > conftest.$ac_ext < -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1165: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP="${CC-cc} -nologo -E" - cat > conftest.$ac_ext < -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1182: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP=/lib/cpp -fi -rm -f conftest* -fi -rm -f conftest* -fi -rm -f conftest* - ac_cv_prog_CPP="$CPP" -fi - CPP="$ac_cv_prog_CPP" -else - ac_cv_prog_CPP="$CPP" -fi -echo "$ac_t""$CPP" 1>&6 - -for ac_hdr in stdarg.h stddef.h stdlib.h string.h limits.h unistd.h lib.h -do -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:1210: checking for $ac_hdr" >&5 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1220: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` - cat >> confdefs.h <&6 -fi -done - -echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:1247: checking for working const" >&5 -if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <j = 5; -} -{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; -} - -; return 0; } -EOF -if { (eval echo configure:1301: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_c_const=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_c_const=no -fi -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_c_const" 1>&6 -if test $ac_cv_c_const = no; then - cat >> confdefs.h <<\EOF -#define const -EOF - -fi - -echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1322: checking for ANSI C header files" >&5 -if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -#include -#include -#include -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1335: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - rm -rf conftest* - ac_cv_header_stdc=yes -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_header_stdc=no -fi -rm -f conftest* - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. -cat > conftest.$ac_ext < -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "memchr" >/dev/null 2>&1; then - : -else - rm -rf conftest* - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. -cat > conftest.$ac_ext < -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "free" >/dev/null 2>&1; then - : -else - rm -rf conftest* - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. -if test "$cross_compiling" = yes; then - : -else - cat > conftest.$ac_ext < -#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int main () { int i; for (i = 0; i < 256; i++) -if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); -exit (0); } - -EOF -if { (eval echo configure:1402: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - : -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_header_stdc=no -fi -rm -fr conftest* -fi - -fi -fi - -echo "$ac_t""$ac_cv_header_stdc" 1>&6 -if test $ac_cv_header_stdc = yes; then - cat >> confdefs.h <<\EOF -#define STDC_HEADERS 1 -EOF - -fi - -echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:1426: checking for size_t" >&5 -if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -#if STDC_HEADERS -#include -#include -#endif -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then - rm -rf conftest* - ac_cv_type_size_t=yes -else - rm -rf conftest* - ac_cv_type_size_t=no -fi -rm -f conftest* - -fi -echo "$ac_t""$ac_cv_type_size_t" 1>&6 -if test $ac_cv_type_size_t = no; then - cat >> confdefs.h <<\EOF -#define size_t unsigned -EOF - -fi - -echo $ac_n "checking for ptrdiff_t""... $ac_c" 1>&6 -echo "configure:1459: checking for ptrdiff_t" >&5 -if eval "test \"`echo '$''{'ac_cv_type_ptrdiff_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -#if STDC_HEADERS -#include -#include -#endif -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "(^|[^a-zA-Z_0-9])ptrdiff_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then - rm -rf conftest* - ac_cv_type_ptrdiff_t=yes -else - rm -rf conftest* - ac_cv_type_ptrdiff_t=no -fi -rm -f conftest* - -fi -echo "$ac_t""$ac_cv_type_ptrdiff_t" 1>&6 -if test $ac_cv_type_ptrdiff_t = no; then - cat >> confdefs.h <<\EOF -#define ptrdiff_t size_t -EOF - -fi - - -trap '' 1 2 15 -cat > confcache <<\EOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs. It is not useful on other systems. -# If it contains results you don't want to keep, you may remove or edit it. -# -# By default, configure uses ./config.cache as the cache file, -# creating it if it does not exist already. You can give configure -# the --cache-file=FILE option to use a different cache file; that is -# what configure does when it calls configure scripts in -# subdirectories, so they share the cache. -# Giving --cache-file=/dev/null disables caching, for debugging configure. -# config.status only pays attention to the cache file if you give it the -# --recheck option to rerun configure. -# -EOF -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -(set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote substitution - # turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - -e "s/'/'\\\\''/g" \ - -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' - ;; - esac >> confcache -if cmp -s $cache_file confcache; then - : -else - if test -w $cache_file; then - echo "updating cache $cache_file" - cat confcache > $cache_file - else - echo "not updating unwritable cache $cache_file" - fi -fi -rm -f confcache - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Any assignment to VPATH causes Sun make to only execute -# the first set of double-colon rules, so remove it if not needed. -# If there is a colon in the path, we need to keep it. -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' -fi - -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 - -DEFS=-DHAVE_CONFIG_H - -# Without the "./", some shells look in PATH for config.status. -: ${CONFIG_STATUS=./config.status} - -echo creating $CONFIG_STATUS -rm -f $CONFIG_STATUS -cat > $CONFIG_STATUS </dev/null | sed 1q`: -# -# $0 $ac_configure_args -# -# Compiler output produced by configure, useful for debugging -# configure, is in ./config.log if it exists. - -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" -for ac_option -do - case "\$ac_option" in - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" - exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; - -version | --version | --versio | --versi | --vers | --ver | --ve | --v) - echo "$CONFIG_STATUS generated by autoconf version 2.13" - exit 0 ;; - -help | --help | --hel | --he | --h) - echo "\$ac_cs_usage"; exit 0 ;; - *) echo "\$ac_cs_usage"; exit 1 ;; - esac -done - -ac_given_srcdir=$srcdir -ac_given_INSTALL="$INSTALL" - -trap 'rm -fr `echo "Makefile src/Makefile doc/Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 -EOF -cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF -$ac_vpsub -$extrasub -s%@SHELL@%$SHELL%g -s%@CFLAGS@%$CFLAGS%g -s%@CPPFLAGS@%$CPPFLAGS%g -s%@CXXFLAGS@%$CXXFLAGS%g -s%@FFLAGS@%$FFLAGS%g -s%@DEFS@%$DEFS%g -s%@LDFLAGS@%$LDFLAGS%g -s%@LIBS@%$LIBS%g -s%@exec_prefix@%$exec_prefix%g -s%@prefix@%$prefix%g -s%@program_transform_name@%$program_transform_name%g -s%@bindir@%$bindir%g -s%@sbindir@%$sbindir%g -s%@libexecdir@%$libexecdir%g -s%@datadir@%$datadir%g -s%@sysconfdir@%$sysconfdir%g -s%@sharedstatedir@%$sharedstatedir%g -s%@localstatedir@%$localstatedir%g -s%@libdir@%$libdir%g -s%@includedir@%$includedir%g -s%@oldincludedir@%$oldincludedir%g -s%@infodir@%$infodir%g -s%@mandir@%$mandir%g -s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g -s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g -s%@INSTALL_DATA@%$INSTALL_DATA%g -s%@PACKAGE@%$PACKAGE%g -s%@VERSION@%$VERSION%g -s%@ACLOCAL@%$ACLOCAL%g -s%@AUTOCONF@%$AUTOCONF%g -s%@AUTOMAKE@%$AUTOMAKE%g -s%@AUTOHEADER@%$AUTOHEADER%g -s%@MAKEINFO@%$MAKEINFO%g -s%@SET_MAKE@%$SET_MAKE%g -s%@CC@%$CC%g -s%@RANLIB@%$RANLIB%g -s%@CPP@%$CPP%g - -CEOF -EOF - -cat >> $CONFIG_STATUS <<\EOF - -# Split the substitutions into bite-sized pieces for seds with -# small command number limits, like on Digital OSF/1 and HP-UX. -ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. -ac_file=1 # Number of current file. -ac_beg=1 # First line for current file. -ac_end=$ac_max_sed_cmds # Line after last line for current file. -ac_more_lines=: -ac_sed_cmds="" -while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file - else - sed "${ac_end}q" conftest.subs > conftest.s$ac_file - fi - if test ! -s conftest.s$ac_file; then - ac_more_lines=false - rm -f conftest.s$ac_file - else - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f conftest.s$ac_file" - else - ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" - fi - ac_file=`expr $ac_file + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_cmds` - fi -done -if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat -fi -EOF - -cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. - - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" - # A "../" for each directory in $ac_dir_suffix. - ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` - else - ac_dir_suffix= ac_dots= - fi - - case "$ac_given_srcdir" in - .) srcdir=. - if test -z "$ac_dots"; then top_srcdir=. - else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; - /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; - *) # Relative path. - srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" - top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - - case "$ac_given_INSTALL" in - [/$]*) INSTALL="$ac_given_INSTALL" ;; - *) INSTALL="$ac_dots$ac_given_INSTALL" ;; - esac - - echo creating "$ac_file" - rm -f "$ac_file" - configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." - case "$ac_file" in - *Makefile*) ac_comsub="1i\\ -# $configure_input" ;; - *) ac_comsub= ;; - esac - - ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` - sed -e "$ac_comsub -s%@configure_input@%$configure_input%g -s%@srcdir@%$srcdir%g -s%@top_srcdir@%$top_srcdir%g -s%@INSTALL@%$INSTALL%g -" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file -fi; done -rm -f conftest.s* - -# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where -# NAME is the cpp macro being defined and VALUE is the value it is being given. -# -# ac_d sets the value in "#define NAME VALUE" lines. -ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' -ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' -ac_dC='\3' -ac_dD='%g' -# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". -ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_uB='\([ ]\)%\1#\2define\3' -ac_uC=' ' -ac_uD='\4%g' -# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_eB='$%\1#\2define\3' -ac_eC=' ' -ac_eD='%g' - -if test "${CONFIG_HEADERS+set}" != set; then -EOF -cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF -fi -for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - echo creating $ac_file - - rm -f conftest.frag conftest.in conftest.out - ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` - cat $ac_file_inputs > conftest.in - -EOF - -# Transform confdefs.h into a sed script conftest.vals that substitutes -# the proper values into config.h.in to produce config.h. And first: -# Protect against being on the right side of a sed subst in config.status. -# Protect against being in an unquoted here document in config.status. -rm -f conftest.vals -cat > conftest.hdr <<\EOF -s/[\\&%]/\\&/g -s%[\\$`]%\\&%g -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp -s%ac_d%ac_u%gp -s%ac_u%ac_e%gp -EOF -sed -n -f conftest.hdr confdefs.h > conftest.vals -rm -f conftest.hdr - -# This sed command replaces #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -cat >> conftest.vals <<\EOF -s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% -EOF - -# Break up conftest.vals because some shells have a limit on -# the size of here documents, and old seds have small limits too. - -rm -f conftest.tail -while : -do - ac_lines=`grep -c . conftest.vals` - # grep -c gives empty output for an empty file on some AIX systems. - if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi - # Write a limited-size here document to conftest.frag. - echo ' cat > conftest.frag <> $CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS - echo 'CEOF - sed -f conftest.frag conftest.in > conftest.out - rm -f conftest.in - mv conftest.out conftest.in -' >> $CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail - rm -f conftest.vals - mv conftest.tail conftest.vals -done -rm -f conftest.vals - -cat >> $CONFIG_STATUS <<\EOF - rm -f conftest.frag conftest.h - echo "/* $ac_file. Generated automatically by configure. */" > conftest.h - cat conftest.in >> conftest.h - rm -f conftest.in - if cmp -s $ac_file conftest.h 2>/dev/null; then - echo "$ac_file is unchanged" - rm -f conftest.h - else - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - fi - rm -f $ac_file - mv conftest.h $ac_file - fi -fi; done - -EOF -cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF -test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h - -exit 0 -EOF -chmod +x $CONFIG_STATUS -rm -fr confdefs* $ac_clean_files -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 - - diff --git a/ext/bcmath/libbcmath/configure.in b/ext/bcmath/libbcmath/configure.in deleted file mode 100644 index 3da89e949f252..0000000000000 --- a/ext/bcmath/libbcmath/configure.in +++ /dev/null @@ -1,18 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -AC_INIT(doc/bcmath.1) -AM_INIT_AUTOMAKE("bcmath", "0.2") -AM_CONFIG_HEADER(config.h) - -AC_PROG_CC - -AC_PROG_INSTALL -AC_PROG_RANLIB -AC_PROG_MAKE_SET - -AC_CHECK_HEADERS(stdarg.h stddef.h stdlib.h string.h limits.h unistd.h lib.h) -AC_C_CONST -AC_TYPE_SIZE_T -AC_CHECK_TYPE(ptrdiff_t, size_t) - -AC_OUTPUT(Makefile src/Makefile doc/Makefile) - diff --git a/ext/bcmath/libbcmath/install-sh b/ext/bcmath/libbcmath/install-sh deleted file mode 100644 index ab74c882e9233..0000000000000 --- a/ext/bcmath/libbcmath/install-sh +++ /dev/null @@ -1,238 +0,0 @@ -#!/bin/sh -# -# install - install a program, script, or datafile -# This comes from X11R5. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. -# - - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" - - -# put in absolute paths if you don't have them in your path; or use env. vars. - -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" -mkdirprog="${MKDIRPROG-mkdir}" - -tranformbasename="" -transform_arg="" -instcmd="$mvprog" -chmodcmd="$chmodprog 0755" -chowncmd="" -chgrpcmd="" -stripcmd="" -rmcmd="$rmprog -f" -mvcmd="$mvprog" -src="" -dst="" -dir_arg="" - -while [ x"$1" != x ]; do - case $1 in - -c) instcmd="$cpprog" - shift - continue;; - - -d) dir_arg=true - shift - continue;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - -s) stripcmd="$stripprog" - shift - continue;; - - -t=*) transformarg=`echo $1 | sed 's/-t=//'` - shift - continue;; - - -b=*) transformbasename=`echo $1 | sed 's/-b=//'` - shift - continue;; - - *) if [ x"$src" = x ] - then - src=$1 - else - # this colon is to work around a 386BSD /bin/sh bug - : - dst=$1 - fi - shift - continue;; - esac -done - -if [ x"$src" = x ] -then - echo "install: no input file specified" - exit 1 -else - true -fi - -if [ x"$dir_arg" != x ]; then - dst=$src - src="" - - if [ -d $dst ]; then - instcmd=: - else - instcmd=mkdir - fi -else - -# Waiting for this to be detected by the "$instcmd $src $dsttmp" command -# might cause directories to be created, which would be especially bad -# if $src (and thus $dsttmp) contains '*'. - - if [ -f $src -o -d $src ] - then - true - else - echo "install: $src does not exist" - exit 1 - fi - - if [ x"$dst" = x ] - then - echo "install: no destination specified" - exit 1 - else - true - fi - -# If destination is a directory, append the input filename; if your system -# does not like double slashes in filenames, you may need to add some logic - - if [ -d $dst ] - then - dst="$dst"/`basename $src` - else - true - fi -fi - -## this sed command emulates the dirname command -dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` - -# Make sure that the destination directory exists. -# this part is taken from Noah Friedman's mkinstalldirs script - -# Skip lots of stat calls in the usual case. -if [ ! -d "$dstdir" ]; then -defaultIFS=' -' -IFS="${IFS-${defaultIFS}}" - -oIFS="${IFS}" -# Some sh's can't handle IFS=/ for some reason. -IFS='%' -set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` -IFS="${oIFS}" - -pathcomp='' - -while [ $# -ne 0 ] ; do - pathcomp="${pathcomp}${1}" - shift - - if [ ! -d "${pathcomp}" ] ; - then - $mkdirprog "${pathcomp}" - else - true - fi - - pathcomp="${pathcomp}/" -done -fi - -if [ x"$dir_arg" != x ] -then - $doit $instcmd $dst && - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi -else - -# If we're going to rename the final executable, determine the name now. - - if [ x"$transformarg" = x ] - then - dstfile=`basename $dst` - else - dstfile=`basename $dst $transformbasename | - sed $transformarg`$transformbasename - fi - -# don't allow the sed command to completely eliminate the filename - - if [ x"$dstfile" = x ] - then - dstfile=`basename $dst` - else - true - fi - -# Make a temp file name in the proper directory. - - dsttmp=$dstdir/#inst.$$# - -# Move or copy the file name to the temp name - - $doit $instcmd $src $dsttmp && - - trap "rm -f ${dsttmp}" 0 && - -# and set any options; do chmod last to preserve setuid bits - -# If any of these fail, we abort the whole thing. If we want to -# ignore errors from any of these, just make sure not to ignore -# errors from the above "$doit $instcmd $src $dsttmp" command. - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && - -# Now rename the file to the real destination. - - $doit $rmcmd -f $dstdir/$dstfile && - $doit $mvcmd $dsttmp $dstdir/$dstfile - -fi && - - -exit 0 diff --git a/ext/bcmath/libbcmath/missing b/ext/bcmath/libbcmath/missing deleted file mode 100644 index e4b838ca924dc..0000000000000 --- a/ext/bcmath/libbcmath/missing +++ /dev/null @@ -1,134 +0,0 @@ -#! /bin/sh -# Common stub for a few missing GNU programs while installing. -# Copyright (C) 1996, 1997 Free Software Foundation, Inc. -# Franc,ois Pinard , 1996. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -if test $# -eq 0; then - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 -fi - -case "$1" in - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - -Supported PROGRAM values: - aclocal touch file \`aclocal.m4' - autoconf touch file \`configure' - autoheader touch file \`config.h.in' - automake touch all \`Makefile.in' files - bison touch file \`y.tab.c' - makeinfo touch the output file - yacc touch file \`y.tab.c'" - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing - GNU libit 0.0" - ;; - - -*) - echo 1>&2 "$0: Unknown \`$1' option" - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 - ;; - - aclocal) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. It should be needed only if - you modified \`acinclude.m4' or \`configure.in'. You might want - to install the \`Automake' and \`Perl' packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. It should be needed only if - you modified \`configure.in'. You might want to install the - \`Autoconf' and \`GNU m4' packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. It should be needed only if - you modified \`acconfig.h' or \`configure.in'. You might want - to install the \`Autoconf' and \`GNU m4' packages. Grab them - from any GNU archive site." - touch config.h.in - ;; - - automake) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. It should be needed only if - you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. - You might want to install the \`Automake' and \`Perl' packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print \ - | sed 's/^\(.*\).am$/touch \1.in/' \ - | sh - ;; - - bison|yacc) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. It should be needed only if - your modified any \`.y' file. For being effective, your - modifications might require the \`Bison' package. Grab it from - any GNU archive site." - touch y.tab.c - ;; - - makeinfo) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. It should be needed only if - you modified a \`.texi' or \`.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy \`make' (AIX, - DU, IRIX). You might want to install the \`Texinfo' package or - the \`GNU make' package. Grab either from any GNU archive site." - file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` - if test -z "$file"; then - file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` - fi - touch $file - ;; - - *) - echo 1>&2 "\ -WARNING: \`$1' is needed, and you do not seem to have it handy on your - system. You might have modified some files without having the - proper tools for further handling them. Check the \`README' file, - it often tells you about the needed prerequirements for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing \`$1' program." - exit 1 - ;; -esac - -exit 0 diff --git a/ext/bcmath/libbcmath/mkinstalldirs b/ext/bcmath/libbcmath/mkinstalldirs deleted file mode 100644 index cc8783edce301..0000000000000 --- a/ext/bcmath/libbcmath/mkinstalldirs +++ /dev/null @@ -1,36 +0,0 @@ -#! /bin/sh -# mkinstalldirs --- make directory hierarchy -# Author: Noah Friedman -# Created: 1993-05-16 -# Last modified: 1994-03-25 -# Public domain - -errstatus=0 - -for file in ${1+"$@"} ; do - set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` - shift - - pathcomp= - for d in ${1+"$@"} ; do - pathcomp="$pathcomp$d" - case "$pathcomp" in - -* ) pathcomp=./$pathcomp ;; - esac - - if test ! -d "$pathcomp"; then - echo "mkdir $pathcomp" 1>&2 - mkdir "$pathcomp" > /dev/null 2>&1 || lasterr=$? - fi - - if test ! -d "$pathcomp"; then - errstatus=$lasterr - fi - - pathcomp="$pathcomp/" - done -done - -exit $errstatus - -# mkinstalldirs ends here diff --git a/ext/bcmath/libbcmath/src/Makefile.am b/ext/bcmath/libbcmath/src/Makefile.am deleted file mode 100644 index fab37d785e23b..0000000000000 --- a/ext/bcmath/libbcmath/src/Makefile.am +++ /dev/null @@ -1,22 +0,0 @@ -# Makefile for bcmath library - -lib_LIBRARIES = libbcmath.a - -include_HEADERS = bcmath.h - -libbcmath_a_SOURCES= add.c compare.c debug.c div.c divmod.c doaddsub.c \ - init.c int2num.c nearzero.c neg.c num2long.c num2str.c output.c \ - raise.c raisemod.c recmul.c rmzero.c sqrt.c str2num.c sub.c zero.c \ - outofmem.c rt.c - -INCLUDES = -I$(srcdir) -I.. - -CFLAGS = @CFLAGS@ -CPPFLAGS = $(INCLUDES) -Wall - -MAINTAINERCLEANFILES= Makefile.in $(libbcmath_a_SOURCES) private.h bcmath.h - -all: $(bin_LIBRARIES) - -clean: - rm -f $(OBJS) $(LIB) *~ diff --git a/ext/bcmath/libbcmath/src/add.c b/ext/bcmath/libbcmath/src/add.c deleted file mode 100644 index 3b09af22b257d..0000000000000 --- a/ext/bcmath/libbcmath/src/add.c +++ /dev/null @@ -1,88 +0,0 @@ -/* add.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - - -/* Here is the full add routine that takes care of negative numbers. - N1 is added to N2 and the result placed into RESULT. SCALE_MIN - is the minimum scale for the result. */ - -void -bc_add (n1, n2, result, scale_min) - bc_num n1, n2, *result; - int scale_min; -{ - bc_num sum = NULL; - int cmp_res; - int res_scale; - - if (n1->n_sign == n2->n_sign) - { - sum = _bc_do_add (n1, n2, scale_min); - sum->n_sign = n1->n_sign; - } - else - { - /* subtraction must be done. */ - cmp_res = _bc_do_compare (n1, n2, FALSE, FALSE); /* Compare magnitudes. */ - switch (cmp_res) - { - case -1: - /* n1 is less than n2, subtract n1 from n2. */ - sum = _bc_do_sub (n2, n1, scale_min); - sum->n_sign = n2->n_sign; - break; - case 0: - /* They are equal! return zero with the correct scale! */ - res_scale = MAX (scale_min, MAX(n1->n_scale, n2->n_scale)); - sum = bc_new_num (1, res_scale); - memset (sum->n_value, 0, res_scale+1); - break; - case 1: - /* n2 is less than n1, subtract n2 from n1. */ - sum = _bc_do_sub (n1, n2, scale_min); - sum->n_sign = n1->n_sign; - } - } - - /* Clean up and return. */ - bc_free_num (result); - *result = sum; -} - diff --git a/ext/bcmath/libbcmath/src/bcmath.h b/ext/bcmath/libbcmath/src/bcmath.h deleted file mode 100644 index ce68f0da4e8ca..0000000000000 --- a/ext/bcmath/libbcmath/src/bcmath.h +++ /dev/null @@ -1,162 +0,0 @@ -/* bcmath.h: bcmath library header. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#ifndef _BCMATH_H_ -#define _BCMATH_H_ - -typedef enum {PLUS, MINUS} sign; - -typedef struct bc_struct *bc_num; - -typedef struct bc_struct - { - sign n_sign; - int n_len; /* The number of digits before the decimal point. */ - int n_scale; /* The number of digits after the decimal point. */ - int n_refs; /* The number of pointers to this number. */ - bc_num n_next; /* Linked list for available list. */ - char *n_ptr; /* The pointer to the actual storage. - If NULL, n_value points to the inside of - another number (bc_multiply...) and should - not be "freed." */ - char *n_value; /* The number. Not zero char terminated. - May not point to the same place as n_ptr as - in the case of leading zeros generated. */ - } bc_struct; - -#ifdef HAVE_CONFIG_H -#include "../../config.h" -#endif - -#include "php.h" -#include "../../php_bcmath.h" - -/* The base used in storing the numbers in n_value above. - Currently this MUST be 10. */ - -#define BASE 10 - -/* Some useful macros and constants. */ - -#define CH_VAL(c) (c - '0') -#define BCD_CHAR(d) (d + '0') - -#ifdef MIN -#undef MIN -#undef MAX -#endif -#define MAX(a, b) ((a)>(b)?(a):(b)) -#define MIN(a, b) ((a)>(b)?(b):(a)) -#define ODD(a) ((a)&1) - -#ifndef TRUE -#define TRUE 1 -#define FALSE 0 -#endif - -#ifndef LONG_MAX -#define LONG_MAX 0x7ffffff -#endif - - -/* Function Prototypes */ - -/* Define the _PROTOTYPE macro if it is needed. */ - -#ifndef _PROTOTYPE -#ifdef __STDC__ -#define _PROTOTYPE(func, args) func args -#else -#define _PROTOTYPE(func, args) func() -#endif -#endif - -_PROTOTYPE(void bc_init_numbers, (TSRMLS_D)); - -_PROTOTYPE(bc_num _bc_new_num_ex, (int length, int scale, int persistent)); - -_PROTOTYPE(void _bc_free_num_ex, (bc_num *num, int persistent)); - -_PROTOTYPE(bc_num bc_copy_num, (bc_num num)); - -_PROTOTYPE(void bc_init_num, (bc_num *num TSRMLS_DC)); - -_PROTOTYPE(void bc_str2num, (bc_num *num, char *str, int scale TSRMLS_DC)); - -_PROTOTYPE(char *bc_num2str, (bc_num num)); - -_PROTOTYPE(void bc_int2num, (bc_num *num, int val)); - -_PROTOTYPE(long bc_num2long, (bc_num num)); - -_PROTOTYPE(int bc_compare, (bc_num n1, bc_num n2)); - -_PROTOTYPE(char bc_is_zero, (bc_num num TSRMLS_DC)); - -_PROTOTYPE(char bc_is_near_zero, (bc_num num, int scale)); - -_PROTOTYPE(char bc_is_neg, (bc_num num)); - -_PROTOTYPE(void bc_add, (bc_num n1, bc_num n2, bc_num *result, int scale_min)); - -_PROTOTYPE(void bc_sub, (bc_num n1, bc_num n2, bc_num *result, int scale_min)); - -_PROTOTYPE(void bc_multiply, (bc_num n1, bc_num n2, bc_num *prod, int scale TSRMLS_DC)); - -_PROTOTYPE(int bc_divide, (bc_num n1, bc_num n2, bc_num *quot, int scale TSRMLS_DC)); - -_PROTOTYPE(int bc_modulo, (bc_num num1, bc_num num2, bc_num *result, - int scale TSRMLS_DC)); - -_PROTOTYPE(int bc_divmod, (bc_num num1, bc_num num2, bc_num *quot, - bc_num *rem, int scale TSRMLS_DC)); - -_PROTOTYPE(int bc_raisemod, (bc_num base, bc_num expo, bc_num mod, - bc_num *result, int scale TSRMLS_DC)); - -_PROTOTYPE(void bc_raise, (bc_num num1, bc_num num2, bc_num *result, - int scale TSRMLS_DC)); - -_PROTOTYPE(int bc_sqrt, (bc_num *num, int scale TSRMLS_DC)); - -_PROTOTYPE(void bc_out_num, (bc_num num, int o_base, void (* out_char)(int), - int leading_zero TSRMLS_DC)); - -/* Prototypes needed for external utility routines. */ - -_PROTOTYPE(void bc_rt_warn, (char *mesg ,...)); -_PROTOTYPE(void bc_rt_error, (char *mesg ,...)); -_PROTOTYPE(void bc_out_of_memory, (void)); - -#define bc_new_num(length, scale) _bc_new_num_ex((length), (scale), 0) -#define bc_free_num(num) _bc_free_num_ex((num), 0) - -#endif diff --git a/ext/bcmath/libbcmath/src/compare.c b/ext/bcmath/libbcmath/src/compare.c deleted file mode 100644 index 2f094a6917b72..0000000000000 --- a/ext/bcmath/libbcmath/src/compare.c +++ /dev/null @@ -1,161 +0,0 @@ -/* compare.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - - -/* Compare two bc numbers. Return value is 0 if equal, -1 if N1 is less - than N2 and +1 if N1 is greater than N2. If USE_SIGN is false, just - compare the magnitudes. */ - - int -_bc_do_compare (n1, n2, use_sign, ignore_last) - bc_num n1, n2; - int use_sign; - int ignore_last; -{ - char *n1ptr, *n2ptr; - int count; - - /* First, compare signs. */ - if (use_sign && n1->n_sign != n2->n_sign) - { - if (n1->n_sign == PLUS) - return (1); /* Positive N1 > Negative N2 */ - else - return (-1); /* Negative N1 < Positive N1 */ - } - - /* Now compare the magnitude. */ - if (n1->n_len != n2->n_len) - { - if (n1->n_len > n2->n_len) - { - /* Magnitude of n1 > n2. */ - if (!use_sign || n1->n_sign == PLUS) - return (1); - else - return (-1); - } - else - { - /* Magnitude of n1 < n2. */ - if (!use_sign || n1->n_sign == PLUS) - return (-1); - else - return (1); - } - } - - /* If we get here, they have the same number of integer digits. - check the integer part and the equal length part of the fraction. */ - count = n1->n_len + MIN (n1->n_scale, n2->n_scale); - n1ptr = n1->n_value; - n2ptr = n2->n_value; - - while ((count > 0) && (*n1ptr == *n2ptr)) - { - n1ptr++; - n2ptr++; - count--; - } - if (ignore_last && count == 1 && n1->n_scale == n2->n_scale) - return (0); - if (count != 0) - { - if (*n1ptr > *n2ptr) - { - /* Magnitude of n1 > n2. */ - if (!use_sign || n1->n_sign == PLUS) - return (1); - else - return (-1); - } - else - { - /* Magnitude of n1 < n2. */ - if (!use_sign || n1->n_sign == PLUS) - return (-1); - else - return (1); - } - } - - /* They are equal up to the last part of the equal part of the fraction. */ - if (n1->n_scale != n2->n_scale) - { - if (n1->n_scale > n2->n_scale) - { - for (count = n1->n_scale-n2->n_scale; count>0; count--) - if (*n1ptr++ != 0) - { - /* Magnitude of n1 > n2. */ - if (!use_sign || n1->n_sign == PLUS) - return (1); - else - return (-1); - } - } - else - { - for (count = n2->n_scale-n1->n_scale; count>0; count--) - if (*n2ptr++ != 0) - { - /* Magnitude of n1 < n2. */ - if (!use_sign || n1->n_sign == PLUS) - return (-1); - else - return (1); - } - } - } - - /* They must be equal! */ - return (0); -} - - -/* This is the "user callable" routine to compare numbers N1 and N2. */ - -int -bc_compare (n1, n2) - bc_num n1, n2; -{ - return _bc_do_compare (n1, n2, TRUE, FALSE); -} - diff --git a/ext/bcmath/libbcmath/src/config.h b/ext/bcmath/libbcmath/src/config.h deleted file mode 100644 index cc29a15f9594e..0000000000000 --- a/ext/bcmath/libbcmath/src/config.h +++ /dev/null @@ -1,10 +0,0 @@ -#if PHP_WIN32 -#include "../../../../main/config.w32.h" -#else -#include -#endif - -#include "php.h" -#include -#include "zend.h" -#include "zend_alloc.h" diff --git a/ext/bcmath/libbcmath/src/debug.c b/ext/bcmath/libbcmath/src/debug.c deleted file mode 100644 index 52e4e044d5da8..0000000000000 --- a/ext/bcmath/libbcmath/src/debug.c +++ /dev/null @@ -1,69 +0,0 @@ -/* debug.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - -/* pn prints the number NUM in base 10. */ - -static void -out_char (int c) -{ - putchar(c); -} - - -void -pn (bc_num num TSRMLS_DC) -{ - bc_out_num (num, 10, out_char, 0 TSRMLS_CC); - out_char ('\n'); -} - - -/* pv prints a character array as if it was a string of bcd digits. */ -void -pv (name, num, len) - char *name; - unsigned char *num; - int len; -{ - int i; - printf ("%s=", name); - for (i=0; i -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - - -/* Some utility routines for the divide: First a one digit multiply. - NUM (with SIZE digits) is multiplied by DIGIT and the result is - placed into RESULT. It is written so that NUM and RESULT can be - the same pointers. */ - -static void -_one_mult (num, size, digit, result) - unsigned char *num; - int size, digit; - unsigned char *result; -{ - int carry, value; - unsigned char *nptr, *rptr; - - if (digit == 0) - memset (result, 0, size); - else - { - if (digit == 1) - memcpy (result, num, size); - else - { - /* Initialize */ - nptr = (unsigned char *) (num+size-1); - rptr = (unsigned char *) (result+size-1); - carry = 0; - - while (size-- > 0) - { - value = *nptr-- * digit + carry; - *rptr-- = value % BASE; - carry = value / BASE; - } - - if (carry != 0) *rptr = carry; - } - } -} - - -/* The full division routine. This computes N1 / N2. It returns - 0 if the division is ok and the result is in QUOT. The number of - digits after the decimal point is SCALE. It returns -1 if division - by zero is tried. The algorithm is found in Knuth Vol 2. p237. */ - -int -bc_divide (bc_num n1, bc_num n2, bc_num *quot, int scale TSRMLS_DC) -{ - bc_num qval; - unsigned char *num1, *num2; - unsigned char *ptr1, *ptr2, *n2ptr, *qptr; - int scale1, val; - unsigned int len1, len2, scale2, qdigits, extra, count; - unsigned int qdig, qguess, borrow, carry; - unsigned char *mval; - char zero; - unsigned int norm; - - /* Test for divide by zero. */ - if (bc_is_zero (n2 TSRMLS_CC)) return -1; - - /* Test for divide by 1. If it is we must truncate. */ - if (n2->n_scale == 0) - { - if (n2->n_len == 1 && *n2->n_value == 1) - { - qval = bc_new_num (n1->n_len, scale); - qval->n_sign = (n1->n_sign == n2->n_sign ? PLUS : MINUS); - memset (&qval->n_value[n1->n_len],0,scale); - memcpy (qval->n_value, n1->n_value, - n1->n_len + MIN(n1->n_scale,scale)); - bc_free_num (quot); - *quot = qval; - } - } - - /* Set up the divide. Move the decimal point on n1 by n2's scale. - Remember, zeros on the end of num2 are wasted effort for dividing. */ - scale2 = n2->n_scale; - n2ptr = (unsigned char *) n2->n_value+n2->n_len+scale2-1; - while ((scale2 > 0) && (*n2ptr-- == 0)) scale2--; - - len1 = n1->n_len + scale2; - scale1 = n1->n_scale - scale2; - if (scale1 < scale) - extra = scale - scale1; - else - extra = 0; - num1 = (unsigned char *) emalloc (n1->n_len+n1->n_scale+extra+2); - if (num1 == NULL) bc_out_of_memory(); - memset (num1, 0, n1->n_len+n1->n_scale+extra+2); - memcpy (num1+1, n1->n_value, n1->n_len+n1->n_scale); - - len2 = n2->n_len + scale2; - num2 = (unsigned char *) emalloc (len2+1); - if (num2 == NULL) bc_out_of_memory(); - memcpy (num2, n2->n_value, len2); - *(num2+len2) = 0; - n2ptr = num2; - while (*n2ptr == 0) - { - n2ptr++; - len2--; - } - - /* Calculate the number of quotient digits. */ - if (len2 > len1+scale) - { - qdigits = scale+1; - zero = TRUE; - } - else - { - zero = FALSE; - if (len2>len1) - qdigits = scale+1; /* One for the zero integer part. */ - else - qdigits = len1-len2+scale+1; - } - - /* Allocate and zero the storage for the quotient. */ - qval = bc_new_num (qdigits-scale,scale); - memset (qval->n_value, 0, qdigits); - - /* Allocate storage for the temporary storage mval. */ - mval = (unsigned char *) emalloc (len2+1); - if (mval == NULL) bc_out_of_memory (); - - /* Now for the full divide algorithm. */ - if (!zero) - { - /* Normalize */ - norm = 10 / ((int)*n2ptr + 1); - if (norm != 1) - { - _one_mult (num1, len1+scale1+extra+1, norm, num1); - _one_mult (n2ptr, len2, norm, n2ptr); - } - - /* Initialize divide loop. */ - qdig = 0; - if (len2 > len1) - qptr = (unsigned char *) qval->n_value+len2-len1; - else - qptr = (unsigned char *) qval->n_value; - - /* Loop */ - while (qdig <= len1+scale-len2) - { - /* Calculate the quotient digit guess. */ - if (*n2ptr == num1[qdig]) - qguess = 9; - else - qguess = (num1[qdig]*10 + num1[qdig+1]) / *n2ptr; - - /* Test qguess. */ - if (n2ptr[1]*qguess > - (num1[qdig]*10 + num1[qdig+1] - *n2ptr*qguess)*10 - + num1[qdig+2]) - { - qguess--; - /* And again. */ - if (n2ptr[1]*qguess > - (num1[qdig]*10 + num1[qdig+1] - *n2ptr*qguess)*10 - + num1[qdig+2]) - qguess--; - } - - /* Multiply and subtract. */ - borrow = 0; - if (qguess != 0) - { - *mval = 0; - _one_mult (n2ptr, len2, qguess, mval+1); - ptr1 = (unsigned char *) num1+qdig+len2; - ptr2 = (unsigned char *) mval+len2; - for (count = 0; count < len2+1; count++) - { - val = (int) *ptr1 - (int) *ptr2-- - borrow; - if (val < 0) - { - val += 10; - borrow = 1; - } - else - borrow = 0; - *ptr1-- = val; - } - } - - /* Test for negative result. */ - if (borrow == 1) - { - qguess--; - ptr1 = (unsigned char *) num1+qdig+len2; - ptr2 = (unsigned char *) n2ptr+len2-1; - carry = 0; - for (count = 0; count < len2; count++) - { - val = (int) *ptr1 + (int) *ptr2-- + carry; - if (val > 9) - { - val -= 10; - carry = 1; - } - else - carry = 0; - *ptr1-- = val; - } - if (carry == 1) *ptr1 = (*ptr1 + 1) % 10; - } - - /* We now know the quotient digit. */ - *qptr++ = qguess; - qdig++; - } - } - - /* Clean up and return the number. */ - qval->n_sign = ( n1->n_sign == n2->n_sign ? PLUS : MINUS ); - if (bc_is_zero (qval TSRMLS_CC)) qval->n_sign = PLUS; - _bc_rm_leading_zeros (qval); - bc_free_num (quot); - *quot = qval; - - /* Clean up temporary storage. */ - efree (mval); - efree (num1); - efree (num2); - - return 0; /* Everything is OK. */ -} - diff --git a/ext/bcmath/libbcmath/src/divmod.c b/ext/bcmath/libbcmath/src/divmod.c deleted file mode 100644 index 2949bd10d4ae8..0000000000000 --- a/ext/bcmath/libbcmath/src/divmod.c +++ /dev/null @@ -1,87 +0,0 @@ -/* divmod.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - - -/* Division *and* modulo for numbers. This computes both NUM1 / NUM2 and - NUM1 % NUM2 and puts the results in QUOT and REM, except that if QUOT - is NULL then that store will be omitted. - */ - -int -bc_divmod (bc_num num1, bc_num num2, bc_num *quot, bc_num *rem, int scale TSRMLS_DC) -{ - bc_num quotient = NULL; - bc_num temp; - int rscale; - - /* Check for correct numbers. */ - if (bc_is_zero (num2 TSRMLS_CC)) return -1; - - /* Calculate final scale. */ - rscale = MAX (num1->n_scale, num2->n_scale+scale); - bc_init_num(&temp TSRMLS_CC); - - /* Calculate it. */ - bc_divide (num1, num2, &temp, scale TSRMLS_CC); - if (quot) - quotient = bc_copy_num (temp); - bc_multiply (temp, num2, &temp, rscale TSRMLS_CC); - bc_sub (num1, temp, rem, rscale); - bc_free_num (&temp); - - if (quot) - { - bc_free_num (quot); - *quot = quotient; - } - - return 0; /* Everything is OK. */ -} - - -/* Modulo for numbers. This computes NUM1 % NUM2 and puts the - result in RESULT. */ - -int -bc_modulo (bc_num num1, bc_num num2, bc_num *result, int scale TSRMLS_DC) -{ - return bc_divmod (num1, num2, NULL, result, scale TSRMLS_CC); -} - diff --git a/ext/bcmath/libbcmath/src/doaddsub.c b/ext/bcmath/libbcmath/src/doaddsub.c deleted file mode 100644 index 5458fc5dfc4b5..0000000000000 --- a/ext/bcmath/libbcmath/src/doaddsub.c +++ /dev/null @@ -1,232 +0,0 @@ -/* doaddsub.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - - -/* Perform addition: N1 is added to N2 and the value is - returned. The signs of N1 and N2 are ignored. - SCALE_MIN is to set the minimum scale of the result. */ - - bc_num -_bc_do_add (n1, n2, scale_min) - bc_num n1, n2; - int scale_min; -{ - bc_num sum; - int sum_scale, sum_digits; - char *n1ptr, *n2ptr, *sumptr; - int carry, n1bytes, n2bytes; - int count; - - /* Prepare sum. */ - sum_scale = MAX (n1->n_scale, n2->n_scale); - sum_digits = MAX (n1->n_len, n2->n_len) + 1; - sum = bc_new_num (sum_digits, MAX(sum_scale, scale_min)); - - /* Zero extra digits made by scale_min. */ - if (scale_min > sum_scale) - { - sumptr = (char *) (sum->n_value + sum_scale + sum_digits); - for (count = scale_min - sum_scale; count > 0; count--) - *sumptr++ = 0; - } - - /* Start with the fraction part. Initialize the pointers. */ - n1bytes = n1->n_scale; - n2bytes = n2->n_scale; - n1ptr = (char *) (n1->n_value + n1->n_len + n1bytes - 1); - n2ptr = (char *) (n2->n_value + n2->n_len + n2bytes - 1); - sumptr = (char *) (sum->n_value + sum_scale + sum_digits - 1); - - /* Add the fraction part. First copy the longer fraction.*/ - if (n1bytes != n2bytes) - { - if (n1bytes > n2bytes) - while (n1bytes>n2bytes) - { *sumptr-- = *n1ptr--; n1bytes--;} - else - while (n2bytes>n1bytes) - { *sumptr-- = *n2ptr--; n2bytes--;} - } - - /* Now add the remaining fraction part and equal size integer parts. */ - n1bytes += n1->n_len; - n2bytes += n2->n_len; - carry = 0; - while ((n1bytes > 0) && (n2bytes > 0)) - { - *sumptr = *n1ptr-- + *n2ptr-- + carry; - if (*sumptr > (BASE-1)) - { - carry = 1; - *sumptr -= BASE; - } - else - carry = 0; - sumptr--; - n1bytes--; - n2bytes--; - } - - /* Now add carry the longer integer part. */ - if (n1bytes == 0) - { n1bytes = n2bytes; n1ptr = n2ptr; } - while (n1bytes-- > 0) - { - *sumptr = *n1ptr-- + carry; - if (*sumptr > (BASE-1)) - { - carry = 1; - *sumptr -= BASE; - } - else - carry = 0; - sumptr--; - } - - /* Set final carry. */ - if (carry == 1) - *sumptr += 1; - - /* Adjust sum and return. */ - _bc_rm_leading_zeros (sum); - return sum; -} - - -/* Perform subtraction: N2 is subtracted from N1 and the value is - returned. The signs of N1 and N2 are ignored. Also, N1 is - assumed to be larger than N2. SCALE_MIN is the minimum scale - of the result. */ - - bc_num -_bc_do_sub (n1, n2, scale_min) - bc_num n1, n2; - int scale_min; -{ - bc_num diff; - int diff_scale, diff_len; - int min_scale, min_len; - char *n1ptr, *n2ptr, *diffptr; - int borrow, count, val; - - /* Allocate temporary storage. */ - diff_len = MAX (n1->n_len, n2->n_len); - diff_scale = MAX (n1->n_scale, n2->n_scale); - min_len = MIN (n1->n_len, n2->n_len); - min_scale = MIN (n1->n_scale, n2->n_scale); - diff = bc_new_num (diff_len, MAX(diff_scale, scale_min)); - - /* Zero extra digits made by scale_min. */ - if (scale_min > diff_scale) - { - diffptr = (char *) (diff->n_value + diff_len + diff_scale); - for (count = scale_min - diff_scale; count > 0; count--) - *diffptr++ = 0; - } - - /* Initialize the subtract. */ - n1ptr = (char *) (n1->n_value + n1->n_len + n1->n_scale -1); - n2ptr = (char *) (n2->n_value + n2->n_len + n2->n_scale -1); - diffptr = (char *) (diff->n_value + diff_len + diff_scale -1); - - /* Subtract the numbers. */ - borrow = 0; - - /* Take care of the longer scaled number. */ - if (n1->n_scale != min_scale) - { - /* n1 has the longer scale */ - for (count = n1->n_scale - min_scale; count > 0; count--) - *diffptr-- = *n1ptr--; - } - else - { - /* n2 has the longer scale */ - for (count = n2->n_scale - min_scale; count > 0; count--) - { - val = - *n2ptr-- - borrow; - if (val < 0) - { - val += BASE; - borrow = 1; - } - else - borrow = 0; - *diffptr-- = val; - } - } - - /* Now do the equal length scale and integer parts. */ - - for (count = 0; count < min_len + min_scale; count++) - { - val = *n1ptr-- - *n2ptr-- - borrow; - if (val < 0) - { - val += BASE; - borrow = 1; - } - else - borrow = 0; - *diffptr-- = val; - } - - /* If n1 has more digits then n2, we now do that subtract. */ - if (diff_len != min_len) - { - for (count = diff_len - min_len; count > 0; count--) - { - val = *n1ptr-- - borrow; - if (val < 0) - { - val += BASE; - borrow = 1; - } - else - borrow = 0; - *diffptr-- = val; - } - } - - /* Clean up and return. */ - _bc_rm_leading_zeros (diff); - return diff; -} - diff --git a/ext/bcmath/libbcmath/src/init.c b/ext/bcmath/libbcmath/src/init.c deleted file mode 100644 index cd45b9fbc1862..0000000000000 --- a/ext/bcmath/libbcmath/src/init.c +++ /dev/null @@ -1,131 +0,0 @@ -/* init.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - -#if SANDER_0 - bc_num _bc_Free_list = NULL; -#endif - -/* new_num allocates a number and sets fields to known values. */ - -bc_num -_bc_new_num_ex (length, scale, persistent) - int length, scale, persistent; -{ - bc_num temp; - - /* PHP Change: malloc() -> pemalloc(), removed free_list code */ - temp = (bc_num) pemalloc (sizeof(bc_struct)+length+scale, persistent); -#if 0 - if (_bc_Free_list != NULL) { - temp = _bc_Free_list; - _bc_Free_list = temp->n_next; - } else { - temp = (bc_num) pemalloc (sizeof(bc_struct), persistent); - if (temp == NULL) bc_out_of_memory (); - } -#endif - temp->n_sign = PLUS; - temp->n_len = length; - temp->n_scale = scale; - temp->n_refs = 1; - /* PHP Change: malloc() -> pemalloc() */ - temp->n_ptr = (char *) pemalloc (length+scale, persistent); - if (temp->n_ptr == NULL) bc_out_of_memory(); - temp->n_value = temp->n_ptr; - memset (temp->n_ptr, 0, length+scale); - return temp; -} - - -/* "Frees" a bc_num NUM. Actually decreases reference count and only - frees the storage if reference count is zero. */ - -void -_bc_free_num_ex (num, persistent) - bc_num *num; - int persistent; -{ - if (*num == NULL) return; - (*num)->n_refs--; - if ((*num)->n_refs == 0) { - if ((*num)->n_ptr) - /* PHP Change: free() -> pefree(), removed free_list code */ - pefree ((*num)->n_ptr, persistent); - pefree(*num, persistent); -#if 0 - (*num)->n_next = _bc_Free_list; - _bc_Free_list = *num; -#endif - } - *num = NULL; -} - - -/* Intitialize the number package! */ - -void -bc_init_numbers (TSRMLS_D) -{ - BCG(_zero_) = _bc_new_num_ex (1,0,1); - BCG(_one_) = _bc_new_num_ex (1,0,1); - BCG(_one_)->n_value[0] = 1; - BCG(_two_) = _bc_new_num_ex (1,0,1); - BCG(_two_)->n_value[0] = 2; -} - - -/* Make a copy of a number! Just increments the reference count! */ - -bc_num -bc_copy_num (bc_num num) -{ - num->n_refs++; - return num; -} - - -/* Initialize a number NUM by making it a copy of zero. */ - -void -bc_init_num (bc_num *num TSRMLS_DC) -{ - *num = bc_copy_num (BCG(_zero_)); -} - diff --git a/ext/bcmath/libbcmath/src/int2num.c b/ext/bcmath/libbcmath/src/int2num.c deleted file mode 100644 index 34419c138f06f..0000000000000 --- a/ext/bcmath/libbcmath/src/int2num.c +++ /dev/null @@ -1,84 +0,0 @@ -/* int2num.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - - -/* Convert an integer VAL to a bc number NUM. */ - -void -bc_int2num (num, val) - bc_num *num; - int val; -{ - char buffer[30]; - char *bptr, *vptr; - int ix = 1; - char neg = 0; - - /* Sign. */ - if (val < 0) - { - neg = 1; - val = -val; - } - - /* Get things going. */ - bptr = buffer; - *bptr++ = val % BASE; - val = val / BASE; - - /* Extract remaining digits. */ - while (val != 0) - { - *bptr++ = val % BASE; - val = val / BASE; - ix++; /* Count the digits. */ - } - - /* Make the number. */ - bc_free_num (num); - *num = bc_new_num (ix, 0); - if (neg) (*num)->n_sign = MINUS; - - /* Assign the digits. */ - vptr = (*num)->n_value; - while (ix-- > 0) - *vptr++ = *--bptr; -} - diff --git a/ext/bcmath/libbcmath/src/nearzero.c b/ext/bcmath/libbcmath/src/nearzero.c deleted file mode 100644 index ae16b65d8a605..0000000000000 --- a/ext/bcmath/libbcmath/src/nearzero.c +++ /dev/null @@ -1,69 +0,0 @@ -/* nearzero.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - -/* In some places we need to check if the number NUM is almost zero. - Specifically, all but the last digit is 0 and the last digit is 1. - Last digit is defined by scale. */ - -char -bc_is_near_zero (num, scale) - bc_num num; - int scale; -{ - int count; - char *nptr; - - /* Error checking */ - if (scale > num->n_scale) - scale = num->n_scale; - - /* Initialize */ - count = num->n_len + scale; - nptr = num->n_value; - - /* The check */ - while ((count > 0) && (*nptr++ == 0)) count--; - - if (count != 0 && (count != 1 || *--nptr != 1)) - return FALSE; - else - return TRUE; -} - diff --git a/ext/bcmath/libbcmath/src/neg.c b/ext/bcmath/libbcmath/src/neg.c deleted file mode 100644 index c864d77f1d9aa..0000000000000 --- a/ext/bcmath/libbcmath/src/neg.c +++ /dev/null @@ -1,49 +0,0 @@ -/* neg.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - -/* In some places we need to check if the number is negative. */ - -char -bc_is_neg (num) - bc_num num; -{ - return num->n_sign == MINUS; -} - diff --git a/ext/bcmath/libbcmath/src/num2long.c b/ext/bcmath/libbcmath/src/num2long.c deleted file mode 100644 index 0a6e0836ad43f..0000000000000 --- a/ext/bcmath/libbcmath/src/num2long.c +++ /dev/null @@ -1,70 +0,0 @@ -/* num2long.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - -/* Convert a number NUM to a long. The function returns only the integer - part of the number. For numbers that are too large to represent as - a long, this function returns a zero. This can be detected by checking - the NUM for zero after having a zero returned. */ - -long -bc_num2long (num) - bc_num num; -{ - long val; - char *nptr; - int index; - - /* Extract the int value, ignore the fraction. */ - val = 0; - nptr = num->n_value; - for (index=num->n_len; (index>0) && (val<=(LONG_MAX/BASE)); index--) - val = val*BASE + *nptr++; - - /* Check for overflow. If overflow, return zero. */ - if (index>0) val = 0; - if (val < 0) val = 0; - - /* Return the value. */ - if (num->n_sign == PLUS) - return (val); - else - return (-val); -} - diff --git a/ext/bcmath/libbcmath/src/num2str.c b/ext/bcmath/libbcmath/src/num2str.c deleted file mode 100644 index c47ec9bbad5c1..0000000000000 --- a/ext/bcmath/libbcmath/src/num2str.c +++ /dev/null @@ -1,79 +0,0 @@ -/* num2str.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - -/* Convert a numbers to a string. Base 10 only.*/ - -char -*bc_num2str (num) - bc_num num; -{ - char *str, *sptr; - char *nptr; - int index, signch; - - /* Allocate the string memory. */ - signch = ( num->n_sign == PLUS ? 0 : 1 ); /* Number of sign chars. */ - if (num->n_scale > 0) - str = (char *) emalloc (num->n_len + num->n_scale + 2 + signch); - else - str = (char *) emalloc (num->n_len + 1 + signch); - if (str == NULL) bc_out_of_memory(); - - /* The negative sign if needed. */ - sptr = str; - if (signch) *sptr++ = '-'; - - /* Load the whole number. */ - nptr = num->n_value; - for (index=num->n_len; index>0; index--) - *sptr++ = BCD_CHAR(*nptr++); - - /* Now the fraction. */ - if (num->n_scale > 0) - { - *sptr++ = '.'; - for (index=0; indexn_scale; index++) - *sptr++ = BCD_CHAR(*nptr++); - } - - /* Terminate the string and return it! */ - *sptr = '\0'; - return (str); -} diff --git a/ext/bcmath/libbcmath/src/outofmem.c b/ext/bcmath/libbcmath/src/outofmem.c deleted file mode 100644 index 799a32d2ae6c5..0000000000000 --- a/ext/bcmath/libbcmath/src/outofmem.c +++ /dev/null @@ -1,46 +0,0 @@ -/* outofmem.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - - -void bc_out_of_memory (void) -{ - (void) fprintf (stderr, "bcmath: out of memory!\n"); - exit (1); -} diff --git a/ext/bcmath/libbcmath/src/output.c b/ext/bcmath/libbcmath/src/output.c deleted file mode 100644 index ad4e3754677b5..0000000000000 --- a/ext/bcmath/libbcmath/src/output.c +++ /dev/null @@ -1,208 +0,0 @@ -/* output.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - - -/* The following routines provide output for bcd numbers package - using the rules of POSIX bc for output. */ - -/* This structure is used for saving digits in the conversion process. */ -typedef struct stk_rec { - long digit; - struct stk_rec *next; -} stk_rec; - -/* The reference string for digits. */ -static char ref_str[] = "0123456789ABCDEF"; - - -/* A special output routine for "multi-character digits." Exactly - SIZE characters must be output for the value VAL. If SPACE is - non-zero, we must output one space before the number. OUT_CHAR - is the actual routine for writing the characters. */ - -void -bc_out_long (val, size, space, out_char) - long val; - int size, space; -#ifdef __STDC__ - void (*out_char)(int); -#else - void (*out_char)(); -#endif -{ - char digits[40]; - int len, ix; - - if (space) (*out_char) (' '); - snprintf(digits, sizeof(digits), "%ld", val); - len = strlen (digits); - while (size > len) - { - (*out_char) ('0'); - size--; - } - for (ix=0; ix < len; ix++) - (*out_char) (digits[ix]); -} - -/* Output of a bcd number. NUM is written in base O_BASE using OUT_CHAR - as the routine to do the actual output of the characters. */ - -void -#ifdef __STDC__ -bc_out_num (bc_num num, int o_base, void (*out_char)(int), int leading_zero TSRMLS_DC) -#else -bc_out_num (bc_num num, int o_base, void (*out_char)(), int leading_zero TSRMLS_DC) -#endif -{ - char *nptr; - int index, fdigit, pre_space; - stk_rec *digits, *temp; - bc_num int_part, frac_part, base, cur_dig, t_num, max_o_digit; - - /* The negative sign if needed. */ - if (num->n_sign == MINUS) (*out_char) ('-'); - - /* Output the number. */ - if (bc_is_zero (num TSRMLS_CC)) - (*out_char) ('0'); - else - if (o_base == 10) - { - /* The number is in base 10, do it the fast way. */ - nptr = num->n_value; - if (num->n_len > 1 || *nptr != 0) - for (index=num->n_len; index>0; index--) - (*out_char) (BCD_CHAR(*nptr++)); - else - nptr++; - - if (leading_zero && bc_is_zero (num TSRMLS_CC)) - (*out_char) ('0'); - - /* Now the fraction. */ - if (num->n_scale > 0) - { - (*out_char) ('.'); - for (index=0; indexn_scale; index++) - (*out_char) (BCD_CHAR(*nptr++)); - } - } - else - { - /* special case ... */ - if (leading_zero && bc_is_zero (num TSRMLS_CC)) - (*out_char) ('0'); - - /* The number is some other base. */ - digits = NULL; - bc_init_num (&int_part TSRMLS_CC); - bc_divide (num, BCG(_one_), &int_part, 0 TSRMLS_CC); - bc_init_num (&frac_part TSRMLS_CC); - bc_init_num (&cur_dig TSRMLS_CC); - bc_init_num (&base TSRMLS_CC); - bc_sub (num, int_part, &frac_part, 0); - /* Make the INT_PART and FRAC_PART positive. */ - int_part->n_sign = PLUS; - frac_part->n_sign = PLUS; - bc_int2num (&base, o_base); - bc_init_num (&max_o_digit TSRMLS_CC); - bc_int2num (&max_o_digit, o_base-1); - - - /* Get the digits of the integer part and push them on a stack. */ - while (!bc_is_zero (int_part TSRMLS_CC)) - { - bc_modulo (int_part, base, &cur_dig, 0 TSRMLS_CC); - /* PHP Change: malloc() -> emalloc() */ - temp = (stk_rec *) emalloc (sizeof(stk_rec)); - if (temp == NULL) bc_out_of_memory(); - temp->digit = bc_num2long (cur_dig); - temp->next = digits; - digits = temp; - bc_divide (int_part, base, &int_part, 0 TSRMLS_CC); - } - - /* Print the digits on the stack. */ - if (digits != NULL) - { - /* Output the digits. */ - while (digits != NULL) - { - temp = digits; - digits = digits->next; - if (o_base <= 16) - (*out_char) (ref_str[ (int) temp->digit]); - else - bc_out_long (temp->digit, max_o_digit->n_len, 1, out_char); - efree (temp); - } - } - - /* Get and print the digits of the fraction part. */ - if (num->n_scale > 0) - { - (*out_char) ('.'); - pre_space = 0; - t_num = bc_copy_num (BCG(_one_)); - while (t_num->n_len <= num->n_scale) { - bc_multiply (frac_part, base, &frac_part, num->n_scale TSRMLS_CC); - fdigit = bc_num2long (frac_part); - bc_int2num (&int_part, fdigit); - bc_sub (frac_part, int_part, &frac_part, 0); - if (o_base <= 16) - (*out_char) (ref_str[fdigit]); - else { - bc_out_long (fdigit, max_o_digit->n_len, pre_space, out_char); - pre_space = 1; - } - bc_multiply (t_num, base, &t_num, 0 TSRMLS_CC); - } - bc_free_num (&t_num); - } - - /* Clean up. */ - bc_free_num (&int_part); - bc_free_num (&frac_part); - bc_free_num (&base); - bc_free_num (&cur_dig); - bc_free_num (&max_o_digit); - } -} diff --git a/ext/bcmath/libbcmath/src/private.h b/ext/bcmath/libbcmath/src/private.h deleted file mode 100644 index f8f1048ab7831..0000000000000 --- a/ext/bcmath/libbcmath/src/private.h +++ /dev/null @@ -1,43 +0,0 @@ -/* private.h: bcmath library header. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -/* "Private" routines to bcmath. */ - -/* variables */ -#if SANDER_0 -extern bc_num _bc_Free_list; -#endif - -/* routines */ -int _bc_do_compare (bc_num n1, bc_num n2, int use_sign, int ignore_last); -bc_num _bc_do_add (bc_num n1, bc_num n2, int scale_min); -bc_num _bc_do_sub (bc_num n1, bc_num n2, int scale_min); -void _bc_rm_leading_zeros (bc_num num); diff --git a/ext/bcmath/libbcmath/src/raise.c b/ext/bcmath/libbcmath/src/raise.c deleted file mode 100644 index f2f4f4a1d7770..0000000000000 --- a/ext/bcmath/libbcmath/src/raise.c +++ /dev/null @@ -1,124 +0,0 @@ -/* raise.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - - -/* Raise NUM1 to the NUM2 power. The result is placed in RESULT. - Maximum exponent is LONG_MAX. If a NUM2 is not an integer, - only the integer part is used. */ - -void -bc_raise (bc_num num1, bc_num num2, bc_num *result, int scale TSRMLS_DC) -{ - bc_num temp, power; - long exponent; - int rscale; - int pwrscale; - int calcscale; - char neg; - - /* Check the exponent for scale digits and convert to a long. */ - if (num2->n_scale != 0) - bc_rt_warn ("non-zero scale in exponent"); - exponent = bc_num2long (num2); - if (exponent == 0 && (num2->n_len > 1 || num2->n_value[0] != 0)) - bc_rt_error ("exponent too large in raise"); - - /* Special case if exponent is a zero. */ - if (exponent == 0) - { - bc_free_num (result); - *result = bc_copy_num (BCG(_one_)); - return; - } - - /* Other initializations. */ - if (exponent < 0) - { - neg = TRUE; - exponent = -exponent; - rscale = scale; - } - else - { - neg = FALSE; - rscale = MIN (num1->n_scale*exponent, MAX(scale, num1->n_scale)); - } - - /* Set initial value of temp. */ - power = bc_copy_num (num1); - pwrscale = num1->n_scale; - while ((exponent & 1) == 0) - { - pwrscale = 2*pwrscale; - bc_multiply (power, power, &power, pwrscale TSRMLS_CC); - exponent = exponent >> 1; - } - temp = bc_copy_num (power); - calcscale = pwrscale; - exponent = exponent >> 1; - - /* Do the calculation. */ - while (exponent > 0) - { - pwrscale = 2*pwrscale; - bc_multiply (power, power, &power, pwrscale TSRMLS_CC); - if ((exponent & 1) == 1) { - calcscale = pwrscale + calcscale; - bc_multiply (temp, power, &temp, calcscale TSRMLS_CC); - } - exponent = exponent >> 1; - } - - /* Assign the value. */ - if (neg) - { - bc_divide (BCG(_one_), temp, result, rscale TSRMLS_CC); - bc_free_num (&temp); - } - else - { - bc_free_num (result); - *result = temp; - if ((*result)->n_scale > rscale) - (*result)->n_scale = rscale; - } - bc_free_num (&power); -} - diff --git a/ext/bcmath/libbcmath/src/raisemod.c b/ext/bcmath/libbcmath/src/raisemod.c deleted file mode 100644 index 58964bec58df0..0000000000000 --- a/ext/bcmath/libbcmath/src/raisemod.c +++ /dev/null @@ -1,98 +0,0 @@ -/* raisemod.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - -/* Raise BASE to the EXPO power, reduced modulo MOD. The result is - placed in RESULT. If a EXPO is not an integer, - only the integer part is used. */ - -int -bc_raisemod (bc_num base, bc_num expo, bc_num mod, bc_num *result, int scale TSRMLS_DC) -{ - bc_num power, exponent, parity, temp; - int rscale; - - /* Check for correct numbers. */ - if (bc_is_zero(mod TSRMLS_CC)) return -1; - if (bc_is_neg(expo)) return -1; - - /* Set initial values. */ - power = bc_copy_num (base); - exponent = bc_copy_num (expo); - temp = bc_copy_num (BCG(_one_)); - bc_init_num(&parity TSRMLS_CC); - - /* Check the base for scale digits. */ - if (base->n_scale != 0) - bc_rt_warn ("non-zero scale in base"); - - /* Check the exponent for scale digits. */ - if (exponent->n_scale != 0) - { - bc_rt_warn ("non-zero scale in exponent"); - bc_divide (exponent, BCG(_one_), &exponent, 0 TSRMLS_CC); /*truncate */ - } - - /* Check the modulus for scale digits. */ - if (mod->n_scale != 0) - bc_rt_warn ("non-zero scale in modulus"); - - /* Do the calculation. */ - rscale = MAX(scale, base->n_scale); - while ( !bc_is_zero(exponent TSRMLS_CC) ) - { - (void) bc_divmod (exponent, BCG(_two_), &exponent, &parity, 0 TSRMLS_CC); - if ( !bc_is_zero(parity TSRMLS_CC) ) - { - bc_multiply (temp, power, &temp, rscale TSRMLS_CC); - (void) bc_modulo (temp, mod, &temp, scale TSRMLS_CC); - } - - bc_multiply (power, power, &power, rscale TSRMLS_CC); - (void) bc_modulo (power, mod, &power, scale TSRMLS_CC); - } - - /* Assign the value. */ - bc_free_num (&power); - bc_free_num (&exponent); - bc_free_num (result); - bc_free_num (&parity); - *result = temp; - return 0; /* Everything is OK. */ -} diff --git a/ext/bcmath/libbcmath/src/recmul.c b/ext/bcmath/libbcmath/src/recmul.c deleted file mode 100644 index c31d09dc72db5..0000000000000 --- a/ext/bcmath/libbcmath/src/recmul.c +++ /dev/null @@ -1,306 +0,0 @@ -/* recmul.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - -/* Recursive vs non-recursive multiply crossover ranges. */ -#if defined(MULDIGITS) -#include "muldigits.h" -#else -#define MUL_BASE_DIGITS 80 -#endif - -int mul_base_digits = MUL_BASE_DIGITS; -#define MUL_SMALL_DIGITS mul_base_digits/4 - -/* Multiply utility routines */ - -static bc_num -new_sub_num (length, scale, value) - int length, scale; - char *value; -{ - bc_num temp; - -#ifdef SANDER_0 - if (_bc_Free_list != NULL) { - temp = _bc_Free_list; - _bc_Free_list = temp->n_next; - } else { -#endif - temp = (bc_num) emalloc (sizeof(bc_struct)); -#ifdef SANDER_0 - if (temp == NULL) bc_out_of_memory (); - } -#endif - temp->n_sign = PLUS; - temp->n_len = length; - temp->n_scale = scale; - temp->n_refs = 1; - temp->n_ptr = NULL; - temp->n_value = value; - return temp; -} - -static void -_bc_simp_mul (bc_num n1, int n1len, bc_num n2, int n2len, bc_num *prod, - int full_scale) -{ - char *n1ptr, *n2ptr, *pvptr; - char *n1end, *n2end; /* To the end of n1 and n2. */ - int indx, sum, prodlen; - - prodlen = n1len+n2len+1; - - *prod = bc_new_num (prodlen, 0); - - n1end = (char *) (n1->n_value + n1len - 1); - n2end = (char *) (n2->n_value + n2len - 1); - pvptr = (char *) ((*prod)->n_value + prodlen - 1); - sum = 0; - - /* Here is the loop... */ - for (indx = 0; indx < prodlen-1; indx++) - { - n1ptr = (char *) (n1end - MAX(0, indx-n2len+1)); - n2ptr = (char *) (n2end - MIN(indx, n2len-1)); - while ((n1ptr >= n1->n_value) && (n2ptr <= n2end)) - sum += *n1ptr-- * *n2ptr++; - *pvptr-- = sum % BASE; - sum = sum / BASE; - } - *pvptr = sum; -} - - -/* A special adder/subtractor for the recursive divide and conquer - multiply algorithm. Note: if sub is called, accum must - be larger that what is being subtracted. Also, accum and val - must have n_scale = 0. (e.g. they must look like integers. *) */ -static void -_bc_shift_addsub (bc_num accum, bc_num val, int shift, int sub) -{ - signed char *accp, *valp; - int count, carry; - - count = val->n_len; - if (val->n_value[0] == 0) - count--; - assert (accum->n_len+accum->n_scale >= shift+count); - - /* Set up pointers and others */ - accp = (signed char *)(accum->n_value + - accum->n_len + accum->n_scale - shift - 1); - valp = (signed char *)(val->n_value + val->n_len - 1); - carry = 0; - - if (sub) { - /* Subtraction, carry is really borrow. */ - while (count--) { - *accp -= *valp-- + carry; - if (*accp < 0) { - carry = 1; - *accp-- += BASE; - } else { - carry = 0; - accp--; - } - } - while (carry) { - *accp -= carry; - if (*accp < 0) - *accp-- += BASE; - else - carry = 0; - } - } else { - /* Addition */ - while (count--) { - *accp += *valp-- + carry; - if (*accp > (BASE-1)) { - carry = 1; - *accp-- -= BASE; - } else { - carry = 0; - accp--; - } - } - while (carry) { - *accp += carry; - if (*accp > (BASE-1)) - *accp-- -= BASE; - else - carry = 0; - } - } -} - -/* Recursive divide and conquer multiply algorithm. - Based on - Let u = u0 + u1*(b^n) - Let v = v0 + v1*(b^n) - Then uv = (B^2n+B^n)*u1*v1 + B^n*(u1-u0)*(v0-v1) + (B^n+1)*u0*v0 - - B is the base of storage, number of digits in u1,u0 close to equal. -*/ -static void -_bc_rec_mul (bc_num u, int ulen, bc_num v, int vlen, bc_num *prod, - int full_scale TSRMLS_DC) -{ - bc_num u0, u1, v0, v1; - int u0len, v0len; - bc_num m1, m2, m3, d1, d2; - int n, prodlen, m1zero; - int d1len, d2len; - - /* Base case? */ - if ((ulen+vlen) < mul_base_digits - || ulen < MUL_SMALL_DIGITS - || vlen < MUL_SMALL_DIGITS ) { - _bc_simp_mul (u, ulen, v, vlen, prod, full_scale); - return; - } - - /* Calculate n -- the u and v split point in digits. */ - n = (MAX(ulen, vlen)+1) / 2; - - /* Split u and v. */ - if (ulen < n) { - u1 = bc_copy_num (BCG(_zero_)); - u0 = new_sub_num (ulen,0, u->n_value); - } else { - u1 = new_sub_num (ulen-n, 0, u->n_value); - u0 = new_sub_num (n, 0, u->n_value+ulen-n); - } - if (vlen < n) { - v1 = bc_copy_num (BCG(_zero_)); - v0 = new_sub_num (vlen,0, v->n_value); - } else { - v1 = new_sub_num (vlen-n, 0, v->n_value); - v0 = new_sub_num (n, 0, v->n_value+vlen-n); - } - _bc_rm_leading_zeros (u1); - _bc_rm_leading_zeros (u0); - u0len = u0->n_len; - _bc_rm_leading_zeros (v1); - _bc_rm_leading_zeros (v0); - v0len = v0->n_len; - - m1zero = bc_is_zero(u1 TSRMLS_CC) || bc_is_zero(v1 TSRMLS_CC); - - /* Calculate sub results ... */ - - bc_init_num(&d1 TSRMLS_CC); - bc_init_num(&d2 TSRMLS_CC); - bc_sub (u1, u0, &d1, 0); - d1len = d1->n_len; - bc_sub (v0, v1, &d2, 0); - d2len = d2->n_len; - - - /* Do recursive multiplies and shifted adds. */ - if (m1zero) - m1 = bc_copy_num (BCG(_zero_)); - else - _bc_rec_mul (u1, u1->n_len, v1, v1->n_len, &m1, 0 TSRMLS_CC); - - if (bc_is_zero(d1 TSRMLS_CC) || bc_is_zero(d2 TSRMLS_CC)) - m2 = bc_copy_num (BCG(_zero_)); - else - _bc_rec_mul (d1, d1len, d2, d2len, &m2, 0 TSRMLS_CC); - - if (bc_is_zero(u0 TSRMLS_CC) || bc_is_zero(v0 TSRMLS_CC)) - m3 = bc_copy_num (BCG(_zero_)); - else - _bc_rec_mul (u0, u0->n_len, v0, v0->n_len, &m3, 0 TSRMLS_CC); - - /* Initialize product */ - prodlen = ulen+vlen+1; - *prod = bc_new_num(prodlen, 0); - - if (!m1zero) { - _bc_shift_addsub (*prod, m1, 2*n, 0); - _bc_shift_addsub (*prod, m1, n, 0); - } - _bc_shift_addsub (*prod, m3, n, 0); - _bc_shift_addsub (*prod, m3, 0, 0); - _bc_shift_addsub (*prod, m2, n, d1->n_sign != d2->n_sign); - - /* Now clean up! */ - bc_free_num (&u1); - bc_free_num (&u0); - bc_free_num (&v1); - bc_free_num (&m1); - bc_free_num (&v0); - bc_free_num (&m2); - bc_free_num (&m3); - bc_free_num (&d1); - bc_free_num (&d2); -} - -/* The multiply routine. N2 times N1 is put int PROD with the scale of - the result being MIN(N2 scale+N1 scale, MAX (SCALE, N2 scale, N1 scale)). - */ - -void -bc_multiply (bc_num n1, bc_num n2, bc_num *prod, int scale TSRMLS_DC) -{ - bc_num pval; - int len1, len2; - int full_scale, prod_scale; - - /* Initialize things. */ - len1 = n1->n_len + n1->n_scale; - len2 = n2->n_len + n2->n_scale; - full_scale = n1->n_scale + n2->n_scale; - prod_scale = MIN(full_scale,MAX(scale,MAX(n1->n_scale,n2->n_scale))); - - /* Do the multiply */ - _bc_rec_mul (n1, len1, n2, len2, &pval, full_scale TSRMLS_CC); - - /* Assign to prod and clean up the number. */ - pval->n_sign = ( n1->n_sign == n2->n_sign ? PLUS : MINUS ); - pval->n_value = pval->n_ptr; - pval->n_len = len2 + len1 + 1 - full_scale; - pval->n_scale = prod_scale; - _bc_rm_leading_zeros (pval); - if (bc_is_zero (pval TSRMLS_CC)) - pval->n_sign = PLUS; - bc_free_num (prod); - *prod = pval; -} diff --git a/ext/bcmath/libbcmath/src/rmzero.c b/ext/bcmath/libbcmath/src/rmzero.c deleted file mode 100644 index 63f7a0cb79da0..0000000000000 --- a/ext/bcmath/libbcmath/src/rmzero.c +++ /dev/null @@ -1,55 +0,0 @@ -/* rmzero.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - -/* For many things, we may have leading zeros in a number NUM. - _bc_rm_leading_zeros just moves the data "value" pointer to the - correct place and adjusts the length. */ - - void -_bc_rm_leading_zeros (num) - bc_num num; -{ - /* We can move n_value to point to the first non zero digit! */ - while (*num->n_value == 0 && num->n_len > 1) { - num->n_value++; - num->n_len--; - } -} - diff --git a/ext/bcmath/libbcmath/src/rt.c b/ext/bcmath/libbcmath/src/rt.c deleted file mode 100644 index 5a98b68f7ecdf..0000000000000 --- a/ext/bcmath/libbcmath/src/rt.c +++ /dev/null @@ -1,65 +0,0 @@ -/* rt.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - - -void bc_rt_warn (char *mesg ,...) -{ - va_list args; - char error_mesg [255]; - - va_start (args, mesg); - vsnprintf (error_mesg, sizeof(error_mesg), mesg, args); - va_end (args); - - fprintf (stderr, "bc math warning: %s\n", error_mesg); -} - - -void bc_rt_error (char *mesg ,...) -{ - va_list args; - char error_mesg [255]; - - va_start (args, mesg); - vsnprintf (error_mesg, sizeof(error_mesg), mesg, args); - va_end (args); - - fprintf (stderr, "bc math error: %s\n", error_mesg); -} diff --git a/ext/bcmath/libbcmath/src/sqrt.c b/ext/bcmath/libbcmath/src/sqrt.c deleted file mode 100644 index 5db5113eb5775..0000000000000 --- a/ext/bcmath/libbcmath/src/sqrt.c +++ /dev/null @@ -1,129 +0,0 @@ -/* sqrt.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - -/* Take the square root NUM and return it in NUM with SCALE digits - after the decimal place. */ - -int -bc_sqrt (bc_num *num, int scale TSRMLS_DC) -{ - int rscale, cmp_res, done; - int cscale; - bc_num guess, guess1, point5, diff; - - /* Initial checks. */ - cmp_res = bc_compare (*num, BCG(_zero_)); - if (cmp_res < 0) - return 0; /* error */ - else - { - if (cmp_res == 0) - { - bc_free_num (num); - *num = bc_copy_num (BCG(_zero_)); - return 1; - } - } - cmp_res = bc_compare (*num, BCG(_one_)); - if (cmp_res == 0) - { - bc_free_num (num); - *num = bc_copy_num (BCG(_one_)); - return 1; - } - - /* Initialize the variables. */ - rscale = MAX (scale, (*num)->n_scale); - bc_init_num(&guess TSRMLS_CC); - bc_init_num(&guess1 TSRMLS_CC); - bc_init_num(&diff TSRMLS_CC); - point5 = bc_new_num (1,1); - point5->n_value[1] = 5; - - - /* Calculate the initial guess. */ - if (cmp_res < 0) - { - /* The number is between 0 and 1. Guess should start at 1. */ - guess = bc_copy_num (BCG(_one_)); - cscale = (*num)->n_scale; - } - else - { - /* The number is greater than 1. Guess should start at 10^(exp/2). */ - bc_int2num (&guess,10); - - bc_int2num (&guess1,(*num)->n_len); - bc_multiply (guess1, point5, &guess1, 0 TSRMLS_CC); - guess1->n_scale = 0; - bc_raise (guess, guess1, &guess, 0 TSRMLS_CC); - bc_free_num (&guess1); - cscale = 3; - } - - /* Find the square root using Newton's algorithm. */ - done = FALSE; - while (!done) - { - bc_free_num (&guess1); - guess1 = bc_copy_num (guess); - bc_divide (*num, guess, &guess, cscale TSRMLS_CC); - bc_add (guess, guess1, &guess, 0); - bc_multiply (guess, point5, &guess, cscale TSRMLS_CC); - bc_sub (guess, guess1, &diff, cscale+1); - if (bc_is_near_zero (diff, cscale)) - { - if (cscale < rscale+1) - cscale = MIN (cscale*3, rscale+1); - else - done = TRUE; - } - } - - /* Assign the number and clean up. */ - bc_free_num (num); - bc_divide (guess,BCG(_one_),num,rscale TSRMLS_CC); - bc_free_num (&guess); - bc_free_num (&guess1); - bc_free_num (&point5); - bc_free_num (&diff); - return 1; -} - diff --git a/ext/bcmath/libbcmath/src/str2num.c b/ext/bcmath/libbcmath/src/str2num.c deleted file mode 100644 index c484c158e5946..0000000000000 --- a/ext/bcmath/libbcmath/src/str2num.c +++ /dev/null @@ -1,109 +0,0 @@ -/* str2num.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - -/* Convert strings to bc numbers. Base 10 only.*/ - -void -bc_str2num (bc_num *num, char *str, int scale TSRMLS_DC) -{ - int digits, strscale; - char *ptr, *nptr; - char zero_int; - - /* Prepare num. */ - bc_free_num (num); - - /* Check for valid number and count digits. */ - ptr = str; - digits = 0; - strscale = 0; - zero_int = FALSE; - if ( (*ptr == '+') || (*ptr == '-')) ptr++; /* Sign */ - while (*ptr == '0') ptr++; /* Skip leading zeros. */ - while (isdigit((int)*ptr)) ptr++, digits++; /* digits */ - if (*ptr == '.') ptr++; /* decimal point */ - while (isdigit((int)*ptr)) ptr++, strscale++; /* digits */ - if ((*ptr != '\0') || (digits+strscale == 0)) - { - *num = bc_copy_num (BCG(_zero_)); - return; - } - - /* Adjust numbers and allocate storage and initialize fields. */ - strscale = MIN(strscale, scale); - if (digits == 0) - { - zero_int = TRUE; - digits = 1; - } - *num = bc_new_num (digits, strscale); - - /* Build the whole number. */ - ptr = str; - if (*ptr == '-') - { - (*num)->n_sign = MINUS; - ptr++; - } - else - { - (*num)->n_sign = PLUS; - if (*ptr == '+') ptr++; - } - while (*ptr == '0') ptr++; /* Skip leading zeros. */ - nptr = (*num)->n_value; - if (zero_int) - { - *nptr++ = 0; - digits = 0; - } - for (;digits > 0; digits--) - *nptr++ = CH_VAL(*ptr++); - - - /* Build the fractional part. */ - if (strscale > 0) - { - ptr++; /* skip the decimal point! */ - for (;strscale > 0; strscale--) - *nptr++ = CH_VAL(*ptr++); - } -} - diff --git a/ext/bcmath/libbcmath/src/sub.c b/ext/bcmath/libbcmath/src/sub.c deleted file mode 100644 index 2dd8eb5ecc144..0000000000000 --- a/ext/bcmath/libbcmath/src/sub.c +++ /dev/null @@ -1,90 +0,0 @@ -/* sub.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - - -/* Here is the full subtract routine that takes care of negative numbers. - N2 is subtracted from N1 and the result placed in RESULT. SCALE_MIN - is the minimum scale for the result. */ - -void -bc_sub (n1, n2, result, scale_min) - bc_num n1, n2, *result; - int scale_min; -{ - bc_num diff = NULL; - int cmp_res; - int res_scale; - - if (n1->n_sign != n2->n_sign) - { - diff = _bc_do_add (n1, n2, scale_min); - diff->n_sign = n1->n_sign; - } - else - { - /* subtraction must be done. */ - /* Compare magnitudes. */ - cmp_res = _bc_do_compare (n1, n2, FALSE, FALSE); - switch (cmp_res) - { - case -1: - /* n1 is less than n2, subtract n1 from n2. */ - diff = _bc_do_sub (n2, n1, scale_min); - diff->n_sign = (n2->n_sign == PLUS ? MINUS : PLUS); - break; - case 0: - /* They are equal! return zero! */ - res_scale = MAX (scale_min, MAX(n1->n_scale, n2->n_scale)); - diff = bc_new_num (1, res_scale); - memset (diff->n_value, 0, res_scale+1); - break; - case 1: - /* n2 is less than n1, subtract n2 from n1. */ - diff = _bc_do_sub (n1, n2, scale_min); - diff->n_sign = n1->n_sign; - break; - } - } - - /* Clean up and return. */ - bc_free_num (result); - *result = diff; -} - diff --git a/ext/bcmath/libbcmath/src/zero.c b/ext/bcmath/libbcmath/src/zero.c deleted file mode 100644 index 4ee249ee710b5..0000000000000 --- a/ext/bcmath/libbcmath/src/zero.c +++ /dev/null @@ -1,64 +0,0 @@ -/* zero.c: bcmath library file. */ -/* - Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - Copyright (C) 2000 Philip A. Nelson - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. (COPYING.LIB) - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to: - - The Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA. - - You may contact the author by: - e-mail: philnelson@acm.org - us-mail: Philip A. Nelson - Computer Science Department, 9062 - Western Washington University - Bellingham, WA 98226-9062 - -*************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include "bcmath.h" -#include "private.h" - -/* In some places we need to check if the number NUM is zero. */ - -char -bc_is_zero (bc_num num TSRMLS_DC) -{ - int count; - char *nptr; - - /* Quick check. */ - if (num == BCG(_zero_)) return TRUE; - - /* Initialize */ - count = num->n_len + num->n_scale; - nptr = num->n_value; - - /* The check */ - while ((count > 0) && (*nptr++ == 0)) count--; - - if (count != 0) - return FALSE; - else - return TRUE; -} - diff --git a/ext/bcmath/package.xml b/ext/bcmath/package.xml deleted file mode 100644 index 3ef9773fe7fa6..0000000000000 --- a/ext/bcmath/package.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - - bcmath - Arbitrary Precision Mathematics Functions - - - andi - Andi Gutmans - andi@php.net - lead - - - -For arbitrary precision mathematics PHP offers the Binary Calculator -which supports numbers of any size and precision, represented as strings. - - PHP - - beta - 5.0.0rc1 - 2004-03-19 - -package.xml added to support installation using pear installer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ext/bcmath/php_bcmath.h b/ext/bcmath/php_bcmath.h deleted file mode 100644 index 63995923030c7..0000000000000 --- a/ext/bcmath/php_bcmath.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Andi Gutmans | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef PHP_BCMATH_H -#define PHP_BCMATH_H - -#if HAVE_BCMATH - -#include "libbcmath/src/bcmath.h" - -extern zend_module_entry bcmath_module_entry; -#define phpext_bcmath_ptr &bcmath_module_entry - -PHP_MINIT_FUNCTION(bcmath); -PHP_MSHUTDOWN_FUNCTION(bcmath); -PHP_MINFO_FUNCTION(bcmath); - -PHP_FUNCTION(bcadd); -PHP_FUNCTION(bcsub); -PHP_FUNCTION(bcmul); -PHP_FUNCTION(bcdiv); -PHP_FUNCTION(bcmod); -PHP_FUNCTION(bcpow); -PHP_FUNCTION(bcsqrt); -PHP_FUNCTION(bccomp); -PHP_FUNCTION(bcscale); -PHP_FUNCTION(bcpowmod); - -ZEND_BEGIN_MODULE_GLOBALS(bcmath) - bc_num _zero_; - bc_num _one_; - bc_num _two_; - long bc_precision; -ZEND_END_MODULE_GLOBALS(bcmath) - -#if ZTS -#define BCG(v) TSRMG(bcmath_globals_id, zend_bcmath_globals *, v) -#else -#define BCG(v) (bcmath_globals.v) -#endif - -ZEND_EXTERN_MODULE_GLOBALS(bcmath) - -#else - -#define phpext_bcmath_ptr NULL - -#endif - -#endif /* PHP_BCMATH_H */ diff --git a/ext/bcmath/tests/bcadd.phpt b/ext/bcmath/tests/bcadd.phpt deleted file mode 100644 index 61552eecded0e..0000000000000 --- a/ext/bcmath/tests/bcadd.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -bcadd() function ---SKIPIF-- - ---INI-- -bcmath.scale=0 ---FILE-- - ---EXPECT-- -3 -4.0000 -8728932003911564969352217864684.00 diff --git a/ext/bcmath/tests/bccomp.phpt b/ext/bcmath/tests/bccomp.phpt deleted file mode 100644 index b2bf9f4ac2b9b..0000000000000 --- a/ext/bcmath/tests/bccomp.phpt +++ /dev/null @@ -1,18 +0,0 @@ ---TEST-- -bccomp() function ---SKIPIF-- - ---INI-- -bcmath.scale=0 ---FILE-- - ---EXPECT-- --1 --1 -0 -1 diff --git a/ext/bcmath/tests/bcdiv.phpt b/ext/bcmath/tests/bcdiv.phpt deleted file mode 100644 index cda19496d5569..0000000000000 --- a/ext/bcmath/tests/bcdiv.phpt +++ /dev/null @@ -1,18 +0,0 @@ ---TEST-- -bcdiv() function ---SKIPIF-- - ---INI-- -bcmath.scale=0 ---FILE-- - ---EXPECT-- -0 -0.50 --0.2000 -4526580661.75 diff --git a/ext/bcmath/tests/bcmod.phpt b/ext/bcmath/tests/bcmod.phpt deleted file mode 100644 index 1d7be48a754b2..0000000000000 --- a/ext/bcmath/tests/bcmod.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -bcmod() function ---SKIPIF-- - ---INI-- -bcmath.scale=0 ---FILE-- - ---EXPECT-- -1 --1 -1459434331351930289678 diff --git a/ext/bcmath/tests/bcmul.phpt b/ext/bcmath/tests/bcmul.phpt deleted file mode 100644 index 0ff322fe327bc..0000000000000 --- a/ext/bcmath/tests/bcmul.phpt +++ /dev/null @@ -1,18 +0,0 @@ ---TEST-- -bcmul() function ---SKIPIF-- - ---INI-- -bcmath.scale=0 ---FILE-- - ---EXPECT-- -2 --15 -12193263111263526900 -3.75 diff --git a/ext/bcmath/tests/bcpow.phpt b/ext/bcmath/tests/bcpow.phpt deleted file mode 100644 index bdd4e08cab9ed..0000000000000 --- a/ext/bcmath/tests/bcpow.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -bcpow() function ---SKIPIF-- - ---INI-- -bcmath.scale=0 ---FILE-- - ---EXPECT-- -1 --32 -18446744073709551616 diff --git a/ext/bcmath/tests/bcscale.phpt b/ext/bcmath/tests/bcscale.phpt deleted file mode 100644 index 4fc2f85eb92c1..0000000000000 --- a/ext/bcmath/tests/bcscale.phpt +++ /dev/null @@ -1,21 +0,0 @@ ---TEST-- -bcscale() function ---SKIPIF-- - ---INI-- -bcmath.scale=0 ---FILE-- - ---EXPECT-- -3 -3.00 -3.0000000000 -3 diff --git a/ext/bcmath/tests/bcsqrt.phpt b/ext/bcmath/tests/bcsqrt.phpt deleted file mode 100644 index 46d92fd5edc1f..0000000000000 --- a/ext/bcmath/tests/bcsqrt.phpt +++ /dev/null @@ -1,14 +0,0 @@ ---TEST-- -bcsqrt() function ---SKIPIF-- - ---INI-- -bcmath.scale=0 ---FILE-- - ---EXPECT-- -3 -43913234134.28826 diff --git a/ext/bcmath/tests/bcsub.phpt b/ext/bcmath/tests/bcsub.phpt deleted file mode 100644 index 71726492f7788..0000000000000 --- a/ext/bcmath/tests/bcsub.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -bcsub() function ---SKIPIF-- - ---INI-- -bcmath.scale=0 ---FILE-- - ---EXPECT-- --1 --6.0000 -8728932000054820705086578390258.00 diff --git a/ext/bz2/CREDITS b/ext/bz2/CREDITS deleted file mode 100644 index 67dff9f41d7b1..0000000000000 --- a/ext/bz2/CREDITS +++ /dev/null @@ -1,2 +0,0 @@ -Bzip2 -Sterling Hughes diff --git a/ext/bz2/bz2.c b/ext/bz2/bz2.c deleted file mode 100644 index 682a1522049aa..0000000000000 --- a/ext/bz2/bz2.c +++ /dev/null @@ -1,634 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Sterling Hughes | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_bz2.h" - -#if HAVE_BZ2 - -/* PHP Includes */ -#include "ext/standard/file.h" -#include "ext/standard/info.h" -#include "ext/standard/php_string.h" - -/* for fileno() */ -#include - -/* Internal error constants */ -#define PHP_BZ_ERRNO 0 -#define PHP_BZ_ERRSTR 1 -#define PHP_BZ_ERRBOTH 2 - -static PHP_MINIT_FUNCTION(bz2); -static PHP_MSHUTDOWN_FUNCTION(bz2); -static PHP_MINFO_FUNCTION(bz2); -static PHP_FUNCTION(bzopen); -static PHP_FUNCTION(bzread); -static PHP_FUNCTION(bzerrno); -static PHP_FUNCTION(bzerrstr); -static PHP_FUNCTION(bzerror); -static PHP_FUNCTION(bzcompress); -static PHP_FUNCTION(bzdecompress); - -/* {{{ arginfo */ -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_bzread, 0, 0, 1) - ZEND_ARG_INFO(0, bz) - ZEND_ARG_INFO(0, length) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_bzopen, 0) - ZEND_ARG_INFO(0, file) - ZEND_ARG_INFO(0, mode) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_bzerrno, 0) - ZEND_ARG_INFO(0, bz) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_bzerrstr, 0) - ZEND_ARG_INFO(0, bz) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_bzerror, 0) - ZEND_ARG_INFO(0, bz) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_bzcompress, 0, 0, 2) - ZEND_ARG_INFO(0, source) - ZEND_ARG_INFO(0, blocksize) - ZEND_ARG_INFO(0, workfactor) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_bzdecompress, 0, 0, 1) - ZEND_ARG_INFO(0, source) - ZEND_ARG_INFO(0, small) -ZEND_END_ARG_INFO() - -/* }}} */ - -static zend_function_entry bz2_functions[] = { - PHP_FE(bzopen, arginfo_bzopen) - PHP_FE(bzread, arginfo_bzread) - PHP_FALIAS(bzwrite, fwrite, NULL) - PHP_FALIAS(bzflush, fflush, NULL) - PHP_FALIAS(bzclose, fclose, NULL) - PHP_FE(bzerrno, arginfo_bzerrno) - PHP_FE(bzerrstr, arginfo_bzerrstr) - PHP_FE(bzerror, arginfo_bzerror) - PHP_FE(bzcompress, arginfo_bzcompress) - PHP_FE(bzdecompress, arginfo_bzdecompress) - {NULL, NULL, NULL} -}; - -zend_module_entry bz2_module_entry = { - STANDARD_MODULE_HEADER, - "bz2", - bz2_functions, - PHP_MINIT(bz2), - PHP_MSHUTDOWN(bz2), - NULL, - NULL, - PHP_MINFO(bz2), - NO_VERSION_YET, - STANDARD_MODULE_PROPERTIES -}; - -#ifdef COMPILE_DL_BZ2 -ZEND_GET_MODULE(bz2) -#endif - -struct php_bz2_stream_data_t { - BZFILE *bz_file; - php_stream *stream; -}; - -/* {{{ BZip2 stream implementation */ - -static size_t php_bz2iop_read(php_stream *stream, char *buf, size_t count TSRMLS_DC) -{ - struct php_bz2_stream_data_t *self = (struct php_bz2_stream_data_t *) stream->abstract; - size_t ret; - - ret = BZ2_bzread(self->bz_file, buf, count); - - if (ret == 0) { - stream->eof = 1; - } - - return ret; -} - -static size_t php_bz2iop_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC) -{ - struct php_bz2_stream_data_t *self = (struct php_bz2_stream_data_t *) stream->abstract; - - return BZ2_bzwrite(self->bz_file, (char*)buf, count); -} - -static int php_bz2iop_close(php_stream *stream, int close_handle TSRMLS_DC) -{ - struct php_bz2_stream_data_t *self = (struct php_bz2_stream_data_t *)stream->abstract; - int ret = EOF; - - if (close_handle) { - BZ2_bzclose(self->bz_file); - } - - if (self->stream) { - php_stream_free(self->stream, PHP_STREAM_FREE_CLOSE | (close_handle == 0 ? PHP_STREAM_FREE_PRESERVE_HANDLE : 0)); - } - - efree(self); - - return ret; -} - -static int php_bz2iop_flush(php_stream *stream TSRMLS_DC) -{ - struct php_bz2_stream_data_t *self = (struct php_bz2_stream_data_t *)stream->abstract; - return BZ2_bzflush(self->bz_file); -} -/* }}} */ - -php_stream_ops php_stream_bz2io_ops = { - php_bz2iop_write, php_bz2iop_read, - php_bz2iop_close, php_bz2iop_flush, - "BZip2", - NULL, /* seek */ - NULL, /* cast */ - NULL, /* stat */ - NULL /* set_option */ -}; - -/* {{{ Bzip2 stream openers */ -PHP_BZ2_API php_stream *_php_stream_bz2open_from_BZFILE(BZFILE *bz, - char *mode, php_stream *innerstream STREAMS_DC TSRMLS_DC) -{ - struct php_bz2_stream_data_t *self; - - self = emalloc(sizeof(*self)); - - self->stream = innerstream; - self->bz_file = bz; - - return php_stream_alloc_rel(&php_stream_bz2io_ops, self, 0, mode); -} - -PHP_BZ2_API php_stream *_php_stream_bz2open(php_stream_wrapper *wrapper, - char *path, - char *mode, - int options, - char **opened_path, - php_stream_context *context STREAMS_DC TSRMLS_DC) -{ - php_stream *retstream = NULL, *stream = NULL; - char *path_copy = NULL; - BZFILE *bz_file = NULL; - - if (strncasecmp("compress.bzip2://", path, 17) == 0) { - path += 17; - } - if (mode[0] == '\0' || (mode[0] != 'w' && mode[0] != 'r' && mode[1] != '\0')) { - return NULL; - } - -#ifdef VIRTUAL_DIR - virtual_filepath_ex(path, &path_copy, NULL TSRMLS_CC); -#else - path_copy = path; -#endif - - /* try and open it directly first */ - bz_file = BZ2_bzopen(path_copy, mode); - - if (opened_path && bz_file) { - *opened_path = estrdup(path_copy); - } - path_copy = NULL; - - if (bz_file == NULL) { - /* that didn't work, so try and get something from the network/wrapper */ - stream = php_stream_open_wrapper(path, mode, options | STREAM_WILL_CAST, opened_path); - - if (stream) { - int fd; - if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD, (void **) &fd, REPORT_ERRORS)) { - bz_file = BZ2_bzdopen(fd, mode); - } - } - /* remove the file created by php_stream_open_wrapper(), it is not needed since BZ2 functions - * failed. - */ - if (opened_path && !bz_file && mode[0] == 'w') { - VCWD_UNLINK(*opened_path); - } - } - - if (bz_file) { - retstream = _php_stream_bz2open_from_BZFILE(bz_file, mode, stream STREAMS_REL_CC TSRMLS_CC); - if (retstream) { - return retstream; - } - - BZ2_bzclose(bz_file); - } - - if (stream) { - php_stream_close(stream); - } - - return NULL; -} - -/* }}} */ - -static php_stream_wrapper_ops bzip2_stream_wops = { - _php_stream_bz2open, - NULL, /* close */ - NULL, /* fstat */ - NULL, /* stat */ - NULL, /* opendir */ - "BZip2", - NULL, /* unlink */ - NULL, /* rename */ - NULL, /* mkdir */ - NULL /* rmdir */ -}; - -static php_stream_wrapper php_stream_bzip2_wrapper = { - &bzip2_stream_wops, - NULL, - 0 /* is_url */ -}; - -static void php_bz2_error(INTERNAL_FUNCTION_PARAMETERS, int); - -static PHP_MINIT_FUNCTION(bz2) -{ - php_register_url_stream_wrapper("compress.bzip2", &php_stream_bzip2_wrapper TSRMLS_CC); - php_stream_filter_register_factory("bzip2.*", &php_bz2_filter_factory TSRMLS_CC); - return SUCCESS; -} - -static PHP_MSHUTDOWN_FUNCTION(bz2) -{ - php_unregister_url_stream_wrapper("compress.bzip2" TSRMLS_CC); - php_stream_filter_unregister_factory("bzip2.*" TSRMLS_CC); - - return SUCCESS; -} - -static PHP_MINFO_FUNCTION(bz2) -{ - php_info_print_table_start(); - php_info_print_table_row(2, "BZip2 Support", "Enabled"); - php_info_print_table_row(2, "Stream Wrapper support", "compress.bz2://"); - php_info_print_table_row(2, "Stream Filter support", "bzip2.decompress, bzip2.compress"); - php_info_print_table_row(2, "BZip2 Version", (char *) BZ2_bzlibVersion()); - php_info_print_table_end(); -} - -/* {{{ proto string bzread(resource bz[, int length]) U - Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified */ -static PHP_FUNCTION(bzread) -{ - zval *bz; - long len = 1024; - php_stream *stream; - - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &bz, &len)) { - RETURN_FALSE; - } - - php_stream_from_zval(stream, &bz); - - if ((len + 1) < 1) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "length may not be negative"); - RETURN_FALSE; - } - - if (stream->readbuf_type == IS_UNICODE) { - int buflen = len; - UChar *buf = php_stream_read_unicode_chars(stream, &buflen); - - if (!buf) { - /* For BC */ - RETURN_EMPTY_UNICODE(); - } - - RETURN_UNICODEL(buf, buflen, 0); - } else { /* IS_STRING */ - char *buf = emalloc(len + 1); - int buflen = php_stream_read(stream, buf, len); - - if (!buflen) { - efree(buf); - RETURN_EMPTY_STRING(); - } - buf[buflen] = 0; - RETURN_STRINGL(buf, buflen, 0); - } -} -/* }}} */ - -/* {{{ proto resource bzopen(string|int file|fp, string mode) U - Opens a new BZip2 stream */ -static PHP_FUNCTION(bzopen) -{ - zval **file; /* The file to open */ - char *mode; /* The mode to open the stream with */ - int mode_len; - BZFILE *bz; /* The compressed file stream */ - php_stream *stream = NULL; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Zs", &file, &mode, &mode_len) == FAILURE) { - return; - } - - if (mode_len != 1 || (mode[0] != 'r' && mode[0] != 'w')) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "'%s' is not a valid mode for bzopen(). Only 'w' and 'r' are supported", mode); - RETURN_FALSE; - } - - /* If it's not a resource its a string containing the filename to open */ - if (Z_TYPE_PP(file) != IS_RESOURCE) { - char *filename; - int filename_len; - - if (FAILURE == php_stream_path_param_encode(file, &filename, &filename_len, REPORT_ERRORS, FG(default_context))) { - RETURN_FALSE; - } - - if (filename_len == 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "filename cannot be empty"); - RETURN_FALSE; - } - - stream = php_stream_bz2open(NULL, filename, mode, REPORT_ERRORS, NULL); - } else { - /* If it is a resource, than its a stream resource */ - int fd; - int stream_mode_len; - - php_stream_from_zval(stream, file); - stream_mode_len = strlen(stream->mode); - - if (stream_mode_len != 1 && !(stream_mode_len == 2 && memchr(stream->mode, 'b', 2))) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot use stream opened in mode '%s'", stream->mode); - RETURN_FALSE; - } else if (stream_mode_len == 1 && stream->mode[0] != 'r' && stream->mode[0] != 'w' && stream->mode[0] != 'a' && stream->mode[0] != 'x') { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot use stream opened in mode '%s'", stream->mode); - RETURN_FALSE; - } - - switch(mode[0]) { - case 'r': - /* only "r" and "rb" are supported */ - if (stream->mode[0] != mode[0] && !(stream_mode_len == 2 && stream->mode[1] != mode[0])) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot read from a stream opened in write only mode"); - RETURN_FALSE; - } - break; - case 'w': - /* support only "w"(b), "a"(b), "x"(b) */ - if (stream->mode[0] != mode[0] && !(stream_mode_len == 2 && stream->mode[1] != mode[0]) - && stream->mode[0] != 'a' && !(stream_mode_len == 2 && stream->mode[1] != 'a') - && stream->mode[0] != 'x' && !(stream_mode_len == 2 && stream->mode[1] != 'x')) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot write to a stream opened in read only mode"); - RETURN_FALSE; - } - break; - default: - /* not reachable */ - break; - } - - /* If the stream is filtered, it'll fail here because it's not castable */ - if (FAILURE == php_stream_cast(stream, PHP_STREAM_AS_FD, (void *) &fd, REPORT_ERRORS)) { - RETURN_FALSE; - } - - bz = BZ2_bzdopen(fd, mode); - - stream = php_stream_bz2open_from_BZFILE(bz, mode, stream); - } - - if (stream) { - php_stream_to_zval(stream, return_value); - } else { - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto int bzerrno(resource bz) U - Returns the error number */ -static PHP_FUNCTION(bzerrno) -{ - php_bz2_error(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_BZ_ERRNO); -} -/* }}} */ - -/* {{{ proto string bzerrstr(resource bz) U - Returns the error string */ -static PHP_FUNCTION(bzerrstr) -{ - php_bz2_error(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_BZ_ERRSTR); -} -/* }}} */ - -/* {{{ proto array bzerror(resource bz) U - Returns the error number and error string in an associative array */ -static PHP_FUNCTION(bzerror) -{ - php_bz2_error(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_BZ_ERRBOTH); -} -/* }}} */ - -/* {{{ proto string bzcompress(string source [, int blocksize100k [, int workfactor]]) U - Compresses a string into BZip2 encoded data */ -static PHP_FUNCTION(bzcompress) -{ - zstr source; /* String to compress */ - int source_len; - zend_uchar source_type; - long block_size = 4, /* Block size for compression algorithm */ - work_factor = 0; /* Work factor for compression algorithm */ - char *dest = NULL; /* Destination to place the compressed data into */ - int dest_len = 0; - int error; /* Error Container */ - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t|ll", &source, &source_len, &source_type, &block_size, &work_factor) == FAILURE) { - return; - } - - /* Malloc dest to dest_len which is the length of the 101% the length of the data plus 600 bytes - * This is the largest size the results of the compression could possibly be, - * at least that's what the libbz2 docs say (thanks to jeremy@nirvani.net for pointing this out). - */ - dest_len = source_len + (0.01 * source_len) + 600; - dest = emalloc(dest_len + 1); - - if (source_type == IS_UNICODE) { - source.s = zend_unicode_to_ascii(source.u, source_len TSRMLS_CC); - if (!source.s) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Binary or ASCII-Unicode string expected, non-ASCII-Unicode string received"); - RETURN_FALSE; - } - } - - error = BZ2_bzBuffToBuffCompress(dest, &dest_len, source.s, source_len, block_size, 0, work_factor); - if (error != BZ_OK) { - efree(dest); - RETVAL_LONG(error); - } else { - if (dest_len < source_len) { - /* Normal case, but it means we over alloc'd */ - dest = erealloc(dest, dest_len + 1); - } /* else it's not worth a realloc */ - - dest[dest_len] = 0; - RETVAL_STRINGL(dest, dest_len, 0); - } - - if (source_type == IS_UNICODE) { - efree(source.s); - } -} -/* }}} */ - -/* {{{ proto string bzdecompress(string source [, int small]) U - Decompresses BZip2 compressed data */ -static PHP_FUNCTION(bzdecompress) -{ - char *source, *dest; - int source_len, error; - long small = 0; -#if defined(PHP_WIN32) - unsigned __int64 size = 0; -#else - unsigned long long size = 0; -#endif - bz_stream bzs; - - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S|l", &source, &source_len, &small)) { - RETURN_FALSE; - } - - bzs.bzalloc = NULL; - bzs.bzfree = NULL; - - if (BZ2_bzDecompressInit(&bzs, 0, small) != BZ_OK) { - RETURN_FALSE; - } - - bzs.next_in = source; - bzs.avail_in = source_len; - - /* in most cases bz2 offers at least 2:1 compression, so we use that as our base */ - bzs.avail_out = source_len * 2; - bzs.next_out = dest = emalloc(bzs.avail_out + 1); - - while ((error = BZ2_bzDecompress(&bzs)) == BZ_OK && bzs.avail_in > 0) { - /* compression is better then 2:1, need to allocate more memory */ - bzs.avail_out = source_len; - size = (bzs.total_out_hi32 * (unsigned int) -1) + bzs.total_out_lo32; - dest = erealloc(dest, size + bzs.avail_out + 1); - bzs.next_out = dest + size; - } - - if (error == BZ_STREAM_END || error == BZ_OK) { - size = (bzs.total_out_hi32 * (unsigned int) -1) + bzs.total_out_lo32; - dest = erealloc(dest, size + 1); - dest[size] = '\0'; - RETVAL_STRINGL(dest, size, 0); - } else { /* real error */ - efree(dest); - RETVAL_LONG(error); - } - - BZ2_bzDecompressEnd(&bzs); -} -/* }}} */ - -/* {{{ php_bz2_error() - The central error handling interface, does the work for bzerrno, bzerrstr and bzerror */ -static void php_bz2_error(INTERNAL_FUNCTION_PARAMETERS, int opt) -{ - zval *zstream; /* BZip2 Resource Pointer */ - php_stream *stream; - const char *errstr; /* Error string */ - int errnum; /* Error number */ - struct php_bz2_stream_data_t *self; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zstream) == FAILURE) { - return; - } - - php_stream_from_zval(stream, &zstream); - - if (!php_stream_is(stream, PHP_STREAM_IS_BZIP2)) { - RETURN_FALSE; - } - - self = (struct php_bz2_stream_data_t *) stream->abstract; - - /* Fetch the error information */ - errstr = BZ2_bzerror(self->bz_file, &errnum); - - /* Determine what to return */ - switch (opt) { - case PHP_BZ_ERRNO: - RETURN_LONG(errnum); - break; - case PHP_BZ_ERRSTR: - RETURN_RT_STRING((char*)errstr, ZSTR_DUPLICATE); - break; - case PHP_BZ_ERRBOTH: - array_init(return_value); - - add_ascii_assoc_long (return_value, "errno", errnum); - add_ascii_assoc_rt_string(return_value, "errstr", (char*)errstr, ZSTR_DUPLICATE); - break; - } -} -/* }}} */ - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: fdm=marker - * vim: noet sw=4 ts=4 - */ diff --git a/ext/bz2/bz2.dsp b/ext/bz2/bz2.dsp deleted file mode 100644 index a054c522a79b9..0000000000000 --- a/ext/bz2/bz2.dsp +++ /dev/null @@ -1,112 +0,0 @@ -# Microsoft Developer Studio Project File - Name="bz2" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=bz2 - Win32 Debug_TS -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "bz2.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "bz2.mak" CFG="bz2 - Win32 Debug_TS" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "bz2 - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "bz2 - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "bz2 - Win32 Release_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_TS" -# PROP BASE Intermediate_Dir "Release_TS" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_TS" -# PROP Intermediate_Dir "Release_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "BZ2_EXPORTS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\includes" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_BZ2" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_BZ2=1 /D "PHP_BZ2_EXPORTS" /FR /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 libbz2.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_bz2.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\php_build\release" - -!ELSEIF "$(CFG)" == "bz2 - Win32 Debug_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_TS" -# PROP BASE Intermediate_Dir "Debug_TS" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug_TS" -# PROP Intermediate_Dir "Debug_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "BZ2_EXPORTS" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\..\php_build\includes" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_BZ2" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_BZ2=1 /D "PHP_BZ2_EXPORTS" /YX /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 php5ts_debug.lib libbz2.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_bz2.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\release" - -!ENDIF - -# Begin Target - -# Name "bz2 - Win32 Release_TS" -# Name "bz2 - Win32 Debug_TS" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\bz2.c -# End Source File -# Begin Source File - -SOURCE=.\bz2_filter.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\php_bz2.h -# End Source File -# End Group -# End Target -# End Project diff --git a/ext/bz2/bz2_filter.c b/ext/bz2/bz2_filter.c deleted file mode 100644 index cc42b162a1999..0000000000000 --- a/ext/bz2/bz2_filter.c +++ /dev/null @@ -1,409 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Sara Golemon (pollita@php.net) | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_bz2.h" - -/* {{{ data structure */ - -typedef struct _php_bz2_filter_data { - int persistent; - bz_stream strm; - char *inbuf; - size_t inbuf_len; - char *outbuf; - size_t outbuf_len; -} php_bz2_filter_data; - -/* }}} */ - -/* {{{ Memory management wrappers */ - -static void *php_bz2_alloc(void *opaque, int items, int size) -{ - return (void *)safe_pemalloc(items, size, 0, ((php_bz2_filter_data*)opaque)->persistent); -} - -static void php_bz2_free(void *opaque, void *address) -{ - pefree((void *)address, ((php_bz2_filter_data*)opaque)->persistent); -} -/* }}} */ - -/* {{{ bzip2.decompress filter implementation */ - -static php_stream_filter_status_t php_bz2_decompress_filter( - php_stream *stream, - php_stream_filter *thisfilter, - php_stream_bucket_brigade *buckets_in, - php_stream_bucket_brigade *buckets_out, - size_t *bytes_consumed, - int flags - TSRMLS_DC) -{ - php_bz2_filter_data *data; - php_stream_bucket *bucket; - size_t consumed = 0; - int status; - php_stream_filter_status_t exit_status = PSFS_FEED_ME; - bz_stream *streamp; - - if (!thisfilter || !thisfilter->abstract) { - /* Should never happen */ - return PSFS_ERR_FATAL; - } - - data = (php_bz2_filter_data *)(thisfilter->abstract); - streamp = &(data->strm); - - while (buckets_in->head) { - size_t bin = 0, desired; - - bucket = buckets_in->head; - - if (bucket->buf_type == IS_UNICODE) { - /* decompression not allowed for unicode data */ - return PSFS_ERR_FATAL; - } - - bucket = php_stream_bucket_make_writeable(bucket TSRMLS_CC); - while (bin < bucket->buflen) { - desired = bucket->buflen - bin; - if (desired > data->inbuf_len) { - desired = data->inbuf_len; - } - memcpy(data->strm.next_in, bucket->buf.s + bin, desired); - data->strm.avail_in = desired; - - status = BZ2_bzDecompress(&(data->strm)); - if (status != BZ_OK && status != BZ_STREAM_END) { - /* Something bad happened */ - php_stream_bucket_delref(bucket TSRMLS_CC); - return PSFS_ERR_FATAL; - } - desired -= data->strm.avail_in; /* desired becomes what we consumed this round through */ - data->strm.next_in = data->inbuf; - data->strm.avail_in = 0; - consumed += desired; - bin += desired; - - if (!desired) { - flags |= PSFS_FLAG_FLUSH_CLOSE; - break; - } - - if (data->strm.avail_out < data->outbuf_len) { - php_stream_bucket *out_bucket; - size_t bucketlen = data->outbuf_len - data->strm.avail_out; - out_bucket = php_stream_bucket_new(stream, estrndup(data->outbuf, bucketlen), bucketlen, 1, 0 TSRMLS_CC); - php_stream_bucket_append(buckets_out, out_bucket TSRMLS_CC); - data->strm.avail_out = data->outbuf_len; - data->strm.next_out = data->outbuf; - exit_status = PSFS_PASS_ON; - } - } - php_stream_bucket_delref(bucket TSRMLS_CC); - } - - if (flags & PSFS_FLAG_FLUSH_CLOSE) { - /* Spit it out! */ - status = BZ_OK; - while (status == BZ_OK) { - status = BZ2_bzDecompress(&(data->strm)); - if (data->strm.avail_out < data->outbuf_len) { - size_t bucketlen = data->outbuf_len - data->strm.avail_out; - - bucket = php_stream_bucket_new(stream, estrndup(data->outbuf, bucketlen), bucketlen, 1, 0 TSRMLS_CC); - php_stream_bucket_append(buckets_out, bucket TSRMLS_CC); - data->strm.avail_out = data->outbuf_len; - data->strm.next_out = data->outbuf; - exit_status = PSFS_PASS_ON; - } - } - } - - if (bytes_consumed) { - *bytes_consumed = consumed; - } - - return exit_status; -} - -static void php_bz2_decompress_dtor(php_stream_filter *thisfilter TSRMLS_DC) -{ - if (thisfilter && thisfilter->abstract) { - php_bz2_filter_data *data = thisfilter->abstract; - BZ2_bzDecompressEnd(&(data->strm)); - pefree(data->inbuf, data->persistent); - pefree(data->outbuf, data->persistent); - pefree(data, data->persistent); - } -} - -static php_stream_filter_ops php_bz2_decompress_ops = { - php_bz2_decompress_filter, - php_bz2_decompress_dtor, - "bzip2.decompress", - PSFO_FLAG_ACCEPTS_STRING | PSFO_FLAG_OUTPUTS_STRING -}; -/* }}} */ - -/* {{{ bzip2.compress filter implementation */ - -static php_stream_filter_status_t php_bz2_compress_filter( - php_stream *stream, - php_stream_filter *thisfilter, - php_stream_bucket_brigade *buckets_in, - php_stream_bucket_brigade *buckets_out, - size_t *bytes_consumed, - int flags - TSRMLS_DC) -{ - php_bz2_filter_data *data; - php_stream_bucket *bucket; - size_t consumed = 0; - int status; - php_stream_filter_status_t exit_status = PSFS_FEED_ME; - bz_stream *streamp; - - if (!thisfilter || !thisfilter->abstract) { - /* Should never happen */ - return PSFS_ERR_FATAL; - } - - data = (php_bz2_filter_data *)(thisfilter->abstract); - streamp = &(data->strm); - - while (buckets_in->head) { - size_t bin = 0, desired; - - bucket = buckets_in->head; - - if (bucket->buf_type == IS_UNICODE) { - /* compression not allowed for unicode data */ - return PSFS_ERR_FATAL; - } - - bucket = php_stream_bucket_make_writeable(bucket TSRMLS_CC); - - while (bin < bucket->buflen) { - desired = bucket->buflen - bin; - if (desired > data->inbuf_len) { - desired = data->inbuf_len; - } - memcpy(data->strm.next_in, bucket->buf.s + bin, desired); - data->strm.avail_in = desired; - - status = BZ2_bzCompress(&(data->strm), flags & PSFS_FLAG_FLUSH_CLOSE ? BZ_FINISH : (flags & PSFS_FLAG_FLUSH_INC ? BZ_FLUSH : BZ_RUN)); - if (status != BZ_RUN_OK && status != BZ_FLUSH_OK && status != BZ_FINISH_OK) { - /* Something bad happened */ - php_stream_bucket_delref(bucket TSRMLS_CC); - return PSFS_ERR_FATAL; - } - desired -= data->strm.avail_in; /* desired becomes what we consumed this round through */ - data->strm.next_in = data->inbuf; - data->strm.avail_in = 0; - consumed += desired; - bin += desired; - - if (data->strm.avail_out < data->outbuf_len) { - php_stream_bucket *out_bucket; - size_t bucketlen = data->outbuf_len - data->strm.avail_out; - - out_bucket = php_stream_bucket_new(stream, estrndup(data->outbuf, bucketlen), bucketlen, 1, 0 TSRMLS_CC); - php_stream_bucket_append(buckets_out, out_bucket TSRMLS_CC); - data->strm.avail_out = data->outbuf_len; - data->strm.next_out = data->outbuf; - exit_status = PSFS_PASS_ON; - } - } - php_stream_bucket_delref(bucket TSRMLS_CC); - } - - if (flags & PSFS_FLAG_FLUSH_CLOSE) { - /* Spit it out! */ - status = BZ_OUTBUFF_FULL; - while (status == BZ_OUTBUFF_FULL) { - status = BZ2_bzCompress(&(data->strm), BZ_FINISH); - if (data->strm.avail_out < data->outbuf_len) { - size_t bucketlen = data->outbuf_len - data->strm.avail_out; - - bucket = php_stream_bucket_new(stream, estrndup(data->outbuf, bucketlen), bucketlen, 1, 0 TSRMLS_CC); - php_stream_bucket_append(buckets_out, bucket TSRMLS_CC); - data->strm.avail_out = data->outbuf_len; - data->strm.next_out = data->outbuf; - exit_status = PSFS_PASS_ON; - } - } - } - - if (bytes_consumed) { - *bytes_consumed = consumed; - } - return exit_status; -} - -static void php_bz2_compress_dtor(php_stream_filter *thisfilter TSRMLS_DC) -{ - if (thisfilter && thisfilter->abstract) { - php_bz2_filter_data *data = thisfilter->abstract; - BZ2_bzCompressEnd(&(data->strm)); - pefree(data->inbuf, data->persistent); - pefree(data->outbuf, data->persistent); - pefree(data, data->persistent); - } -} - -static php_stream_filter_ops php_bz2_compress_ops = { - php_bz2_compress_filter, - php_bz2_compress_dtor, - "bzip2.compress", - PSFO_FLAG_ACCEPTS_STRING | PSFO_FLAG_OUTPUTS_STRING -}; - -/* }}} */ - -/* {{{ bzip2.* common factory */ - -static php_stream_filter *php_bz2_filter_create(const char *filtername, zval *filterparams, int persistent TSRMLS_DC) -{ - php_stream_filter_ops *fops = NULL; - php_bz2_filter_data *data; - int status; - - /* Create this filter */ - data = pecalloc(1, sizeof(php_bz2_filter_data), persistent); - if (!data) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed allocating %zu bytes", sizeof(php_bz2_filter_data)); - return NULL; - } - - /* Circular reference */ - data->strm.opaque = (void *) data; - - data->strm.bzalloc = php_bz2_alloc; - data->strm.bzfree = php_bz2_free; - data->persistent = persistent; - data->strm.avail_out = data->outbuf_len = data->inbuf_len = 2048; - data->strm.next_in = data->inbuf = (char *) pemalloc(data->inbuf_len, persistent); - if (!data->inbuf) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed allocating %zu bytes", data->inbuf_len); - pefree(data, persistent); - return NULL; - } - data->strm.avail_in = 0; - data->strm.next_out = data->outbuf = (char *) pemalloc(data->outbuf_len, persistent); - if (!data->outbuf) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed allocating %zu bytes", data->outbuf_len); - pefree(data->inbuf, persistent); - pefree(data, persistent); - return NULL; - } - - if (strcasecmp(filtername, "bzip2.decompress") == 0) { - int smallFootprint = 0; - - if (filterparams) { - zval **tmpzval = NULL; - - if (Z_TYPE_P(filterparams) == IS_ARRAY || Z_TYPE_P(filterparams) == IS_OBJECT) { - zend_hash_find(HASH_OF(filterparams), "small", sizeof("small"), (void **) &tmpzval); - } else { - tmpzval = &filterparams; - } - - if (tmpzval) { - SEPARATE_ZVAL(tmpzval); - convert_to_boolean_ex(tmpzval); - smallFootprint = Z_LVAL_PP(tmpzval); - zval_ptr_dtor(tmpzval); - } - } - - status = BZ2_bzDecompressInit(&(data->strm), 0, smallFootprint); - fops = &php_bz2_decompress_ops; - } else if (strcasecmp(filtername, "bzip2.compress") == 0) { - int blockSize100k = PHP_BZ2_FILTER_DEFAULT_BLOCKSIZE; - int workFactor = PHP_BZ2_FILTER_DEFAULT_WORKFACTOR; - - if (filterparams) { - zval **tmpzval; - - if (Z_TYPE_P(filterparams) == IS_ARRAY || Z_TYPE_P(filterparams) == IS_OBJECT) { - if (zend_hash_find(HASH_OF(filterparams), "blocks", sizeof("blocks"), (void**) &tmpzval) == SUCCESS) { - /* How much memory to allocate (1 - 9) x 100kb */ - SEPARATE_ZVAL(tmpzval); - convert_to_long_ex(tmpzval); - if (Z_LVAL_PP(tmpzval) < 1 || Z_LVAL_PP(tmpzval) > 9) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter given for number of blocks to allocate. (%ld)", Z_LVAL_PP(tmpzval)); - } else { - blockSize100k = Z_LVAL_PP(tmpzval); - } - zval_ptr_dtor(tmpzval); - } - - if (zend_hash_find(HASH_OF(filterparams), "work", sizeof("work"), (void**) &tmpzval) == SUCCESS) { - /* Work Factor (0 - 250) */ - SEPARATE_ZVAL(tmpzval); - convert_to_long_ex(tmpzval); - if (Z_LVAL_PP(tmpzval) < 0 || Z_LVAL_PP(tmpzval) > 250) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter given for work factor. (%ld)", Z_LVAL_PP(tmpzval)); - } else { - workFactor = Z_LVAL_PP(tmpzval); - } - zval_ptr_dtor(tmpzval); - } - } - } - - status = BZ2_bzCompressInit(&(data->strm), blockSize100k, 0, workFactor); - fops = &php_bz2_compress_ops; - } else { - status = BZ_DATA_ERROR; - } - - if (status != BZ_OK) { - /* Unspecified (probably strm) error, let stream-filter error do its own whining */ - pefree(data->strm.next_in, persistent); - pefree(data->strm.next_out, persistent); - pefree(data, persistent); - return NULL; - } - - return php_stream_filter_alloc(fops, data, persistent); -} - -php_stream_filter_factory php_bz2_filter_factory = { - php_bz2_filter_create -}; -/* }}} */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/bz2/config.m4 b/ext/bz2/config.m4 deleted file mode 100644 index 3e6aa78d053a6..0000000000000 --- a/ext/bz2/config.m4 +++ /dev/null @@ -1,40 +0,0 @@ -dnl -dnl $Id$ -dnl - -PHP_ARG_WITH(bz2, for BZip2 support, -[ --with-bz2[=DIR] Include BZip2 support]) - -if test "$PHP_BZ2" != "no"; then - if test -r $PHP_BZ2/include/bzlib.h; then - BZIP_DIR=$PHP_BZ2 - else - AC_MSG_CHECKING(for BZip2 in default path) - for i in /usr/local /usr; do - if test -r $i/include/bzlib.h; then - BZIP_DIR=$i - AC_MSG_RESULT(found in $i) - break - fi - done - fi - - if test -z "$BZIP_DIR"; then - AC_MSG_RESULT(not found) - AC_MSG_ERROR(Please reinstall the BZip2 distribution) - fi - - PHP_CHECK_LIBRARY(bz2, BZ2_bzerror, - [ - PHP_ADD_INCLUDE($BZIP_DIR/include) - PHP_ADD_LIBRARY_WITH_PATH(bz2, $BZIP_DIR/$PHP_LIBDIR, BZ2_SHARED_LIBADD) - AC_DEFINE(HAVE_BZ2,1,[ ]) - ], [ - AC_MSG_ERROR(bz2 module requires libbz2 >= 1.0.0) - ], [ - -L$BZIP_DIR/$PHP_LIBDIR - ]) - - PHP_NEW_EXTENSION(bz2, bz2.c bz2_filter.c, $ext_shared) - PHP_SUBST(BZ2_SHARED_LIBADD) -fi diff --git a/ext/bz2/config.w32 b/ext/bz2/config.w32 deleted file mode 100644 index af57f8bc30a4c..0000000000000 --- a/ext/bz2/config.w32 +++ /dev/null @@ -1,18 +0,0 @@ -// $Id$ -// vim:ft=javascript - -ARG_WITH("bz2", "BZip2", "no"); - -if (PHP_BZ2 != "no") { - if (CHECK_LIB("libbz2.lib", "bz2", PHP_BZ2) && - CHECK_HEADER_ADD_INCLUDE("bzlib.h", "CFLAGS_BZ2")) { - EXTENSION("bz2", "bz2.c bz2_filter.c"); - AC_DEFINE('HAVE_BZ2', 1, 'Have BZ2 library'); - // BZ2 extension does this slightly differently from others - if (PHP_BZ2_SHARED) { - ADD_FLAG("CFLAGS_BZ2", "/D PHP_BZ2_EXPORTS "); - } - } else { - WARNING("bz2 not enabled; libraries and headers not found"); - } -} diff --git a/ext/bz2/package.xml b/ext/bz2/package.xml deleted file mode 100644 index 107f2188668f8..0000000000000 --- a/ext/bz2/package.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - bz2 - A Bzip2 management extension - -Bz2 is an extension to create and parse bzip2 compressed data. - - PHP License - - - sterling - Sterling Hughes - sterling@php.net - - - - 1.0 - 2003-05-17 - stable - - Initial Release in PECL - - - - - - - - CREDITS - config.m4 - php_bz2.h - bz2.c - bz2.dsp - - - diff --git a/ext/bz2/php_bz2.def b/ext/bz2/php_bz2.def deleted file mode 100644 index 831355344a2de..0000000000000 --- a/ext/bz2/php_bz2.def +++ /dev/null @@ -1,7 +0,0 @@ -EXPORTS - BZ2_bzCompressInit - BZ2_bzCompress - BZ2_bzCompressEnd - BZ2_bzDecompressInit - BZ2_bzDecompress - BZ2_bzDecompressEnd diff --git a/ext/bz2/php_bz2.h b/ext/bz2/php_bz2.h deleted file mode 100644 index c88c2dbd42d3d..0000000000000 --- a/ext/bz2/php_bz2.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Sterling Hughes | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef PHP_BZ2_H -#define PHP_BZ2_H - -#if HAVE_BZ2 - -extern zend_module_entry bz2_module_entry; -#define phpext_bz2_ptr &bz2_module_entry - -/* Bzip2 includes */ -#include - -#else -#define phpext_bz2_ptr NULL -#endif - -#ifdef PHP_WIN32 -# ifdef PHP_BZ2_EXPORTS -# define PHP_BZ2_API __declspec(dllexport) -# elif defined(COMPILE_DL_BZ2) -# define PHP_BZ2_API __declspec(dllimport) -# else -# define PHP_BZ2_API /* nothing special */ -# endif -#else -# define PHP_BZ2_API -#endif - -PHP_BZ2_API php_stream *_php_stream_bz2open(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC); -PHP_BZ2_API php_stream *_php_stream_bz2open_from_BZFILE(BZFILE *bz, char *mode, php_stream *innerstream STREAMS_DC TSRMLS_DC); - -#define php_stream_bz2open_from_BZFILE(bz, mode, innerstream) _php_stream_bz2open_from_BZFILE((bz), (mode), (innerstream) STREAMS_CC TSRMLS_CC) -#define php_stream_bz2open(wrapper, path, mode, options, opened_path) _php_stream_bz2open((wrapper), (path), (mode), (options), (opened_path), NULL STREAMS_CC TSRMLS_CC) - -php_stream_filter_factory php_bz2_filter_factory; -extern php_stream_ops php_stream_bz2io_ops; -#define PHP_STREAM_IS_BZIP2 &php_stream_bz2io_ops - -/* 400kb */ -#define PHP_BZ2_FILTER_DEFAULT_BLOCKSIZE 4 - -/* BZ2 Internal Default */ -#define PHP_BZ2_FILTER_DEFAULT_WORKFACTOR 0 - -#endif - - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - */ diff --git a/ext/bz2/tests/001.phpt b/ext/bz2/tests/001.phpt deleted file mode 100644 index a8a98151655b9..0000000000000 --- a/ext/bz2/tests/001.phpt +++ /dev/null @@ -1,43 +0,0 @@ ---TEST-- -bzopen() and invalid parameters ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -Warning: bzopen() expects exactly 2 parameters, 0 given in %s on line %d -NULL - -Warning: bzopen(): '' is not a valid mode for bzopen(). Only 'w' and 'r' are supported in %s on line %d -bool(false) - -Warning: bzopen(): filename cannot be empty in %s on line %d -bool(false) - -Warning: bzopen(): filename cannot be empty in %s on line %d -bool(false) - -Warning: bzopen(): 'x' is not a valid mode for bzopen(). Only 'w' and 'r' are supported in %s on line %d -bool(false) - -Warning: bzopen(): 'rw' is not a valid mode for bzopen(). Only 'w' and 'r' are supported in %s on line %d -bool(false) - -Warning: bzopen(no_such_file): failed to open stream: No such file or directory in %s on line %d -bool(false) -resource(%d) of type (stream) -Done diff --git a/ext/bz2/tests/002.phpt b/ext/bz2/tests/002.phpt deleted file mode 100644 index 7b9673275c4ba..0000000000000 --- a/ext/bz2/tests/002.phpt +++ /dev/null @@ -1,129 +0,0 @@ ---TEST-- -bzopen() using fd opened in wrong mode ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -resource(%d) of type (stream) -resource(%d) of type (stream) -resource(%d) of type (stream) - -Warning: bzopen(): cannot read from a stream opened in write only mode in %s on line %d -bool(false) -resource(%d) of type (stream) -resource(%d) of type (stream) - -Warning: fopen(bz_open_002.txt): failed to open stream: Bad file %s in %s on line %d - -Warning: bzopen(): filename cannot be empty in %s on line %d -bool(false) - -Warning: fopen(bz_open_002.txt): failed to open stream: Bad file %s in %s on line %d - -Warning: bzopen(): filename cannot be empty in %s on line %d -bool(false) - -Warning: bzopen(): cannot write to a stream opened in read only mode in %s on line %d -bool(false) - -Warning: bzopen(): cannot read from a stream opened in write only mode in %s on line %d -bool(false) - -Warning: bzopen(): cannot use stream opened in mode 'rw' in %s on line %d -bool(false) - -Warning: bzopen(): cannot use stream opened in mode 'rw' in %s on line %d -bool(false) - -Warning: bzopen(): cannot use stream opened in mode 'wr' in %s on line %d -bool(false) - -Warning: bzopen(): cannot use stream opened in mode 'wr' in %s on line %d -bool(false) - -Warning: bzopen(): cannot use stream opened in mode 'r+' in %s on line %d -bool(false) - -Warning: bzopen(): cannot use stream opened in mode 'r+' in %s on line %d -bool(false) - -Warning: bzopen(): cannot use stream opened in mode 'w+' in %s on line %d -bool(false) - -Warning: bzopen(): cannot use stream opened in mode 'w+' in %s on line %d -bool(false) - -Warning: bzopen(): cannot read from a stream opened in write only mode in %s on line %d -bool(false) -resource(%d) of type (stream) -Done diff --git a/ext/bz2/tests/003.phpt b/ext/bz2/tests/003.phpt deleted file mode 100644 index 1432600087a51..0000000000000 --- a/ext/bz2/tests/003.phpt +++ /dev/null @@ -1,40 +0,0 @@ ---TEST-- -bzread() tests ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -Warning: bzread() expects at least 1 parameter, 0 given in %s on line %d -bool(false) - -Warning: bzread() expects at most 2 parameters, 3 given in %s on line %d -bool(false) -string(0) "" - -Warning: bzread(): length may not be negative in %s on line %d -bool(false) -string(1) "R" -string(2) "is" -string(251) "ing up from the heart of the desert -Rising up for Jerusalem -Rising up from the heat of the desert -Building up Old Jerusalem -Rising up from the heart of the desert -Rising up for Jerusalem -Rising up from the heat of the desert -Heading out for Jerusalem -" -Done diff --git a/ext/bz2/tests/003.txt.bz2 b/ext/bz2/tests/003.txt.bz2 deleted file mode 100644 index 034cd4d8b7c515a7166d0755bad615da85e50c79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmV-^0D=EPT4*^jL0KkKS@RmjRR91S*MI;JKmZU>kN_v=-T)u~iUmq)6VWs@8%PyO zXaGGx(SzB}_H*RYl8QLsxl(G{ES<1e{c+Vh6JbLGl1iCGR7j!q>`_$5UXBgShQs1jem=|BAh5ld5vPKfbnKD@c;k- diff --git a/ext/bz2/tests/004.phpt b/ext/bz2/tests/004.phpt deleted file mode 100644 index e78d3b9cff6fb..0000000000000 --- a/ext/bz2/tests/004.phpt +++ /dev/null @@ -1,177 +0,0 @@ ---TEST-- -bzread() tests with invalid files ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -array(2) { - ["errno"]=> - int(0) - ["errstr"]=> - string(2) "OK" -} -string(2) "OK" -int(0) -array(2) { - ["errno"]=> - int(0) - ["errstr"]=> - string(2) "OK" -} -string(2) "OK" -int(0) -string(0) "" -array(2) { - ["errno"]=> - int(-5) - ["errstr"]=> - string(16) "DATA_ERROR_MAGIC" -} -string(16) "DATA_ERROR_MAGIC" -int(-5) -string(0) "" -array(2) { - ["errno"]=> - int(-4) - ["errstr"]=> - string(10) "DATA_ERROR" -} -string(10) "DATA_ERROR" -int(-4) -string(0) "" -array(2) { - ["errno"]=> - int(-5) - ["errstr"]=> - string(16) "DATA_ERROR_MAGIC" -} -string(16) "DATA_ERROR_MAGIC" -int(-5) -string(0) "" -array(2) { - ["errno"]=> - int(-4) - ["errstr"]=> - string(10) "DATA_ERROR" -} -string(10) "DATA_ERROR" -int(-4) - -Warning: bzread(): %d is not a valid stream resource in %s on line %d -bool(false) - -Warning: bzerror(): %d is not a valid stream resource in %s on line %d -bool(false) - -Warning: bzerrstr(): %d is not a valid stream resource in %s on line %d -bool(false) - -Warning: bzerrno(): %d is not a valid stream resource in %s on line %d -bool(false) -Done ---UEXPECTF-- -array(2) { - [u"errno"]=> - int(0) - [u"errstr"]=> - unicode(2) "OK" -} -unicode(2) "OK" -int(0) -array(2) { - [u"errno"]=> - int(0) - [u"errstr"]=> - unicode(2) "OK" -} -unicode(2) "OK" -int(0) -string(0) "" -array(2) { - [u"errno"]=> - int(-5) - [u"errstr"]=> - unicode(16) "DATA_ERROR_MAGIC" -} -unicode(16) "DATA_ERROR_MAGIC" -int(-5) -string(0) "" -array(2) { - [u"errno"]=> - int(-4) - [u"errstr"]=> - unicode(10) "DATA_ERROR" -} -unicode(10) "DATA_ERROR" -int(-4) -string(0) "" -array(2) { - [u"errno"]=> - int(-5) - [u"errstr"]=> - unicode(16) "DATA_ERROR_MAGIC" -} -unicode(16) "DATA_ERROR_MAGIC" -int(-5) -string(0) "" -array(2) { - [u"errno"]=> - int(-4) - [u"errstr"]=> - unicode(10) "DATA_ERROR" -} -unicode(10) "DATA_ERROR" -int(-4) - -Warning: bzread(): %d is not a valid stream resource in %s on line %d -bool(false) - -Warning: bzerror(): %d is not a valid stream resource in %s on line %d -bool(false) - -Warning: bzerrstr(): %d is not a valid stream resource in %s on line %d -bool(false) - -Warning: bzerrno(): %d is not a valid stream resource in %s on line %d -bool(false) -Done diff --git a/ext/bz2/tests/004_1.txt.bz2 b/ext/bz2/tests/004_1.txt.bz2 deleted file mode 100644 index 6a5067b277354765daa8529d2f03297e39e448aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmV-@0D}KQIWa+5CR17S8pTxr036qV01!X`5Kxc+C+FS(AOMO5N@^3)G&CDX6-sCT zJwVZe+0OQJi@744C`fsYVyb`&#>X@{ diff --git a/ext/bz2/tests/004_2.txt.bz2 b/ext/bz2/tests/004_2.txt.bz2 deleted file mode 100644 index 9c19f043a4d9a65ef2347f223b9424c0a6825e02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmV->0EGWST4*^jL0KkKS@RmjRR91S*MI;JKmZU>kSFKf03ZO01xjiY(KIw0NEJ!| zJwVZe+0OQJ3;1CmOaL{y>m>`_$5UXBgShQs1jem=|BAh5ld5vPKfC_j*GjRX_ diff --git a/ext/bz2/tests/005.phpt b/ext/bz2/tests/005.phpt deleted file mode 100644 index ee45f10f7c777..0000000000000 --- a/ext/bz2/tests/005.phpt +++ /dev/null @@ -1,104 +0,0 @@ ---TEST-- -bzcompress()/bzdecompress() tests ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -Warning: bzcompress() expects at least 1 parameter, 0 given in %s on line %d -NULL -string(%d) "BZ%s" -int(-2) -int(-2) -int(-2) -int(-2) - -Warning: bzdecompress() expects at least 1 parameter, 0 given in %s on line %d -bool(false) - -Warning: bzdecompress() expects at most 2 parameters, 3 given in %s on line %d -bool(false) -int(-5) -int(-5) -int(-5) -bool(false) -string(110) "Life it seems, will fade away -Drifting further everyday -Getting lost within myself -Nothing matters no one else" -bool(false) -string(110) "Life it seems, will fade away -Drifting further everyday -Getting lost within myself -Nothing matters no one else" -string(110) "Life it seems, will fade away -Drifting further everyday -Getting lost within myself -Nothing matters no one else" -Done ---UEXPECTF-- -Warning: bzcompress() expects at least 1 parameter, 0 given in %s on line %d -NULL -unicode(%d) "BZ%s" -int(-2) -int(-2) -int(-2) -int(-2) - -Warning: bzdecompress() expects at least 1 parameter, 0 given in %s on line %d -bool(false) - -Warning: bzdecompress() expects at most 2 parameters, 3 given in %s on line %d -bool(false) -int(-5) -int(-5) -int(-5) -bool(false) -string(110) "Life it seems, will fade away -Drifting further everyday -Getting lost within myself -Nothing matters no one else" -bool(false) -string(110) "Life it seems, will fade away -Drifting further everyday -Getting lost within myself -Nothing matters no one else" -string(110) "Life it seems, will fade away -Drifting further everyday -Getting lost within myself -Nothing matters no one else" -Done diff --git a/ext/bz2/tests/bz2_filter_compress.phpt b/ext/bz2/tests/bz2_filter_compress.phpt deleted file mode 100644 index 4926e112b5b57..0000000000000 --- a/ext/bz2/tests/bz2_filter_compress.phpt +++ /dev/null @@ -1,17 +0,0 @@ ---TEST-- -bzip2.compress (with convert.base64-encode) ---SKIPIF-- - ---FILE-- - ---EXPECT-- -QlpoNDFBWSZTWRN6QG0AAAoVgECFACA395UgIABIintI1N6mpowIQ0E1MTTAQGYTNcRyMZm5kgW3ib7hVboE7Tmqj3ToGZ5G3q1ZauD2G58hibSck8KS95EEAbx1Cn+LuSKcKEgJvSA2gA== diff --git a/ext/bz2/tests/bz2_filter_decompress.phpt b/ext/bz2/tests/bz2_filter_decompress.phpt deleted file mode 100644 index 3d354125a0b84..0000000000000 --- a/ext/bz2/tests/bz2_filter_decompress.phpt +++ /dev/null @@ -1,17 +0,0 @@ ---TEST-- -bzip2.decompress (with convert.base64-decode) ---SKIPIF-- - ---FILE-- - ---EXPECT-- -I am the very model of a modern major general, I've information vegetable, animal, and mineral. diff --git a/ext/bz2/tests/with_files.phpt b/ext/bz2/tests/with_files.phpt deleted file mode 100644 index c9f56f94f94e3..0000000000000 --- a/ext/bz2/tests/with_files.phpt +++ /dev/null @@ -1,23 +0,0 @@ ---TEST-- -BZ2 with files ---SKIPIF-- - ---FILE-- - ---FILE-- - | - | Colin Viebrock | - | Hartmut Holzgraefe | - +----------------------------------------------------------------------+ - */ -/* $Id: */ - -#include "php.h" -#include "php_calendar.h" -#include "sdncal.h" -#include - -/* {{{ proto int unixtojd([int timestamp]) - Convert UNIX timestamp to Julian Day */ -PHP_FUNCTION(unixtojd) -{ - time_t timestamp; - long jdate, t; - struct tm *ta, tmbuf; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &t) == FAILURE) { - return; - } - - if (ZEND_NUM_ARGS()) { - timestamp = (time_t) t; - } else { - timestamp = time(NULL); - } - - if (timestamp < 0) { - RETURN_FALSE; - } - - ta = php_localtime_r(×tamp, &tmbuf); - jdate = GregorianToSdn(ta->tm_year+1900, ta->tm_mon+1, ta->tm_mday); - - RETURN_LONG(jdate); -} -/* }}} */ - -/* {{{ proto int jdtounix(int jday) - Convert Julian Day to UNIX timestamp */ -PHP_FUNCTION(jdtounix) -{ - long uday, jday; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &jday) != SUCCESS) { - return; - } - - uday = jday - 2440588; /* J.D. of 1.1.1970 */ - if(uday<0) RETURN_FALSE; /* before beginning of unix epoch */ - if(uday>24755) RETURN_FALSE; /* behind end of unix epoch */ - - RETURN_LONG(uday*24*3600); -} -/* }}} */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/calendar/calendar.c b/ext/calendar/calendar.c deleted file mode 100644 index 5ecbade3534ca..0000000000000 --- a/ext/calendar/calendar.c +++ /dev/null @@ -1,766 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Shane Caraveo | - | Colin Viebrock | - | Hartmut Holzgraefe | - | Wez Furlong | - +----------------------------------------------------------------------+ - */ -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifdef PHP_WIN32 -#define _WINNLS_ -#endif - -#include "php.h" -#include "ext/standard/info.h" -#include "php_calendar.h" -#include "sdncal.h" - -#include - -/* {{{ arginfo */ -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_unixtojd, 0, 0, 0) - ZEND_ARG_INFO(0, timestamp) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_jdtounix, 0) - ZEND_ARG_INFO(0, jday) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_cal_info, 0, 0, 0) - ZEND_ARG_INFO(0, calendar) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_cal_days_in_month, 0) - ZEND_ARG_INFO(0, calendar) - ZEND_ARG_INFO(0, month) - ZEND_ARG_INFO(0, year) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_cal_to_jd, 0) - ZEND_ARG_INFO(0, calendar) - ZEND_ARG_INFO(0, month) - ZEND_ARG_INFO(0, day) - ZEND_ARG_INFO(0, year) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_cal_from_jd, 0) - ZEND_ARG_INFO(0, jd) - ZEND_ARG_INFO(0, calendar) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_jdtogregorian, 0) - ZEND_ARG_INFO(0, juliandaycount) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_gregoriantojd, 0) - ZEND_ARG_INFO(0, month) - ZEND_ARG_INFO(0, day) - ZEND_ARG_INFO(0, year) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_jdtojulian, 0) - ZEND_ARG_INFO(0, juliandaycount) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_juliantojd, 0) - ZEND_ARG_INFO(0, month) - ZEND_ARG_INFO(0, day) - ZEND_ARG_INFO(0, year) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_jdtojewish, 0, 0, 1) - ZEND_ARG_INFO(0, juliandaycount) - ZEND_ARG_INFO(0, hebrew) - ZEND_ARG_INFO(0, fl) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_jewishtojd, 0) - ZEND_ARG_INFO(0, month) - ZEND_ARG_INFO(0, day) - ZEND_ARG_INFO(0, year) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_jdtofrench, 0) - ZEND_ARG_INFO(0, juliandaycount) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_frenchtojd, 0) - ZEND_ARG_INFO(0, month) - ZEND_ARG_INFO(0, day) - ZEND_ARG_INFO(0, year) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_jddayofweek, 0, 0, 1) - ZEND_ARG_INFO(0, juliandaycount) - ZEND_ARG_INFO(0, mode) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_jdmonthname, 0) - ZEND_ARG_INFO(0, juliandaycount) - ZEND_ARG_INFO(0, mode) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_easter_date, 0, 0, 0) - ZEND_ARG_INFO(0, year) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_easter_days, 0, 0, 0) - ZEND_ARG_INFO(0, year) - ZEND_ARG_INFO(0, method) -ZEND_END_ARG_INFO() - -/* }}} */ - -zend_function_entry calendar_functions[] = { - PHP_FE(jdtogregorian, arginfo_jdtogregorian) - PHP_FE(gregoriantojd, arginfo_gregoriantojd) - PHP_FE(jdtojulian, arginfo_jdtojulian) - PHP_FE(juliantojd, arginfo_juliantojd) - PHP_FE(jdtojewish, arginfo_jdtojewish) - PHP_FE(jewishtojd, arginfo_jewishtojd) - PHP_FE(jdtofrench, arginfo_jdtofrench) - PHP_FE(frenchtojd, arginfo_frenchtojd) - PHP_FE(jddayofweek, arginfo_jddayofweek) - PHP_FE(jdmonthname, arginfo_jdmonthname) - PHP_FE(easter_date, arginfo_easter_date) - PHP_FE(easter_days, arginfo_easter_days) - PHP_FE(unixtojd, arginfo_unixtojd) - PHP_FE(jdtounix, arginfo_jdtounix) - PHP_FE(cal_to_jd, arginfo_cal_to_jd) - PHP_FE(cal_from_jd, arginfo_cal_from_jd) - PHP_FE(cal_days_in_month, arginfo_cal_days_in_month) - PHP_FE(cal_info, arginfo_cal_info) - {NULL, NULL, NULL} -}; - - -zend_module_entry calendar_module_entry = { - STANDARD_MODULE_HEADER, - "calendar", - calendar_functions, - PHP_MINIT(calendar), - NULL, - NULL, - NULL, - PHP_MINFO(calendar), - NO_VERSION_YET, - STANDARD_MODULE_PROPERTIES, -}; - -#ifdef COMPILE_DL_CALENDAR -ZEND_GET_MODULE(calendar) -#endif - -/* this order must match the conversion table below */ -enum cal_name_type_t { - CAL_GREGORIAN = 0, - CAL_JULIAN, - CAL_JEWISH, - CAL_FRENCH, - CAL_NUM_CALS -}; - -typedef long int (*cal_to_jd_func_t) (int month, int day, int year); -typedef void (*cal_from_jd_func_t) (long int jd, int *year, int *month, int *day); -typedef char *(*cal_as_string_func_t) (int year, int month, int day); - -struct cal_entry_t { - char *name; - char *symbol; - cal_to_jd_func_t to_jd; - cal_from_jd_func_t from_jd; - int num_months; - int max_days_in_month; - char **month_name_short; - char **month_name_long; -}; - -static struct cal_entry_t cal_conversion_table[CAL_NUM_CALS] = { - {"Gregorian", "CAL_GREGORIAN", GregorianToSdn, SdnToGregorian, 12, 31, - MonthNameShort, MonthNameLong}, - {"Julian", "CAL_JULIAN", JulianToSdn, SdnToJulian, 12, 31, - MonthNameShort, MonthNameLong}, - {"Jewish", "CAL_JEWISH", JewishToSdn, SdnToJewish, 13, 30, - JewishMonthName, JewishMonthName}, - {"French", "CAL_FRENCH", FrenchToSdn, SdnToFrench, 13, 30, - FrenchMonthName, FrenchMonthName} -}; - -/* For jddayofweek */ -enum { CAL_DOW_DAYNO, CAL_DOW_SHORT, CAL_DOW_LONG }; - -/* For jdmonthname */ -enum { CAL_MONTH_GREGORIAN_SHORT, CAL_MONTH_GREGORIAN_LONG, - CAL_MONTH_JULIAN_SHORT, CAL_MONTH_JULIAN_LONG, CAL_MONTH_JEWISH, - CAL_MONTH_FRENCH -}; - -/* for heb_number_to_chars */ -static char alef_bet[25] = "0àáâãäåæçèéëìîðñòôö÷øùú"; - -#define CAL_JEWISH_ADD_ALAFIM_GERESH 0x2 -#define CAL_JEWISH_ADD_ALAFIM 0x4 -#define CAL_JEWISH_ADD_GERESHAYIM 0x8 - -PHP_MINIT_FUNCTION(calendar) -{ - REGISTER_LONG_CONSTANT("CAL_GREGORIAN", CAL_GREGORIAN, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CAL_JULIAN", CAL_JULIAN, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CAL_JEWISH", CAL_JEWISH, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CAL_FRENCH", CAL_FRENCH, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CAL_NUM_CALS", CAL_NUM_CALS, CONST_CS | CONST_PERSISTENT); -/* constants for jddayofweek */ - REGISTER_LONG_CONSTANT("CAL_DOW_DAYNO", CAL_DOW_DAYNO, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CAL_DOW_SHORT", CAL_DOW_SHORT, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CAL_DOW_LONG", CAL_DOW_LONG, CONST_CS | CONST_PERSISTENT); -/* constants for jdmonthname */ - REGISTER_LONG_CONSTANT("CAL_MONTH_GREGORIAN_SHORT", CAL_MONTH_GREGORIAN_SHORT, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CAL_MONTH_GREGORIAN_LONG", CAL_MONTH_GREGORIAN_LONG, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CAL_MONTH_JULIAN_SHORT", CAL_MONTH_JULIAN_SHORT, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CAL_MONTH_JULIAN_LONG", CAL_MONTH_JULIAN_LONG, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CAL_MONTH_JEWISH", CAL_MONTH_JEWISH, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CAL_MONTH_FRENCH", CAL_MONTH_FRENCH, CONST_CS | CONST_PERSISTENT); -/* constants for easter calculation */ - REGISTER_LONG_CONSTANT("CAL_EASTER_DEFAULT", CAL_EASTER_DEFAULT, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CAL_EASTER_ROMAN", CAL_EASTER_ROMAN, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CAL_EASTER_ALWAYS_GREGORIAN", CAL_EASTER_ALWAYS_GREGORIAN, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CAL_EASTER_ALWAYS_JULIAN", CAL_EASTER_ALWAYS_JULIAN, CONST_CS | CONST_PERSISTENT); -/* constants for Jewish date formatting */ - REGISTER_LONG_CONSTANT("CAL_JEWISH_ADD_ALAFIM_GERESH", CAL_JEWISH_ADD_ALAFIM_GERESH, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CAL_JEWISH_ADD_ALAFIM", CAL_JEWISH_ADD_ALAFIM, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CAL_JEWISH_ADD_GERESHAYIM", CAL_JEWISH_ADD_GERESHAYIM, CONST_CS | CONST_PERSISTENT); - return SUCCESS; -} - -PHP_MINFO_FUNCTION(calendar) -{ - php_info_print_table_start(); - php_info_print_table_row(2, "Calendar support", "enabled"); - php_info_print_table_end(); -} - -static void _php_cal_info(int cal, zval **ret) -{ - zval *months, *smonths; - int i; - struct cal_entry_t *calendar; - - calendar = &cal_conversion_table[cal]; - array_init(*ret); - - MAKE_STD_ZVAL(months); - MAKE_STD_ZVAL(smonths); - array_init(months); - array_init(smonths); - - for (i = 1; i <= calendar->num_months; i++) { - add_index_string(months, i, calendar->month_name_long[i], 1); - add_index_string(smonths, i, calendar->month_name_short[i], 1); - } - add_assoc_zval(*ret, "months", months); - add_assoc_zval(*ret, "abbrevmonths", smonths); - add_assoc_long(*ret, "maxdaysinmonth", calendar->max_days_in_month); - add_assoc_string(*ret, "calname", calendar->name, 1); - add_assoc_string(*ret, "calsymbol", calendar->symbol, 1); - -} - -/* {{{ proto array cal_info([int calendar]) - Returns information about a particular calendar */ -PHP_FUNCTION(cal_info) -{ - long cal = -1; - - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &cal) == FAILURE) { - RETURN_FALSE; - } - - if (cal == -1) { - int i; - zval *val; - - array_init(return_value); - - for (i = 0; i < CAL_NUM_CALS; i++) { - MAKE_STD_ZVAL(val); - _php_cal_info(i, &val); - add_index_zval(return_value, i, val); - } - return; - } - - - if (cal != -1 && (cal < 0 || cal >= CAL_NUM_CALS)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid calendar ID %ld", cal); - RETURN_FALSE; - } - - _php_cal_info(cal, &return_value); - -} -/* }}} */ - -/* {{{ proto int cal_days_in_month(int calendar, int month, int year) - Returns the number of days in a month for a given year and calendar */ -PHP_FUNCTION(cal_days_in_month) -{ - long cal, month, year; - struct cal_entry_t *calendar; - long sdn_start, sdn_next; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &cal, &month, &year) == FAILURE) { - RETURN_FALSE; - } - - if (cal < 0 || cal >= CAL_NUM_CALS) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid calendar ID %ld", cal); - RETURN_FALSE; - } - - calendar = &cal_conversion_table[cal]; - - sdn_start = calendar->to_jd(year, month, 1); - - if (sdn_start == 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid date"); - RETURN_FALSE; - } - - sdn_next = calendar->to_jd(year, 1 + month, 1); - - if (sdn_next == 0) { -/* if invalid, try first month of the next year... */ - sdn_next = calendar->to_jd(year + 1, 1, 1); - } - - RETURN_LONG(sdn_next - sdn_start); -} -/* }}} */ - -/* {{{ proto int cal_to_jd(int calendar, int month, int day, int year) - Converts from a supported calendar to Julian Day Count */ -PHP_FUNCTION(cal_to_jd) -{ - long cal, month, day, year; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &cal, &month, &day, &year) != SUCCESS) { - RETURN_FALSE; - } - - if (cal < 0 || cal >= CAL_NUM_CALS) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid calendar ID %ld", cal); - RETURN_FALSE; - } - - RETURN_LONG(cal_conversion_table[cal].to_jd(year, month, day)); -} -/* }}} */ - -/* {{{ proto array cal_from_jd(int jd, int calendar) - Converts from Julian Day Count to a supported calendar and return extended information */ -PHP_FUNCTION(cal_from_jd) -{ - long jd, cal; - int month, day, year, dow; - char date[16]; - struct cal_entry_t *calendar; - - if (zend_parse_parameters(ZEND_NUM_ARGS()TSRMLS_CC, "ll", &jd, &cal) == FAILURE) { - RETURN_FALSE; - } - - if (cal < 0 || cal >= CAL_NUM_CALS) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid calendar ID %ld", cal); - RETURN_FALSE; - } - calendar = &cal_conversion_table[cal]; - - array_init(return_value); - - calendar->from_jd(jd, &year, &month, &day); - - snprintf(date, sizeof(date), "%i/%i/%i", month, day, year); - add_assoc_string(return_value, "date", date, 1); - - add_assoc_long(return_value, "month", month); - add_assoc_long(return_value, "day", day); - add_assoc_long(return_value, "year", year); - -/* day of week */ - dow = DayOfWeek(jd); - add_assoc_long(return_value, "dow", dow); - add_assoc_string(return_value, "abbrevdayname", DayNameShort[dow], 1); - add_assoc_string(return_value, "dayname", DayNameLong[dow], 1); -/* month name */ - add_assoc_string(return_value, "abbrevmonth", calendar->month_name_short[month], 1); - add_assoc_string(return_value, "monthname", calendar->month_name_long[month], 1); -} -/* }}} */ - -/* {{{ proto string jdtogregorian(int juliandaycount) - Converts a julian day count to a gregorian calendar date */ -PHP_FUNCTION(jdtogregorian) -{ - long julday; - int year, month, day; - char date[16]; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &julday) == FAILURE) { - RETURN_FALSE; - } - - SdnToGregorian(julday, &year, &month, &day); - snprintf(date, sizeof(date), "%i/%i/%i", month, day, year); - - RETURN_STRING(date, 1); -} -/* }}} */ - -/* {{{ proto int gregoriantojd(int month, int day, int year) - Converts a gregorian calendar date to julian day count */ -PHP_FUNCTION(gregoriantojd) -{ - long year, month, day; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &month, &day, &year) == FAILURE) { - RETURN_FALSE; - } - - RETURN_LONG(GregorianToSdn(year, month, day)); -} -/* }}} */ - -/* {{{ proto string jdtojulian(int juliandaycount) - Convert a julian day count to a julian calendar date */ -PHP_FUNCTION(jdtojulian) -{ - long julday; - int year, month, day; - char date[16]; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &julday) == FAILURE) { - RETURN_FALSE; - } - - SdnToJulian(julday, &year, &month, &day); - snprintf(date, sizeof(date), "%i/%i/%i", month, day, year); - - RETURN_STRING(date, 1); -} -/* }}} */ - -/* {{{ proto int juliantojd(int month, int day, int year) - Converts a julian calendar date to julian day count */ -PHP_FUNCTION(juliantojd) -{ - long year, month, day; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &month, &day, &year) == FAILURE) { - RETURN_FALSE; - } - - RETURN_LONG(JulianToSdn(year, month, day)); -} -/* }}} */ - -/* {{{ heb_number_to_chars*/ -/* -caution: the Hebrew format produces non unique result. -for example both: year '5' and year '5000' produce 'ä'. -use the numeric one for calculations. - */ -static char *heb_number_to_chars(int n, int fl, char **ret) -{ - char *p, old[18], *endofalafim; - - p = endofalafim = old; -/* - prevents the option breaking the jewish beliefs, and some other - critical resources ;) - */ - if (n > 9999 || n < 1) { - *ret = NULL; - return NULL; - } - -/* alafim (thousands) case */ - if (n / 1000) { - *p = alef_bet[n / 1000]; - p++; - - if (CAL_JEWISH_ADD_ALAFIM_GERESH & fl) { - *p = '\''; - p++; - } - if (CAL_JEWISH_ADD_ALAFIM & fl) { - strcpy(p, " àìôéí "); - p += 7; - } - - endofalafim = p; - n = n % 1000; - } - -/* tav-tav (tav=400) case */ - while (n >= 400) { - *p = alef_bet[22]; - p++; - n -= 400; - } - -/* meot (hundreads) case */ - if (n >= 100) { - *p = alef_bet[18 + n / 100]; - p++; - n = n % 100; - } - -/* tet-vav & tet-zain case (special case for 15 and 16) */ - if (n == 15 || n == 16) { - *p = alef_bet[9]; - p++; - *p = alef_bet[n - 9]; - p++; - } else { -/* asarot (tens) case */ - if (n >= 10) { - *p = alef_bet[9 + n / 10]; - p++; - n = n % 10; - } - -/* yehidot (ones) case */ - if (n > 0) { - *p = alef_bet[n]; - p++; - } - } - - if (CAL_JEWISH_ADD_GERESHAYIM & fl) { - switch (p - endofalafim) { - case 0: - break; - case 1: - *p = '\''; - p++; - break; - default: - *(p) = *(p - 1); - *(p - 1) = '"'; - p++; - } - } - - *p = '\0'; - *ret = estrndup(old, (p - old) + 1); - p = *ret; - return p; -} -/* }}} */ - -/* {{{ proto string jdtojewish(int juliandaycount [, bool hebrew [, int fl]]) - Converts a julian day count to a jewish calendar date */ -PHP_FUNCTION(jdtojewish) -{ - long julday, fl = 0; - zend_bool heb = 0; - int year, month, day; - char date[16], hebdate[32]; - char *dayp, *yearp; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|bl", &julday, &heb, &fl) == FAILURE) { - RETURN_FALSE; - } - - SdnToJewish(julday, &year, &month, &day); - if (!heb) { - snprintf(date, sizeof(date), "%i/%i/%i", month, day, year); - RETURN_STRING(date, 1); - } else { - if (year <= 0 || year > 9999) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Year out of range (0-9999)"); - RETURN_FALSE; - } - - snprintf(hebdate, sizeof(hebdate), "%s %s %s", heb_number_to_chars(day, fl, &dayp), JewishMonthHebName[month], heb_number_to_chars(year, fl, &yearp)); - - if (dayp) { - efree(dayp); - } - if (yearp) { - efree(yearp); - } - - RETURN_STRING(hebdate, 1); - - } -} -/* }}} */ - -/* {{{ proto int jewishtojd(int month, int day, int year) - Converts a jewish calendar date to a julian day count */ -PHP_FUNCTION(jewishtojd) -{ - long year, month, day; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &month, &day, &year) == FAILURE) { - RETURN_FALSE; - } - - RETURN_LONG(JewishToSdn(year, month, day)); -} -/* }}} */ - -/* {{{ proto string jdtofrench(int juliandaycount) - Converts a julian day count to a french republic calendar date */ -PHP_FUNCTION(jdtofrench) -{ - long julday; - int year, month, day; - char date[16]; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &julday) == FAILURE) { - RETURN_FALSE; - } - - SdnToFrench(julday, &year, &month, &day); - snprintf(date, sizeof(date), "%i/%i/%i", month, day, year); - - RETURN_STRING(date, 1); -} -/* }}} */ - -/* {{{ proto int frenchtojd(int month, int day, int year) - Converts a french republic calendar date to julian day count */ -PHP_FUNCTION(frenchtojd) -{ - long year, month, day; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &month, &day, &year) == FAILURE) { - RETURN_FALSE; - } - - RETURN_LONG(FrenchToSdn(year, month, day)); -} -/* }}} */ - -/* {{{ proto mixed jddayofweek(int juliandaycount [, int mode]) - Returns name or number of day of week from julian day count */ -PHP_FUNCTION(jddayofweek) -{ - long julday, mode = CAL_DOW_DAYNO; - int day; - char *daynamel, *daynames; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &julday, &mode) == FAILURE) { - RETURN_FALSE; - } - - day = DayOfWeek(julday); - daynamel = DayNameLong[day]; - daynames = DayNameShort[day]; - - switch (mode) { - case CAL_DOW_SHORT: - RETURN_STRING(daynamel, 1); - break; - case CAL_DOW_LONG: - RETURN_STRING(daynames, 1); - break; - case CAL_DOW_DAYNO: - default: - RETURN_LONG(day); - break; - } -} -/* }}} */ - -/* {{{ proto string jdmonthname(int juliandaycount, int mode) - Returns name of month for julian day count */ -PHP_FUNCTION(jdmonthname) -{ - long julday, mode; - char *monthname = NULL; - int month, day, year; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &julday, &mode) == FAILURE) { - RETURN_FALSE; - } - - switch (mode) { - case CAL_MONTH_GREGORIAN_LONG: /* gregorian or julian month */ - SdnToGregorian(julday, &year, &month, &day); - monthname = MonthNameLong[month]; - break; - case CAL_MONTH_JULIAN_SHORT: /* gregorian or julian month */ - SdnToJulian(julday, &year, &month, &day); - monthname = MonthNameShort[month]; - break; - case CAL_MONTH_JULIAN_LONG: /* gregorian or julian month */ - SdnToJulian(julday, &year, &month, &day); - monthname = MonthNameLong[month]; - break; - case CAL_MONTH_JEWISH: /* jewish month */ - SdnToJewish(julday, &year, &month, &day); - monthname = JewishMonthName[month]; - break; - case CAL_MONTH_FRENCH: /* french month */ - SdnToFrench(julday, &year, &month, &day); - monthname = FrenchMonthName[month]; - break; - default: /* default gregorian */ - case CAL_MONTH_GREGORIAN_SHORT: /* gregorian or julian month */ - SdnToGregorian(julday, &year, &month, &day); - monthname = MonthNameShort[month]; - break; - } - - RETURN_STRING(monthname, 1); -} -/* }}} */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/calendar/config.m4 b/ext/calendar/config.m4 deleted file mode 100644 index a80101adbb0f9..0000000000000 --- a/ext/calendar/config.m4 +++ /dev/null @@ -1,11 +0,0 @@ -dnl -dnl $Id$ -dnl - -PHP_ARG_ENABLE(calendar,whether to enable calendar conversion support, -[ --enable-calendar Enable support for calendar conversion]) - -if test "$PHP_CALENDAR" = "yes"; then - AC_DEFINE(HAVE_CALENDAR,1,[ ]) - PHP_NEW_EXTENSION(calendar, calendar.c dow.c french.c gregor.c jewish.c julian.c easter.c cal_unix.c, $ext_shared) -fi diff --git a/ext/calendar/config.w32 b/ext/calendar/config.w32 deleted file mode 100644 index bd9faba46a08c..0000000000000 --- a/ext/calendar/config.w32 +++ /dev/null @@ -1,10 +0,0 @@ -// $Id$ -// vim:ft=javascript - -ARG_ENABLE("calendar", "calendar conversion support", "yes"); - -if (PHP_CALENDAR == "yes") { - EXTENSION("calendar", "calendar.c dow.c french.c gregor.c jewish.c \ - julian.c easter.c cal_unix.c"); - AC_DEFINE('HAVE_CALENDAR', 1, 'Have calendar'); -} diff --git a/ext/calendar/dow.c b/ext/calendar/dow.c deleted file mode 100644 index 64ae008f77716..0000000000000 --- a/ext/calendar/dow.c +++ /dev/null @@ -1,76 +0,0 @@ - -/* $selId: dow.c,v 2.0 1995/10/24 01:13:06 lees Exp $ - * Copyright 1993-1995, Scott E. Lee, all rights reserved. - * Permission granted to use, copy, modify, distribute and sell so long as - * the above copyright and this permission statement are retained in all - * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK. - */ - -/************************************************************************** - * - * These are the externally visible components of this file: - * - * int - * DayOfWeek( - * long int sdn); - * - * Convert a SDN to a day-of-week number (0 to 6). Where 0 stands for - * Sunday, 1 for Monday, etc. and 6 stands for Saturday. - * - * char *DayNameShort[7]; - * - * Convert a day-of-week number (0 to 6), as returned from DayOfWeek(), to - * the abbreviated (three character) name of the day. - * - * char *DayNameLong[7]; - * - * Convert a day-of-week number (0 to 6), as returned from DayOfWeek(), to - * the name of the day. - * - **************************************************************************/ - -#include "sdncal.h" - -int DayOfWeek( - long int sdn) -{ - int dow; - - dow = (sdn + 1) % 7; - if (dow >= 0) { - return (dow); - } else { - return (dow + 7); - } -} - -char *DayNameShort[7] = -{ - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" -}; - -char *DayNameLong[7] = -{ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" -}; - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/calendar/easter.c b/ext/calendar/easter.c deleted file mode 100644 index 6329986e4ab8e..0000000000000 --- a/ext/calendar/easter.c +++ /dev/null @@ -1,141 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Shane Caraveo | - | Colin Viebrock | - | Hartmut Holzgraefe | - +----------------------------------------------------------------------+ - */ -/* $Id: */ - -#include "php.h" -#include "php_calendar.h" -#include "sdncal.h" -#include - -static void _cal_easter(INTERNAL_FUNCTION_PARAMETERS, int gm) -{ - - /* based on code by Simon Kershaw, */ - - struct tm te; - long year, golden, solar, lunar, pfm, dom, tmp, easter; - long method = CAL_EASTER_DEFAULT; - - /* Default to the current year if year parameter is not given */ - { - time_t a; - struct tm b; - time(&a); - php_localtime_r(&a, &b); - year = 1900 + b.tm_year; - } - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - "|ll", &year, &method) == FAILURE) { - return; - } - - if (gm && (year<1970 || year>2037)) { /* out of range for timestamps */ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "This function is only valid for years between 1970 and 2037 inclusive"); - RETURN_FALSE; - } - - golden = (year % 19) + 1; /* the Golden number */ - - if ((year <= 1582 && method != CAL_EASTER_ALWAYS_GREGORIAN) || - (year >= 1583 && year <= 1752 && method != CAL_EASTER_ROMAN && method != CAL_EASTER_ALWAYS_GREGORIAN) || - method == CAL_EASTER_ALWAYS_JULIAN) { /* JULIAN CALENDAR */ - - dom = (year + (year/4) + 5) % 7; /* the "Dominical number" - finding a Sunday */ - if (dom < 0) { - dom += 7; - } - - pfm = (3 - (11*golden) - 7) % 30; /* uncorrected date of the Paschal full moon */ - if (pfm < 0) { - pfm += 30; - } - } else { /* GREGORIAN CALENDAR */ - dom = (year + (year/4) - (year/100) + (year/400)) % 7; /* the "Domincal number" */ - if (dom < 0) { - dom += 7; - } - - solar = (year-1600)/100 - (year-1600)/400; /* the solar and lunar corrections */ - lunar = (((year-1400) / 100) * 8) / 25; - - pfm = (3 - (11*golden) + solar - lunar) % 30; /* uncorrected date of the Paschal full moon */ - if (pfm < 0) { - pfm += 30; - } - } - - if ((pfm == 29) || (pfm == 28 && golden > 11)) { /* corrected date of the Paschal full moon */ - pfm--; /* - days after 21st March */ - } - - tmp = (4-pfm-dom) % 7; - if (tmp < 0) { - tmp += 7; - } - - easter = pfm + tmp + 1; /* Easter as the number of days after 21st March */ - - if (gm) { /* return a timestamp */ - te.tm_isdst = -1; - te.tm_year = year-1900; - te.tm_sec = 0; - te.tm_min = 0; - te.tm_hour = 0; - - if (easter < 11) { - te.tm_mon = 2; /* March */ - te.tm_mday = easter+21; - } else { - te.tm_mon = 3; /* April */ - te.tm_mday = easter-10; - } - - Z_LVAL_P(return_value) = mktime(&te); - } else { /* return the days after March 21 */ - Z_LVAL_P(return_value) = easter; - } - - Z_TYPE_P(return_value) = IS_LONG; - -} - -/* {{{ proto int easter_date([int year]) - Return the timestamp of midnight on Easter of a given year (defaults to current year) */ -PHP_FUNCTION(easter_date) -{ - _cal_easter(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); -} -/* }}} */ - -/* {{{ proto int easter_days([int year, [int method]]) - Return the number of days after March 21 that Easter falls on for a given year (defaults to current year) */ -PHP_FUNCTION(easter_days) -{ - _cal_easter(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); -} -/* }}} */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - */ diff --git a/ext/calendar/french.c b/ext/calendar/french.c deleted file mode 100644 index 5b4dd53750659..0000000000000 --- a/ext/calendar/french.c +++ /dev/null @@ -1,160 +0,0 @@ -/* $selId: french.c,v 2.0 1995/10/24 01:13:06 lees Exp $ - * Copyright 1993-1995, Scott E. Lee, all rights reserved. - * Permission granted to use, copy, modify, distribute and sell so long as - * the above copyright and this permission statement are retained in all - * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK. - */ - -/************************************************************************** - * - * These are the externally visible components of this file: - * - * void - * SdnToFrench( - * long int sdn, - * int *pYear, - * int *pMonth, - * int *pDay); - * - * Convert a SDN to a French republican calendar date. If the input SDN is - * before the first day of year 1 or after the last day of year 14, the - * three output values will all be set to zero, otherwise *pYear will be in - * the range 1 to 14 inclusive; *pMonth will be in the range 1 to 13 - * inclusive; *pDay will be in the range 1 to 30 inclusive. If *pMonth is - * 13, the SDN represents one of the holidays at the end of the year and - * *pDay will be in the range 1 to 6 inclusive. - * - * long int - * FrenchToSdn( - * int year, - * int month, - * int day); - * - * Convert a French republican calendar date to a SDN. Zero is returned - * when the input date is detected as invalid or out of the supported - * range. The return value will be > 0 for all valid, supported dates, but - * there are some invalid dates that will return a positive value. To - * verify that a date is valid, convert it to SDN and then back and compare - * with the original. - * - * char *FrenchMonthName[14]; - * - * Convert a French republican month number (1 to 13) to the name of the - * French republican month (null terminated). An index of 13 (for the - * "extra" days at the end of the year) will return the string "Extra". An - * index of zero will return a zero length string. - * - * VALID RANGE - * - * These routines only convert dates in years 1 through 14 (Gregorian - * dates 22 September 1792 through 22 September 1806). This more than - * covers the period when the calendar was in use. - * - * I would support a wider range of dates, but I have not been able to - * find an authoritative definition of when leap years were to have - * occurred. There are suggestions that it was to skip a leap year ever - * 100 years like the Gregorian calendar. - * - * CALENDAR OVERVIEW - * - * The French republican calendar was adopted in October 1793 during - * the French Revolution and was abandoned in January 1806. The intent - * was to create a new calendar system that was based on scientific - * principals, not religious traditions. - * - * The year is divided into 12 months of 30 days each. The remaining 5 - * to 6 days in the year are grouped at the end and are holidays. Each - * month is divided into three decades (instead of weeks) of 10 days - * each. - * - * The epoch (first day of the first year) is 22 September 1792 in the - * Gregorian calendar. Leap years are every fourth year (year 3, 7, - * 11, etc.) - * - * TESTING - * - * This algorithm has been tested from the year 1 to 14. The source - * code of the verification program is included in this package. - * - * REFERENCES - * - * I have found no detailed, authoritative reference on this calendar. - * The algorithms are based on a preponderance of less authoritative - * sources. - * - **************************************************************************/ - -#include "sdncal.h" - -#define FRENCH_SDN_OFFSET 2375474 -#define DAYS_PER_4_YEARS 1461 -#define DAYS_PER_MONTH 30 -#define FIRST_VALID 2375840 -#define LAST_VALID 2380952 - -void SdnToFrench( - long int sdn, - int *pYear, - int *pMonth, - int *pDay) -{ - long int temp; - int dayOfYear; - - if (sdn < FIRST_VALID || sdn > LAST_VALID) { - *pYear = 0; - *pMonth = 0; - *pDay = 0; - return; - } - temp = (sdn - FRENCH_SDN_OFFSET) * 4 - 1; - *pYear = temp / DAYS_PER_4_YEARS; - dayOfYear = (temp % DAYS_PER_4_YEARS) / 4; - *pMonth = dayOfYear / DAYS_PER_MONTH + 1; - *pDay = dayOfYear % DAYS_PER_MONTH + 1; -} - -long int FrenchToSdn( - int year, - int month, - int day) -{ - /* check for invalid dates */ - if (year < 1 || year > 14 || - month < 1 || month > 13 || - day < 1 || day > 30) { - return (0); - } - return ((year * DAYS_PER_4_YEARS) / 4 - + (month - 1) * DAYS_PER_MONTH - + day - + FRENCH_SDN_OFFSET); -} - -char *FrenchMonthName[14] = -{ - "", - "Vendemiaire", - "Brumaire", - "Frimaire", - "Nivose", - "Pluviose", - "Ventose", - "Germinal", - "Floreal", - "Prairial", - "Messidor", - "Thermidor", - "Fructidor", - "Extra" -}; - - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/calendar/gregor.c b/ext/calendar/gregor.c deleted file mode 100644 index c9c0bf761b438..0000000000000 --- a/ext/calendar/gregor.c +++ /dev/null @@ -1,272 +0,0 @@ -/* $selId: gregor.c,v 2.0 1995/10/24 01:13:06 lees Exp $ - * Copyright 1993-1995, Scott E. Lee, all rights reserved. - * Permission granted to use, copy, modify, distribute and sell so long as - * the above copyright and this permission statement are retained in all - * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK. - */ - -/************************************************************************** - * - * These are the externally visible components of this file: - * - * void - * SdnToGregorian( - * long int sdn, - * int *pYear, - * int *pMonth, - * int *pDay); - * - * Convert a SDN to a Gregorian calendar date. If the input SDN is less - * than 1, the three output values will all be set to zero, otherwise - * *pYear will be >= -4714 and != 0; *pMonth will be in the range 1 to 12 - * inclusive; *pDay will be in the range 1 to 31 inclusive. - * - * long int - * GregorianToSdn( - * int inputYear, - * int inputMonth, - * int inputDay); - * - * Convert a Gregorian calendar date to a SDN. Zero is returned when the - * input date is detected as invalid or out of the supported range. The - * return value will be > 0 for all valid, supported dates, but there are - * some invalid dates that will return a positive value. To verify that a - * date is valid, convert it to SDN and then back and compare with the - * original. - * - * char *MonthNameShort[13]; - * - * Convert a Gregorian month number (1 to 12) to the abbreviated (three - * character) name of the Gregorian month (null terminated). An index of - * zero will return a zero length string. - * - * char *MonthNameLong[13]; - * - * Convert a Gregorian month number (1 to 12) to the name of the Gregorian - * month (null terminated). An index of zero will return a zero length - * string. - * - * VALID RANGE - * - * 4714 B.C. to at least 10000 A.D. - * - * Although this software can handle dates all the way back to 4714 - * B.C., such use may not be meaningful. The Gregorian calendar was - * not instituted until October 15, 1582 (or October 5, 1582 in the - * Julian calendar). Some countries did not accept it until much - * later. For example, Britain converted in 1752, The USSR in 1918 and - * Greece in 1923. Most European countries used the Julian calendar - * prior to the Gregorian. - * - * CALENDAR OVERVIEW - * - * The Gregorian calendar is a modified version of the Julian calendar. - * The only difference being the specification of leap years. The - * Julian calendar specifies that every year that is a multiple of 4 - * will be a leap year. This leads to a year that is 365.25 days long, - * but the current accepted value for the tropical year is 365.242199 - * days. - * - * To correct this error in the length of the year and to bring the - * vernal equinox back to March 21, Pope Gregory XIII issued a papal - * bull declaring that Thursday October 4, 1582 would be followed by - * Friday October 15, 1582 and that centennial years would only be a - * leap year if they were a multiple of 400. This shortened the year - * by 3 days per 400 years, giving a year of 365.2425 days. - * - * Another recently proposed change in the leap year rule is to make - * years that are multiples of 4000 not a leap year, but this has never - * been officially accepted and this rule is not implemented in these - * algorithms. - * - * ALGORITHMS - * - * The calculations are based on three different cycles: a 400 year - * cycle of leap years, a 4 year cycle of leap years and a 5 month - * cycle of month lengths. - * - * The 5 month cycle is used to account for the varying lengths of - * months. You will notice that the lengths alternate between 30 - * and 31 days, except for three anomalies: both July and August - * have 31 days, both December and January have 31, and February - * is less than 30. Starting with March, the lengths are in a - * cycle of 5 months (31, 30, 31, 30, 31): - * - * Mar 31 days \ - * Apr 30 days | - * May 31 days > First cycle - * Jun 30 days | - * Jul 31 days / - * - * Aug 31 days \ - * Sep 30 days | - * Oct 31 days > Second cycle - * Nov 30 days | - * Dec 31 days / - * - * Jan 31 days \ - * Feb 28/9 days | - * > Third cycle (incomplete) - * - * For this reason the calculations (internally) assume that the - * year starts with March 1. - * - * TESTING - * - * This algorithm has been tested from the year 4714 B.C. to 10000 - * A.D. The source code of the verification program is included in - * this package. - * - * REFERENCES - * - * Conversions Between Calendar Date and Julian Day Number by Robert J. - * Tantzen, Communications of the Association for Computing Machinery - * August 1963. (Also published in Collected Algorithms from CACM, - * algorithm number 199). - * - **************************************************************************/ - -#include "sdncal.h" - -#define GREGOR_SDN_OFFSET 32045 -#define DAYS_PER_5_MONTHS 153 -#define DAYS_PER_4_YEARS 1461 -#define DAYS_PER_400_YEARS 146097 - -void SdnToGregorian( - long int sdn, - int *pYear, - int *pMonth, - int *pDay) -{ - int century; - int year; - int month; - int day; - long int temp; - int dayOfYear; - - if (sdn <= 0) { - *pYear = 0; - *pMonth = 0; - *pDay = 0; - return; - } - temp = (sdn + GREGOR_SDN_OFFSET) * 4 - 1; - - if (temp < 0) { - *pYear = 0; - *pMonth = 0; - *pDay = 0; - return; - } - - /* Calculate the century (year/100). */ - century = temp / DAYS_PER_400_YEARS; - - /* Calculate the year and day of year (1 <= dayOfYear <= 366). */ - temp = ((temp % DAYS_PER_400_YEARS) / 4) * 4 + 3; - year = (century * 100) + (temp / DAYS_PER_4_YEARS); - dayOfYear = (temp % DAYS_PER_4_YEARS) / 4 + 1; - - /* Calculate the month and day of month. */ - temp = dayOfYear * 5 - 3; - month = temp / DAYS_PER_5_MONTHS; - day = (temp % DAYS_PER_5_MONTHS) / 5 + 1; - - /* Convert to the normal beginning of the year. */ - if (month < 10) { - month += 3; - } else { - year += 1; - month -= 9; - } - - /* Adjust to the B.C./A.D. type numbering. */ - year -= 4800; - if (year <= 0) - year--; - - *pYear = year; - *pMonth = month; - *pDay = day; -} - -long int GregorianToSdn( - int inputYear, - int inputMonth, - int inputDay) -{ - int year; - int month; - - /* check for invalid dates */ - if (inputYear == 0 || inputYear < -4714 || - inputMonth <= 0 || inputMonth > 12 || - inputDay <= 0 || inputDay > 31) { - return (0); - } - /* check for dates before SDN 1 (Nov 25, 4714 B.C.) */ - if (inputYear == -4714) { - if (inputMonth < 11) { - return (0); - } - if (inputMonth == 11 && inputDay < 25) { - return (0); - } - } - /* Make year always a positive number. */ - if (inputYear < 0) { - year = inputYear + 4801; - } else { - year = inputYear + 4800; - } - - /* Adjust the start of the year. */ - if (inputMonth > 2) { - month = inputMonth - 3; - } else { - month = inputMonth + 9; - year--; - } - - return (((year / 100) * DAYS_PER_400_YEARS) / 4 - + ((year % 100) * DAYS_PER_4_YEARS) / 4 - + (month * DAYS_PER_5_MONTHS + 2) / 5 - + inputDay - - GREGOR_SDN_OFFSET); -} - -char *MonthNameShort[13] = -{ - "", - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" -}; - -char *MonthNameLong[13] = -{ - "", - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" -}; diff --git a/ext/calendar/jewish.c b/ext/calendar/jewish.c deleted file mode 100644 index f4dc7c35ae57c..0000000000000 --- a/ext/calendar/jewish.c +++ /dev/null @@ -1,763 +0,0 @@ -/* $selId: jewish.c,v 2.0 1995/10/24 01:13:06 lees Exp $ - * Copyright 1993-1995, Scott E. Lee, all rights reserved. - * Permission granted to use, copy, modify, distribute and sell so long as - * the above copyright and this permission statement are retained in all - * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK. - */ - -/************************************************************************** - * - * These are the externally visible components of this file: - * - * void - * SdnToJewish( - * long int sdn, - * int *pYear, - * int *pMonth, - * int *pDay); - * - * Convert a SDN to a Jewish calendar date. If the input SDN is before the - * first day of year 1, the three output values will all be set to zero, - * otherwise *pYear will be > 0; *pMonth will be in the range 1 to 13 - * inclusive; *pDay will be in the range 1 to 30 inclusive. Note that Adar - * II is assigned the month number 7 and Elul is always 13. - * - * long int - * JewishToSdn( - * int year, - * int month, - * int day); - * - * Convert a Jewish calendar date to a SDN. Zero is returned when the - * input date is detected as invalid or out of the supported range. The - * return value will be > 0 for all valid, supported dates, but there are - * some invalid dates that will return a positive value. To verify that a - * date is valid, convert it to SDN and then back and compare with the - * original. - * - * char *JewishMonthName[14]; - * - * Convert a Jewish month number (1 to 13) to the name of the Jewish month - * (null terminated). An index of zero will return a zero length string. - * - * VALID RANGE - * - * Although this software can handle dates all the way back to the year - * 1 (3761 B.C.), such use may not be meaningful. - * - * The Jewish calendar has been in use for several thousand years, but - * in the early days there was no formula to determine the start of a - * month. A new month was started when the new moon was first - * observed. - * - * It is not clear when the current rule based calendar replaced the - * observation based calendar. According to the book "Jewish Calendar - * Mystery Dispelled" by George Zinberg, the patriarch Hillel II - * published these rules in 358 A.D. But, according to The - * Encyclopedia Judaica, Hillel II may have only published the 19 year - * rule for determining the occurrence of leap years. - * - * I have yet to find a specific date when the current set of rules - * were known to be in use. - * - * CALENDAR OVERVIEW - * - * The Jewish calendar is based on lunar as well as solar cycles. A - * month always starts on or near a new moon and has either 29 or 30 - * days (a lunar cycle is about 29 1/2 days). Twelve of these - * alternating 29-30 day months gives a year of 354 days, which is - * about 11 1/4 days short of a solar year. - * - * Since a month is defined to be a lunar cycle (new moon to new moon), - * this 11 1/4 day difference cannot be overcome by adding days to a - * month as with the Gregorian calendar, so an entire month is - * periodically added to the year, making some years 13 months long. - * - * For astronomical as well as ceremonial reasons, the start of a new - * year may be delayed until a day or two after the new moon causing - * years to vary in length. Leap years can be from 383 to 385 days and - * common years can be from 353 to 355 days. These are the months of - * the year and their possible lengths: - * - * COMMON YEAR LEAP YEAR - * 1 Tishri 30 30 30 30 30 30 - * 2 Heshvan 29 29 30 29 29 30 (variable) - * 3 Kislev 29 30 30 29 30 30 (variable) - * 4 Tevet 29 29 29 29 29 29 - * 5 Shevat 30 30 30 30 30 30 - * 6 Adar I 29 29 29 30 30 30 (variable) - * 7 Adar II -- -- -- 29 29 29 (optional) - * 8 Nisan 30 30 30 30 30 30 - * 9 Iyyar 29 29 29 29 29 29 - * 10 Sivan 30 30 30 30 30 30 - * 11 Tammuz 29 29 29 29 29 29 - * 12 Av 30 30 30 30 30 30 - * 13 Elul 29 29 29 29 29 29 - * --- --- --- --- --- --- - * 353 354 355 383 384 385 - * - * Note that the month names and other words that appear in this file - * have multiple possible spellings in the Roman character set. I have - * chosen to use the spellings found in the Encyclopedia Judaica. - * - * Adar II, the month added for leap years, is sometimes referred to as - * the 13th month, but I have chosen to assign it the number 7 to keep - * the months in chronological order. This may not be consistent with - * other numbering schemes. - * - * Leap years occur in a fixed pattern of 19 years called the metonic - * cycle. The 3rd, 6th, 8th, 11th, 14th, 17th and 19th years of this - * cycle are leap years. The first metonic cycle starts with Jewish - * year 1, or 3761/60 B.C. This is believed to be the year of - * creation. - * - * To construct the calendar for a year, you must first find the length - * of the year by determining the first day of the year (Tishri 1, or - * Rosh Ha-Shanah) and the first day of the following year. This - * selects one of the six possible month length configurations listed - * above. - * - * Finding the first day of the year is the most difficult part. - * Finding the date and time of the new moon (or molad) is the first - * step. For this purpose, the lunar cycle is assumed to be 29 days 12 - * hours and 793 halakim. A halakim is 1/1080th of an hour or 3 1/3 - * seconds. (This assumed value is only about 1/2 second less than the - * value used by modern astronomers -- not bad for a number that was - * determined so long ago.) The first molad of year 1 occurred on - * Sunday at 11:20:11 P.M. This would actually be Monday, because the - * Jewish day is considered to begin at sunset. - * - * Since sunset varies, the day is assumed to begin at 6:00 P.M. for - * calendar calculation purposes. So, the first molad was 5 hours 793 - * halakim after the start of Tishri 1, 0001 (which was Monday - * September 7, 4761 B.C. by the Gregorian calendar). All subsequent - * molads can be calculated from this starting point by adding the - * length of a lunar cycle. - * - * Once the molad that starts a year is determined the actual start of - * the year (Tishri 1) can be determined. Tishri 1 will be the day of - * the molad unless it is delayed by one of the following four rules - * (called dehiyyot). Each rule can delay the start of the year by one - * day, and since rule #1 can combine with one of the other rules, it - * can be delayed as much as two days. - * - * 1. Tishri 1 must never be Sunday, Wednesday or Friday. (This - * is largely to prevent certain holidays from occurring on the - * day before or after the Sabbath.) - * - * 2. If the molad occurs on or after noon, Tishri 1 must be - * delayed. - * - * 3. If it is a common (not leap) year and the molad occurs on - * Tuesday at or after 3:11:20 A.M., Tishri 1 must be delayed. - * - * 4. If it is the year following a leap year and the molad occurs - * on Monday at or after 9:32:43 and 1/3 sec, Tishri 1 must be - * delayed. - * - * GLOSSARY - * - * dehiyyot The set of 4 rules that determine when the new year - * starts relative to the molad. - * - * halakim 1/1080th of an hour or 3 1/3 seconds. - * - * lunar cycle The period of time between mean conjunctions of the - * sun and moon (new moon to new moon). This is - * assumed to be 29 days 12 hours and 793 halakim for - * calendar purposes. - * - * metonic cycle A 19 year cycle which determines which years are - * leap years and which are common years. The 3rd, - * 6th, 8th, 11th, 14th, 17th and 19th years of this - * cycle are leap years. - * - * molad The date and time of the mean conjunction of the - * sun and moon (new moon). This is the approximate - * beginning of a month. - * - * Rosh Ha-Shanah The first day of the Jewish year (Tishri 1). - * - * Tishri The first month of the Jewish year. - * - * ALGORITHMS - * - * SERIAL DAY NUMBER TO JEWISH DATE - * - * The simplest approach would be to use the rules stated above to find - * the molad of Tishri before and after the given day number. Then use - * the molads to find Tishri 1 of the current and following years. - * From this the length of the year can be determined and thus the - * length of each month. But this method is used as a last resort. - * - * The first 59 days of the year are the same regardless of the length - * of the year. As a result, only the day number of the start of the - * year is required. - * - * Similarly, the last 6 months do not change from year to year. And - * since it can be determined whether the year is a leap year by simple - * division, the lengths of Adar I and II can be easily calculated. In - * fact, all dates after the 3rd month are consistent from year to year - * (once it is known whether it is a leap year). - * - * This means that if the given day number falls in the 3rd month or on - * the 30th day of the 2nd month the length of the year must be found, - * but in no other case. - * - * So, the approach used is to take the given day number and round it - * to the closest molad of Tishri (first new moon of the year). The - * rounding is not really to the *closest* molad, but is such that if - * the day number is before the middle of the 3rd month the molad at - * the start of the year is found, otherwise the molad at the end of - * the year is found. - * - * Only if the day number is actually found to be in the ambiguous - * period of 29 to 31 days is the other molad calculated. - * - * JEWISH DATE TO SERIAL DAY NUMBER - * - * The year number is used to find which 19 year metonic cycle contains - * the date and which year within the cycle (this is a division and - * modulus). This also determines whether it is a leap year. - * - * If the month is 1 or 2, the calculation is simple addition to the - * first of the year. - * - * If the month is 8 (Nisan) or greater, the calculation is simple - * subtraction from beginning of the following year. - * - * If the month is 4 to 7, it is considered whether it is a leap year - * and then simple subtraction from the beginning of the following year - * is used. - * - * Only if it is the 3rd month is both the start and end of the year - * required. - * - * TESTING - * - * This algorithm has been tested in two ways. First, 510 dates from a - * table in "Jewish Calendar Mystery Dispelled" were calculated and - * compared to the table. Second, the calculation algorithm described - * in "Jewish Calendar Mystery Dispelled" was coded and used to verify - * all dates from the year 1 (3761 B.C.) to the year 13760 (10000 - * A.D.). - * - * The source code of the verification program is included in this - * package. - * - * REFERENCES - * - * The Encyclopedia Judaica, the entry for "Calendar" - * - * The Jewish Encyclopedia - * - * Jewish Calendar Mystery Dispelled by George Zinberg, Vantage Press, - * 1963 - * - * The Comprehensive Hebrew Calendar by Arthur Spier, Behrman House - * - * The Book of Calendars [note that this work contains many typos] - * - **************************************************************************/ - -#if defined(PHP_WIN32) && _MSC_VER >= 1200 -#pragma setlocale("english") -#endif - -#include "sdncal.h" - -#define HALAKIM_PER_HOUR 1080 -#define HALAKIM_PER_DAY 25920 -#define HALAKIM_PER_LUNAR_CYCLE ((29 * HALAKIM_PER_DAY) + 13753) -#define HALAKIM_PER_METONIC_CYCLE (HALAKIM_PER_LUNAR_CYCLE * (12 * 19 + 7)) - -#define JEWISH_SDN_OFFSET 347997 -#define NEW_MOON_OF_CREATION 31524 - -#define SUNDAY 0 -#define MONDAY 1 -#define TUESDAY 2 -#define WEDNESDAY 3 -#define THURSDAY 4 -#define FRIDAY 5 -#define SATURDAY 6 - -#define NOON (18 * HALAKIM_PER_HOUR) -#define AM3_11_20 ((9 * HALAKIM_PER_HOUR) + 204) -#define AM9_32_43 ((15 * HALAKIM_PER_HOUR) + 589) - -static int monthsPerYear[19] = -{ -12, 12, 13, 12, 12, 13, 12, 13, 12, 12, 13, 12, 12, 13, 12, 12, 13, 12, 13 -}; - -static int yearOffset[19] = -{ - 0, 12, 24, 37, 49, 61, 74, 86, 99, 111, 123, - 136, 148, 160, 173, 185, 197, 210, 222 -}; - -char *JewishMonthName[14] = -{ - "", - "Tishri", - "Heshvan", - "Kislev", - "Tevet", - "Shevat", - "AdarI", - "AdarII", - "Nisan", - "Iyyar", - "Sivan", - "Tammuz", - "Av", - "Elul" -}; - -char *JewishMonthHebName[14] = -{ - "", - "úùøé", - "çùåï", - "ëñìå", - "èáú", - "ùáè", - "àãø", - "'àãø á", - "ðéñï", - "àééø", - "ñéåï", - "úîåæ", - "àá", - "àìåì" -}; - -/************************************************************************ - * Given the year within the 19 year metonic cycle and the time of a molad - * (new moon) which starts that year, this routine will calculate what day - * will be the actual start of the year (Tishri 1 or Rosh Ha-Shanah). This - * first day of the year will be the day of the molad unless one of 4 rules - * (called dehiyyot) delays it. These 4 rules can delay the start of the - * year by as much as 2 days. - */ -static long int Tishri1( - int metonicYear, - long int moladDay, - long int moladHalakim) -{ - long int tishri1; - int dow; - int leapYear; - int lastWasLeapYear; - - tishri1 = moladDay; - dow = tishri1 % 7; - leapYear = metonicYear == 2 || metonicYear == 5 || metonicYear == 7 - || metonicYear == 10 || metonicYear == 13 || metonicYear == 16 - || metonicYear == 18; - lastWasLeapYear = metonicYear == 3 || metonicYear == 6 - || metonicYear == 8 || metonicYear == 11 || metonicYear == 14 - || metonicYear == 17 || metonicYear == 0; - - /* Apply rules 2, 3 and 4. */ - if ((moladHalakim >= NOON) || - ((!leapYear) && dow == TUESDAY && moladHalakim >= AM3_11_20) || - (lastWasLeapYear && dow == MONDAY && moladHalakim >= AM9_32_43)) { - tishri1++; - dow++; - if (dow == 7) { - dow = 0; - } - } - /* Apply rule 1 after the others because it can cause an additional - * delay of one day. */ - if (dow == WEDNESDAY || dow == FRIDAY || dow == SUNDAY) { - tishri1++; - } - return (tishri1); -} - -/************************************************************************ - * Given a metonic cycle number, calculate the date and time of the molad - * (new moon) that starts that cycle. Since the length of a metonic cycle - * is a constant, this is a simple calculation, except that it requires an - * intermediate value which is bigger that 32 bits. Because this - * intermediate value only needs 36 to 37 bits and the other numbers are - * constants, the process has been reduced to just a few steps. - */ -static void MoladOfMetonicCycle( - int metonicCycle, - long int *pMoladDay, - long int *pMoladHalakim) -{ - register unsigned long int r1, r2, d1, d2; - - /* Start with the time of the first molad after creation. */ - r1 = NEW_MOON_OF_CREATION; - - /* Calculate metonicCycle * HALAKIM_PER_METONIC_CYCLE. The upper 32 - * bits of the result will be in r2 and the lower 16 bits will be - * in r1. */ - r1 += metonicCycle * (HALAKIM_PER_METONIC_CYCLE & 0xFFFF); - r2 = r1 >> 16; - r2 += metonicCycle * ((HALAKIM_PER_METONIC_CYCLE >> 16) & 0xFFFF); - - /* Calculate r2r1 / HALAKIM_PER_DAY. The remainder will be in r1, the - * upper 16 bits of the quotient will be in d2 and the lower 16 bits - * will be in d1. */ - d2 = r2 / HALAKIM_PER_DAY; - r2 -= d2 * HALAKIM_PER_DAY; - r1 = (r2 << 16) | (r1 & 0xFFFF); - d1 = r1 / HALAKIM_PER_DAY; - r1 -= d1 * HALAKIM_PER_DAY; - - *pMoladDay = (d2 << 16) | d1; - *pMoladHalakim = r1; -} - -/************************************************************************ - * Given a day number, find the molad of Tishri (the new moon at the start - * of a year) which is closest to that day number. It's not really the - * *closest* molad that we want here. If the input day is in the first two - * months, we want the molad at the start of the year. If the input day is - * in the fourth to last months, we want the molad at the end of the year. - * If the input day is in the third month, it doesn't matter which molad is - * returned, because both will be required. This type of "rounding" allows - * us to avoid calculating the length of the year in most cases. - */ -static void FindTishriMolad( - long int inputDay, - int *pMetonicCycle, - int *pMetonicYear, - long int *pMoladDay, - long int *pMoladHalakim) -{ - long int moladDay; - long int moladHalakim; - int metonicCycle; - int metonicYear; - - /* Estimate the metonic cycle number. Note that this may be an under - * estimate because there are 6939.6896 days in a metonic cycle not - * 6940, but it will never be an over estimate. The loop below will - * correct for any error in this estimate. */ - metonicCycle = (inputDay + 310) / 6940; - - /* Calculate the time of the starting molad for this metonic cycle. */ - MoladOfMetonicCycle(metonicCycle, &moladDay, &moladHalakim); - - /* If the above was an under estimate, increment the cycle number until - * the correct one is found. For modern dates this loop is about 98.6% - * likely to not execute, even once, because the above estimate is - * really quite close. */ - while (moladDay < inputDay - 6940 + 310) { - metonicCycle++; - moladHalakim += HALAKIM_PER_METONIC_CYCLE; - moladDay += moladHalakim / HALAKIM_PER_DAY; - moladHalakim = moladHalakim % HALAKIM_PER_DAY; - } - - /* Find the molad of Tishri closest to this date. */ - for (metonicYear = 0; metonicYear < 18; metonicYear++) { - if (moladDay > inputDay - 74) { - break; - } - moladHalakim += HALAKIM_PER_LUNAR_CYCLE * monthsPerYear[metonicYear]; - moladDay += moladHalakim / HALAKIM_PER_DAY; - moladHalakim = moladHalakim % HALAKIM_PER_DAY; - } - - *pMetonicCycle = metonicCycle; - *pMetonicYear = metonicYear; - *pMoladDay = moladDay; - *pMoladHalakim = moladHalakim; -} - -/************************************************************************ - * Given a year, find the number of the first day of that year and the date - * and time of the starting molad. - */ -static void FindStartOfYear( - int year, - int *pMetonicCycle, - int *pMetonicYear, - long int *pMoladDay, - long int *pMoladHalakim, - int *pTishri1) -{ - *pMetonicCycle = (year - 1) / 19; - *pMetonicYear = (year - 1) % 19; - MoladOfMetonicCycle(*pMetonicCycle, pMoladDay, pMoladHalakim); - - *pMoladHalakim += HALAKIM_PER_LUNAR_CYCLE * yearOffset[*pMetonicYear]; - *pMoladDay += *pMoladHalakim / HALAKIM_PER_DAY; - *pMoladHalakim = *pMoladHalakim % HALAKIM_PER_DAY; - - *pTishri1 = Tishri1(*pMetonicYear, *pMoladDay, *pMoladHalakim); -} - -/************************************************************************ - * Given a serial day number (SDN), find the corresponding year, month and - * day in the Jewish calendar. The three output values will always be - * modified. If the input SDN is before the first day of year 1, they will - * all be set to zero, otherwise *pYear will be > 0; *pMonth will be in the - * range 1 to 13 inclusive; *pDay will be in the range 1 to 30 inclusive. - */ -void SdnToJewish( - long int sdn, - int *pYear, - int *pMonth, - int *pDay) -{ - long int inputDay; - long int day; - long int halakim; - int metonicCycle; - int metonicYear; - int tishri1; - int tishri1After; - int yearLength; - - if (sdn <= JEWISH_SDN_OFFSET) { - *pYear = 0; - *pMonth = 0; - *pDay = 0; - return; - } - inputDay = sdn - JEWISH_SDN_OFFSET; - - FindTishriMolad(inputDay, &metonicCycle, &metonicYear, &day, &halakim); - tishri1 = Tishri1(metonicYear, day, halakim); - - if (inputDay >= tishri1) { - /* It found Tishri 1 at the start of the year. */ - *pYear = metonicCycle * 19 + metonicYear + 1; - if (inputDay < tishri1 + 59) { - if (inputDay < tishri1 + 30) { - *pMonth = 1; - *pDay = inputDay - tishri1 + 1; - } else { - *pMonth = 2; - *pDay = inputDay - tishri1 - 29; - } - return; - } - /* We need the length of the year to figure this out, so find - * Tishri 1 of the next year. */ - halakim += HALAKIM_PER_LUNAR_CYCLE * monthsPerYear[metonicYear]; - day += halakim / HALAKIM_PER_DAY; - halakim = halakim % HALAKIM_PER_DAY; - tishri1After = Tishri1((metonicYear + 1) % 19, day, halakim); - } else { - /* It found Tishri 1 at the end of the year. */ - *pYear = metonicCycle * 19 + metonicYear; - if (inputDay >= tishri1 - 177) { - /* It is one of the last 6 months of the year. */ - if (inputDay > tishri1 - 30) { - *pMonth = 13; - *pDay = inputDay - tishri1 + 30; - } else if (inputDay > tishri1 - 60) { - *pMonth = 12; - *pDay = inputDay - tishri1 + 60; - } else if (inputDay > tishri1 - 89) { - *pMonth = 11; - *pDay = inputDay - tishri1 + 89; - } else if (inputDay > tishri1 - 119) { - *pMonth = 10; - *pDay = inputDay - tishri1 + 119; - } else if (inputDay > tishri1 - 148) { - *pMonth = 9; - *pDay = inputDay - tishri1 + 148; - } else { - *pMonth = 8; - *pDay = inputDay - tishri1 + 178; - } - return; - } else { - if (monthsPerYear[(*pYear - 1) % 19] == 13) { - *pMonth = 7; - *pDay = inputDay - tishri1 + 207; - if (*pDay > 0) - return; - (*pMonth)--; - (*pDay) += 30; - if (*pDay > 0) - return; - (*pMonth)--; - (*pDay) += 30; - } else { - *pMonth = 6; - *pDay = inputDay - tishri1 + 207; - if (*pDay > 0) - return; - (*pMonth)--; - (*pDay) += 30; - } - if (*pDay > 0) - return; - (*pMonth)--; - (*pDay) += 29; - if (*pDay > 0) - return; - - /* We need the length of the year to figure this out, so find - * Tishri 1 of this year. */ - tishri1After = tishri1; - FindTishriMolad(day - 365, - &metonicCycle, &metonicYear, &day, &halakim); - tishri1 = Tishri1(metonicYear, day, halakim); - } - } - - yearLength = tishri1After - tishri1; - day = inputDay - tishri1 - 29; - if (yearLength == 355 || yearLength == 385) { - /* Heshvan has 30 days */ - if (day <= 30) { - *pMonth = 2; - *pDay = day; - return; - } - day -= 30; - } else { - /* Heshvan has 29 days */ - if (day <= 29) { - *pMonth = 2; - *pDay = day; - return; - } - day -= 29; - } - - /* It has to be Kislev. */ - *pMonth = 3; - *pDay = day; -} - -/************************************************************************ - * Given a year, month and day in the Jewish calendar, find the - * corresponding serial day number (SDN). Zero is returned when the input - * date is detected as invalid. The return value will be > 0 for all valid - * dates, but there are some invalid dates that will return a positive - * value. To verify that a date is valid, convert it to SDN and then back - * and compare with the original. - */ -long int JewishToSdn( - int year, - int month, - int day) -{ - long int sdn; - int metonicCycle; - int metonicYear; - int tishri1; - int tishri1After; - long int moladDay; - long int moladHalakim; - int yearLength; - int lengthOfAdarIAndII; - - if (year <= 0 || day <= 0 || day > 30) { - return (0); - } - switch (month) { - case 1: - case 2: - /* It is Tishri or Heshvan - don't need the year length. */ - FindStartOfYear(year, &metonicCycle, &metonicYear, - &moladDay, &moladHalakim, &tishri1); - if (month == 1) { - sdn = tishri1 + day - 1; - } else { - sdn = tishri1 + day + 29; - } - break; - - case 3: - /* It is Kislev - must find the year length. */ - - /* Find the start of the year. */ - FindStartOfYear(year, &metonicCycle, &metonicYear, - &moladDay, &moladHalakim, &tishri1); - - /* Find the end of the year. */ - moladHalakim += HALAKIM_PER_LUNAR_CYCLE * monthsPerYear[metonicYear]; - moladDay += moladHalakim / HALAKIM_PER_DAY; - moladHalakim = moladHalakim % HALAKIM_PER_DAY; - tishri1After = Tishri1((metonicYear + 1) % 19, moladDay, moladHalakim); - - yearLength = tishri1After - tishri1; - - if (yearLength == 355 || yearLength == 385) { - sdn = tishri1 + day + 59; - } else { - sdn = tishri1 + day + 58; - } - break; - - case 4: - case 5: - case 6: - /* It is Tevet, Shevat or Adar I - don't need the year length. */ - - FindStartOfYear(year + 1, &metonicCycle, &metonicYear, - &moladDay, &moladHalakim, &tishri1After); - - if (monthsPerYear[(year - 1) % 19] == 12) { - lengthOfAdarIAndII = 29; - } else { - lengthOfAdarIAndII = 59; - } - - if (month == 4) { - sdn = tishri1After + day - lengthOfAdarIAndII - 237; - } else if (month == 5) { - sdn = tishri1After + day - lengthOfAdarIAndII - 208; - } else { - sdn = tishri1After + day - lengthOfAdarIAndII - 178; - } - break; - - default: - /* It is Adar II or later - don't need the year length. */ - FindStartOfYear(year + 1, &metonicCycle, &metonicYear, - &moladDay, &moladHalakim, &tishri1After); - - switch (month) { - case 7: - sdn = tishri1After + day - 207; - break; - case 8: - sdn = tishri1After + day - 178; - break; - case 9: - sdn = tishri1After + day - 148; - break; - case 10: - sdn = tishri1After + day - 119; - break; - case 11: - sdn = tishri1After + day - 89; - break; - case 12: - sdn = tishri1After + day - 60; - break; - case 13: - sdn = tishri1After + day - 30; - break; - default: - return (0); - } - } - return (sdn + JEWISH_SDN_OFFSET); -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/calendar/julian.c b/ext/calendar/julian.c deleted file mode 100644 index 39bcbc7e655d4..0000000000000 --- a/ext/calendar/julian.c +++ /dev/null @@ -1,249 +0,0 @@ -/* $selId: julian.c,v 2.0 1995/10/24 01:13:06 lees Exp $ - * Copyright 1993-1995, Scott E. Lee, all rights reserved. - * Permission granted to use, copy, modify, distribute and sell so long as - * the above copyright and this permission statement are retained in all - * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK. - */ - -/************************************************************************** - * - * These are the externally visible components of this file: - * - * void - * SdnToJulian( - * long int sdn, - * int *pYear, - * int *pMonth, - * int *pDay); - * - * Convert a SDN to a Julian calendar date. If the input SDN is less than - * 1, the three output values will all be set to zero, otherwise *pYear - * will be >= -4713 and != 0; *pMonth will be in the range 1 to 12 - * inclusive; *pDay will be in the range 1 to 31 inclusive. - * - * long int - * JulianToSdn( - * int inputYear, - * int inputMonth, - * int inputDay); - * - * Convert a Julian calendar date to a SDN. Zero is returned when the - * input date is detected as invalid or out of the supported range. The - * return value will be > 0 for all valid, supported dates, but there are - * some invalid dates that will return a positive value. To verify that a - * date is valid, convert it to SDN and then back and compare with the - * original. - * - * VALID RANGE - * - * 4713 B.C. to at least 10000 A.D. - * - * Although this software can handle dates all the way back to 4713 - * B.C., such use may not be meaningful. The calendar was created in - * 46 B.C., but the details did not stabilize until at least 8 A.D., - * and perhaps as late at the 4th century. Also, the beginning of a - * year varied from one culture to another - not all accepted January - * as the first month. - * - * CALENDAR OVERVIEW - * - * Julias Ceasar created the calendar in 46 B.C. as a modified form of - * the old Roman republican calendar which was based on lunar cycles. - * The new Julian calendar set fixed lengths for the months, abandoning - * the lunar cycle. It also specified that there would be exactly 12 - * months per year and 365.25 days per year with every 4th year being a - * leap year. - * - * Note that the current accepted value for the tropical year is - * 365.242199 days, not 365.25. This lead to an 11 day shift in the - * calendar with respect to the seasons by the 16th century when the - * Gregorian calendar was created to replace the Julian calendar. - * - * The difference between the Julian and today's Gregorian calendar is - * that the Gregorian does not make centennial years leap years unless - * they are a multiple of 400, which leads to a year of 365.2425 days. - * In other words, in the Gregorian calendar, 1700, 1800 and 1900 are - * not leap years, but 2000 is. All centennial years are leap years in - * the Julian calendar. - * - * The details are unknown, but the lengths of the months were adjusted - * until they finally stablized in 8 A.D. with their current lengths: - * - * January 31 - * February 28/29 - * March 31 - * April 30 - * May 31 - * June 30 - * Quintilis/July 31 - * Sextilis/August 31 - * September 30 - * October 31 - * November 30 - * December 31 - * - * In the early days of the calendar, the days of the month were not - * numbered as we do today. The numbers ran backwards (decreasing) and - * were counted from the Ides (15th of the month - which in the old - * Roman republican lunar calendar would have been the full moon) or - * from the Nonae (9th day before the Ides) or from the beginning of - * the next month. - * - * In the early years, the beginning of the year varied, sometimes - * based on the ascension of rulers. It was not always the first of - * January. - * - * Also, today's epoch, 1 A.D. or the birth of Jesus Christ, did not - * come into use until several centuries later when Christianity became - * a dominant religion. - * - * ALGORITHMS - * - * The calculations are based on two different cycles: a 4 year cycle - * of leap years and a 5 month cycle of month lengths. - * - * The 5 month cycle is used to account for the varying lengths of - * months. You will notice that the lengths alternate between 30 and - * 31 days, except for three anomalies: both July and August have 31 - * days, both December and January have 31, and February is less than - * 30. Starting with March, the lengths are in a cycle of 5 months - * (31, 30, 31, 30, 31): - * - * Mar 31 days \ - * Apr 30 days | - * May 31 days > First cycle - * Jun 30 days | - * Jul 31 days / - * - * Aug 31 days \ - * Sep 30 days | - * Oct 31 days > Second cycle - * Nov 30 days | - * Dec 31 days / - * - * Jan 31 days \ - * Feb 28/9 days | - * > Third cycle (incomplete) - * - * For this reason the calculations (internally) assume that the year - * starts with March 1. - * - * TESTING - * - * This algorithm has been tested from the year 4713 B.C. to 10000 A.D. - * The source code of the verification program is included in this - * package. - * - * REFERENCES - * - * Conversions Between Calendar Date and Julian Day Number by Robert J. - * Tantzen, Communications of the Association for Computing Machinery - * August 1963. (Also published in Collected Algorithms from CACM, - * algorithm number 199). [Note: the published algorithm is for the - * Gregorian calendar, but was adjusted to use the Julian calendar's - * simpler leap year rule.] - * - **************************************************************************/ - -#include "sdncal.h" - -#define JULIAN_SDN_OFFSET 32083 -#define DAYS_PER_5_MONTHS 153 -#define DAYS_PER_4_YEARS 1461 - -void SdnToJulian( - long int sdn, - int *pYear, - int *pMonth, - int *pDay) -{ - int year; - int month; - int day; - long int temp; - int dayOfYear; - - if (sdn <= 0) { - *pYear = 0; - *pMonth = 0; - *pDay = 0; - return; - } - temp = (sdn + JULIAN_SDN_OFFSET) * 4 - 1; - - /* Calculate the year and day of year (1 <= dayOfYear <= 366). */ - year = temp / DAYS_PER_4_YEARS; - dayOfYear = (temp % DAYS_PER_4_YEARS) / 4 + 1; - - /* Calculate the month and day of month. */ - temp = dayOfYear * 5 - 3; - month = temp / DAYS_PER_5_MONTHS; - day = (temp % DAYS_PER_5_MONTHS) / 5 + 1; - - /* Convert to the normal beginning of the year. */ - if (month < 10) { - month += 3; - } else { - year += 1; - month -= 9; - } - - /* Adjust to the B.C./A.D. type numbering. */ - year -= 4800; - if (year <= 0) - year--; - - *pYear = year; - *pMonth = month; - *pDay = day; -} - -long int JulianToSdn( - int inputYear, - int inputMonth, - int inputDay) -{ - int year; - int month; - - /* check for invalid dates */ - if (inputYear == 0 || inputYear < -4713 || - inputMonth <= 0 || inputMonth > 12 || - inputDay <= 0 || inputDay > 31) { - return (0); - } - /* check for dates before SDN 1 (Jan 2, 4713 B.C.) */ - if (inputYear == -4713) { - if (inputMonth == 1 && inputDay == 1) { - return (0); - } - } - /* Make year always a positive number. */ - if (inputYear < 0) { - year = inputYear + 4801; - } else { - year = inputYear + 4800; - } - - /* Adjust the start of the year. */ - if (inputMonth > 2) { - month = inputMonth - 3; - } else { - month = inputMonth + 9; - year--; - } - - return ((year * DAYS_PER_4_YEARS) / 4 - + (month * DAYS_PER_5_MONTHS + 2) / 5 - + inputDay - - JULIAN_SDN_OFFSET); -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/calendar/package.xml b/ext/calendar/package.xml deleted file mode 100644 index 82d0675290c5e..0000000000000 --- a/ext/calendar/package.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - calendar - Date conversion between different calendar formats - - - hholzgra - Hartmut Holzgraefe - hartmut@php.net - lead - - - shane - Shane Caraveo - developer - shane@caraveo.com - - - colin - Colin Viebrock - developer - colin@easydns.com - - - wez - Wez Furlong - developer - wez@php.net - - - -The calendar extension presents a series of functions to simplify -converting between different calendar formats. The intermediary or -standard it is based on is the Julian Day Count. The Julian Day Count -is a count of days starting from January 1st, 4713 B.C. To convert -between calendar systems, you must first convert to Julian Day Count, -then to the calendar system of your choice. Julian Day Count is very -different from the Julian Calendar! - - PHP - - beta - 5.0.0rc1 - 2004-03-19 - -package.xml added to support installation using pear installer - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ext/calendar/php_calendar.h b/ext/calendar/php_calendar.h deleted file mode 100644 index e353fab89367c..0000000000000 --- a/ext/calendar/php_calendar.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef PHP_CALENDAR_H -#define PHP_CALENDAR_H - -extern zend_module_entry calendar_module_entry; -#define calendar_module_ptr &calendar_module_entry - -/* Functions */ - -PHP_MINIT_FUNCTION(calendar); -PHP_MINFO_FUNCTION(calendar); - -PHP_FUNCTION(jdtogregorian); -PHP_FUNCTION(gregoriantojd); -PHP_FUNCTION(jdtojulian); -PHP_FUNCTION(juliantojd); -PHP_FUNCTION(jdtojewish); -PHP_FUNCTION(jewishtojd); -PHP_FUNCTION(jdtofrench); -PHP_FUNCTION(frenchtojd); -PHP_FUNCTION(jddayofweek); -PHP_FUNCTION(jdmonthname); -PHP_FUNCTION(easter_days); -PHP_FUNCTION(easter_date); -PHP_FUNCTION(unixtojd); -PHP_FUNCTION(jdtounix); -PHP_FUNCTION(cal_from_jd); -PHP_FUNCTION(cal_to_jd); -PHP_FUNCTION(cal_days_in_month); -PHP_FUNCTION(cal_info); - -#define phpext_calendar_ptr calendar_module_ptr - -/* - * Specifying the easter calculation method - * - * DEFAULT is Anglican, ie. use Julian calendar before 1753 - * and Gregorian after that. With ROMAN, the cutoff year is 1582. - * ALWAYS_GREGORIAN and ALWAYS_JULIAN force the calendar - * regardless of date. - * - */ - -#define CAL_EASTER_DEFAULT 0 -#define CAL_EASTER_ROMAN 1 -#define CAL_EASTER_ALWAYS_GREGORIAN 2 -#define CAL_EASTER_ALWAYS_JULIAN 3 - -#endif diff --git a/ext/calendar/sdncal.h b/ext/calendar/sdncal.h deleted file mode 100644 index 81328d1369cf5..0000000000000 --- a/ext/calendar/sdncal.h +++ /dev/null @@ -1,97 +0,0 @@ -#ifndef SDNCAL_H -#define SDNCAL_H -/* - * This code has been modified for use with PHP - * by Shane Caraveo shane@caraveo.com - * see below for more details - * - */ - -/* $selId: sdncal.h,v 2.0 1995/10/24 01:13:06 lees Exp $ - * Copyright 1993-1995, Scott E. Lee, all rights reserved. - * Permission granted to use, copy, modify, distribute and sell so long as - * the above copyright and this permission statement are retained in all - * copies. THERE IS NO WARRANTY - USE AT YOUR OWN RISK. - */ - -/************************************************************************** - * - * This package defines a set of routines that convert calendar dates to - * and from a serial day number (SDN). The SDN is a serial numbering of - * days where SDN 1 is November 25, 4714 BC in the Gregorian calendar and - * SDN 2447893 is January 1, 1990. This system of day numbering is - * sometimes referred to as Julian days, but to avoid confusion with the - * Julian calendar, it is referred to as serial day numbers here. The term - * Julian days is also used to mean the number of days since the beginning - * of the current year. - * - * The SDN can be used as an intermediate step in converting from one - * calendar system to another (such as Gregorian to Jewish). It can also - * be used for date computations such as easily comparing two dates, - * determining the day of the week, finding the date of yesterday or - * calculating the number of days between two dates. - * - * When using this software on 16 bit systems, be careful to store SDNs in - * a long int, because it will not fit in the 16 bits that some systems - * allocate to an int. - * - * For each calendar, there are two routines provided. One converts dates - * in that calendar to SDN and the other converts SDN to calendar dates. - * The routines are named SdnTo() and ToSdn(), where - * is the name of the calendar system. - * - * SDN values less than one are not supported. If a conversion routine - * returns an SDN of zero, this means that the date given is either invalid - * or is outside the supported range for that calendar. - * - * At least some validity checks are performed on input dates. For - * example, a negative month number will result in the return of zero for - * the SDN. A returned SDN greater than one does not necessarily mean that - * the input date was valid. To determine if the date is valid, convert it - * to SDN, and if the SDN is greater than zero, convert it back to a date - * and compare to the original. For example: - * - * int y1, m1, d1; - * int y2, m2, d2; - * long int sdn; - * ... - * sdn = GregorianToSdn(y1, m1, d1); - * if (sdn > 0) { - * SdnToGregorian(sdn, &y2, &m2, &d2); - * if (y1 == y2 && m1 == m2 && d1 == d2) { - * ... date is valid ... - * } - * } - * - **************************************************************************/ - -/* Gregorian calendar conversions. */ -void SdnToGregorian(long int sdn, int *pYear, int *pMonth, int *pDay); -long int GregorianToSdn(int year, int month, int day); -extern char *MonthNameShort[13]; -extern char *MonthNameLong[13]; - -/* Julian calendar conversions. */ -void SdnToJulian(long int sdn, int *pYear, int *pMonth, int *pDay); -long int JulianToSdn(int year, int month, int day); - -/* Jewish calendar conversions. */ -void SdnToJewish(long int sdn, int *pYear, int *pMonth, int *pDay); -long int JewishToSdn(int year, int month, int day); -extern char *JewishMonthName[14]; -extern char *JewishMonthHebName[14]; - -/* French republic calendar conversions. */ -void SdnToFrench(long int sdn, int *pYear, int *pMonth, int *pDay); -long int FrenchToSdn(int inputYear, int inputMonth, int inputDay); -extern char *FrenchMonthName[14]; - -/* Islamic calendar conversions. */ -/* Not implemented yet. */ - -/* Day of week conversion. 0=Sunday, 6=Saturday */ -int DayOfWeek(long int sdn); -extern char *DayNameShort[7]; -extern char *DayNameLong[7]; - -#endif /* SDNCAL_H */ diff --git a/ext/calendar/tests/cal_days_in_month.phpt b/ext/calendar/tests/cal_days_in_month.phpt deleted file mode 100644 index 9aaf3efdd0c24..0000000000000 --- a/ext/calendar/tests/cal_days_in_month.phpt +++ /dev/null @@ -1,20 +0,0 @@ ---TEST-- -cal_days_in_month() ---SKIPIF-- - ---FILE-- - ---EXPECT-- -There are 31 days in August 2003 -There are 28 days in February 2003 -There are 29 days in February 2004 -There are 31 days in December 2034 diff --git a/ext/calendar/tests/cal_from_jd.phpt b/ext/calendar/tests/cal_from_jd.phpt deleted file mode 100644 index 9614522a05de5..0000000000000 --- a/ext/calendar/tests/cal_from_jd.phpt +++ /dev/null @@ -1,60 +0,0 @@ ---TEST-- -cal_from_jd() ---SKIPIF-- - ---FILE-- - ---EXPECT-- -Array -( - [date] => 8/26/74 - [month] => 8 - [day] => 26 - [year] => 74 - [dow] => 0 - [abbrevdayname] => Sun - [dayname] => Sunday - [abbrevmonth] => Aug - [monthname] => August -) -Array -( - [date] => 8/26/74 - [month] => 8 - [day] => 26 - [year] => 74 - [dow] => 5 - [abbrevdayname] => Fri - [dayname] => Friday - [abbrevmonth] => Aug - [monthname] => August -) -Array -( - [date] => 8/26/74 - [month] => 8 - [day] => 26 - [year] => 74 - [dow] => 4 - [abbrevdayname] => Thu - [dayname] => Thursday - [abbrevmonth] => Nisan - [monthname] => Nisan -) -Array -( - [date] => 0/0/0 - [month] => 0 - [day] => 0 - [year] => 0 - [dow] => 1 - [abbrevdayname] => Mon - [dayname] => Monday - [abbrevmonth] => - [monthname] => -) diff --git a/ext/calendar/tests/cal_info.phpt b/ext/calendar/tests/cal_info.phpt deleted file mode 100644 index edbc12c0e41cd..0000000000000 --- a/ext/calendar/tests/cal_info.phpt +++ /dev/null @@ -1,216 +0,0 @@ ---TEST-- -cal_info() ---INI-- -date.timezone=UTC ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -Array -( - [0] => Array - ( - [months] => Array - ( - [1] => January - [2] => February - [3] => March - [4] => April - [5] => May - [6] => June - [7] => July - [8] => August - [9] => September - [10] => October - [11] => November - [12] => December - ) - - [abbrevmonths] => Array - ( - [1] => Jan - [2] => Feb - [3] => Mar - [4] => Apr - [5] => May - [6] => Jun - [7] => Jul - [8] => Aug - [9] => Sep - [10] => Oct - [11] => Nov - [12] => Dec - ) - - [maxdaysinmonth] => 31 - [calname] => Gregorian - [calsymbol] => CAL_GREGORIAN - ) - - [1] => Array - ( - [months] => Array - ( - [1] => January - [2] => February - [3] => March - [4] => April - [5] => May - [6] => June - [7] => July - [8] => August - [9] => September - [10] => October - [11] => November - [12] => December - ) - - [abbrevmonths] => Array - ( - [1] => Jan - [2] => Feb - [3] => Mar - [4] => Apr - [5] => May - [6] => Jun - [7] => Jul - [8] => Aug - [9] => Sep - [10] => Oct - [11] => Nov - [12] => Dec - ) - - [maxdaysinmonth] => 31 - [calname] => Julian - [calsymbol] => CAL_JULIAN - ) - - [2] => Array - ( - [months] => Array - ( - [1] => Tishri - [2] => Heshvan - [3] => Kislev - [4] => Tevet - [5] => Shevat - [6] => AdarI - [7] => AdarII - [8] => Nisan - [9] => Iyyar - [10] => Sivan - [11] => Tammuz - [12] => Av - [13] => Elul - ) - - [abbrevmonths] => Array - ( - [1] => Tishri - [2] => Heshvan - [3] => Kislev - [4] => Tevet - [5] => Shevat - [6] => AdarI - [7] => AdarII - [8] => Nisan - [9] => Iyyar - [10] => Sivan - [11] => Tammuz - [12] => Av - [13] => Elul - ) - - [maxdaysinmonth] => 30 - [calname] => Jewish - [calsymbol] => CAL_JEWISH - ) - - [3] => Array - ( - [months] => Array - ( - [1] => Vendemiaire - [2] => Brumaire - [3] => Frimaire - [4] => Nivose - [5] => Pluviose - [6] => Ventose - [7] => Germinal - [8] => Floreal - [9] => Prairial - [10] => Messidor - [11] => Thermidor - [12] => Fructidor - [13] => Extra - ) - - [abbrevmonths] => Array - ( - [1] => Vendemiaire - [2] => Brumaire - [3] => Frimaire - [4] => Nivose - [5] => Pluviose - [6] => Ventose - [7] => Germinal - [8] => Floreal - [9] => Prairial - [10] => Messidor - [11] => Thermidor - [12] => Fructidor - [13] => Extra - ) - - [maxdaysinmonth] => 30 - [calname] => French - [calsymbol] => CAL_FRENCH - ) - -) -Array -( - [months] => Array - ( - [1] => January - [2] => February - [3] => March - [4] => April - [5] => May - [6] => June - [7] => July - [8] => August - [9] => September - [10] => October - [11] => November - [12] => December - ) - - [abbrevmonths] => Array - ( - [1] => Jan - [2] => Feb - [3] => Mar - [4] => Apr - [5] => May - [6] => Jun - [7] => Jul - [8] => Aug - [9] => Sep - [10] => Oct - [11] => Nov - [12] => Dec - ) - - [maxdaysinmonth] => 31 - [calname] => Julian - [calsymbol] => CAL_JULIAN -) - -Warning: cal_info(): invalid calendar ID 99999 in %s on line %d diff --git a/ext/calendar/tests/cal_to_jd.phpt b/ext/calendar/tests/cal_to_jd.phpt deleted file mode 100644 index fde1e0b455604..0000000000000 --- a/ext/calendar/tests/cal_to_jd.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -cal_to_jd() ---SKIPIF-- - ---FILE-- - ---EXPECT-- -1748326 -1748324 -374867 -0 diff --git a/ext/calendar/tests/easter_date.phpt b/ext/calendar/tests/easter_date.phpt deleted file mode 100644 index 1adff69293aa1..0000000000000 --- a/ext/calendar/tests/easter_date.phpt +++ /dev/null @@ -1,20 +0,0 @@ ---TEST-- -easter_date() ---INI-- -date.timezone=UTC ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -2000-04-23 -2001-04-15 -2002-03-31 - -Warning: easter_date(): This function is only valid for years between 1970 and 2037 inclusive in %s on line %d -1970-01-01 diff --git a/ext/calendar/tests/easter_days.phpt b/ext/calendar/tests/easter_days.phpt deleted file mode 100644 index 04aa7ae11bed6..0000000000000 --- a/ext/calendar/tests/easter_days.phpt +++ /dev/null @@ -1,14 +0,0 @@ ---TEST-- -easter_days() ---SKIPIF-- - ---FILE-- - ---EXPECT-- -14 -32 -2 diff --git a/ext/calendar/tests/frenchtojd.phpt b/ext/calendar/tests/frenchtojd.phpt deleted file mode 100644 index 73addb6b80050..0000000000000 --- a/ext/calendar/tests/frenchtojd.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -frenchtojd() ---SKIPIF-- - ---FILE-- - ---EXPECT-- -0 -0 -2375840 -0 diff --git a/ext/calendar/tests/gregoriantojd.phpt b/ext/calendar/tests/gregoriantojd.phpt deleted file mode 100644 index ec3628e899631..0000000000000 --- a/ext/calendar/tests/gregoriantojd.phpt +++ /dev/null @@ -1,18 +0,0 @@ ---TEST-- -gregoriantojd() ---SKIPIF-- - ---FILE-- - ---EXPECT-- -0 -2298874 -2299151 -2440588 -2816423 \ No newline at end of file diff --git a/ext/calendar/tests/jddayofweek.phpt b/ext/calendar/tests/jddayofweek.phpt deleted file mode 100644 index c33d59892d1dd..0000000000000 --- a/ext/calendar/tests/jddayofweek.phpt +++ /dev/null @@ -1,130 +0,0 @@ ---TEST-- -jddayofweek() ---SKIPIF-- - ---FILE-- - ---EXPECT-- -### JD 2440588 ### ---- mode 0 --- -4 -5 -6 -0 -1 -2 -3 -4 ---- mode 1 --- -Thursday -Friday -Saturday -Sunday -Monday -Tuesday -Wednesday -Thursday ---- mode 2 --- -Thu -Fri -Sat -Sun -Mon -Tue -Wed -Thu -### JD 2452162 ### ---- mode 0 --- -0 -1 -2 -3 -4 -5 -6 -0 ---- mode 1 --- -Sunday -Monday -Tuesday -Wednesday -Thursday -Friday -Saturday -Sunday ---- mode 2 --- -Sun -Mon -Tue -Wed -Thu -Fri -Sat -Sun -### JD 2453926 ### ---- mode 0 --- -0 -1 -2 -3 -4 -5 -6 -0 ---- mode 1 --- -Sunday -Monday -Tuesday -Wednesday -Thursday -Friday -Saturday -Sunday ---- mode 2 --- -Sun -Mon -Tue -Wed -Thu -Fri -Sat -Sun -### JD -1000 ### ---- mode 0 --- -2 -3 -4 -5 -6 -0 -1 -2 ---- mode 1 --- -Tuesday -Wednesday -Thursday -Friday -Saturday -Sunday -Monday -Tuesday ---- mode 2 --- -Tue -Wed -Thu -Fri -Sat -Sun -Mon -Tue - diff --git a/ext/calendar/tests/jdmonthname.phpt b/ext/calendar/tests/jdmonthname.phpt deleted file mode 100644 index d05d3c595efca..0000000000000 --- a/ext/calendar/tests/jdmonthname.phpt +++ /dev/null @@ -1,314 +0,0 @@ ---TEST-- -jdmonthname() ---SKIPIF-- - ---FILE-- - ---EXPECT-- -### JD 2440588 ### ---- mode 0 --- -Jan -Jan -Mar -Apr -May -May -Jun -Jul -Aug -Sep -Oct -Nov -Dec ---- mode 1 --- -January -January -March -April -May -May -June -July -August -September -October -November -December ---- mode 2 --- -Dec -Jan -Feb -Mar -Apr -May -Jun -Jul -Aug -Sep -Oct -Nov -Dec ---- mode 3 --- -December -January -February -March -April -May -June -July -August -September -October -November -December ---- mode 4 --- -Tevet -Shevat -AdarI -AdarII -Nisan -Iyyar -Sivan -Tammuz -Av -Elul -Tishri -Heshvan -Kislev ---- mode 5 --- - - - - - - - - - - - - - ---- mode 6 --- -Jan -Jan -Mar -Apr -May -May -Jun -Jul -Aug -Sep -Oct -Nov -Dec -### JD 2452162 ### ---- mode 0 --- -Sep -Oct -Nov -Dec -Jan -Feb -Mar -Apr -May -Jun -Jul -Aug -Sep ---- mode 1 --- -September -October -November -December -January -February -March -April -May -June -July -August -September ---- mode 2 --- -Aug -Sep -Oct -Nov -Dec -Jan -Feb -Mar -Apr -May -Jun -Jul -Aug ---- mode 3 --- -August -September -October -November -December -January -February -March -April -May -June -July -August ---- mode 4 --- -Elul -Tishri -Heshvan -Kislev -Tevet -Shevat -AdarI -Nisan -Iyyar -Sivan -Tammuz -Av -Elul ---- mode 5 --- - - - - - - - - - - - - - ---- mode 6 --- -Sep -Oct -Nov -Dec -Jan -Feb -Mar -Apr -May -Jun -Jul -Aug -Sep -### JD 2453926 ### ---- mode 0 --- -Jul -Aug -Sep -Oct -Nov -Dec -Jan -Feb -Mar -Apr -May -Jun -Jul ---- mode 1 --- -July -August -September -October -November -December -January -February -March -April -May -June -July ---- mode 2 --- -Jun -Jul -Aug -Sep -Oct -Nov -Dec -Jan -Feb -Mar -Apr -May -Jun ---- mode 3 --- -June -July -August -September -October -November -December -January -February -March -April -May -June ---- mode 4 --- -Tammuz -Av -Elul -Tishri -Heshvan -Kislev -Tevet -Shevat -AdarI -Nisan -Iyyar -Sivan -Tammuz ---- mode 5 --- - - - - - - - - - - - - - ---- mode 6 --- -Jul -Aug -Sep -Oct -Nov -Dec -Jan -Feb -Mar -Apr -May -Jun -Jul diff --git a/ext/calendar/tests/jdtofrench.phpt b/ext/calendar/tests/jdtofrench.phpt deleted file mode 100644 index 27944091e3071..0000000000000 --- a/ext/calendar/tests/jdtofrench.phpt +++ /dev/null @@ -1,20 +0,0 @@ ---TEST-- -jdtofrench() ---SKIPIF-- - ---FILE-- - ---EXPECT-- -0/0/0 -1/1/1 -1/11/1 -4/11/1 -5/21/2 -0/0/0 \ No newline at end of file diff --git a/ext/calendar/tests/jdtogregorian.phpt b/ext/calendar/tests/jdtogregorian.phpt deleted file mode 100644 index 6b1956f477a67..0000000000000 --- a/ext/calendar/tests/jdtogregorian.phpt +++ /dev/null @@ -1,18 +0,0 @@ ---TEST-- -jdtogregorian() ---SKIPIF-- - ---FILE-- - ---EXPECT-- -0/0/0 -1/1/1582 -10/5/1582 -1/1/1970 -1/1/2999 \ No newline at end of file diff --git a/ext/calendar/tests/jdtojewish.phpt b/ext/calendar/tests/jdtojewish.phpt deleted file mode 100644 index 484b95749cca9..0000000000000 --- a/ext/calendar/tests/jdtojewish.phpt +++ /dev/null @@ -1,30 +0,0 @@ ---TEST-- -jdtojewish() function ---SKIPIF-- - ---FILE-- - ---EXPECT-- -string(184) "2/22/5763 -ëá çùåï äúùñâ -ëá çùåï ä'úùñâ -ëá çùåï ä àìôéí úùñâ -ëá çùåï ä' àìôéí úùñâ -ë"á çùåï äúùñ"â -á' çùåï äúùñ"â -á' çùåï ä'úùñ"â -á' çùåï ä àìôéí úùñ"â -á' çùåï ä' àìôéí úùñ"â -" diff --git a/ext/calendar/tests/jdtojulian.phpt b/ext/calendar/tests/jdtojulian.phpt deleted file mode 100644 index 6c87aa7e54a5e..0000000000000 --- a/ext/calendar/tests/jdtojulian.phpt +++ /dev/null @@ -1,18 +0,0 @@ ---TEST-- -jdtojulian() ---SKIPIF-- - ---FILE-- - ---EXPECT-- -0/0/0 -12/22/1581 -9/25/1582 -12/19/1969 -12/12/2998 \ No newline at end of file diff --git a/ext/calendar/tests/jdtomonthname.phpt b/ext/calendar/tests/jdtomonthname.phpt deleted file mode 100644 index 76d127d6be57f..0000000000000 --- a/ext/calendar/tests/jdtomonthname.phpt +++ /dev/null @@ -1,71 +0,0 @@ ---TEST-- -jdtomonthname() test ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -string(3) "Jan" -string(7) "January" -string(3) "Jan" -string(7) "January" -string(6) "Shevat" -string(0) "" -string(3) "Jan" -string(7) "January" -string(3) "Dec" -string(8) "December" -string(5) "Tevet" -string(0) "" -string(0) "" -string(0) "" -string(0) "" -string(0) "" -string(0) "" -string(0) "" - -Warning: jdmonthname() expects parameter 1 to be long, array given in %s on line %d -bool(false) - -Warning: jdmonthname() expects parameter 1 to be long, array given in %s on line %d -bool(false) - -Warning: jdmonthname() expects parameter 1 to be long, array given in %s on line %d -bool(false) - -Warning: jdmonthname() expects parameter 1 to be long, array given in %s on line %d -bool(false) - -Warning: jdmonthname() expects parameter 1 to be long, array given in %s on line %d -bool(false) - -Warning: jdmonthname() expects parameter 1 to be long, array given in %s on line %d -bool(false) -string(3) "Dec" -string(8) "December" -string(3) "Jul" -string(4) "July" -string(6) "Tishri" -string(0) "" -Done diff --git a/ext/calendar/tests/jdtounix.phpt b/ext/calendar/tests/jdtounix.phpt deleted file mode 100644 index 8d855433003d5..0000000000000 --- a/ext/calendar/tests/jdtounix.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -jdtounix() ---INI-- -date.timezone=UTC ---SKIPIF-- - ---FILE-- - ---EXPECT-- -1970-01-01 -2001-09-09 -2006-07-09 diff --git a/ext/calendar/tests/jewishtojd.phpt b/ext/calendar/tests/jewishtojd.phpt deleted file mode 100644 index a9a2ff0e3dc92..0000000000000 --- a/ext/calendar/tests/jewishtojd.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -jewishtojd() ---SKIPIF-- - ---FILE-- - ---EXPECT-- -0 -0 -347998 -2452576 \ No newline at end of file diff --git a/ext/calendar/tests/juliantojd.phpt b/ext/calendar/tests/juliantojd.phpt deleted file mode 100644 index 9563e041a16e2..0000000000000 --- a/ext/calendar/tests/juliantojd.phpt +++ /dev/null @@ -1,18 +0,0 @@ ---TEST-- -juliantojd() ---SKIPIF-- - ---FILE-- - ---EXPECT-- -0 -2298884 -2299161 -2440601 -2816443 \ No newline at end of file diff --git a/ext/calendar/tests/skipif.inc b/ext/calendar/tests/skipif.inc deleted file mode 100644 index de8e4ae9307e3..0000000000000 --- a/ext/calendar/tests/skipif.inc +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/ext/calendar/tests/unixtojd.phpt b/ext/calendar/tests/unixtojd.phpt deleted file mode 100644 index e8e953c3747c7..0000000000000 --- a/ext/calendar/tests/unixtojd.phpt +++ /dev/null @@ -1,14 +0,0 @@ ---TEST-- -unixtojd() ---SKIPIF-- - ---FILE-- - ---EXPECT-- -2440588 -2452161 -2453926 diff --git a/ext/com_dotnet/CREDITS b/ext/com_dotnet/CREDITS deleted file mode 100644 index 8dd06fa662b4f..0000000000000 --- a/ext/com_dotnet/CREDITS +++ /dev/null @@ -1,2 +0,0 @@ -COM and .Net -Wez Furlong diff --git a/ext/com_dotnet/README b/ext/com_dotnet/README deleted file mode 100644 index 0d9db40d981d4..0000000000000 --- a/ext/com_dotnet/README +++ /dev/null @@ -1,71 +0,0 @@ -This is the new php5 COM module. - -It is not 100% backwards compatible with PHP 4 ext/com, but you should not miss -the "features" that have not been retained. - -This module exposes 3 classes: variant, com and dotnet(*). -com and dotnet classes are descendants of the variant class; the only -difference between the three are their constructors. Once instantiated, the -module doesn't make a distinction between them. - -COM errrors are mapped to exceptions; you should protect your COM code using -the try..catch construct if you want to be able to handle error conditions. - -Be warned that due to the way the ZE2 currently works, exceptions are only -"armed" at the time they are detected, but do not "detonate" until the end of -the statement. So, code like this: - - $obj->foo[43]->bar(); - -Where the foo[43] access triggers an exception will continue to call the bar() -method on a null object and cause a fatal php error. - -Default properties and array access: - -$obj = new COM("..."); -$obj[1]->foo(); - -The code above will use the type information for the object to determine its -default property and then access it. In PHP 4, it was hard-coded to use the -"Items" member, which was wrong. - -The default property will also be used by the casting support to determine the -value for the object. - -Variants: - -This implementation of COM takes a simpler approach than the PHP 4 version; -we only map a few native types to COM and vice-versa, leaving the more complex -things as variants. This allows greater consistency of data when passing -parameters to and from COM objects (no data will be lost). In addition, a -large number of the variant API has been mapped to PHP space so that you can -use it for working with the special variant decimal, currency and date time -types. This could be used as a replacement for the bcmath extension, for -example. - -You can use the new object casting hook to for a php-native representation of -a variant object: - -$a = new variant(4); -$b = new variant(6); -$c = variant_add($a, $b); -echo $c; // outputs 10 as a string, instead of Object - -Sample Script: - -Version}\n"; -$word->Visible = 1; -$word->Documents->Add(); -$word->Selection->TypeText("This is a test..."); -$word->Documents[1]->SaveAs("Useless test.doc"); -$word->Quit(); -?> - -TODO: - -- documentation - -* dotnet support requires that you have the mscoree.h header from the .net sdk - when you build the module. diff --git a/ext/com_dotnet/com_com.c b/ext/com_dotnet/com_com.c deleted file mode 100644 index 23136aef545a3..0000000000000 --- a/ext/com_dotnet/com_com.c +++ /dev/null @@ -1,844 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_ini.h" -#include "ext/standard/info.h" -#include "php_com_dotnet.h" -#include "php_com_dotnet_internal.h" -#include "Zend/zend_exceptions.h" - -/* {{{ com_create_instance - ctor for COM class */ -PHP_FUNCTION(com_create_instance) -{ - zval *object = getThis(); - zval *server_params = NULL; - php_com_dotnet_object *obj; - char *module_name, *typelib_name = NULL, *server_name = NULL; - char *user_name = NULL, *domain_name = NULL, *password = NULL; - int module_name_len, typelib_name_len, server_name_len, - user_name_len, domain_name_len, password_len; - OLECHAR *moniker; - CLSID clsid; - CLSCTX ctx = CLSCTX_SERVER; - HRESULT res = E_FAIL; - int mode = COMG(autoreg_case_sensitive) ? CONST_CS : 0; - ITypeLib *TL = NULL; - COSERVERINFO info; - COAUTHIDENTITY authid = {0}; - COAUTHINFO authinfo = { - RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, - RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, - &authid, EOAC_NONE - }; - - php_com_initialize(TSRMLS_C); - obj = CDNO_FETCH(object); - - if (FAILURE == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, - ZEND_NUM_ARGS() TSRMLS_CC, "s|s!ls", - &module_name, &module_name_len, &server_name, &server_name_len, - &obj->code_page, &typelib_name, &typelib_name_len) && - FAILURE == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, - ZEND_NUM_ARGS() TSRMLS_CC, "sa|ls", - &module_name, &module_name_len, &server_params, &obj->code_page, - &typelib_name, &typelib_name_len)) { - - php_com_throw_exception(E_INVALIDARG, "Could not create COM object - invalid arguments!" TSRMLS_CC); - ZVAL_NULL(object); - return; - } - - if (server_name) { - ctx = CLSCTX_REMOTE_SERVER; - } else if (server_params) { - zval **tmp; - - /* decode the data from the array */ - - if (SUCCESS == zend_hash_find(HASH_OF(server_params), - "Server", sizeof("Server"), (void**)&tmp)) { - convert_to_string_ex(tmp); - server_name = Z_STRVAL_PP(tmp); - server_name_len = Z_STRLEN_PP(tmp); - ctx = CLSCTX_REMOTE_SERVER; - } - - if (SUCCESS == zend_hash_find(HASH_OF(server_params), - "Username", sizeof("Username"), (void**)&tmp)) { - convert_to_string_ex(tmp); - user_name = Z_STRVAL_PP(tmp); - user_name_len = Z_STRLEN_PP(tmp); - } - - if (SUCCESS == zend_hash_find(HASH_OF(server_params), - "Password", sizeof("Password"), (void**)&tmp)) { - convert_to_string_ex(tmp); - password = Z_STRVAL_PP(tmp); - password_len = Z_STRLEN_PP(tmp); - } - - if (SUCCESS == zend_hash_find(HASH_OF(server_params), - "Domain", sizeof("Domain"), (void**)&tmp)) { - convert_to_string_ex(tmp); - domain_name = Z_STRVAL_PP(tmp); - domain_name_len = Z_STRLEN_PP(tmp); - } - - if (SUCCESS == zend_hash_find(HASH_OF(server_params), - "Flags", sizeof("Flags"), (void**)&tmp)) { - convert_to_long_ex(tmp); - ctx = (CLSCTX)Z_LVAL_PP(tmp); - } - } - - if (server_name && !COMG(allow_dcom)) { - php_com_throw_exception(E_ERROR, "DCOM has been disabled by your administrator [com.allow_dcom=0]" TSRMLS_CC); - return; - } - - moniker = php_com_string_to_olestring(module_name, module_name_len, obj->code_page TSRMLS_CC); - - /* if instantiating a remote object, either directly, or via - * a moniker, fill in the relevant info */ - if (server_name) { - info.dwReserved1 = 0; - info.dwReserved2 = 0; - info.pwszName = php_com_string_to_olestring(server_name, server_name_len, obj->code_page TSRMLS_CC); - - if (user_name) { - authid.User = php_com_string_to_olestring(user_name, -1, obj->code_page TSRMLS_CC); - authid.UserLength = user_name_len; - - if (password) { - authid.Password = (OLECHAR*)password; - authid.PasswordLength = password_len; - } else { - authid.Password = (OLECHAR*)""; - authid.PasswordLength = 0; - } - - if (domain_name) { - authid.Domain = (OLECHAR*)domain_name; - authid.DomainLength = domain_name_len; - } else { - authid.Domain = (OLECHAR*)""; - authid.DomainLength = 0; - } - authid.Flags = SEC_WINNT_AUTH_IDENTITY_ANSI; - info.pAuthInfo = &authinfo; - } else { - info.pAuthInfo = NULL; - } - } - - if (FAILED(CLSIDFromString(moniker, &clsid))) { - /* try to use it as a moniker */ - IBindCtx *pBindCtx = NULL; - IMoniker *pMoniker = NULL; - ULONG ulEaten; - BIND_OPTS2 bopt = {0}; - - if (SUCCEEDED(res = CreateBindCtx(0, &pBindCtx))) { - if (server_name) { - /* fill in the remote server info. - * MSDN docs indicate that this might be ignored in - * current win32 implementations, but at least we are - * doing the right thing in readiness for the day that - * it does work */ - bopt.cbStruct = sizeof(bopt); - IBindCtx_GetBindOptions(pBindCtx, (BIND_OPTS*)&bopt); - bopt.pServerInfo = &info; - /* apparently, GetBindOptions will only ever return - * a regular BIND_OPTS structure. My gut feeling is - * that it will modify the size field to reflect that - * so lets be safe and set it to the BIND_OPTS2 size - * again */ - bopt.cbStruct = sizeof(bopt); - IBindCtx_SetBindOptions(pBindCtx, (BIND_OPTS*)&bopt); - } - - if (SUCCEEDED(res = MkParseDisplayName(pBindCtx, moniker, &ulEaten, &pMoniker))) { - res = IMoniker_BindToObject(pMoniker, pBindCtx, - NULL, &IID_IDispatch, (LPVOID*)&V_DISPATCH(&obj->v)); - - if (SUCCEEDED(res)) { - V_VT(&obj->v) = VT_DISPATCH; - } - - IMoniker_Release(pMoniker); - } - } - if (pBindCtx) { - IBindCtx_Release(pBindCtx); - } - } else if (server_name) { - MULTI_QI qi; - - qi.pIID = &IID_IDispatch; - qi.pItf = NULL; - qi.hr = S_OK; - - res = CoCreateInstanceEx(&clsid, NULL, ctx, &info, 1, &qi); - - if (SUCCEEDED(res)) { - res = qi.hr; - V_DISPATCH(&obj->v) = (IDispatch*)qi.pItf; - V_VT(&obj->v) = VT_DISPATCH; - } - } else { - res = CoCreateInstance(&clsid, NULL, CLSCTX_SERVER, &IID_IDispatch, (LPVOID*)&V_DISPATCH(&obj->v)); - if (SUCCEEDED(res)) { - V_VT(&obj->v) = VT_DISPATCH; - } - } - - if (server_name) { - STR_FREE((char*)info.pwszName); - STR_FREE((char*)authid.User); - } - - efree(moniker); - - if (FAILED(res)) { - char *werr, *msg; - - werr = php_win_err(res); - spprintf(&msg, 0, "Failed to create COM object `%s': %s", module_name, werr); - LocalFree(werr); - - php_com_throw_exception(res, msg TSRMLS_CC); - efree(msg); - ZVAL_NULL(object); - return; - } - - /* we got the object and it lives ! */ - - /* see if it has TypeInfo available */ - if (FAILED(IDispatch_GetTypeInfo(V_DISPATCH(&obj->v), 0, LANG_NEUTRAL, &obj->typeinfo)) && typelib_name) { - /* load up the library from the named file */ - int cached; - - TL = php_com_load_typelib_via_cache(typelib_name, obj->code_page, &cached TSRMLS_CC); - - if (TL) { - if (COMG(autoreg_on) && !cached) { - php_com_import_typelib(TL, mode, obj->code_page TSRMLS_CC); - } - - /* cross your fingers... there is no guarantee that this ITypeInfo - * instance has any relation to this IDispatch instance... */ - ITypeLib_GetTypeInfo(TL, 0, &obj->typeinfo); - ITypeLib_Release(TL); - } - } else if (obj->typeinfo && COMG(autoreg_on)) { - int idx; - - if (SUCCEEDED(ITypeInfo_GetContainingTypeLib(obj->typeinfo, &TL, &idx))) { - /* check if the library is already in the cache by getting its name */ - BSTR name; - - if (SUCCEEDED(ITypeLib_GetDocumentation(TL, -1, &name, NULL, NULL, NULL))) { - typelib_name = php_com_olestring_to_string(name, &typelib_name_len, obj->code_page TSRMLS_CC); - - if (SUCCESS == zend_ts_hash_add(&php_com_typelibraries, typelib_name, typelib_name_len+1, (void*)&TL, sizeof(ITypeLib*), NULL)) { - php_com_import_typelib(TL, mode, obj->code_page TSRMLS_CC); - - /* add a reference for the hash */ - ITypeLib_AddRef(TL); - } - - } else { - /* try it anyway */ - php_com_import_typelib(TL, mode, obj->code_page TSRMLS_CC); - } - - ITypeLib_Release(TL); - } - } - -} -/* }}} */ - -/* {{{ proto object com_get_active_object(string progid [, int code_page ]) - Returns a handle to an already running instance of a COM object */ -PHP_FUNCTION(com_get_active_object) -{ - CLSID clsid; - char *module_name; - int module_name_len; - long code_page = COMG(code_page); - IUnknown *unk = NULL; - IDispatch *obj = NULL; - HRESULT res; - OLECHAR *module = NULL; - - php_com_initialize(TSRMLS_C); - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", - &module_name, &module_name_len, &code_page)) { - php_com_throw_exception(E_INVALIDARG, "Invalid arguments!" TSRMLS_CC); - return; - } - - module = php_com_string_to_olestring(module_name, module_name_len, code_page TSRMLS_CC); - - res = CLSIDFromString(module, &clsid); - - if (FAILED(res)) { - php_com_throw_exception(res, NULL TSRMLS_CC); - } else { - res = GetActiveObject(&clsid, NULL, &unk); - - if (FAILED(res)) { - php_com_throw_exception(res, NULL TSRMLS_CC); - } else { - res = IUnknown_QueryInterface(unk, &IID_IDispatch, &obj); - - if (FAILED(res)) { - php_com_throw_exception(res, NULL TSRMLS_CC); - } else if (obj) { - /* we got our dispatchable object */ - php_com_wrap_dispatch(return_value, obj, code_page TSRMLS_CC); - } - } - } - - if (obj) { - IDispatch_Release(obj); - } - if (unk) { - IUnknown_Release(obj); - } - efree(module); -} -/* }}} */ - -/* Performs an Invoke on the given com object. - * returns a failure code and creates an exception if there was an error */ -HRESULT php_com_invoke_helper(php_com_dotnet_object *obj, DISPID id_member, - WORD flags, DISPPARAMS *disp_params, VARIANT *v, int silent, int allow_noarg TSRMLS_DC) -{ - HRESULT hr; - unsigned int arg_err; - EXCEPINFO e = {0}; - - hr = IDispatch_Invoke(V_DISPATCH(&obj->v), id_member, - &IID_NULL, LOCALE_SYSTEM_DEFAULT, flags, disp_params, v, &e, &arg_err); - - if (silent == 0 && FAILED(hr)) { - char *source = NULL, *desc = NULL, *msg = NULL; - int source_len, desc_len; - - switch (hr) { - case DISP_E_EXCEPTION: - if (e.bstrSource) { - source = php_com_olestring_to_string(e.bstrSource, &source_len, obj->code_page TSRMLS_CC); - SysFreeString(e.bstrSource); - } - if (e.bstrDescription) { - desc = php_com_olestring_to_string(e.bstrDescription, &desc_len, obj->code_page TSRMLS_CC); - SysFreeString(e.bstrDescription); - } - if (PG(html_errors)) { - spprintf(&msg, 0, "Source: %s
Description: %s", - source ? source : "Unknown", - desc ? desc : "Unknown"); - } else { - spprintf(&msg, 0, "Source: %s\nDescription: %s", - source ? source : "Unknown", - desc ? desc : "Unknown"); - } - if (desc) { - efree(desc); - } - if (source) { - efree(source); - } - if (e.bstrHelpFile) { - SysFreeString(e.bstrHelpFile); - } - break; - - case DISP_E_PARAMNOTFOUND: - case DISP_E_TYPEMISMATCH: - desc = php_win_err(hr); - spprintf(&msg, 0, "Parameter %d: %s", arg_err, desc); - LocalFree(desc); - break; - - case DISP_E_BADPARAMCOUNT: - if ((disp_params->cArgs + disp_params->cNamedArgs == 0) && (allow_noarg == 1)) { - /* if getting a property and they are missing all parameters, - * we want to create a proxy object for them; so lets not create an - * exception here */ - msg = NULL; - break; - } - /* else fall through */ - - default: - desc = php_win_err(hr); - spprintf(&msg, 0, "Error [0x%08x] %s", hr, desc); - LocalFree(desc); - break; - } - - if (msg) { - php_com_throw_exception(hr, msg TSRMLS_CC); - efree(msg); - } - } - - return hr; -} - -/* map an ID to a name */ -HRESULT php_com_get_id_of_name(php_com_dotnet_object *obj, char *name, - int namelen, DISPID *dispid TSRMLS_DC) -{ - OLECHAR *olename; - HRESULT hr; - DISPID *dispid_ptr; - - if (namelen == -1) { - namelen = strlen(name); - } - - if (obj->id_of_name_cache && SUCCESS == zend_hash_find(obj->id_of_name_cache, name, namelen, (void**)&dispid_ptr)) { - *dispid = *dispid_ptr; - return S_OK; - } - - olename = php_com_string_to_olestring(name, namelen, obj->code_page TSRMLS_CC); - - if (obj->typeinfo) { - hr = ITypeInfo_GetIDsOfNames(obj->typeinfo, &olename, 1, dispid); - if (FAILED(hr)) { - hr = IDispatch_GetIDsOfNames(V_DISPATCH(&obj->v), &IID_NULL, &olename, 1, LOCALE_SYSTEM_DEFAULT, dispid); - if (SUCCEEDED(hr)) { - /* fall back on IDispatch direct */ - ITypeInfo_Release(obj->typeinfo); - obj->typeinfo = NULL; - } - } - } else { - hr = IDispatch_GetIDsOfNames(V_DISPATCH(&obj->v), &IID_NULL, &olename, 1, LOCALE_SYSTEM_DEFAULT, dispid); - } - efree(olename); - - if (SUCCEEDED(hr)) { - /* cache the mapping */ - if (!obj->id_of_name_cache) { - ALLOC_HASHTABLE(obj->id_of_name_cache); - zend_hash_init(obj->id_of_name_cache, 2, NULL, NULL, 0); - } - zend_hash_update(obj->id_of_name_cache, name, namelen, dispid, sizeof(*dispid), NULL); - } - - return hr; -} - -/* the core of COM */ -int php_com_do_invoke_byref(php_com_dotnet_object *obj, char *name, int namelen, - WORD flags, VARIANT *v, int nargs, zval ***args TSRMLS_DC) -{ - DISPID dispid, altdispid; - DISPPARAMS disp_params; - HRESULT hr; - VARIANT *vargs = NULL, *byref_vals = NULL; - int i, byref_count = 0, j; - zend_internal_function *f = (zend_internal_function*)EG(function_state_ptr)->function; - - /* assumption: that the active function (f) is the function we generated for the engine */ - if (!f || f->arg_info == NULL) { - f = NULL; - } - - hr = php_com_get_id_of_name(obj, name, namelen, &dispid TSRMLS_CC); - - if (FAILED(hr)) { - char *winerr = NULL; - char *msg = NULL; - winerr = php_win_err(hr); - spprintf(&msg, 0, "Unable to lookup `%s': %s", name, winerr); - LocalFree(winerr); - php_com_throw_exception(hr, msg TSRMLS_CC); - efree(msg); - return FAILURE; - } - - - if (nargs) { - vargs = (VARIANT*)safe_emalloc(sizeof(VARIANT), nargs, 0); - } - - if (f) { - for (i = 0; i < nargs; i++) { - if (f->arg_info[nargs - i - 1].pass_by_reference) { - byref_count++; - } - } - } - - if (byref_count) { - byref_vals = (VARIANT*)safe_emalloc(sizeof(VARIANT), byref_count, 0); - for (j = 0, i = 0; i < nargs; i++) { - if (f->arg_info[nargs - i - 1].pass_by_reference) { - /* put the value into byref_vals instead */ - php_com_variant_from_zval(&byref_vals[j], *args[nargs - i - 1], obj->code_page TSRMLS_CC); - - /* if it is already byref, "move" it into the vargs array, otherwise - * make vargs a reference to this value */ - if (V_VT(&byref_vals[j]) & VT_BYREF) { - memcpy(&vargs[i], &byref_vals[j], sizeof(vargs[i])); - VariantInit(&byref_vals[j]); /* leave the variant slot empty to simplify cleanup */ - } else { - VariantInit(&vargs[i]); - V_VT(&vargs[i]) = V_VT(&byref_vals[j]) | VT_BYREF; - /* union magic ensures that this works out */ - vargs[i].byref = &V_UINT(&byref_vals[j]); - } - j++; - } else { - php_com_variant_from_zval(&vargs[i], *args[nargs - i - 1], obj->code_page TSRMLS_CC); - } - } - - } else { - /* Invoke'd args are in reverse order */ - for (i = 0; i < nargs; i++) { - php_com_variant_from_zval(&vargs[i], *args[nargs - i - 1], obj->code_page TSRMLS_CC); - } - } - - disp_params.cArgs = nargs; - disp_params.cNamedArgs = 0; - disp_params.rgvarg = vargs; - disp_params.rgdispidNamedArgs = NULL; - - if (flags & DISPATCH_PROPERTYPUT) { - altdispid = DISPID_PROPERTYPUT; - disp_params.rgdispidNamedArgs = &altdispid; - disp_params.cNamedArgs = 1; - } - - /* this will create an exception if needed */ - hr = php_com_invoke_helper(obj, dispid, flags, &disp_params, v, 0, 0 TSRMLS_CC); - - /* release variants */ - if (vargs) { - for (i = 0, j = 0; i < nargs; i++) { - /* if this was byref, update the zval */ - if (f && f->arg_info[nargs - i - 1].pass_by_reference) { - SEPARATE_ZVAL_IF_NOT_REF(args[nargs - i - 1]); - - /* if the variant is pointing at the byref_vals, we need to map - * the pointee value as a zval; otherwise, the value is pointing - * into an existing PHP variant record */ - if (V_VT(&vargs[i]) & VT_BYREF) { - if (vargs[i].byref == &V_UINT(&byref_vals[j])) { - /* copy that value */ - php_com_zval_from_variant(*args[nargs - i - 1], &byref_vals[j], - obj->code_page TSRMLS_CC); - } - } else { - /* not sure if this can ever happen; the variant we marked as BYREF - * is no longer BYREF - copy its value */ - php_com_zval_from_variant(*args[nargs - i - 1], &vargs[i], - obj->code_page TSRMLS_CC); - } - VariantClear(&byref_vals[j]); - j++; - } - VariantClear(&vargs[i]); - } - efree(vargs); - } - - return SUCCEEDED(hr) ? SUCCESS : FAILURE; -} - - - -int php_com_do_invoke_by_id(php_com_dotnet_object *obj, DISPID dispid, - WORD flags, VARIANT *v, int nargs, zval **args, int silent, int allow_noarg TSRMLS_DC) -{ - DISPID altdispid; - DISPPARAMS disp_params; - HRESULT hr; - VARIANT *vargs = NULL; - int i; - - if (nargs) { - vargs = (VARIANT*)safe_emalloc(sizeof(VARIANT), nargs, 0); - } - - /* Invoke'd args are in reverse order */ - for (i = 0; i < nargs; i++) { - php_com_variant_from_zval(&vargs[i], args[nargs - i - 1], obj->code_page TSRMLS_CC); - } - - disp_params.cArgs = nargs; - disp_params.cNamedArgs = 0; - disp_params.rgvarg = vargs; - disp_params.rgdispidNamedArgs = NULL; - - if (flags & DISPATCH_PROPERTYPUT) { - altdispid = DISPID_PROPERTYPUT; - disp_params.rgdispidNamedArgs = &altdispid; - disp_params.cNamedArgs = 1; - } - - /* this will create an exception if needed */ - hr = php_com_invoke_helper(obj, dispid, flags, &disp_params, v, silent, allow_noarg TSRMLS_CC); - - /* release variants */ - if (vargs) { - for (i = 0; i < nargs; i++) { - VariantClear(&vargs[i]); - } - efree(vargs); - } - - /* a bit of a hack this, but it's needed for COM array access. */ - if (hr == DISP_E_BADPARAMCOUNT) - return hr; - - return SUCCEEDED(hr) ? SUCCESS : FAILURE; -} - -int php_com_do_invoke(php_com_dotnet_object *obj, char *name, int namelen, - WORD flags, VARIANT *v, int nargs, zval **args, int allow_noarg TSRMLS_DC) -{ - DISPID dispid; - HRESULT hr; - char *winerr = NULL; - char *msg = NULL; - - hr = php_com_get_id_of_name(obj, name, namelen, &dispid TSRMLS_CC); - - if (FAILED(hr)) { - winerr = php_win_err(hr); - spprintf(&msg, 0, "Unable to lookup `%s': %s", name, winerr); - LocalFree(winerr); - php_com_throw_exception(hr, msg TSRMLS_CC); - efree(msg); - return FAILURE; - } - - return php_com_do_invoke_by_id(obj, dispid, flags, v, nargs, args, 0, allow_noarg TSRMLS_CC); -} - -/* {{{ proto string com_create_guid() - Generate a globally unique identifier (GUID) */ -PHP_FUNCTION(com_create_guid) -{ - GUID retval; - OLECHAR *guid_string; - - if (ZEND_NUM_ARGS() != 0) { - ZEND_WRONG_PARAM_COUNT(); - } - - php_com_initialize(TSRMLS_C); - if (CoCreateGuid(&retval) == S_OK && StringFromCLSID(&retval, &guid_string) == S_OK) { - Z_TYPE_P(return_value) = IS_STRING; - Z_STRVAL_P(return_value) = php_com_olestring_to_string(guid_string, &Z_STRLEN_P(return_value), CP_ACP, 0); - - CoTaskMemFree(guid_string); - } else { - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface]) - Connect events from a COM object to a PHP object */ -PHP_FUNCTION(com_event_sink) -{ - zval *object, *sinkobject, *sink=NULL; - char *dispname = NULL, *typelibname = NULL; - zend_bool gotguid = 0; - php_com_dotnet_object *obj; - ITypeInfo *typeinfo = NULL; - - RETVAL_FALSE; - - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Oo|z/", - &object, php_com_variant_class_entry, &sinkobject, &sink)) { - RETURN_FALSE; - } - - php_com_initialize(TSRMLS_C); - obj = CDNO_FETCH(object); - - if (sink && Z_TYPE_P(sink) == IS_ARRAY) { - /* 0 => typelibname, 1 => dispname */ - zval **tmp; - - if (zend_hash_index_find(Z_ARRVAL_P(sink), 0, (void**)&tmp) == SUCCESS) - typelibname = Z_STRVAL_PP(tmp); - if (zend_hash_index_find(Z_ARRVAL_P(sink), 1, (void**)&tmp) == SUCCESS) - dispname = Z_STRVAL_PP(tmp); - } else if (sink != NULL) { - convert_to_string(sink); - dispname = Z_STRVAL_P(sink); - } - - typeinfo = php_com_locate_typeinfo(typelibname, obj, dispname, 1 TSRMLS_CC); - - if (typeinfo) { - HashTable *id_to_name; - - ALLOC_HASHTABLE(id_to_name); - - if (php_com_process_typeinfo(typeinfo, id_to_name, 0, &obj->sink_id, obj->code_page TSRMLS_CC)) { - - /* Create the COM wrapper for this sink */ - obj->sink_dispatch = php_com_wrapper_export_as_sink(sinkobject, &obj->sink_id, id_to_name TSRMLS_CC); - - /* Now hook it up to the source */ - php_com_object_enable_event_sink(obj, TRUE TSRMLS_CC); - RETVAL_TRUE; - - } else { - FREE_HASHTABLE(id_to_name); - } - } - - if (typeinfo) { - ITypeInfo_Release(typeinfo); - } - -} -/* }}} */ - -/* {{{ proto bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink) - Print out a PHP class definition for a dispatchable interface */ -PHP_FUNCTION(com_print_typeinfo) -{ - zval *arg1; - char *ifacename = NULL; - char *typelibname = NULL; - int ifacelen; - zend_bool wantsink = 0; - php_com_dotnet_object *obj = NULL; - ITypeInfo *typeinfo; - - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/|s!b", &arg1, &ifacename, - &ifacelen, &wantsink)) { - RETURN_FALSE; - } - - php_com_initialize(TSRMLS_C); - if (Z_TYPE_P(arg1) == IS_OBJECT) { - CDNO_FETCH_VERIFY(obj, arg1); - } else { - convert_to_string(arg1); - typelibname = Z_STRVAL_P(arg1); - } - - typeinfo = php_com_locate_typeinfo(typelibname, obj, ifacename, wantsink ? 1 : 0 TSRMLS_CC); - if (typeinfo) { - php_com_process_typeinfo(typeinfo, NULL, 1, NULL, obj ? obj->code_page : COMG(code_page) TSRMLS_CC); - ITypeInfo_Release(typeinfo); - RETURN_TRUE; - } else { - zend_error(E_WARNING, "Unable to find typeinfo using the parameters supplied"); - } - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto bool com_message_pump([int timeoutms]) - Process COM messages, sleeping for up to timeoutms milliseconds */ -PHP_FUNCTION(com_message_pump) -{ - long timeoutms = 0; - MSG msg; - DWORD result; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &timeoutms) == FAILURE) - RETURN_FALSE; - - php_com_initialize(TSRMLS_C); - result = MsgWaitForMultipleObjects(0, NULL, FALSE, timeoutms, QS_ALLINPUT); - - if (result == WAIT_OBJECT_0) { - while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - /* we processed messages */ - RETVAL_TRUE; - } else { - /* we did not process messages (timed out) */ - RETVAL_FALSE; - } -} -/* }}} */ - -/* {{{ proto bool com_load_typelib(string typelib_name [, int case_insensitive]) - Loads a Typelibrary and registers its constants */ -PHP_FUNCTION(com_load_typelib) -{ - char *name; - int namelen; - ITypeLib *pTL = NULL; - zend_bool cs = TRUE; - int codepage = COMG(code_page); - int cached = 0; - - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &name, &namelen, &cs)) { - return; - } - - RETVAL_FALSE; - - php_com_initialize(TSRMLS_C); - pTL = php_com_load_typelib_via_cache(name, codepage, &cached TSRMLS_CC); - if (pTL) { - if (cached) { - RETVAL_TRUE; - } else if (php_com_import_typelib(pTL, cs ? CONST_CS : 0, codepage TSRMLS_CC) == SUCCESS) { - RETVAL_TRUE; - } - - ITypeLib_Release(pTL); - pTL = NULL; - } -} -/* }}} */ - - - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: noet sw=4 ts=4 fdm=marker - * vim<600: noet sw=4 ts=4 - */ diff --git a/ext/com_dotnet/com_dotnet.c b/ext/com_dotnet/com_dotnet.c deleted file mode 100644 index 8660daf4c5630..0000000000000 --- a/ext/com_dotnet/com_dotnet.c +++ /dev/null @@ -1,319 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if HAVE_MSCOREE_H -# include "php_ini.h" -# include "ext/standard/info.h" -# include "php_com_dotnet.h" -# include "php_com_dotnet_internal.h" -# include "Zend/zend_exceptions.h" -# include - -/* Since there is no official public mscorlib.h header file, and since - * generating your own version from the elusive binary .tlb file takes a lot of - * hacking and results in a 3MB header file (!), we opt for this slightly - * voodoo approach. The following is just enough definition to be able to - * reach the _AppDomain::CreateInstance method that we need to use to be able - * to fire up .Net objects. We used to use IDispatch for this, but it would - * not always work. - * - * The following info was obtained using OleView to export the IDL from - * mscorlib.tlb. Note that OleView is unable to generate C headers for this - * particular tlb... hence this mess. - */ - -const GUID IID_mscorlib_System_AppDomain = { -0x05F696DC, 0x2B29, 0x3663, {0xAD, 0x8B, 0xC4, 0x38, 0x9C, 0xF2, 0xA7, 0x13 }}; - -typedef struct _Imscorlib_System_AppDomain IAppDomain; - -struct _Imscorlib_System_AppDomainVtbl { - BEGIN_INTERFACE - - HRESULT ( STDMETHODCALLTYPE *QueryInterface )( - IAppDomain * This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject); - - ULONG ( STDMETHODCALLTYPE *AddRef )( - IAppDomain * This); - - ULONG ( STDMETHODCALLTYPE *Release )( - IAppDomain * This); - - /* this is padding to get CreateInstance into the correct position */ -#define DUMMY_METHOD(x) HRESULT ( STDMETHODCALLTYPE *dummy_##x )(IAppDomain *This) - - DUMMY_METHOD(GetTypeInfoCount); - DUMMY_METHOD(GetTypeInfo); - DUMMY_METHOD(GetIDsOfNames); - DUMMY_METHOD(Invoke); - DUMMY_METHOD(ToString); - DUMMY_METHOD(Equals); - DUMMY_METHOD(GetHashCode); - DUMMY_METHOD(GetType); - DUMMY_METHOD(InitializeLifetimeService); - DUMMY_METHOD(GetLifetimeService); - DUMMY_METHOD(Evidence); - DUMMY_METHOD(add_DomainUnload); - DUMMY_METHOD(remove_DomainUnload); - DUMMY_METHOD(add_AssemblyLoad); - DUMMY_METHOD(remove_AssemblyLoad); - DUMMY_METHOD(add_ProcessExit); - DUMMY_METHOD(remove_ProcessExit); - DUMMY_METHOD(add_TypeResolve); - DUMMY_METHOD(remove_TypeResolve); - DUMMY_METHOD(add_ResourceResolve); - DUMMY_METHOD(remove_ResourceResolve); - DUMMY_METHOD(add_AssemblyResolve); - DUMMY_METHOD(remove_AssemblyResolve); - DUMMY_METHOD(add_UnhandledException); - DUMMY_METHOD(remove_UnhandledException); - DUMMY_METHOD(DefineDynamicAssembly); - DUMMY_METHOD(DefineDynamicAssembly_2); - DUMMY_METHOD(DefineDynamicAssembly_3); - DUMMY_METHOD(DefineDynamicAssembly_4); - DUMMY_METHOD(DefineDynamicAssembly_5); - DUMMY_METHOD(DefineDynamicAssembly_6); - DUMMY_METHOD(DefineDynamicAssembly_7); - DUMMY_METHOD(DefineDynamicAssembly_8); - DUMMY_METHOD(DefineDynamicAssembly_9); - - HRESULT ( STDMETHODCALLTYPE *CreateInstance )(IAppDomain * This, BSTR AssemblyName, BSTR typeName, IUnknown **pRetVal); - HRESULT ( STDMETHODCALLTYPE *CreateInstanceFrom )(IAppDomain * This, BSTR AssemblyFile, BSTR typeName, IUnknown **pRetVal); - - /* more methods live here */ - - END_INTERFACE -}; - -struct _Imscorlib_System_AppDomain { - struct _Imscorlib_System_AppDomainVtbl *lpVtbl; -}; - - -struct dotnet_runtime_stuff { - ICorRuntimeHost *dotnet_host; - IAppDomain *dotnet_domain; - DISPID create_instance; -}; - -static HRESULT dotnet_init(char **p_where TSRMLS_DC) -{ - HRESULT hr; - struct dotnet_runtime_stuff *stuff; - IUnknown *unk = NULL; - char *where = ""; - - stuff = malloc(sizeof(*stuff)); - memset(stuff, 0, sizeof(*stuff)); - - where = "CoCreateInstance"; - hr = CoCreateInstance(&CLSID_CorRuntimeHost, NULL, CLSCTX_ALL, - &IID_ICorRuntimeHost, (LPVOID*)&stuff->dotnet_host); - - if (FAILED(hr)) - goto out; - - /* fire up the host and get the domain object */ - where = "ICorRuntimeHost_Start\n"; - hr = ICorRuntimeHost_Start(stuff->dotnet_host); - if (FAILED(hr)) - goto out; - - where = "ICorRuntimeHost_GetDefaultDomain"; - hr = ICorRuntimeHost_GetDefaultDomain(stuff->dotnet_host, &unk); - if (FAILED(hr)) - goto out; - - where = "QI: System._AppDomain"; - hr = IUnknown_QueryInterface(unk, &IID_mscorlib_System_AppDomain, (LPVOID*)&stuff->dotnet_domain); - if (FAILED(hr)) - goto out; - - COMG(dotnet_runtime_stuff) = stuff; - -out: - if (unk) { - IUnknown_Release(unk); - } - if (COMG(dotnet_runtime_stuff) == NULL) { - /* clean up */ - if (stuff->dotnet_domain) { - IUnknown_Release(stuff->dotnet_domain); - } - if (stuff->dotnet_host) { - ICorRuntimeHost_Stop(stuff->dotnet_host); - ICorRuntimeHost_Release(stuff->dotnet_host); - } - free(stuff); - - *p_where = where; - - return hr; - } - - return S_OK; -} - -/* {{{ com_dotnet_create_instance - ctor for DOTNET class */ -PHP_FUNCTION(com_dotnet_create_instance) -{ - zval *object = getThis(); - php_com_dotnet_object *obj; - char *assembly_name, *datatype_name; - int assembly_name_len, datatype_name_len; - struct dotnet_runtime_stuff *stuff; - OLECHAR *oleassembly, *oletype; - BSTR oleassembly_sys, oletype_sys; - HRESULT hr; - int ret = FAILURE; - char *where = ""; - IUnknown *unk = NULL; - - php_com_initialize(TSRMLS_C); - if (COMG(dotnet_runtime_stuff) == NULL) { - hr = dotnet_init(&where TSRMLS_CC); - if (FAILED(hr)) { - char buf[1024]; - char *err = php_win_err(hr); - snprintf(buf, sizeof(buf), "Failed to init .Net runtime [%s] %s", where, err); - if (err) - LocalFree(err); - php_com_throw_exception(hr, buf TSRMLS_CC); - ZVAL_NULL(object); - return; - } - } - - stuff = (struct dotnet_runtime_stuff*)COMG(dotnet_runtime_stuff); - - obj = CDNO_FETCH(object); - - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", - &assembly_name, &assembly_name_len, - &datatype_name, &datatype_name_len, - &obj->code_page)) { - php_com_throw_exception(E_INVALIDARG, "Could not create .Net object - invalid arguments!" TSRMLS_CC); - ZVAL_NULL(object); - return; - } - - oletype = php_com_string_to_olestring(datatype_name, datatype_name_len, obj->code_page TSRMLS_CC); - oleassembly = php_com_string_to_olestring(assembly_name, assembly_name_len, obj->code_page TSRMLS_CC); - oletype_sys = SysAllocString(oletype); - oleassembly_sys = SysAllocString(oleassembly); - where = "CreateInstance"; - hr = stuff->dotnet_domain->lpVtbl->CreateInstance(stuff->dotnet_domain, oleassembly_sys, oletype_sys, &unk); - efree(oletype); - efree(oleassembly); - SysFreeString(oletype_sys); - SysFreeString(oleassembly_sys); - - if (SUCCEEDED(hr)) { - VARIANT unwrapped; - IObjectHandle *handle = NULL; - - where = "QI: IObjectHandle"; - hr = IUnknown_QueryInterface(unk, &IID_IObjectHandle, &handle); - - if (SUCCEEDED(hr)) { - where = "IObjectHandle_Unwrap"; - hr = IObjectHandle_Unwrap(handle, &unwrapped); - if (SUCCEEDED(hr)) { - - if (V_VT(&unwrapped) == VT_UNKNOWN) { - where = "Unwrapped, QI for IDispatch"; - hr = IUnknown_QueryInterface(V_UNKNOWN(&unwrapped), &IID_IDispatch, &V_DISPATCH(&obj->v)); - - if (SUCCEEDED(hr)) { - V_VT(&obj->v) = VT_DISPATCH; - - /* get its type-info */ - IDispatch_GetTypeInfo(V_DISPATCH(&obj->v), 0, LANG_NEUTRAL, &obj->typeinfo); - ret = SUCCESS; - } - } else if (V_VT(&unwrapped) == VT_DISPATCH) { - /* unwrapped is now the dispatch pointer we want */ - V_DISPATCH(&obj->v) = V_DISPATCH(&unwrapped); - V_VT(&obj->v) = VT_DISPATCH; - - /* get its type-info */ - IDispatch_GetTypeInfo(V_DISPATCH(&obj->v), 0, LANG_NEUTRAL, &obj->typeinfo); - - ret = SUCCESS; - } else { - /* shouldn't happen, but let's be ready for it */ - VariantClear(&unwrapped); - hr = E_INVALIDARG; - } - } - IObjectHandle_Release(handle); - } - IUnknown_Release(unk); - } - - if (ret == FAILURE) { - char buf[1024]; - char *err = php_win_err(hr); - snprintf(buf, sizeof(buf), "Failed to instantiate .Net object [%s] [0x%08x] %s", where, hr, err); - if (err && err[0]) { - LocalFree(err); - } - php_com_throw_exception(hr, buf TSRMLS_CC); - ZVAL_NULL(object); - return; - } -} -/* }}} */ - -void php_com_dotnet_mshutdown(TSRMLS_D) -{ - struct dotnet_runtime_stuff *stuff = COMG(dotnet_runtime_stuff); - - if (stuff->dotnet_domain) { - IDispatch_Release(stuff->dotnet_domain); - } - if (stuff->dotnet_host) { - ICorRuntimeHost_Stop(stuff->dotnet_host); - ICorRuntimeHost_Release(stuff->dotnet_host); - stuff->dotnet_host = NULL; - } - free(stuff); - COMG(dotnet_runtime_stuff) = NULL; -} - -void php_com_dotnet_rshutdown(TSRMLS_D) -{ - struct dotnet_runtime_stuff *stuff = COMG(dotnet_runtime_stuff); - - if (stuff->dotnet_domain) { - IDispatch_Release(stuff->dotnet_domain); - stuff->dotnet_domain = NULL; - } -} - -#endif /* HAVE_MSCOREE_H */ diff --git a/ext/com_dotnet/com_extension.c b/ext/com_dotnet/com_extension.c deleted file mode 100644 index 5150013105e38..0000000000000 --- a/ext/com_dotnet/com_extension.c +++ /dev/null @@ -1,365 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_ini.h" -#include "ext/standard/info.h" -#include "php_com_dotnet.h" -#include "php_com_dotnet_internal.h" -#include "Zend/zend_exceptions.h" - -ZEND_DECLARE_MODULE_GLOBALS(com_dotnet) -static PHP_GINIT_FUNCTION(com_dotnet); - -TsHashTable php_com_typelibraries; - -zend_class_entry - *php_com_variant_class_entry, - *php_com_exception_class_entry, - *php_com_saproxy_class_entry; - -zend_function_entry com_dotnet_functions[] = { - PHP_FE(variant_set, NULL) - PHP_FE(variant_add, NULL) - PHP_FE(variant_cat, NULL) - PHP_FE(variant_sub, NULL) - PHP_FE(variant_mul, NULL) - PHP_FE(variant_and, NULL) - PHP_FE(variant_div, NULL) - PHP_FE(variant_eqv, NULL) - PHP_FE(variant_idiv, NULL) - PHP_FE(variant_imp, NULL) - PHP_FE(variant_mod, NULL) - PHP_FE(variant_or, NULL) - PHP_FE(variant_pow, NULL) - PHP_FE(variant_xor, NULL) - PHP_FE(variant_abs, NULL) - PHP_FE(variant_fix, NULL) - PHP_FE(variant_int, NULL) - PHP_FE(variant_neg, NULL) - PHP_FE(variant_not, NULL) - PHP_FE(variant_round, NULL) - PHP_FE(variant_cmp, NULL) - PHP_FE(variant_date_to_timestamp, NULL) - PHP_FE(variant_date_from_timestamp, NULL) - PHP_FE(variant_get_type, NULL) - PHP_FE(variant_set_type, NULL) - PHP_FE(variant_cast, NULL) - /* com_com.c */ - PHP_FE(com_create_guid, NULL) - PHP_FE(com_event_sink, NULL) - PHP_FE(com_print_typeinfo, NULL) - PHP_FE(com_message_pump, NULL) - PHP_FE(com_load_typelib, NULL) - PHP_FE(com_get_active_object, NULL) - { NULL, NULL, NULL } -}; - -/* {{{ com_dotnet_module_entry - */ -zend_module_entry com_dotnet_module_entry = { - STANDARD_MODULE_HEADER, - "com_dotnet", - com_dotnet_functions, - PHP_MINIT(com_dotnet), - PHP_MSHUTDOWN(com_dotnet), - PHP_RINIT(com_dotnet), - PHP_RSHUTDOWN(com_dotnet), - PHP_MINFO(com_dotnet), - "0.1", - PHP_MODULE_GLOBALS(com_dotnet), - PHP_GINIT(com_dotnet), - NULL, - NULL, - STANDARD_MODULE_PROPERTIES_EX -}; -/* }}} */ - -#ifdef COMPILE_DL_COM_DOTNET -ZEND_GET_MODULE(com_dotnet) -#endif - -/* {{{ PHP_INI - */ - -/* com.typelib_file is the path to a file containing a - * list of typelibraries to register *persistently*. - * lines starting with ; are comments - * append #cis to end of typelib name to cause its constants - * to be loaded case insensitively */ -static PHP_INI_MH(OnTypeLibFileUpdate) -{ - FILE *typelib_file; - char *typelib_name_buffer; - char *strtok_buf = NULL; - int cached; - - if (!new_value || !new_value[0] || (typelib_file = VCWD_FOPEN(new_value, "r"))==NULL) { - return FAILURE; - } - - typelib_name_buffer = (char *) emalloc(sizeof(char)*1024); - - while (fgets(typelib_name_buffer, 1024, typelib_file)) { - ITypeLib *pTL; - char *typelib_name; - char *modifier, *ptr; - int mode = CONST_CS | CONST_PERSISTENT; /* CONST_PERSISTENT is ok here */ - - if (typelib_name_buffer[0]==';') { - continue; - } - typelib_name = php_strtok_r(typelib_name_buffer, "\r\n", &strtok_buf); /* get rid of newlines */ - if (typelib_name == NULL) { - continue; - } - typelib_name = php_strtok_r(typelib_name, "#", &strtok_buf); - modifier = php_strtok_r(NULL, "#", &strtok_buf); - if (modifier != NULL) { - if (!strcmp(modifier, "cis") || !strcmp(modifier, "case_insensitive")) { - mode &= ~CONST_CS; - } - } - - /* Remove leading/training white spaces on search_string */ - while (isspace(*typelib_name)) {/* Ends on '\0' in worst case */ - typelib_name ++; - } - ptr = typelib_name + strlen(typelib_name) - 1; - while ((ptr != typelib_name) && isspace(*ptr)) { - *ptr = '\0'; - ptr--; - } - - if ((pTL = php_com_load_typelib_via_cache(typelib_name, COMG(code_page), &cached TSRMLS_CC)) != NULL) { - if (!cached) { - php_com_import_typelib(pTL, mode, COMG(code_page) TSRMLS_CC); - } - ITypeLib_Release(pTL); - } - } - - efree(typelib_name_buffer); - fclose(typelib_file); - - return SUCCESS; -} - -PHP_INI_BEGIN() - STD_PHP_INI_ENTRY("com.allow_dcom", "0", PHP_INI_SYSTEM, OnUpdateBool, allow_dcom, zend_com_dotnet_globals, com_dotnet_globals) - STD_PHP_INI_ENTRY("com.autoregister_verbose", "0", PHP_INI_ALL, OnUpdateBool, autoreg_verbose, zend_com_dotnet_globals, com_dotnet_globals) - STD_PHP_INI_ENTRY("com.autoregister_typelib", "0", PHP_INI_ALL, OnUpdateBool, autoreg_on, zend_com_dotnet_globals, com_dotnet_globals) - STD_PHP_INI_ENTRY("com.autoregister_casesensitive", "1", PHP_INI_ALL, OnUpdateBool, autoreg_case_sensitive, zend_com_dotnet_globals, com_dotnet_globals) - STD_PHP_INI_ENTRY("com.code_page", "", PHP_INI_ALL, OnUpdateLong, code_page, zend_com_dotnet_globals, com_dotnet_globals) - PHP_INI_ENTRY("com.typelib_file", "", PHP_INI_SYSTEM, OnTypeLibFileUpdate) -PHP_INI_END() -/* }}} */ - -/* {{{ PHP_GINIT_FUNCTION - */ -static PHP_GINIT_FUNCTION(com_dotnet) -{ - memset(com_dotnet_globals, 0, sizeof(*com_dotnet_globals)); - com_dotnet_globals->code_page = CP_ACP; -} -/* }}} */ - -/* {{{ PHP_MINIT_FUNCTION - */ -PHP_MINIT_FUNCTION(com_dotnet) -{ - zend_class_entry ce, *tmp; - - php_com_wrapper_minit(INIT_FUNC_ARGS_PASSTHRU); - php_com_persist_minit(INIT_FUNC_ARGS_PASSTHRU); - - INIT_CLASS_ENTRY(ce, "com_exception", NULL); - php_com_exception_class_entry = zend_register_internal_class_ex(&ce, zend_exception_get_default(TSRMLS_C), NULL TSRMLS_CC); - php_com_exception_class_entry->ce_flags |= ZEND_ACC_FINAL; -/* php_com_exception_class_entry->constructor->common.fn_flags |= ZEND_ACC_PROTECTED; */ - - INIT_CLASS_ENTRY(ce, "com_safearray_proxy", NULL); - php_com_saproxy_class_entry = zend_register_internal_class(&ce TSRMLS_CC); - php_com_saproxy_class_entry->ce_flags |= ZEND_ACC_FINAL; -/* php_com_saproxy_class_entry->constructor->common.fn_flags |= ZEND_ACC_PROTECTED; */ - php_com_saproxy_class_entry->get_iterator = php_com_saproxy_iter_get; - - INIT_CLASS_ENTRY(ce, "variant", NULL); - ce.create_object = php_com_object_new; - php_com_variant_class_entry = zend_register_internal_class(&ce TSRMLS_CC); - php_com_variant_class_entry->get_iterator = php_com_iter_get; - - INIT_CLASS_ENTRY(ce, "com", NULL); - ce.create_object = php_com_object_new; - tmp = zend_register_internal_class_ex(&ce, php_com_variant_class_entry, "variant" TSRMLS_CC); - tmp->get_iterator = php_com_iter_get; - - zend_ts_hash_init(&php_com_typelibraries, 0, NULL, php_com_typelibrary_dtor, 1); - -#if HAVE_MSCOREE_H - INIT_CLASS_ENTRY(ce, "dotnet", NULL); - ce.create_object = php_com_object_new; - tmp = zend_register_internal_class_ex(&ce, php_com_variant_class_entry, "variant" TSRMLS_CC); - tmp->get_iterator = php_com_iter_get; -#endif - - REGISTER_INI_ENTRIES(); - -#define COM_CONST(x) REGISTER_LONG_CONSTANT(#x, x, CONST_CS|CONST_PERSISTENT) - - COM_CONST(CLSCTX_INPROC_SERVER); - COM_CONST(CLSCTX_INPROC_HANDLER); - COM_CONST(CLSCTX_LOCAL_SERVER); - COM_CONST(CLSCTX_REMOTE_SERVER); - COM_CONST(CLSCTX_SERVER); - COM_CONST(CLSCTX_ALL); - -#if 0 - COM_CONST(DISPATCH_METHOD); - COM_CONST(DISPATCH_PROPERTYGET); - COM_CONST(DISPATCH_PROPERTYPUT); -#endif - - COM_CONST(VT_NULL); - COM_CONST(VT_EMPTY); - COM_CONST(VT_UI1); - COM_CONST(VT_I1); - COM_CONST(VT_UI2); - COM_CONST(VT_I2); - COM_CONST(VT_UI4); - COM_CONST(VT_I4); - COM_CONST(VT_R4); - COM_CONST(VT_R8); - COM_CONST(VT_BOOL); - COM_CONST(VT_ERROR); - COM_CONST(VT_CY); - COM_CONST(VT_DATE); - COM_CONST(VT_BSTR); - COM_CONST(VT_DECIMAL); - COM_CONST(VT_UNKNOWN); - COM_CONST(VT_DISPATCH); - COM_CONST(VT_VARIANT); - COM_CONST(VT_INT); - COM_CONST(VT_UINT); - COM_CONST(VT_ARRAY); - COM_CONST(VT_BYREF); - - COM_CONST(CP_ACP); - COM_CONST(CP_MACCP); - COM_CONST(CP_OEMCP); - COM_CONST(CP_UTF7); - COM_CONST(CP_UTF8); - COM_CONST(CP_SYMBOL); - COM_CONST(CP_THREAD_ACP); - - COM_CONST(VARCMP_LT); - COM_CONST(VARCMP_EQ); - COM_CONST(VARCMP_GT); - COM_CONST(VARCMP_NULL); - - COM_CONST(NORM_IGNORECASE); - COM_CONST(NORM_IGNORENONSPACE); - COM_CONST(NORM_IGNORESYMBOLS); - COM_CONST(NORM_IGNOREWIDTH); - COM_CONST(NORM_IGNOREKANATYPE); -#ifdef NORM_IGNOREKASHIDA - COM_CONST(NORM_IGNOREKASHIDA); -#endif - COM_CONST(DISP_E_DIVBYZERO); - COM_CONST(DISP_E_OVERFLOW); - COM_CONST(DISP_E_BADINDEX); - COM_CONST(MK_E_UNAVAILABLE); - - return SUCCESS; -} -/* }}} */ - -/* {{{ PHP_MSHUTDOWN_FUNCTION - */ -PHP_MSHUTDOWN_FUNCTION(com_dotnet) -{ - UNREGISTER_INI_ENTRIES(); -#if HAVE_MSCOREE_H - if (COMG(dotnet_runtime_stuff)) { - php_com_dotnet_mshutdown(TSRMLS_C); - } -#endif - - zend_ts_hash_destroy(&php_com_typelibraries); - return SUCCESS; -} -/* }}} */ - -/* {{{ PHP_RINIT_FUNCTION - */ -PHP_RINIT_FUNCTION(com_dotnet) -{ - COMG(rshutdown_started) = 0; - return SUCCESS; -} -/* }}} */ - -/* {{{ PHP_RSHUTDOWN_FUNCTION - */ -PHP_RSHUTDOWN_FUNCTION(com_dotnet) -{ -#if HAVE_MSCOREE_H - if (COMG(dotnet_runtime_stuff)) { - php_com_dotnet_rshutdown(TSRMLS_C); - } -#endif - COMG(rshutdown_started) = 1; - return SUCCESS; -} -/* }}} */ - -/* {{{ PHP_MINFO_FUNCTION - */ -PHP_MINFO_FUNCTION(com_dotnet) -{ - php_info_print_table_start(); - - php_info_print_table_header(2, "COM support", "enabled"); - php_info_print_table_header(2, "DCOM support", COMG(allow_dcom) ? "enabled" : "disabled"); - -#if HAVE_MSCOREE_H - php_info_print_table_header(2, ".Net support", "enabled"); -#else - php_info_print_table_header(2, ".Net support", "not present in this build"); -#endif - - php_info_print_table_end(); - - DISPLAY_INI_ENTRIES(); -} -/* }}} */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: noet sw=4 ts=4 fdm=marker - * vim<600: noet sw=4 ts=4 - */ diff --git a/ext/com_dotnet/com_handlers.c b/ext/com_dotnet/com_handlers.c deleted file mode 100644 index 53ce402202bcf..0000000000000 --- a/ext/com_dotnet/com_handlers.c +++ /dev/null @@ -1,683 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_ini.h" -#include "ext/standard/info.h" -#include "php_com_dotnet.h" -#include "php_com_dotnet_internal.h" -#include "Zend/zend_exceptions.h" - -static zval *com_property_read(zval *object, zval *member, int type TSRMLS_DC) -{ - zval *return_value; - php_com_dotnet_object *obj; - VARIANT v; - HRESULT res; - - MAKE_STD_ZVAL(return_value); - ZVAL_NULL(return_value); - return_value->refcount = 0; - return_value->is_ref = 0; - - obj = CDNO_FETCH(object); - - if (V_VT(&obj->v) == VT_DISPATCH) { - VariantInit(&v); - - convert_to_string_ex(&member); - - res = php_com_do_invoke(obj, Z_STRVAL_P(member), Z_STRLEN_P(member), - DISPATCH_METHOD|DISPATCH_PROPERTYGET, &v, 0, NULL, 1 TSRMLS_CC); - - if (res == SUCCESS) { - php_com_zval_from_variant(return_value, &v, obj->code_page TSRMLS_CC); - VariantClear(&v); - } else if (res == DISP_E_BADPARAMCOUNT) { - php_com_saproxy_create(object, return_value, member TSRMLS_CC); - } - } else { - php_com_throw_exception(E_INVALIDARG, "this variant has no properties" TSRMLS_CC); - } - - return return_value; -} - -static void com_property_write(zval *object, zval *member, zval *value TSRMLS_DC) -{ - php_com_dotnet_object *obj; - VARIANT v; - - obj = CDNO_FETCH(object); - - if (V_VT(&obj->v) == VT_DISPATCH) { - VariantInit(&v); - - convert_to_string_ex(&member); - if (SUCCESS == php_com_do_invoke(obj, Z_STRVAL_P(member), Z_STRLEN_P(member), - DISPATCH_PROPERTYPUT|DISPATCH_PROPERTYPUTREF, &v, 1, &value, 0 TSRMLS_CC)) { - VariantClear(&v); - } - } else { - php_com_throw_exception(E_INVALIDARG, "this variant has no properties" TSRMLS_CC); - } -} - -static zval *com_read_dimension(zval *object, zval *offset, int type TSRMLS_DC) -{ - zval *return_value; - php_com_dotnet_object *obj; - VARIANT v; - - MAKE_STD_ZVAL(return_value); - ZVAL_NULL(return_value); - return_value->refcount = 0; - return_value->is_ref = 0; - - obj = CDNO_FETCH(object); - - if (V_VT(&obj->v) == VT_DISPATCH) { - VariantInit(&v); - - if (SUCCESS == php_com_do_invoke_by_id(obj, DISPID_VALUE, - DISPATCH_METHOD|DISPATCH_PROPERTYGET, &v, 1, &offset, 0, 0 TSRMLS_CC)) { - php_com_zval_from_variant(return_value, &v, obj->code_page TSRMLS_CC); - VariantClear(&v); - } - } else if (V_ISARRAY(&obj->v)) { - convert_to_long(offset); - - if (SafeArrayGetDim(V_ARRAY(&obj->v)) == 1) { - if (php_com_safearray_get_elem(&obj->v, &v, Z_LVAL_P(offset) TSRMLS_CC)) { - php_com_wrap_variant(return_value, &v, obj->code_page TSRMLS_CC); - VariantClear(&v); - } - } else { - php_com_saproxy_create(object, return_value, offset TSRMLS_CC); - } - - } else { - php_com_throw_exception(E_INVALIDARG, "this variant is not an array type" TSRMLS_CC); - } - - return return_value; -} - -static void com_write_dimension(zval *object, zval *offset, zval *value TSRMLS_DC) -{ - php_com_dotnet_object *obj; - zval *args[2]; - VARIANT v; - HRESULT res; - - obj = CDNO_FETCH(object); - - if (V_VT(&obj->v) == VT_DISPATCH) { - args[0] = offset; - args[1] = value; - - VariantInit(&v); - - if (SUCCESS == php_com_do_invoke_by_id(obj, DISPID_VALUE, - DISPATCH_METHOD|DISPATCH_PROPERTYPUT, &v, 2, args, 0, 0 TSRMLS_CC)) { - VariantClear(&v); - } - } else if (V_ISARRAY(&obj->v)) { - LONG indices = 0; - VARTYPE vt; - - if (SafeArrayGetDim(V_ARRAY(&obj->v)) == 1) { - if (FAILED(SafeArrayGetVartype(V_ARRAY(&obj->v), &vt)) || vt == VT_EMPTY) { - vt = V_VT(&obj->v) & ~VT_ARRAY; - } - - convert_to_long(offset); - indices = Z_LVAL_P(offset); - - VariantInit(&v); - php_com_variant_from_zval(&v, value, obj->code_page TSRMLS_CC); - - if (V_VT(&v) != vt) { - VariantChangeType(&v, &v, 0, vt); - } - - if (vt == VT_VARIANT) { - res = SafeArrayPutElement(V_ARRAY(&obj->v), &indices, &v); - } else { - res = SafeArrayPutElement(V_ARRAY(&obj->v), &indices, &v.lVal); - } - - VariantClear(&v); - - if (FAILED(res)) { - php_com_throw_exception(res, NULL TSRMLS_CC); - } - - } else { - php_com_throw_exception(DISP_E_BADINDEX, "this variant has multiple dimensions; you can't set a new value without specifying *all* dimensions" TSRMLS_CC); - } - - } else { - php_com_throw_exception(E_INVALIDARG, "this variant is not an array type" TSRMLS_CC); - } -} - -#if 0 -static void com_object_set(zval **property, zval *value TSRMLS_DC) -{ - /* Not yet implemented in the engine */ -} - -static zval *com_object_get(zval *property TSRMLS_DC) -{ - /* Not yet implemented in the engine */ - return NULL; -} -#endif - -static int com_property_exists(zval *object, zval *member, int check_empty TSRMLS_DC) -{ - DISPID dispid; - php_com_dotnet_object *obj; - - obj = CDNO_FETCH(object); - - if (V_VT(&obj->v) == VT_DISPATCH) { - convert_to_string_ex(&member); - if (SUCCEEDED(php_com_get_id_of_name(obj, Z_STRVAL_P(member), Z_STRLEN_P(member), &dispid TSRMLS_CC))) { - /* TODO: distinguish between property and method! */ - return 1; - } - } else { - /* TODO: check for safearray */ - } - - return 0; -} - -static int com_dimension_exists(zval *object, zval *member, int check_empty TSRMLS_DC) -{ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Operation not yet supported on a COM object"); - return 0; -} - -static void com_property_delete(zval *object, zval *member TSRMLS_DC) -{ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot delete properties from a COM object"); -} - -static void com_dimension_delete(zval *object, zval *offset TSRMLS_DC) -{ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot delete properties from a COM object"); -} - -static HashTable *com_properties_get(zval *object TSRMLS_DC) -{ - /* TODO: use type-info to get all the names and values ? - * DANGER: if we do that, there is a strong possibility for - * infinite recursion when the hash is displayed via var_dump(). - * Perhaps it is best to leave it un-implemented. - */ - return NULL; -} - -static void function_dtor(void *pDest) -{ - zend_internal_function *f = (zend_internal_function*)pDest; - - efree(f->function_name.s); - if (f->arg_info) { - efree(f->arg_info); - } -} - -static PHP_FUNCTION(com_method_handler) -{ - Z_OBJ_HANDLER_P(getThis(), call_method)( - ((zend_internal_function*)EG(function_state_ptr)->function)->function_name, - INTERNAL_FUNCTION_PARAM_PASSTHRU); -} - -static union _zend_function *com_method_get(zval **object_ptr, char *name, int len TSRMLS_DC) -{ - zend_internal_function f, *fptr = NULL; - php_com_dotnet_object *obj; - union _zend_function *func; - DISPID dummy; - zval *object = *object_ptr; - - obj = CDNO_FETCH(object); - - if (V_VT(&obj->v) != VT_DISPATCH) { - return NULL; - } - - if (FAILED(php_com_get_id_of_name(obj, name, len, &dummy TSRMLS_CC))) { - return NULL; - } - - /* check cache */ - if (obj->method_cache == NULL || FAILURE == zend_hash_find(obj->method_cache, name, len, (void**)&fptr)) { - f.type = ZEND_OVERLOADED_FUNCTION; - f.num_args = 0; - f.arg_info = NULL; - f.scope = obj->ce; - f.fn_flags = 0; - f.function_name.s = estrndup(name, len); - f.handler = PHP_FN(com_method_handler); - - fptr = &f; - - if (obj->typeinfo) { - /* look for byref params */ - ITypeComp *comp; - ITypeInfo *TI = NULL; - DESCKIND kind; - BINDPTR bindptr; - OLECHAR *olename; - ULONG lhash; - int i; - - if (SUCCEEDED(ITypeInfo_GetTypeComp(obj->typeinfo, &comp))) { - olename = php_com_string_to_olestring(name, len, obj->code_page TSRMLS_CC); - lhash = LHashValOfNameSys(SYS_WIN32, LOCALE_SYSTEM_DEFAULT, olename); - - if (SUCCEEDED(ITypeComp_Bind(comp, olename, lhash, INVOKE_FUNC, &TI, &kind, &bindptr))) { - switch (kind) { - case DESCKIND_FUNCDESC: - f.arg_info = ecalloc(bindptr.lpfuncdesc->cParams, sizeof(zend_arg_info)); - - for (i = 0; i < bindptr.lpfuncdesc->cParams; i++) { - f.arg_info[i].allow_null = 1; - if (bindptr.lpfuncdesc->lprgelemdescParam[i].paramdesc.wParamFlags & PARAMFLAG_FOUT) { - f.arg_info[i].pass_by_reference = 1; - } - } - - f.num_args = bindptr.lpfuncdesc->cParams; - - ITypeInfo_ReleaseFuncDesc(TI, bindptr.lpfuncdesc); - break; - - /* these should not happen, but *might* happen if the user - * screws up; lets avoid a leak in that case */ - case DESCKIND_VARDESC: - ITypeInfo_ReleaseVarDesc(TI, bindptr.lpvardesc); - break; - case DESCKIND_TYPECOMP: - ITypeComp_Release(bindptr.lptcomp); - break; - - case DESCKIND_NONE: - break; - } - if (TI) { - ITypeInfo_Release(TI); - } - } - ITypeComp_Release(comp); - efree(olename); - } - } - - if (fptr) { - /* save this method in the cache */ - if (!obj->method_cache) { - ALLOC_HASHTABLE(obj->method_cache); - zend_hash_init(obj->method_cache, 2, NULL, function_dtor, 0); - } - - zend_hash_update(obj->method_cache, name, len, &f, sizeof(f), (void**)&fptr); - } - } - - if (fptr) { - /* duplicate this into a new chunk of emalloc'd memory, - * since the engine will efree it */ - func = emalloc(sizeof(*fptr)); - memcpy(func, fptr, sizeof(*fptr)); - - return func; - } - - return NULL; -} - -static int com_call_method(char *method, INTERNAL_FUNCTION_PARAMETERS) -{ - zval ***args = NULL; - php_com_dotnet_object *obj; - int nargs; - VARIANT v; - int ret = FAILURE; - - obj = CDNO_FETCH(getThis()); - - if (V_VT(&obj->v) != VT_DISPATCH) { - return FAILURE; - } - - nargs = ZEND_NUM_ARGS(); - - if (nargs) { - args = (zval ***)safe_emalloc(sizeof(zval *), nargs, 0); - zend_get_parameters_array_ex(nargs, args); - } - - VariantInit(&v); - - if (SUCCESS == php_com_do_invoke_byref(obj, method, -1, DISPATCH_METHOD|DISPATCH_PROPERTYGET, &v, nargs, args TSRMLS_CC)) { - php_com_zval_from_variant(return_value, &v, obj->code_page TSRMLS_CC); - ret = SUCCESS; - VariantClear(&v); - } - - if (args) { - efree(args); - } - - return ret; -} - -static union _zend_function *com_constructor_get(zval *object TSRMLS_DC) -{ - php_com_dotnet_object *obj; - static zend_internal_function c, d, v; - - obj = CDNO_FETCH(object); - -#define POPULATE_CTOR(f, fn) \ - f.type = ZEND_INTERNAL_FUNCTION; \ - f.function_name = obj->ce->name; \ - f.scope = obj->ce; \ - f.arg_info = NULL; \ - f.num_args = 0; \ - f.fn_flags = 0; \ - f.handler = ZEND_FN(fn); \ - return (union _zend_function*)&f; - - switch (obj->ce->name.s[0]) { -#if HAVE_MSCOREE_H - case 'd': - POPULATE_CTOR(d, com_dotnet_create_instance); -#endif - - case 'c': - POPULATE_CTOR(c, com_create_instance); - - case 'v': - POPULATE_CTOR(v, com_variant_create_instance); - - default: - return NULL; - } -} - -static zend_class_entry *com_class_entry_get(zval *object TSRMLS_DC) -{ - php_com_dotnet_object *obj; - obj = CDNO_FETCH(object); - - return obj->ce; -} - -static int com_class_name_get(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC) -{ - php_com_dotnet_object *obj; - obj = CDNO_FETCH(object); - - *class_name = estrndup(obj->ce->name.s, obj->ce->name_length); - *class_name_len = obj->ce->name_length; - - return 0; -} - -/* This compares two variants for equality */ -static int com_objects_compare(zval *object1, zval *object2 TSRMLS_DC) -{ - php_com_dotnet_object *obja, *objb; - int ret; - /* strange header bug problem here... the headers define the proto without the - * flags parameter. However, the MSDN docs state that there is a flags parameter, - * and my VC6 won't link unless the code uses the version with 4 parameters. - * So, we have this declaration here to fix it */ - STDAPI VarCmp(LPVARIANT pvarLeft, LPVARIANT pvarRight, LCID lcid, DWORD flags); - - obja = CDNO_FETCH(object1); - objb = CDNO_FETCH(object2); - - switch (VarCmp(&obja->v, &objb->v, LOCALE_SYSTEM_DEFAULT, 0)) { - case VARCMP_LT: - ret = -1; - break; - case VARCMP_GT: - ret = 1; - break; - case VARCMP_EQ: - ret = 0; - break; - default: - /* either or both operands are NULL... - * not 100% sure how to handle this */ - ret = -2; - } - - return ret; -} - -static int com_object_cast(zval *readobj, zval *writeobj, int type, void *extra TSRMLS_DC) -{ - php_com_dotnet_object *obj; - VARIANT v; - VARTYPE vt = VT_EMPTY; - zval free_obj; - HRESULT res = S_OK; - - obj = CDNO_FETCH(readobj); - ZVAL_NULL(writeobj); - VariantInit(&v); - - if (V_VT(&obj->v) == VT_DISPATCH) { - if (SUCCESS != php_com_do_invoke_by_id(obj, DISPID_VALUE, - DISPATCH_METHOD|DISPATCH_PROPERTYGET, &v, 0, NULL, 1, 0 TSRMLS_CC)) { - VariantCopy(&v, &obj->v); - } - } else { - VariantCopy(&v, &obj->v); - } - - switch(type) { - case IS_LONG: - vt = VT_INT; - break; - case IS_DOUBLE: - vt = VT_R8; - break; - case IS_BOOL: - vt = VT_BOOL; - break; - case IS_STRING: - case IS_UNICODE: - vt = VT_BSTR; - break; - default: - ; - } - - if (vt != VT_EMPTY && vt != V_VT(&v)) { - res = VariantChangeType(&v, &v, 0, vt); - } - - if (SUCCEEDED(res)) { - /* FIXME use 'extra' here for IS_STRING/IS_UNICODE */ - php_com_zval_from_variant(writeobj, &v, obj->code_page TSRMLS_CC); - } - - VariantClear(&v); - - if (SUCCEEDED(res)) { - return SUCCESS; - } - - return zend_std_cast_object_tostring(readobj, writeobj, type, extra TSRMLS_CC); -} - -static int com_object_count(zval *object, long *count TSRMLS_DC) -{ - php_com_dotnet_object *obj; - LONG ubound = 0, lbound = 0; - - obj = CDNO_FETCH(object); - - if (!V_ISARRAY(&obj->v)) { - return FAILURE; - } - - SafeArrayGetLBound(V_ARRAY(&obj->v), 1, &lbound); - SafeArrayGetUBound(V_ARRAY(&obj->v), 1, &ubound); - - *count = ubound - lbound + 1; - - return SUCCESS; -} - -zend_object_handlers php_com_object_handlers = { - ZEND_OBJECTS_STORE_HANDLERS, - com_property_read, - com_property_write, - com_read_dimension, - com_write_dimension, - NULL, - NULL, //com_object_get, - NULL, //com_object_set, - com_property_exists, - com_property_delete, - com_dimension_exists, - com_dimension_delete, - com_properties_get, - com_method_get, - com_call_method, - com_constructor_get, - com_class_entry_get, - com_class_name_get, - com_objects_compare, - com_object_cast, - com_object_count -}; - -void php_com_object_enable_event_sink(php_com_dotnet_object *obj, int enable TSRMLS_DC) -{ - if (obj->sink_dispatch) { - IConnectionPointContainer *cont; - IConnectionPoint *point; - - if (SUCCEEDED(IDispatch_QueryInterface(V_DISPATCH(&obj->v), - &IID_IConnectionPointContainer, (void**)&cont))) { - - if (SUCCEEDED(IConnectionPointContainer_FindConnectionPoint(cont, - &obj->sink_id, &point))) { - - if (enable) { - IConnectionPoint_Advise(point, (IUnknown*)obj->sink_dispatch, &obj->sink_cookie); - } else { - IConnectionPoint_Unadvise(point, obj->sink_cookie); - } - IConnectionPoint_Release(point); - } - IConnectionPointContainer_Release(cont); - } - } -} - -void php_com_object_free_storage(void *object TSRMLS_DC) -{ - php_com_dotnet_object *obj = (php_com_dotnet_object*)object; - - if (obj->typeinfo) { - ITypeInfo_Release(obj->typeinfo); - obj->typeinfo = NULL; - } - - if (obj->sink_dispatch) { - php_com_object_enable_event_sink(obj, FALSE TSRMLS_CC); - IDispatch_Release(obj->sink_dispatch); - obj->sink_dispatch = NULL; - } - - VariantClear(&obj->v); - - if (obj->method_cache) { - zend_hash_destroy(obj->method_cache); - FREE_HASHTABLE(obj->method_cache); - } - if (obj->id_of_name_cache) { - zend_hash_destroy(obj->id_of_name_cache); - FREE_HASHTABLE(obj->id_of_name_cache); - } - efree(obj); -} - -void php_com_object_clone(void *object, void **clone_ptr TSRMLS_DC) -{ - php_com_dotnet_object *cloneobj, *origobject; - - origobject = (php_com_dotnet_object*)object; - cloneobj = (php_com_dotnet_object*)emalloc(sizeof(php_com_dotnet_object)); - - memcpy(cloneobj, origobject, sizeof(*cloneobj)); - - /* VariantCopy will perform VariantClear; we don't want to clobber - * the IDispatch that we memcpy'd, so we init a new variant in the - * clone structure */ - VariantInit(&cloneobj->v); - /* We use the Indirection-following version of the API since we - * want to clone as much as possible */ - VariantCopyInd(&cloneobj->v, &origobject->v); - - if (cloneobj->typeinfo) { - ITypeInfo_AddRef(cloneobj->typeinfo); - } - - *clone_ptr = cloneobj; -} - -zend_object_value php_com_object_new(zend_class_entry *ce TSRMLS_DC) -{ - php_com_dotnet_object *obj; - zend_object_value retval; - - php_com_initialize(TSRMLS_C); - obj = emalloc(sizeof(*obj)); - memset(obj, 0, sizeof(*obj)); - - VariantInit(&obj->v); - obj->code_page = CP_ACP; - obj->ce = ce; - obj->zo.ce = ce; - - retval.handle = zend_objects_store_put(obj, NULL, php_com_object_free_storage, php_com_object_clone TSRMLS_CC); - retval.handlers = &php_com_object_handlers; - - return retval; -} diff --git a/ext/com_dotnet/com_iterator.c b/ext/com_dotnet/com_iterator.c deleted file mode 100644 index ec9938fb787c0..0000000000000 --- a/ext/com_dotnet/com_iterator.c +++ /dev/null @@ -1,250 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_ini.h" -#include "ext/standard/info.h" -#include "php_com_dotnet.h" -#include "php_com_dotnet_internal.h" -#include "Zend/zend_exceptions.h" - -struct php_com_iterator { - zend_object_iterator iter; - IEnumVARIANT *ev; - ulong key; - VARIANT v; /* cached element */ - int code_page; - VARIANT safe_array; - VARTYPE sa_type; - LONG sa_max; - zval *zdata; -}; - -static void com_iter_dtor(zend_object_iterator *iter TSRMLS_DC) -{ - struct php_com_iterator *I = (struct php_com_iterator*)iter->data; - - if (I->ev) { - IEnumVARIANT_Release(I->ev); - } - VariantClear(&I->v); - VariantClear(&I->safe_array); - if (I->zdata) { - zval_ptr_dtor((zval**)&I->zdata); - } - efree(I); -} - -static int com_iter_valid(zend_object_iterator *iter TSRMLS_DC) -{ - struct php_com_iterator *I = (struct php_com_iterator*)iter->data; - - if (I->zdata) { - return SUCCESS; - } - - return FAILURE; -} - -static void com_iter_get_data(zend_object_iterator *iter, zval ***data TSRMLS_DC) -{ - struct php_com_iterator *I = (struct php_com_iterator*)iter->data; - - *data = &I->zdata; -} - -static int com_iter_get_key(zend_object_iterator *iter, char **str_key, uint *str_key_len, - ulong *int_key TSRMLS_DC) -{ - struct php_com_iterator *I = (struct php_com_iterator*)iter->data; - - if (I->key == (ulong)-1) { - return HASH_KEY_NON_EXISTANT; - } - *int_key = I->key; - return HASH_KEY_IS_LONG; -} - -static int com_iter_move_forwards(zend_object_iterator *iter TSRMLS_DC) -{ - struct php_com_iterator *I = (struct php_com_iterator*)iter->data; - unsigned long n_fetched; - zval *ptr; - - /* release current cached element */ - VariantClear(&I->v); - - if (I->zdata) { - zval_ptr_dtor((zval**)&I->zdata); - I->zdata = NULL; - } - - if (I->ev) { - /* Get the next element */ - if (SUCCEEDED(IEnumVARIANT_Next(I->ev, 1, &I->v, &n_fetched)) && n_fetched > 0) { - I->key++; - } else { - /* indicate that there are no more items */ - I->key = (ulong)-1; - return FAILURE; - } - } else { - /* safe array */ - if (I->key >= I->sa_max) { - I->key = (ulong)-1; - return FAILURE; - } - I->key++; - if (php_com_safearray_get_elem(&I->safe_array, &I->v, (LONG)I->key TSRMLS_CC) == 0) { - I->key = (ulong)-1; - return FAILURE; - } - } - - MAKE_STD_ZVAL(ptr); - php_com_zval_from_variant(ptr, &I->v, I->code_page TSRMLS_CC); - /* php_com_wrap_variant(ptr, &I->v, I->code_page TSRMLS_CC); */ - I->zdata = ptr; - return SUCCESS; -} - - -static zend_object_iterator_funcs com_iter_funcs = { - com_iter_dtor, - com_iter_valid, - com_iter_get_data, - com_iter_get_key, - com_iter_move_forwards, - NULL -}; - -zend_object_iterator *php_com_iter_get(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC) -{ - php_com_dotnet_object *obj; - struct php_com_iterator *I; - IEnumVARIANT *iev = NULL; - DISPPARAMS dp; - VARIANT v; - unsigned long n_fetched; - zval *ptr; - - if (by_ref) { - zend_error(E_ERROR, "An iterator cannot be used with foreach by reference"); - } - - obj = CDNO_FETCH(object); - - if (V_VT(&obj->v) != VT_DISPATCH && !V_ISARRAY(&obj->v)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "variant is not an object or array VT=%d", V_VT(&obj->v)); - return NULL; - } - - memset(&dp, 0, sizeof(dp)); - VariantInit(&v); - - I = (struct php_com_iterator*)ecalloc(1, sizeof(*I)); - I->iter.funcs = &com_iter_funcs; - I->iter.data = I; - I->code_page = obj->code_page; - I->zdata = NULL; - VariantInit(&I->safe_array); - VariantInit(&I->v); - - if (V_ISARRAY(&obj->v)) { - LONG bound; - UINT dims; - - dims = SafeArrayGetDim(V_ARRAY(&obj->v)); - - if (dims != 1) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, - "Can only handle single dimension variant arrays (this array has %d)", dims); - goto fail; - } - - /* same semantics as foreach on a PHP array; - * make a copy and enumerate that copy */ - VariantCopy(&I->safe_array, &obj->v); - - /* determine the key value for the array */ - SafeArrayGetLBound(V_ARRAY(&I->safe_array), 1, &bound); - SafeArrayGetUBound(V_ARRAY(&I->safe_array), 1, &I->sa_max); - - /* pre-fetch the element */ - if (php_com_safearray_get_elem(&I->safe_array, &I->v, bound TSRMLS_CC)) { - I->key = bound; - MAKE_STD_ZVAL(ptr); - php_com_zval_from_variant(ptr, &I->v, I->code_page TSRMLS_CC); - I->zdata = ptr; - } else { - I->key = (ulong)-1; - } - - } else { - /* can we enumerate it? */ - if (FAILED(IDispatch_Invoke(V_DISPATCH(&obj->v), DISPID_NEWENUM, - &IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD|DISPATCH_PROPERTYGET, - &dp, &v, NULL, NULL))) { - goto fail; - } - - /* get something useful out of it */ - if (V_VT(&v) == VT_UNKNOWN) { - IUnknown_QueryInterface(V_UNKNOWN(&v), &IID_IEnumVARIANT, (void**)&iev); - } else if (V_VT(&v) == VT_DISPATCH) { - IDispatch_QueryInterface(V_DISPATCH(&v), &IID_IEnumVARIANT, (void**)&iev); - } - - VariantClear(&v); - - if (iev == NULL) { - goto fail; - } - - I->ev = iev; - - /* Get the first element now */ - if (SUCCEEDED(IEnumVARIANT_Next(I->ev, 1, &I->v, &n_fetched)) && n_fetched > 0) { - /* indicate that we have element 0 */ - I->key = 0; - MAKE_STD_ZVAL(ptr); - php_com_zval_from_variant(ptr, &I->v, I->code_page TSRMLS_CC); - I->zdata = ptr; - } else { - /* indicate that there are no more items */ - I->key = (ulong)-1; - } - } - - return &I->iter; - -fail: - if (I) { - VariantClear(&I->safe_array); - VariantClear(&I->v); - efree(I); - } - return NULL; -} - diff --git a/ext/com_dotnet/com_misc.c b/ext/com_dotnet/com_misc.c deleted file mode 100644 index bc443e62a468f..0000000000000 --- a/ext/com_dotnet/com_misc.c +++ /dev/null @@ -1,144 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_ini.h" -#include "ext/standard/info.h" -#include "php_com_dotnet.h" -#include "php_com_dotnet_internal.h" -#include "Zend/zend_exceptions.h" - -void php_com_throw_exception(HRESULT code, char *message TSRMLS_DC) -{ - int free_msg = 0; - if (message == NULL) { - message = php_win_err(code); - free_msg = 1; - } - zend_throw_exception(php_com_exception_class_entry, message, (long)code TSRMLS_CC); - if (free_msg) { - LocalFree(message); - } -} - -PHPAPI void php_com_wrap_dispatch(zval *z, IDispatch *disp, - int codepage TSRMLS_DC) -{ - php_com_dotnet_object *obj; - - obj = emalloc(sizeof(*obj)); - memset(obj, 0, sizeof(*obj)); - obj->code_page = codepage; - obj->ce = php_com_variant_class_entry; - obj->zo.ce = php_com_variant_class_entry; - - VariantInit(&obj->v); - V_VT(&obj->v) = VT_DISPATCH; - V_DISPATCH(&obj->v) = disp; - - IDispatch_AddRef(V_DISPATCH(&obj->v)); - IDispatch_GetTypeInfo(V_DISPATCH(&obj->v), 0, LANG_NEUTRAL, &obj->typeinfo); - - Z_TYPE_P(z) = IS_OBJECT; - z->value.obj.handle = zend_objects_store_put(obj, NULL, php_com_object_free_storage, php_com_object_clone TSRMLS_CC); - z->value.obj.handlers = &php_com_object_handlers; -} - -PHPAPI void php_com_wrap_variant(zval *z, VARIANT *v, - int codepage TSRMLS_DC) -{ - php_com_dotnet_object *obj; - - obj = emalloc(sizeof(*obj)); - memset(obj, 0, sizeof(*obj)); - obj->code_page = codepage; - obj->ce = php_com_variant_class_entry; - obj->zo.ce = php_com_variant_class_entry; - - VariantInit(&obj->v); - VariantCopyInd(&obj->v, v); - obj->modified = 0; - - if ((V_VT(&obj->v) == VT_DISPATCH) && (V_DISPATCH(&obj->v) != NULL)) { - IDispatch_GetTypeInfo(V_DISPATCH(&obj->v), 0, LANG_NEUTRAL, &obj->typeinfo); - } - - Z_TYPE_P(z) = IS_OBJECT; - - z->value.obj.handle = zend_objects_store_put(obj, NULL, php_com_object_free_storage, php_com_object_clone TSRMLS_CC); - z->value.obj.handlers = &php_com_object_handlers; -} - -/* this is a convenience function for fetching a particular - * element from a (possibly multi-dimensional) safe array */ -PHPAPI int php_com_safearray_get_elem(VARIANT *array, VARIANT *dest, LONG dim1 TSRMLS_DC) -{ - UINT dims; - LONG lbound, ubound; - LONG indices[1]; - VARTYPE vt; - - if (!V_ISARRAY(array)) { - return 0; - } - - dims = SafeArrayGetDim(V_ARRAY(array)); - - if (dims != 1) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, - "Can only handle single dimension variant arrays (this array has %d)", dims); - return 0; - } - - if (FAILED(SafeArrayGetVartype(V_ARRAY(array), &vt)) || vt == VT_EMPTY) { - vt = V_VT(array) & ~VT_ARRAY; - } - - /* determine the bounds */ - SafeArrayGetLBound(V_ARRAY(array), 1, &lbound); - SafeArrayGetUBound(V_ARRAY(array), 1, &ubound); - - /* check bounds */ - if (dim1 < lbound || dim1 > ubound) { - php_com_throw_exception(DISP_E_BADINDEX, "index out of bounds" TSRMLS_CC); - return 0; - } - - /* now fetch that element */ - VariantInit(dest); - - indices[0] = dim1; - - if (vt == VT_VARIANT) { - SafeArrayGetElement(V_ARRAY(array), indices, dest); - } else { - V_VT(dest) = vt; - /* store the value into "lVal" member of the variant. - * This works because it is a union; since we know the variant - * type, we end up with a working variant */ - SafeArrayGetElement(V_ARRAY(array), indices, &dest->lVal); - } - - return 1; -} diff --git a/ext/com_dotnet/com_olechar.c b/ext/com_dotnet/com_olechar.c deleted file mode 100644 index d9e72ad46fdf7..0000000000000 --- a/ext/com_dotnet/com_olechar.c +++ /dev/null @@ -1,103 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - | Harald Radi | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_ini.h" -#include "ext/standard/info.h" -#include "php_com_dotnet.h" -#include "php_com_dotnet_internal.h" - - -PHPAPI OLECHAR *php_com_string_to_olestring(char *string, uint string_len, int codepage TSRMLS_DC) -{ - OLECHAR *olestring = NULL; - DWORD flags = codepage == CP_UTF8 ? 0 : MB_PRECOMPOSED | MB_ERR_INVALID_CHARS; - BOOL ok; - - if (string_len == -1) { - /* determine required length for the buffer (includes NUL terminator) */ - string_len = MultiByteToWideChar(codepage, flags, string, -1, NULL, 0); - } else { - /* allow room for NUL terminator */ - string_len++; - } - - if (string_len > 0) { - olestring = (OLECHAR*)safe_emalloc(string_len, sizeof(OLECHAR), 0); - ok = MultiByteToWideChar(codepage, flags, string, string_len, olestring, string_len); - } else { - ok = FALSE; - olestring = (OLECHAR*)emalloc(sizeof(OLECHAR)); - *olestring = 0; - } - - if (!ok) { - char *msg = php_win_err(GetLastError()); - - php_error_docref(NULL TSRMLS_CC, E_WARNING, - "Could not convert string to unicode: `%s'", msg); - - LocalFree(msg); - } - - return olestring; -} - -PHPAPI char *php_com_olestring_to_string(OLECHAR *olestring, uint *string_len, int codepage TSRMLS_DC) -{ - char *string; - uint length = 0; - BOOL ok; - LONG err; - - length = WideCharToMultiByte(codepage, 0, olestring, -1, NULL, 0, NULL, NULL); - - if (length) { - string = (char*)safe_emalloc(length, sizeof(char), 0); - length = WideCharToMultiByte(codepage, 0, olestring, -1, string, length, NULL, NULL); - ok = length > 0; - } else { - err = GetLastError(); - string = (char*)emalloc(sizeof(char)); - *string = '\0'; - ok = FALSE; - length = 0; - } - - if (!ok) { - char *msg = php_win_err(err); - - php_error_docref(NULL TSRMLS_CC, E_WARNING, - "Could not convert string from unicode: `%s'", msg); - - LocalFree(msg); - } - - if (string_len) { - *string_len = length-1; - } - - return string; -} diff --git a/ext/com_dotnet/com_persist.c b/ext/com_dotnet/com_persist.c deleted file mode 100755 index 7a803805f8501..0000000000000 --- a/ext/com_dotnet/com_persist.c +++ /dev/null @@ -1,779 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -/* Infrastructure for working with persistent COM objects. - * Implements: IStream* wrapper for PHP streams. - * TODO: Magic __wakeup and __sleep handlers for serialization - * (can wait till 5.1) */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_ini.h" -#include "ext/standard/info.h" -#include "php_com_dotnet.h" -#include "php_com_dotnet_internal.h" -#include "Zend/zend_exceptions.h" - -/* {{{ expose php_stream as a COM IStream */ - -typedef struct { - CONST_VTBL struct IStreamVtbl *lpVtbl; - DWORD engine_thread; - LONG refcount; - php_stream *stream; - int id; -} php_istream; - -static int le_istream; -static void istream_destructor(php_istream *stm); - -static void istream_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) -{ - php_istream *stm = (php_istream *)rsrc->ptr; - istream_destructor(stm); -} - -#ifdef ZTS -# define TSRMLS_FIXED() TSRMLS_FETCH(); -#else -# define TSRMLS_FIXED() -#endif - -#define FETCH_STM() \ - TSRMLS_FIXED() \ - php_istream *stm = (php_istream*)This; \ - if (GetCurrentThreadId() != stm->engine_thread) \ - return RPC_E_WRONG_THREAD; - -static HRESULT STDMETHODCALLTYPE stm_queryinterface( - IStream *This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject) -{ - FETCH_STM(); - - if (IsEqualGUID(&IID_IUnknown, riid) || - IsEqualGUID(&IID_IStream, riid)) { - *ppvObject = This; - InterlockedIncrement(&stm->refcount); - return S_OK; - } - - *ppvObject = NULL; - return E_NOINTERFACE; -} - -static ULONG STDMETHODCALLTYPE stm_addref(IStream *This) -{ - FETCH_STM(); - - return InterlockedIncrement(&stm->refcount); -} - -static ULONG STDMETHODCALLTYPE stm_release(IStream *This) -{ - ULONG ret; - FETCH_STM(); - - ret = InterlockedDecrement(&stm->refcount); - if (ret == 0) { - /* destroy it */ - if (stm->id) - zend_list_delete(stm->id); - } - return ret; -} - -static HRESULT STDMETHODCALLTYPE stm_read(IStream *This, void *pv, ULONG cb, ULONG *pcbRead) -{ - int nread; - FETCH_STM(); - - nread = php_stream_read(stm->stream, pv, cb); - - if (pcbRead) { - *pcbRead = nread > 0 ? nread : 0; - } - if (nread > 0) { - return S_OK; - } - return S_FALSE; -} - -static HRESULT STDMETHODCALLTYPE stm_write(IStream *This, void const *pv, ULONG cb, ULONG *pcbWritten) -{ - int nwrote; - FETCH_STM(); - - nwrote = php_stream_write(stm->stream, pv, cb); - - if (pcbWritten) { - *pcbWritten = nwrote > 0 ? nwrote : 0; - } - if (nwrote > 0) { - return S_OK; - } - return S_FALSE; -} - -static HRESULT STDMETHODCALLTYPE stm_seek(IStream *This, LARGE_INTEGER dlibMove, - DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition) -{ - off_t offset; - int whence; - int ret; - FETCH_STM(); - - switch (dwOrigin) { - case STREAM_SEEK_SET: whence = SEEK_SET; break; - case STREAM_SEEK_CUR: whence = SEEK_CUR; break; - case STREAM_SEEK_END: whence = SEEK_END; break; - default: - return STG_E_INVALIDFUNCTION; - } - - if (dlibMove.HighPart) { - /* we don't support 64-bit offsets */ - return STG_E_INVALIDFUNCTION; - } - - offset = dlibMove.QuadPart; - - ret = php_stream_seek(stm->stream, offset, whence); - - if (plibNewPosition) { - plibNewPosition->QuadPart = (ULONGLONG)(ret >= 0 ? ret : 0); - } - - return ret >= 0 ? S_OK : STG_E_INVALIDFUNCTION; -} - -static HRESULT STDMETHODCALLTYPE stm_set_size(IStream *This, ULARGE_INTEGER libNewSize) -{ - FETCH_STM(); - - if (libNewSize.HighPart) { - return STG_E_INVALIDFUNCTION; - } - - if (php_stream_truncate_supported(stm->stream)) { - int ret = php_stream_truncate_set_size(stm->stream, (size_t)libNewSize.QuadPart); - - if (ret == 0) { - return S_OK; - } - } - - return STG_E_INVALIDFUNCTION; -} - -static HRESULT STDMETHODCALLTYPE stm_copy_to(IStream *This, IStream *pstm, ULARGE_INTEGER cb, - ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten) -{ - FETCH_STM(); - - return E_NOTIMPL; -} - -static HRESULT STDMETHODCALLTYPE stm_commit(IStream *This, DWORD grfCommitFlags) -{ - FETCH_STM(); - - php_stream_flush(stm->stream); - - return S_OK; -} - -static HRESULT STDMETHODCALLTYPE stm_revert(IStream *This) -{ - /* NOP */ - return S_OK; -} - -static HRESULT STDMETHODCALLTYPE stm_lock_region(IStream *This, - ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD lockType) -{ - return STG_E_INVALIDFUNCTION; -} - -static HRESULT STDMETHODCALLTYPE stm_unlock_region(IStream *This, - ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD lockType) -{ - return STG_E_INVALIDFUNCTION; -} - -static HRESULT STDMETHODCALLTYPE stm_stat(IStream *This, - STATSTG *pstatstg, DWORD grfStatFlag) -{ - return STG_E_INVALIDFUNCTION; -} - -static HRESULT STDMETHODCALLTYPE stm_clone(IStream *This, IStream **ppstm) -{ - return STG_E_INVALIDFUNCTION; -} - -static struct IStreamVtbl php_istream_vtbl = { - stm_queryinterface, - stm_addref, - stm_release, - stm_read, - stm_write, - stm_seek, - stm_set_size, - stm_copy_to, - stm_commit, - stm_revert, - stm_lock_region, - stm_unlock_region, - stm_stat, - stm_clone -}; - -static void istream_destructor(php_istream *stm) -{ - TSRMLS_FETCH(); - - if (stm->id) { - int id = stm->id; - stm->id = 0; - zend_list_delete(id); - return; - } - - if (stm->refcount > 0) { - CoDisconnectObject((IUnknown*)stm, 0); - } - - zend_list_delete(stm->stream->rsrc_id); - - CoTaskMemFree(stm); -} -/* }}} */ - -PHPAPI IStream *php_com_wrapper_export_stream(php_stream *stream TSRMLS_DC) -{ - php_istream *stm = (php_istream*)CoTaskMemAlloc(sizeof(*stm)); - - if (stm == NULL) - return NULL; - - memset(stm, 0, sizeof(*stm)); - stm->engine_thread = GetCurrentThreadId(); - stm->lpVtbl = &php_istream_vtbl; - stm->refcount = 1; - stm->stream = stream; - - zend_list_addref(stream->rsrc_id); - stm->id = zend_list_insert(stm, le_istream); - - return (IStream*)stm; -} - -#define CPH_ME(fname, arginfo) PHP_ME(com_persist, fname, arginfo, ZEND_ACC_PUBLIC) -#define CPH_SME(fname, arginfo) PHP_ME(com_persist, fname, arginfo, ZEND_ACC_ALLOW_STATIC|ZEND_ACC_PUBLIC) -#define CPH_METHOD(fname) static PHP_METHOD(com_persist, fname) - -#define CPH_FETCH() php_com_persist_helper *helper = (php_com_persist_helper*)zend_object_store_get_object(getThis() TSRMLS_CC); - -#define CPH_NO_OBJ() if (helper->unk == NULL) { php_com_throw_exception(E_INVALIDARG, "No COM object is associated with this helper instance" TSRMLS_CC); return; } - -typedef struct { - zend_object std; - long codepage; - IUnknown *unk; - IPersistStream *ips; - IPersistStreamInit *ipsi; - IPersistFile *ipf; -} php_com_persist_helper; - -static zend_object_handlers helper_handlers; -static zend_class_entry *helper_ce; - -static inline HRESULT get_persist_stream(php_com_persist_helper *helper) -{ - if (!helper->ips && helper->unk) { - return IUnknown_QueryInterface(helper->unk, &IID_IPersistStream, &helper->ips); - } - return helper->ips ? S_OK : E_NOTIMPL; -} - -static inline HRESULT get_persist_stream_init(php_com_persist_helper *helper) -{ - if (!helper->ipsi && helper->unk) { - return IUnknown_QueryInterface(helper->unk, &IID_IPersistStreamInit, &helper->ipsi); - } - return helper->ipsi ? S_OK : E_NOTIMPL; -} - -static inline HRESULT get_persist_file(php_com_persist_helper *helper) -{ - if (!helper->ipf && helper->unk) { - return IUnknown_QueryInterface(helper->unk, &IID_IPersistFile, &helper->ipf); - } - return helper->ipf ? S_OK : E_NOTIMPL; -} - - -/* {{{ proto string COMPersistHelper::GetCurFile() - Determines the filename into which an object will be saved, or false if none is set, via IPersistFile::GetCurFile */ -CPH_METHOD(GetCurFileName) -{ - HRESULT res; - OLECHAR *olename = NULL; - CPH_FETCH(); - - CPH_NO_OBJ(); - - res = get_persist_file(helper); - if (helper->ipf) { - res = IPersistFile_GetCurFile(helper->ipf, &olename); - - if (res == S_OK) { - Z_TYPE_P(return_value) = IS_STRING; - Z_STRVAL_P(return_value) = php_com_olestring_to_string(olename, - &Z_STRLEN_P(return_value), helper->codepage TSRMLS_CC); - CoTaskMemFree(olename); - return; - } else if (res == S_FALSE) { - CoTaskMemFree(olename); - RETURN_FALSE; - } - php_com_throw_exception(res, NULL TSRMLS_CC); - } else { - php_com_throw_exception(res, NULL TSRMLS_CC); - } -} -/* }}} */ - - -/* {{{ proto bool COMPersistHelper::SaveToFile(string filename [, bool remember]) - Persist object data to file, via IPersistFile::Save */ -CPH_METHOD(SaveToFile) -{ - HRESULT res; - char *filename, *fullpath = NULL; - int filename_len; - zend_bool remember = TRUE; - OLECHAR *olefilename = NULL; - CPH_FETCH(); - - CPH_NO_OBJ(); - - res = get_persist_file(helper); - if (helper->ipf) { - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s!|b", - &filename, &filename_len, &remember)) { - php_com_throw_exception(E_INVALIDARG, "Invalid arguments" TSRMLS_CC); - return; - } - - if (filename) { - if (!(fullpath = expand_filepath(filename, NULL TSRMLS_CC))) { - RETURN_FALSE; - } - - if (php_check_open_basedir(fullpath TSRMLS_CC)) { - efree(fullpath); - RETURN_FALSE; - } - - olefilename = php_com_string_to_olestring(filename, strlen(fullpath), helper->codepage TSRMLS_CC); - efree(fullpath); - } - res = IPersistFile_Save(helper->ipf, olefilename, remember); - if (SUCCEEDED(res)) { - if (!olefilename) { - res = IPersistFile_GetCurFile(helper->ipf, &olefilename); - if (S_OK == res) { - IPersistFile_SaveCompleted(helper->ipf, olefilename); - CoTaskMemFree(olefilename); - olefilename = NULL; - } - } else if (remember) { - IPersistFile_SaveCompleted(helper->ipf, olefilename); - } - } - - if (olefilename) { - efree(olefilename); - } - - if (FAILED(res)) { - php_com_throw_exception(res, NULL TSRMLS_CC); - } - - } else { - php_com_throw_exception(res, NULL TSRMLS_CC); - } -} -/* }}} */ - -/* {{{ proto bool COMPersistHelper::LoadFromFile(string filename [, int flags]) - Load object data from file, via IPersistFile::Load */ -CPH_METHOD(LoadFromFile) -{ - HRESULT res; - char *filename, *fullpath; - int filename_len; - long flags = 0; - OLECHAR *olefilename; - CPH_FETCH(); - - CPH_NO_OBJ(); - - res = get_persist_file(helper); - if (helper->ipf) { - - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", - &filename, &filename_len, &flags)) { - php_com_throw_exception(E_INVALIDARG, "Invalid arguments" TSRMLS_CC); - return; - } - - if (!(fullpath = expand_filepath(filename, NULL TSRMLS_CC))) { - RETURN_FALSE; - } - - if (php_check_open_basedir(fullpath TSRMLS_CC)) { - efree(fullpath); - RETURN_FALSE; - } - - olefilename = php_com_string_to_olestring(fullpath, strlen(fullpath), helper->codepage TSRMLS_CC); - efree(fullpath); - - res = IPersistFile_Load(helper->ipf, olefilename, flags); - efree(olefilename); - - if (FAILED(res)) { - php_com_throw_exception(res, NULL TSRMLS_CC); - } - - } else { - php_com_throw_exception(res, NULL TSRMLS_CC); - } -} -/* }}} */ - -/* {{{ proto int COMPersistHelper::GetMaxStreamSize() - Gets maximum stream size required to store the object data, via IPersistStream::GetSizeMax (or IPersistStreamInit::GetSizeMax) */ -CPH_METHOD(GetMaxStreamSize) -{ - HRESULT res; - ULARGE_INTEGER size; - CPH_FETCH(); - - CPH_NO_OBJ(); - - res = get_persist_stream_init(helper); - if (helper->ipsi) { - res = IPersistStreamInit_GetSizeMax(helper->ipsi, &size); - } else { - res = get_persist_stream(helper); - if (helper->ips) { - res = IPersistStream_GetSizeMax(helper->ips, &size); - } else { - php_com_throw_exception(res, NULL TSRMLS_CC); - return; - } - } - - if (res != S_OK) { - php_com_throw_exception(res, NULL TSRMLS_CC); - } else { - /* TODO: handle 64 bit properly */ - RETURN_LONG((LONG)size.QuadPart); - } -} -/* }}} */ - -/* {{{ proto int COMPersistHelper::InitNew() - Initializes the object to a default state, via IPersistStreamInit::InitNew */ -CPH_METHOD(InitNew) -{ - HRESULT res; - CPH_FETCH(); - - CPH_NO_OBJ(); - - res = get_persist_stream_init(helper); - if (helper->ipsi) { - res = IPersistStreamInit_InitNew(helper->ipsi); - - if (res != S_OK) { - php_com_throw_exception(res, NULL TSRMLS_CC); - } else { - RETURN_TRUE; - } - } else { - php_com_throw_exception(res, NULL TSRMLS_CC); - } -} -/* }}} */ - -/* {{{ proto mixed COMPersistHelper::LoadFromStream(resource stream) - Initializes an object from the stream where it was previously saved, via IPersistStream::Load or OleLoadFromStream */ -CPH_METHOD(LoadFromStream) -{ - zval *zstm; - php_stream *stream; - IStream *stm = NULL; - HRESULT res; - CPH_FETCH(); - - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zstm)) { - php_com_throw_exception(E_INVALIDARG, "invalid arguments" TSRMLS_CC); - return; - } - - php_stream_from_zval_no_verify(stream, &zstm); - - if (stream == NULL) { - php_com_throw_exception(E_INVALIDARG, "expected a stream" TSRMLS_CC); - return; - } - - stm = php_com_wrapper_export_stream(stream TSRMLS_CC); - if (stm == NULL) { - php_com_throw_exception(E_UNEXPECTED, "failed to wrap stream" TSRMLS_CC); - return; - } - - res = S_OK; - RETVAL_TRUE; - - if (helper->unk == NULL) { - IDispatch *disp = NULL; - - /* we need to create an object and load using OleLoadFromStream */ - res = OleLoadFromStream(stm, &IID_IDispatch, &disp); - - if (SUCCEEDED(res)) { - php_com_wrap_dispatch(return_value, disp, COMG(code_page) TSRMLS_CC); - } - } else { - res = get_persist_stream_init(helper); - if (helper->ipsi) { - res = IPersistStreamInit_Load(helper->ipsi, stm); - } else { - res = get_persist_stream(helper); - if (helper->ips) { - res = IPersistStreamInit_Load(helper->ipsi, stm); - } - } - } - IStream_Release(stm); - - if (FAILED(res)) { - php_com_throw_exception(res, NULL TSRMLS_CC); - RETURN_NULL(); - } -} -/* }}} */ - -/* {{{ proto int COMPersistHelper::SaveToStream(resource stream) - Saves the object to a stream, via IPersistStream::Save */ -CPH_METHOD(SaveToStream) -{ - zval *zstm; - php_stream *stream; - IStream *stm = NULL; - HRESULT res; - CPH_FETCH(); - - CPH_NO_OBJ(); - - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zstm)) { - php_com_throw_exception(E_INVALIDARG, "invalid arguments" TSRMLS_CC); - return; - } - - php_stream_from_zval_no_verify(stream, &zstm); - - if (stream == NULL) { - php_com_throw_exception(E_INVALIDARG, "expected a stream" TSRMLS_CC); - return; - } - - stm = php_com_wrapper_export_stream(stream TSRMLS_CC); - if (stm == NULL) { - php_com_throw_exception(E_UNEXPECTED, "failed to wrap stream" TSRMLS_CC); - return; - } - - res = get_persist_stream_init(helper); - if (helper->ipsi) { - res = IPersistStreamInit_Save(helper->ipsi, stm, TRUE); - } else { - res = get_persist_stream(helper); - if (helper->ips) { - res = IPersistStream_Save(helper->ips, stm, TRUE); - } - } - - IStream_Release(stm); - - if (FAILED(res)) { - php_com_throw_exception(res, NULL TSRMLS_CC); - return; - } - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto int COMPersistHelper::__construct([object com_object]) - Creates a persistence helper object, usually associated with a com_object */ -CPH_METHOD(__construct) -{ - php_com_dotnet_object *obj = NULL; - zval *zobj = NULL; - CPH_FETCH(); - - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|O!", - &zobj, php_com_variant_class_entry)) { - php_com_throw_exception(E_INVALIDARG, "invalid arguments" TSRMLS_CC); - return; - } - - if (!zobj) { - return; - } - - obj = CDNO_FETCH(zobj); - - if (V_VT(&obj->v) != VT_DISPATCH || V_DISPATCH(&obj->v) == NULL) { - php_com_throw_exception(E_INVALIDARG, "parameter must represent an IDispatch COM object" TSRMLS_CC); - return; - } - - /* it is always safe to cast an interface to IUnknown */ - helper->unk = (IUnknown*)V_DISPATCH(&obj->v); - IUnknown_AddRef(helper->unk); - helper->codepage = obj->code_page; -} -/* }}} */ - - - - -static zend_function_entry com_persist_helper_methods[] = { - CPH_ME(__construct, NULL) - CPH_ME(GetCurFileName, NULL) - CPH_ME(SaveToFile, NULL) - CPH_ME(LoadFromFile, NULL) - CPH_ME(GetMaxStreamSize, NULL) - CPH_ME(InitNew, NULL) - CPH_ME(LoadFromStream, NULL) - CPH_ME(SaveToStream, NULL) - {NULL, NULL, NULL} -}; - -static void helper_free_storage(void *obj TSRMLS_DC) -{ - php_com_persist_helper *object = (php_com_persist_helper*)obj; - - if (object->ipf) { - IPersistFile_Release(object->ipf); - } - if (object->ips) { - IPersistStream_Release(object->ips); - } - if (object->ipsi) { - IPersistStreamInit_Release(object->ipsi); - } - if (object->unk) { - IUnknown_Release(object->unk); - } - zend_object_std_dtor(&object->std TSRMLS_CC); - efree(object); -} - - -static void helper_clone(void *obj, void **clone_ptr TSRMLS_DC) -{ - php_com_persist_helper *clone, *object = (php_com_persist_helper*)obj; - - clone = emalloc(sizeof(*object)); - memcpy(clone, object, sizeof(*object)); - *clone_ptr = clone; - - zend_object_std_init(&clone->std, object->std.ce TSRMLS_CC); - - if (clone->ipf) { - IPersistFile_AddRef(clone->ipf); - } - if (clone->ips) { - IPersistStream_AddRef(clone->ips); - } - if (clone->ipsi) { - IPersistStreamInit_AddRef(clone->ipsi); - } - if (clone->unk) { - IUnknown_AddRef(clone->unk); - } -} - -static zend_object_value helper_new(zend_class_entry *ce TSRMLS_DC) -{ - php_com_persist_helper *helper; - zend_object_value retval; - - helper = emalloc(sizeof(*helper)); - memset(helper, 0, sizeof(*helper)); - - zend_object_std_init(&helper->std, helper_ce TSRMLS_CC); - - retval.handle = zend_objects_store_put(helper, NULL, helper_free_storage, helper_clone TSRMLS_CC); - retval.handlers = &helper_handlers; - - return retval; -} - -int php_com_persist_minit(INIT_FUNC_ARGS) -{ - zend_class_entry ce; - - memcpy(&helper_handlers, zend_get_std_object_handlers(), sizeof(helper_handlers)); - helper_handlers.clone_obj = NULL; - - INIT_CLASS_ENTRY(ce, "COMPersistHelper", com_persist_helper_methods); - ce.create_object = helper_new; - helper_ce = zend_register_internal_class(&ce TSRMLS_CC); - helper_ce->ce_flags |= ZEND_ACC_FINAL; - - le_istream = zend_register_list_destructors_ex(istream_dtor, - NULL, "com_dotnet_istream_wrapper", module_number); - - return SUCCESS; -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: noet sw=4 ts=4 fdm=marker - * vim<600: noet sw=4 ts=4 - */ diff --git a/ext/com_dotnet/com_saproxy.c b/ext/com_dotnet/com_saproxy.c deleted file mode 100644 index 7d8dae994f0c4..0000000000000 --- a/ext/com_dotnet/com_saproxy.c +++ /dev/null @@ -1,588 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -/* This module implements a SafeArray proxy which is used internally - * by the engine when resolving multi-dimensional array accesses on - * SafeArray types. - * In addition, the proxy is now able to handle properties of COM objects - * that smell like PHP arrays. - * */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_ini.h" -#include "ext/standard/info.h" -#include "php_com_dotnet.h" -#include "php_com_dotnet_internal.h" -#include "Zend/zend_exceptions.h" - -typedef struct { - /* the object we a proxying for; we hold a refcount to it */ - zval *zobj; - php_com_dotnet_object *obj; - - /* how many dimensions we are indirecting to get into this element */ - LONG dimensions; - - /* this is an array whose size_is(dimensions) */ - zval **indices; - -} php_com_saproxy; - -typedef struct { - zend_object_iterator iter; - zval *proxy_obj; - php_com_saproxy *proxy; - LONG key; - LONG imin, imax; - LONG *indices; -} php_com_saproxy_iter; - -#define SA_FETCH(zv) (php_com_saproxy*)zend_object_store_get_object(zv TSRMLS_CC) - -static inline void clone_indices(php_com_saproxy *dest, php_com_saproxy *src, int ndims) -{ - int i; - - for (i = 0; i < ndims; i++) { - MAKE_STD_ZVAL(dest->indices[i]); - *dest->indices[i] = *src->indices[i]; - zval_copy_ctor(dest->indices[i]); - } -} - -static zval *saproxy_property_read(zval *object, zval *member, int type TSRMLS_DC) -{ - zval *return_value; - - MAKE_STD_ZVAL(return_value); - ZVAL_NULL(return_value); - - php_com_throw_exception(E_INVALIDARG, "safearray has no properties" TSRMLS_CC); - - return return_value; -} - -static void saproxy_property_write(zval *object, zval *member, zval *value TSRMLS_DC) -{ - php_com_throw_exception(E_INVALIDARG, "safearray has no properties" TSRMLS_CC); -} - -static zval *saproxy_read_dimension(zval *object, zval *offset, int type TSRMLS_DC) -{ - php_com_saproxy *proxy = SA_FETCH(object); - zval *return_value; - UINT dims; - SAFEARRAY *sa; - LONG ubound, lbound; - int i; - HRESULT res; - - MAKE_STD_ZVAL(return_value); - ZVAL_NULL(return_value); - - if (V_VT(&proxy->obj->v) == VT_DISPATCH) { - VARIANT v; - zval **args; - - /* prop-get using first dimension as the property name, - * all subsequent dimensions and the offset as parameters */ - - args = safe_emalloc(proxy->dimensions + 1, sizeof(zval *), 0); - - for (i = 1; i < proxy->dimensions; i++) { - args[i-1] = proxy->indices[i]; - } - args[i-1] = offset; - - convert_to_string(proxy->indices[0]); - VariantInit(&v); - - res = php_com_do_invoke(proxy->obj, Z_STRVAL_P(proxy->indices[0]), - Z_STRLEN_P(proxy->indices[0]), DISPATCH_METHOD|DISPATCH_PROPERTYGET, &v, - proxy->dimensions, args, 0 TSRMLS_CC); - - if (res == SUCCESS) { - php_com_zval_from_variant(return_value, &v, proxy->obj->code_page TSRMLS_CC); - VariantClear(&v); - } else if (res == DISP_E_BADPARAMCOUNT) { - /* return another proxy */ - php_com_saproxy_create(object, return_value, offset TSRMLS_CC); - } - - return return_value; - - } else if (!V_ISARRAY(&proxy->obj->v)) { - php_com_throw_exception(E_INVALIDARG, "invalid read from com proxy object" TSRMLS_CC); - return return_value; - } - - /* the SafeArray case */ - - /* offset/index must be an integer */ - convert_to_long(offset); - - sa = V_ARRAY(&proxy->obj->v); - dims = SafeArrayGetDim(sa); - - if (proxy->dimensions >= dims) { - /* too many dimensions */ - php_com_throw_exception(E_INVALIDARG, "too many dimensions!" TSRMLS_CC); - return return_value; - } - - /* bounds check */ - SafeArrayGetLBound(sa, proxy->dimensions, &lbound); - SafeArrayGetUBound(sa, proxy->dimensions, &ubound); - - if (Z_LVAL_P(offset) < lbound || Z_LVAL_P(offset) > ubound) { - php_com_throw_exception(DISP_E_BADINDEX, "index out of bounds" TSRMLS_CC); - return return_value; - } - - if (dims - 1 == proxy->dimensions) { - LONG *indices; - VARTYPE vt; - VARIANT v; - - VariantInit(&v); - - /* we can return a real value */ - indices = safe_emalloc(dims, sizeof(LONG), 0); - - /* copy indices from proxy */ - for (i = 0; i < dims; i++) { - convert_to_long(proxy->indices[i]); - indices[i] = Z_LVAL_P(proxy->indices[i]); - } - - /* add user-supplied index */ - indices[dims-1] = Z_LVAL_P(offset); - - /* now fetch the value */ - if (FAILED(SafeArrayGetVartype(sa, &vt)) || vt == VT_EMPTY) { - vt = V_VT(&proxy->obj->v) & ~VT_ARRAY; - } - - if (vt == VT_VARIANT) { - res = SafeArrayGetElement(sa, indices, &v); - } else { - V_VT(&v) = vt; - res = SafeArrayGetElement(sa, indices, &v.lVal); - } - - efree(indices); - - if (SUCCEEDED(res)) { - php_com_wrap_variant(return_value, &v, proxy->obj->code_page TSRMLS_CC); - } else { - php_com_throw_exception(res, NULL TSRMLS_CC); - } - - VariantClear(&v); - - } else { - /* return another proxy */ - php_com_saproxy_create(object, return_value, offset TSRMLS_CC); - } - - return return_value; -} - -static void saproxy_write_dimension(zval *object, zval *offset, zval *value TSRMLS_DC) -{ - php_com_saproxy *proxy = SA_FETCH(object); - UINT dims; - int i; - HRESULT res; - VARIANT v; - - if (V_VT(&proxy->obj->v) == VT_DISPATCH) { - /* We do a prop-set using the first dimension as the property name, - * all subsequent dimensions and offset as parameters, with value as - * the final value */ - zval **args = safe_emalloc(proxy->dimensions + 2, sizeof(zval *), 0); - - for (i = 1; i < proxy->dimensions; i++) { - args[i-1] = proxy->indices[i]; - } - args[i-1] = offset; - args[i] = value; - - convert_to_string(proxy->indices[0]); - VariantInit(&v); - if (SUCCESS == php_com_do_invoke(proxy->obj, Z_STRVAL_P(proxy->indices[0]), - Z_STRLEN_P(proxy->indices[0]), DISPATCH_PROPERTYPUT, &v, proxy->dimensions + 1, - args, 0 TSRMLS_CC)) { - VariantClear(&v); - } - - efree(args); - - } else if (V_ISARRAY(&proxy->obj->v)) { - LONG *indices; - VARTYPE vt; - - dims = SafeArrayGetDim(V_ARRAY(&proxy->obj->v)); - indices = safe_emalloc(dims, sizeof(LONG), 0); - /* copy indices from proxy */ - for (i = 0; i < dims; i++) { - convert_to_long(proxy->indices[i]); - indices[i] = Z_LVAL_P(proxy->indices[i]); - } - - /* add user-supplied index */ - convert_to_long(offset); - indices[dims-1] = Z_LVAL_P(offset); - - if (FAILED(SafeArrayGetVartype(V_ARRAY(&proxy->obj->v), &vt)) || vt == VT_EMPTY) { - vt = V_VT(&proxy->obj->v) & ~VT_ARRAY; - } - - VariantInit(&v); - php_com_variant_from_zval(&v, value, proxy->obj->code_page TSRMLS_CC); - - if (V_VT(&v) != vt) { - VariantChangeType(&v, &v, 0, vt); - } - - if (vt == VT_VARIANT) { - res = SafeArrayPutElement(V_ARRAY(&proxy->obj->v), indices, &v); - } else { - res = SafeArrayPutElement(V_ARRAY(&proxy->obj->v), indices, &v.lVal); - } - - efree(indices); - VariantClear(&v); - - if (FAILED(res)) { - php_com_throw_exception(res, NULL TSRMLS_CC); - } - } else { - php_com_throw_exception(E_NOTIMPL, "invalid write to com proxy object" TSRMLS_CC); - } -} - -#if 0 -static void saproxy_object_set(zval **property, zval *value TSRMLS_DC) -{ -} - -static zval *saproxy_object_get(zval *property TSRMLS_DC) -{ - /* Not yet implemented in the engine */ - return NULL; -} -#endif - -static int saproxy_property_exists(zval *object, zval *member, int check_empty TSRMLS_DC) -{ - /* no properties */ - return 0; -} - -static int saproxy_dimension_exists(zval *object, zval *member, int check_empty TSRMLS_DC) -{ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Operation not yet supported on a COM object"); - return 0; -} - -static void saproxy_property_delete(zval *object, zval *member TSRMLS_DC) -{ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot delete properties from a COM object"); -} - -static void saproxy_dimension_delete(zval *object, zval *offset TSRMLS_DC) -{ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot delete properties from a COM object"); -} - -static HashTable *saproxy_properties_get(zval *object TSRMLS_DC) -{ - /* no properties */ - return NULL; -} - -static union _zend_function *saproxy_method_get(zval **object, char *name, int len TSRMLS_DC) -{ - /* no methods */ - return NULL; -} - -static int saproxy_call_method(char *method, INTERNAL_FUNCTION_PARAMETERS) -{ - return FAILURE; -} - -static union _zend_function *saproxy_constructor_get(zval *object TSRMLS_DC) -{ - /* user cannot instantiate */ - return NULL; -} - -static zend_class_entry *saproxy_class_entry_get(zval *object TSRMLS_DC) -{ - return php_com_saproxy_class_entry; -} - -static int saproxy_class_name_get(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC) -{ - *class_name = estrndup(php_com_saproxy_class_entry->name.s, php_com_saproxy_class_entry->name_length); - *class_name_len = php_com_saproxy_class_entry->name_length; - return 0; -} - -static int saproxy_objects_compare(zval *object1, zval *object2 TSRMLS_DC) -{ - return -1; -} - -static int saproxy_object_cast(zval *readobj, zval *writeobj, int type, void *extra TSRMLS_DC) -{ - return FAILURE; -} - -static int saproxy_count_elements(zval *object, long *count TSRMLS_DC) -{ - php_com_saproxy *proxy = SA_FETCH(object); - LONG ubound, lbound; - - if (!V_ISARRAY(&proxy->obj->v)) { - return FAILURE; - } - - SafeArrayGetLBound(V_ARRAY(&proxy->obj->v), proxy->dimensions, &lbound); - SafeArrayGetUBound(V_ARRAY(&proxy->obj->v), proxy->dimensions, &ubound); - - *count = ubound - lbound + 1; - - return SUCCESS; -} - -zend_object_handlers php_com_saproxy_handlers = { - ZEND_OBJECTS_STORE_HANDLERS, - saproxy_property_read, - saproxy_property_write, - saproxy_read_dimension, - saproxy_write_dimension, - NULL, - NULL, //saproxy_object_get, - NULL, //saproxy_object_set, - saproxy_property_exists, - saproxy_property_delete, - saproxy_dimension_exists, - saproxy_dimension_delete, - saproxy_properties_get, - saproxy_method_get, - saproxy_call_method, - saproxy_constructor_get, - saproxy_class_entry_get, - saproxy_class_name_get, - saproxy_objects_compare, - saproxy_object_cast, - saproxy_count_elements -}; - -static void saproxy_free_storage(void *object TSRMLS_DC) -{ - php_com_saproxy *proxy = (php_com_saproxy *)object; - int i; - - for (i = 0; i < proxy->dimensions; i++) { - if (proxy->indices) { - FREE_ZVAL(proxy->indices[i]); - } - } - - zval_ptr_dtor(&proxy->zobj); - efree(proxy->indices); - efree(proxy); -} - -static void saproxy_clone(void *object, void **clone_ptr TSRMLS_DC) -{ - php_com_saproxy *proxy = (php_com_saproxy *)object; - php_com_saproxy *cloneproxy; - - cloneproxy = emalloc(sizeof(*cloneproxy)); - memcpy(cloneproxy, proxy, sizeof(*cloneproxy)); - - ZVAL_ADDREF(cloneproxy->zobj); - cloneproxy->indices = safe_emalloc(cloneproxy->dimensions, sizeof(zval *), 0); - clone_indices(cloneproxy, proxy, proxy->dimensions); - - *clone_ptr = cloneproxy; -} - -int php_com_saproxy_create(zval *com_object, zval *proxy_out, zval *index TSRMLS_DC) -{ - php_com_saproxy *proxy, *rel = NULL; - - proxy = ecalloc(1, sizeof(*proxy)); - proxy->dimensions = 1; - - if (Z_OBJCE_P(com_object) == php_com_saproxy_class_entry) { - rel = SA_FETCH(com_object); - proxy->obj = rel->obj; - proxy->zobj = rel->zobj; - proxy->dimensions += rel->dimensions; - } else { - proxy->obj = CDNO_FETCH(com_object); - proxy->zobj = com_object; - } - - ZVAL_ADDREF(proxy->zobj); - proxy->indices = safe_emalloc(proxy->dimensions, sizeof(zval *), 0); - - if (rel) { - clone_indices(proxy, rel, rel->dimensions); - } - - MAKE_STD_ZVAL(proxy->indices[proxy->dimensions-1]); - *proxy->indices[proxy->dimensions-1] = *index; - zval_copy_ctor(proxy->indices[proxy->dimensions-1]); - - Z_TYPE_P(proxy_out) = IS_OBJECT; - Z_OBJ_HANDLE_P(proxy_out) = zend_objects_store_put(proxy, NULL, saproxy_free_storage, saproxy_clone TSRMLS_CC); - Z_OBJ_HT_P(proxy_out) = &php_com_saproxy_handlers; - - return 1; -} - -/* iterator */ - -static void saproxy_iter_dtor(zend_object_iterator *iter TSRMLS_DC) -{ - php_com_saproxy_iter *I = (php_com_saproxy_iter*)iter->data; - - zval_ptr_dtor(&I->proxy_obj); - - efree(I->indices); - efree(I); -} - -static int saproxy_iter_valid(zend_object_iterator *iter TSRMLS_DC) -{ - php_com_saproxy_iter *I = (php_com_saproxy_iter*)iter->data; - - return (I->key < I->imax) ? SUCCESS : FAILURE; -} - -static void saproxy_iter_get_data(zend_object_iterator *iter, zval ***data TSRMLS_DC) -{ - php_com_saproxy_iter *I = (php_com_saproxy_iter*)iter->data; - VARIANT v; - VARTYPE vt; - zval *return_value, **ptr_ptr; - SAFEARRAY *sa; - - I->indices[I->proxy->dimensions-1] = I->key; - - sa = V_ARRAY(&I->proxy->obj->v); - - if (FAILED(SafeArrayGetVartype(sa, &vt)) || vt == VT_EMPTY) { - vt = V_VT(&I->proxy->obj->v) & ~VT_ARRAY; - } - - VariantInit(&v); - if (vt == VT_VARIANT) { - SafeArrayGetElement(sa, I->indices, &v); - } else { - V_VT(&v) = vt; - SafeArrayGetElement(sa, I->indices, &v.lVal); - } - - MAKE_STD_ZVAL(return_value); - php_com_wrap_variant(return_value, &v, I->proxy->obj->code_page TSRMLS_CC); - VariantClear(&v); - - ptr_ptr = emalloc(sizeof(*ptr_ptr)); - *ptr_ptr = return_value; - *data = ptr_ptr; -} - -static int saproxy_iter_get_key(zend_object_iterator *iter, char **str_key, uint *str_key_len, - ulong *int_key TSRMLS_DC) -{ - php_com_saproxy_iter *I = (php_com_saproxy_iter*)iter->data; - - if (I->key == -1) { - return HASH_KEY_NON_EXISTANT; - } - *int_key = (ulong)I->key; - return HASH_KEY_IS_LONG; -} - -static int saproxy_iter_move_forwards(zend_object_iterator *iter TSRMLS_DC) -{ - php_com_saproxy_iter *I = (php_com_saproxy_iter*)iter->data; - - if (++I->key >= I->imax) { - I->key = -1; - return FAILURE; - } - return SUCCESS; -} - -static zend_object_iterator_funcs saproxy_iter_funcs = { - saproxy_iter_dtor, - saproxy_iter_valid, - saproxy_iter_get_data, - saproxy_iter_get_key, - saproxy_iter_move_forwards, - NULL -}; - - -zend_object_iterator *php_com_saproxy_iter_get(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC) -{ - php_com_saproxy *proxy = SA_FETCH(object); - php_com_saproxy_iter *I; - int i; - - if (by_ref) { - zend_error(E_ERROR, "An iterator cannot be used with foreach by reference"); - } - - I = ecalloc(1, sizeof(*I)); - I->iter.funcs = &saproxy_iter_funcs; - I->iter.data = I; - - I->proxy = proxy; - I->proxy_obj = object; - ZVAL_ADDREF(I->proxy_obj); - - I->indices = safe_emalloc(proxy->dimensions + 1, sizeof(LONG), 0); - for (i = 0; i < proxy->dimensions; i++) { - convert_to_long(proxy->indices[i]); - I->indices[i] = Z_LVAL_P(proxy->indices[i]); - } - - SafeArrayGetLBound(V_ARRAY(&proxy->obj->v), proxy->dimensions, &I->imin); - SafeArrayGetUBound(V_ARRAY(&proxy->obj->v), proxy->dimensions, &I->imax); - - I->key = I->imin; - - return &I->iter; -} - diff --git a/ext/com_dotnet/com_typeinfo.c b/ext/com_dotnet/com_typeinfo.c deleted file mode 100644 index 8da47d7787359..0000000000000 --- a/ext/com_dotnet/com_typeinfo.c +++ /dev/null @@ -1,603 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - | Harald Radi | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_ini.h" -#include "ext/standard/info.h" -#include "php_com_dotnet.h" -#include "php_com_dotnet_internal.h" - - -/* The search string can be either: - * a) a file name - * b) a CLSID, major, minor e.g. "{00000200-0000-0010-8000-00AA006D2EA4},2,0" - * c) a Type Library name e.g. "Microsoft OLE DB ActiveX Data Objects 1.0 Library" - */ -PHPAPI ITypeLib *php_com_load_typelib(char *search_string, int codepage TSRMLS_DC) -{ - ITypeLib *TL = NULL; - char *strtok_buf, *major, *minor; - CLSID clsid; - OLECHAR *p; - HRESULT hr; - - search_string = php_strtok_r(search_string, ",", &strtok_buf); - - if (search_string == NULL) { - return NULL; - } - - major = php_strtok_r(NULL, ",", &strtok_buf); - minor = php_strtok_r(NULL, ",", &strtok_buf); - - p = php_com_string_to_olestring(search_string, strlen(search_string), codepage TSRMLS_CC); - - if (SUCCEEDED(CLSIDFromString(p, &clsid))) { - WORD major_i = 1, minor_i = 0; - - /* pick up the major/minor numbers; if none specified, default to 1,0 */ - if (major && minor) { - major_i = (WORD)atoi(major); - minor_i = (WORD)atoi(minor); - } - - /* Load the TypeLib by GUID */ - hr = LoadRegTypeLib((REFGUID)&clsid, major_i, minor_i, LANG_NEUTRAL, &TL); - - /* if that failed, assumed that the GUID is actually a CLSID and - * attemp to get the library via an instance of that class */ - if (FAILED(hr) && (major == NULL || minor == NULL)) { - IDispatch *disp = NULL; - ITypeInfo *info = NULL; - int idx; - - if (SUCCEEDED(hr = CoCreateInstance(&clsid, NULL, CLSCTX_SERVER, &IID_IDispatch, (LPVOID*)&disp)) && - SUCCEEDED(hr = IDispatch_GetTypeInfo(disp, 0, LANG_NEUTRAL, &info))) { - hr = ITypeInfo_GetContainingTypeLib(info, &TL, &idx); - } - - if (info) { - ITypeInfo_Release(info); - } - if (disp) { - IDispatch_Release(disp); - } - } - } else { - /* Try to load it from a file; if it fails, do a really painful search of - * the registry */ - if (FAILED(LoadTypeLib(p, &TL))) { - HKEY hkey, hsubkey; - DWORD SubKeys, MaxSubKeyLength; - char *keyname; - unsigned int i, j; - DWORD VersionCount; - char version[20]; - char *libname; - DWORD libnamelen; - - if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CLASSES_ROOT, "TypeLib", 0, KEY_READ, &hkey) && - ERROR_SUCCESS == RegQueryInfoKey(hkey, NULL, NULL, NULL, &SubKeys, - &MaxSubKeyLength, NULL, NULL, NULL, NULL, NULL, NULL)) { - - MaxSubKeyLength++; /* make room for NUL */ - keyname = emalloc(MaxSubKeyLength); - libname = emalloc(strlen(search_string) + 1); - - for (i = 0; i < SubKeys && TL == NULL; i++) { - if (ERROR_SUCCESS == RegEnumKey(hkey, i, keyname, MaxSubKeyLength) && - ERROR_SUCCESS == RegOpenKeyEx(hkey, keyname, 0, KEY_READ, &hsubkey)) { - if (ERROR_SUCCESS == RegQueryInfoKey(hsubkey, NULL, NULL, NULL, &VersionCount, - NULL, NULL, NULL, NULL, NULL, NULL, NULL)) { - for (j = 0; j < VersionCount; j++) { - if (ERROR_SUCCESS != RegEnumKey(hsubkey, j, version, sizeof(version))) { - continue; - } - /* get the default value for this key and compare */ - libnamelen = strlen(search_string)+1; - if (ERROR_SUCCESS == RegQueryValue(hsubkey, version, libname, &libnamelen)) { - if (0 == stricmp(libname, search_string)) { - char *str = NULL; - int major, minor; - - /* fetch the GUID and add the version numbers */ - if (2 != sscanf(version, "%d.%d", &major, &minor)) { - major = 1; - minor = 0; - } - spprintf(&str, 0, "%s,%d,%d", keyname, major, minor); - /* recurse */ - TL = php_com_load_typelib(str, codepage TSRMLS_CC); - - efree(str); - break; - } - } - } - } - RegCloseKey(hsubkey); - } - } - RegCloseKey(hkey); - efree(keyname); - efree(libname); - } - } - } - - efree(p); - - return TL; -} - -/* Given a type-library, merge it into the current engine state */ -PHPAPI int php_com_import_typelib(ITypeLib *TL, int mode, int codepage TSRMLS_DC) -{ - int i, j, interfaces; - TYPEKIND pTKind; - ITypeInfo *TypeInfo; - VARDESC *pVarDesc; - UINT NameCount; - BSTR bstr_ids; - zend_constant c; - zval exists, results, value; - char *const_name; - - if (TL == NULL) { - return FAILURE; - } - - interfaces = ITypeLib_GetTypeInfoCount(TL); - for (i = 0; i < interfaces; i++) { - ITypeLib_GetTypeInfoType(TL, i, &pTKind); - if (pTKind == TKIND_ENUM) { - ITypeLib_GetTypeInfo(TL, i, &TypeInfo); - for (j = 0; ; j++) { - if (FAILED(ITypeInfo_GetVarDesc(TypeInfo, j, &pVarDesc))) { - break; - } - ITypeInfo_GetNames(TypeInfo, pVarDesc->memid, &bstr_ids, 1, &NameCount); - if (NameCount != 1) { - ITypeInfo_ReleaseVarDesc(TypeInfo, pVarDesc); - continue; - } - - const_name = php_com_olestring_to_string(bstr_ids, &c.name_len, codepage TSRMLS_CC); - c.name.s = zend_strndup(const_name, c.name_len); - efree(const_name); - c.name_len++; /* include NUL */ - SysFreeString(bstr_ids); - - /* sanity check for the case where the constant is already defined */ - if (zend_get_constant(c.name.s, c.name_len - 1, &exists TSRMLS_CC)) { - if (COMG(autoreg_verbose) && !compare_function(&results, &c.value, &exists TSRMLS_CC)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Type library constant %s is already defined", c.name); - } - free(c.name.s); - ITypeInfo_ReleaseVarDesc(TypeInfo, pVarDesc); - continue; - } - - /* register the constant */ - php_com_zval_from_variant(&value, pVarDesc->lpvarValue, codepage TSRMLS_CC); - if (Z_TYPE(value) == IS_LONG) { - c.flags = mode; - c.value.type = IS_LONG; - c.value.value.lval = Z_LVAL(value); - c.module_number = 0; - zend_register_constant(&c TSRMLS_CC); - } - ITypeInfo_ReleaseVarDesc(TypeInfo, pVarDesc); - } - ITypeInfo_Release(TypeInfo); - } - } - return SUCCESS; -} - -/* Type-library stuff */ -void php_com_typelibrary_dtor(void *pDest) -{ - ITypeLib **Lib = (ITypeLib**)pDest; - ITypeLib_Release(*Lib); -} - -PHPAPI ITypeLib *php_com_load_typelib_via_cache(char *search_string, - int codepage, int *cached TSRMLS_DC) -{ - ITypeLib **TLp; - ITypeLib *TL; - char *name_dup; - int l; - - l = strlen(search_string); - - if (zend_ts_hash_find(&php_com_typelibraries, search_string, l+1, - (void**)&TLp) == SUCCESS) { - *cached = 1; - /* add a reference for the caller */ - ITypeLib_AddRef(*TLp); - return *TLp; - } - - *cached = 0; - name_dup = estrndup(search_string, l); - TL = php_com_load_typelib(name_dup, codepage TSRMLS_CC); - efree(name_dup); - - if (TL) { - if (SUCCESS == zend_ts_hash_update(&php_com_typelibraries, - search_string, l+1, (void*)&TL, sizeof(ITypeLib*), NULL)) { - /* add a reference for the hash table */ - ITypeLib_AddRef(TL); - } - } - - return TL; -} - -ITypeInfo *php_com_locate_typeinfo(char *typelibname, php_com_dotnet_object *obj, char *dispname, int sink TSRMLS_DC) -{ - ITypeInfo *typeinfo = NULL; - ITypeLib *typelib = NULL; - int gotguid = 0; - GUID iid; - - if (obj) { - if (dispname == NULL && sink) { - IProvideClassInfo2 *pci2; - IProvideClassInfo *pci; - - if (SUCCEEDED(IDispatch_QueryInterface(V_DISPATCH(&obj->v), &IID_IProvideClassInfo2, (void**)&pci2))) { - gotguid = SUCCEEDED(IProvideClassInfo2_GetGUID(pci2, GUIDKIND_DEFAULT_SOURCE_DISP_IID, &iid)); - IProvideClassInfo2_Release(pci2); - } - if (!gotguid && SUCCEEDED(IDispatch_QueryInterface(V_DISPATCH(&obj->v), &IID_IProvideClassInfo, (void**)&pci))) { - /* examine the available interfaces */ - /* TODO: write some code here */ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "IProvideClassInfo: this code not yet written!"); - IProvideClassInfo_Release(pci); - } - } else if (dispname == NULL) { - if (obj->typeinfo) { - ITypeInfo_AddRef(obj->typeinfo); - return obj->typeinfo; - } else { - IDispatch_GetTypeInfo(V_DISPATCH(&obj->v), 0, LANG_NEUTRAL, &typeinfo); - if (typeinfo) { - return typeinfo; - } - } - } else if (dispname && obj->typeinfo) { - unsigned int idx; - /* get the library from the object; the rest will be dealt with later */ - ITypeInfo_GetContainingTypeLib(obj->typeinfo, &typelib, &idx); - } else if (typelibname == NULL) { - IDispatch_GetTypeInfo(V_DISPATCH(&obj->v), 0, LANG_NEUTRAL, &typeinfo); - if (dispname) { - unsigned int idx; - /* get the library from the object; the rest will be dealt with later */ - ITypeInfo_GetContainingTypeLib(typeinfo, &typelib, &idx); - - if (typelib) { - ITypeInfo_Release(typeinfo); - typeinfo = NULL; - } - } - } - } else if (typelibname) { - /* Fetch the typelibrary and use that to look things up */ - typelib = php_com_load_typelib(typelibname, obj->code_page TSRMLS_CC); - } - - if (!gotguid && dispname && typelib) { - unsigned short cfound; - MEMBERID memid; - OLECHAR *olename = php_com_string_to_olestring(dispname, strlen(dispname), CP_ACP TSRMLS_CC); - - cfound = 1; - if (FAILED(ITypeLib_FindName(typelib, olename, 0, &typeinfo, &memid, &cfound)) || cfound == 0) { - CLSID coclass; - ITypeInfo *coinfo; - - /* assume that it might be a progid instead */ - if (SUCCEEDED(CLSIDFromProgID(olename, &coclass)) && - SUCCEEDED(ITypeLib_GetTypeInfoOfGuid(typelib, &coclass, &coinfo))) { - - /* enumerate implemented interfaces and pick the one as indicated by sink */ - TYPEATTR *attr; - int i; - - ITypeInfo_GetTypeAttr(coinfo, &attr); - - for (i = 0; i < attr->cImplTypes; i++) { - HREFTYPE rt; - int tf; - - if (FAILED(ITypeInfo_GetImplTypeFlags(coinfo, i, &tf))) { - continue; - } - - if ((sink && tf == (IMPLTYPEFLAG_FSOURCE|IMPLTYPEFLAG_FDEFAULT)) || - (!sink && (tf & IMPLTYPEFLAG_FSOURCE) == 0)) { - - /* flags match what we are looking for */ - - if (SUCCEEDED(ITypeInfo_GetRefTypeOfImplType(coinfo, i, &rt))) - if (SUCCEEDED(ITypeInfo_GetRefTypeInfo(coinfo, rt, &typeinfo))) - break; - - } - } - - ITypeInfo_ReleaseTypeAttr(coinfo, attr); - ITypeInfo_Release(coinfo); - } - } - - - efree(olename); - } else if (gotguid) { - ITypeLib_GetTypeInfoOfGuid(typelib, &iid, &typeinfo); - } - - if (typelib) { - ITypeLib_Release(typelib); - } - - return typeinfo; -} - -static const struct { - VARTYPE vt; - const char *name; -} vt_names[] = { - { VT_NULL, "VT_NULL" }, - { VT_EMPTY, "VT_EMPTY" }, - { VT_UI1, "VT_UI1" }, - { VT_I2, "VT_I2" }, - { VT_I4, "VT_I4" }, - { VT_R4, "VT_R4" }, - { VT_R8, "VT_R8" }, - { VT_BOOL, "VT_BOOL" }, - { VT_ERROR, "VT_ERROR" }, - { VT_CY, "VT_CY" }, - { VT_DATE, "VT_DATE" }, - { VT_BSTR, "VT_BSTR" }, - { VT_DECIMAL, "VT_DECIMAL" }, - { VT_UNKNOWN, "VT_UNKNOWN" }, - { VT_DISPATCH, "VT_DISPATCH" }, - { VT_VARIANT, "VT_VARIANT" }, - { VT_I1, "VT_I1" }, - { VT_UI2, "VT_UI2" }, - { VT_UI4, "VT_UI4" }, - { VT_INT, "VT_INT" }, - { VT_UINT, "VT_UINT" }, - { VT_ARRAY, "VT_ARRAY" }, - { VT_BYREF, "VT_BYREF" }, - { VT_VOID, "VT_VOID" }, - { VT_PTR, "VT_PTR" }, - { VT_HRESULT, "VT_HRESULT" }, - { VT_SAFEARRAY, "VT_SAFEARRAY" }, - { 0, NULL } -}; - -static inline const char *vt_to_string(VARTYPE vt) -{ - int i; - for (i = 0; vt_names[i].name != NULL; i++) { - if (vt_names[i].vt == vt) - return vt_names[i].name; - } - return "?"; -} - -static char *php_com_string_from_clsid(const CLSID *clsid, int codepage TSRMLS_DC) -{ - LPOLESTR ole_clsid; - char *clsid_str; - - StringFromCLSID(clsid, &ole_clsid); - clsid_str = php_com_olestring_to_string(ole_clsid, NULL, codepage TSRMLS_CC); - LocalFree(ole_clsid); - - return clsid_str; -} - - -int php_com_process_typeinfo(ITypeInfo *typeinfo, HashTable *id_to_name, int printdef, GUID *guid, int codepage TSRMLS_DC) -{ - TYPEATTR *attr; - FUNCDESC *func; - int i; - OLECHAR *olename; - char *ansiname = NULL; - unsigned int ansinamelen; - int ret = 0; - - if (FAILED(ITypeInfo_GetTypeAttr(typeinfo, &attr))) { - return 0; - } - - /* verify that it is suitable */ - if (id_to_name == NULL || attr->typekind == TKIND_DISPATCH) { - - if (guid) { - memcpy(guid, &attr->guid, sizeof(GUID)); - } - - if (printdef) { - char *guidstring; - - ITypeInfo_GetDocumentation(typeinfo, MEMBERID_NIL, &olename, NULL, NULL, NULL); - ansiname = php_com_olestring_to_string(olename, &ansinamelen, codepage TSRMLS_CC); - SysFreeString(olename); - - guidstring = php_com_string_from_clsid(&attr->guid, codepage TSRMLS_CC); - php_printf("class %s { /* GUID=%s */\n", ansiname, guidstring); - efree(guidstring); - - efree(ansiname); - } - - if (id_to_name) { - zend_hash_init(id_to_name, 0, NULL, ZVAL_PTR_DTOR, 0); - } - - /* So we've got the dispatch interface; lets list the event methods */ - for (i = 0; i < attr->cFuncs; i++) { - zval *tmp; - DISPID lastid = 0; /* for props */ - int isprop; - - if (FAILED(ITypeInfo_GetFuncDesc(typeinfo, i, &func))) - break; - - isprop = (func->invkind & DISPATCH_PROPERTYGET || func->invkind & DISPATCH_PROPERTYPUT); - - if (!isprop || lastid != func->memid) { - - lastid = func->memid; - - ITypeInfo_GetDocumentation(typeinfo, func->memid, &olename, NULL, NULL, NULL); - ansiname = php_com_olestring_to_string(olename, &ansinamelen, codepage TSRMLS_CC); - SysFreeString(olename); - - if (printdef) { - int j; - char *funcdesc; - unsigned int funcdesclen, cnames = 0; - BSTR *names; - - names = (BSTR*)safe_emalloc((func->cParams + 1), sizeof(BSTR), 0); - - ITypeInfo_GetNames(typeinfo, func->memid, names, func->cParams + 1, &cnames); - /* first element is the function name */ - SysFreeString(names[0]); - - php_printf("\t/* DISPID=%d */\n", func->memid); - - if (func->elemdescFunc.tdesc.vt != VT_VOID) { - php_printf("\t/* %s [%d] */\n", - vt_to_string(func->elemdescFunc.tdesc.vt), - func->elemdescFunc.tdesc.vt - ); - } - - if (isprop) { - - ITypeInfo_GetDocumentation(typeinfo, func->memid, NULL, &olename, NULL, NULL); - if (olename) { - funcdesc = php_com_olestring_to_string(olename, &funcdesclen, codepage TSRMLS_CC); - SysFreeString(olename); - php_printf("\t/* %s */\n", funcdesc); - efree(funcdesc); - } - - php_printf("\tvar $%s;\n\n", ansiname); - - } else { - /* a function */ - - php_printf("\tfunction %s(\n", ansiname); - - for (j = 0; j < func->cParams; j++) { - ELEMDESC *elem = &func->lprgelemdescParam[j]; - - php_printf("\t\t/* %s [%d] ", vt_to_string(elem->tdesc.vt), elem->tdesc.vt); - - if (elem->paramdesc.wParamFlags & PARAMFLAG_FIN) - php_printf("[in]"); - if (elem->paramdesc.wParamFlags & PARAMFLAG_FOUT) - php_printf("[out]"); - - if (elem->tdesc.vt == VT_PTR) { - /* what does it point to ? */ - php_printf(" --> %s [%d] ", - vt_to_string(elem->tdesc.lptdesc->vt), - elem->tdesc.lptdesc->vt - ); - } - - /* when we handle prop put and get, this will look nicer */ - if (j+1 < (int)cnames) { - funcdesc = php_com_olestring_to_string(names[j+1], &funcdesclen, codepage TSRMLS_CC); - SysFreeString(names[j+1]); - } else { - funcdesc = "???"; - } - - php_printf(" */ %s%s%c\n", - elem->tdesc.vt == VT_PTR ? "&$" : "$", - funcdesc, - j == func->cParams - 1 ? ' ' : ',' - ); - - if (j+1 < (int)cnames) { - efree(funcdesc); - } - } - - php_printf("\t\t)\n\t{\n"); - - ITypeInfo_GetDocumentation(typeinfo, func->memid, NULL, &olename, NULL, NULL); - if (olename) { - funcdesc = php_com_olestring_to_string(olename, &funcdesclen, codepage TSRMLS_CC); - SysFreeString(olename); - php_printf("\t\t/* %s */\n", funcdesc); - efree(funcdesc); - } - - php_printf("\t}\n"); - } - - efree(names); - } - - if (id_to_name) { - zend_str_tolower(ansiname, ansinamelen); - MAKE_STD_ZVAL(tmp); - ZVAL_STRINGL(tmp, ansiname, ansinamelen, 0); - zend_hash_index_update(id_to_name, func->memid, (void*)&tmp, sizeof(zval *), NULL); - } - } - ITypeInfo_ReleaseFuncDesc(typeinfo, func); - } - - if (printdef) { - php_printf("}\n"); - } - - ret = 1; - } else { - zend_error(E_WARNING, "That's not a dispatchable interface!! type kind = %08x", attr->typekind); - } - - ITypeInfo_ReleaseTypeAttr(typeinfo, attr); - - return ret; -} - - diff --git a/ext/com_dotnet/com_variant.c b/ext/com_dotnet/com_variant.c deleted file mode 100644 index 8248b1f987fc2..0000000000000 --- a/ext/com_dotnet/com_variant.c +++ /dev/null @@ -1,1077 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_ini.h" -#include "ext/standard/info.h" -#include "php_com_dotnet.h" -#include "php_com_dotnet_internal.h" - -/* create an automation SafeArray from a PHP array. - * Only creates a single-dimensional array of variants. - * The keys of the PHP hash MUST be numeric. If the array - * is sparse, then the gaps will be filled with NULL variants */ -static void safe_array_from_zval(VARIANT *v, zval *z, int codepage TSRMLS_DC) -{ - SAFEARRAY *sa = NULL; - SAFEARRAYBOUND bound; - HashPosition pos; - int keytype; - char *strindex; - int strindexlen; - long intindex = -1; - long max_index = 0; - VARIANT *va; - zval **item; - - /* find the largest array index, and assert that all keys are integers */ - zend_hash_internal_pointer_reset_ex(HASH_OF(z), &pos); - for (;; zend_hash_move_forward_ex(HASH_OF(z), &pos)) { - - keytype = zend_hash_get_current_key_ex(HASH_OF(z), &strindex, &strindexlen, &intindex, 0, &pos); - - if (HASH_KEY_IS_STRING == keytype) { - goto bogus; - } else if (HASH_KEY_NON_EXISTANT == keytype) { - break; - } - if (intindex > max_index) { - max_index = intindex; - } - } - - /* allocate the structure */ - bound.lLbound = 0; - bound.cElements = intindex + 1; - sa = SafeArrayCreate(VT_VARIANT, 1, &bound); - - /* get a lock on the array itself */ - SafeArrayAccessData(sa, &va); - va = (VARIANT*)sa->pvData; - - /* now fill it in */ - zend_hash_internal_pointer_reset_ex(HASH_OF(z), &pos); - for (;; zend_hash_move_forward_ex(HASH_OF(z), &pos)) { - if (FAILURE == zend_hash_get_current_data_ex(HASH_OF(z), (void**)&item, &pos)) { - break; - } - zend_hash_get_current_key_ex(HASH_OF(z), &strindex, &strindexlen, &intindex, 0, &pos); - php_com_variant_from_zval(&va[intindex], *item, codepage TSRMLS_CC); - } - - /* Unlock it and stuff it into our variant */ - SafeArrayUnaccessData(sa); - V_VT(v) = VT_ARRAY|VT_VARIANT; - V_ARRAY(v) = sa; - - return; - -bogus: - php_error_docref(NULL TSRMLS_CC, E_WARNING, "COM: converting from PHP array to VARIANT array; only arrays with numeric keys are allowed"); - - V_VT(v) = VT_NULL; - - if (sa) { - SafeArrayUnlock(sa); - SafeArrayDestroy(sa); - } -} - -PHPAPI void php_com_variant_from_zval(VARIANT *v, zval *z, int codepage TSRMLS_DC) -{ - OLECHAR *olestring; - php_com_dotnet_object *obj; - - switch (Z_TYPE_P(z)) { - case IS_NULL: - V_VT(v) = VT_NULL; - break; - - case IS_BOOL: - V_VT(v) = VT_BOOL; - V_BOOL(v) = Z_BVAL_P(z) ? VARIANT_TRUE : VARIANT_FALSE; - break; - - case IS_OBJECT: - if (php_com_is_valid_object(z TSRMLS_CC)) { - obj = CDNO_FETCH(z); - if (V_VT(&obj->v) == VT_DISPATCH) { - /* pass the underlying object */ - V_VT(v) = VT_DISPATCH; - if (V_DISPATCH(&obj->v)) { - IDispatch_AddRef(V_DISPATCH(&obj->v)); - } - V_DISPATCH(v) = V_DISPATCH(&obj->v); - } else { - /* pass the variant by reference */ - V_VT(v) = VT_VARIANT | VT_BYREF; - V_VARIANTREF(v) = &obj->v; - } - } else { - /* export the PHP object using our COM wrapper */ - V_VT(v) = VT_DISPATCH; - V_DISPATCH(v) = php_com_wrapper_export(z TSRMLS_CC); - } - break; - - case IS_ARRAY: - /* map as safe array */ - safe_array_from_zval(v, z, codepage TSRMLS_CC); - break; - - case IS_LONG: - V_VT(v) = VT_I4; - V_I4(v) = Z_LVAL_P(z); - break; - - case IS_DOUBLE: - V_VT(v) = VT_R8; - V_R8(v) = Z_DVAL_P(z); - break; - - case IS_STRING: - V_VT(v) = VT_BSTR; - olestring = php_com_string_to_olestring(Z_STRVAL_P(z), Z_STRLEN_P(z), codepage TSRMLS_CC); - V_BSTR(v) = SysAllocStringByteLen((char*)olestring, Z_STRLEN_P(z) * sizeof(OLECHAR)); - efree(olestring); - break; - - case IS_UNICODE: - V_VT(v) = VT_BSTR; - V_BSTR(v) = SysAllocString(Z_USTRVAL_P(z)); - break; - - case IS_RESOURCE: - case IS_CONSTANT: - case IS_CONSTANT_ARRAY: - default: - V_VT(v) = VT_NULL; - break; - } -} - -PHPAPI int php_com_zval_from_variant(zval *z, VARIANT *v, int codepage TSRMLS_DC) -{ - OLECHAR *olestring = NULL; - int ret = SUCCESS; - - switch (V_VT(v)) { - case VT_EMPTY: - case VT_NULL: - case VT_VOID: - ZVAL_NULL(z); - break; - case VT_UI1: - ZVAL_LONG(z, (long)V_UI1(v)); - break; - case VT_I1: - ZVAL_LONG(z, (long)V_I1(v)); - break; - case VT_UI2: - ZVAL_LONG(z, (long)V_UI2(v)); - break; - case VT_I2: - ZVAL_LONG(z, (long)V_I2(v)); - break; - case VT_UI4: /* TODO: promote to double if large? */ - ZVAL_LONG(z, (long)V_UI4(v)); - break; - case VT_I4: - ZVAL_LONG(z, (long)V_I4(v)); - break; - case VT_INT: - ZVAL_LONG(z, V_INT(v)); - break; - case VT_UINT: /* TODO: promote to double if large? */ - ZVAL_LONG(z, (long)V_UINT(v)); - break; - case VT_R4: - ZVAL_DOUBLE(z, (double)V_R4(v)); - break; - case VT_R8: - ZVAL_DOUBLE(z, V_R8(v)); - break; - case VT_BOOL: - ZVAL_BOOL(z, V_BOOL(v) ? 1 : 0); - break; - case VT_BSTR: - if (V_BSTR(v)) { - if (UG(unicode)) { - ZVAL_UNICODE(z, V_BSTR(v), 1); - } else { - Z_TYPE_P(z) = IS_STRING; - Z_STRVAL_P(z) = php_com_olestring_to_string(V_BSTR(v), - &Z_STRLEN_P(z), codepage TSRMLS_CC); - } - } - break; - case VT_UNKNOWN: - if (V_UNKNOWN(v) != NULL) { - IDispatch *disp; - - if (SUCCEEDED(IUnknown_QueryInterface(V_UNKNOWN(v), &IID_IDispatch, &disp))) { - php_com_wrap_dispatch(z, disp, codepage TSRMLS_CC); - IDispatch_Release(disp); - } else { - ret = FAILURE; - } - } - break; - - case VT_DISPATCH: - if (V_DISPATCH(v) != NULL) { - php_com_wrap_dispatch(z, V_DISPATCH(v), codepage TSRMLS_CC); - } - break; - - case VT_VARIANT: - /* points to another variant */ - return php_com_zval_from_variant(z, V_VARIANTREF(v), codepage TSRMLS_CC); - - default: - php_com_wrap_variant(z, v, codepage TSRMLS_CC); - } - - if (olestring) { - efree(olestring); - } - - if (ret == FAILURE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "variant->zval: conversion from 0x%x ret=%d", V_VT(v), ret); - } - - return ret; -} - - -PHPAPI int php_com_copy_variant(VARIANT *dstvar, VARIANT *srcvar TSRMLS_DC) -{ - int ret = SUCCESS; - - switch (V_VT(dstvar) & ~VT_BYREF) { - case VT_EMPTY: - case VT_NULL: - case VT_VOID: - /* should not be possible */ - break; - - case VT_UI1: - if (V_VT(dstvar) & VT_BYREF) { - *V_UI1REF(dstvar) = V_UI1(srcvar); - } else { - V_UI1(dstvar) = V_UI1(srcvar); - } - break; - - case VT_I1: - if (V_VT(dstvar) & VT_BYREF) { - *V_I1REF(dstvar) = V_I1(srcvar); - } else { - V_I1(dstvar) = V_I1(srcvar); - } - break; - - case VT_UI2: - if (V_VT(dstvar) & VT_BYREF) { - *V_UI2REF(dstvar) = V_UI2(srcvar); - } else { - V_UI2(dstvar) = V_UI2(srcvar); - } - break; - - case VT_I2: - if (V_VT(dstvar) & VT_BYREF) { - *V_I2REF(dstvar) = V_I2(srcvar); - } else { - V_I2(dstvar) = V_I2(srcvar); - } - break; - - case VT_UI4: - if (V_VT(dstvar) & VT_BYREF) { - *V_UI4REF(dstvar) = V_UI4(srcvar); - } else { - V_UI4(dstvar) = V_UI4(srcvar); - } - break; - - case VT_I4: - if (V_VT(dstvar) & VT_BYREF) { - *V_I4REF(dstvar) = V_I4(srcvar); - } else { - V_I4(dstvar) = V_I4(srcvar); - } - break; - - case VT_INT: - if (V_VT(dstvar) & VT_BYREF) { - *V_INTREF(dstvar) = V_INT(srcvar); - } else { - V_INT(dstvar) = V_INT(srcvar); - } - break; - - case VT_UINT: - if (V_VT(dstvar) & VT_BYREF) { - *V_UINTREF(dstvar) = V_UINT(srcvar); - } else { - V_UINT(dstvar) = V_UINT(srcvar); - } - break; - - case VT_R4: - if (V_VT(dstvar) & VT_BYREF) { - *V_R4REF(dstvar) = V_R4(srcvar); - } else { - V_R4(dstvar) = V_R4(srcvar); - } - break; - - case VT_R8: - if (V_VT(dstvar) & VT_BYREF) { - *V_R8REF(dstvar) = V_R8(srcvar); - } else { - V_R8(dstvar) = V_R8(srcvar); - } - break; - - case VT_BOOL: - if (V_VT(dstvar) & VT_BYREF) { - *V_BOOLREF(dstvar) = V_BOOL(srcvar); - } else { - V_BOOL(dstvar) = V_BOOL(srcvar); - } - break; - - case VT_BSTR: - if (V_VT(dstvar) & VT_BYREF) { - *V_BSTRREF(dstvar) = V_BSTR(srcvar); - } else { - V_BSTR(dstvar) = V_BSTR(srcvar); - } - break; - - case VT_UNKNOWN: - if (V_VT(dstvar) & VT_BYREF) { - *V_UNKNOWNREF(dstvar) = V_UNKNOWN(srcvar); - } else { - V_UNKNOWN(dstvar) = V_UNKNOWN(srcvar); - } - break; - - case VT_DISPATCH: - if (V_VT(dstvar) & VT_BYREF) { - *V_DISPATCHREF(dstvar) = V_DISPATCH(srcvar); - } else { - V_DISPATCH(dstvar) = V_DISPATCH(srcvar); - } - break; - - case VT_VARIANT: - return php_com_copy_variant(V_VARIANTREF(dstvar), srcvar TSRMLS_CC); - - default: - php_error_docref(NULL TSRMLS_CC, E_WARNING, "variant->variant: failed to copy from 0x%x to 0x%x", V_VT(dstvar), V_VT(srcvar)); - ret = FAILURE; - } - return ret; -} - -/* {{{ com_variant_create_instance - ctor for new VARIANT() */ -PHP_FUNCTION(com_variant_create_instance) -{ - /* VARTYPE == unsigned short */ long vt = VT_EMPTY; - long codepage = CP_ACP; - zval *object = getThis(); - php_com_dotnet_object *obj; - zval *zvalue = NULL; - HRESULT res; - - if (ZEND_NUM_ARGS() == 0) { - /* just leave things as-is - an empty variant */ - return; - } - - obj = CDNO_FETCH(object); - - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - "z!|ll", &zvalue, &vt, &codepage)) { - php_com_throw_exception(E_INVALIDARG, "Invalid arguments" TSRMLS_CC); - return; - } - - php_com_initialize(TSRMLS_C); - if (ZEND_NUM_ARGS() == 3) { - obj->code_page = codepage; - } - - if (zvalue) { - php_com_variant_from_zval(&obj->v, zvalue, obj->code_page TSRMLS_CC); - } - - /* Only perform conversion if variant not already of type passed */ - if ((ZEND_NUM_ARGS() >= 2) && (vt != V_VT(&obj->v))) { - - /* If already an array and VT_ARRAY is passed then: - - if only VT_ARRAY passed then do not perform a conversion - - if VT_ARRAY plus other type passed then perform conversion - but will probably fail (origional behavior) - */ - if ((vt & VT_ARRAY) && (V_VT(&obj->v) & VT_ARRAY)) { - long orig_vt = vt; - - vt &= ~VT_ARRAY; - if (vt) { - vt = orig_vt; - } - } - - if (vt) { - res = VariantChangeType(&obj->v, &obj->v, 0, (VARTYPE)vt); - - if (FAILED(res)) { - char *werr, *msg; - - werr = php_win_err(res); - spprintf(&msg, 0, "Variant type conversion failed: %s", werr); - LocalFree(werr); - - php_com_throw_exception(res, msg TSRMLS_CC); - efree(msg); - } - } - } - - if (V_VT(&obj->v) != VT_DISPATCH && obj->typeinfo) { - ITypeInfo_Release(obj->typeinfo); - obj->typeinfo = NULL; - } -} -/* }}} */ - -/* {{{ proto void variant_set(object variant, mixed value) - Assigns a new value for a variant object */ -PHP_FUNCTION(variant_set) -{ - zval *zobj, *zvalue = NULL; - php_com_dotnet_object *obj; - - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - "Oz!", &zobj, php_com_variant_class_entry, &zvalue)) { - return; - } - - obj = CDNO_FETCH(zobj); - - /* dtor the old value */ - if (obj->typeinfo) { - ITypeInfo_Release(obj->typeinfo); - obj->typeinfo = NULL; - } - if (obj->sink_dispatch) { - php_com_object_enable_event_sink(obj, FALSE TSRMLS_CC); - IDispatch_Release(obj->sink_dispatch); - obj->sink_dispatch = NULL; - } - - VariantClear(&obj->v); - - php_com_variant_from_zval(&obj->v, zvalue, obj->code_page TSRMLS_CC); - /* remember we modified this variant */ - obj->modified = 1; -} -/* }}} */ - -enum variant_binary_opcode { - VOP_ADD, VOP_CAT, VOP_SUB, VOP_MUL, VOP_AND, VOP_DIV, - VOP_EQV, VOP_IDIV, VOP_IMP, VOP_MOD, VOP_OR, VOP_POW, - VOP_XOR -}; - -enum variant_unary_opcode { - VOP_ABS, VOP_FIX, VOP_INT, VOP_NEG, VOP_NOT -}; - -static void variant_binary_operation(enum variant_binary_opcode op, INTERNAL_FUNCTION_PARAMETERS) /* {{{ */ -{ - VARIANT vres; - VARIANT left_val, right_val; - VARIANT *vleft = NULL, *vright = NULL; - zval *zleft = NULL, *zright = NULL; - php_com_dotnet_object *obj; - HRESULT result; - int codepage = CP_ACP; - - VariantInit(&left_val); - VariantInit(&right_val); - VariantInit(&vres); - - if (SUCCESS == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, - ZEND_NUM_ARGS() TSRMLS_CC, "OO", &zleft, php_com_variant_class_entry, - &zright, php_com_variant_class_entry)) { - obj = CDNO_FETCH(zleft); - vleft = &obj->v; - obj = CDNO_FETCH(zright); - vright = &obj->v; - } else if (SUCCESS == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, - ZEND_NUM_ARGS() TSRMLS_CC, "Oz!", &zleft, php_com_variant_class_entry, - &zright)) { - obj = CDNO_FETCH(zleft); - vleft = &obj->v; - vright = &right_val; - php_com_variant_from_zval(vright, zright, codepage TSRMLS_CC); - } else if (SUCCESS == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, - ZEND_NUM_ARGS() TSRMLS_CC, "z!O", &zleft, &zright, php_com_variant_class_entry)) { - obj = CDNO_FETCH(zright); - vright = &obj->v; - vleft = &left_val; - php_com_variant_from_zval(vleft, zleft, codepage TSRMLS_CC); - } else if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - "z!z!", &zleft, &zright)) { - - vleft = &left_val; - php_com_variant_from_zval(vleft, zleft, codepage TSRMLS_CC); - - vright = &right_val; - php_com_variant_from_zval(vright, zright, codepage TSRMLS_CC); - - } else { - return; - } - - switch (op) { - case VOP_ADD: - result = VarAdd(vleft, vright, &vres); - break; - case VOP_CAT: - result = VarCat(vleft, vright, &vres); - break; - case VOP_SUB: - result = VarSub(vleft, vright, &vres); - break; - case VOP_MUL: - result = VarMul(vleft, vright, &vres); - break; - case VOP_AND: - result = VarAnd(vleft, vright, &vres); - break; - case VOP_DIV: - result = VarDiv(vleft, vright, &vres); - break; - case VOP_EQV: - result = VarEqv(vleft, vright, &vres); - break; - case VOP_IDIV: - result = VarIdiv(vleft, vright, &vres); - break; - case VOP_IMP: - result = VarImp(vleft, vright, &vres); - break; - case VOP_MOD: - result = VarMod(vleft, vright, &vres); - break; - case VOP_OR: - result = VarOr(vleft, vright, &vres); - break; - case VOP_POW: - result = VarPow(vleft, vright, &vres); - break; - case VOP_XOR: - result = VarXor(vleft, vright, &vres); - break; - } - - if (SUCCEEDED(result)) { - php_com_wrap_variant(return_value, &vres, codepage TSRMLS_CC); - } else { - php_com_throw_exception(result, NULL TSRMLS_CC); - } - - VariantClear(&vres); - VariantClear(&left_val); - VariantClear(&right_val); -} -/* }}} */ - -/* {{{ proto mixed variant_add(mixed left, mixed right) - "Adds" two variant values together and returns the result */ -PHP_FUNCTION(variant_add) -{ - variant_binary_operation(VOP_ADD, INTERNAL_FUNCTION_PARAM_PASSTHRU); -} -/* }}} */ - -/* {{{ proto mixed variant_cat(mixed left, mixed right) - concatenates two variant values together and returns the result */ -PHP_FUNCTION(variant_cat) -{ - variant_binary_operation(VOP_CAT, INTERNAL_FUNCTION_PARAM_PASSTHRU); -} -/* }}} */ - -/* {{{ proto mixed variant_sub(mixed left, mixed right) - subtracts the value of the right variant from the left variant value and returns the result */ -PHP_FUNCTION(variant_sub) -{ - variant_binary_operation(VOP_SUB, INTERNAL_FUNCTION_PARAM_PASSTHRU); -} -/* }}} */ - -/* {{{ proto mixed variant_mul(mixed left, mixed right) - multiplies the values of the two variants and returns the result */ -PHP_FUNCTION(variant_mul) -{ - variant_binary_operation(VOP_MUL, INTERNAL_FUNCTION_PARAM_PASSTHRU); -} -/* }}} */ - -/* {{{ proto mixed variant_and(mixed left, mixed right) - performs a bitwise AND operation between two variants and returns the result */ -PHP_FUNCTION(variant_and) -{ - variant_binary_operation(VOP_AND, INTERNAL_FUNCTION_PARAM_PASSTHRU); -} -/* }}} */ - -/* {{{ proto mixed variant_div(mixed left, mixed right) - Returns the result from dividing two variants */ -PHP_FUNCTION(variant_div) -{ - variant_binary_operation(VOP_DIV, INTERNAL_FUNCTION_PARAM_PASSTHRU); -} -/* }}} */ - -/* {{{ proto mixed variant_eqv(mixed left, mixed right) - Performs a bitwise equivalence on two variants */ -PHP_FUNCTION(variant_eqv) -{ - variant_binary_operation(VOP_EQV, INTERNAL_FUNCTION_PARAM_PASSTHRU); -} -/* }}} */ - -/* {{{ proto mixed variant_idiv(mixed left, mixed right) - Converts variants to integers and then returns the result from dividing them */ -PHP_FUNCTION(variant_idiv) -{ - variant_binary_operation(VOP_IDIV, INTERNAL_FUNCTION_PARAM_PASSTHRU); -} -/* }}} */ - -/* {{{ proto mixed variant_imp(mixed left, mixed right) - Performs a bitwise implication on two variants */ -PHP_FUNCTION(variant_imp) -{ - variant_binary_operation(VOP_IMP, INTERNAL_FUNCTION_PARAM_PASSTHRU); -} -/* }}} */ - -/* {{{ proto mixed variant_mod(mixed left, mixed right) - Divides two variants and returns only the remainder */ -PHP_FUNCTION(variant_mod) -{ - variant_binary_operation(VOP_MOD, INTERNAL_FUNCTION_PARAM_PASSTHRU); -} -/* }}} */ - -/* {{{ proto mixed variant_or(mixed left, mixed right) - Performs a logical disjunction on two variants */ -PHP_FUNCTION(variant_or) -{ - variant_binary_operation(VOP_OR, INTERNAL_FUNCTION_PARAM_PASSTHRU); -} -/* }}} */ - -/* {{{ proto mixed variant_pow(mixed left, mixed right) - Returns the result of performing the power function with two variants */ -PHP_FUNCTION(variant_pow) -{ - variant_binary_operation(VOP_POW, INTERNAL_FUNCTION_PARAM_PASSTHRU); -} -/* }}} */ - -/* {{{ proto mixed variant_xor(mixed left, mixed right) - Performs a logical exclusion on two variants */ -PHP_FUNCTION(variant_xor) -{ - variant_binary_operation(VOP_XOR, INTERNAL_FUNCTION_PARAM_PASSTHRU); -} -/* }}} */ - -static void variant_unary_operation(enum variant_unary_opcode op, INTERNAL_FUNCTION_PARAMETERS) /* {{{ */ -{ - VARIANT vres; - VARIANT left_val; - VARIANT *vleft = NULL; - zval *zleft = NULL; - php_com_dotnet_object *obj; - HRESULT result; - int codepage = CP_ACP; - - VariantInit(&left_val); - VariantInit(&vres); - - if (SUCCESS == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, - ZEND_NUM_ARGS() TSRMLS_CC, "O", &zleft, php_com_variant_class_entry)) { - obj = CDNO_FETCH(zleft); - vleft = &obj->v; - } else if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - "z!", &zleft)) { - vleft = &left_val; - php_com_variant_from_zval(vleft, zleft, codepage TSRMLS_CC); - } else { - return; - } - - switch (op) { - case VOP_ABS: - result = VarAbs(vleft, &vres); - break; - case VOP_FIX: - result = VarFix(vleft, &vres); - break; - case VOP_INT: - result = VarInt(vleft, &vres); - break; - case VOP_NEG: - result = VarNeg(vleft, &vres); - break; - case VOP_NOT: - result = VarNot(vleft, &vres); - break; - } - - if (SUCCEEDED(result)) { - php_com_wrap_variant(return_value, &vres, codepage TSRMLS_CC); - } else { - php_com_throw_exception(result, NULL TSRMLS_CC); - } - - VariantClear(&vres); - VariantClear(&left_val); -} -/* }}} */ - -/* {{{ proto mixed variant_abs(mixed left) - Returns the absolute value of a variant */ -PHP_FUNCTION(variant_abs) -{ - variant_unary_operation(VOP_ABS, INTERNAL_FUNCTION_PARAM_PASSTHRU); -} -/* }}} */ - -/* {{{ proto mixed variant_fix(mixed left) - Returns the integer part ? of a variant */ -PHP_FUNCTION(variant_fix) -{ - variant_unary_operation(VOP_FIX, INTERNAL_FUNCTION_PARAM_PASSTHRU); -} -/* }}} */ - -/* {{{ proto mixed variant_int(mixed left) - Returns the integer portion of a variant */ -PHP_FUNCTION(variant_int) -{ - variant_unary_operation(VOP_INT, INTERNAL_FUNCTION_PARAM_PASSTHRU); -} -/* }}} */ - -/* {{{ proto mixed variant_neg(mixed left) - Performs logical negation on a variant */ -PHP_FUNCTION(variant_neg) -{ - variant_unary_operation(VOP_NEG, INTERNAL_FUNCTION_PARAM_PASSTHRU); -} -/* }}} */ - -/* {{{ proto mixed variant_not(mixed left) - Performs bitwise not negation on a variant */ -PHP_FUNCTION(variant_not) -{ - variant_unary_operation(VOP_NOT, INTERNAL_FUNCTION_PARAM_PASSTHRU); -} -/* }}} */ - -/* {{{ proto mixed variant_round(mixed left, int decimals) - Rounds a variant to the specified number of decimal places */ -PHP_FUNCTION(variant_round) -{ - VARIANT vres; - VARIANT left_val; - VARIANT *vleft = NULL; - zval *zleft = NULL; - php_com_dotnet_object *obj; - int codepage = CP_ACP; - long decimals = 0; - - VariantInit(&left_val); - VariantInit(&vres); - - if (SUCCESS == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, - ZEND_NUM_ARGS() TSRMLS_CC, "Ol", &zleft, php_com_variant_class_entry, &decimals)) { - obj = CDNO_FETCH(zleft); - vleft = &obj->v; - } else if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - "z!l", &zleft, &decimals)) { - vleft = &left_val; - php_com_variant_from_zval(vleft, zleft, codepage TSRMLS_CC); - } else { - return; - } - - if (SUCCEEDED(VarRound(vleft, decimals, &vres))) { - php_com_wrap_variant(return_value, &vres, codepage TSRMLS_CC); - } - - VariantClear(&vres); - VariantClear(&left_val); -} -/* }}} */ - -/* {{{ proto int variant_cmp(mixed left, mixed right [, int lcid [, int flags]]) - Compares two variants */ -PHP_FUNCTION(variant_cmp) -{ - VARIANT left_val, right_val; - VARIANT *vleft = NULL, *vright = NULL; - zval *zleft = NULL, *zright = NULL; - php_com_dotnet_object *obj; - int codepage = CP_ACP; - long lcid = LOCALE_SYSTEM_DEFAULT; - long flags = 0; - /* it is safe to ignore the warning for this line; see the comments in com_handlers.c */ - STDAPI VarCmp(LPVARIANT pvarLeft, LPVARIANT pvarRight, LCID lcid, DWORD flags); - - VariantInit(&left_val); - VariantInit(&right_val); - - if (SUCCESS == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, - ZEND_NUM_ARGS() TSRMLS_CC, "OO|ll", &zleft, php_com_variant_class_entry, - &zright, php_com_variant_class_entry, &lcid, &flags)) { - obj = CDNO_FETCH(zleft); - vleft = &obj->v; - obj = CDNO_FETCH(zright); - vright = &obj->v; - } else if (SUCCESS == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, - ZEND_NUM_ARGS() TSRMLS_CC, "Oz!|ll", &zleft, php_com_variant_class_entry, - &zright, &lcid, &flags)) { - obj = CDNO_FETCH(zleft); - vleft = &obj->v; - vright = &right_val; - php_com_variant_from_zval(vright, zright, codepage TSRMLS_CC); - } else if (SUCCESS == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, - ZEND_NUM_ARGS() TSRMLS_CC, "z!O|ll", &zleft, &zright, php_com_variant_class_entry, - &lcid, &flags)) { - obj = CDNO_FETCH(zright); - vright = &obj->v; - vleft = &left_val; - php_com_variant_from_zval(vleft, zleft, codepage TSRMLS_CC); - } else if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - "z!z!|ll", &zleft, &zright, &lcid, &flags)) { - - vleft = &left_val; - php_com_variant_from_zval(vleft, zleft, codepage TSRMLS_CC); - - vright = &right_val; - php_com_variant_from_zval(vright, zright, codepage TSRMLS_CC); - - } else { - return; - } - - ZVAL_LONG(return_value, VarCmp(vleft, vright, lcid, flags)); - - VariantClear(&left_val); - VariantClear(&right_val); -} -/* }}} */ - -/* {{{ proto int variant_date_to_timestamp(object variant) - Converts a variant date/time value to unix timestamp */ -PHP_FUNCTION(variant_date_to_timestamp) -{ - VARIANT vres; - zval *zleft = NULL; - php_com_dotnet_object *obj; - - VariantInit(&vres); - - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - "O", &zleft, php_com_variant_class_entry)) { - return; - } - obj = CDNO_FETCH(zleft); - - if (SUCCEEDED(VariantChangeType(&vres, &obj->v, 0, VT_DATE))) { - SYSTEMTIME systime; - struct tm tmv; - - VariantTimeToSystemTime(V_DATE(&vres), &systime); - - memset(&tmv, 0, sizeof(tmv)); - tmv.tm_year = systime.wYear - 1900; - tmv.tm_mon = systime.wMonth - 1; - tmv.tm_mday = systime.wDay; - tmv.tm_hour = systime.wHour; - tmv.tm_min = systime.wMinute; - tmv.tm_sec = systime.wSecond; - tmv.tm_isdst = -1; - - tzset(); - RETVAL_LONG(mktime(&tmv)); - } - - VariantClear(&vres); -} -/* }}} */ - -/* {{{ proto object variant_date_from_timestamp(int timestamp) - Returns a variant date representation of a unix timestamp */ -PHP_FUNCTION(variant_date_from_timestamp) -{ - long timestamp; - time_t ttstamp; - SYSTEMTIME systime; - struct tm *tmv; - VARIANT res; - - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", - ×tamp)) { - return; - } - - if (timestamp < 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Timestamp value must be a positive value."); - RETURN_FALSE; - } - - VariantInit(&res); - tzset(); - ttstamp = timestamp; - tmv = localtime(&ttstamp); - memset(&systime, 0, sizeof(systime)); - - systime.wDay = tmv->tm_mday; - systime.wHour = tmv->tm_hour; - systime.wMinute = tmv->tm_min; - systime.wMonth = tmv->tm_mon + 1; - systime.wSecond = tmv->tm_sec; - systime.wYear = tmv->tm_year + 1900; - - V_VT(&res) = VT_DATE; - SystemTimeToVariantTime(&systime, &V_DATE(&res)); - - php_com_wrap_variant(return_value, &res, CP_ACP TSRMLS_CC); - - VariantClear(&res); -} -/* }}} */ - -/* {{{ proto int variant_get_type(object variant) - Returns the VT_XXX type code for a variant */ -PHP_FUNCTION(variant_get_type) -{ - zval *zobj; - php_com_dotnet_object *obj; - - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - "O", &zobj, php_com_variant_class_entry)) { - return; - } - obj = CDNO_FETCH(zobj); - - RETURN_LONG(V_VT(&obj->v)); -} -/* }}} */ - -/* {{{ proto void variant_set_type(object variant, int type) - Convert a variant into another type. Variant is modified "in-place" */ -PHP_FUNCTION(variant_set_type) -{ - zval *zobj; - php_com_dotnet_object *obj; - /* VARTYPE == unsigned short */ long vt; - HRESULT res; - - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - "Ol", &zobj, php_com_variant_class_entry, &vt)) { - return; - } - obj = CDNO_FETCH(zobj); - - res = VariantChangeType(&obj->v, &obj->v, 0, (VARTYPE)vt); - - if (SUCCEEDED(res)) { - if (vt != VT_DISPATCH && obj->typeinfo) { - ITypeInfo_Release(obj->typeinfo); - obj->typeinfo = NULL; - } - } else { - char *werr, *msg; - - werr = php_win_err(res); - spprintf(&msg, 0, "Variant type conversion failed: %s", werr); - LocalFree(werr); - - php_com_throw_exception(res, msg TSRMLS_CC); - efree(msg); - } -} -/* }}} */ - -/* {{{ proto object variant_cast(object variant, int type) - Convert a variant into a new variant object of another type */ -PHP_FUNCTION(variant_cast) -{ - zval *zobj; - php_com_dotnet_object *obj; - /* VARTYPE == unsigned short */ long vt; - VARIANT vres; - HRESULT res; - - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - "Ol", &zobj, php_com_variant_class_entry, &vt)) { - return; - } - obj = CDNO_FETCH(zobj); - - VariantInit(&vres); - res = VariantChangeType(&vres, &obj->v, 0, (VARTYPE)vt); - - if (SUCCEEDED(res)) { - php_com_wrap_variant(return_value, &vres, obj->code_page TSRMLS_CC); - } else { - char *werr, *msg; - - werr = php_win_err(res); - spprintf(&msg, 0, "Variant type conversion failed: %s", werr); - LocalFree(werr); - - php_com_throw_exception(res, msg TSRMLS_CC); - efree(msg); - } - - VariantClear(&vres); -} -/* }}} */ - diff --git a/ext/com_dotnet/com_wrapper.c b/ext/com_dotnet/com_wrapper.c deleted file mode 100644 index 9690665e93ce7..0000000000000 --- a/ext/com_dotnet/com_wrapper.c +++ /dev/null @@ -1,657 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -/* This module exports a PHP object as a COM object by wrapping it - * using IDispatchEx */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_ini.h" -#include "ext/standard/info.h" -#include "php_com_dotnet.h" -#include "php_com_dotnet_internal.h" - -typedef struct { - /* This first part MUST match the declaration - * of interface IDispatchEx */ - CONST_VTBL struct IDispatchExVtbl *lpVtbl; - - /* now the PHP stuff */ - - DWORD engine_thread; /* for sanity checking */ - zval *object; /* the object exported */ - LONG refcount; /* COM reference count */ - - HashTable *dispid_to_name; /* keep track of dispid -> name mappings */ - HashTable *name_to_dispid; /* keep track of name -> dispid mappings */ - - GUID sinkid; /* iid that we "implement" for event sinking */ - - int id; -} php_dispatchex; - -static int le_dispatch; - -static void disp_destructor(php_dispatchex *disp); - -static void dispatch_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) -{ - php_dispatchex *disp = (php_dispatchex *)rsrc->ptr; - disp_destructor(disp); -} - -int php_com_wrapper_minit(INIT_FUNC_ARGS) -{ - le_dispatch = zend_register_list_destructors_ex(dispatch_dtor, - NULL, "com_dotnet_dispatch_wrapper", module_number); - return le_dispatch; -} - - -/* {{{ trace */ -static inline void trace(char *fmt, ...) -{ - va_list ap; - char buf[4096]; - - snprintf(buf, sizeof(buf), "T=%08x ", GetCurrentThreadId()); - OutputDebugString(buf); - - va_start(ap, fmt); - vsnprintf(buf, sizeof(buf), fmt, ap); - - OutputDebugString(buf); - - va_end(ap); -} -/* }}} */ - -#ifdef ZTS -# define TSRMLS_FIXED() TSRMLS_FETCH(); -#else -# define TSRMLS_FIXED() -#endif - -#define FETCH_DISP(methname) \ - TSRMLS_FIXED() \ - php_dispatchex *disp = (php_dispatchex*)This; \ - if (COMG(rshutdown_started)) { \ - trace(" PHP Object:%p (name:unknown) %s\n", disp->object, methname); \ - } else { \ - trace(" PHP Object:%p (name:%s) %s\n", disp->object, Z_OBJCE_P(disp->object)->name, methname); \ - } \ - if (GetCurrentThreadId() != disp->engine_thread) { \ - return RPC_E_WRONG_THREAD; \ - } - -static HRESULT STDMETHODCALLTYPE disp_queryinterface( - IDispatchEx *This, - /* [in] */ REFIID riid, - /* [iid_is][out] */ void **ppvObject) -{ - FETCH_DISP("QueryInterface"); - - if (IsEqualGUID(&IID_IUnknown, riid) || - IsEqualGUID(&IID_IDispatch, riid) || - IsEqualGUID(&IID_IDispatchEx, riid) || - IsEqualGUID(&disp->sinkid, riid)) { - *ppvObject = This; - InterlockedIncrement(&disp->refcount); - return S_OK; - } - - *ppvObject = NULL; - return E_NOINTERFACE; -} - -static ULONG STDMETHODCALLTYPE disp_addref(IDispatchEx *This) -{ - FETCH_DISP("AddRef"); - - return InterlockedIncrement(&disp->refcount); -} - -static ULONG STDMETHODCALLTYPE disp_release(IDispatchEx *This) -{ - ULONG ret; - FETCH_DISP("Release"); - - ret = InterlockedDecrement(&disp->refcount); - trace("-- refcount now %d\n", ret); - if (ret == 0) { - /* destroy it */ - if (disp->id) - zend_list_delete(disp->id); - } - return ret; -} - -static HRESULT STDMETHODCALLTYPE disp_gettypeinfocount( - IDispatchEx *This, - /* [out] */ UINT *pctinfo) -{ - FETCH_DISP("GetTypeInfoCount"); - - *pctinfo = 0; - return S_OK; -} - -static HRESULT STDMETHODCALLTYPE disp_gettypeinfo( - IDispatchEx *This, - /* [in] */ UINT iTInfo, - /* [in] */ LCID lcid, - /* [out] */ ITypeInfo **ppTInfo) -{ - FETCH_DISP("GetTypeInfo"); - - *ppTInfo = NULL; - return DISP_E_BADINDEX; -} - -static HRESULT STDMETHODCALLTYPE disp_getidsofnames( - IDispatchEx *This, - /* [in] */ REFIID riid, - /* [size_is][in] */ LPOLESTR *rgszNames, - /* [in] */ UINT cNames, - /* [in] */ LCID lcid, - /* [size_is][out] */ DISPID *rgDispId) -{ - UINT i; - HRESULT ret = S_OK; - FETCH_DISP("GetIDsOfNames"); - - for (i = 0; i < cNames; i++) { - char *name; - unsigned int namelen; - zval **tmp; - - name = php_com_olestring_to_string(rgszNames[i], &namelen, COMG(code_page) TSRMLS_CC); - - /* Lookup the name in the hash */ - if (zend_hash_find(disp->name_to_dispid, name, namelen+1, (void**)&tmp) == FAILURE) { - ret = DISP_E_UNKNOWNNAME; - rgDispId[i] = 0; - } else { - rgDispId[i] = Z_LVAL_PP(tmp); - } - - efree(name); - - } - - return ret; -} - -static HRESULT STDMETHODCALLTYPE disp_invoke( - IDispatchEx *This, - /* [in] */ DISPID dispIdMember, - /* [in] */ REFIID riid, - /* [in] */ LCID lcid, - /* [in] */ WORD wFlags, - /* [out][in] */ DISPPARAMS *pDispParams, - /* [out] */ VARIANT *pVarResult, - /* [out] */ EXCEPINFO *pExcepInfo, - /* [out] */ UINT *puArgErr) -{ - return This->lpVtbl->InvokeEx(This, dispIdMember, - lcid, wFlags, pDispParams, - pVarResult, pExcepInfo, NULL); -} - -static HRESULT STDMETHODCALLTYPE disp_getdispid( - IDispatchEx *This, - /* [in] */ BSTR bstrName, - /* [in] */ DWORD grfdex, - /* [out] */ DISPID *pid) -{ - HRESULT ret = DISP_E_UNKNOWNNAME; - char *name; - unsigned int namelen; - zval **tmp; - FETCH_DISP("GetDispID"); - - name = php_com_olestring_to_string(bstrName, &namelen, COMG(code_page) TSRMLS_CC); - - trace("Looking for %s, namelen=%d in %p\n", name, namelen, disp->name_to_dispid); - - /* Lookup the name in the hash */ - if (zend_hash_find(disp->name_to_dispid, name, namelen+1, (void**)&tmp) == SUCCESS) { - trace("found it\n"); - *pid = Z_LVAL_PP(tmp); - ret = S_OK; - } - - efree(name); - - return ret; -} - -static HRESULT STDMETHODCALLTYPE disp_invokeex( - IDispatchEx *This, - /* [in] */ DISPID id, - /* [in] */ LCID lcid, - /* [in] */ WORD wFlags, - /* [in] */ DISPPARAMS *pdp, - /* [out] */ VARIANT *pvarRes, - /* [out] */ EXCEPINFO *pei, - /* [unique][in] */ IServiceProvider *pspCaller) -{ - zval **name; - UINT i; - zval *retval = NULL; - zval ***params = NULL; - HRESULT ret = DISP_E_MEMBERNOTFOUND; - FETCH_DISP("InvokeEx"); - - if (SUCCESS == zend_hash_index_find(disp->dispid_to_name, id, (void**)&name)) { - /* TODO: add support for overloaded objects */ - - trace("-- Invoke: %d %20s [%d] flags=%08x args=%d\n", id, Z_STRVAL_PP(name), Z_STRLEN_PP(name), wFlags, pdp->cArgs); - - /* convert args into zvals. - * Args are in reverse order */ - if (pdp->cArgs) { - params = (zval ***)safe_emalloc(sizeof(zval **), pdp->cArgs, 0); - for (i = 0; i < pdp->cArgs; i++) { - VARIANT *arg; - zval *zarg; - - arg = &pdp->rgvarg[ pdp->cArgs - 1 - i]; - - trace("alloc zval for arg %d VT=%08x\n", i, V_VT(arg)); - - ALLOC_INIT_ZVAL(zarg); - php_com_wrap_variant(zarg, arg, COMG(code_page) TSRMLS_CC); - params[i] = (zval**)emalloc(sizeof(zval**)); - *params[i] = zarg; - } - } - - trace("arguments processed, prepare to do some work\n"); - - /* TODO: if PHP raises an exception here, we should catch it - * and expose it as a COM exception */ - - if (wFlags & DISPATCH_PROPERTYGET) { - retval = zend_read_property(Z_OBJCE_P(disp->object), disp->object, Z_STRVAL_PP(name), Z_STRLEN_PP(name)+1, 1 TSRMLS_CC); - } else if (wFlags & DISPATCH_PROPERTYPUT) { - zend_update_property(Z_OBJCE_P(disp->object), disp->object, Z_STRVAL_PP(name), Z_STRLEN_PP(name)+1, *params[0] TSRMLS_CC); - } else if (wFlags & DISPATCH_METHOD) { - zend_try { - if (SUCCESS == call_user_function_ex(EG(function_table), &disp->object, *name, - &retval, pdp->cArgs, params, 1, NULL TSRMLS_CC)) { - ret = S_OK; - trace("function called ok\n"); - - /* Copy any modified values to callers copy of variant*/ - for (i = 0; i < pdp->cArgs; i++) { - php_com_dotnet_object *obj = CDNO_FETCH(*params[i]); - VARIANT *srcvar = &obj->v; - VARIANT *dstvar = &pdp->rgvarg[ pdp->cArgs - 1 - i]; - if ((V_VT(dstvar) & VT_BYREF) && obj->modified ) { - trace("percolate modified value for arg %d VT=%08x\n", i, V_VT(dstvar)); - php_com_copy_variant(dstvar, srcvar TSRMLS_CC); - } - } - } else { - trace("failed to call func\n"); - ret = DISP_E_EXCEPTION; - } - } zend_catch { - trace("something blew up\n"); - ret = DISP_E_EXCEPTION; - } zend_end_try(); - } else { - trace("Don't know how to handle this invocation %08x\n", wFlags); - } - - /* release arguments */ - if (params) { - for (i = 0; i < pdp->cArgs; i++) { - zval_ptr_dtor(params[i]); - efree(params[i]); - } - efree(params); - } - - /* return value */ - if (retval) { - if (pvarRes) { - VariantInit(pvarRes); - php_com_variant_from_zval(pvarRes, retval, COMG(code_page) TSRMLS_CC); - } - zval_ptr_dtor(&retval); - } else if (pvarRes) { - VariantInit(pvarRes); - } - - } else { - trace("InvokeEx: I don't support DISPID=%d\n", id); - } - - return ret; -} - -static HRESULT STDMETHODCALLTYPE disp_deletememberbyname( - IDispatchEx *This, - /* [in] */ BSTR bstrName, - /* [in] */ DWORD grfdex) -{ - FETCH_DISP("DeleteMemberByName"); - - /* TODO: unset */ - - return S_FALSE; -} - -static HRESULT STDMETHODCALLTYPE disp_deletememberbydispid( - IDispatchEx *This, - /* [in] */ DISPID id) -{ - FETCH_DISP("DeleteMemberByDispID"); - - /* TODO: unset */ - - return S_FALSE; -} - -static HRESULT STDMETHODCALLTYPE disp_getmemberproperties( - IDispatchEx *This, - /* [in] */ DISPID id, - /* [in] */ DWORD grfdexFetch, - /* [out] */ DWORD *pgrfdex) -{ - FETCH_DISP("GetMemberProperties"); - - return DISP_E_UNKNOWNNAME; -} - -static HRESULT STDMETHODCALLTYPE disp_getmembername( - IDispatchEx *This, - /* [in] */ DISPID id, - /* [out] */ BSTR *pbstrName) -{ - zval *name; - FETCH_DISP("GetMemberName"); - - if (SUCCESS == zend_hash_index_find(disp->dispid_to_name, id, (void**)&name)) { - OLECHAR *olestr = php_com_string_to_olestring(Z_STRVAL_P(name), Z_STRLEN_P(name), COMG(code_page) TSRMLS_CC); - *pbstrName = SysAllocString(olestr); - efree(olestr); - return S_OK; - } else { - return DISP_E_UNKNOWNNAME; - } -} - -static HRESULT STDMETHODCALLTYPE disp_getnextdispid( - IDispatchEx *This, - /* [in] */ DWORD grfdex, - /* [in] */ DISPID id, - /* [out] */ DISPID *pid) -{ - ulong next = id+1; - FETCH_DISP("GetNextDispID"); - - while(!zend_hash_index_exists(disp->dispid_to_name, next)) - next++; - - if (zend_hash_index_exists(disp->dispid_to_name, next)) { - *pid = next; - return S_OK; - } - return S_FALSE; -} - -static HRESULT STDMETHODCALLTYPE disp_getnamespaceparent( - IDispatchEx *This, - /* [out] */ IUnknown **ppunk) -{ - FETCH_DISP("GetNameSpaceParent"); - - *ppunk = NULL; - return E_NOTIMPL; -} - -static struct IDispatchExVtbl php_dispatch_vtbl = { - disp_queryinterface, - disp_addref, - disp_release, - disp_gettypeinfocount, - disp_gettypeinfo, - disp_getidsofnames, - disp_invoke, - disp_getdispid, - disp_invokeex, - disp_deletememberbyname, - disp_deletememberbydispid, - disp_getmemberproperties, - disp_getmembername, - disp_getnextdispid, - disp_getnamespaceparent -}; - - -/* enumerate functions and properties of the object and assign - * dispatch ids */ -static void generate_dispids(php_dispatchex *disp TSRMLS_DC) -{ - HashPosition pos; - char *name = NULL; - zval *tmp; - int namelen; - int keytype; - ulong pid; - - if (disp->dispid_to_name == NULL) { - ALLOC_HASHTABLE(disp->dispid_to_name); - ALLOC_HASHTABLE(disp->name_to_dispid); - zend_hash_init(disp->name_to_dispid, 0, NULL, ZVAL_PTR_DTOR, 0); - zend_hash_init(disp->dispid_to_name, 0, NULL, ZVAL_PTR_DTOR, 0); - } - - /* properties */ - if (Z_OBJPROP_P(disp->object)) { - zend_hash_internal_pointer_reset_ex(Z_OBJPROP_P(disp->object), &pos); - while (HASH_KEY_NON_EXISTANT != (keytype = - zend_hash_get_current_key_ex(Z_OBJPROP_P(disp->object), &name, - &namelen, &pid, 0, &pos))) { - char namebuf[32]; - if (keytype == HASH_KEY_IS_LONG) { - snprintf(namebuf, sizeof(namebuf), "%d", pid); - name = namebuf; - namelen = strlen(namebuf)+1; - } - - zend_hash_move_forward_ex(Z_OBJPROP_P(disp->object), &pos); - - /* Find the existing id */ - if (zend_hash_find(disp->name_to_dispid, name, namelen, (void**)&tmp) == SUCCESS) - continue; - - /* add the mappings */ - MAKE_STD_ZVAL(tmp); - ZVAL_STRINGL(tmp, name, namelen-1, 1); - pid = zend_hash_next_free_element(disp->dispid_to_name); - zend_hash_index_update(disp->dispid_to_name, pid, (void*)&tmp, sizeof(zval *), NULL); - - MAKE_STD_ZVAL(tmp); - ZVAL_LONG(tmp, pid); - zend_hash_update(disp->name_to_dispid, name, namelen, (void*)&tmp, sizeof(zval *), NULL); - } - } - - /* functions */ - if (Z_OBJCE_P(disp->object)) { - zend_hash_internal_pointer_reset_ex(&Z_OBJCE_P(disp->object)->function_table, &pos); - while (HASH_KEY_NON_EXISTANT != (keytype = - zend_hash_get_current_key_ex(&Z_OBJCE_P(disp->object)->function_table, - &name, &namelen, &pid, 0, &pos))) { - - char namebuf[32]; - if (keytype == HASH_KEY_IS_LONG) { - snprintf(namebuf, sizeof(namebuf), "%d", pid); - name = namebuf; - namelen = strlen(namebuf) + 1; - } - - zend_hash_move_forward_ex(Z_OBJPROP_P(disp->object), &pos); - - /* Find the existing id */ - if (zend_hash_find(disp->name_to_dispid, name, namelen, (void**)&tmp) == SUCCESS) - continue; - - /* add the mappings */ - MAKE_STD_ZVAL(tmp); - ZVAL_STRINGL(tmp, name, namelen-1, 1); - pid = zend_hash_next_free_element(disp->dispid_to_name); - zend_hash_index_update(disp->dispid_to_name, pid, (void*)&tmp, sizeof(zval *), NULL); - - MAKE_STD_ZVAL(tmp); - ZVAL_LONG(tmp, pid); - zend_hash_update(disp->name_to_dispid, name, namelen, (void*)&tmp, sizeof(zval *), NULL); - } - } -} - -static php_dispatchex *disp_constructor(zval *object TSRMLS_DC) -{ - php_dispatchex *disp = (php_dispatchex*)CoTaskMemAlloc(sizeof(php_dispatchex)); - - trace("constructing a COM wrapper for PHP object %p (%s)\n", object, Z_OBJCE_P(object)->name); - - if (disp == NULL) - return NULL; - - memset(disp, 0, sizeof(php_dispatchex)); - - disp->engine_thread = GetCurrentThreadId(); - disp->lpVtbl = &php_dispatch_vtbl; - disp->refcount = 1; - - - if (object) - ZVAL_ADDREF(object); - disp->object = object; - - disp->id = zend_list_insert(disp, le_dispatch); - - return disp; -} - -static void disp_destructor(php_dispatchex *disp) -{ - TSRMLS_FETCH(); - - /* Object store not available during request shutdown */ - if (COMG(rshutdown_started)) { - trace("destroying COM wrapper for PHP object %p (name:unknown)\n", disp->object); - } else { - trace("destroying COM wrapper for PHP object %p (name:%s)\n", disp->object, Z_OBJCE_P(disp->object)->name); - } - - disp->id = 0; - - if (disp->refcount > 0) - CoDisconnectObject((IUnknown*)disp, 0); - - zend_hash_destroy(disp->dispid_to_name); - zend_hash_destroy(disp->name_to_dispid); - FREE_HASHTABLE(disp->dispid_to_name); - FREE_HASHTABLE(disp->name_to_dispid); - - if (disp->object) - zval_ptr_dtor(&disp->object); - - CoTaskMemFree(disp); -} - -PHPAPI IDispatch *php_com_wrapper_export_as_sink(zval *val, GUID *sinkid, - HashTable *id_to_name TSRMLS_DC) -{ - php_dispatchex *disp = disp_constructor(val TSRMLS_CC); - HashPosition pos; - char *name = NULL; - zval *tmp, **ntmp; - int namelen; - int keytype; - ulong pid; - - disp->dispid_to_name = id_to_name; - - memcpy(&disp->sinkid, sinkid, sizeof(disp->sinkid)); - - /* build up the reverse mapping */ - ALLOC_HASHTABLE(disp->name_to_dispid); - zend_hash_init(disp->name_to_dispid, 0, NULL, ZVAL_PTR_DTOR, 0); - - zend_hash_internal_pointer_reset_ex(id_to_name, &pos); - while (HASH_KEY_NON_EXISTANT != (keytype = - zend_hash_get_current_key_ex(id_to_name, &name, &namelen, &pid, 0, &pos))) { - - if (keytype == HASH_KEY_IS_LONG) { - - zend_hash_get_current_data_ex(id_to_name, (void**)&ntmp, &pos); - - MAKE_STD_ZVAL(tmp); - ZVAL_LONG(tmp, pid); - zend_hash_update(disp->name_to_dispid, Z_STRVAL_PP(ntmp), - Z_STRLEN_PP(ntmp)+1, (void*)&tmp, sizeof(zval *), NULL); - } - - zend_hash_move_forward_ex(id_to_name, &pos); - } - - return (IDispatch*)disp; -} - -PHPAPI IDispatch *php_com_wrapper_export(zval *val TSRMLS_DC) -{ - php_dispatchex *disp = NULL; - - if (Z_TYPE_P(val) != IS_OBJECT) { - return NULL; - } - - if (php_com_is_valid_object(val TSRMLS_CC)) { - /* pass back its IDispatch directly */ - php_com_dotnet_object *obj = CDNO_FETCH(val); - - if (obj == NULL) - return NULL; - - if (V_VT(&obj->v) == VT_DISPATCH && V_DISPATCH(&obj->v)) { - IDispatch_AddRef(V_DISPATCH(&obj->v)); - return V_DISPATCH(&obj->v); - } - - return NULL; - } - - disp = disp_constructor(val TSRMLS_CC); - generate_dispids(disp TSRMLS_CC); - - return (IDispatch*)disp; -} - - diff --git a/ext/com_dotnet/config.w32 b/ext/com_dotnet/config.w32 deleted file mode 100644 index 1526392c24bef..0000000000000 --- a/ext/com_dotnet/config.w32 +++ /dev/null @@ -1,13 +0,0 @@ -// $Id$ -// vim:ft=javascript - -ARG_ENABLE("com-dotnet", "COM and .Net support", "yes"); - -if (PHP_COM_DOTNET == "yes") { - CHECK_LIB('oleaut32.lib', 'com_dotnet'); - EXTENSION("com_dotnet", "com_com.c com_dotnet.c com_extension.c \ - com_handlers.c com_iterator.c com_misc.c com_olechar.c \ - com_typeinfo.c com_variant.c com_wrapper.c com_saproxy.c com_persist.c"); - AC_DEFINE('HAVE_COM_DOTNET', 1, 'Have COM_DOTNET support'); - CHECK_HEADER_ADD_INCLUDE('mscoree.h', 'CFLAGS_COM_DOTNET'); -} diff --git a/ext/com_dotnet/package.xml b/ext/com_dotnet/package.xml deleted file mode 100644 index 2839447bbddd4..0000000000000 --- a/ext/com_dotnet/package.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - com_dotnet - Com and .NET support functions for Windows - - - wez - Wez Furlong - wez@php.net - lead - - - -... - - PHP - - beta - 5.0.0rc1 - 2004-03-19 - -package.xml added to support installation using pear installer - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ext/com_dotnet/php_com_dotnet.h b/ext/com_dotnet/php_com_dotnet.h deleted file mode 100644 index e64e357ee4fd5..0000000000000 --- a/ext/com_dotnet/php_com_dotnet.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifndef PHP_COM_DOTNET_H -#define PHP_COM_DOTNET_H - -extern zend_module_entry com_dotnet_module_entry; -#define phpext_com_dotnet_ptr &com_dotnet_module_entry - -#ifdef PHP_WIN32 -# define PHP_COM_DOTNET_API __declspec(dllexport) -#else -# define PHP_COM_DOTNET_API -#endif - -#ifdef ZTS -#include "TSRM.h" -#endif - -PHP_MINIT_FUNCTION(com_dotnet); -PHP_MSHUTDOWN_FUNCTION(com_dotnet); -PHP_RINIT_FUNCTION(com_dotnet); -PHP_RSHUTDOWN_FUNCTION(com_dotnet); -PHP_MINFO_FUNCTION(com_dotnet); - -ZEND_BEGIN_MODULE_GLOBALS(com_dotnet) - zend_bool allow_dcom; - zend_bool autoreg_verbose; - zend_bool autoreg_on; - zend_bool autoreg_case_sensitive; - void *dotnet_runtime_stuff; /* opaque to avoid cluttering up other modules */ - int code_page; /* default code_page if left unspecified */ - zend_bool rshutdown_started; -ZEND_END_MODULE_GLOBALS(com_dotnet) - -#ifdef ZTS -# define COMG(v) TSRMG(com_dotnet_globals_id, zend_com_dotnet_globals *, v) -#else -# define COMG(v) (com_dotnet_globals.v) -#endif - -extern ZEND_DECLARE_MODULE_GLOBALS(com_dotnet); - -#endif /* PHP_COM_DOTNET_H */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: noet sw=4 ts=4 fdm=marker - * vim<600: noet sw=4 ts=4 - */ diff --git a/ext/com_dotnet/php_com_dotnet_internal.h b/ext/com_dotnet/php_com_dotnet_internal.h deleted file mode 100644 index 12c632a1cb2f3..0000000000000 --- a/ext/com_dotnet/php_com_dotnet_internal.h +++ /dev/null @@ -1,185 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifndef PHP_COM_DOTNET_INTERNAL_H -#define PHP_COM_DOTNET_INTERNAL_H - -#define _WIN32_DCOM -#define COBJMACROS -#include -#include -#include -#include -#include "win32/winutil.h" - -/* brain-death in winutil.h defines the macro to hide the useful function... */ -#undef php_win_err - -typedef struct _php_com_dotnet_object { - zend_object zo; - - VARIANT v; - int modified; - - ITypeInfo *typeinfo; - long code_page; - - zend_class_entry *ce; - - /* associated event sink */ - IDispatch *sink_dispatch; - GUID sink_id; - DWORD sink_cookie; - - /* cache for method signatures */ - HashTable *method_cache; - /* cache for name -> DISPID */ - HashTable *id_of_name_cache; -} php_com_dotnet_object; - -static inline int php_com_is_valid_object(zval *zv TSRMLS_DC) -{ - zend_class_entry *ce = Z_OBJCE_P(zv); - return strcmp("com", ce->name.s) == 0 || - strcmp("dotnet", ce->name.s) == 0 || - strcmp("variant", ce->name.s) == 0; -} - -#define CDNO_FETCH(zv) (php_com_dotnet_object*)zend_object_store_get_object(zv TSRMLS_CC) -#define CDNO_FETCH_VERIFY(obj, zv) do { \ - if (!php_com_is_valid_object(zv TSRMLS_CC)) { \ - php_com_throw_exception(E_UNEXPECTED, "expected a variant object" TSRMLS_CC); \ - return; \ - } \ - obj = (php_com_dotnet_object*)zend_object_store_get_object(zv TSRMLS_CC); \ -} while(0) - -/* com_extension.c */ -TsHashTable php_com_typelibraries; -zend_class_entry *php_com_variant_class_entry, *php_com_exception_class_entry, *php_com_saproxy_class_entry; - -/* com_handlers.c */ -zend_object_value php_com_object_new(zend_class_entry *ce TSRMLS_DC); -void php_com_object_clone(void *object, void **clone_ptr TSRMLS_DC); -void php_com_object_free_storage(void *object TSRMLS_DC); -zend_object_handlers php_com_object_handlers; -void php_com_object_enable_event_sink(php_com_dotnet_object *obj, int enable TSRMLS_DC); - -/* com_saproxy.c */ -zend_object_iterator *php_com_saproxy_iter_get(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC); -int php_com_saproxy_create(zval *com_object, zval *proxy_out, zval *index TSRMLS_DC); - -/* com_olechar.c */ -PHPAPI char *php_com_olestring_to_string(OLECHAR *olestring, - uint *string_len, int codepage TSRMLS_DC); -PHPAPI OLECHAR *php_com_string_to_olestring(char *string, - uint string_len, int codepage TSRMLS_DC); - - -/* com_com.c */ -PHP_FUNCTION(com_create_instance); -PHP_FUNCTION(com_event_sink); -PHP_FUNCTION(com_create_guid); -PHP_FUNCTION(com_print_typeinfo); -PHP_FUNCTION(com_message_pump); -PHP_FUNCTION(com_load_typelib); -PHP_FUNCTION(com_get_active_object); - -HRESULT php_com_invoke_helper(php_com_dotnet_object *obj, DISPID id_member, - WORD flags, DISPPARAMS *disp_params, VARIANT *v, int silent, int allow_noarg TSRMLS_DC); -HRESULT php_com_get_id_of_name(php_com_dotnet_object *obj, char *name, - int namelen, DISPID *dispid TSRMLS_DC); -int php_com_do_invoke_by_id(php_com_dotnet_object *obj, DISPID dispid, - WORD flags, VARIANT *v, int nargs, zval **args, int silent, int allow_noarg TSRMLS_DC); -int php_com_do_invoke(php_com_dotnet_object *obj, char *name, int namelen, - WORD flags, VARIANT *v, int nargs, zval **args, int allow_noarg TSRMLS_DC); -int php_com_do_invoke_byref(php_com_dotnet_object *obj, char *name, int namelen, - WORD flags, VARIANT *v, int nargs, zval ***args TSRMLS_DC); - -/* com_wrapper.c */ -int php_com_wrapper_minit(INIT_FUNC_ARGS); -PHPAPI IDispatch *php_com_wrapper_export_as_sink(zval *val, GUID *sinkid, HashTable *id_to_name TSRMLS_DC); -PHPAPI IDispatch *php_com_wrapper_export(zval *val TSRMLS_DC); - -/* com_persist.c */ -int php_com_persist_minit(INIT_FUNC_ARGS); - -/* com_variant.c */ -PHP_FUNCTION(com_variant_create_instance); -PHP_FUNCTION(variant_set); -PHP_FUNCTION(variant_add); -PHP_FUNCTION(variant_cat); -PHP_FUNCTION(variant_sub); -PHP_FUNCTION(variant_mul); -PHP_FUNCTION(variant_and); -PHP_FUNCTION(variant_div); -PHP_FUNCTION(variant_eqv); -PHP_FUNCTION(variant_idiv); -PHP_FUNCTION(variant_imp); -PHP_FUNCTION(variant_mod); -PHP_FUNCTION(variant_or); -PHP_FUNCTION(variant_pow); -PHP_FUNCTION(variant_xor); -PHP_FUNCTION(variant_abs); -PHP_FUNCTION(variant_fix); -PHP_FUNCTION(variant_int); -PHP_FUNCTION(variant_neg); -PHP_FUNCTION(variant_not); -PHP_FUNCTION(variant_round); -PHP_FUNCTION(variant_cmp); -PHP_FUNCTION(variant_date_to_timestamp); -PHP_FUNCTION(variant_date_from_timestamp); -PHP_FUNCTION(variant_get_type); -PHP_FUNCTION(variant_set_type); -PHP_FUNCTION(variant_cast); - -PHPAPI void php_com_variant_from_zval_with_type(VARIANT *v, zval *z, VARTYPE type, int codepage TSRMLS_DC); -PHPAPI void php_com_variant_from_zval(VARIANT *v, zval *z, int codepage TSRMLS_DC); -PHPAPI int php_com_zval_from_variant(zval *z, VARIANT *v, int codepage TSRMLS_DC); -PHPAPI int php_com_copy_variant(VARIANT *dst, VARIANT *src TSRMLS_DC); - -/* com_dotnet.c */ -PHP_FUNCTION(com_dotnet_create_instance); -void php_com_dotnet_rshutdown(TSRMLS_D); -void php_com_dotnet_mshutdown(TSRMLS_D); - -/* com_misc.c */ -void php_com_throw_exception(HRESULT code, char *message TSRMLS_DC); -PHPAPI void php_com_wrap_dispatch(zval *z, IDispatch *disp, - int codepage TSRMLS_DC); -PHPAPI void php_com_wrap_variant(zval *z, VARIANT *v, - int codepage TSRMLS_DC); -PHPAPI int php_com_safearray_get_elem(VARIANT *array, VARIANT *dest, LONG dim1 TSRMLS_DC); - -/* com_typeinfo.c */ -PHPAPI ITypeLib *php_com_load_typelib_via_cache(char *search_string, - int codepage, int *cached TSRMLS_DC); -PHPAPI ITypeLib *php_com_load_typelib(char *search_string, int codepage TSRMLS_DC); -PHPAPI int php_com_import_typelib(ITypeLib *TL, int mode, - int codepage TSRMLS_DC); -void php_com_typelibrary_dtor(void *pDest); -ITypeInfo *php_com_locate_typeinfo(char *typelibname, php_com_dotnet_object *obj, char *dispname, int sink TSRMLS_DC); -int php_com_process_typeinfo(ITypeInfo *typeinfo, HashTable *id_to_name, int printdef, GUID *guid, int codepage TSRMLS_DC); - -/* com_iterator.c */ -zend_object_iterator *php_com_iter_get(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC); - - -#endif diff --git a/ext/com_dotnet/tests/27974.phpt b/ext/com_dotnet/tests/27974.phpt deleted file mode 100755 index 30c42b6cf6d4b..0000000000000 --- a/ext/com_dotnet/tests/27974.phpt +++ /dev/null @@ -1,43 +0,0 @@ ---TEST-- -COM: mapping a safearray ---SKIPIF-- - ---FILE-- -getCode() != DISP_E_BADINDEX) { - throw $e; - } - echo "Got BADINDEX exception OK!\n"; - } - echo "OK!"; -} catch (Exception $e) { - print $e; -} -?> ---EXPECT-- -object(variant)#1 (0) { -} -123 -456 -789 -string(3) "123" -string(5) "hello" -string(3) "789" -Got BADINDEX exception OK! -OK! diff --git a/ext/com_dotnet/tests/bug33386.phpt b/ext/com_dotnet/tests/bug33386.phpt deleted file mode 100644 index e57f1274c161a..0000000000000 --- a/ext/com_dotnet/tests/bug33386.phpt +++ /dev/null @@ -1,40 +0,0 @@ ---TEST-- -Bug #33386 (ScriptControl only sees last function of class) ---SKIPIF-- - ---FILE-- -Language = "VBScript"; - - $oScript->AddObject ("tfA", $ciTF, true); - foreach (array(1,2) as $i) { - $oScript->ExecuteStatement ("tfA.func$i"); - $oScript->ExecuteStatement ("func$i"); - } - $oScript->AddObject ("tfB", $ciTF); - foreach (array(1,2) as $i) { - $oScript->ExecuteStatement ("tfB.func$i"); - } -} catch (Exception $e) { - print $e; -} -?> ---EXPECT-- - func one - func one - func two - func two - func one - func two diff --git a/ext/com_dotnet/tests/bug34272.phpt b/ext/com_dotnet/tests/bug34272.phpt deleted file mode 100644 index 3a65e2ce2861d..0000000000000 --- a/ext/com_dotnet/tests/bug34272.phpt +++ /dev/null @@ -1,22 +0,0 @@ ---TEST-- -Bug #34272 (empty array onto COM object blows up) ---SKIPIF-- - ---FILE-- -add('foo', array()); - print sizeof($dict['foo'])."\n"; - $dict->add('bar', array(23)); - print sizeof($dict['bar'])." \n"; -} catch (Exception $e) { - print $e; -} -?> ---EXPECT-- -0 -1 diff --git a/ext/com_dotnet/tests/bug39596.phpt b/ext/com_dotnet/tests/bug39596.phpt deleted file mode 100644 index dc8d1ef066106..0000000000000 --- a/ext/com_dotnet/tests/bug39596.phpt +++ /dev/null @@ -1,23 +0,0 @@ ---TEST-- -Bug #39596 (Creating Variant of type VT_ARRAY) ---SKIPIF-- - ---FILE-- - ---EXPECT-- -aaa -bbb -ccc diff --git a/ext/com_dotnet/tests/bug39606.phpt b/ext/com_dotnet/tests/bug39606.phpt deleted file mode 100644 index 4487c1d8cba97..0000000000000 --- a/ext/com_dotnet/tests/bug39606.phpt +++ /dev/null @@ -1,22 +0,0 @@ ---TEST-- -COM: Loading typelib corrupts memory ---SKIPIF-- - ---FILE-- - -===DONE=== ---EXPECT-- -bool(true) -bool(true) -===DONE=== \ No newline at end of file diff --git a/ext/com_dotnet/tests/variants.phpt b/ext/com_dotnet/tests/variants.phpt deleted file mode 100644 index 0fd27bee5ef63..0000000000000 --- a/ext/com_dotnet/tests/variants.phpt +++ /dev/null @@ -1,637 +0,0 @@ ---TEST-- -COM: General variant tests ---SKIPIF-- - ---FILE-- - 42, VT_R8 => 3.5, VT_BSTR => "hello", VT_BOOL => false); -$binary_ops = array('add', 'cat', 'sub', 'mul', 'and', 'div', - 'eqv', 'idiv', 'imp', 'mod', 'or', 'pow', 'xor'); - -foreach ($values as $t => $val) { - $v = new VARIANT($val); - if ($t != variant_get_type($v)) { - printf("Bork: [%d] %d: %s\n", $t, variant_get_type($v), $val); - print $v . "\n"; - } - $results = array(); - - foreach ($values as $op2) { - echo "--\n"; - foreach ($binary_ops as $op) { - try { - echo "$op: " . call_user_func('variant_' . $op, $v, $op2) . "\n"; - } catch (com_exception $e) { - echo "$op:\n"; - echo "\tvariant_$op($v, $op2)\n"; - echo "\texception " . $e->getMessage(); - printf("\tcode %08x\n\n", $e->getCode()); - } - } - } -} - -echo "OK!"; -?> ---EXPECT-- --- -add: 84 -cat: 4242 -sub: 0 -mul: 1764 -and: 42 -div: 1 -eqv: -1 -idiv: 1 -imp: -1 -mod: 0 -or: 42 -pow: 1.50130937545297E+68 -xor: 0 --- -add: 45.5 -cat: 423.5 -sub: 38.5 -mul: 147 -and: 0 -div: 12 -eqv: -47 -idiv: 10 -imp: -43 -mod: 2 -or: 46 -pow: 480145.116863642 -xor: 46 --- -add: - variant_add(42, hello) - exception Type mismatch. - code 80020005 - -cat: 42hello -sub: - variant_sub(42, hello) - exception Type mismatch. - code 80020005 - -mul: - variant_mul(42, hello) - exception Type mismatch. - code 80020005 - -and: - variant_and(42, hello) - exception Type mismatch. - code 80020005 - -div: - variant_div(42, hello) - exception Type mismatch. - code 80020005 - -eqv: - variant_eqv(42, hello) - exception Type mismatch. - code 80020005 - -idiv: - variant_idiv(42, hello) - exception Type mismatch. - code 80020005 - -imp: - variant_imp(42, hello) - exception Type mismatch. - code 80020005 - -mod: - variant_mod(42, hello) - exception Type mismatch. - code 80020005 - -or: - variant_or(42, hello) - exception Type mismatch. - code 80020005 - -pow: - variant_pow(42, hello) - exception Type mismatch. - code 80020005 - -xor: - variant_xor(42, hello) - exception Type mismatch. - code 80020005 - --- -add: 42 -cat: 42False -sub: 42 -mul: 0 -and: 0 -div: - variant_div(42, ) - exception Division by zero. - code 80020012 - -eqv: -43 -idiv: - variant_idiv(42, ) - exception Division by zero. - code 80020012 - -imp: -43 -mod: - variant_mod(42, ) - exception Division by zero. - code 80020012 - -or: 42 -pow: 1 -xor: 42 --- -add: 45.5 -cat: 3.542 -sub: -38.5 -mul: 147 -and: 0 -div: 8.33333333333333E-02 -eqv: -47 -idiv: 0 -imp: -5 -mod: 4 -or: 46 -pow: 7.09345573078604E+22 -xor: 46 --- -add: 7 -cat: 3.53.5 -sub: 0 -mul: 12.25 -and: 4 -div: 1 -eqv: -1 -idiv: 1 -imp: -1 -mod: 0 -or: 4 -pow: 80.2117802289664 -xor: 0 --- -add: - variant_add(3.5, hello) - exception Type mismatch. - code 80020005 - -cat: 3.5hello -sub: - variant_sub(3.5, hello) - exception Type mismatch. - code 80020005 - -mul: - variant_mul(3.5, hello) - exception Type mismatch. - code 80020005 - -and: - variant_and(3.5, hello) - exception Type mismatch. - code 80020005 - -div: - variant_div(3.5, hello) - exception Type mismatch. - code 80020005 - -eqv: - variant_eqv(3.5, hello) - exception Type mismatch. - code 80020005 - -idiv: - variant_idiv(3.5, hello) - exception Type mismatch. - code 80020005 - -imp: - variant_imp(3.5, hello) - exception Type mismatch. - code 80020005 - -mod: - variant_mod(3.5, hello) - exception Type mismatch. - code 80020005 - -or: - variant_or(3.5, hello) - exception Type mismatch. - code 80020005 - -pow: - variant_pow(3.5, hello) - exception Type mismatch. - code 80020005 - -xor: - variant_xor(3.5, hello) - exception Type mismatch. - code 80020005 - --- -add: 3.5 -cat: 3.5False -sub: 3.5 -mul: 0 -and: 0 -div: - variant_div(3.5, ) - exception Division by zero. - code 80020012 - -eqv: -5 -idiv: - variant_idiv(3.5, ) - exception Division by zero. - code 80020012 - -imp: -5 -mod: - variant_mod(3.5, ) - exception Division by zero. - code 80020012 - -or: 4 -pow: 1 -xor: 4 --- -add: - variant_add(hello, 42) - exception Type mismatch. - code 80020005 - -cat: hello42 -sub: - variant_sub(hello, 42) - exception Type mismatch. - code 80020005 - -mul: - variant_mul(hello, 42) - exception Type mismatch. - code 80020005 - -and: - variant_and(hello, 42) - exception Type mismatch. - code 80020005 - -div: - variant_div(hello, 42) - exception Type mismatch. - code 80020005 - -eqv: - variant_eqv(hello, 42) - exception Type mismatch. - code 80020005 - -idiv: - variant_idiv(hello, 42) - exception Type mismatch. - code 80020005 - -imp: - variant_imp(hello, 42) - exception Type mismatch. - code 80020005 - -mod: - variant_mod(hello, 42) - exception Type mismatch. - code 80020005 - -or: - variant_or(hello, 42) - exception Type mismatch. - code 80020005 - -pow: - variant_pow(hello, 42) - exception Type mismatch. - code 80020005 - -xor: - variant_xor(hello, 42) - exception Type mismatch. - code 80020005 - --- -add: - variant_add(hello, 3.5) - exception Type mismatch. - code 80020005 - -cat: hello3.5 -sub: - variant_sub(hello, 3.5) - exception Type mismatch. - code 80020005 - -mul: - variant_mul(hello, 3.5) - exception Type mismatch. - code 80020005 - -and: - variant_and(hello, 3.5) - exception Type mismatch. - code 80020005 - -div: - variant_div(hello, 3.5) - exception Type mismatch. - code 80020005 - -eqv: - variant_eqv(hello, 3.5) - exception Type mismatch. - code 80020005 - -idiv: - variant_idiv(hello, 3.5) - exception Type mismatch. - code 80020005 - -imp: - variant_imp(hello, 3.5) - exception Type mismatch. - code 80020005 - -mod: - variant_mod(hello, 3.5) - exception Type mismatch. - code 80020005 - -or: - variant_or(hello, 3.5) - exception Type mismatch. - code 80020005 - -pow: - variant_pow(hello, 3.5) - exception Type mismatch. - code 80020005 - -xor: - variant_xor(hello, 3.5) - exception Type mismatch. - code 80020005 - --- -add: hellohello -cat: hellohello -sub: - variant_sub(hello, hello) - exception Type mismatch. - code 80020005 - -mul: - variant_mul(hello, hello) - exception Type mismatch. - code 80020005 - -and: - variant_and(hello, hello) - exception Type mismatch. - code 80020005 - -div: - variant_div(hello, hello) - exception Type mismatch. - code 80020005 - -eqv: - variant_eqv(hello, hello) - exception Type mismatch. - code 80020005 - -idiv: - variant_idiv(hello, hello) - exception Type mismatch. - code 80020005 - -imp: - variant_imp(hello, hello) - exception Type mismatch. - code 80020005 - -mod: - variant_mod(hello, hello) - exception Type mismatch. - code 80020005 - -or: - variant_or(hello, hello) - exception Type mismatch. - code 80020005 - -pow: - variant_pow(hello, hello) - exception Type mismatch. - code 80020005 - -xor: - variant_xor(hello, hello) - exception Type mismatch. - code 80020005 - --- -add: - variant_add(hello, ) - exception Type mismatch. - code 80020005 - -cat: helloFalse -sub: - variant_sub(hello, ) - exception Type mismatch. - code 80020005 - -mul: - variant_mul(hello, ) - exception Type mismatch. - code 80020005 - -and: - variant_and(hello, ) - exception Type mismatch. - code 80020005 - -div: - variant_div(hello, ) - exception Type mismatch. - code 80020005 - -eqv: - variant_eqv(hello, ) - exception Type mismatch. - code 80020005 - -idiv: - variant_idiv(hello, ) - exception Type mismatch. - code 80020005 - -imp: - variant_imp(hello, ) - exception Type mismatch. - code 80020005 - -mod: - variant_mod(hello, ) - exception Type mismatch. - code 80020005 - -or: - variant_or(hello, ) - exception Type mismatch. - code 80020005 - -pow: - variant_pow(hello, ) - exception Type mismatch. - code 80020005 - -xor: - variant_xor(hello, ) - exception Type mismatch. - code 80020005 - --- -add: 42 -cat: False42 -sub: -42 -mul: 0 -and: 0 -div: 0 -eqv: -43 -idiv: 0 -imp: -1 -mod: 0 -or: 42 -pow: 0 -xor: 42 --- -add: 3.5 -cat: False3.5 -sub: -3.5 -mul: 0 -and: 0 -div: 0 -eqv: -5 -idiv: 0 -imp: -1 -mod: 0 -or: 4 -pow: 0 -xor: 4 --- -add: - variant_add(0, hello) - exception Type mismatch. - code 80020005 - -cat: Falsehello -sub: - variant_sub(0, hello) - exception Type mismatch. - code 80020005 - -mul: - variant_mul(0, hello) - exception Type mismatch. - code 80020005 - -and: - variant_and(0, hello) - exception Type mismatch. - code 80020005 - -div: - variant_div(0, hello) - exception Type mismatch. - code 80020005 - -eqv: - variant_eqv(0, hello) - exception Type mismatch. - code 80020005 - -idiv: - variant_idiv(0, hello) - exception Type mismatch. - code 80020005 - -imp: - variant_imp(0, hello) - exception Type mismatch. - code 80020005 - -mod: - variant_mod(0, hello) - exception Type mismatch. - code 80020005 - -or: - variant_or(0, hello) - exception Type mismatch. - code 80020005 - -pow: - variant_pow(0, hello) - exception Type mismatch. - code 80020005 - -xor: - variant_xor(0, hello) - exception Type mismatch. - code 80020005 - --- -add: 0 -cat: FalseFalse -sub: 0 -mul: 0 -and: 0 -div: - variant_div(0, ) - exception Out of present range. - code 8002000a - -eqv: -1 -idiv: - variant_idiv(0, ) - exception Division by zero. - code 80020012 - -imp: -1 -mod: - variant_mod(0, ) - exception Division by zero. - code 80020012 - -or: 0 -pow: 1 -xor: 0 -OK! diff --git a/ext/ctype/CREDITS b/ext/ctype/CREDITS deleted file mode 100644 index 22de90270994a..0000000000000 --- a/ext/ctype/CREDITS +++ /dev/null @@ -1,2 +0,0 @@ -ctype -Hartmut Holzgraefe diff --git a/ext/ctype/README b/ext/ctype/README deleted file mode 100644 index 1e78a3d933927..0000000000000 --- a/ext/ctype/README +++ /dev/null @@ -1,5 +0,0 @@ -this is an experimental extension that provides the -ctype family of function available in C -i'm not sure about whether they should go into ext/standard -or stay as an extension of their own and about using -a ctype_ prefix or sticking with the C names ... diff --git a/ext/ctype/config.m4 b/ext/ctype/config.m4 deleted file mode 100644 index 7d575a3adcd9d..0000000000000 --- a/ext/ctype/config.m4 +++ /dev/null @@ -1,11 +0,0 @@ -dnl -dnl $Id$ -dnl - -PHP_ARG_ENABLE(ctype, whether to enable ctype functions, -[ --disable-ctype Disable ctype functions], yes) - -if test "$PHP_CTYPE" != "no"; then - AC_DEFINE(HAVE_CTYPE, 1, [ ]) - PHP_NEW_EXTENSION(ctype, ctype.c, $ext_shared) -fi diff --git a/ext/ctype/config.w32 b/ext/ctype/config.w32 deleted file mode 100644 index 1ade89cdff2d7..0000000000000 --- a/ext/ctype/config.w32 +++ /dev/null @@ -1,9 +0,0 @@ -// $Id$ -// vim:ft=javascript - -ARG_ENABLE("ctype", "ctype", "yes"); - -if (PHP_CTYPE == "yes") { - EXTENSION("ctype", "ctype.c"); - AC_DEFINE('HAVE_CTYPE', 1, 'Have ctype'); -} diff --git a/ext/ctype/ctype.c b/ext/ctype/ctype.c deleted file mode 100644 index 050150fe17ed8..0000000000000 --- a/ext/ctype/ctype.c +++ /dev/null @@ -1,298 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Hartmut Holzgraefe | - +----------------------------------------------------------------------+ - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_ini.h" -#include "php_ctype.h" -#include "SAPI.h" -#include "ext/standard/info.h" - -#include - -#if HAVE_CTYPE - -static PHP_MINFO_FUNCTION(ctype); - -static PHP_FUNCTION(ctype_alnum); -static PHP_FUNCTION(ctype_alpha); -static PHP_FUNCTION(ctype_cntrl); -static PHP_FUNCTION(ctype_digit); -static PHP_FUNCTION(ctype_lower); -static PHP_FUNCTION(ctype_graph); -static PHP_FUNCTION(ctype_print); -static PHP_FUNCTION(ctype_punct); -static PHP_FUNCTION(ctype_space); -static PHP_FUNCTION(ctype_upper); -static PHP_FUNCTION(ctype_xdigit); - -/* {{{ arginfo */ -static -ZEND_BEGIN_ARG_INFO(arginfo_ctype_alnum, 0) - ZEND_ARG_INFO(0, text) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_ctype_alpha, 0) - ZEND_ARG_INFO(0, text) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_ctype_cntrl, 0) - ZEND_ARG_INFO(0, text) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_ctype_digit, 0) - ZEND_ARG_INFO(0, text) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_ctype_lower, 0) - ZEND_ARG_INFO(0, text) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_ctype_graph, 0) - ZEND_ARG_INFO(0, text) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_ctype_print, 0) - ZEND_ARG_INFO(0, text) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_ctype_punct, 0) - ZEND_ARG_INFO(0, text) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_ctype_space, 0) - ZEND_ARG_INFO(0, text) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_ctype_upper, 0) - ZEND_ARG_INFO(0, text) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_ctype_xdigit, 0) - ZEND_ARG_INFO(0, text) -ZEND_END_ARG_INFO() - -/* }}} */ - -/* {{{ ctype_functions[] - * Every user visible function must have an entry in ctype_functions[]. - */ -static zend_function_entry ctype_functions[] = { - PHP_FE(ctype_alnum, arginfo_ctype_alnum) - PHP_FE(ctype_alpha, arginfo_ctype_alpha) - PHP_FE(ctype_cntrl, arginfo_ctype_cntrl) - PHP_FE(ctype_digit, arginfo_ctype_digit) - PHP_FE(ctype_lower, arginfo_ctype_lower) - PHP_FE(ctype_graph, arginfo_ctype_graph) - PHP_FE(ctype_print, arginfo_ctype_print) - PHP_FE(ctype_punct, arginfo_ctype_punct) - PHP_FE(ctype_space, arginfo_ctype_space) - PHP_FE(ctype_upper, arginfo_ctype_upper) - PHP_FE(ctype_xdigit, arginfo_ctype_xdigit) - {NULL, NULL, NULL} /* Must be the last line in ctype_functions[] */ -}; -/* }}} */ - -/* {{{ ctype_module_entry - */ -zend_module_entry ctype_module_entry = { - STANDARD_MODULE_HEADER, - "ctype", - ctype_functions, - NULL, - NULL, - NULL, - NULL, - PHP_MINFO(ctype), - NO_VERSION_YET, - STANDARD_MODULE_PROPERTIES -}; -/* }}} */ - -#ifdef COMPILE_DL_CTYPE -ZEND_GET_MODULE(ctype) -#endif - -/* {{{ PHP_MINFO_FUNCTION - */ -static PHP_MINFO_FUNCTION(ctype) -{ - php_info_print_table_start(); - php_info_print_table_row(2, "ctype functions", "enabled"); - php_info_print_table_end(); -} -/* }}} */ - -/* {{{ ctype - */ -#define CTYPE(iswhat) \ - zval *c, tmp; \ - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &c) == FAILURE) \ - return; \ - switch (Z_TYPE_P(c)) { \ - case IS_LONG: \ - if (Z_LVAL_P(c) <= 255 && Z_LVAL_P(c) >= 0) { \ - RETURN_BOOL(iswhat(Z_LVAL_P(c))); \ - } else if (Z_LVAL_P(c) >= -128 && Z_LVAL_P(c) < 0) { \ - RETURN_BOOL(iswhat(Z_LVAL_P(c) + 256)); \ - } \ - tmp = *c; \ - zval_copy_ctor(&tmp); \ - convert_to_string(&tmp); \ - c = &tmp; \ - case IS_STRING: \ -string:\ - { \ - char *p = Z_STRVAL_P(c), *e = Z_STRVAL_P(c) + Z_STRLEN_P(c); \ - if (e == p) { \ - if (c == &tmp) zval_dtor(&tmp); \ - RETURN_FALSE; \ - } \ - while (p < e) { \ - if(!iswhat((int)*(unsigned char *)(p++))) { \ - if (c == &tmp) zval_dtor(&tmp); \ - RETURN_FALSE; \ - } \ - } \ - if (c == &tmp) zval_dtor(&tmp); \ - RETURN_TRUE; \ - } \ - case IS_UNICODE: \ - tmp = *c; \ - zval_copy_ctor(&tmp); \ - convert_to_string(&tmp); \ - c = &tmp; \ - goto string; \ - default: \ - break; \ - } \ - RETURN_FALSE; - -/* }}} */ - -/* {{{ proto bool ctype_alnum(mixed c) - Checks for alphanumeric character(s) */ -static PHP_FUNCTION(ctype_alnum) -{ - CTYPE(isalnum); -} -/* }}} */ - -/* {{{ proto bool ctype_alpha(mixed c) - Checks for alphabetic character(s) */ -static PHP_FUNCTION(ctype_alpha) -{ - CTYPE(isalpha); -} -/* }}} */ - -/* {{{ proto bool ctype_cntrl(mixed c) - Checks for control character(s) */ -static PHP_FUNCTION(ctype_cntrl) -{ - CTYPE(iscntrl); -} -/* }}} */ - -/* {{{ proto bool ctype_digit(mixed c) - Checks for numeric character(s) */ -static PHP_FUNCTION(ctype_digit) -{ - CTYPE(isdigit); -} -/* }}} */ - -/* {{{ proto bool ctype_lower(mixed c) - Checks for lowercase character(s) */ -static PHP_FUNCTION(ctype_lower) -{ - CTYPE(islower); -} -/* }}} */ - -/* {{{ proto bool ctype_graph(mixed c) - Checks for any printable character(s) except space */ -static PHP_FUNCTION(ctype_graph) -{ - CTYPE(isgraph); -} -/* }}} */ - -/* {{{ proto bool ctype_print(mixed c) - Checks for printable character(s) */ -static PHP_FUNCTION(ctype_print) -{ - CTYPE(isprint); -} -/* }}} */ - -/* {{{ proto bool ctype_punct(mixed c) - Checks for any printable character which is not whitespace or an alphanumeric character */ -static PHP_FUNCTION(ctype_punct) -{ - CTYPE(ispunct); -} -/* }}} */ - -/* {{{ proto bool ctype_space(mixed c) - Checks for whitespace character(s)*/ -static PHP_FUNCTION(ctype_space) -{ - CTYPE(isspace); -} -/* }}} */ - -/* {{{ proto bool ctype_upper(mixed c) - Checks for uppercase character(s) */ -static PHP_FUNCTION(ctype_upper) -{ - CTYPE(isupper); -} -/* }}} */ - -/* {{{ proto bool ctype_xdigit(mixed c) - Checks for character(s) representing a hexadecimal digit */ -static PHP_FUNCTION(ctype_xdigit) -{ - CTYPE(isxdigit); -} -/* }}} */ - -#endif /* HAVE_CTYPE */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/ctype/ctype.dsp b/ext/ctype/ctype.dsp deleted file mode 100644 index 1305c72f6a8f2..0000000000000 --- a/ext/ctype/ctype.dsp +++ /dev/null @@ -1,107 +0,0 @@ -# Microsoft Developer Studio Project File - Name="ctype" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=ctype - Win32 Debug_TS -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "ctype.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "ctype.mak" CFG="ctype - Win32 Debug_TS" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "ctype - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "ctype - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "ctype - Win32 Release_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_TS" -# PROP BASE Intermediate_Dir "Release_TS" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_TS" -# PROP Intermediate_Dir "Release_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CTYPE_EXPORTS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D "WIN32" /D "PHP_EXPORTS" /D "COMPILE_DL_CTYPE" /D ZTS=1 /D HAVE_CTYPE=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_ctype.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" - -!ELSEIF "$(CFG)" == "ctype - Win32 Debug_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_TS" -# PROP BASE Intermediate_Dir "Debug_TS" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug_TS" -# PROP Intermediate_Dir "Debug_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CTYPE_EXPORTS" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "PHP_EXPORTS" /D "COMPILE_DL_CTYPE" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CTYPE=1 /YX /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_ctype.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" - -!ENDIF - -# Begin Target - -# Name "ctype - Win32 Release_TS" -# Name "ctype - Win32 Debug_TS" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\ctype.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\php_ctype.h -# End Source File -# End Group -# End Target -# End Project diff --git a/ext/ctype/ctype.xml b/ext/ctype/ctype.xml deleted file mode 100644 index 5837b9b5d0008..0000000000000 --- a/ext/ctype/ctype.xml +++ /dev/null @@ -1,245 +0,0 @@ - - Character type functions - ctype - - - - These functions check whether a character or string - falls into a certain character class according to the i - current locale. - - - When called with an integer argument theese functions - behave exactly like their C counterparts. - - - When called with a string argument they will check - every character in the string and will only return - true if every character in the string matches the - requested criteria. - - - Passing anything else but a string or integer will - return false immediately. - - - - - - - isalnum - Check for alphanumeric character(s) - - - Description - - - bool isalnum - string c - - - - See also setlocale. - - - - - - - isalpha - - - - Description - - - bool isalpha - string c - - - - - - - - - - iscntrl - - - - Description - - - bool iscntrl - string c - - - - - - - - - - isdigit - - - - Description - - - bool isdigit - string c - - - - - - - - - - islower - - - - Description - - - bool islower - string c - - - - - - - - - - isgraph - - - - Description - - - bool isgraph - string c - - - - - - - - - - isprint - - - - Description - - - bool isprint - string c - - - - - - - - - - ispunct - - - - Description - - - bool ispunct - string c - - - - - - - - - - isspace - - - - Description - - - bool isspace - string c - - - - - - - - - - isupper - - - - Description - - - bool isupper - string c - - - - - - - - - - isxdigit - - - - Description - - - bool isxdigit - string c - - - - - - - - - - - diff --git a/ext/ctype/package.xml b/ext/ctype/package.xml deleted file mode 100644 index 71c9cd9903e38..0000000000000 --- a/ext/ctype/package.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - ctype - Character type detection - - - hholzgra - Hartmut Holzgraefe - hartmut@php.net - lead - - - -The functions provided by this extension check whether a -character or string falls into a certain character class -according to the current locale. - - PHP - - beta - 5.0.0rc1 - 2004-03-19 - -package.xml added to support installation using pear installer - - - - - - - - - - - - - - - - - - - diff --git a/ext/ctype/php_ctype.h b/ext/ctype/php_ctype.h deleted file mode 100644 index 615bd72251aae..0000000000000 --- a/ext/ctype/php_ctype.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Hartmut Holzgraefe | - +----------------------------------------------------------------------+ - */ - -#ifndef PHP_CTYPE_H -#define PHP_CTYPE_H - -#if HAVE_CTYPE - -extern zend_module_entry ctype_module_entry; -#define phpext_ctype_ptr &ctype_module_entry - -#ifdef PHP_WIN32 -#define PHP_CTYPE_API __declspec(dllexport) -#else -#define PHP_CTYPE_API -#endif - -#else - -#define phpext_ctype_ptr NULL - -#endif - -#endif /* PHP_CTYPE_H */ - - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - */ diff --git a/ext/ctype/tests/001.phpt b/ext/ctype/tests/001.phpt deleted file mode 100644 index adcf75749e3e6..0000000000000 --- a/ext/ctype/tests/001.phpt +++ /dev/null @@ -1,52 +0,0 @@ ---TEST-- -ctype on integers ---SKIPIF-- - ---FILE-- - ---EXPECT-- -ctype_lower 26 -ctype_upper 26 -ctype_alpha 52 -ctype_digit 10 -ctype_alnum 62 -ctype_cntrl 33 -ctype_graph 94 -ctype_print 95 -ctype_punct 32 -ctype_space 6 -ctype_xdigit 22 ---UEXPECTF-- -Strict Standards: setlocale(): deprecated in Unicode mode, please use ICU locale functions in %s001.php on line %d -ctype_lower 26 -ctype_upper 26 -ctype_alpha 52 -ctype_digit 10 -ctype_alnum 62 -ctype_cntrl 33 -ctype_graph 94 -ctype_print 95 -ctype_punct 32 -ctype_space 6 -ctype_xdigit 22 diff --git a/ext/ctype/tests/002.phpt b/ext/ctype/tests/002.phpt deleted file mode 100644 index c1339d3338102..0000000000000 --- a/ext/ctype/tests/002.phpt +++ /dev/null @@ -1,64 +0,0 @@ ---TEST-- -ctype on strings ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -LOCALE is '%s' -ctype_lower 26 26 0 -ctype_upper 26 26 0 -ctype_alpha 52 52 0 -ctype_digit 10 10 0 -ctype_alnum 62 62 0 -ctype_cntrl 33 33 0 -ctype_graph 94 94 94 -ctype_print 95 95 95 -ctype_punct 32 32 0 -ctype_space 6 6 0 -ctype_xdigit 22 22 0 ---UEXPECTF-- -Strict Standards: setlocale(): deprecated in Unicode mode, please use ICU locale functions in %s002.php on line %d - -Strict Standards: setlocale(): deprecated in Unicode mode, please use ICU locale functions in %s002.php on line %d -LOCALE is '%s' -ctype_lower 26 26 0 -ctype_upper 26 26 0 -ctype_alpha 52 52 0 -ctype_digit 10 10 0 -ctype_alnum 62 62 0 -ctype_cntrl 33 33 0 -ctype_graph 94 94 94 -ctype_print 95 95 95 -ctype_punct 32 32 0 -ctype_space 6 6 0 -ctype_xdigit 22 22 0 diff --git a/ext/ctype/tests/bug25745.phpt b/ext/ctype/tests/bug25745.phpt deleted file mode 100644 index 74320a865c41a..0000000000000 --- a/ext/ctype/tests/bug25745.phpt +++ /dev/null @@ -1,26 +0,0 @@ ---TEST-- -Bug #25745 (ctype functions fail with non-ascii characters) ---SKIPIF-- - ---FILE-- - ---EXPECT-- -ok diff --git a/ext/ctype/tests/bug34645.phpt b/ext/ctype/tests/bug34645.phpt deleted file mode 100644 index 8c8e260c2815c..0000000000000 --- a/ext/ctype/tests/bug34645.phpt +++ /dev/null @@ -1,13 +0,0 @@ ---TEST-- -Bug #34645 (ctype corrupts memory when validating large numbers) ---SKIPIF-- - ---FILE-- - ---EXPECT-- -bool(true) -int(394829384) diff --git a/ext/curl/CREDITS b/ext/curl/CREDITS deleted file mode 100644 index 610e036787aa3..0000000000000 --- a/ext/curl/CREDITS +++ /dev/null @@ -1,2 +0,0 @@ -cURL -Sterling Hughes diff --git a/ext/curl/config.m4 b/ext/curl/config.m4 deleted file mode 100644 index 188095b3f4934..0000000000000 --- a/ext/curl/config.m4 +++ /dev/null @@ -1,124 +0,0 @@ -dnl -dnl $Id$ -dnl - -PHP_ARG_WITH(curl, for cURL support, -[ --with-curl[=DIR] Include cURL support]) - -dnl Temporary option while we develop this aspect of the extension -PHP_ARG_WITH(curlwrappers, if we should use cURL for url streams, -[ --with-curlwrappers cURL: Use cURL for url streams], no, no) - -if test "$PHP_CURL" != "no"; then - if test -r $PHP_CURL/include/curl/easy.h; then - CURL_DIR=$PHP_CURL - else - AC_MSG_CHECKING(for cURL in default path) - for i in /usr/local /usr; do - if test -r $i/include/curl/easy.h; then - CURL_DIR=$i - AC_MSG_RESULT(found in $i) - break - fi - done - fi - - if test -z "$CURL_DIR"; then - AC_MSG_RESULT(not found) - AC_MSG_ERROR(Please reinstall the libcurl distribution - - easy.h should be in /include/curl/) - fi - - CURL_CONFIG="curl-config" - AC_MSG_CHECKING(for cURL 7.10.5 or greater) - - if ${CURL_DIR}/bin/curl-config --libs > /dev/null 2>&1; then - CURL_CONFIG=${CURL_DIR}/bin/curl-config - else - if ${CURL_DIR}/curl-config --libs > /dev/null 2>&1; then - CURL_CONFIG=${CURL_DIR}/curl-config - fi - fi - - curl_version_full=`$CURL_CONFIG --version` - curl_version=`echo ${curl_version_full} | sed -e 's/libcurl //' | $AWK 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'` - if test "$curl_version" -ge 7010005; then - AC_MSG_RESULT($curl_version_full) - CURL_LIBS=`$CURL_CONFIG --libs` - else - AC_MSG_ERROR(cURL version 7.10.5 or later is required to compile php with cURL support) - fi - - AC_MSG_CHECKING([for SSL support in libcurl]) - CURL_SSL=`$CURL_CONFIG --feature | $EGREP SSL` - if test "$CURL_SSL" = "SSL"; then - AC_MSG_RESULT([yes]) - AC_DEFINE([HAVE_CURL_SSL], [1], [Have cURL with SSL support]) - - AC_MSG_CHECKING([for SSL library used]) - CURL_SSL_FLAVOUR= - for i in $CURL_LIBS; do - if test "$i" = "-lssl"; then - CURL_SSL_FLAVOUR="openssl" - AC_MSG_RESULT([openssl]) - AC_DEFINE([HAVE_CURL_OPENSSL], [1], [Have cURL with OpenSSL support]) - AC_CHECK_HEADERS([openssl/crypto.h]) - break - elif test "$i" = "-lgnutls"; then - CURL_SSL_FLAVOUR="gnutls" - AC_MSG_RESULT([gnutls]) - AC_DEFINE([HAVE_CURL_GNUTLS], [1], [Have cURL with GnuTLS support]) - AC_CHECK_HEADERS([gcrypt.h]) - break - fi - done - if test -z "$CURL_SSL_FLAVOUR"; then - AC_MSG_RESULT([unknown!]) - AC_MSG_WARN([Could not determine the type of SSL library used!]) - AC_MSG_WARN([Building will fail in ZTS mode!]) - fi - else - AC_MSG_RESULT([no]) - fi - - PHP_ADD_INCLUDE($CURL_DIR/include) - PHP_EVAL_LIBLINE($CURL_LIBS, CURL_SHARED_LIBADD) - PHP_ADD_LIBRARY_WITH_PATH(curl, $CURL_DIR/$PHP_LIBDIR, CURL_SHARED_LIBADD) - - PHP_CHECK_LIBRARY(curl,curl_easy_perform, - [ - AC_DEFINE(HAVE_CURL,1,[ ]) - ],[ - AC_MSG_ERROR(There is something wrong. Please check config.log for more information.) - ],[ - $CURL_LIBS -L$CURL_DIR/$PHP_LIBDIR - ]) - - PHP_CHECK_LIBRARY(curl,curl_version_info, - [ - AC_DEFINE(HAVE_CURL_VERSION_INFO,1,[ ]) - ],[],[ - $CURL_LIBS -L$CURL_DIR/$PHP_LIBDIR - ]) - - PHP_CHECK_LIBRARY(curl,curl_easy_strerror, - [ - AC_DEFINE(HAVE_CURL_EASY_STRERROR,1,[ ]) - ],[],[ - $CURL_LIBS -L$CURL_DIR/$PHP_LIBDIR - ]) - - PHP_CHECK_LIBRARY(curl,curl_multi_strerror, - [ - AC_DEFINE(HAVE_CURL_MULTI_STRERROR,1,[ ]) - ],[],[ - $CURL_LIBS -L$CURL_DIR/$PHP_LIBDIR - ]) - - if test "$PHP_CURLWRAPPERS" != "no" ; then - AC_DEFINE(PHP_CURL_URL_WRAPPERS,1,[ ]) - fi - - PHP_NEW_EXTENSION(curl, interface.c multi.c streams.c, $ext_shared) - PHP_SUBST(CURL_SHARED_LIBADD) -fi diff --git a/ext/curl/config.w32 b/ext/curl/config.w32 deleted file mode 100644 index de10e16b82223..0000000000000 --- a/ext/curl/config.w32 +++ /dev/null @@ -1,22 +0,0 @@ -// $Id$ -// vim:ft=javascript - -ARG_WITH("curl", "cURL support", "no"); - -if (PHP_CURL != "no") { - if (CHECK_LIB("libcurl.lib", "curl", PHP_CURL) && - CHECK_HEADER_ADD_INCLUDE("curl/easy.h", "CFLAGS_CURL") && - CHECK_LIB("ssleay32.lib", "curl", PHP_CURL) && - CHECK_LIB("libeay32.lib", "curl", PHP_CURL) && - CHECK_LIB("zlib.lib", "curl", PHP_CURL) && - CHECK_LIB("winmm.lib", "curl", PHP_CURL)) { - EXTENSION("curl", "interface.c multi.c streams.c"); - AC_DEFINE('HAVE_CURL', 1, 'Have cURL library'); - AC_DEFINE('HAVE_CURL_SSL', 1, 'Have SSL suppurt in cURL'); - ADD_FLAG("CFLAGS_CURL", "/D CURL_STATICLIB"); - // TODO: check for curl_version_info - // AC_DEFINE('PHP_CURL_URL_WRAPPERS', 0, 'Use curl for URL wrappers [experimental]'); - } else { - WARNING("curl not enabled; libraries and headers not found"); - } -} diff --git a/ext/curl/curl.dsp b/ext/curl/curl.dsp deleted file mode 100644 index 81d823183d28a..0000000000000 --- a/ext/curl/curl.dsp +++ /dev/null @@ -1,186 +0,0 @@ -# Microsoft Developer Studio Project File - Name="curl" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=curl - Win32 Release_TS -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "curl.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "curl.mak" CFG="curl - Win32 Release_TS" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "curl - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "curl - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "curl - Win32 Debug_TS_SSL" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "curl - Win32 Release_TS_SSL" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "curl - Win32 Release_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_TS" -# PROP BASE Intermediate_Dir "Release_TS" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_TS" -# PROP Intermediate_Dir "Release_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CURL" /D ZTS=1 /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /I "..\..\..\php_build\curl\include" /D "WIN32" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D HAVE_CURL=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x406 /d "NDEBUG" -# ADD RSC /l 0x406 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 -# ADD LINK32 php5ts.lib libcurl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /machine:I386 /nodefaultlib:"MSVCRT" /out:"..\..\Release_TS/php_curl.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\php_build\curl\lib" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "curl - Win32 Debug_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Debug_TS" -# PROP BASE Intermediate_Dir "Debug_TS" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Debug_TS" -# PROP Intermediate_Dir "Debug_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_CURL" /D ZTS=1 /YX /FD /c -# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /I "..\..\..\php_build\curl\include" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CURL=1 /FR /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x406 /d "NDEBUG" -# ADD RSC /l 0x406 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 -# ADD LINK32 php5ts_debug.lib libcurl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib wsock32.lib /nologo /dll /incremental:yes /debug /machine:I386 /nodefaultlib:"MSVCRTD" /out:"..\..\Debug_TS/php_curl.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\curl\lib" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "curl - Win32 Debug_TS_SSL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "curl___Win32_Debug_TS_SSL" -# PROP BASE Intermediate_Dir "curl___Win32_Debug_TS_SSL" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Debug_TS_SSL" -# PROP Intermediate_Dir "Debug_TS_SSL" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CURL=1 /FR /YX /FD /c -# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /I "..\..\..\php_build\curl\include" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_CURL=1 /FR /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x406 /d "NDEBUG" -# ADD RSC /l 0x406 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 php5ts_debug.lib libcurl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /nodefaultlib:"msvcrtd.lib" /out:"..\..\Debug_TS/php_curl.dll" /libpath:"..\..\Debug_TS" -# SUBTRACT BASE LINK32 /pdb:none -# ADD LINK32 php5ts_debug.lib libcurl.lib ssleay32.lib libeay32.lib msvcrt.lib ws2_32.lib winmm.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /incremental:yes /debug /machine:I386 /nodefaultlib:"MSVCRTD" /out:"..\..\Debug_TS/php_curl.dll" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\php_build\curl\lib" -# SUBTRACT LINK32 /pdb:none /nodefaultlib - -!ELSEIF "$(CFG)" == "curl - Win32 Release_TS_SSL" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "curl___Win32_Release_TS_SSL" -# PROP BASE Intermediate_Dir "curl___Win32_Release_TS_SSL" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_TS_SSL" -# PROP Intermediate_Dir "Release_TS_SSL" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D "WIN32" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D HAVE_CURL=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /I "..\..\..\php_build\curl\include" /D "WIN32" /D "CURL_EXPORTS" /D "COMPILE_DL_CURL" /D ZTS=1 /D HAVE_CURL=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x406 /d "NDEBUG" -# ADD RSC /l 0x406 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 php5ts.lib libcurl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /nodefaultlib:"msvcrt.lib" /out:"..\..\Release_TS/php_curl.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" -# SUBTRACT BASE LINK32 /pdb:none -# ADD LINK32 php5ts.lib libcurl.lib ssleay32.lib libeay32.lib msvcrt.lib ws2_32.lib winmm.lib zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /dll /machine:I386 /nodefaultlib:"MSVCRT" /out:"..\..\Release_TS/php_curl.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\php_build\curl\lib" -# SUBTRACT LINK32 /pdb:none - -!ENDIF - -# Begin Target - -# Name "curl - Win32 Release_TS" -# Name "curl - Win32 Debug_TS" -# Name "curl - Win32 Debug_TS_SSL" -# Name "curl - Win32 Release_TS_SSL" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\interface.c -# End Source File - -# Begin Source File -SOURCE=.\multi.c -# End Source File - -# Begin Source File -SOURCE=.\streams.c -# End Source File - -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\php_curl.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/ext/curl/interface.c b/ext/curl/interface.c deleted file mode 100644 index 11d2eac9d7336..0000000000000 --- a/ext/curl/interface.c +++ /dev/null @@ -1,2013 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Sterling Hughes | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if HAVE_CURL - -#include -#include - -#ifdef PHP_WIN32 -#include -#include -#endif - -#include -#include - -/* As of curl 7.11.1 this is no longer defined inside curl.h */ -#ifndef HttpPost -#define HttpPost curl_httppost -#endif - -/* {{{ cruft for thread safe SSL crypto locks */ -#if defined(ZTS) && defined(HAVE_CURL_SSL) -# ifdef PHP_WIN32 -# define PHP_CURL_NEED_OPENSSL_TSL -# include -# else /* !PHP_WIN32 */ -# if defined(HAVE_CURL_OPENSSL) -# if defined(HAVE_OPENSSL_CRYPTO_H) -# define PHP_CURL_NEED_OPENSSL_TSL -# include -# else -# warning \ - "libcurl was compiled with OpenSSL support, but configure could not find " \ - "openssl/crypto.h; thus no SSL crypto locking callbacks will be set, which may " \ - "cause random crashes on SSL requests" -# endif -# elif defined(HAVE_CURL_GNUTLS) -# if defined(HAVE_GCRYPT_H) -# define PHP_CURL_NEED_GNUTLS_TSL -# include -# else -# warning \ - "libcurl was compiled with GnuTLS support, but configure could not find " \ - "gcrypt.h; thus no SSL crypto locking callbacks will be set, which may " \ - "cause random crashes on SSL requests" -# endif -# else -# warning \ - "libcurl was compiled with SSL support, but configure could not determine which" \ - "library was used; thus no SSL crypto locking callbacks will be set, which may " \ - "cause random crashes on SSL requests" -# endif /* HAVE_CURL_OPENSSL || HAVE_CURL_GNUTLS */ -# endif /* PHP_WIN32 */ -#endif /* ZTS && HAVE_CURL_SSL */ -/* }}} */ - -#define SMART_STR_PREALLOC 4096 - -#include "ext/standard/php_smart_str.h" -#include "ext/standard/info.h" -#include "ext/standard/file.h" -#include "ext/standard/url.h" -#include "php_curl.h" - -int le_curl; -int le_curl_multi_handle; - -#ifdef PHP_CURL_NEED_OPENSSL_TSL /* {{{ */ -static MUTEX_T *php_curl_openssl_tsl = NULL; - -static void php_curl_ssl_lock(int mode, int n, const char * file, int line) -{ - if (mode & CRYPTO_LOCK) { - tsrm_mutex_lock(php_curl_openssl_tsl[n]); - } else { - tsrm_mutex_unlock(php_curl_openssl_tsl[n]); - } -} - -static unsigned long php_curl_ssl_id(void) -{ - return (unsigned long) tsrm_thread_id(); -} -#endif -/* }}} */ - -#ifdef PHP_CURL_NEED_GNUTLS_TSL /* {{{ */ -static int php_curl_ssl_mutex_create(void **m) -{ - if (*((MUTEX_T *) m) = tsrm_mutex_alloc()) { - return SUCCESS; - } else { - return FAILURE; - } -} - -static int php_curl_ssl_mutex_destroy(void **m) -{ - tsrm_mutex_free(*((MUTEX_T *) m)); - return SUCCESS; -} - -static int php_curl_ssl_mutex_lock(void **m) -{ - return tsrm_mutex_lock(*((MUTEX_T *) m)); -} - -static int php_curl_ssl_mutex_unlock(void **m) -{ - return tsrm_mutex_unlock(*((MUTEX_T *) m)); -} - -static struct gcry_thread_cbs php_curl_gnutls_tsl = { - GCRY_THREAD_OPTION_USER, - NULL, - php_curl_ssl_mutex_create, - php_curl_ssl_mutex_destroy, - php_curl_ssl_mutex_lock, - php_curl_ssl_mutex_unlock -}; -#endif -/* }}} */ - -static void _php_curl_close(zend_rsrc_list_entry *rsrc TSRMLS_DC); - -#define SAVE_CURL_ERROR(__handle, __err) (__handle)->err.no = (int) __err; - -#define CAAL(s, v) add_assoc_long_ex(return_value, s, sizeof(s), (long) v); -#define CAAD(s, v) add_assoc_double_ex(return_value, s, sizeof(s), (double) v); -#define CAAS(s, v) add_assoc_ascii_string_ex(return_value, s, sizeof(s), (char *) v, 1); -#define CAAZ(s, v) add_assoc_zval_ex(return_value, s, sizeof(s), (zval *) v); - -#if defined(PHP_WIN32) || defined(__GNUC__) - #define php_curl_ret(__ret) RETVAL_FALSE; return __ret; -#else - #define php_curl_ret(__ret) RETVAL_FALSE; return; -#endif - -#define PHP_CURL_CHECK_OPEN_BASEDIR(str, len, __ret) \ - if ((PG(open_basedir) && *PG(open_basedir)) && \ - strncasecmp(str, "file:", sizeof("file:") - 1) == 0) \ - { \ - php_url *tmp_url; \ - \ - if (!(tmp_url = php_url_parse_ex(str, len))) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid URL '%s'", str); \ - php_curl_ret(__ret); \ - } \ - \ - if (!php_memnstr(str, tmp_url->path, strlen(tmp_url->path), str + len)) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "URL '%s' contains unencoded control characters", str); \ - php_url_free(tmp_url); \ - php_curl_ret(__ret); \ - } \ - \ - if (tmp_url->query || tmp_url->fragment || php_check_open_basedir(tmp_url->path TSRMLS_CC)) { \ - php_url_free(tmp_url); \ - php_curl_ret(__ret); \ - } \ - php_url_free(tmp_url); \ - } - -/* {{{ arginfo */ -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_curl_version, 0, 0, 0) - ZEND_ARG_INFO(0, version) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_curl_init, 0, 0, 0) - ZEND_ARG_INFO(0, url) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_curl_copy_handle, 0) - ZEND_ARG_INFO(0, ch) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_curl_setopt, 0) - ZEND_ARG_INFO(0, ch) - ZEND_ARG_INFO(0, option) - ZEND_ARG_INFO(0, value) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_curl_setopt_array, 0) - ZEND_ARG_INFO(0, ch) - ZEND_ARG_ARRAY_INFO(0, options, 0) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_curl_exec, 0) - ZEND_ARG_INFO(0, ch) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_curl_getinfo, 0, 0, 1) - ZEND_ARG_INFO(0, ch) - ZEND_ARG_INFO(0, option) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_curl_error, 0) - ZEND_ARG_INFO(0, ch) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_curl_errno, 0) - ZEND_ARG_INFO(0, ch) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_curl_close, 0) - ZEND_ARG_INFO(0, ch) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_curl_multi_init, 0) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_curl_multi_add_handle, 0) - ZEND_ARG_INFO(0, mh) - ZEND_ARG_INFO(0, ch) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_curl_multi_remove_handle, 0) - ZEND_ARG_INFO(0, mh) - ZEND_ARG_INFO(0, ch) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_curl_multi_select, 0, 0, 1) - ZEND_ARG_INFO(0, mh) - ZEND_ARG_INFO(0, timeout) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_curl_multi_exec, 0, 0, 1) - ZEND_ARG_INFO(0, mh) - ZEND_ARG_INFO(1, still_running) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_curl_multi_getcontent, 0) - ZEND_ARG_INFO(0, ch) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_curl_multi_info_read, 0, 0, 1) - ZEND_ARG_INFO(0, mh) - ZEND_ARG_INFO(0, msgs_in_queue) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_curl_multi_close, 0) - ZEND_ARG_INFO(0, mh) -ZEND_END_ARG_INFO() - -/* }}} */ - -/* {{{ curl_functions[] - */ -zend_function_entry curl_functions[] = { - PHP_FE(curl_init, arginfo_curl_init) - PHP_FE(curl_copy_handle, arginfo_curl_copy_handle) - PHP_FE(curl_version, arginfo_curl_version) - PHP_FE(curl_setopt, arginfo_curl_setopt) - PHP_FE(curl_setopt_array, arginfo_curl_setopt_array) - PHP_FE(curl_exec, arginfo_curl_exec) - PHP_FE(curl_getinfo, arginfo_curl_getinfo) - PHP_FE(curl_error, arginfo_curl_error) - PHP_FE(curl_errno, arginfo_curl_errno) - PHP_FE(curl_close, arginfo_curl_close) - PHP_FE(curl_multi_init, arginfo_curl_multi_init) - PHP_FE(curl_multi_add_handle, arginfo_curl_multi_add_handle) - PHP_FE(curl_multi_remove_handle, arginfo_curl_multi_remove_handle) - PHP_FE(curl_multi_select, arginfo_curl_multi_select) - PHP_FE(curl_multi_exec, arginfo_curl_multi_exec) - PHP_FE(curl_multi_getcontent, arginfo_curl_multi_getcontent) - PHP_FE(curl_multi_info_read, arginfo_curl_multi_info_read) - PHP_FE(curl_multi_close, arginfo_curl_multi_close) - {NULL, NULL, NULL} -}; -/* }}} */ - -/* {{{ curl_module_entry - */ -zend_module_entry curl_module_entry = { - STANDARD_MODULE_HEADER, - "curl", - curl_functions, - PHP_MINIT(curl), - PHP_MSHUTDOWN(curl), - NULL, - NULL, - PHP_MINFO(curl), - NO_VERSION_YET, - STANDARD_MODULE_PROPERTIES -}; -/* }}} */ - -#ifdef COMPILE_DL_CURL -ZEND_GET_MODULE (curl) -#endif - -/* {{{ PHP_MINFO_FUNCTION - */ -PHP_MINFO_FUNCTION(curl) -{ - php_info_print_table_start(); - php_info_print_table_row(2, "cURL support", "enabled"); - php_info_print_table_row(2, "cURL Information", curl_version()); - php_info_print_table_end(); -} -/* }}} */ - -#define REGISTER_CURL_CONSTANT(__c) REGISTER_LONG_CONSTANT(#__c, __c, CONST_CS | CONST_PERSISTENT) - -/* {{{ PHP_MINIT_FUNCTION - */ -PHP_MINIT_FUNCTION(curl) -{ - le_curl = zend_register_list_destructors_ex(_php_curl_close, NULL, "curl", module_number); - le_curl_multi_handle = zend_register_list_destructors_ex(_php_curl_multi_close, NULL, "curl", module_number); - - /* Constants for curl_setopt() */ - REGISTER_CURL_CONSTANT(CURLOPT_DNS_USE_GLOBAL_CACHE); - REGISTER_CURL_CONSTANT(CURLOPT_DNS_CACHE_TIMEOUT); - REGISTER_CURL_CONSTANT(CURLOPT_PORT); - REGISTER_CURL_CONSTANT(CURLOPT_FILE); - REGISTER_CURL_CONSTANT(CURLOPT_READDATA); - REGISTER_CURL_CONSTANT(CURLOPT_INFILE); - REGISTER_CURL_CONSTANT(CURLOPT_INFILESIZE); - REGISTER_CURL_CONSTANT(CURLOPT_URL); - REGISTER_CURL_CONSTANT(CURLOPT_PROXY); - REGISTER_CURL_CONSTANT(CURLOPT_VERBOSE); - REGISTER_CURL_CONSTANT(CURLOPT_HEADER); - REGISTER_CURL_CONSTANT(CURLOPT_HTTPHEADER); - REGISTER_CURL_CONSTANT(CURLOPT_NOPROGRESS); - REGISTER_CURL_CONSTANT(CURLOPT_NOBODY); - REGISTER_CURL_CONSTANT(CURLOPT_FAILONERROR); - REGISTER_CURL_CONSTANT(CURLOPT_UPLOAD); - REGISTER_CURL_CONSTANT(CURLOPT_POST); - REGISTER_CURL_CONSTANT(CURLOPT_FTPLISTONLY); - REGISTER_CURL_CONSTANT(CURLOPT_FTPAPPEND); - REGISTER_CURL_CONSTANT(CURLOPT_NETRC); - REGISTER_CURL_CONSTANT(CURLOPT_FOLLOWLOCATION); -#if CURLOPT_FTPASCII != 0 - REGISTER_CURL_CONSTANT(CURLOPT_FTPASCII); -#endif - REGISTER_CURL_CONSTANT(CURLOPT_PUT); -#if CURLOPT_MUTE != 0 - REGISTER_CURL_CONSTANT(CURLOPT_MUTE); -#endif - REGISTER_CURL_CONSTANT(CURLOPT_USERPWD); - REGISTER_CURL_CONSTANT(CURLOPT_PROXYUSERPWD); - REGISTER_CURL_CONSTANT(CURLOPT_RANGE); - REGISTER_CURL_CONSTANT(CURLOPT_TIMEOUT); - REGISTER_CURL_CONSTANT(CURLOPT_POSTFIELDS); - REGISTER_CURL_CONSTANT(CURLOPT_REFERER); - REGISTER_CURL_CONSTANT(CURLOPT_USERAGENT); - REGISTER_CURL_CONSTANT(CURLOPT_FTPPORT); - REGISTER_CURL_CONSTANT(CURLOPT_FTP_USE_EPSV); - REGISTER_CURL_CONSTANT(CURLOPT_LOW_SPEED_LIMIT); - REGISTER_CURL_CONSTANT(CURLOPT_LOW_SPEED_TIME); - REGISTER_CURL_CONSTANT(CURLOPT_RESUME_FROM); - REGISTER_CURL_CONSTANT(CURLOPT_COOKIE); - REGISTER_CURL_CONSTANT(CURLOPT_COOKIESESSION); - REGISTER_CURL_CONSTANT(CURLOPT_AUTOREFERER); - REGISTER_CURL_CONSTANT(CURLOPT_SSLCERT); - REGISTER_CURL_CONSTANT(CURLOPT_SSLCERTPASSWD); - REGISTER_CURL_CONSTANT(CURLOPT_WRITEHEADER); - REGISTER_CURL_CONSTANT(CURLOPT_SSL_VERIFYHOST); - REGISTER_CURL_CONSTANT(CURLOPT_COOKIEFILE); - REGISTER_CURL_CONSTANT(CURLOPT_SSLVERSION); - REGISTER_CURL_CONSTANT(CURLOPT_TIMECONDITION); - REGISTER_CURL_CONSTANT(CURLOPT_TIMEVALUE); - REGISTER_CURL_CONSTANT(CURLOPT_CUSTOMREQUEST); - REGISTER_CURL_CONSTANT(CURLOPT_STDERR); - REGISTER_CURL_CONSTANT(CURLOPT_TRANSFERTEXT); - REGISTER_CURL_CONSTANT(CURLOPT_RETURNTRANSFER); - REGISTER_CURL_CONSTANT(CURLOPT_QUOTE); - REGISTER_CURL_CONSTANT(CURLOPT_POSTQUOTE); - REGISTER_CURL_CONSTANT(CURLOPT_INTERFACE); - REGISTER_CURL_CONSTANT(CURLOPT_KRB4LEVEL); - REGISTER_CURL_CONSTANT(CURLOPT_HTTPPROXYTUNNEL); - REGISTER_CURL_CONSTANT(CURLOPT_FILETIME); - REGISTER_CURL_CONSTANT(CURLOPT_WRITEFUNCTION); - REGISTER_CURL_CONSTANT(CURLOPT_READFUNCTION); -#if CURLOPT_PASSWDFUNCTION != 0 - REGISTER_CURL_CONSTANT(CURLOPT_PASSWDFUNCTION); -#endif - REGISTER_CURL_CONSTANT(CURLOPT_HEADERFUNCTION); - REGISTER_CURL_CONSTANT(CURLOPT_MAXREDIRS); - REGISTER_CURL_CONSTANT(CURLOPT_MAXCONNECTS); - REGISTER_CURL_CONSTANT(CURLOPT_CLOSEPOLICY); - REGISTER_CURL_CONSTANT(CURLOPT_FRESH_CONNECT); - REGISTER_CURL_CONSTANT(CURLOPT_FORBID_REUSE); - REGISTER_CURL_CONSTANT(CURLOPT_RANDOM_FILE); - REGISTER_CURL_CONSTANT(CURLOPT_EGDSOCKET); - REGISTER_CURL_CONSTANT(CURLOPT_CONNECTTIMEOUT); - REGISTER_CURL_CONSTANT(CURLOPT_SSL_VERIFYPEER); - REGISTER_CURL_CONSTANT(CURLOPT_CAINFO); - REGISTER_CURL_CONSTANT(CURLOPT_CAPATH); - REGISTER_CURL_CONSTANT(CURLOPT_COOKIEJAR); - REGISTER_CURL_CONSTANT(CURLOPT_SSL_CIPHER_LIST); - REGISTER_CURL_CONSTANT(CURLOPT_BINARYTRANSFER); - REGISTER_CURL_CONSTANT(CURLOPT_NOSIGNAL); - REGISTER_CURL_CONSTANT(CURLOPT_PROXYTYPE); - REGISTER_CURL_CONSTANT(CURLOPT_BUFFERSIZE); - REGISTER_CURL_CONSTANT(CURLOPT_HTTPGET); - REGISTER_CURL_CONSTANT(CURLOPT_HTTP_VERSION); - REGISTER_CURL_CONSTANT(CURLOPT_SSLKEY); - REGISTER_CURL_CONSTANT(CURLOPT_SSLKEYTYPE); - REGISTER_CURL_CONSTANT(CURLOPT_SSLKEYPASSWD); - REGISTER_CURL_CONSTANT(CURLOPT_SSLENGINE); - REGISTER_CURL_CONSTANT(CURLOPT_SSLENGINE_DEFAULT); - REGISTER_CURL_CONSTANT(CURLOPT_SSLCERTTYPE); - REGISTER_CURL_CONSTANT(CURLOPT_CRLF); - REGISTER_CURL_CONSTANT(CURLOPT_ENCODING); - REGISTER_CURL_CONSTANT(CURLOPT_PROXYPORT); - REGISTER_CURL_CONSTANT(CURLOPT_UNRESTRICTED_AUTH); - REGISTER_CURL_CONSTANT(CURLOPT_FTP_USE_EPRT); -#if LIBCURL_VERSION_NUM > 0x070b01 /* CURLOPT_TCP_NODELAY is available since curl 7.11.2 */ - REGISTER_CURL_CONSTANT(CURLOPT_TCP_NODELAY); -#endif - REGISTER_CURL_CONSTANT(CURLOPT_HTTP200ALIASES); - REGISTER_CURL_CONSTANT(CURL_TIMECOND_IFMODSINCE); - REGISTER_CURL_CONSTANT(CURL_TIMECOND_IFUNMODSINCE); - REGISTER_CURL_CONSTANT(CURL_TIMECOND_LASTMOD); - -#if LIBCURL_VERSION_NUM > 0x070a05 /* CURLOPT_HTTPAUTH is available since curl 7.10.6 */ - REGISTER_CURL_CONSTANT(CURLOPT_HTTPAUTH); - /* http authentication options */ - REGISTER_CURL_CONSTANT(CURLAUTH_BASIC); - REGISTER_CURL_CONSTANT(CURLAUTH_DIGEST); - REGISTER_CURL_CONSTANT(CURLAUTH_GSSNEGOTIATE); - REGISTER_CURL_CONSTANT(CURLAUTH_NTLM); - REGISTER_CURL_CONSTANT(CURLAUTH_ANY); - REGISTER_CURL_CONSTANT(CURLAUTH_ANYSAFE); -#endif - -#if LIBCURL_VERSION_NUM > 0x070a06 /* CURLOPT_PROXYAUTH is available since curl 7.10.7 */ - REGISTER_CURL_CONSTANT(CURLOPT_PROXYAUTH); -#endif - - /* Constants effecting the way CURLOPT_CLOSEPOLICY works */ - REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_LEAST_RECENTLY_USED); - REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_LEAST_TRAFFIC); - REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_SLOWEST); - REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_CALLBACK); - REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_OLDEST); - - /* Info constants */ - REGISTER_CURL_CONSTANT(CURLINFO_EFFECTIVE_URL); - REGISTER_CURL_CONSTANT(CURLINFO_HTTP_CODE); - REGISTER_CURL_CONSTANT(CURLINFO_HEADER_SIZE); - REGISTER_CURL_CONSTANT(CURLINFO_REQUEST_SIZE); - REGISTER_CURL_CONSTANT(CURLINFO_TOTAL_TIME); - REGISTER_CURL_CONSTANT(CURLINFO_NAMELOOKUP_TIME); - REGISTER_CURL_CONSTANT(CURLINFO_CONNECT_TIME); - REGISTER_CURL_CONSTANT(CURLINFO_PRETRANSFER_TIME); - REGISTER_CURL_CONSTANT(CURLINFO_SIZE_UPLOAD); - REGISTER_CURL_CONSTANT(CURLINFO_SIZE_DOWNLOAD); - REGISTER_CURL_CONSTANT(CURLINFO_SPEED_DOWNLOAD); - REGISTER_CURL_CONSTANT(CURLINFO_SPEED_UPLOAD); - REGISTER_CURL_CONSTANT(CURLINFO_FILETIME); - REGISTER_CURL_CONSTANT(CURLINFO_SSL_VERIFYRESULT); - REGISTER_CURL_CONSTANT(CURLINFO_CONTENT_LENGTH_DOWNLOAD); - REGISTER_CURL_CONSTANT(CURLINFO_CONTENT_LENGTH_UPLOAD); - REGISTER_CURL_CONSTANT(CURLINFO_STARTTRANSFER_TIME); - REGISTER_CURL_CONSTANT(CURLINFO_CONTENT_TYPE); - REGISTER_CURL_CONSTANT(CURLINFO_REDIRECT_TIME); - REGISTER_CURL_CONSTANT(CURLINFO_REDIRECT_COUNT); - REGISTER_CURL_CONSTANT(CURLINFO_HEADER_OUT); - - /* cURL protocol constants (curl_version) */ - REGISTER_CURL_CONSTANT(CURL_VERSION_IPV6); - REGISTER_CURL_CONSTANT(CURL_VERSION_KERBEROS4); - REGISTER_CURL_CONSTANT(CURL_VERSION_SSL); - REGISTER_CURL_CONSTANT(CURL_VERSION_LIBZ); - - /* version constants */ - REGISTER_CURL_CONSTANT(CURLVERSION_NOW); - - /* Error Constants */ - REGISTER_CURL_CONSTANT(CURLE_OK); - REGISTER_CURL_CONSTANT(CURLE_UNSUPPORTED_PROTOCOL); - REGISTER_CURL_CONSTANT(CURLE_FAILED_INIT); - REGISTER_CURL_CONSTANT(CURLE_URL_MALFORMAT); - REGISTER_CURL_CONSTANT(CURLE_URL_MALFORMAT_USER); - REGISTER_CURL_CONSTANT(CURLE_COULDNT_RESOLVE_PROXY); - REGISTER_CURL_CONSTANT(CURLE_COULDNT_RESOLVE_HOST); - REGISTER_CURL_CONSTANT(CURLE_COULDNT_CONNECT); - REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_SERVER_REPLY); - REGISTER_CURL_CONSTANT(CURLE_FTP_ACCESS_DENIED); - REGISTER_CURL_CONSTANT(CURLE_FTP_USER_PASSWORD_INCORRECT); - REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_PASS_REPLY); - REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_USER_REPLY); - REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_PASV_REPLY); - REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_227_FORMAT); - REGISTER_CURL_CONSTANT(CURLE_FTP_CANT_GET_HOST); - REGISTER_CURL_CONSTANT(CURLE_FTP_CANT_RECONNECT); - REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_SET_BINARY); - REGISTER_CURL_CONSTANT(CURLE_PARTIAL_FILE); - REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_RETR_FILE); - REGISTER_CURL_CONSTANT(CURLE_FTP_WRITE_ERROR); - REGISTER_CURL_CONSTANT(CURLE_FTP_QUOTE_ERROR); - REGISTER_CURL_CONSTANT(CURLE_HTTP_NOT_FOUND); - REGISTER_CURL_CONSTANT(CURLE_WRITE_ERROR); - REGISTER_CURL_CONSTANT(CURLE_MALFORMAT_USER); - REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_STOR_FILE); - REGISTER_CURL_CONSTANT(CURLE_READ_ERROR); - REGISTER_CURL_CONSTANT(CURLE_OUT_OF_MEMORY); - REGISTER_CURL_CONSTANT(CURLE_OPERATION_TIMEOUTED); - REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_SET_ASCII); - REGISTER_CURL_CONSTANT(CURLE_FTP_PORT_FAILED); - REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_USE_REST); - REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_GET_SIZE); - REGISTER_CURL_CONSTANT(CURLE_HTTP_RANGE_ERROR); - REGISTER_CURL_CONSTANT(CURLE_HTTP_POST_ERROR); - REGISTER_CURL_CONSTANT(CURLE_SSL_CONNECT_ERROR); - REGISTER_CURL_CONSTANT(CURLE_FTP_BAD_DOWNLOAD_RESUME); - REGISTER_CURL_CONSTANT(CURLE_FILE_COULDNT_READ_FILE); - REGISTER_CURL_CONSTANT(CURLE_LDAP_CANNOT_BIND); - REGISTER_CURL_CONSTANT(CURLE_LDAP_SEARCH_FAILED); - REGISTER_CURL_CONSTANT(CURLE_LIBRARY_NOT_FOUND); - REGISTER_CURL_CONSTANT(CURLE_FUNCTION_NOT_FOUND); - REGISTER_CURL_CONSTANT(CURLE_ABORTED_BY_CALLBACK); - REGISTER_CURL_CONSTANT(CURLE_BAD_FUNCTION_ARGUMENT); - REGISTER_CURL_CONSTANT(CURLE_BAD_CALLING_ORDER); - REGISTER_CURL_CONSTANT(CURLE_HTTP_PORT_FAILED); - REGISTER_CURL_CONSTANT(CURLE_BAD_PASSWORD_ENTERED); - REGISTER_CURL_CONSTANT(CURLE_TOO_MANY_REDIRECTS); - REGISTER_CURL_CONSTANT(CURLE_UNKNOWN_TELNET_OPTION); - REGISTER_CURL_CONSTANT(CURLE_TELNET_OPTION_SYNTAX); - REGISTER_CURL_CONSTANT(CURLE_OBSOLETE); - REGISTER_CURL_CONSTANT(CURLE_SSL_PEER_CERTIFICATE); - REGISTER_CURL_CONSTANT(CURLE_GOT_NOTHING); - REGISTER_CURL_CONSTANT(CURLE_SSL_ENGINE_NOTFOUND); - REGISTER_CURL_CONSTANT(CURLE_SSL_ENGINE_SETFAILED); - REGISTER_CURL_CONSTANT(CURLE_SEND_ERROR); - REGISTER_CURL_CONSTANT(CURLE_RECV_ERROR); - REGISTER_CURL_CONSTANT(CURLE_SHARE_IN_USE); - REGISTER_CURL_CONSTANT(CURLE_SSL_CERTPROBLEM); - REGISTER_CURL_CONSTANT(CURLE_SSL_CIPHER); - REGISTER_CURL_CONSTANT(CURLE_SSL_CACERT); - REGISTER_CURL_CONSTANT(CURLE_BAD_CONTENT_ENCODING); -#if LIBCURL_VERSION_NUM >= 0x070a08 - REGISTER_CURL_CONSTANT(CURLE_LDAP_INVALID_URL); - REGISTER_CURL_CONSTANT(CURLE_FILESIZE_EXCEEDED); -#endif -#if LIBCURL_VERSION_NUM >= 0x070b00 - REGISTER_CURL_CONSTANT(CURLE_FTP_SSL_FAILED); -#endif - - REGISTER_CURL_CONSTANT(CURLPROXY_HTTP); - REGISTER_CURL_CONSTANT(CURLPROXY_SOCKS5); - - REGISTER_CURL_CONSTANT(CURL_NETRC_OPTIONAL); - REGISTER_CURL_CONSTANT(CURL_NETRC_IGNORED); - REGISTER_CURL_CONSTANT(CURL_NETRC_REQUIRED); - - REGISTER_CURL_CONSTANT(CURL_HTTP_VERSION_NONE); - REGISTER_CURL_CONSTANT(CURL_HTTP_VERSION_1_0); - REGISTER_CURL_CONSTANT(CURL_HTTP_VERSION_1_1); - - REGISTER_CURL_CONSTANT(CURLM_CALL_MULTI_PERFORM); - REGISTER_CURL_CONSTANT(CURLM_OK); - REGISTER_CURL_CONSTANT(CURLM_BAD_HANDLE); - REGISTER_CURL_CONSTANT(CURLM_BAD_EASY_HANDLE); - REGISTER_CURL_CONSTANT(CURLM_OUT_OF_MEMORY); - REGISTER_CURL_CONSTANT(CURLM_INTERNAL_ERROR); - - REGISTER_CURL_CONSTANT(CURLMSG_DONE); - -#if LIBCURL_VERSION_NUM >= 0x070c02 - REGISTER_CURL_CONSTANT(CURLOPT_FTPSSLAUTH); - REGISTER_CURL_CONSTANT(CURLFTPAUTH_DEFAULT); - REGISTER_CURL_CONSTANT(CURLFTPAUTH_SSL); - REGISTER_CURL_CONSTANT(CURLFTPAUTH_TLS); -#endif - -#if LIBCURL_VERSION_NUM > 0x070b00 - REGISTER_CURL_CONSTANT(CURLOPT_FTP_SSL); - REGISTER_CURL_CONSTANT(CURLFTPSSL_NONE); - REGISTER_CURL_CONSTANT(CURLFTPSSL_TRY); - REGISTER_CURL_CONSTANT(CURLFTPSSL_CONTROL); - REGISTER_CURL_CONSTANT(CURLFTPSSL_ALL); -#endif - -#ifdef PHP_CURL_NEED_OPENSSL_TSL - if (!CRYPTO_get_id_callback()) { - int i, c = CRYPTO_num_locks(); - - php_curl_openssl_tsl = malloc(c * sizeof(MUTEX_T)); - - for (i = 0; i < c; ++i) { - php_curl_openssl_tsl[i] = tsrm_mutex_alloc(); - } - - CRYPTO_set_id_callback(php_curl_ssl_id); - CRYPTO_set_locking_callback(php_curl_ssl_lock); - } -#endif -#ifdef PHP_CURL_NEED_GNUTLS_TSL - gcry_control(GCRYCTL_SET_THREAD_CBS, &php_curl_gnutls_tsl); -#endif - - if (curl_global_init(CURL_GLOBAL_SSL) != CURLE_OK) { - return FAILURE; - } - -#ifdef PHP_CURL_URL_WRAPPERS -# if HAVE_CURL_VERSION_INFO - { - curl_version_info_data *info = curl_version_info(CURLVERSION_NOW); - char **p = (char **)info->protocols; - - while (*p != NULL) { - php_register_url_stream_wrapper(*p++, &php_curl_wrapper TSRMLS_CC); - } - } -# else - php_register_url_stream_wrapper("http", &php_curl_wrapper TSRMLS_CC); - php_register_url_stream_wrapper("https", &php_curl_wrapper TSRMLS_CC); - php_register_url_stream_wrapper("ftp", &php_curl_wrapper TSRMLS_CC); - php_register_url_stream_wrapper("ldap", &php_curl_wrapper TSRMLS_CC); -# endif -#endif - - return SUCCESS; -} -/* }}} */ - -/* {{{ PHP_MSHUTDOWN_FUNCTION - */ -PHP_MSHUTDOWN_FUNCTION(curl) -{ -#ifdef PHP_CURL_URL_WRAPPERS - php_unregister_url_stream_wrapper("http" TSRMLS_CC); - php_unregister_url_stream_wrapper("https" TSRMLS_CC); - php_unregister_url_stream_wrapper("ftp" TSRMLS_CC); - php_unregister_url_stream_wrapper("ldap" TSRMLS_CC); -#endif - curl_global_cleanup(); -#ifdef PHP_CURL_NEED_OPENSSL_TSL - if (php_curl_openssl_tsl) { - int i, c = CRYPTO_num_locks(); - - CRYPTO_set_id_callback(NULL); - CRYPTO_set_locking_callback(NULL); - - for (i = 0; i < c; ++i) { - tsrm_mutex_free(php_curl_openssl_tsl[i]); - } - - free(php_curl_openssl_tsl); - php_curl_openssl_tsl = NULL; - } -#endif - return SUCCESS; -} -/* }}} */ - -/* {{{ curl_write - */ -static size_t curl_write(char *data, size_t size, size_t nmemb, void *ctx) -{ - php_curl *ch = (php_curl *) ctx; - php_curl_write *t = ch->handlers->write; - size_t length = size * nmemb; - TSRMLS_FETCH_FROM_CTX(ch->thread_ctx); - -#if PHP_CURL_DEBUG - fprintf(stderr, "curl_write() called\n"); - fprintf(stderr, "data = %s, size = %d, nmemb = %d, ctx = %x\n", data, size, nmemb, ctx); -#endif - - switch (t->method) { - case PHP_CURL_STDOUT: - PHPWRITE(data, length); - break; - case PHP_CURL_FILE: - return fwrite(data, size, nmemb, t->fp); - case PHP_CURL_RETURN: - if (length > 0) { - smart_str_appendl(&t->buf, data, (int) length); - } - break; - case PHP_CURL_USER: { - zval **argv[2]; - zval *retval_ptr = NULL; - zval *handle = NULL; - zval *zdata = NULL; - int error; - zend_fcall_info fci; - - MAKE_STD_ZVAL(handle); - ZVAL_RESOURCE(handle, ch->id); - zend_list_addref(ch->id); - argv[0] = &handle; - - MAKE_STD_ZVAL(zdata); - ZVAL_STRINGL(zdata, data, length, 1); - argv[1] = &zdata; - - fci.size = sizeof(fci); - fci.function_table = EG(function_table); - fci.object_pp = NULL; - fci.function_name = t->func_name; - fci.retval_ptr_ptr = &retval_ptr; - fci.param_count = 2; - fci.params = argv; - fci.no_separation = 0; - fci.symbol_table = NULL; - - ch->in_callback = 1; - error = zend_call_function(&fci, &t->fci_cache TSRMLS_CC); - ch->in_callback = 0; - if (error == FAILURE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not call the CURLOPT_WRITEFUNCTION"); - length = -1; - } else if (retval_ptr) { - if (Z_TYPE_P(retval_ptr) != IS_LONG) { - convert_to_long_ex(&retval_ptr); - } - length = Z_LVAL_P(retval_ptr); - zval_ptr_dtor(&retval_ptr); - } - - zval_ptr_dtor(argv[0]); - zval_ptr_dtor(argv[1]); - break; - } - } - - return length; -} -/* }}} */ - -/* {{{ curl_read - */ -static size_t curl_read(char *data, size_t size, size_t nmemb, void *ctx) -{ - php_curl *ch = (php_curl *) ctx; - php_curl_read *t = ch->handlers->read; - int length = -1; - - switch (t->method) { - case PHP_CURL_DIRECT: - if (t->fp) { - length = fread(data, size, nmemb, t->fp); - } - break; - case PHP_CURL_USER: { - zval **argv[3]; - zval *handle = NULL; - zval *zfd = NULL; - zval *zlength = NULL; - zval *retval_ptr; - int error; - zend_fcall_info fci; - TSRMLS_FETCH_FROM_CTX(ch->thread_ctx); - - MAKE_STD_ZVAL(handle); - MAKE_STD_ZVAL(zfd); - MAKE_STD_ZVAL(zlength); - - ZVAL_RESOURCE(handle, ch->id); - zend_list_addref(ch->id); - ZVAL_RESOURCE(zfd, t->fd); - zend_list_addref(t->fd); - ZVAL_LONG(zlength, (int) size * nmemb); - - argv[0] = &handle; - argv[1] = &zfd; - argv[2] = &zlength; - - fci.size = sizeof(fci); - fci.function_table = EG(function_table); - fci.function_name = t->func_name; - fci.object_pp = NULL; - fci.retval_ptr_ptr = &retval_ptr; - fci.param_count = 3; - fci.params = argv; - fci.no_separation = 0; - fci.symbol_table = NULL; - - ch->in_callback = 1; - error = zend_call_function(&fci, &t->fci_cache TSRMLS_CC); - ch->in_callback = 0; - if (error == FAILURE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot call the CURLOPT_READFUNCTION"); - length = -1; - } else if (retval_ptr) { - if (Z_TYPE_P(retval_ptr) == IS_STRING) { - length = MIN(size * nmemb, Z_STRLEN_P(retval_ptr)); - memcpy(data, Z_STRVAL_P(retval_ptr), length); - } - zval_ptr_dtor(&retval_ptr); - } - - zval_ptr_dtor(argv[0]); - zval_ptr_dtor(argv[1]); - zval_ptr_dtor(argv[2]); - break; - } - } - - return length; -} -/* }}} */ - -/* {{{ curl_write_header - */ -static size_t curl_write_header(char *data, size_t size, size_t nmemb, void *ctx) -{ - php_curl *ch = (php_curl *) ctx; - php_curl_write *t = ch->handlers->write_header; - size_t length = size * nmemb; - TSRMLS_FETCH_FROM_CTX(ch->thread_ctx); - - switch (t->method) { - case PHP_CURL_STDOUT: - /* Handle special case write when we're returning the entire transfer - */ - if (ch->handlers->write->method == PHP_CURL_RETURN && length > 0) { - smart_str_appendl(&ch->handlers->write->buf, data, (int) length); - } else { - PHPWRITE(data, length); - } - break; - case PHP_CURL_FILE: - return fwrite(data, size, nmemb, t->fp); - case PHP_CURL_USER: { - zval **argv[2]; - zval *handle = NULL; - zval *zdata = NULL; - zval *retval_ptr; - int error; - zend_fcall_info fci; - - MAKE_STD_ZVAL(handle); - MAKE_STD_ZVAL(zdata); - - ZVAL_RESOURCE(handle, ch->id); - zend_list_addref(ch->id); - ZVAL_STRINGL(zdata, data, length, 1); - - argv[0] = &handle; - argv[1] = &zdata; - - fci.size = sizeof(fci); - fci.function_table = EG(function_table); - fci.function_name = t->func_name; - fci.symbol_table = NULL; - fci.object_pp = NULL; - fci.retval_ptr_ptr = &retval_ptr; - fci.param_count = 2; - fci.params = argv; - fci.no_separation = 0; - - ch->in_callback = 1; - error = zend_call_function(&fci, &t->fci_cache TSRMLS_CC); - ch->in_callback = 0; - if (error == FAILURE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not call the CURLOPT_HEADERFUNCTION"); - length = -1; - } else if (retval_ptr) { - if (Z_TYPE_P(retval_ptr) != IS_LONG) { - convert_to_long_ex(&retval_ptr); - } - length = Z_LVAL_P(retval_ptr); - zval_ptr_dtor(&retval_ptr); - } - zval_ptr_dtor(argv[0]); - zval_ptr_dtor(argv[1]); - break; - } - - case PHP_CURL_IGNORE: - return length; - - default: - return -1; - } - - return length; -} -/* }}} */ - -static int curl_debug(CURL *cp, curl_infotype type, char *buf, size_t buf_len, void *ctx) -{ - php_curl *ch = (php_curl *) ctx; - - if (type == CURLINFO_HEADER_OUT) { - if (ch->header.str_len) { - efree(ch->header.str); - } - if (buf_len > 0) { - ch->header.str = estrndup(buf, buf_len); - ch->header.str_len = buf_len; - } - } - - return 0; -} - -#if CURLOPT_PASSWDFUNCTION != 0 -/* {{{ curl_passwd - */ -static size_t curl_passwd(void *ctx, char *prompt, char *buf, int buflen) -{ - php_curl *ch = (php_curl *) ctx; - zval *func = ch->handlers->passwd; - zval *argv[3]; - zval *retval = NULL; - int error; - int ret = -1; - TSRMLS_FETCH_FROM_CTX(ch->thread_ctx); - - MAKE_STD_ZVAL(argv[0]); - MAKE_STD_ZVAL(argv[1]); - MAKE_STD_ZVAL(argv[2]); - - ZVAL_RESOURCE(argv[0], ch->id); - zend_list_addref(ch->id); - ZVAL_STRING(argv[1], prompt, 1); - ZVAL_LONG(argv[2], buflen); - - error = call_user_function(EG(function_table), NULL, func, retval, 2, argv TSRMLS_CC); - if (error == FAILURE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not call the CURLOPT_PASSWDFUNCTION"); - } else if (Z_TYPE_P(retval) == IS_STRING || Z_TYPE_P(retval) == IS_UNICODE) { - if (Z_TYPE_P(retval) == IS_UNICODE) { - convert_to_string_ex(&retval); - } - if (Z_STRLEN_P(retval) > buflen) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Returned password is too long for libcurl to handle"); - } else { - strlcpy(buf, Z_STRVAL_P(retval), Z_STRLEN_P(retval)); - } - } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "User handler '%v' did not return a string", func); - } - - zval_ptr_dtor(&argv[0]); - zval_ptr_dtor(&argv[1]); - zval_ptr_dtor(&argv[2]); - zval_ptr_dtor(&retval); - - return ret; -} -/* }}} */ -#endif - -/* {{{ curl_free_string - */ -static void curl_free_string(void **string) -{ - efree(*string); -} -/* }}} */ - -/* {{{ curl_free_post - */ -static void curl_free_post(void **post) -{ - curl_formfree((struct HttpPost *) *post); -} -/* }}} */ - -/* {{{ curl_free_slist - */ -static void curl_free_slist(void **slist) -{ - curl_slist_free_all((struct curl_slist *) *slist); -} -/* }}} */ - -/* {{{ proto array curl_version([int version]) U - Return cURL version information. */ -PHP_FUNCTION(curl_version) -{ - curl_version_info_data *d; - long uversion = CURLVERSION_NOW; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &uversion) == FAILURE) { - return; - } - - d = curl_version_info(uversion); - if (d == NULL) { - RETURN_FALSE; - } - - array_init(return_value); - - CAAL("version_number", d->version_num); - CAAL("age", d->age); - CAAL("features", d->features); - CAAL("ssl_version_number", d->ssl_version_num); - CAAS("version", d->version); - CAAS("host", d->host); - CAAS("ssl_version", d->ssl_version); - CAAS("libz_version", d->libz_version); - /* Add an array of protocols */ - { - char **p = (char **) d->protocols; - zval *protocol_list = NULL; - - MAKE_STD_ZVAL(protocol_list); - array_init(protocol_list); - - while (*p != NULL) { - add_next_index_ascii_string(protocol_list, *p++, 1); - } - CAAZ("protocols", protocol_list); - } -} -/* }}} */ - -/* {{{ alloc_curl_handle - */ -static void alloc_curl_handle(php_curl **ch) -{ - *ch = emalloc(sizeof(php_curl)); - (*ch)->handlers = ecalloc(1, sizeof(php_curl_handlers)); - (*ch)->handlers->write = ecalloc(1, sizeof(php_curl_write)); - (*ch)->handlers->write_header = ecalloc(1, sizeof(php_curl_write)); - (*ch)->handlers->read = ecalloc(1, sizeof(php_curl_read)); - - (*ch)->in_callback = 0; - (*ch)->header.str_len = 0; - - memset(&(*ch)->err, 0, sizeof((*ch)->err)); - - zend_llist_init(&(*ch)->to_free.str, sizeof(char *), (void(*)(void *)) curl_free_string, 0); - zend_llist_init(&(*ch)->to_free.slist, sizeof(struct curl_slist), (void(*)(void *)) curl_free_slist, 0); - zend_llist_init(&(*ch)->to_free.post, sizeof(struct HttpPost), (void(*)(void *)) curl_free_post, 0); -} -/* }}} */ - -/* {{{ proto resource curl_init([string url]) U - Initialize a cURL session */ -PHP_FUNCTION(curl_init) -{ - php_curl *ch; - CURL *cp; - char *src = NULL; - int src_len; - zend_uchar src_type; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|t", &src, &src_len, &src_type) == FAILURE) { - RETURN_FALSE; - } - - if (src && src_type == IS_UNICODE) { - src = zend_unicode_to_ascii((UChar*)src, src_len TSRMLS_CC); - if (!src) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Binary or ASCII-Unicode string expected, non-ASCII-Unicode string received"); - RETURN_FALSE; - } - } - - cp = curl_easy_init(); - if (!cp) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not initialize a new cURL handle"); - RETURN_FALSE; - } - - alloc_curl_handle(&ch); - TSRMLS_SET_CTX(ch->thread_ctx); - - ch->cp = cp; - - ch->handlers->write->method = PHP_CURL_STDOUT; - ch->handlers->write->type = PHP_CURL_ASCII; - ch->handlers->read->method = PHP_CURL_DIRECT; - ch->handlers->write_header->method = PHP_CURL_IGNORE; - - ch->uses = 0; - - curl_easy_setopt(ch->cp, CURLOPT_NOPROGRESS, 1); - curl_easy_setopt(ch->cp, CURLOPT_VERBOSE, 0); - curl_easy_setopt(ch->cp, CURLOPT_ERRORBUFFER, ch->err.str); - curl_easy_setopt(ch->cp, CURLOPT_WRITEFUNCTION, curl_write); - curl_easy_setopt(ch->cp, CURLOPT_FILE, (void *) ch); - curl_easy_setopt(ch->cp, CURLOPT_READFUNCTION, curl_read); - curl_easy_setopt(ch->cp, CURLOPT_INFILE, (void *) ch); - curl_easy_setopt(ch->cp, CURLOPT_HEADERFUNCTION, curl_write_header); - curl_easy_setopt(ch->cp, CURLOPT_WRITEHEADER, (void *) ch); - curl_easy_setopt(ch->cp, CURLOPT_DNS_USE_GLOBAL_CACHE, 1); - curl_easy_setopt(ch->cp, CURLOPT_DNS_CACHE_TIMEOUT, 120); - curl_easy_setopt(ch->cp, CURLOPT_MAXREDIRS, 20); /* prevent infinite redirects */ -#if defined(ZTS) - curl_easy_setopt(ch->cp, CURLOPT_NOSIGNAL, 1); -#endif - - if (src) { - char *urlcopy; - - urlcopy = estrndup(src, src_len); - curl_easy_setopt(ch->cp, CURLOPT_URL, urlcopy); - zend_llist_add_element(&ch->to_free.str, &urlcopy); - } - - ZEND_REGISTER_RESOURCE(return_value, ch, le_curl); - ch->id = Z_LVAL_P(return_value); -} -/* }}} */ - -/* {{{ proto resource curl_copy_handle(resource ch) U - Copy a cURL handle along with all of it's preferences */ -PHP_FUNCTION(curl_copy_handle) -{ - CURL *cp; - zval *zid; - php_curl *ch, *dupch; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zid) == FAILURE) { - RETURN_FALSE; - } - - ZEND_FETCH_RESOURCE(ch, php_curl *, &zid, -1, le_curl_name, le_curl); - - cp = curl_easy_duphandle(ch->cp); - if (!cp) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot duplicate cURL handle"); - RETURN_FALSE; - } - - alloc_curl_handle(&dupch); - TSRMLS_SET_CTX(dupch->thread_ctx); - - dupch->cp = cp; - dupch->handlers->write->method = ch->handlers->write->method; - dupch->handlers->write->type = ch->handlers->write->type; - dupch->handlers->read->method = ch->handlers->read->method; - dupch->handlers->write_header->method = ch->handlers->write_header->method; - - dupch->handlers->write->fp = ch->handlers->write->fp; - dupch->handlers->write_header->fp = ch->handlers->write_header->fp; - dupch->handlers->read->fp = ch->handlers->read->fp; - dupch->handlers->read->fd = ch->handlers->read->fd; -#if CURLOPT_PASSWDDATA != 0 - if (ch->handlers->passwd) { - zval_add_ref(&ch->handlers->passwd); - dupch->handlers->passwd = ch->handlers->passwd; - curl_easy_setopt(ch->cp, CURLOPT_PASSWDDATA, (void *) dupch); - } -#endif - if (ch->handlers->write->func_name) { - zval_add_ref(&ch->handlers->write->func_name); - dupch->handlers->write->func_name = ch->handlers->write->func_name; - } - if (ch->handlers->read->func_name) { - zval_add_ref(&ch->handlers->read->func_name); - dupch->handlers->read->func_name = ch->handlers->read->func_name; - } - if (ch->handlers->write_header->func_name) { - zval_add_ref(&ch->handlers->write_header->func_name); - dupch->handlers->write_header->func_name = ch->handlers->write_header->func_name; - } - - curl_easy_setopt(dupch->cp, CURLOPT_ERRORBUFFER, dupch->err.str); - curl_easy_setopt(dupch->cp, CURLOPT_FILE, (void *) dupch); - curl_easy_setopt(dupch->cp, CURLOPT_INFILE, (void *) dupch); - curl_easy_setopt(dupch->cp, CURLOPT_WRITEHEADER, (void *) dupch); - - zend_llist_copy(&dupch->to_free.str, &ch->to_free.str); - zend_llist_copy(&dupch->to_free.slist, &ch->to_free.slist); - zend_llist_copy(&dupch->to_free.post, &ch->to_free.post); - - ZEND_REGISTER_RESOURCE(return_value, dupch, le_curl); - dupch->id = Z_LVAL_P(return_value); -} -/* }}} */ - -static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *return_value TSRMLS_DC) -{ - CURLcode error=CURLE_OK; - - switch (option) { - case CURLOPT_INFILESIZE: - case CURLOPT_VERBOSE: - case CURLOPT_HEADER: - case CURLOPT_NOPROGRESS: - case CURLOPT_NOBODY: - case CURLOPT_FAILONERROR: - case CURLOPT_UPLOAD: - case CURLOPT_POST: - case CURLOPT_FTPLISTONLY: - case CURLOPT_FTPAPPEND: - case CURLOPT_NETRC: - case CURLOPT_PUT: -#if CURLOPT_MUTE != 0 - case CURLOPT_MUTE: -#endif - case CURLOPT_TIMEOUT: - case CURLOPT_FTP_USE_EPSV: - case CURLOPT_LOW_SPEED_LIMIT: - case CURLOPT_SSLVERSION: - case CURLOPT_LOW_SPEED_TIME: - case CURLOPT_RESUME_FROM: - case CURLOPT_TIMEVALUE: - case CURLOPT_TIMECONDITION: - case CURLOPT_TRANSFERTEXT: - case CURLOPT_HTTPPROXYTUNNEL: - case CURLOPT_FILETIME: - case CURLOPT_MAXREDIRS: - case CURLOPT_MAXCONNECTS: - case CURLOPT_CLOSEPOLICY: - case CURLOPT_FRESH_CONNECT: - case CURLOPT_FORBID_REUSE: - case CURLOPT_CONNECTTIMEOUT: - case CURLOPT_SSL_VERIFYHOST: - case CURLOPT_SSL_VERIFYPEER: - case CURLOPT_DNS_USE_GLOBAL_CACHE: - case CURLOPT_NOSIGNAL: - case CURLOPT_PROXYTYPE: - case CURLOPT_BUFFERSIZE: - case CURLOPT_HTTPGET: - case CURLOPT_HTTP_VERSION: - case CURLOPT_CRLF: - case CURLOPT_DNS_CACHE_TIMEOUT: - case CURLOPT_PROXYPORT: - case CURLOPT_FTP_USE_EPRT: -#if LIBCURL_VERSION_NUM > 0x070a05 /* CURLOPT_HTTPAUTH is available since curl 7.10.6 */ - case CURLOPT_HTTPAUTH: -#endif -#if LIBCURL_VERSION_NUM > 0x070a06 /* CURLOPT_PROXYAUTH is available since curl 7.10.7 */ - case CURLOPT_PROXYAUTH: -#endif - -#if LIBCURL_VERSION_NUM >= 0x070c02 - case CURLOPT_FTPSSLAUTH: -#endif -#if LIBCURL_VERSION_NUM > 0x070b00 - case CURLOPT_FTP_SSL: -#endif - case CURLOPT_UNRESTRICTED_AUTH: - case CURLOPT_PORT: - case CURLOPT_AUTOREFERER: - case CURLOPT_COOKIESESSION: -#if LIBCURL_VERSION_NUM > 0x070b01 /* CURLOPT_TCP_NODELAY is available since curl 7.11.2 */ - case CURLOPT_TCP_NODELAY: -#endif - convert_to_long_ex(zvalue); - error = curl_easy_setopt(ch->cp, option, Z_LVAL_PP(zvalue)); - break; - case CURLOPT_FOLLOWLOCATION: - convert_to_long_ex(zvalue); - if (PG(open_basedir) && *PG(open_basedir)) { - if (Z_LVAL_PP(zvalue) != 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "CURLOPT_FOLLOWLOCATION cannot be activated when open_basedir is set"); - RETVAL_FALSE; - return 1; - } - } - error = curl_easy_setopt(ch->cp, option, Z_LVAL_PP(zvalue)); - break; - case CURLOPT_URL: - case CURLOPT_PROXY: - case CURLOPT_USERPWD: - case CURLOPT_PROXYUSERPWD: - case CURLOPT_RANGE: - case CURLOPT_CUSTOMREQUEST: - case CURLOPT_USERAGENT: - case CURLOPT_FTPPORT: - case CURLOPT_COOKIE: - case CURLOPT_REFERER: - case CURLOPT_INTERFACE: - case CURLOPT_KRB4LEVEL: - case CURLOPT_EGDSOCKET: - case CURLOPT_CAINFO: - case CURLOPT_CAPATH: - case CURLOPT_SSL_CIPHER_LIST: - case CURLOPT_SSLKEY: - case CURLOPT_SSLKEYTYPE: - case CURLOPT_SSLKEYPASSWD: - case CURLOPT_SSLENGINE: - case CURLOPT_SSLENGINE_DEFAULT: - case CURLOPT_SSLCERTTYPE: - case CURLOPT_ENCODING: { - char *copystr = NULL; - - convert_to_string_ex(zvalue); - - if (option == CURLOPT_URL) { - PHP_CURL_CHECK_OPEN_BASEDIR(Z_STRVAL_PP(zvalue), Z_STRLEN_PP(zvalue), 1); - } - - copystr = estrndup(Z_STRVAL_PP(zvalue), Z_STRLEN_PP(zvalue)); - error = curl_easy_setopt(ch->cp, option, copystr); - zend_llist_add_element(&ch->to_free.str, ©str); - - break; - } - case CURLOPT_FILE: - case CURLOPT_INFILE: - case CURLOPT_WRITEHEADER: - case CURLOPT_STDERR: { - FILE *fp = NULL; - int type; - void * what; - - what = zend_fetch_resource(zvalue TSRMLS_CC, -1, "File-Handle", &type, 1, php_file_le_stream()); - if (!what) { - RETVAL_FALSE; - return 1; - } - - if (FAILURE == php_stream_cast((php_stream *) what, PHP_STREAM_AS_STDIO, (void *) &fp, REPORT_ERRORS)) { - RETVAL_FALSE; - return 1; - } - - if (!fp) { - RETVAL_FALSE; - return 1; - } - - error = CURLE_OK; - switch (option) { - case CURLOPT_FILE: - ch->handlers->write->fp = fp; - ch->handlers->write->method = PHP_CURL_FILE; - break; - case CURLOPT_WRITEHEADER: - ch->handlers->write_header->fp = fp; - ch->handlers->write_header->method = PHP_CURL_FILE; - break; - case CURLOPT_INFILE: - zend_list_addref(Z_LVAL_PP(zvalue)); - ch->handlers->read->fp = fp; - ch->handlers->read->fd = Z_LVAL_PP(zvalue); - break; - default: - error = curl_easy_setopt(ch->cp, option, fp); - break; - } - - break; - } - case CURLOPT_RETURNTRANSFER: - convert_to_long_ex(zvalue); - - if (Z_LVAL_PP(zvalue)) { - ch->handlers->write->method = PHP_CURL_RETURN; - } else { - ch->handlers->write->method = PHP_CURL_STDOUT; - } - break; - case CURLOPT_BINARYTRANSFER: - convert_to_long_ex(zvalue); - - if (Z_LVAL_PP(zvalue)) { - ch->handlers->write->type = PHP_CURL_BINARY; - } else { - ch->handlers->write->type = PHP_CURL_ASCII; - } - break; - case CURLOPT_WRITEFUNCTION: - if (ch->handlers->write->func_name) { - zval_ptr_dtor(&ch->handlers->write->func_name); - ch->handlers->write->fci_cache = empty_fcall_info_cache; - } - zval_add_ref(zvalue); - ch->handlers->write->func_name = *zvalue; - ch->handlers->write->method = PHP_CURL_USER; - break; - case CURLOPT_READFUNCTION: - if (ch->handlers->read->func_name) { - zval_ptr_dtor(&ch->handlers->read->func_name); - ch->handlers->write->fci_cache = empty_fcall_info_cache; - } - zval_add_ref(zvalue); - ch->handlers->read->func_name = *zvalue; - ch->handlers->read->method = PHP_CURL_USER; - break; - case CURLOPT_HEADERFUNCTION: - if (ch->handlers->write_header->func_name) { - zval_ptr_dtor(&ch->handlers->write_header->func_name); - ch->handlers->write->fci_cache = empty_fcall_info_cache; - } - zval_add_ref(zvalue); - ch->handlers->write_header->func_name = *zvalue; - ch->handlers->write_header->method = PHP_CURL_USER; - break; -#if CURLOPT_PASSWDFUNCTION != 0 - case CURLOPT_PASSWDFUNCTION: - if (ch->handlers->passwd) { - zval_ptr_dtor(&ch->handlers->passwd); - } - zval_add_ref(zvalue); - ch->handlers->passwd = *zvalue; - error = curl_easy_setopt(ch->cp, CURLOPT_PASSWDFUNCTION, curl_passwd); - error = curl_easy_setopt(ch->cp, CURLOPT_PASSWDDATA, (void *) ch); - break; -#endif - case CURLOPT_POSTFIELDS: - if (Z_TYPE_PP(zvalue) == IS_ARRAY || Z_TYPE_PP(zvalue) == IS_OBJECT) { - zval **current; - HashTable *postfields; - struct HttpPost *first = NULL; - struct HttpPost *last = NULL; - char *postval; - zstr string_key; - char *key; - ulong num_key; - uint string_key_len; - int type = -1; - - postfields = HASH_OF(*zvalue); - if (!postfields) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't get HashTable in CURLOPT_POSTFIELDS"); - RETVAL_FALSE; - return 1; - } - - for (zend_hash_internal_pointer_reset(postfields); - zend_hash_get_current_data(postfields, (void **) ¤t) == SUCCESS; - zend_hash_move_forward(postfields) - ) { - int ntype; - int l; - UErrorCode status = U_ZERO_ERROR; - uint data_len; - - switch (Z_TYPE_PP(current)) { - case IS_UNICODE: - ntype = HASH_KEY_IS_UNICODE; - break; - case IS_STRING: - ntype = HASH_KEY_IS_STRING; - break; - default: - if (type != -1) { - ntype = type; - } else { - ntype = HASH_KEY_IS_STRING; - } - break; - } - - if (type == -1) { - type = ntype; - } else if (type != ntype) { - goto type_conflict; - } - - SEPARATE_ZVAL(current); - convert_to_string_with_converter_ex(current, UG(utf8_conv)); - postval = Z_STRVAL_PP(current); - data_len = Z_STRLEN_PP(current); - - ntype = zend_hash_get_current_key_ex(postfields, &string_key, &string_key_len, &num_key, 0, NULL); - if (type != ntype && ntype != HASH_KEY_IS_LONG) { -type_conflict: - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Form parameters must either be all unicode or all binary"); - continue; - } - - switch (ntype) { - case HASH_KEY_IS_UNICODE: - zend_unicode_to_string_ex(UG(utf8_conv), &key, &l, string_key.u, string_key_len, &status); - break; - case HASH_KEY_IS_STRING: - key = string_key.s; - l = string_key_len - 1; - break; - case HASH_KEY_IS_LONG: - key = NULL; - l = 0; - break; - } - - /* The arguments after _NAMELENGTH and _CONTENTSLENGTH - * must be explicitly cast to long in curl_formadd - * use since curl needs a long not an int. */ - if (*postval == '@') { - ++postval; - /* open_basedir check */ - if (php_check_open_basedir(postval TSRMLS_CC)) { - RETVAL_FALSE; - return 1; - } - error = curl_formadd(&first, &last, - CURLFORM_COPYNAME, key, - CURLFORM_NAMELENGTH, l, - CURLFORM_FILE, postval, - CURLFORM_END); - } else { - error = curl_formadd(&first, &last, - CURLFORM_COPYNAME, key, - CURLFORM_NAMELENGTH, l, - CURLFORM_COPYCONTENTS, postval, - CURLFORM_CONTENTSLENGTH, (long)data_len, - CURLFORM_END); - } - if (ntype == HASH_KEY_IS_UNICODE) { - efree(key); - } - } - - SAVE_CURL_ERROR(ch, error); - if (error != CURLE_OK) { - RETVAL_FALSE - return 1; - } - - zend_llist_add_element(&ch->to_free.post, &first); - error = curl_easy_setopt(ch->cp, CURLOPT_HTTPPOST, first); - - } else { - char *post = NULL; - - convert_to_string_ex(zvalue); - post = estrndup(Z_STRVAL_PP(zvalue), Z_STRLEN_PP(zvalue)); - zend_llist_add_element(&ch->to_free.str, &post); - - error = curl_easy_setopt(ch->cp, CURLOPT_POSTFIELDS, post); - error = curl_easy_setopt(ch->cp, CURLOPT_POSTFIELDSIZE, Z_STRLEN_PP(zvalue)); - } - break; - case CURLOPT_HTTPHEADER: - case CURLOPT_QUOTE: - case CURLOPT_HTTP200ALIASES: - case CURLOPT_POSTQUOTE: { - zval **current; - HashTable *ph; - struct curl_slist *slist = NULL; - - ph = HASH_OF(*zvalue); - if (!ph) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "You must pass either an object or an array with the CURLOPT_HTTPHEADER, CURLOPT_QUOTE, CURLOPT_HTTP200ALIASES and CURLOPT_POSTQUOTE arguments"); - RETVAL_FALSE; - return 1; - } - - for (zend_hash_internal_pointer_reset(ph); - zend_hash_get_current_data(ph, (void **) ¤t) == SUCCESS; - zend_hash_move_forward(ph) - ) { - char *indiv = NULL; - - SEPARATE_ZVAL(current); - convert_to_string_ex(current); - - indiv = estrndup(Z_STRVAL_PP(current), Z_STRLEN_PP(current) + 1); - slist = curl_slist_append(slist, indiv); - if (!slist) { - efree(indiv); - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not build curl_slist"); - RETVAL_FALSE; - return 1; - } - zend_llist_add_element(&ch->to_free.str, &indiv); - } - zend_llist_add_element(&ch->to_free.slist, &slist); - - error = curl_easy_setopt(ch->cp, option, slist); - - break; - } - /* the following options deal with files, therefore open_basedir checks - * are required. - */ - case CURLOPT_COOKIEJAR: - case CURLOPT_SSLCERT: - case CURLOPT_RANDOM_FILE: - case CURLOPT_COOKIEFILE: { - char *copystr = NULL; - - convert_to_string_ex(zvalue); - - if (php_check_open_basedir(Z_STRVAL_PP(zvalue) TSRMLS_CC)) { - RETVAL_FALSE; - return 1; - } - - copystr = estrndup(Z_STRVAL_PP(zvalue), Z_STRLEN_PP(zvalue)); - - error = curl_easy_setopt(ch->cp, option, copystr); - zend_llist_add_element(&ch->to_free.str, ©str); - - break; - } - case CURLINFO_HEADER_OUT: - convert_to_long_ex(zvalue); - if (Z_LVAL_PP(zvalue) == 1) { - curl_easy_setopt(ch->cp, CURLOPT_DEBUGFUNCTION, curl_debug); - curl_easy_setopt(ch->cp, CURLOPT_DEBUGDATA, (void *)ch); - curl_easy_setopt(ch->cp, CURLOPT_VERBOSE, 1); - } else { - curl_easy_setopt(ch->cp, CURLOPT_DEBUGFUNCTION, NULL); - curl_easy_setopt(ch->cp, CURLOPT_DEBUGDATA, NULL); - curl_easy_setopt(ch->cp, CURLOPT_VERBOSE, 0); - } - break; - } - - SAVE_CURL_ERROR(ch, error); - if (error != CURLE_OK) { - return 1; - } else { - return 0; - } -} - -/* {{{ proto bool curl_setopt(resource ch, int option, mixed value) U - Set an option for a cURL transfer */ -PHP_FUNCTION(curl_setopt) -{ - zval *zid, *zvalue; - long options; - php_curl *ch; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zlz", &zid, &options, &zvalue) == FAILURE) { - RETURN_FALSE; - } - - ZEND_FETCH_RESOURCE(ch, php_curl *, &zid, -1, le_curl_name, le_curl); - - if (!_php_curl_setopt(ch, options, &zvalue, return_value TSRMLS_CC)) { - RETURN_TRUE; - } else { - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto bool curl_setopt_array(resource ch, array options) U - Set an array of option for a cURL transfer */ -PHP_FUNCTION(curl_setopt_array) -{ - zval *zid, *arr, **entry; - php_curl *ch; - ulong option; - HashPosition pos; - zstr string_key; - uint str_key_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "za", &zid, &arr) == FAILURE) { - RETURN_FALSE; - } - - ZEND_FETCH_RESOURCE(ch, php_curl *, &zid, -1, le_curl_name, le_curl); - - zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(arr), &pos); - while (zend_hash_get_current_data_ex(Z_ARRVAL_P(arr), (void **)&entry, &pos) == SUCCESS) { - if (zend_hash_get_current_key_ex(Z_ARRVAL_P(arr), &string_key, &str_key_len, &option, 0, &pos) != HASH_KEY_IS_LONG) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Array keys must be CURLOPT constants or equivalent integer values"); - RETURN_FALSE; - } - if (_php_curl_setopt(ch, (long) option, entry, return_value TSRMLS_CC)) { - RETURN_FALSE; - } - zend_hash_move_forward_ex(Z_ARRVAL_P(arr), &pos); - } - RETURN_TRUE; -} -/* }}} */ - -/* {{{ _php_curl_cleanup_handle(ch) - Cleanup an execution phase */ -void _php_curl_cleanup_handle(php_curl *ch) -{ - if (ch->handlers->write->buf.len > 0) { - smart_str_free(&ch->handlers->write->buf); - } - if (ch->header.str_len) { - efree(ch->header.str); - ch->header.str_len = 0; - } - - memset(ch->err.str, 0, CURL_ERROR_SIZE + 1); - ch->err.no = 0; -} -/* }}} */ - -/* {{{ proto bool curl_exec(resource ch) U - Perform a cURL session */ -PHP_FUNCTION(curl_exec) -{ - CURLcode error; - zval *zid; - php_curl *ch; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zid) == FAILURE) { - RETURN_FALSE; - } - - ZEND_FETCH_RESOURCE(ch, php_curl *, &zid, -1, le_curl_name, le_curl); - - _php_curl_cleanup_handle(ch); - - error = curl_easy_perform(ch->cp); - SAVE_CURL_ERROR(ch, error); - /* CURLE_PARTIAL_FILE is returned by HEAD requests */ - if (error != CURLE_OK && error != CURLE_PARTIAL_FILE) { - if (ch->handlers->write->buf.len > 0) { - smart_str_free(&ch->handlers->write->buf); - } - RETURN_FALSE; - } - - ch->uses++; - - if (ch->handlers->write->method == PHP_CURL_RETURN && ch->handlers->write->buf.len > 0) { - --ch->uses; - smart_str_0(&ch->handlers->write->buf); - RETURN_STRINGL(ch->handlers->write->buf.c, ch->handlers->write->buf.len, 1); - } - --ch->uses; - if (ch->handlers->write->method == PHP_CURL_RETURN) { - RETURN_EMPTY_STRING(); - } else { - RETURN_TRUE; - } -} -/* }}} */ - -/* {{{ proto mixed curl_getinfo(resource ch [, int option]) U - Get information regarding a specific transfer */ -PHP_FUNCTION(curl_getinfo) -{ - zval *zid; - php_curl *ch; - long option; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|l", &zid, &option) == FAILURE) { - RETURN_FALSE; - } - - ZEND_FETCH_RESOURCE(ch, php_curl *, &zid, -1, le_curl_name, le_curl); - - if (ZEND_NUM_ARGS() < 2) { - char *s_code; - long l_code; - double d_code; - - array_init(return_value); - - if (curl_easy_getinfo(ch->cp, CURLINFO_EFFECTIVE_URL, &s_code) == CURLE_OK) { - CAAS("url", s_code); - } - if (curl_easy_getinfo(ch->cp, CURLINFO_CONTENT_TYPE, &s_code) == CURLE_OK) { - if (s_code != NULL) { - CAAS("content_type", s_code); - } - } - if (curl_easy_getinfo(ch->cp, CURLINFO_HTTP_CODE, &l_code) == CURLE_OK) { - CAAL("http_code", l_code); - } - if (curl_easy_getinfo(ch->cp, CURLINFO_HEADER_SIZE, &l_code) == CURLE_OK) { - CAAL("header_size", l_code); - } - if (curl_easy_getinfo(ch->cp, CURLINFO_REQUEST_SIZE, &l_code) == CURLE_OK) { - CAAL("request_size", l_code); - } - if (curl_easy_getinfo(ch->cp, CURLINFO_FILETIME, &l_code) == CURLE_OK) { - CAAL("filetime", l_code); - } - if (curl_easy_getinfo(ch->cp, CURLINFO_SSL_VERIFYRESULT, &l_code) == CURLE_OK) { - CAAL("ssl_verify_result", l_code); - } - if (curl_easy_getinfo(ch->cp, CURLINFO_REDIRECT_COUNT, &l_code) == CURLE_OK) { - CAAL("redirect_count", l_code); - } - if (curl_easy_getinfo(ch->cp, CURLINFO_TOTAL_TIME, &d_code) == CURLE_OK) { - CAAD("total_time", d_code); - } - if (curl_easy_getinfo(ch->cp, CURLINFO_NAMELOOKUP_TIME, &d_code) == CURLE_OK) { - CAAD("namelookup_time", d_code); - } - if (curl_easy_getinfo(ch->cp, CURLINFO_CONNECT_TIME, &d_code) == CURLE_OK) { - CAAD("connect_time", d_code); - } - if (curl_easy_getinfo(ch->cp, CURLINFO_PRETRANSFER_TIME, &d_code) == CURLE_OK) { - CAAD("pretransfer_time", d_code); - } - if (curl_easy_getinfo(ch->cp, CURLINFO_SIZE_UPLOAD, &d_code) == CURLE_OK) { - CAAD("size_upload", d_code); - } - if (curl_easy_getinfo(ch->cp, CURLINFO_SIZE_DOWNLOAD, &d_code) == CURLE_OK) { - CAAD("size_download", d_code); - } - if (curl_easy_getinfo(ch->cp, CURLINFO_SPEED_DOWNLOAD, &d_code) == CURLE_OK) { - CAAD("speed_download", d_code); - } - if (curl_easy_getinfo(ch->cp, CURLINFO_SPEED_UPLOAD, &d_code) == CURLE_OK) { - CAAD("speed_upload", d_code); - } - if (curl_easy_getinfo(ch->cp, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &d_code) == CURLE_OK) { - CAAD("download_content_length", d_code); - } - if (curl_easy_getinfo(ch->cp, CURLINFO_CONTENT_LENGTH_UPLOAD, &d_code) == CURLE_OK) { - CAAD("upload_content_length", d_code); - } - if (curl_easy_getinfo(ch->cp, CURLINFO_STARTTRANSFER_TIME, &d_code) == CURLE_OK) { - CAAD("starttransfer_time", d_code); - } - if (curl_easy_getinfo(ch->cp, CURLINFO_REDIRECT_TIME, &d_code) == CURLE_OK) { - CAAD("redirect_time", d_code); - } - if (ch->header.str_len > 0) { - CAAS("request_header", ch->header.str); - } - } else { - switch (option) { - case CURLINFO_EFFECTIVE_URL: - case CURLINFO_CONTENT_TYPE: { - char *s_code = NULL; - - if (curl_easy_getinfo(ch->cp, option, &s_code) == CURLE_OK && s_code) { - RETURN_ASCII_STRING(s_code, 1); - } else { - RETURN_FALSE; - } - break; - } - case CURLINFO_HTTP_CODE: - case CURLINFO_HEADER_SIZE: - case CURLINFO_REQUEST_SIZE: - case CURLINFO_FILETIME: - case CURLINFO_SSL_VERIFYRESULT: - case CURLINFO_REDIRECT_COUNT: { - long code = 0; - - if (curl_easy_getinfo(ch->cp, option, &code) == CURLE_OK) { - RETURN_LONG(code); - } else { - RETURN_FALSE; - } - break; - } - case CURLINFO_TOTAL_TIME: - case CURLINFO_NAMELOOKUP_TIME: - case CURLINFO_CONNECT_TIME: - case CURLINFO_PRETRANSFER_TIME: - case CURLINFO_SIZE_UPLOAD: - case CURLINFO_SIZE_DOWNLOAD: - case CURLINFO_SPEED_DOWNLOAD: - case CURLINFO_SPEED_UPLOAD: - case CURLINFO_CONTENT_LENGTH_DOWNLOAD: - case CURLINFO_CONTENT_LENGTH_UPLOAD: - case CURLINFO_STARTTRANSFER_TIME: - case CURLINFO_REDIRECT_TIME: { - double code = 0.0; - - if (curl_easy_getinfo(ch->cp, option, &code) == CURLE_OK) { - RETURN_DOUBLE(code); - } else { - RETURN_FALSE; - } - break; - } - case CURLINFO_HEADER_OUT: - if (ch->header.str_len > 0) { - RETURN_STRINGL(ch->header.str, ch->header.str_len, 1); - } else { - RETURN_FALSE; - } - } - } -} -/* }}} */ - -/* {{{ proto string curl_error(resource ch) U - Return a string contain the last error for the current session */ -PHP_FUNCTION(curl_error) -{ - zval *zid; - php_curl *ch; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zid) == FAILURE) { - RETURN_FALSE; - } - - ZEND_FETCH_RESOURCE(ch, php_curl *, &zid, -1, le_curl_name, le_curl); - - ch->err.str[CURL_ERROR_SIZE] = 0; - RETURN_ASCII_STRING(ch->err.str, 1); -} -/* }}} */ - -/* {{{ proto int curl_errno(resource ch) U - Return an integer containing the last error number */ -PHP_FUNCTION(curl_errno) -{ - zval *zid; - php_curl *ch; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zid) == FAILURE) { - RETURN_FALSE; - } - - ZEND_FETCH_RESOURCE(ch, php_curl *, &zid, -1, le_curl_name, le_curl); - - RETURN_LONG(ch->err.no); -} -/* }}} */ - -/* {{{ proto void curl_close(resource ch) U - Close a cURL session */ -PHP_FUNCTION(curl_close) -{ - zval *zid; - php_curl *ch; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zid) == FAILURE) { - RETURN_FALSE; - } - - ZEND_FETCH_RESOURCE(ch, php_curl *, &zid, -1, le_curl_name, le_curl); - - if (ch->in_callback) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attempt to close cURL handle from a callback"); - return; - } - - if (ch->uses) { - ch->uses--; - } else { - zend_list_delete(Z_LVAL_P(zid)); - } -} -/* }}} */ - -/* {{{ _php_curl_close() - List destructor for curl handles */ -static void _php_curl_close(zend_rsrc_list_entry *rsrc TSRMLS_DC) -{ - php_curl *ch = (php_curl *) rsrc->ptr; - -#if PHP_CURL_DEBUG - fprintf(stderr, "DTOR CALLED, ch = %x\n", ch); -#endif - - curl_easy_cleanup(ch->cp); - zend_llist_clean(&ch->to_free.str); - zend_llist_clean(&ch->to_free.slist); - zend_llist_clean(&ch->to_free.post); - - if (ch->handlers->write->buf.len > 0) { - smart_str_free(&ch->handlers->write->buf); - } - if (ch->handlers->write->func_name) { - zval_ptr_dtor(&ch->handlers->write->func_name); - } - if (ch->handlers->read->func_name) { - zval_ptr_dtor(&ch->handlers->read->func_name); - } - if (ch->handlers->write_header->func_name) { - zval_ptr_dtor(&ch->handlers->write_header->func_name); - } - if (ch->handlers->passwd) { - zval_ptr_dtor(&ch->handlers->passwd); - } - if (ch->header.str_len > 0) { - efree(ch->header.str); - } - - efree(ch->handlers->write); - efree(ch->handlers->write_header); - efree(ch->handlers->read); - efree(ch->handlers); - efree(ch); -} -/* }}} */ - -#endif /* HAVE_CURL */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: fdm=marker - * vim: noet sw=4 ts=4 - */ diff --git a/ext/curl/multi.c b/ext/curl/multi.c deleted file mode 100644 index 4f3defbd2f470..0000000000000 --- a/ext/curl/multi.c +++ /dev/null @@ -1,342 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Sterling Hughes | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#define ZEND_INCLUDE_FULL_WINDOWS_HEADERS - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if HAVE_CURL - -#include "php_curl.h" - -#include -#include - -#ifdef HAVE_SYS_SELECT_H -#include -#endif - -#ifdef HAVE_SYS_TIME_H -#include -#endif - -#ifdef HAVE_SYS_TYPES_H -#include -#endif - -#ifdef HAVE_UNISTD_H -#include -#endif - -/* {{{ proto resource curl_multi_init(void) U - Returns a new cURL multi handle */ -PHP_FUNCTION(curl_multi_init) -{ - php_curlm *mh; - - if (ZEND_NUM_ARGS() != 0) { - WRONG_PARAM_COUNT; - } - - mh = ecalloc(1, sizeof(php_curlm)); - mh->multi = curl_multi_init(); - - zend_llist_init(&mh->easyh, sizeof(zval), _php_curl_multi_cleanup_list, 0); - - ZEND_REGISTER_RESOURCE(return_value, mh, le_curl_multi_handle); -} -/* }}} */ - -/* {{{ proto int curl_multi_add_handle(resource mh, resource ch) U - Add a normal cURL handle to a cURL multi handle */ -PHP_FUNCTION(curl_multi_add_handle) -{ - zval *z_mh; - zval *z_ch; - php_curlm *mh; - php_curl *ch; - zval tmp_val; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr", &z_mh, &z_ch) == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(mh, php_curlm *, &z_mh, -1, le_curl_multi_handle_name, le_curl_multi_handle); - ZEND_FETCH_RESOURCE(ch, php_curl *, &z_ch, -1, le_curl_name, le_curl); - - _php_curl_cleanup_handle(ch); - ch->uses++; - - /* we want to create a copy of this zval that we store in the multihandle structure element "easyh" */ - tmp_val = *z_ch; - zval_copy_ctor(&tmp_val); - - zend_llist_add_element(&mh->easyh, &tmp_val); - - RETURN_LONG((long) curl_multi_add_handle(mh->multi, ch->cp)); -} -/* }}} */ - -void _php_curl_multi_cleanup_list(void *data) /* {{{ */ -{ - zval *z_ch = (zval *)data; - php_curl *ch; - TSRMLS_FETCH(); - - if (!z_ch) { - return; - } - - ch = (php_curl *) zend_fetch_resource(&z_ch TSRMLS_CC, -1, le_curl_name, NULL, 1, le_curl); - if (!ch) { - return; - } - - if (ch->uses) { - ch->uses--; - } else { - zend_list_delete(Z_LVAL_P(z_ch)); - } -} -/* }}} */ - -/* Used internally as comparison routine passed to zend_list_del_element */ -static int curl_compare_resources( zval *z1, zval **z2 ) -{ - return (Z_TYPE_P( z1 ) == Z_TYPE_PP( z2 ) && - Z_TYPE_P( z1 ) == IS_RESOURCE && - Z_LVAL_P( z1 ) == Z_LVAL_PP( z2 ) ); -} - - -/* {{{ proto int curl_multi_remove_handle(resource mh, resource ch) U - Remove a multi handle from a set of cURL handles */ -PHP_FUNCTION(curl_multi_remove_handle) -{ - zval *z_mh; - zval *z_ch; - php_curlm *mh; - php_curl *ch; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr", &z_mh, &z_ch) == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(mh, php_curlm *, &z_mh, -1, le_curl_multi_handle_name, le_curl_multi_handle); - ZEND_FETCH_RESOURCE(ch, php_curl *, &z_ch, -1, le_curl_name, le_curl); - - --ch->uses; - - zend_llist_del_element( &mh->easyh, &z_ch, - (int (*)(void *, void *)) curl_compare_resources ); - - RETURN_LONG((long) curl_multi_remove_handle(mh->multi, ch->cp)); -} -/* }}} */ - -static void _make_timeval_struct(struct timeval *to, double timeout) -{ - unsigned long conv; - - conv = (unsigned long) (timeout * 1000000.0); - to->tv_sec = conv / 1000000; - to->tv_usec = conv % 1000000; -} - -/* {{{ proto int curl_multi_select(resource mh[, double timeout]) U - Get all the sockets associated with the cURL extension, which can then be "selected" */ -PHP_FUNCTION(curl_multi_select) -{ - zval *z_mh; - php_curlm *mh; - fd_set readfds; - fd_set writefds; - fd_set exceptfds; - int maxfd; - double timeout = 1.0; - struct timeval to; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|d", &z_mh, &timeout) == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(mh, php_curlm *, &z_mh, -1, le_curl_multi_handle_name, le_curl_multi_handle); - - _make_timeval_struct(&to, timeout); - - FD_ZERO(&readfds); - FD_ZERO(&writefds); - FD_ZERO(&exceptfds); - - curl_multi_fdset(mh->multi, &readfds, &writefds, &exceptfds, &maxfd); - RETURN_LONG(select(maxfd + 1, &readfds, &writefds, &exceptfds, &to)); -} -/* }}} */ - -/* {{{ proto int curl_multi_exec(resource mh, int &still_running) U - Run the sub-connections of the current cURL handle */ -PHP_FUNCTION(curl_multi_exec) -{ - zval *z_mh; - zval *z_still_running; - php_curlm *mh; - int still_running; - int result; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz", &z_mh, &z_still_running) == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(mh, php_curlm *, &z_mh, -1, le_curl_multi_handle_name, le_curl_multi_handle); - - convert_to_long_ex(&z_still_running); - still_running = Z_LVAL_P(z_still_running); - result = curl_multi_perform(mh->multi, &still_running); - ZVAL_LONG(z_still_running, still_running); - - RETURN_LONG(result); -} -/* }}} */ - -/* {{{ proto string curl_multi_getcontent(resource ch) U - Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set */ -PHP_FUNCTION(curl_multi_getcontent) -{ - zval *z_ch; - php_curl *ch; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_ch) == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(ch, php_curl *, &z_ch, -1, le_curl_name, le_curl); - - if (ch->handlers->write->method == PHP_CURL_RETURN && ch->handlers->write->buf.len > 0) { - smart_str_0(&ch->handlers->write->buf); - RETURN_STRINGL(ch->handlers->write->buf.c, ch->handlers->write->buf.len, 1); - } -} -/* }}} */ - -/* {{{ proto array curl_multi_info_read(resource mh [, long msgs_in_queue]) U - Get information about the current transfers */ -PHP_FUNCTION(curl_multi_info_read) -{ - zval *z_mh; - php_curlm *mh; - CURLMsg *tmp_msg; - int queued_msgs; - zval *zmsgs_in_queue = NULL; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|z", &z_mh, &zmsgs_in_queue) == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(mh, php_curlm *, &z_mh, -1, le_curl_multi_handle_name, le_curl_multi_handle); - - tmp_msg = curl_multi_info_read(mh->multi, &queued_msgs); - if (tmp_msg == NULL) { - RETURN_FALSE; - } - if (zmsgs_in_queue) { - zval_dtor(zmsgs_in_queue); - ZVAL_LONG(zmsgs_in_queue, queued_msgs); - } - - array_init(return_value); - add_assoc_long(return_value, "msg", tmp_msg->msg); - add_assoc_long(return_value, "result", tmp_msg->data.result); - - /* find the original easy curl handle */ - { - zend_llist_position pos; - php_curl *ch; - zval *pz_ch; - - /* search the list of easy handles hanging off the multi-handle */ - for(pz_ch = (zval *)zend_llist_get_first_ex(&mh->easyh, &pos); pz_ch; - pz_ch = (zval *)zend_llist_get_next_ex(&mh->easyh, &pos)) { - ZEND_FETCH_RESOURCE(ch, php_curl *, &pz_ch, -1, le_curl_name, le_curl); - if (ch->cp == tmp_msg->easy_handle) { - - /* we are adding a reference to the underlying php_curl - resource, so we need to add one to the resource's refcount - in order to ensure it doesn't get destroyed when the - underlying curl easy handle goes out of scope. - Normally you would call zval_copy_ctor( pz_ch ), or - SEPARATE_ZVAL, but those create new zvals, which is already - being done in add_assoc_resource */ - - zend_list_addref( Z_RESVAL_P( pz_ch ) ); - - /* add_assoc_resource automatically creates a new zval to - wrap the "resource" represented by the current pz_ch */ - - add_assoc_resource(return_value, "handle", Z_RESVAL_P(pz_ch)); - - break; - } - } - } -} -/* }}} */ - -/* {{{ proto void curl_multi_close(resource mh) U - Close a set of cURL handles */ -PHP_FUNCTION(curl_multi_close) -{ - zval *z_mh; - php_curlm *mh; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &z_mh) == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(mh, php_curlm *, &z_mh, -1, le_curl_multi_handle_name, le_curl_multi_handle); - - zend_list_delete(Z_LVAL_P(z_mh)); -} -/* }}} */ - -void _php_curl_multi_close(zend_rsrc_list_entry *rsrc TSRMLS_DC) -{ - php_curlm *mh = (php_curlm *) rsrc->ptr; - if (mh) { - curl_multi_cleanup(mh->multi); - zend_llist_clean(&mh->easyh); - efree(mh); - rsrc->ptr = NULL; - } -} - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: noet sw=4 ts=4 fdm=marker - * vim<600: noet sw=4 ts=4 - */ diff --git a/ext/curl/package.xml b/ext/curl/package.xml deleted file mode 100644 index 85cb634c63133..0000000000000 --- a/ext/curl/package.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - curl - Clib PDF functions - - - sterling - Sterling Hughes - sterling@php.net - lead - - - -PHP supports libcurl, a library created by Daniel Stenberg, -that allows you to connect and communicate to many different -types of servers with many different types of protocols. -libcurl currently supports the http, https, ftp, gopher, -telnet, dict, file, and ldap protocols. libcurl also supports -HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading (this -can also be done with PHP's ftp extension), HTTP form based -upload, proxies, cookies, and user+password authentication. - - PHP - - beta - 5.0rc1 - 2004-03-19 - -package.xml added to support installation using pear installer - - - - - - - - - - - - - - - - - - - - diff --git a/ext/curl/php_curl.h b/ext/curl/php_curl.h deleted file mode 100644 index 5e5ea923cbb75..0000000000000 --- a/ext/curl/php_curl.h +++ /dev/null @@ -1,179 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Sterling Hughes | - | Wez Furlong | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef _PHP_CURL_H -#define _PHP_CURL_H - -#include "php.h" -#include "ext/standard/php_smart_str.h" - -#ifdef COMPILE_DL_CURL -#undef HAVE_CURL -#define HAVE_CURL 1 -#endif - -#if HAVE_CURL - -#define PHP_CURL_DEBUG 0 - -#include -#include - -extern zend_module_entry curl_module_entry; -#define curl_module_ptr &curl_module_entry - -#define CURLOPT_RETURNTRANSFER 19913 -#define CURLOPT_BINARYTRANSFER 19914 -#define PHP_CURL_STDOUT 0 -#define PHP_CURL_FILE 1 -#define PHP_CURL_USER 2 -#define PHP_CURL_DIRECT 3 -#define PHP_CURL_RETURN 4 -#define PHP_CURL_ASCII 5 -#define PHP_CURL_BINARY 6 -#define PHP_CURL_IGNORE 7 - -extern int le_curl; -#define le_curl_name "cURL handle" -extern int le_curl_multi_handle; -#define le_curl_multi_handle_name "cURL Multi Handle" - -PHP_MINIT_FUNCTION(curl); -PHP_MSHUTDOWN_FUNCTION(curl); -PHP_MINFO_FUNCTION(curl); -PHP_FUNCTION(curl_version); -PHP_FUNCTION(curl_init); -PHP_FUNCTION(curl_copy_handle); -PHP_FUNCTION(curl_setopt); -PHP_FUNCTION(curl_setopt_array); -PHP_FUNCTION(curl_exec); -PHP_FUNCTION(curl_getinfo); -PHP_FUNCTION(curl_error); -PHP_FUNCTION(curl_errno); -PHP_FUNCTION(curl_close); -PHP_FUNCTION(curl_multi_init); -PHP_FUNCTION(curl_multi_add_handle); -PHP_FUNCTION(curl_multi_remove_handle); -PHP_FUNCTION(curl_multi_select); -PHP_FUNCTION(curl_multi_exec); -PHP_FUNCTION(curl_multi_getcontent); -PHP_FUNCTION(curl_multi_info_read); -PHP_FUNCTION(curl_multi_close); -void _php_curl_multi_close(zend_rsrc_list_entry * TSRMLS_DC); - -typedef struct { - zval *func_name; - zend_fcall_info_cache fci_cache; - FILE *fp; - smart_str buf; - int method; - int type; -} php_curl_write; - -typedef struct { - zval *func_name; - zend_fcall_info_cache fci_cache; - FILE *fp; - long fd; - int method; -} php_curl_read; - -typedef struct { - php_curl_write *write; - php_curl_write *write_header; - php_curl_read *read; - zval *passwd; -} php_curl_handlers; - -struct _php_curl_error { - char str[CURL_ERROR_SIZE + 1]; - int no; -}; - -struct _php_curl_send_headers { - char *str; - size_t str_len; -}; - -struct _php_curl_free { - zend_llist str; - zend_llist post; - zend_llist slist; -}; - -typedef struct { - struct _php_curl_error err; - struct _php_curl_free to_free; - struct _php_curl_send_headers header; - void ***thread_ctx; - CURL *cp; - php_curl_handlers *handlers; - long id; - unsigned int uses; - zend_bool in_callback; -} php_curl; - -typedef struct { - int still_running; - CURLM *multi; - zend_llist easyh; -} php_curlm; - -void _php_curl_cleanup_handle(php_curl *); -void _php_curl_multi_cleanup_list(void *data); - -/* streams support */ - -extern php_stream_ops php_curl_stream_ops; -#define PHP_STREAM_IS_CURL &php_curl_stream_ops - -php_stream *php_curl_stream_opener(php_stream_wrapper *wrapper, char *filename, char *mode, - int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC); - -extern php_stream_wrapper php_curl_wrapper; - -struct php_curl_buffer { - off_t readpos, writepos; - php_stream *buf; -}; - -typedef struct { - CURL *curl; - CURLM *multi; - char *url; - struct php_curl_buffer readbuffer; /* holds downloaded data */ - struct php_curl_buffer writebuffer; /* holds data to upload */ - - fd_set readfds, writefds, excfds; - int maxfd; - - char errstr[CURL_ERROR_SIZE + 1]; - CURLMcode mcode; - int pending; - zval *headers; -} php_curl_stream; - - -#else -#define curl_module_ptr NULL -#endif /* HAVE_CURL */ -#define phpext_curl_ptr curl_module_ptr -#endif /* _PHP_CURL_H */ diff --git a/ext/curl/streams.c b/ext/curl/streams.c deleted file mode 100644 index dc49a1d79dc5d..0000000000000 --- a/ext/curl/streams.c +++ /dev/null @@ -1,502 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -/* This file implements cURL based wrappers. - * NOTE: If you are implementing your own streams that are intended to - * work independently of wrappers, this is not a good example to follow! - **/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_memory_streams.h" - -#if HAVE_CURL - -#include -#include - -#ifdef PHP_WIN32 -#include -#include -#endif - -#include -#include - -#define SMART_STR_PREALLOC 4096 - -#include "ext/standard/php_smart_str.h" -#include "ext/standard/info.h" -#include "ext/standard/file.h" -#include "php_curl.h" - -static size_t on_data_available(char *data, size_t size, size_t nmemb, void *ctx) -{ - php_stream *stream = (php_stream *) ctx; - php_curl_stream *curlstream = (php_curl_stream *) stream->abstract; - size_t wrote; - TSRMLS_FETCH(); - - /* TODO: I'd like to deprecate this. - * This code is here because until we start getting real data, we don't know - * if we have had all of the headers - * */ - if (curlstream->readbuffer.writepos == 0) { - zval *sym; - - MAKE_STD_ZVAL(sym); - *sym = *curlstream->headers; - zval_copy_ctor(sym); - ZEND_SET_SYMBOL(EG(active_symbol_table), "http_response_header", sym); - } - - php_stream_seek(curlstream->readbuffer.buf, curlstream->readbuffer.writepos, SEEK_SET); - wrote = php_stream_write(curlstream->readbuffer.buf, data, size * nmemb); - curlstream->readbuffer.writepos = php_stream_tell(curlstream->readbuffer.buf); - - return wrote; -} - -/* cURL guarantees that headers are written as complete lines, with this function - * called once for each header */ -static size_t on_header_available(char *data, size_t size, size_t nmemb, void *ctx) -{ - size_t length = size * nmemb; - zval *header; - php_stream *stream = (php_stream *) ctx; - php_curl_stream *curlstream = (php_curl_stream *) stream->abstract; - TSRMLS_FETCH(); - - if (length < 2) { - /* invalid header ? */ - return length; - } - - if (!(length == 2 && data[0] == '\r' && data[1] == '\n')) { - MAKE_STD_ZVAL(header); - Z_STRLEN_P(header) = length; - Z_STRVAL_P(header) = estrndup(data, length); - if (Z_STRVAL_P(header)[length-1] == '\n') { - Z_STRVAL_P(header)[length-1] = '\0'; - Z_STRLEN_P(header)--; - - if (Z_STRVAL_P(header)[length-2] == '\r') { - Z_STRVAL_P(header)[length-2] = '\0'; - Z_STRLEN_P(header)--; - } - } - Z_TYPE_P(header) = IS_STRING; - zend_hash_next_index_insert(Z_ARRVAL_P(curlstream->headers), &header, sizeof(zval *), NULL); - - /* based on the header, we might need to trigger a notification */ - if (!strncasecmp(data, "Location: ", 10)) { - php_stream_notify_info(stream->context, PHP_STREAM_NOTIFY_REDIRECTED, data + 10, 0); - } else if (!strncasecmp(data, "Content-Type: ", 14)) { - php_stream_notify_info(stream->context, PHP_STREAM_NOTIFY_MIME_TYPE_IS, data + 14, 0); - } else if (!strncasecmp(data, "Context-Length: ", 16)) { - php_stream_notify_file_size(stream->context, atoi(data + 16), data, 0); - php_stream_notify_progress_init(stream->context, 0, 0); - } - } - return length; - -} - -static int on_progress_avail(php_stream *stream, double dltotal, double dlnow, double ultotal, double ulnow) -{ - TSRMLS_FETCH(); - - /* our notification system only works in a single direction; we should detect which - * direction is important and use the correct values in this call */ - php_stream_notify_progress(stream->context, dlnow, dltotal); - return 0; -} - -static size_t php_curl_stream_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC) -{ - php_curl_stream *curlstream = (php_curl_stream *) stream->abstract; - - if (curlstream->writebuffer.buf) { - return php_stream_write(curlstream->writebuffer.buf, buf, count); - } - - return 0; -} - -static size_t php_curl_stream_read(php_stream *stream, char *buf, size_t count TSRMLS_DC) -{ - php_curl_stream *curlstream = (php_curl_stream *) stream->abstract; - size_t didread = 0; - - if (curlstream->readbuffer.readpos >= curlstream->readbuffer.writepos && curlstream->pending) { - /* we need to read some more data */ - struct timeval tv; - - /* fire up the connection */ - if (curlstream->readbuffer.writepos == 0) { - while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform(curlstream->multi, &curlstream->pending)); - } - - do { - /* get the descriptors from curl */ - curl_multi_fdset(curlstream->multi, &curlstream->readfds, &curlstream->writefds, &curlstream->excfds, &curlstream->maxfd); - - /* if we are in blocking mode, set a timeout */ - tv.tv_usec = 0; - tv.tv_sec = 15; /* TODO: allow this to be configured from the script */ - - /* wait for data */ - switch (select(curlstream->maxfd + 1, &curlstream->readfds, &curlstream->writefds, &curlstream->excfds, &tv)) { - case -1: - /* error */ - return 0; - case 0: - /* no data yet: timed-out */ - return 0; - default: - /* fetch the data */ - do { - curlstream->mcode = curl_multi_perform(curlstream->multi, &curlstream->pending); - } while (curlstream->mcode == CURLM_CALL_MULTI_PERFORM); - } - } while (curlstream->readbuffer.readpos >= curlstream->readbuffer.writepos && curlstream->pending > 0); - - } - - /* if there is data in the buffer, try and read it */ - if (curlstream->readbuffer.writepos > 0 && curlstream->readbuffer.readpos < curlstream->readbuffer.writepos) { - php_stream_seek(curlstream->readbuffer.buf, curlstream->readbuffer.readpos, SEEK_SET); - didread = php_stream_read(curlstream->readbuffer.buf, buf, count); - curlstream->readbuffer.readpos = php_stream_tell(curlstream->readbuffer.buf); - } - - if (didread == 0) { - stream->eof = 1; - } - - return didread; -} - -static int php_curl_stream_close(php_stream *stream, int close_handle TSRMLS_DC) -{ - php_curl_stream *curlstream = (php_curl_stream *) stream->abstract; - - /* TODO: respect the close_handle flag here, so that casting to a FILE* on - * systems without fopencookie will work properly */ - - curl_multi_remove_handle(curlstream->multi, curlstream->curl); - curl_easy_cleanup(curlstream->curl); - curl_multi_cleanup(curlstream->multi); - - /* we are not closing curlstream->readbuf here, because we export - * it as a zval with the wrapperdata - the engine will garbage collect it */ - - efree(curlstream->url); - efree(curlstream); - - return 0; -} - -static int php_curl_stream_flush(php_stream *stream TSRMLS_DC) -{ -#ifdef ilia_0 - php_curl_stream *curlstream = (php_curl_stream *) stream->abstract; -#endif - return 0; -} - -static int php_curl_stream_stat(php_stream *stream, php_stream_statbuf *ssb TSRMLS_DC) -{ - /* TODO: fill in details based on Data: and Content-Length: headers, and/or data - * from curl_easy_getinfo(). - * For now, return -1 to indicate that it doesn't make sense to stat this stream */ - return -1; -} - -static int php_curl_stream_cast(php_stream *stream, int castas, void **ret TSRMLS_DC) -{ - php_curl_stream *curlstream = (php_curl_stream *) stream->abstract; - /* delegate to the readbuffer stream */ - return php_stream_cast(curlstream->readbuffer.buf, castas, ret, 0); -} - -php_stream_ops php_curl_stream_ops = { - php_curl_stream_write, - php_curl_stream_read, - php_curl_stream_close, - php_curl_stream_flush, - "cURL", - NULL, /* seek */ - php_curl_stream_cast, /* cast */ - php_curl_stream_stat /* stat */ -}; - - -php_stream *php_curl_stream_opener(php_stream_wrapper *wrapper, char *filename, char *mode, - int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC) -{ - php_stream *stream; - php_curl_stream *curlstream; - zval *tmp, **ctx_opt = NULL; - - curlstream = emalloc(sizeof(php_curl_stream)); - memset(curlstream, 0, sizeof(php_curl_stream)); - - stream = php_stream_alloc(&php_curl_stream_ops, curlstream, 0, mode); - php_stream_context_set(stream, context); - - curlstream->curl = curl_easy_init(); - curlstream->multi = curl_multi_init(); - curlstream->pending = 1; - - /* if opening for an include statement, ensure that the local storage will - * have a FILE* associated with it. - * Otherwise, use the "smart" memory stream that will turn itself into a file - * when it gets large */ -#if !HAVE_FOPENCOOKIE - if (options & STREAM_WILL_CAST) { - curlstream->readbuffer.buf = php_stream_fopen_tmpfile(); - } else -#endif - { - curlstream->readbuffer.buf = php_stream_temp_new(); - } - - /* curl requires the URL to be valid throughout it's operation, so dup it */ - curlstream->url = estrdup(filename); - curl_easy_setopt(curlstream->curl, CURLOPT_URL, curlstream->url); - - /* feed curl data into our read buffer */ - curl_easy_setopt(curlstream->curl, CURLOPT_WRITEFUNCTION, on_data_available); - curl_easy_setopt(curlstream->curl, CURLOPT_FILE, stream); - - /* feed headers */ - curl_easy_setopt(curlstream->curl, CURLOPT_HEADERFUNCTION, on_header_available); - curl_easy_setopt(curlstream->curl, CURLOPT_WRITEHEADER, stream); - - curl_easy_setopt(curlstream->curl, CURLOPT_ERRORBUFFER, curlstream->errstr); - curl_easy_setopt(curlstream->curl, CURLOPT_VERBOSE, 0); - - /* enable progress notification */ - curl_easy_setopt(curlstream->curl, CURLOPT_PROGRESSFUNCTION, on_progress_avail); - curl_easy_setopt(curlstream->curl, CURLOPT_PROGRESSDATA, stream); - curl_easy_setopt(curlstream->curl, CURLOPT_NOPROGRESS, 0); - - curl_easy_setopt(curlstream->curl, CURLOPT_USERAGENT, FG(user_agent) ? FG(user_agent) : "PHP/" PHP_VERSION); - - /* TODO: read cookies and options from context */ - if (context && !strncasecmp(filename, "http", sizeof("http")-1)) { - if (SUCCESS == php_stream_context_get_option(context, "http", "curl_verify_ssl_host", &ctx_opt) && Z_TYPE_PP(ctx_opt) == IS_BOOL && Z_LVAL_PP(ctx_opt) == 1) { - curl_easy_setopt(curlstream->curl, CURLOPT_SSL_VERIFYHOST, 1); - } else { - curl_easy_setopt(curlstream->curl, CURLOPT_SSL_VERIFYHOST, 0); - } - if (SUCCESS == php_stream_context_get_option(context, "http", "curl_verify_ssl_peer", &ctx_opt) && Z_TYPE_PP(ctx_opt) == IS_BOOL && Z_LVAL_PP(ctx_opt) == 1) { - curl_easy_setopt(curlstream->curl, CURLOPT_SSL_VERIFYPEER, 1); - } else { - curl_easy_setopt(curlstream->curl, CURLOPT_SSL_VERIFYPEER, 0); - } - - /* HTTP(S) */ - if (SUCCESS == php_stream_context_get_option(context, "http", "user_agent", &ctx_opt) && Z_TYPE_PP(ctx_opt) == IS_STRING) { - curl_easy_setopt(curlstream->curl, CURLOPT_USERAGENT, Z_STRVAL_PP(ctx_opt)); - } - if (SUCCESS == php_stream_context_get_option(context, "http", "header", &ctx_opt) && Z_TYPE_PP(ctx_opt) == IS_ARRAY) { - HashPosition pos; - zval **header = NULL; - struct curl_slist *hl = NULL; - - for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(ctx_opt), &pos); - SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_PP(ctx_opt), (void *)&header, &pos); - zend_hash_move_forward_ex(Z_ARRVAL_PP(ctx_opt), &pos)) { - if (Z_TYPE_PP(header) == IS_STRING) { - hl = curl_slist_append(hl, Z_STRVAL_PP(header)); - } - } - if (hl) { - curl_easy_setopt(curlstream->curl, CURLOPT_HTTPHEADER, hl); - } - } - if (SUCCESS == php_stream_context_get_option(context, "http", "method", &ctx_opt) && Z_TYPE_PP(ctx_opt) == IS_STRING) { - if (strcasecmp(Z_STRVAL_PP(ctx_opt), "get")) { - if (!strcasecmp(Z_STRVAL_PP(ctx_opt), "head")) { - curl_easy_setopt(curlstream->curl, CURLOPT_NOBODY, 1); - } else { - if (!strcasecmp(Z_STRVAL_PP(ctx_opt), "post")) { - curl_easy_setopt(curlstream->curl, CURLOPT_POST, 1); - } else { - curl_easy_setopt(curlstream->curl, CURLOPT_CUSTOMREQUEST, Z_STRVAL_PP(ctx_opt)); - } - if (SUCCESS == php_stream_context_get_option(context, "http", "content", &ctx_opt) && Z_TYPE_PP(ctx_opt) == IS_STRING) { - curl_easy_setopt(curlstream->curl, CURLOPT_POSTFIELDS, Z_STRVAL_PP(ctx_opt)); - curl_easy_setopt(curlstream->curl, CURLOPT_POSTFIELDSIZE, (long)Z_STRLEN_PP(ctx_opt)); - } - } - } - } - if (SUCCESS == php_stream_context_get_option(context, "http", "proxy", &ctx_opt) && Z_TYPE_PP(ctx_opt) == IS_STRING) { - curl_easy_setopt(curlstream->curl, CURLOPT_PROXY, Z_STRVAL_PP(ctx_opt)); - } - if (SUCCESS == php_stream_context_get_option(context, "http", "max_redirects", &ctx_opt)) { - long mr = 20; - if (Z_TYPE_PP(ctx_opt) != IS_STRING || !is_numeric_string(Z_STRVAL_PP(ctx_opt), Z_STRLEN_PP(ctx_opt), &mr, NULL, 1)) { - if (Z_TYPE_PP(ctx_opt) == IS_LONG) { - mr = Z_LVAL_PP(ctx_opt); - } - } - if (mr > 1) { - if (PG(open_basedir) && *PG(open_basedir)) { - curl_easy_setopt(curlstream->curl, CURLOPT_FOLLOWLOCATION, 0); - } else { - curl_easy_setopt(curlstream->curl, CURLOPT_FOLLOWLOCATION, 1); - } - curl_easy_setopt(curlstream->curl, CURLOPT_MAXREDIRS, mr); - } - } else { - if (PG(open_basedir) && *PG(open_basedir)) { - curl_easy_setopt(curlstream->curl, CURLOPT_FOLLOWLOCATION, 0); - } else { - curl_easy_setopt(curlstream->curl, CURLOPT_FOLLOWLOCATION, 1); - } - curl_easy_setopt(curlstream->curl, CURLOPT_MAXREDIRS, 20L); - } - } else if (context && !strncasecmp(filename, "ftps", sizeof("ftps")-1)) { - if (SUCCESS == php_stream_context_get_option(context, "ftp", "curl_verify_ssl_host", &ctx_opt) && Z_TYPE_PP(ctx_opt) == IS_BOOL && Z_LVAL_PP(ctx_opt) == 1) { - curl_easy_setopt(curlstream->curl, CURLOPT_SSL_VERIFYHOST, 1); - } else { - curl_easy_setopt(curlstream->curl, CURLOPT_SSL_VERIFYHOST, 0); - } - if (SUCCESS == php_stream_context_get_option(context, "ftp", "curl_verify_ssl_peer", &ctx_opt) && Z_TYPE_PP(ctx_opt) == IS_BOOL && Z_LVAL_PP(ctx_opt) == 1) { - curl_easy_setopt(curlstream->curl, CURLOPT_SSL_VERIFYPEER, 1); - } else { - curl_easy_setopt(curlstream->curl, CURLOPT_SSL_VERIFYPEER, 0); - } - } - - /* prepare for "pull" mode */ - curl_multi_add_handle(curlstream->multi, curlstream->curl); - - /* Prepare stuff for file_get_wrapper_data: the data is an array: - * - * data = array( - * "headers" => array("Content-Type: text/html", "Xxx: Yyy"), - * "readbuf" => resource (equivalent to curlstream->readbuffer) - * ); - * */ - MAKE_STD_ZVAL(stream->wrapperdata); - array_init(stream->wrapperdata); - - MAKE_STD_ZVAL(curlstream->headers); - array_init(curlstream->headers); - - add_assoc_zval(stream->wrapperdata, "headers", curlstream->headers); - - MAKE_STD_ZVAL(tmp); - php_stream_to_zval(curlstream->readbuffer.buf, tmp); - add_assoc_zval(stream->wrapperdata, "readbuf", tmp); - -#if !HAVE_FOPENCOOKIE - if (options & STREAM_WILL_CAST) { - /* we will need to download the whole resource now, - * since we cannot get the actual FD for the download, - * so we won't be able to drive curl via stdio. */ - -/* TODO: this needs finishing */ - - curl_easy_perform(curlstream->curl); - } - else -#endif - { - /* fire up the connection; we need to detect a connection error here, - * otherwise the curlstream we return ends up doing nothing useful. */ - CURLMcode m; - CURLMsg *msg; - int msgs_left, msg_found = 0; - - while (CURLM_CALL_MULTI_PERFORM == (m = curl_multi_perform(curlstream->multi, &curlstream->pending))) { - ; /* spin */ - } - - if (m != CURLM_OK) { -#if HAVE_CURL_MULTI_STRERROR - php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", curl_multi_strerror(m)); -#else - php_error_docref(NULL TSRMLS_CC, E_WARNING, "There was an error mcode=%d", m); -#endif - php_stream_close(stream); - return NULL; - } - - /* we have only one curl handle here, even though we use multi syntax, - * so it's ok to fail on any error */ - while ((msg = curl_multi_info_read(curlstream->multi, &msgs_left))) { - if (msg->data.result == CURLE_OK) { - continue; - } else { -#if HAVE_CURL_EASY_STRERROR - php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", curl_easy_strerror(msg->data.result)); -#else - php_error_docref(NULL TSRMLS_CC, E_WARNING, "There was an error mcode=%d", msg->data.result); -#endif - msg_found++; - } - } - if (msg_found) { - php_stream_close(stream); - return NULL; - } - } - - return stream; -} - -static php_stream_wrapper_ops php_curl_wrapper_ops = { - php_curl_stream_opener, - NULL, /* stream_close: curl streams know how to clean themselves up */ - NULL, /* stream_stat: curl streams know how to stat themselves */ - NULL, /* stat url */ - NULL, /* opendir */ - "cURL", /* label */ - NULL, /* unlink */ - NULL, /* rename */ - NULL, /* mkdir */ - NULL /* rmdir */ -}; - -php_stream_wrapper php_curl_wrapper = { - &php_curl_wrapper_ops, - NULL, - 1 /* is_url */ -}; - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: noet sw=4 ts=4 fdm=marker - * vim<600: noet sw=4 ts=4 - */ diff --git a/ext/date/CREDITS b/ext/date/CREDITS deleted file mode 100644 index bfcacbe989ef2..0000000000000 --- a/ext/date/CREDITS +++ /dev/null @@ -1,2 +0,0 @@ -Date/Time Support -Derick Rethans diff --git a/ext/date/TODO b/ext/date/TODO deleted file mode 100644 index 4b1237c4a918a..0000000000000 --- a/ext/date/TODO +++ /dev/null @@ -1,6 +0,0 @@ -- Port over my 200 test cases to .phpt format. -- Write an error handler for unexpected characters while parsing dates. -- Cache lookups for timezone information. -- Optimize parsing @ with a negative timestamp. -- Make sure that date_default_timezone_set() validates the passed timezone - identifier. diff --git a/ext/date/config.m4 b/ext/date/config.m4 deleted file mode 100644 index cbd732f4edfbc..0000000000000 --- a/ext/date/config.m4 +++ /dev/null @@ -1,25 +0,0 @@ -dnl $Id$ -dnl config.m4 for date extension - -sinclude(ext/date/lib/timelib.m4) -sinclude(lib/timelib.m4) - -PHP_DATE_CFLAGS="-I@ext_builddir@/lib" -timelib_sources="lib/astro.c lib/dow.c lib/parse_date.c lib/parse_tz.c - lib/timelib.c lib/tm2unixtime.c lib/unixtime2tm.c" - -PHP_NEW_EXTENSION(date, php_date.c $timelib_sources, no,, $PHP_DATE_CFLAGS) - -PHP_ADD_BUILD_DIR([$ext_builddir/lib], 1) -PHP_ADD_INCLUDE([$ext_builddir/lib]) -PHP_ADD_INCLUDE([$ext_srcdir/lib]) - -PHP_INSTALL_HEADERS([ext/date], [php_date.h lib/timelib.h lib/timelib_structs.h lib/timelib_config.h]) - -cat > $ext_builddir/lib/timelib_config.h < -#endif -EOF diff --git a/ext/date/config.w32 b/ext/date/config.w32 deleted file mode 100755 index 25f5e750cd730..0000000000000 --- a/ext/date/config.w32 +++ /dev/null @@ -1,10 +0,0 @@ -// $Id$ -// vim:ft=javascript - -EXTENSION("date", "php_date.c", false, "-Iext/date/lib"); -ADD_SOURCES("ext/date/lib", "astro.c timelib.c dow.c parse_date.c parse_tz.c tm2unixtime.c unixtime2tm.c", "date"); -AC_DEFINE('HAVE_DATE', 1, 'Have date/time support'); - -var tl_config = FSO.CreateTextFile("ext/date/lib/timelib_config.h", true); -tl_config.WriteLine("#include \"config.w32.h\""); -tl_config.Close(); diff --git a/ext/date/lib/README b/ext/date/lib/README deleted file mode 100644 index 12f09bc5e2828..0000000000000 --- a/ext/date/lib/README +++ /dev/null @@ -1,6 +0,0 @@ -Regenerating Parser -=================== - -Make sure you use re2c 0.9.10 or higher: - -/dat/dev/sf/re2c/re2c -d -b -o ext/date/lib/parse_date.c ext/date/lib/parse_date.re diff --git a/ext/date/lib/astro.c b/ext/date/lib/astro.c deleted file mode 100644 index 5a821b2aaf7b9..0000000000000 --- a/ext/date/lib/astro.c +++ /dev/null @@ -1,303 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Algorithms are taken from a public domain source by Paul | - | Schlyter, who wrote this in December 1992 | - +----------------------------------------------------------------------+ - | Authors: Derick Rethans | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#include -#include -#include "timelib.h" - -#define days_since_2000_Jan_0(y,m,d) \ - (367L*(y)-((7*((y)+(((m)+9)/12)))/4)+((275*(m))/9)+(d)-730530L) - -#ifndef PI - #define PI 3.1415926535897932384 -#endif - -#define RADEG ( 180.0 / PI ) -#define DEGRAD ( PI / 180.0 ) - -/* The trigonometric functions in degrees */ - -#define sind(x) sin((x)*DEGRAD) -#define cosd(x) cos((x)*DEGRAD) -#define tand(x) tan((x)*DEGRAD) - -#define atand(x) (RADEG*atan(x)) -#define asind(x) (RADEG*asin(x)) -#define acosd(x) (RADEG*acos(x)) -#define atan2d(y,x) (RADEG*atan2(y,x)) - - -/* Following are some macros around the "workhorse" function __daylen__ */ -/* They mainly fill in the desired values for the reference altitude */ -/* below the horizon, and also selects whether this altitude should */ -/* refer to the Sun's center or its upper limb. */ - - -#include "astro.h" - -/******************************************************************/ -/* This function reduces any angle to within the first revolution */ -/* by subtracting or adding even multiples of 360.0 until the */ -/* result is >= 0.0 and < 360.0 */ -/******************************************************************/ - -#define INV360 (1.0 / 360.0) - -/*****************************************/ -/* Reduce angle to within 0..360 degrees */ -/*****************************************/ -static double astro_revolution(double x) -{ - return (x - 360.0 * floor(x * INV360)); -} - -/*********************************************/ -/* Reduce angle to within +180..+180 degrees */ -/*********************************************/ -static double astro_rev180( double x ) -{ - return (x - 360.0 * floor(x * INV360 + 0.5)); -} - -/*******************************************************************/ -/* This function computes GMST0, the Greenwich Mean Sidereal Time */ -/* at 0h UT (i.e. the sidereal time at the Greenwhich meridian at */ -/* 0h UT). GMST is then the sidereal time at Greenwich at any */ -/* time of the day. I've generalized GMST0 as well, and define it */ -/* as: GMST0 = GMST - UT -- this allows GMST0 to be computed at */ -/* other times than 0h UT as well. While this sounds somewhat */ -/* contradictory, it is very practical: instead of computing */ -/* GMST like: */ -/* */ -/* GMST = (GMST0) + UT * (366.2422/365.2422) */ -/* */ -/* where (GMST0) is the GMST last time UT was 0 hours, one simply */ -/* computes: */ -/* */ -/* GMST = GMST0 + UT */ -/* */ -/* where GMST0 is the GMST "at 0h UT" but at the current moment! */ -/* Defined in this way, GMST0 will increase with about 4 min a */ -/* day. It also happens that GMST0 (in degrees, 1 hr = 15 degr) */ -/* is equal to the Sun's mean longitude plus/minus 180 degrees! */ -/* (if we neglect aberration, which amounts to 20 seconds of arc */ -/* or 1.33 seconds of time) */ -/* */ -/*******************************************************************/ - -static double astro_GMST0(double d) -{ - double sidtim0; - /* Sidtime at 0h UT = L (Sun's mean longitude) + 180.0 degr */ - /* L = M + w, as defined in sunpos(). Since I'm too lazy to */ - /* add these numbers, I'll let the C compiler do it for me. */ - /* Any decent C compiler will add the constants at compile */ - /* time, imposing no runtime or code overhead. */ - sidtim0 = astro_revolution((180.0 + 356.0470 + 282.9404) + (0.9856002585 + 4.70935E-5) * d); - return sidtim0; -} - -/* This function computes the Sun's position at any instant */ - -/******************************************************/ -/* Computes the Sun's ecliptic longitude and distance */ -/* at an instant given in d, number of days since */ -/* 2000 Jan 0.0. The Sun's ecliptic latitude is not */ -/* computed, since it's always very near 0. */ -/******************************************************/ -static void astro_sunpos(double d, double *lon, double *r) -{ - double M, /* Mean anomaly of the Sun */ - w, /* Mean longitude of perihelion */ - /* Note: Sun's mean longitude = M + w */ - e, /* Eccentricity of Earth's orbit */ - E, /* Eccentric anomaly */ - x, y, /* x, y coordinates in orbit */ - v; /* True anomaly */ - - /* Compute mean elements */ - M = astro_revolution(356.0470 + 0.9856002585 * d); - w = 282.9404 + 4.70935E-5 * d; - e = 0.016709 - 1.151E-9 * d; - - /* Compute true longitude and radius vector */ - E = M + e * RADEG * sind(M) * (1.0 + e * cosd(M)); - x = cosd(E) - e; - y = sqrt(1.0 - e*e) * sind(E); - *r = sqrt(x*x + y*y); /* Solar distance */ - v = atan2d(y, x); /* True anomaly */ - *lon = v + w; /* True solar longitude */ - if (*lon >= 360.0) { - *lon -= 360.0; /* Make it 0..360 degrees */ - } -} - -static void astro_sun_RA_dec(double d, double *RA, double *dec, double *r) -{ - double lon, obl_ecl, x, y, z; - - /* Compute Sun's ecliptical coordinates */ - astro_sunpos(d, &lon, r); - - /* Compute ecliptic rectangular coordinates (z=0) */ - x = *r * cosd(lon); - y = *r * sind(lon); - - /* Compute obliquity of ecliptic (inclination of Earth's axis) */ - obl_ecl = 23.4393 - 3.563E-7 * d; - - /* Convert to equatorial rectangular coordinates - x is unchanged */ - z = y * sind(obl_ecl); - y = y * cosd(obl_ecl); - - /* Convert to spherical coordinates */ - *RA = atan2d(y, x); - *dec = atan2d(z, sqrt(x*x + y*y)); -} - -/** - * Note: timestamp = unixtimestamp (NEEDS to be 00:00:00 UT) - * Eastern longitude positive, Western longitude negative - * Northern latitude positive, Southern latitude negative - * The longitude value IS critical in this function! - * altit = the altitude which the Sun should cross - * Set to -35/60 degrees for rise/set, -6 degrees - * for civil, -12 degrees for nautical and -18 - * degrees for astronomical twilight. - * upper_limb: non-zero -> upper limb, zero -> center - * Set to non-zero (e.g. 1) when computing rise/set - * times, and to zero when computing start/end of - * twilight. - * *rise = where to store the rise time - * *set = where to store the set time - * Both times are relative to the specified altitude, - * and thus this function can be used to compute - * various twilight times, as well as rise/set times - * Return value: 0 = sun rises/sets this day, times stored at - * *trise and *tset. - * +1 = sun above the specified "horizon" 24 hours. - * *trise set to time when the sun is at south, - * minus 12 hours while *tset is set to the south - * time plus 12 hours. "Day" length = 24 hours - * -1 = sun is below the specified "horizon" 24 hours - * "Day" length = 0 hours, *trise and *tset are - * both set to the time when the sun is at south. - * - */ -int timelib_astro_rise_set_altitude(timelib_time *t_loc, double lon, double lat, double altit, int upper_limb, double *h_rise, double *h_set, timelib_sll *ts_rise, timelib_sll *ts_set, timelib_sll *ts_transit) -{ - double d, /* Days since 2000 Jan 0.0 (negative before) */ - sr, /* Solar distance, astronomical units */ - sRA, /* Sun's Right Ascension */ - sdec, /* Sun's declination */ - sradius, /* Sun's apparent radius */ - t, /* Diurnal arc */ - tsouth, /* Time when Sun is at south */ - sidtime; /* Local sidereal time */ - timelib_time *t_utc; - timelib_sll timestamp, old_sse; - - int rc = 0; /* Return cde from function - usually 0 */ - - /* Normalize time */ - old_sse = t_loc->sse; - t_loc->h = 12; - t_loc->i = t_loc->s = 0; - timelib_update_ts(t_loc, NULL); - - /* Calculate TS belonging to UTC 00:00 of the current day */ - t_utc = timelib_time_ctor(); - t_utc->y = t_loc->y; - t_utc->m = t_loc->m; - t_utc->d = t_loc->d; - t_utc->h = t_utc->i = t_utc->s = 0; - timelib_update_ts(t_utc, NULL); - - /* Compute d of 12h local mean solar time */ - timestamp = t_loc->sse; - d = timelib_ts_to_juliandate(timestamp) - lon/360.0; - - /* Compute local sidereal time of this moment */ - sidtime = astro_revolution(astro_GMST0(d) + 180.0 + lon); - - /* Compute Sun's RA + Decl at this moment */ - astro_sun_RA_dec( d, &sRA, &sdec, &sr ); - - /* Compute time when Sun is at south - in hours UT */ - tsouth = 12.0 - astro_rev180(sidtime - sRA) / 15.0; - - /* Compute the Sun's apparent radius, degrees */ - sradius = 0.2666 / sr; - - /* Do correction to upper limb, if necessary */ - if (upper_limb) { - altit -= sradius; - } - - /* Compute the diurnal arc that the Sun traverses to reach */ - /* the specified altitude altit: */ - { - double cost; - cost = (sind(altit) - sind(lat) * sind(sdec)) / (cosd(lat) * cosd(sdec)); - *ts_transit = t_utc->sse + (tsouth * 3600); - if (cost >= 1.0) { - rc = -1; - t = 0.0; /* Sun always below altit */ - - *ts_rise = *ts_set = t_utc->sse + (tsouth * 3600); - } else if (cost <= -1.0) { - rc = +1; - t = 12.0; /* Sun always above altit */ - - *ts_rise = t_loc->sse - (12 * 3600); - *ts_set = t_loc->sse + (12 * 3600); - } else { - t = acosd(cost) / 15.0; /* The diurnal arc, hours */ - - /* Store rise and set times - as Unix Timestamp */ - *ts_rise = ((tsouth - t) * 3600) + t_utc->sse; - *ts_set = ((tsouth + t) * 3600) + t_utc->sse; - - *h_rise = (tsouth - t); - *h_set = (tsouth + t); - } - } - - /* Kill temporary time and restore original sse */ - timelib_time_dtor(t_utc); - t_loc->sse = old_sse; - - return rc; -} - -double timelib_ts_to_juliandate(timelib_sll ts) -{ - double tmp; - - tmp = ts; - tmp /= 86400; - tmp += 2440587.5; - tmp -= 2451543; - - return tmp; -} diff --git a/ext/date/lib/astro.h b/ext/date/lib/astro.h deleted file mode 100644 index 7b85c76b74306..0000000000000 --- a/ext/date/lib/astro.h +++ /dev/null @@ -1,51 +0,0 @@ -/* This macro computes the length of the day, from sunrise to sunset. */ -/* Sunrise/set is considered to occur when the Sun's upper limb is */ -/* 35 arc minutes below the horizon (this accounts for the refraction */ -/* of the Earth's atmosphere). */ -#define day_length(year,month,day,lon,lat) \ - __daylen__( year, month, day, lon, lat, -35.0/60.0, 1 ) - -/* This macro computes the length of the day, including civil twilight. */ -/* Civil twilight starts/ends when the Sun's center is 6 degrees below */ -/* the horizon. */ -#define day_civil_twilight_length(year,month,day,lon,lat) \ - __daylen__( year, month, day, lon, lat, -6.0, 0 ) - -/* This macro computes the length of the day, incl. nautical twilight. */ -/* Nautical twilight starts/ends when the Sun's center is 12 degrees */ -/* below the horizon. */ -#define day_nautical_twilight_length(year,month,day,lon,lat) \ - __daylen__( year, month, day, lon, lat, -12.0, 0 ) - -/* This macro computes the length of the day, incl. astronomical twilight. */ -/* Astronomical twilight starts/ends when the Sun's center is 18 degrees */ -/* below the horizon. */ -#define day_astronomical_twilight_length(year,month,day,lon,lat) \ - __daylen__( year, month, day, lon, lat, -18.0, 0 ) - - -/* This macro computes times for sunrise/sunset. */ -/* Sunrise/set is considered to occur when the Sun's upper limb is */ -/* 35 arc minutes below the horizon (this accounts for the refraction */ -/* of the Earth's atmosphere). */ -#define timelib_astro_sun_rise_set(ts,lon,lat,hrise,hset,rise,set) \ - timelib_astro_rise_set_altitude( ts, lon, lat, -35.0/60.0, 1, hrise, hset, rise, set ) - -/* This macro computes the start and end times of civil twilight. */ -/* Civil twilight starts/ends when the Sun's center is 6 degrees below */ -/* the horizon. */ -#define civil_twilight(ts,lon,lat,start,end) \ - timelib_astro_rise_set_altitude( ts, lon, lat, -6.0, 0, start, end ) - -/* This macro computes the start and end times of nautical twilight. */ -/* Nautical twilight starts/ends when the Sun's center is 12 degrees */ -/* below the horizon. */ -#define nautical_twilight(ts,lon,lat,start,end) \ - timelib_astro_rise_set_altitude( ts, lon, lat, -12.0, 0, start, end ) - -/* This macro computes the start and end times of astronomical twilight. */ -/* Astronomical twilight starts/ends when the Sun's center is 18 degrees */ -/* below the horizon. */ -#define astronomical_twilight(ts,lon,lat,start,end) \ - timelib_astro_rise_set_altitude( ts, lon, lat, -18.0, 0, start, end ) - diff --git a/ext/date/lib/dow.c b/ext/date/lib/dow.c deleted file mode 100644 index cce96d5bdfa14..0000000000000 --- a/ext/date/lib/dow.c +++ /dev/null @@ -1,147 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Derick Rethans | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#include "timelib.h" - -static int m_table_common[13] = { -1, 0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5 }; /* 1 = jan */ -static int m_table_leap[13] = { -1, 6, 2, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5 }; /* 1 = jan */ - -static timelib_sll century_value(timelib_sll j) -{ - timelib_sll i = j - 17; - timelib_sll c = (4 - i * 2 + (i + 1) / 4) % 7; - - return c < 0 ? c + 7 : c; -} - -static timelib_sll timelib_day_of_week_ex(timelib_sll y, timelib_sll m, timelib_sll d, int iso) -{ - timelib_sll c1, y1, m1, dow; - - /* Only valid for Gregorian calendar */ - if (y < 1753) { - return -1; - } - c1 = century_value(y / 100); - y1 = (y % 100); - m1 = timelib_is_leap(y) ? m_table_leap[m] : m_table_common[m]; - dow = (c1 + y1 + m1 + (y1 / 4) + d) % 7; - if (iso) { - if (dow == 0) { - dow = 7; - } - } - return dow; -} - -timelib_sll timelib_day_of_week(timelib_sll y, timelib_sll m, timelib_sll d) -{ - return timelib_day_of_week_ex(y, m, d, 0); -} - -timelib_sll timelib_iso_day_of_week(timelib_sll y, timelib_sll m, timelib_sll d) -{ - return timelib_day_of_week_ex(y, m, d, 1); -} - - /* jan feb mar apr may jun jul aug sep oct nov dec */ -static int d_table_common[13] = { 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; -static int d_table_leap[13] = { 0, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 }; -static int ml_table_common[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; -static int ml_table_leap[13] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; - -timelib_sll timelib_day_of_year(timelib_sll y, timelib_sll m, timelib_sll d) -{ - return (timelib_is_leap(y) ? d_table_leap[m] : d_table_common[m]) + d - 1; -} - -timelib_sll timelib_days_in_month(timelib_sll y, timelib_sll m) -{ - return timelib_is_leap(y) ? ml_table_leap[m] : ml_table_common[m]; -} - -void timelib_isoweek_from_date(timelib_sll y, timelib_sll m, timelib_sll d, timelib_sll *iw, timelib_sll *iy) -{ - int y_leap, prev_y_leap, doy, jan1weekday, weekday; - - y_leap = timelib_is_leap(y); - prev_y_leap = timelib_is_leap(y-1); - doy = timelib_day_of_year(y, m, d) + 1; - if (y_leap && m > 2) { - doy++; - } - jan1weekday = timelib_day_of_week(y, 1, 1); - weekday = timelib_day_of_week(y, m, d); - if (weekday == 0) weekday = 7; - if (jan1weekday == 0) jan1weekday = 7; - /* Find if Y M D falls in YearNumber Y-1, WeekNumber 52 or 53 */ - if (doy <= (8 - jan1weekday) && jan1weekday > 4) { - *iy = y - 1; - if (jan1weekday == 5 || (jan1weekday == 6 && prev_y_leap)) { - *iw = 53; - } else { - *iw = 52; - } - } else { - *iy = y; - } - /* 8. Find if Y M D falls in YearNumber Y+1, WeekNumber 1 */ - if (*iy == y) { - int i; - - i = y_leap ? 366 : 365; - if ((i - (doy - y_leap)) < (4 - weekday)) { - *iy = y + 1; - *iw = 1; - return; - } - } - /* 9. Find if Y M D falls in YearNumber Y, WeekNumber 1 through 53 */ - if (*iy == y) { - int j; - - j = doy + (7 - weekday) + (jan1weekday - 1); - *iw = j / 7; - if (jan1weekday > 4) { - *iw -= 1; - } - } -} - -timelib_sll timelib_daynr_from_weeknr(timelib_sll y, timelib_sll w, timelib_sll d) -{ - timelib_sll dow, day; - - /* Figure out the dayofweek for y-1-1 */ - dow = timelib_day_of_week(y, 1, 1); - /* then use that to figure out the offset for day 1 of week 1 */ - day = 0 - (dow > 4 ? dow - 7 : dow); - - /* Add weeks and days */ - return day + ((w - 1) * 7) + d; -} - -#if 0 -int main(void) -{ - printf("dow = %d\n", timelib_day_of_week(1978, 12, 22)); /* 5 */ - printf("dow = %d\n", timelib_day_of_week(2005, 2, 19)); /* 6 */ -} -#endif diff --git a/ext/date/lib/fallbackmap.h b/ext/date/lib/fallbackmap.h deleted file mode 100644 index 7189eb88e3045..0000000000000 --- a/ext/date/lib/fallbackmap.h +++ /dev/null @@ -1,40 +0,0 @@ - { "sst", 0, -11, "Pacific/Apia" }, - { "hst", 0, -10, "Pacific/Honolulu" }, - { "akst", 0, -9, "America/Anchorage" }, - { "akdt", 1, -8, "America/Anchorage" }, - { "pst", 0, -8, "America/Los_Angeles" }, - { "pdt", 1, -7, "America/Los_Angeles" }, - { "mst", 0, -7, "America/Denver" }, - { "mdt", 1, -6, "America/Denver" }, - { "cst", 0, -6, "America/Chicago" }, - { "cdt", 1, -5, "America/Chicago" }, - { "est", 0, -5, "America/New_York" }, - { "edt", 1, -4, "America/New_York" }, - { "ast", 0, -4, "America/Halifax" }, - { "adt", 1, -3, "America/Halifax" }, - { "brt", 0, -3, "America/Sao_Paulo" }, - { "brst", 1, -2, "America/Sao_Paulo" }, - { "azost", 0, -1, "Atlantic/Azores" }, - { "azodt", 1, 0, "Atlantic/Azores" }, - { "gmt", 0, 0, "Europe/London" }, - { "bst", 1, 1, "Europe/London" }, - { "cet", 0, 1, "Europe/Paris" }, - { "cest", 1, 2, "Europe/Paris" }, - { "eet", 0, 2, "Europe/Helsinki" }, - { "eest", 1, 3, "Europe/Helsinki" }, - { "msk", 0, 3, "Europe/Moscow" }, - { "msd", 1, 4, "Europe/Moscow" }, - { "gst", 0, 4, "Asia/Dubai" }, - { "pkt", 0, 5, "Asia/Karachi" }, - { "ist", 0, 5.5, "Asia/Calcutta" }, - { "npt", 0, 5.75, "Asia/Katmandu" }, - { "yekt", 1, 6, "Asia/Yekaterinburg" }, - { "novst", 1, 7, "Asia/Novosibirsk" }, - { "krat", 0, 7, "Asia/Krasnoyarsk" }, - { "krast", 1, 8, "Asia/Krasnoyarsk" }, - { "jst", 0, 9, "Asia/Tokyo" }, - { "est", 0, 10, "Australia/Melbourne" }, - { "cst", 1, 10.5, "Australia/Adelaide" }, - { "est", 1, 11, "Australia/Melbourne" }, - { "nzst", 0, 12, "Pacific/Auckland" }, - { "nzdt", 1, 13, "Pacific/Auckland" }, diff --git a/ext/date/lib/parse_date.c b/ext/date/lib/parse_date.c deleted file mode 100644 index 82f25c5ba5bea..0000000000000 --- a/ext/date/lib/parse_date.c +++ /dev/null @@ -1,21861 +0,0 @@ -/* Generated by re2c 0.10.6 on Mon Dec 11 00:05:08 2007 */ -#line 1 "ext/date/lib/parse_date.re" -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Derick Rethans | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#include "timelib.h" - -#include -#include - -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_STRING_H -#include -#else -#include -#endif - -#if defined(_MSC_VER) -# define strtoll(s, f, b) _atoi64(s) -#elif !defined(HAVE_STRTOLL) -# if defined(HAVE_ATOLL) -# define strtoll(s, f, b) atoll(s) -# else -# define strtoll(s, f, b) strtol(s, f, b) -# endif -#endif - -#define TIMELIB_SECOND 1 -#define TIMELIB_MINUTE 2 -#define TIMELIB_HOUR 3 -#define TIMELIB_DAY 4 -#define TIMELIB_MONTH 5 -#define TIMELIB_YEAR 6 -#define TIMELIB_WEEKDAY 7 -#define TIMELIB_SPECIAL 8 - -#define EOI 257 -#define TIME 258 -#define DATE 259 - -#define TIMELIB_XMLRPC_SOAP 260 -#define TIMELIB_TIME12 261 -#define TIMELIB_TIME24 262 -#define TIMELIB_GNU_NOCOLON 263 -#define TIMELIB_GNU_NOCOLON_TZ 264 -#define TIMELIB_ISO_NOCOLON 265 - -#define TIMELIB_AMERICAN 266 -#define TIMELIB_ISO_DATE 267 -#define TIMELIB_DATE_FULL 268 -#define TIMELIB_DATE_TEXT 269 -#define TIMELIB_DATE_NOCOLON 270 -#define TIMELIB_PG_YEARDAY 271 -#define TIMELIB_PG_TEXT 272 -#define TIMELIB_PG_REVERSE 273 -#define TIMELIB_CLF 274 -#define TIMELIB_DATE_NO_DAY 275 -#define TIMELIB_SHORTDATE_WITH_TIME 276 -#define TIMELIB_DATE_FULL_POINTED 277 -#define TIMELIB_TIME24_WITH_ZONE 278 -#define TIMELIB_ISO_WEEK 279 - -#define TIMELIB_TIMEZONE 300 -#define TIMELIB_AGO 301 - -#define TIMELIB_RELATIVE 310 - -#define TIMELIB_ERROR 999 - -typedef unsigned char uchar; - -#define BSIZE 8192 - -#define YYCTYPE uchar -#define YYCURSOR cursor -#define YYLIMIT s->lim -#define YYMARKER s->ptr -#define YYFILL(n) return EOI; - -#define RET(i) {s->cur = cursor; return i;} - -#define timelib_string_free free - -#define TIMELIB_HAVE_TIME() { if (s->time->have_time) { add_error(s, "Double time specification"); timelib_string_free(str); return TIMELIB_ERROR; } else { s->time->have_time = 1; s->time->h = 0; s->time->i = 0; s->time->s = 0; s->time->f = 0; } } -#define TIMELIB_UNHAVE_TIME() { s->time->have_time = 0; s->time->h = 0; s->time->i = 0; s->time->s = 0; s->time->f = 0; } -#define TIMELIB_HAVE_DATE() { if (s->time->have_date) { add_error(s, "Double date specification"); timelib_string_free(str); return TIMELIB_ERROR; } else { s->time->have_date = 1; } } -#define TIMELIB_UNHAVE_DATE() { s->time->have_date = 0; s->time->d = 0; s->time->m = 0; s->time->y = 0; } -#define TIMELIB_HAVE_RELATIVE() { s->time->have_relative = 1; s->time->relative.weekday_behavior = 1; } -#define TIMELIB_HAVE_WEEKDAY_RELATIVE() { s->time->have_weekday_relative = 1; } -#define TIMELIB_HAVE_SPECIAL_RELATIVE() { s->time->have_special_relative = 1; } -#define TIMELIB_HAVE_TZ() { s->cur = cursor; if (s->time->have_zone) { add_warning(s, "Double timezone specification"); timelib_string_free(str); return TIMELIB_ERROR; } else { s->time->have_zone = 1; } } - -#define TIMELIB_INIT s->cur = cursor; str = timelib_string(s); ptr = str -#define TIMELIB_DEINIT timelib_string_free(str) -#define TIMELIB_ADJUST_RELATIVE_WEEKDAY() if (in->time.have_weekday_relative && (in.rel.d > 0)) { in.rel.d -= 7; } - -#define TIMELIB_PROCESS_YEAR(x) { \ - if ((x) == -1) { \ - /* (x) = 0; */ \ - } else if ((x) < 100) { \ - if ((x) < 70) { \ - (x) += 2000; \ - } else { \ - (x) += 1900; \ - } \ - } \ -} - -#ifdef DEBUG_PARSER -#define DEBUG_OUTPUT(s) printf("%s\n", s); -#define YYDEBUG(s,c) { if (s != -1) { printf("state: %d ", s); printf("[%c]\n", c); } } -#else -#define DEBUG_OUTPUT(s) -#define YYDEBUG(s,c) -#endif - -#include "timelib_structs.h" - -typedef struct timelib_elems { - unsigned int c; /* Number of elements */ - char **v; /* Values */ -} timelib_elems; - -typedef struct Scanner { - int fd; - uchar *lim, *str, *ptr, *cur, *tok, *pos; - unsigned int line, len; - struct timelib_error_container *errors; - - struct timelib_time *time; - const timelib_tzdb *tzdb; -} Scanner; - -typedef struct _timelib_lookup_table { - const char *name; - int type; - int value; -} timelib_lookup_table; - -typedef struct _timelib_relunit { - const char *name; - int unit; - int multiplier; -} timelib_relunit; - -#define HOUR(a) (int)(a * 60) - -/* The timezone table. */ -const static timelib_tz_lookup_table timelib_timezone_lookup[] = { -#include "timezonemap.h" - { NULL, 0, 0, NULL }, -}; - -const static timelib_tz_lookup_table timelib_timezone_fallbackmap[] = { -#include "fallbackmap.h" - { NULL, 0, 0, NULL }, -}; - -const static timelib_tz_lookup_table timelib_timezone_utc[] = { - { "utc", 0, 0, "UTC" }, -}; - -static timelib_relunit const timelib_relunit_lookup[] = { - { "sec", TIMELIB_SECOND, 1 }, - { "secs", TIMELIB_SECOND, 1 }, - { "second", TIMELIB_SECOND, 1 }, - { "seconds", TIMELIB_SECOND, 1 }, - { "min", TIMELIB_MINUTE, 1 }, - { "mins", TIMELIB_MINUTE, 1 }, - { "minute", TIMELIB_MINUTE, 1 }, - { "minutes", TIMELIB_MINUTE, 1 }, - { "hour", TIMELIB_HOUR, 1 }, - { "hours", TIMELIB_HOUR, 1 }, - { "day", TIMELIB_DAY, 1 }, - { "days", TIMELIB_DAY, 1 }, - { "week", TIMELIB_DAY, 7 }, - { "weeks", TIMELIB_DAY, 7 }, - { "fortnight", TIMELIB_DAY, 14 }, - { "fortnights", TIMELIB_DAY, 14 }, - { "forthnight", TIMELIB_DAY, 14 }, - { "forthnights", TIMELIB_DAY, 14 }, - { "month", TIMELIB_MONTH, 1 }, - { "months", TIMELIB_MONTH, 1 }, - { "year", TIMELIB_YEAR, 1 }, - { "years", TIMELIB_YEAR, 1 }, - - { "monday", TIMELIB_WEEKDAY, 1 }, - { "mon", TIMELIB_WEEKDAY, 1 }, - { "tuesday", TIMELIB_WEEKDAY, 2 }, - { "tue", TIMELIB_WEEKDAY, 2 }, - { "wednesday", TIMELIB_WEEKDAY, 3 }, - { "wed", TIMELIB_WEEKDAY, 3 }, - { "thursday", TIMELIB_WEEKDAY, 4 }, - { "thu", TIMELIB_WEEKDAY, 4 }, - { "friday", TIMELIB_WEEKDAY, 5 }, - { "fri", TIMELIB_WEEKDAY, 5 }, - { "saturday", TIMELIB_WEEKDAY, 6 }, - { "sat", TIMELIB_WEEKDAY, 6 }, - { "sunday", TIMELIB_WEEKDAY, 0 }, - { "sun", TIMELIB_WEEKDAY, 0 }, - - { "weekday", TIMELIB_SPECIAL, TIMELIB_SPECIAL_WEEKDAY }, - { "weekdays", TIMELIB_SPECIAL, TIMELIB_SPECIAL_WEEKDAY }, - { NULL, 0, 0 } -}; - -/* The relative text table. */ -static timelib_lookup_table const timelib_reltext_lookup[] = { - { "first", 0, 1 }, - { "next", 0, 1 }, - { "second", 0, 2 }, - { "third", 0, 3 }, - { "fourth", 0, 4 }, - { "fifth", 0, 5 }, - { "sixth", 0, 6 }, - { "seventh", 0, 7 }, - { "eight", 0, 8 }, - { "ninth", 0, 9 }, - { "tenth", 0, 10 }, - { "eleventh", 0, 11 }, - { "twelfth", 0, 12 }, - { "last", 0, -1 }, - { "previous", 0, -1 }, - { "this", 1, 0 }, - { NULL, 1, 0 } -}; - -/* The month table. */ -static timelib_lookup_table const timelib_month_lookup[] = { - { "jan", 0, 1 }, - { "feb", 0, 2 }, - { "mar", 0, 3 }, - { "apr", 0, 4 }, - { "may", 0, 5 }, - { "jun", 0, 6 }, - { "jul", 0, 7 }, - { "aug", 0, 8 }, - { "sep", 0, 9 }, - { "sept", 0, 9 }, - { "oct", 0, 10 }, - { "nov", 0, 11 }, - { "dec", 0, 12 }, - { "i", 0, 1 }, - { "ii", 0, 2 }, - { "iii", 0, 3 }, - { "iv", 0, 4 }, - { "v", 0, 5 }, - { "vi", 0, 6 }, - { "vii", 0, 7 }, - { "viii", 0, 8 }, - { "ix", 0, 9 }, - { "x", 0, 10 }, - { "xi", 0, 11 }, - { "xii", 0, 12 }, - - { "january", 0, 1 }, - { "february", 0, 2 }, - { "march", 0, 3 }, - { "april", 0, 4 }, - { "may", 0, 5 }, - { "june", 0, 6 }, - { "july", 0, 7 }, - { "august", 0, 8 }, - { "september", 0, 9 }, - { "october", 0, 10 }, - { "november", 0, 11 }, - { "december", 0, 12 }, - { NULL, 0, 0 } -}; - -#if 0 -static char* timelib_ltrim(char *s) -{ - char *ptr = s; - while (ptr[0] == ' ' || ptr[0] == '\t') { - ptr++; - } - return ptr; -} -#endif - -#if 0 -uchar *fill(Scanner *s, uchar *cursor){ - if(!s->eof){ - unsigned int cnt = s->tok - s->bot; - if(cnt){ - memcpy(s->bot, s->tok, s->lim - s->tok); - s->tok = s->bot; - s->ptr -= cnt; - cursor -= cnt; - s->pos -= cnt; - s->lim -= cnt; - } - if((s->top - s->lim) < BSIZE){ - uchar *buf = (uchar*) malloc(((s->lim - s->bot) + BSIZE)*sizeof(uchar)); - memcpy(buf, s->tok, s->lim - s->tok); - s->tok = buf; - s->ptr = &buf[s->ptr - s->bot]; - cursor = &buf[cursor - s->bot]; - s->pos = &buf[s->pos - s->bot]; - s->lim = &buf[s->lim - s->bot]; - s->top = &s->lim[BSIZE]; - free(s->bot); - s->bot = buf; - } - if((cnt = read(s->fd, (char*) s->lim, BSIZE)) != BSIZE){ - s->eof = &s->lim[cnt]; *(s->eof)++ = '\n'; - } - s->lim += cnt; - } - return cursor; -} -#endif - -static void add_warning(Scanner *s, char *error) -{ - s->errors->warning_count++; - s->errors->warning_messages = realloc(s->errors->warning_messages, s->errors->warning_count * sizeof(timelib_error_message)); - s->errors->warning_messages[s->errors->warning_count - 1].position = s->tok ? s->tok - s->str : 0; - s->errors->warning_messages[s->errors->warning_count - 1].character = s->tok ? *s->tok : 0; - s->errors->warning_messages[s->errors->warning_count - 1].message = strdup(error); -} - -static void add_error(Scanner *s, char *error) -{ - s->errors->error_count++; - s->errors->error_messages = realloc(s->errors->error_messages, s->errors->error_count * sizeof(timelib_error_message)); - s->errors->error_messages[s->errors->error_count - 1].position = s->tok ? s->tok - s->str : 0; - s->errors->error_messages[s->errors->error_count - 1].character = s->tok ? *s->tok : 0; - s->errors->error_messages[s->errors->error_count - 1].message = strdup(error); -} - -static timelib_sll timelib_meridian(char **ptr, timelib_sll h) -{ - timelib_sll retval = 0; - - while (!strchr("AaPp", **ptr)) { - ++*ptr; - } - if (**ptr == 'a' || **ptr == 'A') { - if (h == 12) { - retval = -12; - } - } else if (h != 12) { - retval = 12; - } - ++*ptr; - if (**ptr == '.') { - *ptr += 3; - } else { - ++*ptr; - } - return retval; -} - -static char *timelib_string(Scanner *s) -{ - char *tmp = calloc(1, s->cur - s->tok + 1); - memcpy(tmp, s->tok, s->cur - s->tok); - - return tmp; -} - -static timelib_sll timelib_get_nr(char **ptr, int max_length) -{ - char *begin, *end, *str; - timelib_sll tmp_nr = -1; - int len = 0; - - while ((**ptr < '0') || (**ptr > '9')) { - if (**ptr == '\0') { - return -1; - } - ++*ptr; - } - begin = *ptr; - while ((**ptr >= '0') && (**ptr <= '9') && len < max_length) { - ++*ptr; - ++len; - } - end = *ptr; - str = calloc(1, end - begin + 1); - memcpy(str, begin, end - begin); - tmp_nr = strtoll(str, NULL, 10); - free(str); - return tmp_nr; -} - -static void timelib_skip_day_suffix(char **ptr) -{ - if (isspace(**ptr)) { - return; - } - if (!strncasecmp(*ptr, "nd", 2) || !strncasecmp(*ptr, "rd", 2) ||!strncasecmp(*ptr, "st", 2) || !strncasecmp(*ptr, "th", 2)) { - *ptr += 2; - } -} - -static double timelib_get_frac_nr(char **ptr, int max_length) -{ - char *begin, *end, *str; - double tmp_nr = -1; - int len = 0; - - while ((**ptr != '.') && ((**ptr < '0') || (**ptr > '9'))) { - if (**ptr == '\0') { - return -1; - } - ++*ptr; - } - begin = *ptr; - while (((**ptr == '.') || ((**ptr >= '0') && (**ptr <= '9'))) && len < max_length) { - ++*ptr; - ++len; - } - end = *ptr; - str = calloc(1, end - begin + 1); - memcpy(str, begin, end - begin); - tmp_nr = strtod(str, NULL); - free(str); - return tmp_nr; -} - -static timelib_ull timelib_get_unsigned_nr(char **ptr, int max_length) -{ - timelib_ull dir = 1; - - while (((**ptr < '0') || (**ptr > '9')) && (**ptr != '+') && (**ptr != '-')) { - if (**ptr == '\0') { - return -1; - } - ++*ptr; - } - if (**ptr == '+') { - ++*ptr; - } else if (**ptr == '-') { - dir = -1; - ++*ptr; - } - return dir * timelib_get_nr(ptr, max_length); -} - -static long timelib_parse_tz_cor(char **ptr) -{ - char *begin = *ptr, *end; - long tmp; - - while (**ptr != '\0') { - ++*ptr; - } - end = *ptr; - switch (end - begin) { - case 1: - case 2: - return HOUR(strtol(begin, NULL, 10)); - break; - case 3: - case 4: - if (begin[1] == ':') { - tmp = HOUR(strtol(begin, NULL, 10)) + strtol(begin + 2, NULL, 10); - return tmp; - } else if (begin[2] == ':') { - tmp = HOUR(strtol(begin, NULL, 10)) + strtol(begin + 3, NULL, 10); - return tmp; - } else { - tmp = strtol(begin, NULL, 10); - return HOUR(tmp / 100) + tmp % 100; - } - case 5: - tmp = HOUR(strtol(begin, NULL, 10)) + strtol(begin + 3, NULL, 10); - return tmp; - } - return 0; -} - -static timelib_sll timelib_lookup_relative_text(char **ptr, int *behavior) -{ - char *word; - char *begin = *ptr, *end; - timelib_sll value = 0; - const timelib_lookup_table *tp; - - while ((**ptr >= 'A' && **ptr <= 'Z') || (**ptr >= 'a' && **ptr <= 'z')) { - ++*ptr; - } - end = *ptr; - word = calloc(1, end - begin + 1); - memcpy(word, begin, end - begin); - - for (tp = timelib_reltext_lookup; tp->name; tp++) { - if (strcasecmp(word, tp->name) == 0) { - value = tp->value; - *behavior = tp->type; - } - } - - free(word); - return value; -} - -static timelib_sll timelib_get_relative_text(char **ptr, int *behavior) -{ - while (**ptr == ' ' || **ptr == '\t' || **ptr == '-' || **ptr == '/') { - ++*ptr; - } - return timelib_lookup_relative_text(ptr, behavior); -} - -static long timelib_lookup_month(char **ptr) -{ - char *word; - char *begin = *ptr, *end; - long value = 0; - const timelib_lookup_table *tp; - - while ((**ptr >= 'A' && **ptr <= 'Z') || (**ptr >= 'a' && **ptr <= 'z')) { - ++*ptr; - } - end = *ptr; - word = calloc(1, end - begin + 1); - memcpy(word, begin, end - begin); - - for (tp = timelib_month_lookup; tp->name; tp++) { - if (strcasecmp(word, tp->name) == 0) { - value = tp->value; - } - } - - free(word); - return value; -} - -static long timelib_get_month(char **ptr) -{ - while (**ptr == ' ' || **ptr == '\t' || **ptr == '-' || **ptr == '.' || **ptr == '/') { - ++*ptr; - } - return timelib_lookup_month(ptr); -} - -static void timelib_eat_spaces(char **ptr) -{ - while (**ptr == ' ' || **ptr == '\t') { - ++*ptr; - } -} - -static const timelib_relunit* timelib_lookup_relunit(char **ptr) -{ - char *word; - char *begin = *ptr, *end; - const timelib_relunit *tp, *value = NULL; - - while (**ptr != '\0' && **ptr != ' ' && **ptr != '\t') { - ++*ptr; - } - end = *ptr; - word = calloc(1, end - begin + 1); - memcpy(word, begin, end - begin); - - for (tp = timelib_relunit_lookup; tp->name; tp++) { - if (strcasecmp(word, tp->name) == 0) { - value = tp; - break; - } - } - - free(word); - return value; -} - -static void timelib_set_relative(char **ptr, timelib_sll amount, int behavior, Scanner *s) -{ - const timelib_relunit* relunit; - - if (!(relunit = timelib_lookup_relunit(ptr))) { - return; - } - - switch (relunit->unit) { - case TIMELIB_SECOND: s->time->relative.s += amount * relunit->multiplier; break; - case TIMELIB_MINUTE: s->time->relative.i += amount * relunit->multiplier; break; - case TIMELIB_HOUR: s->time->relative.h += amount * relunit->multiplier; break; - case TIMELIB_DAY: s->time->relative.d += amount * relunit->multiplier; break; - case TIMELIB_MONTH: s->time->relative.m += amount * relunit->multiplier; break; - case TIMELIB_YEAR: s->time->relative.y += amount * relunit->multiplier; break; - - case TIMELIB_WEEKDAY: - TIMELIB_HAVE_WEEKDAY_RELATIVE(); - TIMELIB_UNHAVE_TIME(); - s->time->relative.d += (amount > 0 ? amount - 1 : amount) * 7; - s->time->relative.weekday = relunit->multiplier; - s->time->relative.weekday_behavior = behavior; - break; - - case TIMELIB_SPECIAL: - TIMELIB_HAVE_SPECIAL_RELATIVE(); - TIMELIB_UNHAVE_TIME(); - s->time->special.type = relunit->multiplier; - s->time->special.amount = amount; - } -} - -const static timelib_tz_lookup_table* zone_search(const char *word, long gmtoffset, int isdst) -{ - int first_found = 0; - const timelib_tz_lookup_table *tp, *first_found_elem = NULL; - const timelib_tz_lookup_table *fmp; - - if (strcasecmp("utc", word) == 0 || strcasecmp("gmt", word) == 0) { - return timelib_timezone_utc; - } - - for (tp = timelib_timezone_lookup; tp->name; tp++) { - if (strcasecmp(word, tp->name) == 0) { - if (!first_found) { - first_found = 1; - first_found_elem = tp; - if (gmtoffset == -1) { - return tp; - } - } - if (tp->gmtoffset == gmtoffset) { - return tp; - } - } - } - if (first_found) { - return first_found_elem; - } - - /* Still didn't find anything, let's find the zone solely based on - * offset/isdst then */ - for (fmp = timelib_timezone_fallbackmap; fmp->name; fmp++) { - if ((fmp->gmtoffset * 3600) == gmtoffset && fmp->type == isdst) { - return fmp; - } - } - return NULL; -} - -static long timelib_lookup_zone(char **ptr, int *dst, char **tz_abbr, int *found) -{ - char *word; - char *begin = *ptr, *end; - long value = 0; - const timelib_tz_lookup_table *tp; - - while (**ptr != '\0' && **ptr != ')') { - ++*ptr; - } - end = *ptr; - word = calloc(1, end - begin + 1); - memcpy(word, begin, end - begin); - - if ((tp = zone_search(word, -1, 0))) { - value = -tp->gmtoffset / 60; - *dst = tp->type; - value += tp->type * 60; - *found = 1; - } else { - *found = 0; - } - - *tz_abbr = word; - return value; -} - -static long timelib_get_zone(char **ptr, int *dst, timelib_time *t, int *tz_not_found, const timelib_tzdb *tzdb) -{ - timelib_tzinfo *res; - long retval = 0; - - *tz_not_found = 0; - - while (**ptr == ' ' || **ptr == '\t' || **ptr == '(') { - ++*ptr; - } - if (**ptr == '+') { - ++*ptr; - t->is_localtime = 1; - t->zone_type = TIMELIB_ZONETYPE_OFFSET; - *tz_not_found = 0; - t->dst = 0; - - retval = -1 * timelib_parse_tz_cor(ptr); - } else if (**ptr == '-') { - ++*ptr; - t->is_localtime = 1; - t->zone_type = TIMELIB_ZONETYPE_OFFSET; - *tz_not_found = 0; - t->dst = 0; - - retval = timelib_parse_tz_cor(ptr); - } else { - int found = 0; - long offset; - char *tz_abbr; - - t->is_localtime = 1; - - offset = timelib_lookup_zone(ptr, dst, &tz_abbr, &found); - if (found) { - t->zone_type = TIMELIB_ZONETYPE_ABBR; - } -#if 0 - /* If we found a TimeZone identifier, use it */ - if (tz_name) { - t->tz_info = timelib_parse_tzfile(tz_name); - t->zone_type = TIMELIB_ZONETYPE_ID; - } -#endif - /* If we have a TimeZone identifier to start with, use it */ - if (strstr(tz_abbr, "/")) { - if ((res = timelib_parse_tzfile(tz_abbr, tzdb)) != NULL) { - t->tz_info = res; - t->zone_type = TIMELIB_ZONETYPE_ID; - found++; - } - } - if (found && t->zone_type != TIMELIB_ZONETYPE_ID) { - timelib_time_tz_abbr_update(t, tz_abbr); - } - free(tz_abbr); - *tz_not_found = (found == 0); - retval = offset; - } - while (**ptr == ')') { - ++*ptr; - } - return retval; -} - -#define timelib_split_free(arg) { \ - int i; \ - for (i = 0; i < arg.c; i++) { \ - free(arg.v[i]); \ - } \ - if (arg.v) { \ - free(arg.v); \ - } \ -} - -static int scan(Scanner *s) -{ - uchar *cursor = s->cur; - char *str, *ptr = NULL; - -std: - s->tok = cursor; - s->len = 0; -#line 882 "ext/date/lib/parse_date.re" - - -{ - static unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 208, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 208, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 128, 64, 192, 0, - 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 32, 32, 32, 160, 32, 32, 32, - 160, 32, 32, 32, 32, 32, 160, 32, - 32, 32, 160, 160, 160, 32, 32, 32, - 32, 32, 32, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - }; - -#line 811 "ext/date/lib/parse_date.c" - { - YYCTYPE yych; - unsigned int yyaccept = 0; - - YYDEBUG(0, *YYCURSOR); - if((YYLIMIT - YYCURSOR) < 29) YYFILL(29); - yych = *YYCURSOR; - YYDEBUG(-1, yych); - switch(yych) { - case 0x00: - case 0x0A: goto yy48; - case 0x09: - case ' ': goto yy45; - case '(': goto yy42; - case '+': - case '-': goto yy41; - case ',': - case '.': goto yy47; - case '0': goto yy13; - case '1': goto yy14; - case '2': goto yy15; - case '3': goto yy16; - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy17; - case '@': goto yy11; - case 'A': goto yy25; - case 'B': - case 'C': - case 'G': - case 'H': - case 'K': - case 'Q': - case 'R': - case 'U': - case 'Z': goto yy43; - case 'D': goto yy31; - case 'E': goto yy35; - case 'F': goto yy23; - case 'I': goto yy18; - case 'J': goto yy21; - case 'L': goto yy37; - case 'M': goto yy7; - case 'N': goto yy5; - case 'O': goto yy29; - case 'P': goto yy39; - case 'S': goto yy27; - case 'T': goto yy9; - case 'V': goto yy19; - case 'W': goto yy33; - case 'X': goto yy20; - case 'Y': goto yy2; - case 'a': goto yy26; - case 'b': - case 'c': - case 'g': - case 'h': - case 'i': - case 'k': - case 'q': - case 'r': - case 'u': - case 'v': - case 'x': - case 'z': goto yy44; - case 'd': goto yy32; - case 'e': goto yy36; - case 'f': goto yy24; - case 'j': goto yy22; - case 'l': goto yy38; - case 'm': goto yy8; - case 'n': goto yy6; - case 'o': goto yy30; - case 'p': goto yy40; - case 's': goto yy28; - case 't': goto yy10; - case 'w': goto yy34; - case 'y': goto yy4; - default: goto yy50; - } -yy2: - YYDEBUG(2, *YYCURSOR); - ++YYCURSOR; - if((yych = *YYCURSOR) <= 'E') { - if(yych <= ')') { - if(yych >= ')') goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy137; - goto yy1373; - } - } else { - if(yych <= 'd') { - if(yych <= 'Z') goto yy137; - if(yych >= 'a') goto yy142; - } else { - if(yych <= 'e') goto yy1382; - if(yych <= 'z') goto yy142; - } - } -yy3: - YYDEBUG(3, *YYCURSOR); -#line 1411 "ext/date/lib/parse_date.re" - { - int tz_not_found; - DEBUG_OUTPUT("tzcorrection | tz"); - TIMELIB_INIT; - TIMELIB_HAVE_TZ(); - s->time->z = timelib_get_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb); - if (tz_not_found) { - add_error(s, "The timezone could not be found in the database"); - } - TIMELIB_DEINIT; - return TIMELIB_TIMEZONE; - } -#line 930 "ext/date/lib/parse_date.c" -yy4: - YYDEBUG(4, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'E') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy137; - goto yy1373; - } - } else { - if(yych <= 'd') { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - goto yy137; - } else { - if(yych <= 'e') goto yy1373; - if(yych <= 'z') goto yy137; - goto yy3; - } - } -yy5: - YYDEBUG(5, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'O') { - if(yych <= 'D') { - if(yych == ')') goto yy136; - if(yych <= '@') goto yy3; - goto yy137; - } else { - if(yych <= 'H') { - if(yych <= 'E') goto yy1344; - goto yy137; - } else { - if(yych <= 'I') goto yy1345; - if(yych <= 'N') goto yy137; - goto yy1343; - } - } - } else { - if(yych <= 'h') { - if(yych <= '`') { - if(yych <= 'Z') goto yy137; - goto yy3; - } else { - if(yych == 'e') goto yy1360; - goto yy142; - } - } else { - if(yych <= 'n') { - if(yych <= 'i') goto yy1361; - goto yy142; - } else { - if(yych <= 'o') goto yy1359; - if(yych <= 'z') goto yy142; - goto yy3; - } - } - } -yy6: - YYDEBUG(6, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'O') { - if(yych <= 'D') { - if(yych == ')') goto yy136; - if(yych <= '@') goto yy3; - goto yy137; - } else { - if(yych <= 'H') { - if(yych <= 'E') goto yy1344; - goto yy137; - } else { - if(yych <= 'I') goto yy1345; - if(yych <= 'N') goto yy137; - goto yy1343; - } - } - } else { - if(yych <= 'h') { - if(yych <= '`') { - if(yych <= 'Z') goto yy137; - goto yy3; - } else { - if(yych == 'e') goto yy1344; - goto yy137; - } - } else { - if(yych <= 'n') { - if(yych <= 'i') goto yy1345; - goto yy137; - } else { - if(yych <= 'o') goto yy1343; - if(yych <= 'z') goto yy137; - goto yy3; - } - } - } -yy7: - YYDEBUG(7, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'O') { - if(yych <= 'A') { - if(yych == ')') goto yy136; - if(yych <= '@') goto yy3; - goto yy1313; - } else { - if(yych == 'I') goto yy1314; - if(yych <= 'N') goto yy137; - goto yy1315; - } - } else { - if(yych <= 'h') { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - if(yych <= 'a') goto yy1328; - goto yy142; - } else { - if(yych <= 'n') { - if(yych <= 'i') goto yy1329; - goto yy142; - } else { - if(yych <= 'o') goto yy1330; - if(yych <= 'z') goto yy142; - goto yy3; - } - } - } -yy8: - YYDEBUG(8, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'O') { - if(yych <= 'A') { - if(yych == ')') goto yy136; - if(yych <= '@') goto yy3; - goto yy1313; - } else { - if(yych == 'I') goto yy1314; - if(yych <= 'N') goto yy137; - goto yy1315; - } - } else { - if(yych <= 'h') { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - if(yych <= 'a') goto yy1313; - goto yy137; - } else { - if(yych <= 'n') { - if(yych <= 'i') goto yy1314; - goto yy137; - } else { - if(yych <= 'o') goto yy1315; - if(yych <= 'z') goto yy137; - goto yy3; - } - } - } -yy9: - YYDEBUG(9, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - YYDEBUG(-1, yych); - switch(yych) { - case ')': goto yy136; - case '0': - case '1': goto yy1245; - case '2': goto yy1246; - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy1247; - case 'A': - case 'B': - case 'C': - case 'D': - case 'F': - case 'G': - case 'I': - case 'J': - case 'K': - case 'L': - case 'M': - case 'N': - case 'P': - case 'Q': - case 'R': - case 'S': - case 'T': - case 'V': - case 'X': - case 'Y': - case 'Z': goto yy137; - case 'E': goto yy1240; - case 'H': goto yy1241; - case 'O': goto yy1242; - case 'U': goto yy1243; - case 'W': goto yy1244; - case 'a': - case 'b': - case 'c': - case 'd': - case 'f': - case 'g': - case 'i': - case 'j': - case 'k': - case 'l': - case 'm': - case 'n': - case 'p': - case 'q': - case 'r': - case 's': - case 't': - case 'v': - case 'x': - case 'y': - case 'z': goto yy142; - case 'e': goto yy1282; - case 'h': goto yy1283; - case 'o': goto yy1284; - case 'u': goto yy1285; - case 'w': goto yy1286; - default: goto yy3; - } -yy10: - YYDEBUG(10, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - YYDEBUG(-1, yych); - switch(yych) { - case ')': goto yy136; - case '0': - case '1': goto yy1245; - case '2': goto yy1246; - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy1247; - case 'A': - case 'B': - case 'C': - case 'D': - case 'F': - case 'G': - case 'I': - case 'J': - case 'K': - case 'L': - case 'M': - case 'N': - case 'P': - case 'Q': - case 'R': - case 'S': - case 'T': - case 'V': - case 'X': - case 'Y': - case 'Z': - case 'a': - case 'b': - case 'c': - case 'd': - case 'f': - case 'g': - case 'i': - case 'j': - case 'k': - case 'l': - case 'm': - case 'n': - case 'p': - case 'q': - case 'r': - case 's': - case 't': - case 'v': - case 'x': - case 'y': - case 'z': goto yy137; - case 'E': - case 'e': goto yy1240; - case 'H': - case 'h': goto yy1241; - case 'O': - case 'o': goto yy1242; - case 'U': - case 'u': goto yy1243; - case 'W': - case 'w': goto yy1244; - default: goto yy3; - } -yy11: - YYDEBUG(11, *YYCURSOR); - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '-') goto yy1236; - if(yych <= '/') goto yy12; - if(yych <= '9') goto yy1237; -yy12: - YYDEBUG(12, *YYCURSOR); -#line 1506 "ext/date/lib/parse_date.re" - { - add_error(s, "Unexpected character"); - goto std; - } -#line 1246 "ext/date/lib/parse_date.c" -yy13: - YYDEBUG(13, *YYCURSOR); - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - YYDEBUG(-1, yych); - switch(yych) { - case 0x09: goto yy1198; - case ' ': - case 'A': - case 'D': - case 'F': - case 'H': - case 'I': - case 'J': - case 'M': - case 'N': - case 'O': - case 'S': - case 'T': - case 'V': - case 'W': - case 'X': - case 'Y': - case 'a': - case 'd': - case 'f': - case 'h': - case 'j': - case 'm': - case 'o': - case 'w': - case 'y': goto yy1200; - case '-': goto yy660; - case '.': goto yy1202; - case '/': goto yy659; - case '0': goto yy1235; - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy1234; - case ':': goto yy1203; - case 'n': goto yy657; - case 'r': goto yy658; - case 's': goto yy651; - case 't': goto yy655; - default: goto yy12; - } -yy14: - YYDEBUG(14, *YYCURSOR); - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - YYDEBUG(-1, yych); - switch(yych) { - case 0x09: goto yy647; - case ' ': - case 'A': - case 'D': - case 'F': - case 'H': - case 'I': - case 'J': - case 'M': - case 'N': - case 'O': - case 'P': - case 'S': - case 'T': - case 'V': - case 'W': - case 'X': - case 'Y': - case 'a': - case 'd': - case 'f': - case 'h': - case 'j': - case 'm': - case 'o': - case 'p': - case 'w': - case 'y': goto yy649; - case '-': goto yy660; - case '.': goto yy661; - case '/': goto yy659; - case '0': - case '1': - case '2': goto yy1234; - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy1201; - case ':': goto yy670; - case 'n': goto yy657; - case 'r': goto yy658; - case 's': goto yy651; - case 't': goto yy655; - default: goto yy12; - } -yy15: - YYDEBUG(15, *YYCURSOR); - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - YYDEBUG(-1, yych); - switch(yych) { - case 0x09: goto yy647; - case ' ': - case 'A': - case 'D': - case 'F': - case 'H': - case 'I': - case 'J': - case 'M': - case 'N': - case 'O': - case 'P': - case 'S': - case 'T': - case 'V': - case 'W': - case 'X': - case 'Y': - case 'a': - case 'd': - case 'f': - case 'h': - case 'j': - case 'm': - case 'o': - case 'p': - case 'w': - case 'y': goto yy649; - case '-': goto yy660; - case '.': goto yy661; - case '/': goto yy659; - case '0': - case '1': - case '2': - case '3': goto yy1201; - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy1197; - case ':': goto yy670; - case 'n': goto yy657; - case 'r': goto yy658; - case 's': goto yy651; - case 't': goto yy655; - default: goto yy12; - } -yy16: - YYDEBUG(16, *YYCURSOR); - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - YYDEBUG(-1, yych); - switch(yych) { - case 0x09: goto yy647; - case ' ': - case 'A': - case 'D': - case 'F': - case 'H': - case 'I': - case 'J': - case 'M': - case 'N': - case 'O': - case 'P': - case 'S': - case 'T': - case 'V': - case 'W': - case 'X': - case 'Y': - case 'a': - case 'd': - case 'f': - case 'h': - case 'j': - case 'm': - case 'o': - case 'p': - case 'w': - case 'y': goto yy649; - case '-': goto yy660; - case '.': goto yy661; - case '/': goto yy659; - case '0': - case '1': goto yy1197; - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy656; - case ':': goto yy670; - case 'n': goto yy657; - case 'r': goto yy658; - case 's': goto yy651; - case 't': goto yy655; - default: goto yy12; - } -yy17: - YYDEBUG(17, *YYCURSOR); - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - YYDEBUG(-1, yych); - switch(yych) { - case 0x09: goto yy647; - case ' ': - case 'A': - case 'D': - case 'F': - case 'H': - case 'I': - case 'J': - case 'M': - case 'N': - case 'O': - case 'P': - case 'S': - case 'T': - case 'V': - case 'W': - case 'X': - case 'Y': - case 'a': - case 'd': - case 'f': - case 'h': - case 'j': - case 'm': - case 'o': - case 'p': - case 'w': - case 'y': goto yy649; - case '-': goto yy660; - case '.': goto yy661; - case '/': goto yy659; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy656; - case ':': goto yy670; - case 'n': goto yy657; - case 'r': goto yy658; - case 's': goto yy651; - case 't': goto yy655; - default: goto yy12; - } -yy18: - YYDEBUG(18, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy3; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy3; - } - } else { - if(yych <= ',') { - if(yych <= ')') goto yy136; - goto yy3; - } else { - if(yych == '/') goto yy3; - goto yy312; - } - } - } else { - if(yych <= 'V') { - if(yych <= 'H') { - if(yych <= '@') goto yy3; - goto yy137; - } else { - if(yych <= 'I') goto yy646; - if(yych <= 'U') goto yy137; - goto yy645; - } - } else { - if(yych <= 'Z') { - if(yych == 'X') goto yy645; - goto yy137; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy142; - goto yy3; - } - } - } -yy19: - YYDEBUG(19, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= ' ') { - if(yych == 0x09) goto yy312; - if(yych <= 0x1F) goto yy3; - goto yy312; - } else { - if(yych == ')') goto yy136; - if(yych <= ',') goto yy3; - goto yy312; - } - } else { - if(yych <= 'H') { - if(yych <= '/') goto yy3; - if(yych <= '9') goto yy312; - if(yych <= '@') goto yy3; - goto yy137; - } else { - if(yych <= 'Z') { - if(yych <= 'I') goto yy642; - goto yy137; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy142; - goto yy3; - } - } - } -yy20: - YYDEBUG(20, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= ' ') { - if(yych == 0x09) goto yy312; - if(yych <= 0x1F) goto yy3; - goto yy312; - } else { - if(yych == ')') goto yy136; - if(yych <= ',') goto yy3; - goto yy312; - } - } else { - if(yych <= 'H') { - if(yych <= '/') goto yy3; - if(yych <= '9') goto yy312; - if(yych <= '@') goto yy3; - goto yy137; - } else { - if(yych <= 'Z') { - if(yych <= 'I') goto yy640; - goto yy137; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy142; - goto yy3; - } - } - } -yy21: - YYDEBUG(21, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'A') goto yy623; - if(yych <= 'T') goto yy137; - goto yy622; - } - } else { - if(yych <= 'a') { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - goto yy632; - } else { - if(yych == 'u') goto yy631; - if(yych <= 'z') goto yy142; - goto yy3; - } - } -yy22: - YYDEBUG(22, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'A') goto yy623; - if(yych <= 'T') goto yy137; - goto yy622; - } - } else { - if(yych <= 'a') { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - goto yy623; - } else { - if(yych == 'u') goto yy622; - if(yych <= 'z') goto yy137; - goto yy3; - } - } -yy23: - YYDEBUG(23, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'R') { - if(yych <= 'E') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy137; - goto yy584; - } - } else { - if(yych <= 'N') { - if(yych == 'I') goto yy585; - goto yy137; - } else { - if(yych <= 'O') goto yy586; - if(yych <= 'Q') goto yy137; - goto yy587; - } - } - } else { - if(yych <= 'i') { - if(yych <= 'd') { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - goto yy142; - } else { - if(yych <= 'e') goto yy603; - if(yych <= 'h') goto yy142; - goto yy604; - } - } else { - if(yych <= 'q') { - if(yych == 'o') goto yy605; - goto yy142; - } else { - if(yych <= 'r') goto yy606; - if(yych <= 'z') goto yy142; - goto yy3; - } - } - } -yy24: - YYDEBUG(24, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'R') { - if(yych <= 'E') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy137; - goto yy584; - } - } else { - if(yych <= 'N') { - if(yych == 'I') goto yy585; - goto yy137; - } else { - if(yych <= 'O') goto yy586; - if(yych <= 'Q') goto yy137; - goto yy587; - } - } - } else { - if(yych <= 'i') { - if(yych <= 'd') { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - goto yy137; - } else { - if(yych <= 'e') goto yy584; - if(yych <= 'h') goto yy137; - goto yy585; - } - } else { - if(yych <= 'q') { - if(yych == 'o') goto yy586; - goto yy137; - } else { - if(yych <= 'r') goto yy587; - if(yych <= 'z') goto yy137; - goto yy3; - } - } - } -yy25: - YYDEBUG(25, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych <= 'F') { - if(yych == ')') goto yy136; - if(yych <= '@') goto yy3; - goto yy137; - } else { - if(yych <= 'O') { - if(yych <= 'G') goto yy563; - goto yy137; - } else { - if(yych <= 'P') goto yy562; - if(yych <= 'T') goto yy137; - goto yy561; - } - } - } else { - if(yych <= 'o') { - if(yych <= '`') { - if(yych <= 'Z') goto yy137; - goto yy3; - } else { - if(yych == 'g') goto yy575; - goto yy142; - } - } else { - if(yych <= 't') { - if(yych <= 'p') goto yy574; - goto yy142; - } else { - if(yych <= 'u') goto yy573; - if(yych <= 'z') goto yy142; - goto yy3; - } - } - } -yy26: - YYDEBUG(26, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych <= 'F') { - if(yych == ')') goto yy136; - if(yych <= '@') goto yy3; - goto yy137; - } else { - if(yych <= 'O') { - if(yych <= 'G') goto yy563; - goto yy137; - } else { - if(yych <= 'P') goto yy562; - if(yych <= 'T') goto yy137; - goto yy561; - } - } - } else { - if(yych <= 'o') { - if(yych <= '`') { - if(yych <= 'Z') goto yy137; - goto yy3; - } else { - if(yych == 'g') goto yy563; - goto yy137; - } - } else { - if(yych <= 't') { - if(yych <= 'p') goto yy562; - goto yy137; - } else { - if(yych <= 'u') goto yy561; - if(yych <= 'z') goto yy137; - goto yy3; - } - } - } -yy27: - YYDEBUG(27, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych <= 'D') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'A') goto yy504; - goto yy137; - } - } else { - if(yych <= 'H') { - if(yych <= 'E') goto yy503; - goto yy137; - } else { - if(yych <= 'I') goto yy505; - if(yych <= 'T') goto yy137; - goto yy506; - } - } - } else { - if(yych <= 'e') { - if(yych <= '`') { - if(yych <= 'Z') goto yy137; - goto yy3; - } else { - if(yych <= 'a') goto yy533; - if(yych <= 'd') goto yy142; - goto yy532; - } - } else { - if(yych <= 't') { - if(yych == 'i') goto yy534; - goto yy142; - } else { - if(yych <= 'u') goto yy535; - if(yych <= 'z') goto yy142; - goto yy3; - } - } - } -yy28: - YYDEBUG(28, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych <= 'D') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'A') goto yy504; - goto yy137; - } - } else { - if(yych <= 'H') { - if(yych <= 'E') goto yy503; - goto yy137; - } else { - if(yych <= 'I') goto yy505; - if(yych <= 'T') goto yy137; - goto yy506; - } - } - } else { - if(yych <= 'e') { - if(yych <= '`') { - if(yych <= 'Z') goto yy137; - goto yy3; - } else { - if(yych <= 'a') goto yy504; - if(yych <= 'd') goto yy137; - goto yy503; - } - } else { - if(yych <= 't') { - if(yych == 'i') goto yy505; - goto yy137; - } else { - if(yych <= 'u') goto yy506; - if(yych <= 'z') goto yy137; - goto yy3; - } - } - } -yy29: - YYDEBUG(29, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'C') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'B') goto yy137; - goto yy493; - } - } else { - if(yych <= 'b') { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - goto yy142; - } else { - if(yych <= 'c') goto yy498; - if(yych <= 'z') goto yy142; - goto yy3; - } - } -yy30: - YYDEBUG(30, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'C') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'B') goto yy137; - goto yy493; - } - } else { - if(yych <= 'b') { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - goto yy137; - } else { - if(yych <= 'c') goto yy493; - if(yych <= 'z') goto yy137; - goto yy3; - } - } -yy31: - YYDEBUG(31, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'E') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy137; - goto yy308; - } - } else { - if(yych <= 'd') { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - goto yy142; - } else { - if(yych <= 'e') goto yy486; - if(yych <= 'z') goto yy142; - goto yy3; - } - } -yy32: - YYDEBUG(32, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'E') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy137; - goto yy308; - } - } else { - if(yych <= 'd') { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - goto yy137; - } else { - if(yych <= 'e') goto yy308; - if(yych <= 'z') goto yy137; - goto yy3; - } - } -yy33: - YYDEBUG(33, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'E') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy137; - goto yy281; - } - } else { - if(yych <= 'd') { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - goto yy142; - } else { - if(yych <= 'e') goto yy295; - if(yych <= 'z') goto yy142; - goto yy3; - } - } -yy34: - YYDEBUG(34, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'E') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy137; - goto yy281; - } - } else { - if(yych <= 'd') { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - goto yy137; - } else { - if(yych <= 'e') goto yy281; - if(yych <= 'z') goto yy137; - goto yy3; - } - } -yy35: - YYDEBUG(35, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'L') { - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych == 'I') goto yy261; - if(yych <= 'K') goto yy137; - goto yy262; - } - } else { - if(yych <= 'i') { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - if(yych <= 'h') goto yy142; - goto yy271; - } else { - if(yych == 'l') goto yy272; - if(yych <= 'z') goto yy142; - goto yy3; - } - } -yy36: - YYDEBUG(36, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'L') { - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych == 'I') goto yy261; - if(yych <= 'K') goto yy137; - goto yy262; - } - } else { - if(yych <= 'i') { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - if(yych <= 'h') goto yy137; - goto yy261; - } else { - if(yych == 'l') goto yy262; - if(yych <= 'z') goto yy137; - goto yy3; - } - } -yy37: - YYDEBUG(37, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'A') { - if(yych == ')') goto yy136; - if(yych <= '@') goto yy3; - goto yy255; - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy137; - goto yy3; - } else { - if(yych <= 'a') goto yy258; - if(yych <= 'z') goto yy142; - goto yy3; - } - } -yy38: - YYDEBUG(38, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'A') { - if(yych == ')') goto yy136; - if(yych <= '@') goto yy3; - goto yy255; - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy137; - goto yy3; - } else { - if(yych <= 'a') goto yy255; - if(yych <= 'z') goto yy137; - goto yy3; - } - } -yy39: - YYDEBUG(39, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'R') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'Q') goto yy137; - goto yy161; - } - } else { - if(yych <= 'q') { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - goto yy142; - } else { - if(yych <= 'r') goto yy248; - if(yych <= 'z') goto yy142; - goto yy3; - } - } -yy40: - YYDEBUG(40, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'R') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'Q') goto yy137; - goto yy161; - } - } else { - if(yych <= 'q') { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - goto yy137; - } else { - if(yych <= 'r') goto yy161; - if(yych <= 'z') goto yy137; - goto yy3; - } - } -yy41: - YYDEBUG(41, *YYCURSOR); - yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if(yybm[0+yych] & 16) { - goto yy54; - } - if(yych <= '/') goto yy12; - if(yych <= '1') goto yy154; - if(yych <= '2') goto yy155; - if(yych <= '9') goto yy156; - goto yy12; -yy42: - YYDEBUG(42, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '@') goto yy12; - if(yych <= 'Z') goto yy153; - if(yych <= '`') goto yy12; - if(yych <= 'z') goto yy153; - goto yy12; -yy43: - YYDEBUG(43, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy142; - goto yy3; - } -yy44: - YYDEBUG(44, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy137; - goto yy3; - } -yy45: - YYDEBUG(45, *YYCURSOR); - yyaccept = 2; - yych = *(YYMARKER = ++YYCURSOR); - if(yybm[0+yych] & 16) { - goto yy54; - } - if(yych <= '/') goto yy46; - if(yych <= '9') goto yy51; -yy46: - YYDEBUG(46, *YYCURSOR); -#line 1495 "ext/date/lib/parse_date.re" - { - goto std; - } -#line 2245 "ext/date/lib/parse_date.c" -yy47: - YYDEBUG(47, *YYCURSOR); - yych = *++YYCURSOR; - goto yy46; -yy48: - YYDEBUG(48, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(49, *YYCURSOR); -#line 1500 "ext/date/lib/parse_date.re" - { - s->pos = cursor; s->line++; - goto std; - } -#line 2259 "ext/date/lib/parse_date.c" -yy50: - YYDEBUG(50, *YYCURSOR); - yych = *++YYCURSOR; - goto yy12; -yy51: - YYDEBUG(51, *YYCURSOR); - ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 11) YYFILL(11); - yych = *YYCURSOR; - YYDEBUG(52, *YYCURSOR); - if(yybm[0+yych] & 8) { - goto yy51; - } - if(yych <= 'W') { - if(yych <= 'F') { - if(yych <= ' ') { - if(yych == 0x09) goto yy56; - if(yych >= ' ') goto yy56; - } else { - if(yych == 'D') goto yy61; - if(yych >= 'F') goto yy63; - } - } else { - if(yych <= 'M') { - if(yych == 'H') goto yy60; - if(yych >= 'M') goto yy59; - } else { - if(yych <= 'S') { - if(yych >= 'S') goto yy58; - } else { - if(yych <= 'T') goto yy65; - if(yych >= 'W') goto yy62; - } - } - } - } else { - if(yych <= 'l') { - if(yych <= 'd') { - if(yych == 'Y') goto yy64; - if(yych >= 'd') goto yy61; - } else { - if(yych <= 'f') { - if(yych >= 'f') goto yy63; - } else { - if(yych == 'h') goto yy60; - } - } - } else { - if(yych <= 't') { - if(yych <= 'm') goto yy59; - if(yych <= 'r') goto yy53; - if(yych <= 's') goto yy58; - goto yy65; - } else { - if(yych <= 'w') { - if(yych >= 'w') goto yy62; - } else { - if(yych == 'y') goto yy64; - } - } - } - } -yy53: - YYDEBUG(53, *YYCURSOR); - YYCURSOR = YYMARKER; - if(yyaccept <= 14) { - if(yyaccept <= 7) { - if(yyaccept <= 3) { - if(yyaccept <= 1) { - if(yyaccept <= 0) { - goto yy3; - } else { - goto yy12; - } - } else { - if(yyaccept <= 2) { - goto yy46; - } else { - goto yy69; - } - } - } else { - if(yyaccept <= 5) { - if(yyaccept <= 4) { - goto yy181; - } else { - goto yy283; - } - } else { - if(yyaccept <= 6) { - goto yy310; - } else { - goto yy315; - } - } - } - } else { - if(yyaccept <= 11) { - if(yyaccept <= 9) { - if(yyaccept <= 8) { - goto yy339; - } else { - goto yy409; - } - } else { - if(yyaccept <= 10) { - goto yy565; - } else { - goto yy663; - } - } - } else { - if(yyaccept <= 13) { - if(yyaccept <= 12) { - goto yy678; - } else { - goto yy825; - } - } else { - goto yy835; - } - } - } - } else { - if(yyaccept <= 22) { - if(yyaccept <= 18) { - if(yyaccept <= 16) { - if(yyaccept <= 15) { - goto yy936; - } else { - goto yy964; - } - } else { - if(yyaccept <= 17) { - goto yy971; - } else { - goto yy998; - } - } - } else { - if(yyaccept <= 20) { - if(yyaccept <= 19) { - goto yy943; - } else { - goto yy1100; - } - } else { - if(yyaccept <= 21) { - goto yy1124; - } else { - goto yy992; - } - } - } - } else { - if(yyaccept <= 26) { - if(yyaccept <= 24) { - if(yyaccept <= 23) { - goto yy1206; - } else { - goto yy1214; - } - } else { - if(yyaccept <= 25) { - goto yy1269; - } else { - goto yy1272; - } - } - } else { - if(yyaccept <= 28) { - if(yyaccept <= 27) { - goto yy1350; - } else { - goto yy1358; - } - } else { - goto yy1381; - } - } - } - } -yy54: - YYDEBUG(54, *YYCURSOR); - ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(55, *YYCURSOR); - if(yybm[0+yych] & 16) { - goto yy54; - } - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy51; - goto yy53; -yy56: - YYDEBUG(56, *YYCURSOR); - ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 11) YYFILL(11); - yych = *YYCURSOR; -yy57: - YYDEBUG(57, *YYCURSOR); - if(yych <= 'W') { - if(yych <= 'F') { - if(yych <= ' ') { - if(yych == 0x09) goto yy56; - if(yych <= 0x1F) goto yy53; - goto yy56; - } else { - if(yych == 'D') goto yy61; - if(yych <= 'E') goto yy53; - goto yy63; - } - } else { - if(yych <= 'M') { - if(yych == 'H') goto yy60; - if(yych <= 'L') goto yy53; - goto yy59; - } else { - if(yych <= 'S') { - if(yych <= 'R') goto yy53; - } else { - if(yych <= 'T') goto yy65; - if(yych <= 'V') goto yy53; - goto yy62; - } - } - } - } else { - if(yych <= 'l') { - if(yych <= 'd') { - if(yych == 'Y') goto yy64; - if(yych <= 'c') goto yy53; - goto yy61; - } else { - if(yych <= 'f') { - if(yych <= 'e') goto yy53; - goto yy63; - } else { - if(yych == 'h') goto yy60; - goto yy53; - } - } - } else { - if(yych <= 't') { - if(yych <= 'm') goto yy59; - if(yych <= 'r') goto yy53; - if(yych >= 't') goto yy65; - } else { - if(yych <= 'w') { - if(yych <= 'v') goto yy53; - goto yy62; - } else { - if(yych == 'y') goto yy64; - goto yy53; - } - } - } - } -yy58: - YYDEBUG(58, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych <= 'D') { - if(yych == 'A') goto yy123; - goto yy53; - } else { - if(yych <= 'E') goto yy124; - if(yych <= 'T') goto yy53; - goto yy122; - } - } else { - if(yych <= 'd') { - if(yych == 'a') goto yy123; - goto yy53; - } else { - if(yych <= 'e') goto yy124; - if(yych == 'u') goto yy122; - goto yy53; - } - } -yy59: - YYDEBUG(59, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'O') { - if(yych == 'I') goto yy114; - if(yych <= 'N') goto yy53; - goto yy113; - } else { - if(yych <= 'i') { - if(yych <= 'h') goto yy53; - goto yy114; - } else { - if(yych == 'o') goto yy113; - goto yy53; - } - } -yy60: - YYDEBUG(60, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'O') goto yy111; - if(yych == 'o') goto yy111; - goto yy53; -yy61: - YYDEBUG(61, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy110; - if(yych == 'a') goto yy110; - goto yy53; -yy62: - YYDEBUG(62, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy98; - if(yych == 'e') goto yy98; - goto yy53; -yy63: - YYDEBUG(63, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'R') { - if(yych == 'O') goto yy83; - if(yych <= 'Q') goto yy53; - goto yy82; - } else { - if(yych <= 'o') { - if(yych <= 'n') goto yy53; - goto yy83; - } else { - if(yych == 'r') goto yy82; - goto yy53; - } - } -yy64: - YYDEBUG(64, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy79; - if(yych == 'e') goto yy79; - goto yy53; -yy65: - YYDEBUG(65, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych == 'H') goto yy66; - if(yych <= 'T') goto yy53; - goto yy67; - } else { - if(yych <= 'h') { - if(yych <= 'g') goto yy53; - } else { - if(yych == 'u') goto yy67; - goto yy53; - } - } -yy66: - YYDEBUG(66, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'U') goto yy74; - if(yych == 'u') goto yy74; - goto yy53; -yy67: - YYDEBUG(67, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy68; - if(yych != 'e') goto yy53; -yy68: - YYDEBUG(68, *YYCURSOR); - yyaccept = 3; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'S') goto yy70; - if(yych == 's') goto yy70; -yy69: - YYDEBUG(69, *YYCURSOR); -#line 1479 "ext/date/lib/parse_date.re" - { - timelib_ull i; - DEBUG_OUTPUT("relative"); - TIMELIB_INIT; - TIMELIB_HAVE_RELATIVE(); - - while(*ptr) { - i = timelib_get_unsigned_nr((char **) &ptr, 24); - timelib_eat_spaces((char **) &ptr); - timelib_set_relative((char **) &ptr, i, 0, s); - } - TIMELIB_DEINIT; - return TIMELIB_RELATIVE; - } -#line 2645 "ext/date/lib/parse_date.c" -yy70: - YYDEBUG(70, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'D') goto yy71; - if(yych != 'd') goto yy53; -yy71: - YYDEBUG(71, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy72; - if(yych != 'a') goto yy53; -yy72: - YYDEBUG(72, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy73; - if(yych != 'y') goto yy53; -yy73: - YYDEBUG(73, *YYCURSOR); - yych = *++YYCURSOR; - goto yy69; -yy74: - YYDEBUG(74, *YYCURSOR); - yyaccept = 3; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'R') goto yy75; - if(yych != 'r') goto yy69; -yy75: - YYDEBUG(75, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'S') goto yy76; - if(yych != 's') goto yy53; -yy76: - YYDEBUG(76, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'D') goto yy77; - if(yych != 'd') goto yy53; -yy77: - YYDEBUG(77, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy78; - if(yych != 'a') goto yy53; -yy78: - YYDEBUG(78, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy73; - if(yych == 'y') goto yy73; - goto yy53; -yy79: - YYDEBUG(79, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy80; - if(yych != 'a') goto yy53; -yy80: - YYDEBUG(80, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy81; - if(yych != 'r') goto yy53; -yy81: - YYDEBUG(81, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'S') goto yy73; - if(yych == 's') goto yy73; - goto yy69; -yy82: - YYDEBUG(82, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'I') goto yy95; - if(yych == 'i') goto yy95; - goto yy53; -yy83: - YYDEBUG(83, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy84; - if(yych != 'r') goto yy53; -yy84: - YYDEBUG(84, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy85; - if(yych != 't') goto yy53; -yy85: - YYDEBUG(85, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'N') { - if(yych == 'H') goto yy87; - if(yych <= 'M') goto yy53; - } else { - if(yych <= 'h') { - if(yych <= 'g') goto yy53; - goto yy87; - } else { - if(yych != 'n') goto yy53; - } - } - YYDEBUG(86, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'I') goto yy92; - if(yych == 'i') goto yy92; - goto yy53; -yy87: - YYDEBUG(87, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'N') goto yy88; - if(yych != 'n') goto yy53; -yy88: - YYDEBUG(88, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'I') goto yy89; - if(yych != 'i') goto yy53; -yy89: - YYDEBUG(89, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'G') goto yy90; - if(yych != 'g') goto yy53; -yy90: - YYDEBUG(90, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'H') goto yy91; - if(yych != 'h') goto yy53; -yy91: - YYDEBUG(91, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy81; - if(yych == 't') goto yy81; - goto yy53; -yy92: - YYDEBUG(92, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'G') goto yy93; - if(yych != 'g') goto yy53; -yy93: - YYDEBUG(93, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'H') goto yy94; - if(yych != 'h') goto yy53; -yy94: - YYDEBUG(94, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy81; - if(yych == 't') goto yy81; - goto yy53; -yy95: - YYDEBUG(95, *YYCURSOR); - yyaccept = 3; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'D') goto yy96; - if(yych != 'd') goto yy69; -yy96: - YYDEBUG(96, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy97; - if(yych != 'a') goto yy53; -yy97: - YYDEBUG(97, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy73; - if(yych == 'y') goto yy73; - goto yy53; -yy98: - YYDEBUG(98, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'E') { - if(yych <= 'C') goto yy53; - if(yych <= 'D') goto yy100; - } else { - if(yych <= 'c') goto yy53; - if(yych <= 'd') goto yy100; - if(yych >= 'f') goto yy53; - } - YYDEBUG(99, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'K') goto yy106; - if(yych == 'k') goto yy106; - goto yy53; -yy100: - YYDEBUG(100, *YYCURSOR); - yyaccept = 3; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'N') goto yy101; - if(yych != 'n') goto yy69; -yy101: - YYDEBUG(101, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy102; - if(yych != 'e') goto yy53; -yy102: - YYDEBUG(102, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'S') goto yy103; - if(yych != 's') goto yy53; -yy103: - YYDEBUG(103, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'D') goto yy104; - if(yych != 'd') goto yy53; -yy104: - YYDEBUG(104, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy105; - if(yych != 'a') goto yy53; -yy105: - YYDEBUG(105, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy73; - if(yych == 'y') goto yy73; - goto yy53; -yy106: - YYDEBUG(106, *YYCURSOR); - yyaccept = 3; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'S') { - if(yych == 'D') goto yy107; - if(yych <= 'R') goto yy69; - goto yy73; - } else { - if(yych <= 'd') { - if(yych <= 'c') goto yy69; - } else { - if(yych == 's') goto yy73; - goto yy69; - } - } -yy107: - YYDEBUG(107, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy108; - if(yych != 'a') goto yy53; -yy108: - YYDEBUG(108, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy109; - if(yych != 'y') goto yy53; -yy109: - YYDEBUG(109, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'S') goto yy73; - if(yych == 's') goto yy73; - goto yy69; -yy110: - YYDEBUG(110, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy81; - if(yych == 'y') goto yy81; - goto yy53; -yy111: - YYDEBUG(111, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'U') goto yy112; - if(yych != 'u') goto yy53; -yy112: - YYDEBUG(112, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy81; - if(yych == 'r') goto yy81; - goto yy53; -yy113: - YYDEBUG(113, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'N') goto yy118; - if(yych == 'n') goto yy118; - goto yy53; -yy114: - YYDEBUG(114, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'N') goto yy115; - if(yych != 'n') goto yy53; -yy115: - YYDEBUG(115, *YYCURSOR); - yyaccept = 3; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'U') { - if(yych == 'S') goto yy73; - if(yych <= 'T') goto yy69; - } else { - if(yych <= 's') { - if(yych <= 'r') goto yy69; - goto yy73; - } else { - if(yych != 'u') goto yy69; - } - } - YYDEBUG(116, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy117; - if(yych != 't') goto yy53; -yy117: - YYDEBUG(117, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy81; - if(yych == 'e') goto yy81; - goto yy53; -yy118: - YYDEBUG(118, *YYCURSOR); - yyaccept = 3; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych == 'D') goto yy119; - if(yych <= 'S') goto yy69; - goto yy120; - } else { - if(yych <= 'd') { - if(yych <= 'c') goto yy69; - } else { - if(yych == 't') goto yy120; - goto yy69; - } - } -yy119: - YYDEBUG(119, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy121; - if(yych == 'a') goto yy121; - goto yy53; -yy120: - YYDEBUG(120, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'H') goto yy81; - if(yych == 'h') goto yy81; - goto yy53; -yy121: - YYDEBUG(121, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy73; - if(yych == 'y') goto yy73; - goto yy53; -yy122: - YYDEBUG(122, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'N') goto yy133; - if(yych == 'n') goto yy133; - goto yy53; -yy123: - YYDEBUG(123, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy128; - if(yych == 't') goto yy128; - goto yy53; -yy124: - YYDEBUG(124, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'C') goto yy125; - if(yych != 'c') goto yy53; -yy125: - YYDEBUG(125, *YYCURSOR); - yyaccept = 3; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'S') { - if(yych == 'O') goto yy126; - if(yych <= 'R') goto yy69; - goto yy73; - } else { - if(yych <= 'o') { - if(yych <= 'n') goto yy69; - } else { - if(yych == 's') goto yy73; - goto yy69; - } - } -yy126: - YYDEBUG(126, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'N') goto yy127; - if(yych != 'n') goto yy53; -yy127: - YYDEBUG(127, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'D') goto yy81; - if(yych == 'd') goto yy81; - goto yy53; -yy128: - YYDEBUG(128, *YYCURSOR); - yyaccept = 3; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'U') goto yy129; - if(yych != 'u') goto yy69; -yy129: - YYDEBUG(129, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy130; - if(yych != 'r') goto yy53; -yy130: - YYDEBUG(130, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'D') goto yy131; - if(yych != 'd') goto yy53; -yy131: - YYDEBUG(131, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy132; - if(yych != 'a') goto yy53; -yy132: - YYDEBUG(132, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy73; - if(yych == 'y') goto yy73; - goto yy53; -yy133: - YYDEBUG(133, *YYCURSOR); - yyaccept = 3; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'D') goto yy134; - if(yych != 'd') goto yy69; -yy134: - YYDEBUG(134, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy135; - if(yych != 'a') goto yy53; -yy135: - YYDEBUG(135, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy73; - if(yych == 'y') goto yy73; - goto yy53; -yy136: - YYDEBUG(136, *YYCURSOR); - yych = *++YYCURSOR; - goto yy3; -yy137: - YYDEBUG(137, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - if(yych >= '{') goto yy3; - } -yy138: - YYDEBUG(138, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - if(yych >= '{') goto yy3; - } -yy139: - YYDEBUG(139, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - if(yych >= '{') goto yy3; - } -yy140: - YYDEBUG(140, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - if(yych >= '{') goto yy3; - } -yy141: - YYDEBUG(141, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == ')') goto yy136; - goto yy3; -yy142: - YYDEBUG(142, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '@') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych == '/') goto yy144; - goto yy3; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy138; - if(yych <= '^') goto yy3; - goto yy144; - } else { - if(yych <= '`') goto yy3; - if(yych >= '{') goto yy3; - } - } -yy143: - YYDEBUG(143, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '@') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych != '/') goto yy3; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy139; - if(yych <= '^') goto yy3; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy144: - YYDEBUG(144, *YYCURSOR); - ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - if(yych <= '@') goto yy53; - if(yych >= '[') goto yy53; - YYDEBUG(145, *YYCURSOR); - ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - if(yybm[0+yych] & 32) { - goto yy146; - } - goto yy53; -yy146: - YYDEBUG(146, *YYCURSOR); - yyaccept = 0; - YYMARKER = ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(147, *YYCURSOR); - if(yybm[0+yych] & 32) { - goto yy146; - } - if(yych == '/') goto yy144; - if(yych == '_') goto yy144; - goto yy3; -yy148: - YYDEBUG(148, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '@') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych == '/') goto yy144; - goto yy3; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy140; - if(yych <= '^') goto yy3; - goto yy144; - } else { - if(yych <= '`') goto yy3; - if(yych >= '{') goto yy3; - } - } -yy149: - YYDEBUG(149, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '@') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych == '/') goto yy144; - goto yy3; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy141; - if(yych <= '^') goto yy3; - goto yy144; - } else { - if(yych <= '`') goto yy3; - if(yych >= '{') goto yy3; - } - } -yy150: - YYDEBUG(150, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == ')') goto yy136; - if(yych <= '.') goto yy3; - goto yy144; - } else { - if(yych <= '_') { - if(yych <= '^') goto yy3; - goto yy144; - } else { - if(yych <= '`') goto yy3; - if(yych >= '{') goto yy3; - } - } -yy151: - YYDEBUG(151, *YYCURSOR); - ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; -yy152: - YYDEBUG(152, *YYCURSOR); - if(yych <= '^') { - if(yych == '/') goto yy144; - goto yy53; - } else { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy53; - if(yych <= 'z') goto yy151; - goto yy53; - } -yy153: - YYDEBUG(153, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'Z') goto yy137; - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy137; - goto yy3; - } -yy154: - YYDEBUG(154, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'V') { - if(yych <= 'D') { - if(yych <= ' ') { - if(yych == 0x09) goto yy57; - if(yych <= 0x1F) goto yy3; - goto yy57; - } else { - if(yych <= '9') { - if(yych <= '/') goto yy3; - goto yy156; - } else { - if(yych <= ':') goto yy157; - if(yych <= 'C') goto yy3; - goto yy57; - } - } - } else { - if(yych <= 'H') { - if(yych == 'F') goto yy57; - if(yych <= 'G') goto yy3; - goto yy57; - } else { - if(yych <= 'M') { - if(yych <= 'L') goto yy3; - goto yy57; - } else { - if(yych <= 'R') goto yy3; - if(yych <= 'T') goto yy57; - goto yy3; - } - } - } - } else { - if(yych <= 'h') { - if(yych <= 'c') { - if(yych == 'X') goto yy3; - if(yych <= 'Y') goto yy57; - goto yy3; - } else { - if(yych <= 'e') { - if(yych <= 'd') goto yy57; - goto yy3; - } else { - if(yych == 'g') goto yy3; - goto yy57; - } - } - } else { - if(yych <= 't') { - if(yych == 'm') goto yy57; - if(yych <= 'r') goto yy3; - goto yy57; - } else { - if(yych <= 'w') { - if(yych <= 'v') goto yy3; - goto yy57; - } else { - if(yych == 'y') goto yy57; - goto yy3; - } - } - } - } -yy155: - YYDEBUG(155, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= ':') { - if(yych <= ' ') { - if(yych == 0x09) goto yy57; - if(yych <= 0x1F) goto yy3; - goto yy57; - } else { - if(yych <= '3') { - if(yych <= '/') goto yy3; - } else { - if(yych <= '5') goto yy158; - if(yych <= '9') goto yy159; - goto yy157; - } - } - } else { - if(yych <= 'G') { - if(yych <= 'D') { - if(yych <= 'C') goto yy3; - goto yy57; - } else { - if(yych == 'F') goto yy57; - goto yy3; - } - } else { - if(yych <= 'L') { - if(yych <= 'H') goto yy57; - goto yy3; - } else { - if(yych <= 'M') goto yy57; - if(yych <= 'R') goto yy3; - goto yy57; - } - } - } - } else { - if(yych <= 'g') { - if(yych <= 'Y') { - if(yych == 'W') goto yy57; - if(yych <= 'X') goto yy3; - goto yy57; - } else { - if(yych <= 'd') { - if(yych <= 'c') goto yy3; - goto yy57; - } else { - if(yych == 'f') goto yy57; - goto yy3; - } - } - } else { - if(yych <= 't') { - if(yych <= 'l') { - if(yych <= 'h') goto yy57; - goto yy3; - } else { - if(yych <= 'm') goto yy57; - if(yych <= 'r') goto yy3; - goto yy57; - } - } else { - if(yych <= 'w') { - if(yych <= 'v') goto yy3; - goto yy57; - } else { - if(yych == 'y') goto yy57; - goto yy3; - } - } - } - } -yy156: - YYDEBUG(156, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= 'C') { - if(yych <= ' ') { - if(yych == 0x09) goto yy57; - if(yych <= 0x1F) goto yy3; - goto yy57; - } else { - if(yych <= '5') { - if(yych <= '/') goto yy3; - goto yy158; - } else { - if(yych <= '9') goto yy159; - if(yych >= ';') goto yy3; - } - } - } else { - if(yych <= 'G') { - if(yych == 'E') goto yy3; - if(yych <= 'F') goto yy57; - goto yy3; - } else { - if(yych <= 'L') { - if(yych <= 'H') goto yy57; - goto yy3; - } else { - if(yych <= 'M') goto yy57; - if(yych <= 'R') goto yy3; - goto yy57; - } - } - } - } else { - if(yych <= 'g') { - if(yych <= 'Y') { - if(yych == 'W') goto yy57; - if(yych <= 'X') goto yy3; - goto yy57; - } else { - if(yych <= 'd') { - if(yych <= 'c') goto yy3; - goto yy57; - } else { - if(yych == 'f') goto yy57; - goto yy3; - } - } - } else { - if(yych <= 't') { - if(yych <= 'l') { - if(yych <= 'h') goto yy57; - goto yy3; - } else { - if(yych <= 'm') goto yy57; - if(yych <= 'r') goto yy3; - goto yy57; - } - } else { - if(yych <= 'w') { - if(yych <= 'v') goto yy3; - goto yy57; - } else { - if(yych == 'y') goto yy57; - goto yy3; - } - } - } - } -yy157: - YYDEBUG(157, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy3; - if(yych <= '5') goto yy160; - if(yych <= '9') goto yy136; - goto yy3; -yy158: - YYDEBUG(158, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'V') { - if(yych <= 'D') { - if(yych <= ' ') { - if(yych == 0x09) goto yy57; - if(yych <= 0x1F) goto yy3; - goto yy57; - } else { - if(yych <= '/') goto yy3; - if(yych <= '9') goto yy159; - if(yych <= 'C') goto yy3; - goto yy57; - } - } else { - if(yych <= 'H') { - if(yych == 'F') goto yy57; - if(yych <= 'G') goto yy3; - goto yy57; - } else { - if(yych <= 'M') { - if(yych <= 'L') goto yy3; - goto yy57; - } else { - if(yych <= 'R') goto yy3; - if(yych <= 'T') goto yy57; - goto yy3; - } - } - } - } else { - if(yych <= 'h') { - if(yych <= 'c') { - if(yych == 'X') goto yy3; - if(yych <= 'Y') goto yy57; - goto yy3; - } else { - if(yych <= 'e') { - if(yych <= 'd') goto yy57; - goto yy3; - } else { - if(yych == 'g') goto yy3; - goto yy57; - } - } - } else { - if(yych <= 't') { - if(yych == 'm') goto yy57; - if(yych <= 'r') goto yy3; - goto yy57; - } else { - if(yych <= 'w') { - if(yych <= 'v') goto yy3; - goto yy57; - } else { - if(yych == 'y') goto yy57; - goto yy3; - } - } - } - } -yy159: - YYDEBUG(159, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yybm[0+yych] & 8) { - goto yy51; - } - if(yych <= 'W') { - if(yych <= 'F') { - if(yych <= ' ') { - if(yych == 0x09) goto yy57; - if(yych <= 0x1F) goto yy3; - goto yy57; - } else { - if(yych == 'D') goto yy57; - if(yych <= 'E') goto yy3; - goto yy57; - } - } else { - if(yych <= 'M') { - if(yych == 'H') goto yy57; - if(yych <= 'L') goto yy3; - goto yy57; - } else { - if(yych <= 'R') goto yy3; - if(yych <= 'T') goto yy57; - if(yych <= 'V') goto yy3; - goto yy57; - } - } - } else { - if(yych <= 'h') { - if(yych <= 'd') { - if(yych == 'Y') goto yy57; - if(yych <= 'c') goto yy3; - goto yy57; - } else { - if(yych == 'f') goto yy57; - if(yych <= 'g') goto yy3; - goto yy57; - } - } else { - if(yych <= 't') { - if(yych == 'm') goto yy57; - if(yych <= 'r') goto yy3; - goto yy57; - } else { - if(yych <= 'w') { - if(yych <= 'v') goto yy3; - goto yy57; - } else { - if(yych == 'y') goto yy57; - goto yy3; - } - } - } - } -yy160: - YYDEBUG(160, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy3; - if(yych <= '9') goto yy136; - goto yy3; -yy161: - YYDEBUG(161, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'E') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy138; - } - } else { - if(yych <= 'd') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'e') goto yy162; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy162: - YYDEBUG(162, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'V') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'U') goto yy139; - } - } else { - if(yych <= 'u') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 'v') goto yy163; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy163: - YYDEBUG(163, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'I') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'H') goto yy140; - } - } else { - if(yych <= 'h') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'i') goto yy164; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy164: - YYDEBUG(164, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'O') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'N') goto yy141; - } - } else { - if(yych <= 'n') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 'o') goto yy165; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy165: - YYDEBUG(165, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'U') goto yy166; - if(yych != 'u') goto yy3; - } -yy166: - YYDEBUG(166, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'S') goto yy167; - if(yych != 's') goto yy53; -yy167: - YYDEBUG(167, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 0x09) goto yy168; - if(yych != ' ') goto yy53; -yy168: - YYDEBUG(168, *YYCURSOR); - ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 11) YYFILL(11); - yych = *YYCURSOR; - YYDEBUG(169, *YYCURSOR); - if(yych <= 'W') { - if(yych <= 'F') { - if(yych <= ' ') { - if(yych == 0x09) goto yy168; - if(yych <= 0x1F) goto yy53; - goto yy168; - } else { - if(yych == 'D') goto yy173; - if(yych <= 'E') goto yy53; - goto yy175; - } - } else { - if(yych <= 'M') { - if(yych == 'H') goto yy172; - if(yych <= 'L') goto yy53; - goto yy171; - } else { - if(yych <= 'S') { - if(yych <= 'R') goto yy53; - } else { - if(yych <= 'T') goto yy177; - if(yych <= 'V') goto yy53; - goto yy174; - } - } - } - } else { - if(yych <= 'l') { - if(yych <= 'd') { - if(yych == 'Y') goto yy176; - if(yych <= 'c') goto yy53; - goto yy173; - } else { - if(yych <= 'f') { - if(yych <= 'e') goto yy53; - goto yy175; - } else { - if(yych == 'h') goto yy172; - goto yy53; - } - } - } else { - if(yych <= 't') { - if(yych <= 'm') goto yy171; - if(yych <= 'r') goto yy53; - if(yych >= 't') goto yy177; - } else { - if(yych <= 'w') { - if(yych <= 'v') goto yy53; - goto yy174; - } else { - if(yych == 'y') goto yy176; - goto yy53; - } - } - } - } - YYDEBUG(170, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych <= 'D') { - if(yych == 'A') goto yy235; - goto yy53; - } else { - if(yych <= 'E') goto yy236; - if(yych <= 'T') goto yy53; - goto yy234; - } - } else { - if(yych <= 'd') { - if(yych == 'a') goto yy235; - goto yy53; - } else { - if(yych <= 'e') goto yy236; - if(yych == 'u') goto yy234; - goto yy53; - } - } -yy171: - YYDEBUG(171, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'O') { - if(yych == 'I') goto yy226; - if(yych <= 'N') goto yy53; - goto yy225; - } else { - if(yych <= 'i') { - if(yych <= 'h') goto yy53; - goto yy226; - } else { - if(yych == 'o') goto yy225; - goto yy53; - } - } -yy172: - YYDEBUG(172, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'O') goto yy223; - if(yych == 'o') goto yy223; - goto yy53; -yy173: - YYDEBUG(173, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy222; - if(yych == 'a') goto yy222; - goto yy53; -yy174: - YYDEBUG(174, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy210; - if(yych == 'e') goto yy210; - goto yy53; -yy175: - YYDEBUG(175, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'R') { - if(yych == 'O') goto yy195; - if(yych <= 'Q') goto yy53; - goto yy194; - } else { - if(yych <= 'o') { - if(yych <= 'n') goto yy53; - goto yy195; - } else { - if(yych == 'r') goto yy194; - goto yy53; - } - } -yy176: - YYDEBUG(176, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy191; - if(yych == 'e') goto yy191; - goto yy53; -yy177: - YYDEBUG(177, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych == 'H') goto yy178; - if(yych <= 'T') goto yy53; - goto yy179; - } else { - if(yych <= 'h') { - if(yych <= 'g') goto yy53; - } else { - if(yych == 'u') goto yy179; - goto yy53; - } - } -yy178: - YYDEBUG(178, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'U') goto yy186; - if(yych == 'u') goto yy186; - goto yy53; -yy179: - YYDEBUG(179, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy180; - if(yych != 'e') goto yy53; -yy180: - YYDEBUG(180, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'S') goto yy182; - if(yych == 's') goto yy182; -yy181: - YYDEBUG(181, *YYCURSOR); -#line 1384 "ext/date/lib/parse_date.re" - { - timelib_sll i; - int behavior = 0; - DEBUG_OUTPUT("relativetext"); - TIMELIB_INIT; - TIMELIB_HAVE_RELATIVE(); - - while(*ptr) { - i = timelib_get_relative_text((char **) &ptr, &behavior); - timelib_eat_spaces((char **) &ptr); - timelib_set_relative((char **) &ptr, i, behavior, s); - } - TIMELIB_DEINIT; - return TIMELIB_RELATIVE; - } -#line 3915 "ext/date/lib/parse_date.c" -yy182: - YYDEBUG(182, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'D') goto yy183; - if(yych != 'd') goto yy53; -yy183: - YYDEBUG(183, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy184; - if(yych != 'a') goto yy53; -yy184: - YYDEBUG(184, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy185; - if(yych != 'y') goto yy53; -yy185: - YYDEBUG(185, *YYCURSOR); - yych = *++YYCURSOR; - goto yy181; -yy186: - YYDEBUG(186, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'R') goto yy187; - if(yych != 'r') goto yy181; -yy187: - YYDEBUG(187, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'S') goto yy188; - if(yych != 's') goto yy53; -yy188: - YYDEBUG(188, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'D') goto yy189; - if(yych != 'd') goto yy53; -yy189: - YYDEBUG(189, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy190; - if(yych != 'a') goto yy53; -yy190: - YYDEBUG(190, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy185; - if(yych == 'y') goto yy185; - goto yy53; -yy191: - YYDEBUG(191, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy192; - if(yych != 'a') goto yy53; -yy192: - YYDEBUG(192, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy193; - if(yych != 'r') goto yy53; -yy193: - YYDEBUG(193, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'S') goto yy185; - if(yych == 's') goto yy185; - goto yy181; -yy194: - YYDEBUG(194, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'I') goto yy207; - if(yych == 'i') goto yy207; - goto yy53; -yy195: - YYDEBUG(195, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy196; - if(yych != 'r') goto yy53; -yy196: - YYDEBUG(196, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy197; - if(yych != 't') goto yy53; -yy197: - YYDEBUG(197, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'N') { - if(yych == 'H') goto yy199; - if(yych <= 'M') goto yy53; - } else { - if(yych <= 'h') { - if(yych <= 'g') goto yy53; - goto yy199; - } else { - if(yych != 'n') goto yy53; - } - } - YYDEBUG(198, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'I') goto yy204; - if(yych == 'i') goto yy204; - goto yy53; -yy199: - YYDEBUG(199, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'N') goto yy200; - if(yych != 'n') goto yy53; -yy200: - YYDEBUG(200, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'I') goto yy201; - if(yych != 'i') goto yy53; -yy201: - YYDEBUG(201, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'G') goto yy202; - if(yych != 'g') goto yy53; -yy202: - YYDEBUG(202, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'H') goto yy203; - if(yych != 'h') goto yy53; -yy203: - YYDEBUG(203, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy193; - if(yych == 't') goto yy193; - goto yy53; -yy204: - YYDEBUG(204, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'G') goto yy205; - if(yych != 'g') goto yy53; -yy205: - YYDEBUG(205, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'H') goto yy206; - if(yych != 'h') goto yy53; -yy206: - YYDEBUG(206, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy193; - if(yych == 't') goto yy193; - goto yy53; -yy207: - YYDEBUG(207, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'D') goto yy208; - if(yych != 'd') goto yy181; -yy208: - YYDEBUG(208, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy209; - if(yych != 'a') goto yy53; -yy209: - YYDEBUG(209, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy185; - if(yych == 'y') goto yy185; - goto yy53; -yy210: - YYDEBUG(210, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'E') { - if(yych <= 'C') goto yy53; - if(yych <= 'D') goto yy212; - } else { - if(yych <= 'c') goto yy53; - if(yych <= 'd') goto yy212; - if(yych >= 'f') goto yy53; - } - YYDEBUG(211, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'K') goto yy218; - if(yych == 'k') goto yy218; - goto yy53; -yy212: - YYDEBUG(212, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'N') goto yy213; - if(yych != 'n') goto yy181; -yy213: - YYDEBUG(213, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy214; - if(yych != 'e') goto yy53; -yy214: - YYDEBUG(214, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'S') goto yy215; - if(yych != 's') goto yy53; -yy215: - YYDEBUG(215, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'D') goto yy216; - if(yych != 'd') goto yy53; -yy216: - YYDEBUG(216, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy217; - if(yych != 'a') goto yy53; -yy217: - YYDEBUG(217, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy185; - if(yych == 'y') goto yy185; - goto yy53; -yy218: - YYDEBUG(218, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'S') { - if(yych == 'D') goto yy219; - if(yych <= 'R') goto yy181; - goto yy185; - } else { - if(yych <= 'd') { - if(yych <= 'c') goto yy181; - } else { - if(yych == 's') goto yy185; - goto yy181; - } - } -yy219: - YYDEBUG(219, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy220; - if(yych != 'a') goto yy53; -yy220: - YYDEBUG(220, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy221; - if(yych != 'y') goto yy53; -yy221: - YYDEBUG(221, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'S') goto yy185; - if(yych == 's') goto yy185; - goto yy181; -yy222: - YYDEBUG(222, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy193; - if(yych == 'y') goto yy193; - goto yy53; -yy223: - YYDEBUG(223, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'U') goto yy224; - if(yych != 'u') goto yy53; -yy224: - YYDEBUG(224, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy193; - if(yych == 'r') goto yy193; - goto yy53; -yy225: - YYDEBUG(225, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'N') goto yy230; - if(yych == 'n') goto yy230; - goto yy53; -yy226: - YYDEBUG(226, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'N') goto yy227; - if(yych != 'n') goto yy53; -yy227: - YYDEBUG(227, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'U') { - if(yych == 'S') goto yy185; - if(yych <= 'T') goto yy181; - } else { - if(yych <= 's') { - if(yych <= 'r') goto yy181; - goto yy185; - } else { - if(yych != 'u') goto yy181; - } - } - YYDEBUG(228, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy229; - if(yych != 't') goto yy53; -yy229: - YYDEBUG(229, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy193; - if(yych == 'e') goto yy193; - goto yy53; -yy230: - YYDEBUG(230, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych == 'D') goto yy231; - if(yych <= 'S') goto yy181; - goto yy232; - } else { - if(yych <= 'd') { - if(yych <= 'c') goto yy181; - } else { - if(yych == 't') goto yy232; - goto yy181; - } - } -yy231: - YYDEBUG(231, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy233; - if(yych == 'a') goto yy233; - goto yy53; -yy232: - YYDEBUG(232, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'H') goto yy193; - if(yych == 'h') goto yy193; - goto yy53; -yy233: - YYDEBUG(233, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy185; - if(yych == 'y') goto yy185; - goto yy53; -yy234: - YYDEBUG(234, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'N') goto yy245; - if(yych == 'n') goto yy245; - goto yy53; -yy235: - YYDEBUG(235, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy240; - if(yych == 't') goto yy240; - goto yy53; -yy236: - YYDEBUG(236, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'C') goto yy237; - if(yych != 'c') goto yy53; -yy237: - YYDEBUG(237, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'S') { - if(yych == 'O') goto yy238; - if(yych <= 'R') goto yy181; - goto yy185; - } else { - if(yych <= 'o') { - if(yych <= 'n') goto yy181; - } else { - if(yych == 's') goto yy185; - goto yy181; - } - } -yy238: - YYDEBUG(238, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'N') goto yy239; - if(yych != 'n') goto yy53; -yy239: - YYDEBUG(239, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'D') goto yy193; - if(yych == 'd') goto yy193; - goto yy53; -yy240: - YYDEBUG(240, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'U') goto yy241; - if(yych != 'u') goto yy181; -yy241: - YYDEBUG(241, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy242; - if(yych != 'r') goto yy53; -yy242: - YYDEBUG(242, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'D') goto yy243; - if(yych != 'd') goto yy53; -yy243: - YYDEBUG(243, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy244; - if(yych != 'a') goto yy53; -yy244: - YYDEBUG(244, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy185; - if(yych == 'y') goto yy185; - goto yy53; -yy245: - YYDEBUG(245, *YYCURSOR); - yyaccept = 4; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'D') goto yy246; - if(yych != 'd') goto yy181; -yy246: - YYDEBUG(246, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy247; - if(yych != 'a') goto yy53; -yy247: - YYDEBUG(247, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy185; - if(yych == 'y') goto yy185; - goto yy53; -yy248: - YYDEBUG(248, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'E') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy138; - goto yy162; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'e') goto yy249; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy249: - YYDEBUG(249, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'V') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'U') goto yy139; - goto yy163; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'v') goto yy250; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy250: - YYDEBUG(250, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'I') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'H') goto yy140; - goto yy164; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'i') goto yy251; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy251: - YYDEBUG(251, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'O') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'N') goto yy141; - goto yy165; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'o') goto yy252; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy252: - YYDEBUG(252, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'U') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= 'T') goto yy3; - goto yy166; - } - } else { - if(yych <= '`') { - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'u') goto yy253; - if(yych <= 'z') goto yy151; - goto yy3; - } - } -yy253: - YYDEBUG(253, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'S') goto yy167; - if(yych != 's') goto yy152; -yy254: - YYDEBUG(254, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '.') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy53; - goto yy168; - } else { - if(yych == ' ') goto yy168; - goto yy53; - } - } else { - if(yych <= '_') { - if(yych <= '/') goto yy144; - if(yych <= '^') goto yy53; - goto yy144; - } else { - if(yych <= '`') goto yy53; - if(yych <= 'z') goto yy151; - goto yy53; - } - } -yy255: - YYDEBUG(255, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'S') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'R') goto yy138; - } - } else { - if(yych <= 'r') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 's') goto yy256; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy256: - YYDEBUG(256, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'T') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy139; - } - } else { - if(yych <= 's') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 't') goto yy257; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy257: - YYDEBUG(257, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy3; - goto yy168; - } else { - if(yych == ' ') goto yy168; - goto yy3; - } - } else { - if(yych <= 'Z') { - if(yych <= ')') goto yy136; - if(yych <= '@') goto yy3; - goto yy140; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy258: - YYDEBUG(258, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'S') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'R') goto yy138; - goto yy256; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 's') goto yy259; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy259: - YYDEBUG(259, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy139; - goto yy257; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 't') goto yy260; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy260: - YYDEBUG(260, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy168; - goto yy3; - } else { - if(yych <= ' ') goto yy168; - if(yych == ')') goto yy136; - goto yy3; - } - } else { - if(yych <= '^') { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'Z') goto yy140; - goto yy3; - } else { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy261: - YYDEBUG(261, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'G') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'F') goto yy138; - goto yy268; - } - } else { - if(yych <= 'f') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'g') goto yy268; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy262: - YYDEBUG(262, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'E') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy138; - } - } else { - if(yych <= 'd') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'e') goto yy263; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy263: - YYDEBUG(263, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'V') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'U') goto yy139; - } - } else { - if(yych <= 'u') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 'v') goto yy264; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy264: - YYDEBUG(264, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'E') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy140; - } - } else { - if(yych <= 'd') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'e') goto yy265; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy265: - YYDEBUG(265, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'N') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy141; - } - } else { - if(yych <= 'm') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 'n') goto yy266; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy266: - YYDEBUG(266, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'S') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'T') goto yy267; - if(yych != 't') goto yy3; - } -yy267: - YYDEBUG(267, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'H') goto yy167; - if(yych == 'h') goto yy167; - goto yy53; -yy268: - YYDEBUG(268, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'H') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'G') goto yy139; - } - } else { - if(yych <= 'g') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 'h') goto yy269; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy269: - YYDEBUG(269, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'T') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy140; - } - } else { - if(yych <= 's') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 't') goto yy270; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy270: - YYDEBUG(270, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy3; - goto yy168; - } else { - if(yych == ' ') goto yy168; - goto yy3; - } - } else { - if(yych <= 'Z') { - if(yych <= ')') goto yy136; - if(yych <= '@') goto yy3; - goto yy141; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy271: - YYDEBUG(271, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'G') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'F') goto yy138; - goto yy268; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'g') goto yy278; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy272: - YYDEBUG(272, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'E') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy138; - goto yy263; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'e') goto yy273; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy273: - YYDEBUG(273, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'V') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'U') goto yy139; - goto yy264; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'v') goto yy274; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy274: - YYDEBUG(274, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'E') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy140; - goto yy265; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'e') goto yy275; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy275: - YYDEBUG(275, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'N') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy141; - goto yy266; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'n') goto yy276; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy276: - YYDEBUG(276, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= 'S') goto yy3; - goto yy267; - } - } else { - if(yych <= '`') { - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 't') goto yy277; - if(yych <= 'z') goto yy151; - goto yy3; - } - } -yy277: - YYDEBUG(277, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'H') goto yy167; - if(yych == 'h') goto yy254; - goto yy152; -yy278: - YYDEBUG(278, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'H') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'G') goto yy139; - goto yy269; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'h') goto yy279; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy279: - YYDEBUG(279, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy140; - goto yy270; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 't') goto yy280; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy280: - YYDEBUG(280, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy168; - goto yy3; - } else { - if(yych <= ' ') goto yy168; - if(yych == ')') goto yy136; - goto yy3; - } - } else { - if(yych <= '^') { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'Z') goto yy141; - goto yy3; - } else { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy281: - YYDEBUG(281, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'E') { - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'C') goto yy138; - if(yych >= 'E') goto yy284; - } - } else { - if(yych <= 'c') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'd') goto yy282; - if(yych <= 'e') goto yy284; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy282: - YYDEBUG(282, *YYCURSOR); - ++YYCURSOR; - if((yych = *YYCURSOR) <= 'N') { - if(yych <= ')') { - if(yych >= ')') goto yy136; - } else { - if(yych <= '@') goto yy283; - if(yych <= 'M') goto yy139; - goto yy290; - } - } else { - if(yych <= 'm') { - if(yych <= 'Z') goto yy139; - if(yych >= 'a') goto yy139; - } else { - if(yych <= 'n') goto yy290; - if(yych <= 'z') goto yy139; - } - } -yy283: - YYDEBUG(283, *YYCURSOR); -#line 1368 "ext/date/lib/parse_date.re" - { - const timelib_relunit* relunit; - DEBUG_OUTPUT("daytext"); - TIMELIB_INIT; - TIMELIB_HAVE_RELATIVE(); - TIMELIB_HAVE_WEEKDAY_RELATIVE(); - TIMELIB_UNHAVE_TIME(); - relunit = timelib_lookup_relunit((char**) &ptr); - s->time->relative.weekday = relunit->multiplier; - s->time->relative.weekday_behavior = 1; - - TIMELIB_DEINIT; - return TIMELIB_WEEKDAY; - } -#line 5105 "ext/date/lib/parse_date.c" -yy284: - YYDEBUG(284, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'K') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'J') goto yy139; - } - } else { - if(yych <= 'j') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 'k') goto yy285; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy285: - YYDEBUG(285, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'D') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'C') goto yy140; - } - } else { - if(yych <= 'c') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'd') goto yy286; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy286: - YYDEBUG(286, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'A') { - if(yych == ')') goto yy136; - if(yych <= '@') goto yy3; - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - goto yy3; - } else { - if(yych <= 'a') goto yy287; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy287: - YYDEBUG(287, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'X') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'Y') goto yy288; - if(yych != 'y') goto yy3; - } -yy288: - YYDEBUG(288, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'S') goto yy289; - if(yych != 's') goto yy283; -yy289: - YYDEBUG(289, *YYCURSOR); - yych = *++YYCURSOR; - goto yy283; -yy290: - YYDEBUG(290, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'E') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy140; - } - } else { - if(yych <= 'd') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'e') goto yy291; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy291: - YYDEBUG(291, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'S') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'R') goto yy141; - } - } else { - if(yych <= 'r') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 's') goto yy292; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy292: - YYDEBUG(292, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'C') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'D') goto yy293; - if(yych != 'd') goto yy3; - } -yy293: - YYDEBUG(293, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy294; - if(yych != 'a') goto yy53; -yy294: - YYDEBUG(294, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy289; - if(yych == 'y') goto yy289; - goto yy53; -yy295: - YYDEBUG(295, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'E') { - if(yych <= '/') { - if(yych == ')') goto yy136; - if(yych <= '.') goto yy3; - goto yy144; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'C') goto yy138; - if(yych <= 'D') goto yy282; - goto yy284; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych <= 'd') { - if(yych <= 'c') goto yy143; - } else { - if(yych <= 'e') goto yy297; - if(yych <= 'z') goto yy143; - goto yy3; - } - } - } - YYDEBUG(296, *YYCURSOR); - yyaccept = 5; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'N') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy283; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy283; - if(yych <= 'M') goto yy139; - goto yy290; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy283; - } else { - if(yych == 'n') goto yy303; - if(yych <= 'z') goto yy148; - goto yy283; - } - } -yy297: - YYDEBUG(297, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'K') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'J') goto yy139; - goto yy285; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'k') goto yy298; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy298: - YYDEBUG(298, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'D') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'C') goto yy140; - goto yy286; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'd') goto yy299; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy299: - YYDEBUG(299, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'A') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - goto yy287; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy141; - if(yych <= '^') goto yy3; - goto yy144; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'a') goto yy300; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy300: - YYDEBUG(300, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'Y') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= 'X') goto yy3; - goto yy288; - } - } else { - if(yych <= '`') { - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'y') goto yy301; - if(yych <= 'z') goto yy151; - goto yy3; - } - } -yy301: - YYDEBUG(301, *YYCURSOR); - yyaccept = 5; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '^') { - if(yych <= '/') { - if(yych <= '.') goto yy283; - goto yy144; - } else { - if(yych == 'S') goto yy289; - goto yy283; - } - } else { - if(yych <= 'r') { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy283; - goto yy151; - } else { - if(yych <= 's') goto yy302; - if(yych <= 'z') goto yy151; - goto yy283; - } - } -yy302: - YYDEBUG(302, *YYCURSOR); - yyaccept = 5; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '^') { - if(yych == '/') goto yy144; - goto yy283; - } else { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy283; - if(yych <= 'z') goto yy151; - goto yy283; - } -yy303: - YYDEBUG(303, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'E') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy140; - goto yy291; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'e') goto yy304; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy304: - YYDEBUG(304, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'S') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'R') goto yy141; - goto yy292; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 's') goto yy305; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy305: - YYDEBUG(305, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'D') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= 'C') goto yy3; - goto yy293; - } - } else { - if(yych <= '`') { - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'd') goto yy306; - if(yych <= 'z') goto yy151; - goto yy3; - } - } -yy306: - YYDEBUG(306, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy294; - if(yych != 'a') goto yy152; - YYDEBUG(307, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy289; - if(yych == 'y') goto yy302; - goto yy152; -yy308: - YYDEBUG(308, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'C') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'B') goto yy138; - } - } else { - if(yych <= 'b') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'c') goto yy309; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy309: - YYDEBUG(309, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych >= 0x09) goto yy312; - } else { - if(yych == ' ') goto yy312; - } - } else { - if(yych <= ',') { - if(yych <= ')') goto yy136; - } else { - if(yych <= '-') goto yy313; - if(yych <= '.') goto yy312; - } - } - } else { - if(yych <= 'Z') { - if(yych <= '@') { - if(yych <= '9') goto yy312; - } else { - if(yych == 'E') goto yy318; - goto yy139; - } - } else { - if(yych <= 'd') { - if(yych >= 'a') goto yy139; - } else { - if(yych <= 'e') goto yy318; - if(yych <= 'z') goto yy139; - } - } - } -yy310: - YYDEBUG(310, *YYCURSOR); -#line 1401 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("monthtext"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->m = timelib_lookup_month((char **) &ptr); - TIMELIB_DEINIT; - return TIMELIB_DATE_TEXT; - } -#line 5591 "ext/date/lib/parse_date.c" -yy311: - YYDEBUG(311, *YYCURSOR); - ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 20) YYFILL(20); - yych = *YYCURSOR; -yy312: - YYDEBUG(312, *YYCURSOR); - if(yybm[0+yych] & 64) { - goto yy311; - } - if(yych <= '/') goto yy53; - if(yych <= '2') goto yy314; - if(yych <= '3') goto yy316; - if(yych <= '9') goto yy317; - goto yy53; -yy313: - YYDEBUG(313, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy312; - if(yych <= '0') goto yy473; - if(yych <= '2') goto yy474; - if(yych <= '3') goto yy475; - goto yy312; -yy314: - YYDEBUG(314, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'm') { - if(yych <= '1') { - if(yych <= '/') goto yy332; - if(yych <= '0') goto yy412; - goto yy413; - } else { - if(yych <= '2') goto yy471; - if(yych <= '9') goto yy472; - goto yy332; - } - } else { - if(yych <= 'r') { - if(yych <= 'n') goto yy328; - if(yych <= 'q') goto yy332; - goto yy329; - } else { - if(yych <= 's') goto yy327; - if(yych <= 't') goto yy330; - goto yy332; - } - } -yy315: - YYDEBUG(315, *YYCURSOR); -#line 1180 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("datetextual | datenoyear"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->m = timelib_get_month((char **) &ptr); - s->time->d = timelib_get_nr((char **) &ptr, 2); - s->time->y = timelib_get_nr((char **) &ptr, 4); - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_DATE_TEXT; - } -#line 5654 "ext/date/lib/parse_date.c" -yy316: - YYDEBUG(316, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'm') { - if(yych <= '1') { - if(yych <= '/') goto yy332; - if(yych <= '0') goto yy412; - goto yy413; - } else { - if(yych <= '2') goto yy325; - if(yych <= '9') goto yy326; - goto yy332; - } - } else { - if(yych <= 'r') { - if(yych <= 'n') goto yy328; - if(yych <= 'q') goto yy332; - goto yy329; - } else { - if(yych <= 's') goto yy327; - if(yych <= 't') goto yy330; - goto yy332; - } - } -yy317: - YYDEBUG(317, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'm') { - if(yych <= '1') { - if(yych <= '/') goto yy332; - if(yych <= '0') goto yy323; - goto yy324; - } else { - if(yych <= '2') goto yy325; - if(yych <= '9') goto yy326; - goto yy332; - } - } else { - if(yych <= 'r') { - if(yych <= 'n') goto yy328; - if(yych <= 'q') goto yy332; - goto yy329; - } else { - if(yych <= 's') goto yy327; - if(yych <= 't') goto yy330; - goto yy332; - } - } -yy318: - YYDEBUG(318, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'M') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'L') goto yy140; - } - } else { - if(yych <= 'l') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'm') goto yy319; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy319: - YYDEBUG(319, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'B') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'A') goto yy141; - } - } else { - if(yych <= 'a') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 'b') goto yy320; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy320: - YYDEBUG(320, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'D') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'E') goto yy321; - if(yych != 'e') goto yy3; - } -yy321: - YYDEBUG(321, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy322; - if(yych != 'r') goto yy53; -yy322: - YYDEBUG(322, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ' ') { - if(yych == 0x09) goto yy312; - if(yych <= 0x1F) goto yy310; - goto yy312; - } else { - if(yych <= '.') { - if(yych <= ',') goto yy310; - goto yy312; - } else { - if(yych <= '/') goto yy310; - if(yych <= '9') goto yy312; - goto yy310; - } - } -yy323: - YYDEBUG(323, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy337; - goto yy315; - } else { - if(yych <= '0') goto yy410; - if(yych <= '9') goto yy411; - if(yych <= ':') goto yy337; - goto yy315; - } -yy324: - YYDEBUG(324, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy378; - goto yy315; - } else { - if(yych <= '2') goto yy411; - if(yych <= '9') goto yy410; - if(yych <= ':') goto yy378; - goto yy315; - } -yy325: - YYDEBUG(325, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy378; - goto yy315; - } else { - if(yych <= '3') goto yy410; - if(yych <= '9') goto yy407; - if(yych <= ':') goto yy378; - goto yy315; - } -yy326: - YYDEBUG(326, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy378; - goto yy315; - } else { - if(yych <= '9') goto yy407; - if(yych <= ':') goto yy378; - goto yy315; - } -yy327: - YYDEBUG(327, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - goto yy332; -yy328: - YYDEBUG(328, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - goto yy332; -yy329: - YYDEBUG(329, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - goto yy332; -yy330: - YYDEBUG(330, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - goto yy332; -yy331: - YYDEBUG(331, *YYCURSOR); - yyaccept = 7; - YYMARKER = ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 17) YYFILL(17); - yych = *YYCURSOR; -yy332: - YYDEBUG(332, *YYCURSOR); - if(yybm[0+yych] & 128) { - goto yy331; - } - if(yych <= '2') { - if(yych <= '/') goto yy315; - if(yych <= '0') goto yy373; - if(yych <= '1') goto yy374; - goto yy375; - } else { - if(yych <= '9') goto yy376; - if(yych != 'T') goto yy315; - } - YYDEBUG(333, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '1') goto yy334; - if(yych <= '2') goto yy335; - if(yych <= '9') goto yy336; - goto yy53; -yy334: - YYDEBUG(334, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') { - if(yych == '.') goto yy337; - goto yy53; - } else { - if(yych <= '9') goto yy336; - if(yych <= ':') goto yy337; - goto yy53; - } -yy335: - YYDEBUG(335, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') { - if(yych == '.') goto yy337; - goto yy53; - } else { - if(yych <= '3') goto yy336; - if(yych == ':') goto yy337; - goto yy53; - } -yy336: - YYDEBUG(336, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == '.') goto yy337; - if(yych != ':') goto yy53; -yy337: - YYDEBUG(337, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy338; - if(yych <= '9') goto yy340; - goto yy53; -yy338: - YYDEBUG(338, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy341; - } else { - if(yych <= '9') goto yy340; - if(yych <= ':') goto yy341; - } -yy339: - YYDEBUG(339, *YYCURSOR); -#line 1449 "ext/date/lib/parse_date.re" - { - int tz_not_found; - DEBUG_OUTPUT("dateshortwithtimeshort | dateshortwithtimelong | dateshortwithtimelongtz"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->m = timelib_get_month((char **) &ptr); - s->time->d = timelib_get_nr((char **) &ptr, 2); - - TIMELIB_HAVE_TIME(); - s->time->h = timelib_get_nr((char **) &ptr, 2); - s->time->i = timelib_get_nr((char **) &ptr, 2); - if (*ptr == ':') { - s->time->s = timelib_get_nr((char **) &ptr, 2); - - if (*ptr == '.') { - s->time->f = timelib_get_frac_nr((char **) &ptr, 8); - } - } - - if (*ptr != '\0') { - s->time->z = timelib_get_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb); - if (tz_not_found) { - add_error(s, "The timezone could not be found in the database"); - } - } - TIMELIB_DEINIT; - return TIMELIB_SHORTDATE_WITH_TIME; - } -#line 5956 "ext/date/lib/parse_date.c" -yy340: - YYDEBUG(340, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '.') goto yy341; - if(yych != ':') goto yy339; -yy341: - YYDEBUG(341, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy342; - if(yych <= '6') goto yy343; - if(yych <= '9') goto yy344; - goto yy53; -yy342: - YYDEBUG(342, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy339; - if(yych <= '9') goto yy345; - goto yy339; -yy343: - YYDEBUG(343, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == '0') goto yy345; - goto yy339; -yy344: - YYDEBUG(344, *YYCURSOR); - yych = *++YYCURSOR; - goto yy339; -yy345: - YYDEBUG(345, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '*') { - if(yych <= 0x1F) { - if(yych != 0x09) goto yy339; - } else { - if(yych <= ' ') goto yy346; - if(yych == '(') goto yy349; - goto yy339; - } - } else { - if(yych <= '@') { - if(yych == ',') goto yy339; - if(yych <= '-') goto yy348; - goto yy339; - } else { - if(yych <= 'Z') goto yy350; - if(yych <= '`') goto yy339; - if(yych <= 'z') goto yy351; - goto yy339; - } - } -yy346: - YYDEBUG(346, *YYCURSOR); - ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 8) YYFILL(8); - yych = *YYCURSOR; - YYDEBUG(347, *YYCURSOR); - if(yych <= '*') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy346; - goto yy53; - } else { - if(yych <= ' ') goto yy346; - if(yych == '(') goto yy349; - goto yy53; - } - } else { - if(yych <= '@') { - if(yych == ',') goto yy53; - if(yych >= '.') goto yy53; - } else { - if(yych <= 'Z') goto yy350; - if(yych <= '`') goto yy53; - if(yych <= 'z') goto yy351; - goto yy53; - } - } -yy348: - YYDEBUG(348, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '1') goto yy368; - if(yych <= '2') goto yy369; - if(yych <= '9') goto yy370; - goto yy53; -yy349: - YYDEBUG(349, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '@') goto yy53; - if(yych <= 'Z') goto yy351; - if(yych <= '`') goto yy53; - if(yych <= 'z') goto yy351; - goto yy53; -yy350: - YYDEBUG(350, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '@') { - if(yych == ')') goto yy344; - goto yy339; - } else { - if(yych <= 'Z') goto yy352; - if(yych <= '`') goto yy339; - if(yych <= 'z') goto yy357; - goto yy339; - } -yy351: - YYDEBUG(351, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '@') { - if(yych == ')') goto yy344; - goto yy339; - } else { - if(yych <= 'Z') goto yy352; - if(yych <= '`') goto yy339; - if(yych >= '{') goto yy339; - } -yy352: - YYDEBUG(352, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '@') { - if(yych == ')') goto yy344; - goto yy339; - } else { - if(yych <= 'Z') goto yy353; - if(yych <= '`') goto yy339; - if(yych >= '{') goto yy339; - } -yy353: - YYDEBUG(353, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '@') { - if(yych == ')') goto yy344; - goto yy339; - } else { - if(yych <= 'Z') goto yy354; - if(yych <= '`') goto yy339; - if(yych >= '{') goto yy339; - } -yy354: - YYDEBUG(354, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '@') { - if(yych == ')') goto yy344; - goto yy339; - } else { - if(yych <= 'Z') goto yy355; - if(yych <= '`') goto yy339; - if(yych >= '{') goto yy339; - } -yy355: - YYDEBUG(355, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '@') { - if(yych == ')') goto yy344; - goto yy339; - } else { - if(yych <= 'Z') goto yy356; - if(yych <= '`') goto yy339; - if(yych >= '{') goto yy339; - } -yy356: - YYDEBUG(356, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == ')') goto yy344; - goto yy339; -yy357: - YYDEBUG(357, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '@') { - if(yych <= ')') { - if(yych <= '(') goto yy339; - goto yy344; - } else { - if(yych == '/') goto yy359; - goto yy339; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy353; - if(yych <= '^') goto yy339; - goto yy359; - } else { - if(yych <= '`') goto yy339; - if(yych >= '{') goto yy339; - } - } -yy358: - YYDEBUG(358, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '@') { - if(yych <= ')') { - if(yych <= '(') goto yy339; - goto yy344; - } else { - if(yych != '/') goto yy339; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy354; - if(yych <= '^') goto yy339; - } else { - if(yych <= '`') goto yy339; - if(yych <= 'z') goto yy363; - goto yy339; - } - } -yy359: - YYDEBUG(359, *YYCURSOR); - ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - if(yych <= '@') goto yy53; - if(yych >= '[') goto yy53; - YYDEBUG(360, *YYCURSOR); - ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - if(yych <= '`') goto yy53; - if(yych >= '{') goto yy53; -yy361: - YYDEBUG(361, *YYCURSOR); - yyaccept = 8; - YYMARKER = ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(362, *YYCURSOR); - if(yych <= '^') { - if(yych == '/') goto yy359; - goto yy339; - } else { - if(yych <= '_') goto yy359; - if(yych <= '`') goto yy339; - if(yych <= 'z') goto yy361; - goto yy339; - } -yy363: - YYDEBUG(363, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '@') { - if(yych <= ')') { - if(yych <= '(') goto yy339; - goto yy344; - } else { - if(yych == '/') goto yy359; - goto yy339; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy355; - if(yych <= '^') goto yy339; - goto yy359; - } else { - if(yych <= '`') goto yy339; - if(yych >= '{') goto yy339; - } - } - YYDEBUG(364, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '@') { - if(yych <= ')') { - if(yych <= '(') goto yy339; - goto yy344; - } else { - if(yych == '/') goto yy359; - goto yy339; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy356; - if(yych <= '^') goto yy339; - goto yy359; - } else { - if(yych <= '`') goto yy339; - if(yych >= '{') goto yy339; - } - } - YYDEBUG(365, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == ')') goto yy344; - if(yych <= '.') goto yy339; - goto yy359; - } else { - if(yych <= '_') { - if(yych <= '^') goto yy339; - goto yy359; - } else { - if(yych <= '`') goto yy339; - if(yych >= '{') goto yy339; - } - } -yy366: - YYDEBUG(366, *YYCURSOR); - ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(367, *YYCURSOR); - if(yych <= '^') { - if(yych == '/') goto yy359; - goto yy53; - } else { - if(yych <= '_') goto yy359; - if(yych <= '`') goto yy53; - if(yych <= 'z') goto yy366; - goto yy53; - } -yy368: - YYDEBUG(368, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy339; - if(yych <= '9') goto yy370; - if(yych <= ':') goto yy371; - goto yy339; -yy369: - YYDEBUG(369, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '5') { - if(yych <= '/') goto yy339; - if(yych >= '4') goto yy372; - } else { - if(yych <= '9') goto yy344; - if(yych <= ':') goto yy371; - goto yy339; - } -yy370: - YYDEBUG(370, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy339; - if(yych <= '5') goto yy372; - if(yych <= '9') goto yy344; - if(yych >= ';') goto yy339; -yy371: - YYDEBUG(371, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy339; - if(yych <= '5') goto yy372; - if(yych <= '9') goto yy344; - goto yy339; -yy372: - YYDEBUG(372, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy339; - if(yych <= '9') goto yy344; - goto yy339; -yy373: - YYDEBUG(373, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy337; - goto yy315; - } else { - if(yych <= '0') goto yy405; - if(yych <= '9') goto yy406; - if(yych <= ':') goto yy337; - goto yy315; - } -yy374: - YYDEBUG(374, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy378; - goto yy315; - } else { - if(yych <= '2') goto yy406; - if(yych <= '9') goto yy405; - if(yych <= ':') goto yy378; - goto yy315; - } -yy375: - YYDEBUG(375, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy378; - goto yy315; - } else { - if(yych <= '3') goto yy405; - if(yych <= '9') goto yy377; - if(yych <= ':') goto yy378; - goto yy315; - } -yy376: - YYDEBUG(376, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy378; - goto yy315; - } else { - if(yych <= '9') goto yy377; - if(yych <= ':') goto yy378; - goto yy315; - } -yy377: - YYDEBUG(377, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy315; - if(yych <= '9') goto yy403; - goto yy315; -yy378: - YYDEBUG(378, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy379; - if(yych <= '9') goto yy380; - goto yy53; -yy379: - YYDEBUG(379, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy381; - goto yy339; - } else { - if(yych <= '9') goto yy396; - if(yych <= ':') goto yy381; - goto yy339; - } -yy380: - YYDEBUG(380, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '.') goto yy381; - if(yych != ':') goto yy339; -yy381: - YYDEBUG(381, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy382; - if(yych <= '6') goto yy383; - if(yych <= '9') goto yy344; - goto yy53; -yy382: - YYDEBUG(382, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy339; - if(yych <= '9') goto yy384; - goto yy339; -yy383: - YYDEBUG(383, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != '0') goto yy339; -yy384: - YYDEBUG(384, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '*') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy386; - goto yy339; - } else { - if(yych <= ' ') goto yy386; - if(yych == '(') goto yy386; - goto yy339; - } - } else { - if(yych <= '@') { - if(yych == ',') goto yy339; - if(yych <= '-') goto yy386; - goto yy339; - } else { - if(yych <= 'Z') goto yy386; - if(yych <= '`') goto yy339; - if(yych <= 'z') goto yy386; - goto yy339; - } - } -yy385: - YYDEBUG(385, *YYCURSOR); - ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 8) YYFILL(8); - yych = *YYCURSOR; -yy386: - YYDEBUG(386, *YYCURSOR); - if(yych <= '-') { - if(yych <= '\'') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy53; - goto yy385; - } else { - if(yych == ' ') goto yy385; - goto yy53; - } - } else { - if(yych <= '*') { - if(yych <= '(') goto yy349; - goto yy53; - } else { - if(yych == ',') goto yy53; - goto yy348; - } - } - } else { - if(yych <= 'Z') { - if(yych <= 'A') { - if(yych <= '@') goto yy53; - } else { - if(yych != 'P') goto yy350; - } - } else { - if(yych <= 'o') { - if(yych <= '`') goto yy53; - if(yych <= 'a') goto yy388; - goto yy351; - } else { - if(yych <= 'p') goto yy388; - if(yych <= 'z') goto yy351; - goto yy53; - } - } - } - YYDEBUG(387, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'L') { - if(yych <= '-') { - if(yych == ')') goto yy344; - goto yy339; - } else { - if(yych <= '.') goto yy389; - if(yych <= '@') goto yy339; - goto yy352; - } - } else { - if(yych <= '`') { - if(yych <= 'M') goto yy390; - if(yych <= 'Z') goto yy352; - goto yy339; - } else { - if(yych == 'm') goto yy395; - if(yych <= 'z') goto yy357; - goto yy339; - } - } -yy388: - YYDEBUG(388, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'L') { - if(yych <= '-') { - if(yych == ')') goto yy344; - goto yy339; - } else { - if(yych <= '.') goto yy389; - if(yych <= '@') goto yy339; - goto yy352; - } - } else { - if(yych <= '`') { - if(yych <= 'M') goto yy390; - if(yych <= 'Z') goto yy352; - goto yy339; - } else { - if(yych == 'm') goto yy390; - if(yych <= 'z') goto yy352; - goto yy339; - } - } -yy389: - YYDEBUG(389, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'M') goto yy394; - if(yych == 'm') goto yy394; - goto yy53; -yy390: - YYDEBUG(390, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ')') { - if(yych <= 0x09) { - if(yych <= 0x00) goto yy392; - if(yych <= 0x08) goto yy339; - goto yy392; - } else { - if(yych == ' ') goto yy392; - if(yych <= '(') goto yy339; - goto yy344; - } - } else { - if(yych <= '@') { - if(yych != '.') goto yy339; - } else { - if(yych <= 'Z') goto yy353; - if(yych <= '`') goto yy339; - if(yych <= 'z') goto yy353; - goto yy339; - } - } -yy391: - YYDEBUG(391, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 0x09) { - if(yych <= 0x00) goto yy392; - if(yych <= 0x08) goto yy53; - } else { - if(yych != ' ') goto yy53; - } -yy392: - YYDEBUG(392, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(393, *YYCURSOR); -#line 1425 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("dateshortwithtimeshort12 | dateshortwithtimelong12"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->m = timelib_get_month((char **) &ptr); - s->time->d = timelib_get_nr((char **) &ptr, 2); - - TIMELIB_HAVE_TIME(); - s->time->h = timelib_get_nr((char **) &ptr, 2); - s->time->i = timelib_get_nr((char **) &ptr, 2); - if (*ptr == ':' || *ptr == '.') { - s->time->s = timelib_get_nr((char **) &ptr, 2); - - if (*ptr == '.') { - s->time->f = timelib_get_frac_nr((char **) &ptr, 8); - } - } - - s->time->h += timelib_meridian((char **) &ptr, s->time->h); - TIMELIB_DEINIT; - return TIMELIB_SHORTDATE_WITH_TIME; - } -#line 6590 "ext/date/lib/parse_date.c" -yy394: - YYDEBUG(394, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 0x1F) { - if(yych <= 0x00) goto yy392; - if(yych == 0x09) goto yy392; - goto yy53; - } else { - if(yych <= ' ') goto yy392; - if(yych == '.') goto yy391; - goto yy53; - } -yy395: - YYDEBUG(395, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '-') { - if(yych <= 0x1F) { - if(yych <= 0x00) goto yy392; - if(yych == 0x09) goto yy392; - goto yy339; - } else { - if(yych <= ' ') goto yy392; - if(yych == ')') goto yy344; - goto yy339; - } - } else { - if(yych <= 'Z') { - if(yych <= '.') goto yy391; - if(yych <= '/') goto yy359; - if(yych <= '@') goto yy339; - goto yy353; - } else { - if(yych <= '_') { - if(yych <= '^') goto yy339; - goto yy359; - } else { - if(yych <= '`') goto yy339; - if(yych <= 'z') goto yy358; - goto yy339; - } - } - } -yy396: - YYDEBUG(396, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ':') { - if(yych <= ' ') { - if(yych == 0x09) goto yy397; - if(yych <= 0x1F) goto yy339; - } else { - if(yych == '.') goto yy381; - if(yych <= '9') goto yy339; - goto yy381; - } - } else { - if(yych <= 'P') { - if(yych == 'A') goto yy399; - if(yych <= 'O') goto yy339; - goto yy399; - } else { - if(yych <= 'a') { - if(yych <= '`') goto yy339; - goto yy399; - } else { - if(yych == 'p') goto yy399; - goto yy339; - } - } - } -yy397: - YYDEBUG(397, *YYCURSOR); - ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 5) YYFILL(5); - yych = *YYCURSOR; - YYDEBUG(398, *YYCURSOR); - if(yych <= 'A') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy397; - goto yy53; - } else { - if(yych <= ' ') goto yy397; - if(yych <= '@') goto yy53; - } - } else { - if(yych <= '`') { - if(yych != 'P') goto yy53; - } else { - if(yych <= 'a') goto yy399; - if(yych != 'p') goto yy53; - } - } -yy399: - YYDEBUG(399, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'L') { - if(yych != '.') goto yy53; - } else { - if(yych <= 'M') goto yy401; - if(yych == 'm') goto yy401; - goto yy53; - } -yy400: - YYDEBUG(400, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'M') goto yy401; - if(yych != 'm') goto yy53; -yy401: - YYDEBUG(401, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 0x1F) { - if(yych <= 0x00) goto yy392; - if(yych == 0x09) goto yy392; - goto yy53; - } else { - if(yych <= ' ') goto yy392; - if(yych != '.') goto yy53; - } -yy402: - YYDEBUG(402, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 0x09) { - if(yych <= 0x00) goto yy392; - if(yych <= 0x08) goto yy53; - goto yy392; - } else { - if(yych == ' ') goto yy392; - goto yy53; - } -yy403: - YYDEBUG(403, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy315; - if(yych >= ':') goto yy315; -yy404: - YYDEBUG(404, *YYCURSOR); - yych = *++YYCURSOR; - goto yy315; -yy405: - YYDEBUG(405, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy337; - goto yy315; - } else { - if(yych <= '9') goto yy403; - if(yych <= ':') goto yy337; - goto yy315; - } -yy406: - YYDEBUG(406, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy378; - goto yy315; - } else { - if(yych <= '9') goto yy403; - if(yych <= ':') goto yy378; - goto yy315; - } -yy407: - YYDEBUG(407, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy315; - if(yych >= ':') goto yy315; -yy408: - YYDEBUG(408, *YYCURSOR); - ++YYCURSOR; - if((yych = *YYCURSOR) <= '/') goto yy409; - if(yych <= '9') goto yy404; -yy409: - YYDEBUG(409, *YYCURSOR); -#line 1154 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("datenoday"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->m = timelib_get_month((char **) &ptr); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->d = 1; - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_DATE_NO_DAY; - } -#line 6778 "ext/date/lib/parse_date.c" -yy410: - YYDEBUG(410, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy337; - goto yy315; - } else { - if(yych <= '9') goto yy408; - if(yych <= ':') goto yy337; - goto yy315; - } -yy411: - YYDEBUG(411, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy378; - goto yy315; - } else { - if(yych <= '9') goto yy408; - if(yych <= ':') goto yy378; - goto yy315; - } -yy412: - YYDEBUG(412, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '/') { - if(yych == '.') goto yy447; - goto yy332; - } else { - if(yych <= '0') goto yy448; - if(yych <= '1') goto yy416; - if(yych <= '2') goto yy417; - goto yy418; - } - } else { - if(yych <= 'q') { - if(yych <= ':') goto yy337; - if(yych == 'n') goto yy328; - goto yy332; - } else { - if(yych <= 'r') goto yy329; - if(yych <= 's') goto yy327; - if(yych <= 't') goto yy330; - goto yy332; - } - } -yy413: - YYDEBUG(413, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '/') { - if(yych != '.') goto yy332; - } else { - if(yych <= '0') goto yy415; - if(yych <= '1') goto yy416; - if(yych <= '2') goto yy417; - goto yy418; - } - } else { - if(yych <= 'q') { - if(yych <= ':') goto yy378; - if(yych == 'n') goto yy328; - goto yy332; - } else { - if(yych <= 'r') goto yy329; - if(yych <= 's') goto yy327; - if(yych <= 't') goto yy330; - goto yy332; - } - } -yy414: - YYDEBUG(414, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '1') { - if(yych <= '/') goto yy332; - if(yych <= '0') goto yy422; - goto yy423; - } else { - if(yych <= '2') goto yy424; - if(yych <= '5') goto yy425; - if(yych <= '9') goto yy426; - goto yy332; - } -yy415: - YYDEBUG(415, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy378; - goto yy315; - } else { - if(yych <= '0') goto yy420; - if(yych <= '9') goto yy421; - if(yych <= ':') goto yy378; - goto yy315; - } -yy416: - YYDEBUG(416, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy378; - goto yy315; - } else { - if(yych <= '2') goto yy421; - if(yych <= '9') goto yy420; - if(yych <= ':') goto yy378; - goto yy315; - } -yy417: - YYDEBUG(417, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy378; - goto yy315; - } else { - if(yych <= '3') goto yy420; - if(yych <= '9') goto yy419; - if(yych <= ':') goto yy378; - goto yy315; - } -yy418: - YYDEBUG(418, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy378; - goto yy315; - } else { - if(yych <= '9') goto yy419; - if(yych <= ':') goto yy378; - goto yy315; - } -yy419: - YYDEBUG(419, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy409; - if(yych <= '9') goto yy403; - goto yy409; -yy420: - YYDEBUG(420, *YYCURSOR); - yyaccept = 9; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy337; - goto yy409; - } else { - if(yych <= '9') goto yy403; - if(yych <= ':') goto yy337; - goto yy409; - } -yy421: - YYDEBUG(421, *YYCURSOR); - yyaccept = 9; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy378; - goto yy409; - } else { - if(yych <= '9') goto yy403; - if(yych <= ':') goto yy378; - goto yy409; - } -yy422: - YYDEBUG(422, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy442; - goto yy315; - } else { - if(yych <= '0') goto yy441; - if(yych <= '9') goto yy446; - if(yych <= ':') goto yy442; - goto yy315; - } -yy423: - YYDEBUG(423, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy427; - goto yy315; - } else { - if(yych <= '2') goto yy446; - if(yych <= '9') goto yy441; - if(yych <= ':') goto yy427; - goto yy315; - } -yy424: - YYDEBUG(424, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy427; - goto yy315; - } else { - if(yych <= '3') goto yy441; - if(yych <= '9') goto yy440; - if(yych <= ':') goto yy427; - goto yy315; - } -yy425: - YYDEBUG(425, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy427; - goto yy315; - } else { - if(yych <= '9') goto yy440; - if(yych <= ':') goto yy427; - goto yy315; - } -yy426: - YYDEBUG(426, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych != '.') goto yy315; - } else { - if(yych <= '9') goto yy377; - if(yych >= ';') goto yy315; - } -yy427: - YYDEBUG(427, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy428; - if(yych <= '6') goto yy429; - if(yych <= '9') goto yy380; - goto yy53; -yy428: - YYDEBUG(428, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy381; - goto yy339; - } else { - if(yych <= '9') goto yy430; - if(yych <= ':') goto yy381; - goto yy339; - } -yy429: - YYDEBUG(429, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy381; - goto yy339; - } else { - if(yych <= '0') goto yy384; - if(yych == ':') goto yy381; - goto yy339; - } -yy430: - YYDEBUG(430, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ',') { - if(yych <= ' ') { - if(yych == 0x09) goto yy432; - if(yych <= 0x1F) goto yy339; - goto yy432; - } else { - if(yych <= '(') { - if(yych <= '\'') goto yy339; - goto yy432; - } else { - if(yych == '+') goto yy432; - goto yy339; - } - } - } else { - if(yych <= ':') { - if(yych <= '-') goto yy432; - if(yych <= '.') goto yy381; - if(yych <= '9') goto yy339; - goto yy381; - } else { - if(yych <= 'Z') { - if(yych <= '@') goto yy339; - goto yy432; - } else { - if(yych <= '`') goto yy339; - if(yych <= 'z') goto yy432; - goto yy339; - } - } - } -yy431: - YYDEBUG(431, *YYCURSOR); - ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 8) YYFILL(8); - yych = *YYCURSOR; -yy432: - YYDEBUG(432, *YYCURSOR); - if(yych <= '-') { - if(yych <= '\'') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy53; - goto yy431; - } else { - if(yych == ' ') goto yy431; - goto yy53; - } - } else { - if(yych <= '*') { - if(yych <= '(') goto yy349; - goto yy53; - } else { - if(yych == ',') goto yy53; - goto yy348; - } - } - } else { - if(yych <= 'Z') { - if(yych <= 'A') { - if(yych <= '@') goto yy53; - } else { - if(yych != 'P') goto yy350; - } - } else { - if(yych <= 'o') { - if(yych <= '`') goto yy53; - if(yych <= 'a') goto yy434; - goto yy351; - } else { - if(yych <= 'p') goto yy434; - if(yych <= 'z') goto yy351; - goto yy53; - } - } - } - YYDEBUG(433, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'L') { - if(yych <= '-') { - if(yych == ')') goto yy344; - goto yy339; - } else { - if(yych <= '.') goto yy436; - if(yych <= '@') goto yy339; - goto yy352; - } - } else { - if(yych <= '`') { - if(yych <= 'M') goto yy435; - if(yych <= 'Z') goto yy352; - goto yy339; - } else { - if(yych == 'm') goto yy439; - if(yych <= 'z') goto yy357; - goto yy339; - } - } -yy434: - YYDEBUG(434, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'L') { - if(yych <= '-') { - if(yych == ')') goto yy344; - goto yy339; - } else { - if(yych <= '.') goto yy436; - if(yych <= '@') goto yy339; - goto yy352; - } - } else { - if(yych <= '`') { - if(yych <= 'M') goto yy435; - if(yych <= 'Z') goto yy352; - goto yy339; - } else { - if(yych == 'm') goto yy435; - if(yych <= 'z') goto yy352; - goto yy339; - } - } -yy435: - YYDEBUG(435, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ')') { - if(yych <= 0x09) { - if(yych <= 0x00) goto yy392; - if(yych <= 0x08) goto yy339; - goto yy392; - } else { - if(yych == ' ') goto yy392; - if(yych <= '(') goto yy339; - goto yy344; - } - } else { - if(yych <= '@') { - if(yych == '.') goto yy438; - goto yy339; - } else { - if(yych <= 'Z') goto yy353; - if(yych <= '`') goto yy339; - if(yych <= 'z') goto yy353; - goto yy339; - } - } -yy436: - YYDEBUG(436, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'M') goto yy437; - if(yych != 'm') goto yy53; -yy437: - YYDEBUG(437, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 0x1F) { - if(yych <= 0x00) goto yy392; - if(yych == 0x09) goto yy392; - goto yy53; - } else { - if(yych <= ' ') goto yy392; - if(yych != '.') goto yy53; - } -yy438: - YYDEBUG(438, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 0x09) { - if(yych <= 0x00) goto yy392; - if(yych <= 0x08) goto yy53; - goto yy392; - } else { - if(yych == ' ') goto yy392; - goto yy53; - } -yy439: - YYDEBUG(439, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '-') { - if(yych <= 0x1F) { - if(yych <= 0x00) goto yy392; - if(yych == 0x09) goto yy392; - goto yy339; - } else { - if(yych <= ' ') goto yy392; - if(yych == ')') goto yy344; - goto yy339; - } - } else { - if(yych <= 'Z') { - if(yych <= '.') goto yy438; - if(yych <= '/') goto yy359; - if(yych <= '@') goto yy339; - goto yy353; - } else { - if(yych <= '_') { - if(yych <= '^') goto yy339; - goto yy359; - } else { - if(yych <= '`') goto yy339; - if(yych <= 'z') goto yy358; - goto yy339; - } - } - } -yy440: - YYDEBUG(440, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ':') { - if(yych <= ' ') { - if(yych == 0x09) goto yy397; - if(yych <= 0x1F) goto yy315; - goto yy397; - } else { - if(yych <= '.') { - if(yych <= '-') goto yy315; - goto yy381; - } else { - if(yych <= '/') goto yy315; - if(yych <= '9') goto yy403; - goto yy381; - } - } - } else { - if(yych <= 'P') { - if(yych == 'A') goto yy399; - if(yych <= 'O') goto yy315; - goto yy399; - } else { - if(yych <= 'a') { - if(yych <= '`') goto yy315; - goto yy399; - } else { - if(yych == 'p') goto yy399; - goto yy315; - } - } - } -yy441: - YYDEBUG(441, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ':') { - if(yych <= ' ') { - if(yych == 0x09) goto yy397; - if(yych <= 0x1F) goto yy315; - goto yy397; - } else { - if(yych <= '.') { - if(yych <= '-') goto yy315; - } else { - if(yych <= '/') goto yy315; - if(yych <= '9') goto yy403; - } - } - } else { - if(yych <= 'P') { - if(yych == 'A') goto yy399; - if(yych <= 'O') goto yy315; - goto yy399; - } else { - if(yych <= 'a') { - if(yych <= '`') goto yy315; - goto yy399; - } else { - if(yych == 'p') goto yy399; - goto yy315; - } - } - } -yy442: - YYDEBUG(442, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy443; - if(yych <= '6') goto yy444; - if(yych <= '9') goto yy340; - goto yy53; -yy443: - YYDEBUG(443, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy341; - goto yy339; - } else { - if(yych <= '9') goto yy445; - if(yych <= ':') goto yy341; - goto yy339; - } -yy444: - YYDEBUG(444, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy341; - goto yy339; - } else { - if(yych <= '0') goto yy384; - if(yych == ':') goto yy341; - goto yy339; - } -yy445: - YYDEBUG(445, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ',') { - if(yych <= ' ') { - if(yych == 0x09) goto yy386; - if(yych <= 0x1F) goto yy339; - goto yy386; - } else { - if(yych <= '(') { - if(yych <= '\'') goto yy339; - goto yy386; - } else { - if(yych == '+') goto yy386; - goto yy339; - } - } - } else { - if(yych <= ':') { - if(yych <= '-') goto yy386; - if(yych <= '.') goto yy341; - if(yych <= '9') goto yy339; - goto yy341; - } else { - if(yych <= 'Z') { - if(yych <= '@') goto yy339; - goto yy386; - } else { - if(yych <= '`') goto yy339; - if(yych <= 'z') goto yy386; - goto yy339; - } - } - } -yy446: - YYDEBUG(446, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ':') { - if(yych <= ' ') { - if(yych == 0x09) goto yy397; - if(yych <= 0x1F) goto yy315; - goto yy397; - } else { - if(yych <= '.') { - if(yych <= '-') goto yy315; - goto yy427; - } else { - if(yych <= '/') goto yy315; - if(yych <= '9') goto yy403; - goto yy427; - } - } - } else { - if(yych <= 'P') { - if(yych == 'A') goto yy399; - if(yych <= 'O') goto yy315; - goto yy399; - } else { - if(yych <= 'a') { - if(yych <= '`') goto yy315; - goto yy399; - } else { - if(yych == 'p') goto yy399; - goto yy315; - } - } - } -yy447: - YYDEBUG(447, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '1') { - if(yych <= '/') goto yy332; - if(yych <= '0') goto yy449; - goto yy450; - } else { - if(yych <= '2') goto yy451; - if(yych <= '5') goto yy452; - if(yych <= '9') goto yy453; - goto yy332; - } -yy448: - YYDEBUG(448, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy337; - goto yy315; - } else { - if(yych <= '0') goto yy420; - if(yych <= '9') goto yy421; - if(yych <= ':') goto yy337; - goto yy315; - } -yy449: - YYDEBUG(449, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy466; - goto yy315; - } else { - if(yych <= '0') goto yy465; - if(yych <= '9') goto yy470; - if(yych <= ':') goto yy466; - goto yy315; - } -yy450: - YYDEBUG(450, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy454; - goto yy315; - } else { - if(yych <= '2') goto yy470; - if(yych <= '9') goto yy465; - if(yych <= ':') goto yy454; - goto yy315; - } -yy451: - YYDEBUG(451, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy454; - goto yy315; - } else { - if(yych <= '3') goto yy465; - if(yych <= '9') goto yy464; - if(yych <= ':') goto yy454; - goto yy315; - } -yy452: - YYDEBUG(452, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy454; - goto yy315; - } else { - if(yych <= '9') goto yy464; - if(yych <= ':') goto yy454; - goto yy315; - } -yy453: - YYDEBUG(453, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych != '.') goto yy315; - } else { - if(yych <= '9') goto yy377; - if(yych >= ';') goto yy315; - } -yy454: - YYDEBUG(454, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy455; - if(yych <= '6') goto yy456; - if(yych <= '9') goto yy380; - goto yy53; -yy455: - YYDEBUG(455, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy381; - goto yy339; - } else { - if(yych <= '9') goto yy457; - if(yych <= ':') goto yy381; - goto yy339; - } -yy456: - YYDEBUG(456, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy381; - goto yy339; - } else { - if(yych <= '0') goto yy345; - if(yych == ':') goto yy381; - goto yy339; - } -yy457: - YYDEBUG(457, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ',') { - if(yych <= ' ') { - if(yych == 0x09) goto yy459; - if(yych <= 0x1F) goto yy339; - goto yy459; - } else { - if(yych <= '(') { - if(yych <= '\'') goto yy339; - goto yy459; - } else { - if(yych == '+') goto yy459; - goto yy339; - } - } - } else { - if(yych <= ':') { - if(yych <= '-') goto yy459; - if(yych <= '.') goto yy381; - if(yych <= '9') goto yy339; - goto yy381; - } else { - if(yych <= 'Z') { - if(yych <= '@') goto yy339; - goto yy459; - } else { - if(yych <= '`') goto yy339; - if(yych <= 'z') goto yy459; - goto yy339; - } - } - } -yy458: - YYDEBUG(458, *YYCURSOR); - ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 8) YYFILL(8); - yych = *YYCURSOR; -yy459: - YYDEBUG(459, *YYCURSOR); - if(yych <= '-') { - if(yych <= '\'') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy53; - goto yy458; - } else { - if(yych == ' ') goto yy458; - goto yy53; - } - } else { - if(yych <= '*') { - if(yych <= '(') goto yy349; - goto yy53; - } else { - if(yych == ',') goto yy53; - goto yy348; - } - } - } else { - if(yych <= 'Z') { - if(yych <= 'A') { - if(yych <= '@') goto yy53; - } else { - if(yych != 'P') goto yy350; - } - } else { - if(yych <= 'o') { - if(yych <= '`') goto yy53; - if(yych <= 'a') goto yy461; - goto yy351; - } else { - if(yych <= 'p') goto yy461; - if(yych <= 'z') goto yy351; - goto yy53; - } - } - } - YYDEBUG(460, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'L') { - if(yych <= '-') { - if(yych == ')') goto yy344; - goto yy339; - } else { - if(yych <= '.') goto yy400; - if(yych <= '@') goto yy339; - goto yy352; - } - } else { - if(yych <= '`') { - if(yych <= 'M') goto yy462; - if(yych <= 'Z') goto yy352; - goto yy339; - } else { - if(yych == 'm') goto yy463; - if(yych <= 'z') goto yy357; - goto yy339; - } - } -yy461: - YYDEBUG(461, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'L') { - if(yych <= '-') { - if(yych == ')') goto yy344; - goto yy339; - } else { - if(yych <= '.') goto yy400; - if(yych <= '@') goto yy339; - goto yy352; - } - } else { - if(yych <= '`') { - if(yych <= 'M') goto yy462; - if(yych <= 'Z') goto yy352; - goto yy339; - } else { - if(yych == 'm') goto yy462; - if(yych <= 'z') goto yy352; - goto yy339; - } - } -yy462: - YYDEBUG(462, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ')') { - if(yych <= 0x09) { - if(yych <= 0x00) goto yy392; - if(yych <= 0x08) goto yy339; - goto yy392; - } else { - if(yych == ' ') goto yy392; - if(yych <= '(') goto yy339; - goto yy344; - } - } else { - if(yych <= '@') { - if(yych == '.') goto yy402; - goto yy339; - } else { - if(yych <= 'Z') goto yy353; - if(yych <= '`') goto yy339; - if(yych <= 'z') goto yy353; - goto yy339; - } - } -yy463: - YYDEBUG(463, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '-') { - if(yych <= 0x1F) { - if(yych <= 0x00) goto yy392; - if(yych == 0x09) goto yy392; - goto yy339; - } else { - if(yych <= ' ') goto yy392; - if(yych == ')') goto yy344; - goto yy339; - } - } else { - if(yych <= 'Z') { - if(yych <= '.') goto yy402; - if(yych <= '/') goto yy359; - if(yych <= '@') goto yy339; - goto yy353; - } else { - if(yych <= '_') { - if(yych <= '^') goto yy339; - goto yy359; - } else { - if(yych <= '`') goto yy339; - if(yych <= 'z') goto yy358; - goto yy339; - } - } - } -yy464: - YYDEBUG(464, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy341; - goto yy315; - } else { - if(yych <= '9') goto yy403; - if(yych <= ':') goto yy341; - goto yy315; - } -yy465: - YYDEBUG(465, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych != '.') goto yy315; - } else { - if(yych <= '9') goto yy403; - if(yych >= ';') goto yy315; - } -yy466: - YYDEBUG(466, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy467; - if(yych <= '6') goto yy468; - if(yych <= '9') goto yy340; - goto yy53; -yy467: - YYDEBUG(467, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy341; - goto yy339; - } else { - if(yych <= '9') goto yy469; - if(yych <= ':') goto yy341; - goto yy339; - } -yy468: - YYDEBUG(468, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy341; - goto yy339; - } else { - if(yych <= '0') goto yy345; - if(yych == ':') goto yy341; - goto yy339; - } -yy469: - YYDEBUG(469, *YYCURSOR); - yyaccept = 8; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ',') { - if(yych <= ' ') { - if(yych == 0x09) goto yy346; - if(yych <= 0x1F) goto yy339; - goto yy346; - } else { - if(yych <= '(') { - if(yych <= '\'') goto yy339; - goto yy349; - } else { - if(yych == '+') goto yy348; - goto yy339; - } - } - } else { - if(yych <= ':') { - if(yych <= '-') goto yy348; - if(yych <= '.') goto yy341; - if(yych <= '9') goto yy339; - goto yy341; - } else { - if(yych <= 'Z') { - if(yych <= '@') goto yy339; - goto yy350; - } else { - if(yych <= '`') goto yy339; - if(yych <= 'z') goto yy351; - goto yy339; - } - } - } -yy470: - YYDEBUG(470, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy454; - goto yy315; - } else { - if(yych <= '9') goto yy403; - if(yych <= ':') goto yy454; - goto yy315; - } -yy471: - YYDEBUG(471, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '/') { - if(yych == '.') goto yy414; - goto yy332; - } else { - if(yych <= '0') goto yy448; - if(yych <= '1') goto yy416; - if(yych <= '2') goto yy417; - goto yy418; - } - } else { - if(yych <= 'q') { - if(yych <= ':') goto yy378; - if(yych == 'n') goto yy328; - goto yy332; - } else { - if(yych <= 'r') goto yy329; - if(yych <= 's') goto yy327; - if(yych <= 't') goto yy330; - goto yy332; - } - } -yy472: - YYDEBUG(472, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '/') { - if(yych == '.') goto yy414; - goto yy332; - } else { - if(yych <= '0') goto yy448; - if(yych <= '1') goto yy416; - if(yych <= '2') goto yy417; - goto yy418; - } - } else { - if(yych <= 'q') { - if(yych <= ':') goto yy378; - if(yych == 'n') goto yy328; - goto yy332; - } else { - if(yych <= 'r') goto yy329; - if(yych <= 's') goto yy327; - if(yych <= 't') goto yy330; - goto yy332; - } - } -yy473: - YYDEBUG(473, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'm') { - if(yych <= '1') { - if(yych <= '/') goto yy332; - if(yych <= '0') goto yy412; - goto yy477; - } else { - if(yych <= '2') goto yy484; - if(yych <= '9') goto yy485; - goto yy332; - } - } else { - if(yych <= 'r') { - if(yych <= 'n') goto yy328; - if(yych <= 'q') goto yy332; - goto yy329; - } else { - if(yych <= 's') goto yy327; - if(yych <= 't') goto yy330; - goto yy332; - } - } -yy474: - YYDEBUG(474, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'm') { - if(yych <= '1') { - if(yych <= '/') goto yy332; - if(yych <= '0') goto yy476; - goto yy477; - } else { - if(yych <= '2') goto yy484; - if(yych <= '9') goto yy485; - goto yy332; - } - } else { - if(yych <= 'r') { - if(yych <= 'n') goto yy328; - if(yych <= 'q') goto yy332; - goto yy329; - } else { - if(yych <= 's') goto yy327; - if(yych <= 't') goto yy330; - goto yy332; - } - } -yy475: - YYDEBUG(475, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'm') { - if(yych <= '1') { - if(yych <= '/') goto yy332; - if(yych >= '1') goto yy477; - } else { - if(yych <= '2') goto yy325; - if(yych <= '9') goto yy326; - goto yy332; - } - } else { - if(yych <= 'r') { - if(yych <= 'n') goto yy328; - if(yych <= 'q') goto yy332; - goto yy329; - } else { - if(yych <= 's') goto yy327; - if(yych <= 't') goto yy330; - goto yy332; - } - } -yy476: - YYDEBUG(476, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '/') { - if(yych <= ',') goto yy332; - if(yych <= '-') goto yy478; - if(yych <= '.') goto yy447; - goto yy332; - } else { - if(yych <= '0') goto yy448; - if(yych <= '1') goto yy416; - if(yych <= '2') goto yy417; - goto yy418; - } - } else { - if(yych <= 'q') { - if(yych <= ':') goto yy337; - if(yych == 'n') goto yy328; - goto yy332; - } else { - if(yych <= 'r') goto yy329; - if(yych <= 's') goto yy327; - if(yych <= 't') goto yy330; - goto yy332; - } - } -yy477: - YYDEBUG(477, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '/') { - if(yych <= ',') goto yy332; - if(yych <= '-') goto yy478; - if(yych <= '.') goto yy414; - goto yy332; - } else { - if(yych <= '0') goto yy415; - if(yych <= '1') goto yy416; - if(yych <= '2') goto yy417; - goto yy418; - } - } else { - if(yych <= 'q') { - if(yych <= ':') goto yy378; - if(yych == 'n') goto yy328; - goto yy332; - } else { - if(yych <= 'r') goto yy329; - if(yych <= 's') goto yy327; - if(yych <= 't') goto yy330; - goto yy332; - } - } -yy478: - YYDEBUG(478, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= ':') goto yy53; - YYDEBUG(479, *YYCURSOR); - ++YYCURSOR; - if((yych = *YYCURSOR) <= '/') goto yy480; - if(yych <= '9') goto yy481; -yy480: - YYDEBUG(480, *YYCURSOR); -#line 1294 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("pgtextshort"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->m = timelib_get_month((char **) &ptr); - s->time->d = timelib_get_nr((char **) &ptr, 2); - s->time->y = timelib_get_nr((char **) &ptr, 4); - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_PG_TEXT; - } -#line 8026 "ext/date/lib/parse_date.c" -yy481: - YYDEBUG(481, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy480; - if(yych >= ':') goto yy480; - YYDEBUG(482, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy480; - if(yych >= ':') goto yy480; - YYDEBUG(483, *YYCURSOR); - yych = *++YYCURSOR; - goto yy480; -yy484: - YYDEBUG(484, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '/') { - if(yych <= ',') goto yy332; - if(yych <= '-') goto yy478; - if(yych <= '.') goto yy414; - goto yy332; - } else { - if(yych <= '0') goto yy448; - if(yych <= '1') goto yy416; - if(yych <= '2') goto yy417; - goto yy418; - } - } else { - if(yych <= 'q') { - if(yych <= ':') goto yy378; - if(yych == 'n') goto yy328; - goto yy332; - } else { - if(yych <= 'r') goto yy329; - if(yych <= 's') goto yy327; - if(yych <= 't') goto yy330; - goto yy332; - } - } -yy485: - YYDEBUG(485, *YYCURSOR); - yyaccept = 7; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '/') { - if(yych <= ',') goto yy332; - if(yych <= '-') goto yy478; - if(yych <= '.') goto yy414; - goto yy332; - } else { - if(yych <= '0') goto yy448; - if(yych <= '1') goto yy416; - if(yych <= '2') goto yy417; - goto yy418; - } - } else { - if(yych <= 'q') { - if(yych <= ':') goto yy378; - if(yych == 'n') goto yy328; - goto yy332; - } else { - if(yych <= 'r') goto yy329; - if(yych <= 's') goto yy327; - if(yych <= 't') goto yy330; - goto yy332; - } - } -yy486: - YYDEBUG(486, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'C') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'B') goto yy138; - goto yy309; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'c') goto yy487; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy487: - YYDEBUG(487, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= '-') { - if(yych <= ')') goto yy136; - if(yych <= ',') goto yy310; - goto yy313; - } else { - if(yych == '/') goto yy144; - goto yy312; - } - } - } else { - if(yych <= '^') { - if(yych <= 'D') { - if(yych <= '@') goto yy310; - goto yy139; - } else { - if(yych <= 'E') goto yy318; - if(yych <= 'Z') goto yy139; - goto yy310; - } - } else { - if(yych <= 'd') { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy310; - goto yy148; - } else { - if(yych <= 'e') goto yy488; - if(yych <= 'z') goto yy148; - goto yy310; - } - } - } -yy488: - YYDEBUG(488, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'M') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'L') goto yy140; - goto yy319; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'm') goto yy489; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy489: - YYDEBUG(489, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'B') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'A') goto yy141; - goto yy320; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'b') goto yy490; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy490: - YYDEBUG(490, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'E') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= 'D') goto yy3; - goto yy321; - } - } else { - if(yych <= '`') { - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'e') goto yy491; - if(yych <= 'z') goto yy151; - goto yy3; - } - } -yy491: - YYDEBUG(491, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy322; - if(yych != 'r') goto yy152; -yy492: - YYDEBUG(492, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy312; - goto yy310; - } else { - if(yych <= ' ') goto yy312; - if(yych <= ',') goto yy310; - goto yy312; - } - } else { - if(yych <= '^') { - if(yych <= '/') goto yy144; - if(yych <= '9') goto yy312; - goto yy310; - } else { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy310; - if(yych <= 'z') goto yy151; - goto yy310; - } - } -yy493: - YYDEBUG(493, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'T') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy138; - } - } else { - if(yych <= 's') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 't') goto yy494; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy494: - YYDEBUG(494, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= ',') { - if(yych <= ')') goto yy136; - goto yy310; - } else { - if(yych <= '-') goto yy313; - if(yych <= '.') goto yy312; - goto yy310; - } - } - } else { - if(yych <= 'Z') { - if(yych <= '@') { - if(yych <= '9') goto yy312; - goto yy310; - } else { - if(yych != 'O') goto yy139; - } - } else { - if(yych <= 'n') { - if(yych <= '`') goto yy310; - goto yy139; - } else { - if(yych <= 'o') goto yy495; - if(yych <= 'z') goto yy139; - goto yy310; - } - } - } -yy495: - YYDEBUG(495, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'B') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'A') goto yy140; - } - } else { - if(yych <= 'a') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'b') goto yy496; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy496: - YYDEBUG(496, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'E') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy141; - } - } else { - if(yych <= 'd') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 'e') goto yy497; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy497: - YYDEBUG(497, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'Q') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'R') goto yy322; - if(yych == 'r') goto yy322; - goto yy3; - } -yy498: - YYDEBUG(498, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy138; - goto yy494; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 't') goto yy499; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy499: - YYDEBUG(499, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= '-') { - if(yych <= ')') goto yy136; - if(yych <= ',') goto yy310; - goto yy313; - } else { - if(yych == '/') goto yy144; - goto yy312; - } - } - } else { - if(yych <= '^') { - if(yych <= 'N') { - if(yych <= '@') goto yy310; - goto yy139; - } else { - if(yych <= 'O') goto yy495; - if(yych <= 'Z') goto yy139; - goto yy310; - } - } else { - if(yych <= 'n') { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy310; - goto yy148; - } else { - if(yych <= 'o') goto yy500; - if(yych <= 'z') goto yy148; - goto yy310; - } - } - } -yy500: - YYDEBUG(500, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'B') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'A') goto yy140; - goto yy496; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'b') goto yy501; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy501: - YYDEBUG(501, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'E') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy141; - goto yy497; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'e') goto yy502; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy502: - YYDEBUG(502, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'R') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= 'Q') goto yy3; - goto yy322; - } - } else { - if(yych <= '`') { - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'r') goto yy492; - if(yych <= 'z') goto yy151; - goto yy3; - } - } -yy503: - YYDEBUG(503, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'V') { - if(yych <= 'B') { - if(yych == ')') goto yy136; - if(yych <= '@') goto yy3; - goto yy138; - } else { - if(yych <= 'O') { - if(yych <= 'C') goto yy519; - goto yy138; - } else { - if(yych <= 'P') goto yy518; - if(yych <= 'U') goto yy138; - goto yy520; - } - } - } else { - if(yych <= 'o') { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - goto yy3; - } else { - if(yych == 'c') goto yy519; - goto yy138; - } - } else { - if(yych <= 'u') { - if(yych <= 'p') goto yy518; - goto yy138; - } else { - if(yych <= 'v') goto yy520; - if(yych <= 'z') goto yy138; - goto yy3; - } - } - } -yy504: - YYDEBUG(504, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'T') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy138; - goto yy513; - } - } else { - if(yych <= 's') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 't') goto yy513; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy505: - YYDEBUG(505, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'X') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'W') goto yy138; - goto yy511; - } - } else { - if(yych <= 'w') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'x') goto yy511; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy506: - YYDEBUG(506, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'N') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy138; - } - } else { - if(yych <= 'm') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'n') goto yy507; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy507: - YYDEBUG(507, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'D') { - if(yych <= ')') { - if(yych <= '(') goto yy283; - goto yy136; - } else { - if(yych <= '@') goto yy283; - if(yych <= 'C') goto yy139; - } - } else { - if(yych <= 'c') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy283; - goto yy139; - } else { - if(yych <= 'd') goto yy508; - if(yych <= 'z') goto yy139; - goto yy283; - } - } -yy508: - YYDEBUG(508, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'A') { - if(yych == ')') goto yy136; - if(yych <= '@') goto yy3; - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - goto yy3; - } else { - if(yych <= 'a') goto yy509; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy509: - YYDEBUG(509, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'Y') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'X') goto yy141; - } - } else { - if(yych <= 'x') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 'y') goto yy510; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy510: - YYDEBUG(510, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == ')') goto yy136; - goto yy283; -yy511: - YYDEBUG(511, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'T') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy139; - } - } else { - if(yych <= 's') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 't') goto yy512; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy512: - YYDEBUG(512, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'H') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'G') goto yy140; - goto yy270; - } - } else { - if(yych <= 'g') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'h') goto yy270; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy513: - YYDEBUG(513, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych <= ')') { - if(yych <= '(') goto yy283; - goto yy136; - } else { - if(yych <= '@') goto yy283; - if(yych <= 'T') goto yy139; - } - } else { - if(yych <= 't') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy283; - goto yy139; - } else { - if(yych <= 'u') goto yy514; - if(yych <= 'z') goto yy139; - goto yy283; - } - } -yy514: - YYDEBUG(514, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'R') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'Q') goto yy140; - } - } else { - if(yych <= 'q') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'r') goto yy515; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy515: - YYDEBUG(515, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'D') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'C') goto yy141; - } - } else { - if(yych <= 'c') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 'd') goto yy516; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy516: - YYDEBUG(516, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'A') goto yy517; - if(yych != 'a') goto yy3; - } -yy517: - YYDEBUG(517, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy289; - if(yych == 'y') goto yy289; - goto yy53; -yy518: - YYDEBUG(518, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= ',') { - if(yych <= ')') goto yy136; - goto yy310; - } else { - if(yych <= '-') goto yy313; - if(yych <= '.') goto yy312; - goto yy310; - } - } - } else { - if(yych <= 'Z') { - if(yych <= '@') { - if(yych <= '9') goto yy312; - goto yy310; - } else { - if(yych == 'T') goto yy527; - goto yy139; - } - } else { - if(yych <= 's') { - if(yych <= '`') goto yy310; - goto yy139; - } else { - if(yych <= 't') goto yy527; - if(yych <= 'z') goto yy139; - goto yy310; - } - } - } -yy519: - YYDEBUG(519, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'O') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'N') goto yy139; - goto yy524; - } - } else { - if(yych <= 'n') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 'o') goto yy524; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy520: - YYDEBUG(520, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'E') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy139; - } - } else { - if(yych <= 'd') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 'e') goto yy521; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy521: - YYDEBUG(521, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'N') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy140; - } - } else { - if(yych <= 'm') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'n') goto yy522; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy522: - YYDEBUG(522, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'T') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy141; - } - } else { - if(yych <= 's') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 't') goto yy523; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy523: - YYDEBUG(523, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'G') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'H') goto yy167; - if(yych == 'h') goto yy167; - goto yy3; - } -yy524: - YYDEBUG(524, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'N') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy140; - } - } else { - if(yych <= 'm') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'n') goto yy525; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy525: - YYDEBUG(525, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'D') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'C') goto yy141; - } - } else { - if(yych <= 'c') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 'd') goto yy526; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy526: - YYDEBUG(526, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 0x1F) { - if(yych == 0x09) goto yy168; - goto yy3; - } else { - if(yych <= ' ') goto yy168; - if(yych == ')') goto yy136; - goto yy3; - } -yy527: - YYDEBUG(527, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= ',') { - if(yych <= ')') goto yy136; - goto yy310; - } else { - if(yych <= '-') goto yy313; - if(yych <= '.') goto yy312; - goto yy310; - } - } - } else { - if(yych <= 'Z') { - if(yych <= '@') { - if(yych <= '9') goto yy312; - goto yy310; - } else { - if(yych != 'E') goto yy140; - } - } else { - if(yych <= 'd') { - if(yych <= '`') goto yy310; - goto yy140; - } else { - if(yych <= 'e') goto yy528; - if(yych <= 'z') goto yy140; - goto yy310; - } - } - } -yy528: - YYDEBUG(528, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'M') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'L') goto yy141; - } - } else { - if(yych <= 'l') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 'm') goto yy529; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy529: - YYDEBUG(529, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'A') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'B') goto yy530; - if(yych != 'b') goto yy3; - } -yy530: - YYDEBUG(530, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy531; - if(yych != 'e') goto yy53; -yy531: - YYDEBUG(531, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy322; - if(yych == 'r') goto yy322; - goto yy53; -yy532: - YYDEBUG(532, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'V') { - if(yych <= '@') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych == '/') goto yy144; - goto yy3; - } - } else { - if(yych <= 'O') { - if(yych == 'C') goto yy519; - goto yy138; - } else { - if(yych <= 'P') goto yy518; - if(yych <= 'U') goto yy138; - goto yy520; - } - } - } else { - if(yych <= 'c') { - if(yych <= '_') { - if(yych <= 'Z') goto yy138; - if(yych <= '^') goto yy3; - goto yy144; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'b') goto yy143; - goto yy548; - } - } else { - if(yych <= 'u') { - if(yych == 'p') goto yy547; - goto yy143; - } else { - if(yych <= 'v') goto yy549; - if(yych <= 'z') goto yy143; - goto yy3; - } - } - } -yy533: - YYDEBUG(533, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy138; - goto yy513; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 't') goto yy542; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy534: - YYDEBUG(534, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'X') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'W') goto yy138; - goto yy511; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'x') goto yy540; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy535: - YYDEBUG(535, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'N') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy138; - goto yy507; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'n') goto yy536; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy536: - YYDEBUG(536, *YYCURSOR); - yyaccept = 5; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'D') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy283; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy283; - if(yych <= 'C') goto yy139; - goto yy508; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy283; - } else { - if(yych == 'd') goto yy537; - if(yych <= 'z') goto yy148; - goto yy283; - } - } -yy537: - YYDEBUG(537, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'A') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - goto yy509; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy140; - if(yych <= '^') goto yy3; - goto yy144; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'a') goto yy538; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy538: - YYDEBUG(538, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'Y') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'X') goto yy141; - goto yy510; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'y') goto yy539; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy539: - YYDEBUG(539, *YYCURSOR); - yyaccept = 5; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == ')') goto yy136; - if(yych <= '.') goto yy283; - goto yy144; - } else { - if(yych <= '_') { - if(yych <= '^') goto yy283; - goto yy144; - } else { - if(yych <= '`') goto yy283; - if(yych <= 'z') goto yy151; - goto yy283; - } - } -yy540: - YYDEBUG(540, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy139; - goto yy512; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 't') goto yy541; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy541: - YYDEBUG(541, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'H') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'G') goto yy140; - goto yy270; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'h') goto yy280; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy542: - YYDEBUG(542, *YYCURSOR); - yyaccept = 5; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'U') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy283; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy283; - if(yych <= 'T') goto yy139; - goto yy514; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy283; - } else { - if(yych == 'u') goto yy543; - if(yych <= 'z') goto yy148; - goto yy283; - } - } -yy543: - YYDEBUG(543, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'R') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'Q') goto yy140; - goto yy515; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'r') goto yy544; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy544: - YYDEBUG(544, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'D') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'C') goto yy141; - goto yy516; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'd') goto yy545; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy545: - YYDEBUG(545, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'A') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - goto yy517; - } - } else { - if(yych <= '`') { - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych <= 'a') goto yy546; - if(yych <= 'z') goto yy151; - goto yy3; - } - } -yy546: - YYDEBUG(546, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy289; - if(yych == 'y') goto yy302; - goto yy152; -yy547: - YYDEBUG(547, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= '-') { - if(yych <= ')') goto yy136; - if(yych <= ',') goto yy310; - goto yy313; - } else { - if(yych == '/') goto yy144; - goto yy312; - } - } - } else { - if(yych <= '^') { - if(yych <= 'S') { - if(yych <= '@') goto yy310; - goto yy139; - } else { - if(yych <= 'T') goto yy527; - if(yych <= 'Z') goto yy139; - goto yy310; - } - } else { - if(yych <= 's') { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy310; - goto yy148; - } else { - if(yych <= 't') goto yy556; - if(yych <= 'z') goto yy148; - goto yy310; - } - } - } -yy548: - YYDEBUG(548, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'O') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'N') goto yy139; - goto yy524; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'o') goto yy553; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy549: - YYDEBUG(549, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'E') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy139; - goto yy521; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'e') goto yy550; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy550: - YYDEBUG(550, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'N') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy140; - goto yy522; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'n') goto yy551; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy551: - YYDEBUG(551, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy141; - goto yy523; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 't') goto yy552; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy552: - YYDEBUG(552, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'H') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= 'G') goto yy3; - goto yy167; - } - } else { - if(yych <= '`') { - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'h') goto yy254; - if(yych <= 'z') goto yy151; - goto yy3; - } - } -yy553: - YYDEBUG(553, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'N') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy140; - goto yy525; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'n') goto yy554; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy554: - YYDEBUG(554, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'D') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'C') goto yy141; - goto yy526; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'd') goto yy555; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy555: - YYDEBUG(555, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ')') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy168; - goto yy3; - } else { - if(yych <= ' ') goto yy168; - if(yych <= '(') goto yy3; - goto yy136; - } - } else { - if(yych <= '^') { - if(yych == '/') goto yy144; - goto yy3; - } else { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy151; - goto yy3; - } - } -yy556: - YYDEBUG(556, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= '-') { - if(yych <= ')') goto yy136; - if(yych <= ',') goto yy310; - goto yy313; - } else { - if(yych == '/') goto yy144; - goto yy312; - } - } - } else { - if(yych <= '^') { - if(yych <= 'D') { - if(yych <= '@') goto yy310; - goto yy140; - } else { - if(yych <= 'E') goto yy528; - if(yych <= 'Z') goto yy140; - goto yy310; - } - } else { - if(yych <= 'd') { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy310; - goto yy149; - } else { - if(yych <= 'e') goto yy557; - if(yych <= 'z') goto yy149; - goto yy310; - } - } - } -yy557: - YYDEBUG(557, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'M') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'L') goto yy141; - goto yy529; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'm') goto yy558; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy558: - YYDEBUG(558, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'B') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= 'A') goto yy3; - goto yy530; - } - } else { - if(yych <= '`') { - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'b') goto yy559; - if(yych <= 'z') goto yy151; - goto yy3; - } - } -yy559: - YYDEBUG(559, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy531; - if(yych != 'e') goto yy152; - YYDEBUG(560, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy322; - if(yych == 'r') goto yy492; - goto yy152; -yy561: - YYDEBUG(561, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'G') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'F') goto yy138; - goto yy569; - } - } else { - if(yych <= 'f') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'g') goto yy569; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy562: - YYDEBUG(562, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'R') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'Q') goto yy138; - goto yy566; - } - } else { - if(yych <= 'q') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'r') goto yy566; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy563: - YYDEBUG(563, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'O') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'N') goto yy138; - } - } else { - if(yych <= 'n') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'o') goto yy564; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy564: - YYDEBUG(564, *YYCURSOR); - ++YYCURSOR; - if((yych = *YYCURSOR) <= '@') { - if(yych == ')') goto yy136; - } else { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy565; - if(yych <= 'z') goto yy139; - } -yy565: - YYDEBUG(565, *YYCURSOR); -#line 1350 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("ago"); - TIMELIB_INIT; - s->time->relative.y = 0 - s->time->relative.y; - s->time->relative.m = 0 - s->time->relative.m; - s->time->relative.d = 0 - s->time->relative.d; - s->time->relative.h = 0 - s->time->relative.h; - s->time->relative.i = 0 - s->time->relative.i; - s->time->relative.s = 0 - s->time->relative.s; - s->time->relative.weekday = 0 - s->time->relative.weekday; - if (s->time->have_special_relative && s->time->special.type == TIMELIB_SPECIAL_WEEKDAY) { - s->time->special.amount = 0 - s->time->special.amount; - } - TIMELIB_DEINIT; - return TIMELIB_AGO; - } -#line 9924 "ext/date/lib/parse_date.c" -yy566: - YYDEBUG(566, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= ',') { - if(yych <= ')') goto yy136; - goto yy310; - } else { - if(yych <= '-') goto yy313; - if(yych <= '.') goto yy312; - goto yy310; - } - } - } else { - if(yych <= 'Z') { - if(yych <= '@') { - if(yych <= '9') goto yy312; - goto yy310; - } else { - if(yych != 'I') goto yy139; - } - } else { - if(yych <= 'h') { - if(yych <= '`') goto yy310; - goto yy139; - } else { - if(yych <= 'i') goto yy567; - if(yych <= 'z') goto yy139; - goto yy310; - } - } - } -yy567: - YYDEBUG(567, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'L') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'K') goto yy140; - } - } else { - if(yych <= 'k') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'l') goto yy568; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy568: - YYDEBUG(568, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ',') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy312; - goto yy310; - } else { - if(yych <= ' ') goto yy312; - if(yych == ')') goto yy136; - goto yy310; - } - } else { - if(yych <= '@') { - if(yych == '/') goto yy310; - if(yych <= '9') goto yy312; - goto yy310; - } else { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy310; - if(yych <= 'z') goto yy141; - goto yy310; - } - } -yy569: - YYDEBUG(569, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= ',') { - if(yych <= ')') goto yy136; - goto yy310; - } else { - if(yych <= '-') goto yy313; - if(yych <= '.') goto yy312; - goto yy310; - } - } - } else { - if(yych <= 'Z') { - if(yych <= '@') { - if(yych <= '9') goto yy312; - goto yy310; - } else { - if(yych != 'U') goto yy139; - } - } else { - if(yych <= 't') { - if(yych <= '`') goto yy310; - goto yy139; - } else { - if(yych <= 'u') goto yy570; - if(yych <= 'z') goto yy139; - goto yy310; - } - } - } -yy570: - YYDEBUG(570, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'S') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'R') goto yy140; - } - } else { - if(yych <= 'r') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 's') goto yy571; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy571: - YYDEBUG(571, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'T') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy141; - } - } else { - if(yych <= 's') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 't') goto yy572; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy572: - YYDEBUG(572, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= '.') { - if(yych <= ')') goto yy136; - if(yych <= ',') goto yy310; - goto yy312; - } else { - if(yych <= '/') goto yy310; - if(yych <= '9') goto yy312; - goto yy310; - } - } -yy573: - YYDEBUG(573, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'G') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'F') goto yy138; - goto yy569; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'g') goto yy580; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy574: - YYDEBUG(574, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'R') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'Q') goto yy138; - goto yy566; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'r') goto yy577; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy575: - YYDEBUG(575, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'O') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'N') goto yy138; - goto yy564; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'o') goto yy576; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy576: - YYDEBUG(576, *YYCURSOR); - yyaccept = 10; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '@') { - if(yych <= ')') { - if(yych <= '(') goto yy565; - goto yy136; - } else { - if(yych == '/') goto yy144; - goto yy565; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy139; - if(yych <= '^') goto yy565; - goto yy144; - } else { - if(yych <= '`') goto yy565; - if(yych <= 'z') goto yy148; - goto yy565; - } - } -yy577: - YYDEBUG(577, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= '-') { - if(yych <= ')') goto yy136; - if(yych <= ',') goto yy310; - goto yy313; - } else { - if(yych == '/') goto yy144; - goto yy312; - } - } - } else { - if(yych <= '^') { - if(yych <= 'H') { - if(yych <= '@') goto yy310; - goto yy139; - } else { - if(yych <= 'I') goto yy567; - if(yych <= 'Z') goto yy139; - goto yy310; - } - } else { - if(yych <= 'h') { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy310; - goto yy148; - } else { - if(yych <= 'i') goto yy578; - if(yych <= 'z') goto yy148; - goto yy310; - } - } - } -yy578: - YYDEBUG(578, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'L') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'K') goto yy140; - goto yy568; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'l') goto yy579; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy579: - YYDEBUG(579, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= ' ') { - if(yych == 0x09) goto yy312; - if(yych <= 0x1F) goto yy310; - goto yy312; - } else { - if(yych == ')') goto yy136; - if(yych <= ',') goto yy310; - goto yy312; - } - } else { - if(yych <= 'Z') { - if(yych <= '/') goto yy144; - if(yych <= '9') goto yy312; - if(yych <= '@') goto yy310; - goto yy141; - } else { - if(yych <= '_') { - if(yych <= '^') goto yy310; - goto yy144; - } else { - if(yych <= '`') goto yy310; - if(yych <= 'z') goto yy150; - goto yy310; - } - } - } -yy580: - YYDEBUG(580, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= '-') { - if(yych <= ')') goto yy136; - if(yych <= ',') goto yy310; - goto yy313; - } else { - if(yych == '/') goto yy144; - goto yy312; - } - } - } else { - if(yych <= '^') { - if(yych <= 'T') { - if(yych <= '@') goto yy310; - goto yy139; - } else { - if(yych <= 'U') goto yy570; - if(yych <= 'Z') goto yy139; - goto yy310; - } - } else { - if(yych <= 't') { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy310; - goto yy148; - } else { - if(yych <= 'u') goto yy581; - if(yych <= 'z') goto yy148; - goto yy310; - } - } - } -yy581: - YYDEBUG(581, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'S') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'R') goto yy140; - goto yy571; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 's') goto yy582; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy582: - YYDEBUG(582, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy141; - goto yy572; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 't') goto yy583; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy583: - YYDEBUG(583, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ',') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy312; - goto yy310; - } else { - if(yych <= ' ') goto yy312; - if(yych == ')') goto yy136; - goto yy310; - } - } else { - if(yych <= '^') { - if(yych == '/') goto yy144; - if(yych <= '9') goto yy312; - goto yy310; - } else { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy310; - if(yych <= 'z') goto yy151; - goto yy310; - } - } -yy584: - YYDEBUG(584, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'B') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'A') goto yy138; - goto yy598; - } - } else { - if(yych <= 'a') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'b') goto yy598; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy585: - YYDEBUG(585, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'R') { - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych == 'F') goto yy595; - if(yych <= 'Q') goto yy138; - goto yy594; - } - } else { - if(yych <= 'f') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - if(yych <= 'e') goto yy138; - goto yy595; - } else { - if(yych == 'r') goto yy594; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy586: - YYDEBUG(586, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'T') goto yy138; - goto yy591; - } - } else { - if(yych <= 't') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'u') goto yy591; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy587: - YYDEBUG(587, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'I') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'H') goto yy138; - } - } else { - if(yych <= 'h') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'i') goto yy588; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy588: - YYDEBUG(588, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'D') { - if(yych <= ')') { - if(yych <= '(') goto yy283; - goto yy136; - } else { - if(yych <= '@') goto yy283; - if(yych <= 'C') goto yy139; - } - } else { - if(yych <= 'c') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy283; - goto yy139; - } else { - if(yych <= 'd') goto yy589; - if(yych <= 'z') goto yy139; - goto yy283; - } - } -yy589: - YYDEBUG(589, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'A') { - if(yych == ')') goto yy136; - if(yych <= '@') goto yy3; - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - goto yy3; - } else { - if(yych <= 'a') goto yy590; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy590: - YYDEBUG(590, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'Y') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'X') goto yy141; - goto yy510; - } - } else { - if(yych <= 'x') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 'y') goto yy510; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy591: - YYDEBUG(591, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'R') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'Q') goto yy139; - } - } else { - if(yych <= 'q') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 'r') goto yy592; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy592: - YYDEBUG(592, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'T') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy140; - } - } else { - if(yych <= 's') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 't') goto yy593; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy593: - YYDEBUG(593, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'H') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'G') goto yy141; - goto yy526; - } - } else { - if(yych <= 'g') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 'h') goto yy526; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy594: - YYDEBUG(594, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'S') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'R') goto yy139; - goto yy597; - } - } else { - if(yych <= 'r') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 's') goto yy597; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy595: - YYDEBUG(595, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'T') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy139; - } - } else { - if(yych <= 's') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 't') goto yy596; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy596: - YYDEBUG(596, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'H') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'G') goto yy140; - goto yy270; - } - } else { - if(yych <= 'g') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'h') goto yy270; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy597: - YYDEBUG(597, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'T') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy140; - goto yy270; - } - } else { - if(yych <= 's') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 't') goto yy270; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy598: - YYDEBUG(598, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= ',') { - if(yych <= ')') goto yy136; - goto yy310; - } else { - if(yych <= '-') goto yy313; - if(yych <= '.') goto yy312; - goto yy310; - } - } - } else { - if(yych <= 'Z') { - if(yych <= '@') { - if(yych <= '9') goto yy312; - goto yy310; - } else { - if(yych != 'R') goto yy139; - } - } else { - if(yych <= 'q') { - if(yych <= '`') goto yy310; - goto yy139; - } else { - if(yych <= 'r') goto yy599; - if(yych <= 'z') goto yy139; - goto yy310; - } - } - } -yy599: - YYDEBUG(599, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'T') goto yy140; - } - } else { - if(yych <= 't') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'u') goto yy600; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy600: - YYDEBUG(600, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'A') { - if(yych == ')') goto yy136; - if(yych <= '@') goto yy3; - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - goto yy3; - } else { - if(yych <= 'a') goto yy601; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy601: - YYDEBUG(601, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'Q') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'R') goto yy602; - if(yych != 'r') goto yy3; - } -yy602: - YYDEBUG(602, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy322; - if(yych == 'y') goto yy322; - goto yy53; -yy603: - YYDEBUG(603, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'B') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'A') goto yy138; - goto yy598; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'b') goto yy617; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy604: - YYDEBUG(604, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'R') { - if(yych <= '/') { - if(yych == ')') goto yy136; - if(yych <= '.') goto yy3; - goto yy144; - } else { - if(yych <= 'E') { - if(yych <= '@') goto yy3; - goto yy138; - } else { - if(yych <= 'F') goto yy595; - if(yych <= 'Q') goto yy138; - goto yy594; - } - } - } else { - if(yych <= 'e') { - if(yych <= '^') { - if(yych <= 'Z') goto yy138; - goto yy3; - } else { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy3; - goto yy143; - } - } else { - if(yych <= 'q') { - if(yych <= 'f') goto yy614; - goto yy143; - } else { - if(yych <= 'r') goto yy613; - if(yych <= 'z') goto yy143; - goto yy3; - } - } - } -yy605: - YYDEBUG(605, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'U') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'T') goto yy138; - goto yy591; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'u') goto yy610; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy606: - YYDEBUG(606, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'I') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'H') goto yy138; - goto yy588; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'i') goto yy607; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy607: - YYDEBUG(607, *YYCURSOR); - yyaccept = 5; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'D') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy283; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy283; - if(yych <= 'C') goto yy139; - goto yy589; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy283; - } else { - if(yych == 'd') goto yy608; - if(yych <= 'z') goto yy148; - goto yy283; - } - } -yy608: - YYDEBUG(608, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'A') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - goto yy590; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy140; - if(yych <= '^') goto yy3; - goto yy144; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'a') goto yy609; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy609: - YYDEBUG(609, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'Y') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'X') goto yy141; - goto yy510; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'y') goto yy539; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy610: - YYDEBUG(610, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'R') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'Q') goto yy139; - goto yy592; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'r') goto yy611; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy611: - YYDEBUG(611, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy140; - goto yy593; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 't') goto yy612; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy612: - YYDEBUG(612, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'H') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'G') goto yy141; - goto yy526; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'h') goto yy555; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy613: - YYDEBUG(613, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'S') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'R') goto yy139; - goto yy597; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 's') goto yy616; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy614: - YYDEBUG(614, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy139; - goto yy596; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 't') goto yy615; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy615: - YYDEBUG(615, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'H') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'G') goto yy140; - goto yy270; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'h') goto yy280; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy616: - YYDEBUG(616, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy140; - goto yy270; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 't') goto yy280; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy617: - YYDEBUG(617, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= '-') { - if(yych <= ')') goto yy136; - if(yych <= ',') goto yy310; - goto yy313; - } else { - if(yych == '/') goto yy144; - goto yy312; - } - } - } else { - if(yych <= '^') { - if(yych <= 'Q') { - if(yych <= '@') goto yy310; - goto yy139; - } else { - if(yych <= 'R') goto yy599; - if(yych <= 'Z') goto yy139; - goto yy310; - } - } else { - if(yych <= 'q') { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy310; - goto yy148; - } else { - if(yych <= 'r') goto yy618; - if(yych <= 'z') goto yy148; - goto yy310; - } - } - } -yy618: - YYDEBUG(618, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'U') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'T') goto yy140; - goto yy600; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'u') goto yy619; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy619: - YYDEBUG(619, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'A') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - goto yy601; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy141; - if(yych <= '^') goto yy3; - goto yy144; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'a') goto yy620; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy620: - YYDEBUG(620, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'R') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= 'Q') goto yy3; - goto yy602; - } - } else { - if(yych <= '`') { - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'r') goto yy621; - if(yych <= 'z') goto yy151; - goto yy3; - } - } -yy621: - YYDEBUG(621, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy322; - if(yych == 'y') goto yy492; - goto yy152; -yy622: - YYDEBUG(622, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'N') { - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych == 'L') goto yy629; - if(yych <= 'M') goto yy138; - goto yy628; - } - } else { - if(yych <= 'l') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - if(yych <= 'k') goto yy138; - goto yy629; - } else { - if(yych == 'n') goto yy628; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy623: - YYDEBUG(623, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'N') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy138; - } - } else { - if(yych <= 'm') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'n') goto yy624; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy624: - YYDEBUG(624, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= ',') { - if(yych <= ')') goto yy136; - goto yy310; - } else { - if(yych <= '-') goto yy313; - if(yych <= '.') goto yy312; - goto yy310; - } - } - } else { - if(yych <= 'Z') { - if(yych <= '@') { - if(yych <= '9') goto yy312; - goto yy310; - } else { - if(yych != 'U') goto yy139; - } - } else { - if(yych <= 't') { - if(yych <= '`') goto yy310; - goto yy139; - } else { - if(yych <= 'u') goto yy625; - if(yych <= 'z') goto yy139; - goto yy310; - } - } - } -yy625: - YYDEBUG(625, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'A') { - if(yych == ')') goto yy136; - if(yych <= '@') goto yy3; - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - goto yy3; - } else { - if(yych <= 'a') goto yy626; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy626: - YYDEBUG(626, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'R') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'Q') goto yy141; - } - } else { - if(yych <= 'q') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 'r') goto yy627; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy627: - YYDEBUG(627, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'X') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'Y') goto yy322; - if(yych == 'y') goto yy322; - goto yy3; - } -yy628: - YYDEBUG(628, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= ',') { - if(yych <= ')') goto yy136; - goto yy310; - } else { - if(yych <= '-') goto yy313; - if(yych <= '.') goto yy312; - goto yy310; - } - } - } else { - if(yych <= 'Z') { - if(yych <= '@') { - if(yych <= '9') goto yy312; - goto yy310; - } else { - if(yych == 'E') goto yy630; - goto yy139; - } - } else { - if(yych <= 'd') { - if(yych <= '`') goto yy310; - goto yy139; - } else { - if(yych <= 'e') goto yy630; - if(yych <= 'z') goto yy139; - goto yy310; - } - } - } -yy629: - YYDEBUG(629, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= ',') { - if(yych <= ')') goto yy136; - goto yy310; - } else { - if(yych <= '-') goto yy313; - if(yych <= '.') goto yy312; - goto yy310; - } - } - } else { - if(yych <= 'Z') { - if(yych <= '@') { - if(yych <= '9') goto yy312; - goto yy310; - } else { - if(yych != 'Y') goto yy139; - } - } else { - if(yych <= 'x') { - if(yych <= '`') goto yy310; - goto yy139; - } else { - if(yych <= 'y') goto yy630; - if(yych <= 'z') goto yy139; - goto yy310; - } - } - } -yy630: - YYDEBUG(630, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ',') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy312; - goto yy310; - } else { - if(yych <= ' ') goto yy312; - if(yych == ')') goto yy136; - goto yy310; - } - } else { - if(yych <= '@') { - if(yych == '/') goto yy310; - if(yych <= '9') goto yy312; - goto yy310; - } else { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy310; - if(yych <= 'z') goto yy140; - goto yy310; - } - } -yy631: - YYDEBUG(631, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'N') { - if(yych <= '/') { - if(yych == ')') goto yy136; - if(yych <= '.') goto yy3; - goto yy144; - } else { - if(yych <= 'K') { - if(yych <= '@') goto yy3; - goto yy138; - } else { - if(yych <= 'L') goto yy629; - if(yych <= 'M') goto yy138; - goto yy628; - } - } - } else { - if(yych <= 'k') { - if(yych <= '^') { - if(yych <= 'Z') goto yy138; - goto yy3; - } else { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy3; - goto yy143; - } - } else { - if(yych <= 'm') { - if(yych <= 'l') goto yy638; - goto yy143; - } else { - if(yych <= 'n') goto yy637; - if(yych <= 'z') goto yy143; - goto yy3; - } - } - } -yy632: - YYDEBUG(632, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'N') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy138; - goto yy624; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'n') goto yy633; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy633: - YYDEBUG(633, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= '-') { - if(yych <= ')') goto yy136; - if(yych <= ',') goto yy310; - goto yy313; - } else { - if(yych == '/') goto yy144; - goto yy312; - } - } - } else { - if(yych <= '^') { - if(yych <= 'T') { - if(yych <= '@') goto yy310; - goto yy139; - } else { - if(yych <= 'U') goto yy625; - if(yych <= 'Z') goto yy139; - goto yy310; - } - } else { - if(yych <= 't') { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy310; - goto yy148; - } else { - if(yych <= 'u') goto yy634; - if(yych <= 'z') goto yy148; - goto yy310; - } - } - } -yy634: - YYDEBUG(634, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'A') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - goto yy626; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy140; - if(yych <= '^') goto yy3; - goto yy144; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'a') goto yy635; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy635: - YYDEBUG(635, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'R') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'Q') goto yy141; - goto yy627; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'r') goto yy636; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy636: - YYDEBUG(636, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'Y') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= 'X') goto yy3; - goto yy322; - } - } else { - if(yych <= '`') { - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'y') goto yy492; - if(yych <= 'z') goto yy151; - goto yy3; - } - } -yy637: - YYDEBUG(637, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= '-') { - if(yych <= ')') goto yy136; - if(yych <= ',') goto yy310; - goto yy313; - } else { - if(yych == '/') goto yy144; - goto yy312; - } - } - } else { - if(yych <= '^') { - if(yych <= 'D') { - if(yych <= '@') goto yy310; - goto yy139; - } else { - if(yych <= 'E') goto yy630; - if(yych <= 'Z') goto yy139; - goto yy310; - } - } else { - if(yych <= 'd') { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy310; - goto yy148; - } else { - if(yych <= 'e') goto yy639; - if(yych <= 'z') goto yy148; - goto yy310; - } - } - } -yy638: - YYDEBUG(638, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= '-') { - if(yych <= ')') goto yy136; - if(yych <= ',') goto yy310; - goto yy313; - } else { - if(yych == '/') goto yy144; - goto yy312; - } - } - } else { - if(yych <= '^') { - if(yych <= 'X') { - if(yych <= '@') goto yy310; - goto yy139; - } else { - if(yych <= 'Y') goto yy630; - if(yych <= 'Z') goto yy139; - goto yy310; - } - } else { - if(yych <= 'x') { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy310; - goto yy148; - } else { - if(yych <= 'y') goto yy639; - if(yych <= 'z') goto yy148; - goto yy310; - } - } - } -yy639: - YYDEBUG(639, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= ' ') { - if(yych == 0x09) goto yy312; - if(yych <= 0x1F) goto yy310; - goto yy312; - } else { - if(yych == ')') goto yy136; - if(yych <= ',') goto yy310; - goto yy312; - } - } else { - if(yych <= 'Z') { - if(yych <= '/') goto yy144; - if(yych <= '9') goto yy312; - if(yych <= '@') goto yy310; - goto yy140; - } else { - if(yych <= '_') { - if(yych <= '^') goto yy310; - goto yy144; - } else { - if(yych <= '`') goto yy310; - if(yych <= 'z') goto yy149; - goto yy310; - } - } - } -yy640: - YYDEBUG(640, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= ' ') { - if(yych == 0x09) goto yy312; - if(yych <= 0x1F) goto yy3; - goto yy312; - } else { - if(yych == ')') goto yy136; - if(yych <= ',') goto yy3; - goto yy312; - } - } else { - if(yych <= 'H') { - if(yych <= '/') goto yy3; - if(yych <= '9') goto yy312; - if(yych <= '@') goto yy3; - goto yy138; - } else { - if(yych <= 'Z') { - if(yych >= 'J') goto yy138; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy138; - goto yy3; - } - } - } -yy641: - YYDEBUG(641, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ',') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy312; - goto yy3; - } else { - if(yych <= ' ') goto yy312; - if(yych == ')') goto yy136; - goto yy3; - } - } else { - if(yych <= '@') { - if(yych == '/') goto yy3; - if(yych <= '9') goto yy312; - goto yy3; - } else { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy642: - YYDEBUG(642, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= ' ') { - if(yych == 0x09) goto yy312; - if(yych <= 0x1F) goto yy3; - goto yy312; - } else { - if(yych == ')') goto yy136; - if(yych <= ',') goto yy3; - goto yy312; - } - } else { - if(yych <= 'H') { - if(yych <= '/') goto yy3; - if(yych <= '9') goto yy312; - if(yych <= '@') goto yy3; - goto yy138; - } else { - if(yych <= 'Z') { - if(yych >= 'J') goto yy138; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy138; - goto yy3; - } - } - } - YYDEBUG(643, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= ' ') { - if(yych == 0x09) goto yy312; - if(yych <= 0x1F) goto yy3; - goto yy312; - } else { - if(yych == ')') goto yy136; - if(yych <= ',') goto yy3; - goto yy312; - } - } else { - if(yych <= 'H') { - if(yych <= '/') goto yy3; - if(yych <= '9') goto yy312; - if(yych <= '@') goto yy3; - goto yy139; - } else { - if(yych <= 'Z') { - if(yych >= 'J') goto yy139; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy139; - goto yy3; - } - } - } - YYDEBUG(644, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ',') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy312; - goto yy3; - } else { - if(yych <= ' ') goto yy312; - if(yych == ')') goto yy136; - goto yy3; - } - } else { - if(yych <= '@') { - if(yych == '/') goto yy3; - if(yych <= '9') goto yy312; - goto yy3; - } else { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy645: - YYDEBUG(645, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ',') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy312; - goto yy3; - } else { - if(yych <= ' ') goto yy312; - if(yych == ')') goto yy136; - goto yy3; - } - } else { - if(yych <= '@') { - if(yych == '/') goto yy3; - if(yych <= '9') goto yy312; - goto yy3; - } else { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy646: - YYDEBUG(646, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= ' ') { - if(yych == 0x09) goto yy312; - if(yych <= 0x1F) goto yy3; - goto yy312; - } else { - if(yych == ')') goto yy136; - if(yych <= ',') goto yy3; - goto yy312; - } - } else { - if(yych <= 'H') { - if(yych <= '/') goto yy3; - if(yych <= '9') goto yy312; - if(yych <= '@') goto yy3; - goto yy138; - } else { - if(yych <= 'Z') { - if(yych <= 'I') goto yy641; - goto yy138; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy138; - goto yy3; - } - } - } -yy647: - YYDEBUG(647, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy649; - if(yych <= '0') goto yy897; - if(yych <= '1') goto yy898; - if(yych <= '9') goto yy899; - goto yy649; -yy648: - YYDEBUG(648, *YYCURSOR); - ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 13) YYFILL(13); - yych = *YYCURSOR; -yy649: - YYDEBUG(649, *YYCURSOR); - YYDEBUG(-1, yych); - switch(yych) { - case 0x09: - case ' ': goto yy648; - case '-': - case '.': goto yy748; - case 'A': - case 'a': goto yy667; - case 'D': - case 'd': goto yy653; - case 'F': - case 'f': goto yy654; - case 'H': - case 'h': goto yy60; - case 'I': goto yy662; - case 'J': - case 'j': goto yy666; - case 'M': - case 'm': goto yy652; - case 'N': - case 'n': goto yy669; - case 'O': - case 'o': goto yy668; - case 'P': - case 'p': goto yy671; - case 'S': - case 's': goto yy650; - case 'T': - case 't': goto yy65; - case 'V': goto yy664; - case 'W': - case 'w': goto yy62; - case 'X': goto yy665; - case 'Y': - case 'y': goto yy64; - default: goto yy53; - } -yy650: - YYDEBUG(650, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych <= 'D') { - if(yych == 'A') goto yy123; - goto yy53; - } else { - if(yych <= 'E') goto yy1196; - if(yych <= 'T') goto yy53; - goto yy122; - } - } else { - if(yych <= 'd') { - if(yych == 'a') goto yy123; - goto yy53; - } else { - if(yych <= 'e') goto yy1196; - if(yych == 'u') goto yy122; - goto yy53; - } - } -yy651: - YYDEBUG(651, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '`') { - if(yych <= 'D') { - if(yych == 'A') goto yy123; - goto yy53; - } else { - if(yych <= 'E') goto yy1196; - if(yych == 'U') goto yy122; - goto yy53; - } - } else { - if(yych <= 'e') { - if(yych <= 'a') goto yy123; - if(yych <= 'd') goto yy53; - goto yy1196; - } else { - if(yych <= 's') goto yy53; - if(yych <= 't') goto yy894; - if(yych <= 'u') goto yy122; - goto yy53; - } - } -yy652: - YYDEBUG(652, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'O') { - if(yych <= 'H') { - if(yych == 'A') goto yy763; - goto yy53; - } else { - if(yych <= 'I') goto yy114; - if(yych <= 'N') goto yy53; - goto yy113; - } - } else { - if(yych <= 'h') { - if(yych == 'a') goto yy763; - goto yy53; - } else { - if(yych <= 'i') goto yy114; - if(yych == 'o') goto yy113; - goto yy53; - } - } -yy653: - YYDEBUG(653, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'E') { - if(yych == 'A') goto yy110; - if(yych <= 'D') goto yy53; - goto yy750; - } else { - if(yych <= 'a') { - if(yych <= '`') goto yy53; - goto yy110; - } else { - if(yych == 'e') goto yy750; - goto yy53; - } - } -yy654: - YYDEBUG(654, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'R') { - if(yych <= 'N') { - if(yych == 'E') goto yy766; - goto yy53; - } else { - if(yych <= 'O') goto yy83; - if(yych <= 'Q') goto yy53; - goto yy82; - } - } else { - if(yych <= 'n') { - if(yych == 'e') goto yy766; - goto yy53; - } else { - if(yych <= 'o') goto yy83; - if(yych == 'r') goto yy82; - goto yy53; - } - } -yy655: - YYDEBUG(655, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych == 'H') goto yy66; - if(yych <= 'T') goto yy53; - goto yy67; - } else { - if(yych <= 'h') { - if(yych <= 'g') goto yy53; - goto yy1195; - } else { - if(yych == 'u') goto yy67; - goto yy53; - } - } -yy656: - YYDEBUG(656, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == '-') goto yy901; - if(yych <= '/') goto yy57; - if(yych <= '9') goto yy900; - goto yy57; -yy657: - YYDEBUG(657, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'c') { - if(yych == 'O') goto yy701; - goto yy53; - } else { - if(yych <= 'd') goto yy894; - if(yych == 'o') goto yy701; - goto yy53; - } -yy658: - YYDEBUG(658, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'd') goto yy894; - goto yy53; -yy659: - YYDEBUG(659, *YYCURSOR); - yych = *++YYCURSOR; - YYDEBUG(-1, yych); - switch(yych) { - case '0': - case '1': - case '2': goto yy834; - case '3': goto yy836; - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy837; - case 'A': - case 'a': goto yy841; - case 'D': - case 'd': goto yy845; - case 'F': - case 'f': goto yy839; - case 'J': - case 'j': goto yy838; - case 'M': - case 'm': goto yy840; - case 'N': - case 'n': goto yy844; - case 'O': - case 'o': goto yy843; - case 'S': - case 's': goto yy842; - default: goto yy53; - } -yy660: - YYDEBUG(660, *YYCURSOR); - yych = *++YYCURSOR; - YYDEBUG(-1, yych); - switch(yych) { - case '0': goto yy784; - case '1': goto yy785; - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy786; - case 'A': - case 'a': goto yy790; - case 'D': - case 'd': goto yy794; - case 'F': - case 'f': goto yy788; - case 'J': - case 'j': goto yy787; - case 'M': - case 'm': goto yy789; - case 'N': - case 'n': goto yy793; - case 'O': - case 'o': goto yy792; - case 'S': - case 's': goto yy791; - default: goto yy749; - } -yy661: - YYDEBUG(661, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '1') { - if(yych <= '/') goto yy749; - if(yych <= '0') goto yy739; - goto yy740; - } else { - if(yych <= '5') goto yy741; - if(yych <= '9') goto yy742; - goto yy749; - } -yy662: - YYDEBUG(662, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - if(yych <= '.') goto yy703; - } - } else { - if(yych <= 'U') { - if(yych <= '9') goto yy705; - if(yych == 'I') goto yy738; - } else { - if(yych == 'W') goto yy663; - if(yych <= 'X') goto yy711; - } - } -yy663: - YYDEBUG(663, *YYCURSOR); -#line 1193 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("datenoyearrev"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->d = timelib_get_nr((char **) &ptr, 2); - timelib_skip_day_suffix((char **) &ptr); - s->time->m = timelib_get_month((char **) &ptr); - TIMELIB_DEINIT; - return TIMELIB_DATE_TEXT; - } -#line 12393 "ext/date/lib/parse_date.c" -yy664: - YYDEBUG(664, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ',') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy663; - goto yy703; - } else { - if(yych == ' ') goto yy703; - goto yy663; - } - } else { - if(yych <= '9') { - if(yych <= '.') goto yy703; - if(yych <= '/') goto yy663; - goto yy705; - } else { - if(yych == 'I') goto yy736; - goto yy663; - } - } -yy665: - YYDEBUG(665, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ',') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy663; - goto yy703; - } else { - if(yych == ' ') goto yy703; - goto yy663; - } - } else { - if(yych <= '9') { - if(yych <= '.') goto yy703; - if(yych <= '/') goto yy663; - goto yy705; - } else { - if(yych == 'I') goto yy735; - goto yy663; - } - } -yy666: - YYDEBUG(666, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych == 'A') goto yy728; - if(yych <= 'T') goto yy53; - goto yy727; - } else { - if(yych <= 'a') { - if(yych <= '`') goto yy53; - goto yy728; - } else { - if(yych == 'u') goto yy727; - goto yy53; - } - } -yy667: - YYDEBUG(667, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'T') { - if(yych <= 'L') { - if(yych == '.') goto yy672; - goto yy53; - } else { - if(yych <= 'M') goto yy673; - if(yych == 'P') goto yy721; - goto yy53; - } - } else { - if(yych <= 'o') { - if(yych <= 'U') goto yy720; - if(yych == 'm') goto yy673; - goto yy53; - } else { - if(yych <= 'p') goto yy721; - if(yych == 'u') goto yy720; - goto yy53; - } - } -yy668: - YYDEBUG(668, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'C') goto yy715; - if(yych == 'c') goto yy715; - goto yy53; -yy669: - YYDEBUG(669, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'O') goto yy701; - if(yych == 'o') goto yy701; - goto yy53; -yy670: - YYDEBUG(670, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy677; - if(yych <= '9') goto yy679; - goto yy53; -yy671: - YYDEBUG(671, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'L') { - if(yych != '.') goto yy53; - } else { - if(yych <= 'M') goto yy673; - if(yych == 'm') goto yy673; - goto yy53; - } -yy672: - YYDEBUG(672, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'M') goto yy673; - if(yych != 'm') goto yy53; -yy673: - YYDEBUG(673, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 0x1F) { - if(yych <= 0x00) goto yy675; - if(yych == 0x09) goto yy675; - goto yy53; - } else { - if(yych <= ' ') goto yy675; - if(yych != '.') goto yy53; - } - YYDEBUG(674, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 0x09) { - if(yych <= 0x00) goto yy675; - if(yych <= 0x08) goto yy53; - } else { - if(yych != ' ') goto yy53; - } -yy675: - YYDEBUG(675, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(676, *YYCURSOR); -#line 966 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("timetiny12 | timeshort12 | timelong12"); - TIMELIB_INIT; - TIMELIB_HAVE_TIME(); - s->time->h = timelib_get_nr((char **) &ptr, 2); - if (*ptr == ':' || *ptr == '.') { - s->time->i = timelib_get_nr((char **) &ptr, 2); - if (*ptr == ':' || *ptr == '.') { - s->time->s = timelib_get_nr((char **) &ptr, 2); - } - } - s->time->h += timelib_meridian((char **) &ptr, s->time->h); - TIMELIB_DEINIT; - return TIMELIB_TIME12; - } -#line 12550 "ext/date/lib/parse_date.c" -yy677: - YYDEBUG(677, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy680; - } else { - if(yych <= '9') goto yy694; - if(yych <= ':') goto yy680; - } -yy678: - YYDEBUG(678, *YYCURSOR); -#line 983 "ext/date/lib/parse_date.re" - { - int tz_not_found; - DEBUG_OUTPUT("timeshort24 | timelong24 | iso8601long"); - TIMELIB_INIT; - TIMELIB_HAVE_TIME(); - s->time->h = timelib_get_nr((char **) &ptr, 2); - s->time->i = timelib_get_nr((char **) &ptr, 2); - if (*ptr == ':' || *ptr == '.') { - s->time->s = timelib_get_nr((char **) &ptr, 2); - - if (*ptr == '.') { - s->time->f = timelib_get_frac_nr((char **) &ptr, 8); - } - } - - if (*ptr != '\0') { - s->time->z = timelib_get_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb); - if (tz_not_found) { - add_error(s, "The timezone could not be found in the database"); - } - } - TIMELIB_DEINIT; - return TIMELIB_TIME24_WITH_ZONE; - } -#line 12588 "ext/date/lib/parse_date.c" -yy679: - YYDEBUG(679, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '.') goto yy680; - if(yych != ':') goto yy678; -yy680: - YYDEBUG(680, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy681; - if(yych <= '6') goto yy682; - if(yych <= '9') goto yy683; - goto yy53; -yy681: - YYDEBUG(681, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '.') goto yy684; - if(yych <= '/') goto yy678; - if(yych <= '9') goto yy687; - goto yy678; -yy682: - YYDEBUG(682, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '.') goto yy684; - if(yych == '0') goto yy687; - goto yy678; -yy683: - YYDEBUG(683, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych != '.') goto yy678; -yy684: - YYDEBUG(684, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= ':') goto yy53; -yy685: - YYDEBUG(685, *YYCURSOR); - ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(686, *YYCURSOR); - if(yych <= '/') goto yy678; - if(yych <= '9') goto yy685; - goto yy678; -yy687: - YYDEBUG(687, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '@') { - if(yych <= 0x1F) { - if(yych != 0x09) goto yy678; - } else { - if(yych <= ' ') goto yy688; - if(yych == '.') goto yy684; - goto yy678; - } - } else { - if(yych <= '`') { - if(yych <= 'A') goto yy690; - if(yych == 'P') goto yy690; - goto yy678; - } else { - if(yych <= 'a') goto yy690; - if(yych == 'p') goto yy690; - goto yy678; - } - } -yy688: - YYDEBUG(688, *YYCURSOR); - ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 5) YYFILL(5); - yych = *YYCURSOR; - YYDEBUG(689, *YYCURSOR); - if(yych <= 'A') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy688; - goto yy53; - } else { - if(yych <= ' ') goto yy688; - if(yych <= '@') goto yy53; - } - } else { - if(yych <= '`') { - if(yych != 'P') goto yy53; - } else { - if(yych <= 'a') goto yy690; - if(yych != 'p') goto yy53; - } - } -yy690: - YYDEBUG(690, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'L') { - if(yych != '.') goto yy53; - } else { - if(yych <= 'M') goto yy692; - if(yych == 'm') goto yy692; - goto yy53; - } - YYDEBUG(691, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'M') goto yy692; - if(yych != 'm') goto yy53; -yy692: - YYDEBUG(692, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 0x1F) { - if(yych <= 0x00) goto yy675; - if(yych == 0x09) goto yy675; - goto yy53; - } else { - if(yych <= ' ') goto yy675; - if(yych != '.') goto yy53; - } - YYDEBUG(693, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 0x09) { - if(yych <= 0x00) goto yy675; - if(yych <= 0x08) goto yy53; - goto yy675; - } else { - if(yych == ' ') goto yy675; - goto yy53; - } -yy694: - YYDEBUG(694, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ':') { - if(yych <= ' ') { - if(yych == 0x09) goto yy695; - if(yych <= 0x1F) goto yy678; - } else { - if(yych == '.') goto yy680; - if(yych <= '9') goto yy678; - goto yy680; - } - } else { - if(yych <= 'P') { - if(yych == 'A') goto yy697; - if(yych <= 'O') goto yy678; - goto yy697; - } else { - if(yych <= 'a') { - if(yych <= '`') goto yy678; - goto yy697; - } else { - if(yych == 'p') goto yy697; - goto yy678; - } - } - } -yy695: - YYDEBUG(695, *YYCURSOR); - ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 5) YYFILL(5); - yych = *YYCURSOR; - YYDEBUG(696, *YYCURSOR); - if(yych <= 'A') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy695; - goto yy53; - } else { - if(yych <= ' ') goto yy695; - if(yych <= '@') goto yy53; - } - } else { - if(yych <= '`') { - if(yych != 'P') goto yy53; - } else { - if(yych <= 'a') goto yy697; - if(yych != 'p') goto yy53; - } - } -yy697: - YYDEBUG(697, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'L') { - if(yych != '.') goto yy53; - } else { - if(yych <= 'M') goto yy699; - if(yych == 'm') goto yy699; - goto yy53; - } - YYDEBUG(698, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'M') goto yy699; - if(yych != 'm') goto yy53; -yy699: - YYDEBUG(699, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 0x1F) { - if(yych <= 0x00) goto yy675; - if(yych == 0x09) goto yy675; - goto yy53; - } else { - if(yych <= ' ') goto yy675; - if(yych != '.') goto yy53; - } - YYDEBUG(700, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 0x09) { - if(yych <= 0x00) goto yy675; - if(yych <= 0x08) goto yy53; - goto yy675; - } else { - if(yych == ' ') goto yy675; - goto yy53; - } -yy701: - YYDEBUG(701, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'V') goto yy702; - if(yych != 'v') goto yy53; -yy702: - YYDEBUG(702, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych != 0x09) goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - } - } else { - if(yych <= 'D') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'E') goto yy707; - if(yych == 'e') goto yy707; - goto yy663; - } - } -yy703: - YYDEBUG(703, *YYCURSOR); - ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 4) YYFILL(4); - yych = *YYCURSOR; -yy704: - YYDEBUG(704, *YYCURSOR); - if(yych <= ' ') { - if(yych == 0x09) goto yy703; - if(yych <= 0x1F) goto yy53; - goto yy703; - } else { - if(yych <= '.') { - if(yych <= ',') goto yy53; - goto yy703; - } else { - if(yych <= '/') goto yy53; - if(yych >= ':') goto yy53; - } - } -yy705: - YYDEBUG(705, *YYCURSOR); - ++YYCURSOR; - if((yych = *YYCURSOR) <= '/') goto yy706; - if(yych <= '9') goto yy712; -yy706: - YYDEBUG(706, *YYCURSOR); -#line 1127 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("datefull"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->d = timelib_get_nr((char **) &ptr, 2); - timelib_skip_day_suffix((char **) &ptr); - s->time->m = timelib_get_month((char **) &ptr); - s->time->y = timelib_get_nr((char **) &ptr, 4); - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_DATE_FULL; - } -#line 12869 "ext/date/lib/parse_date.c" -yy707: - YYDEBUG(707, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'M') goto yy708; - if(yych != 'm') goto yy53; -yy708: - YYDEBUG(708, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'B') goto yy709; - if(yych != 'b') goto yy53; -yy709: - YYDEBUG(709, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy710; - if(yych != 'e') goto yy53; -yy710: - YYDEBUG(710, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy711; - if(yych != 'r') goto yy53; -yy711: - YYDEBUG(711, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ' ') { - if(yych == 0x09) goto yy703; - if(yych <= 0x1F) goto yy663; - goto yy703; - } else { - if(yych <= '.') { - if(yych <= ',') goto yy663; - goto yy703; - } else { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } - } -yy712: - YYDEBUG(712, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy706; - if(yych >= ':') goto yy706; -yy713: - YYDEBUG(713, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy706; - if(yych >= ':') goto yy706; - YYDEBUG(714, *YYCURSOR); - yych = *++YYCURSOR; - goto yy706; -yy715: - YYDEBUG(715, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy716; - if(yych != 't') goto yy53; -yy716: - YYDEBUG(716, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - goto yy703; - } - } else { - if(yych <= 'N') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'O') goto yy717; - if(yych != 'o') goto yy663; - } - } -yy717: - YYDEBUG(717, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'B') goto yy718; - if(yych != 'b') goto yy53; -yy718: - YYDEBUG(718, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy719; - if(yych != 'e') goto yy53; -yy719: - YYDEBUG(719, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy711; - if(yych == 'r') goto yy711; - goto yy53; -yy720: - YYDEBUG(720, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'G') goto yy724; - if(yych == 'g') goto yy724; - goto yy53; -yy721: - YYDEBUG(721, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy722; - if(yych != 'r') goto yy53; -yy722: - YYDEBUG(722, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - goto yy703; - } - } else { - if(yych <= 'H') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'I') goto yy723; - if(yych != 'i') goto yy663; - } - } -yy723: - YYDEBUG(723, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'L') goto yy711; - if(yych == 'l') goto yy711; - goto yy53; -yy724: - YYDEBUG(724, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - goto yy703; - } - } else { - if(yych <= 'T') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'U') goto yy725; - if(yych != 'u') goto yy663; - } - } -yy725: - YYDEBUG(725, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'S') goto yy726; - if(yych != 's') goto yy53; -yy726: - YYDEBUG(726, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy711; - if(yych == 't') goto yy711; - goto yy53; -yy727: - YYDEBUG(727, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'N') { - if(yych == 'L') goto yy734; - if(yych <= 'M') goto yy53; - goto yy733; - } else { - if(yych <= 'l') { - if(yych <= 'k') goto yy53; - goto yy734; - } else { - if(yych == 'n') goto yy733; - goto yy53; - } - } -yy728: - YYDEBUG(728, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'N') goto yy729; - if(yych != 'n') goto yy53; -yy729: - YYDEBUG(729, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - goto yy703; - } - } else { - if(yych <= 'T') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'U') goto yy730; - if(yych != 'u') goto yy663; - } - } -yy730: - YYDEBUG(730, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy731; - if(yych != 'a') goto yy53; -yy731: - YYDEBUG(731, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy732; - if(yych != 'r') goto yy53; -yy732: - YYDEBUG(732, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy711; - if(yych == 'y') goto yy711; - goto yy53; -yy733: - YYDEBUG(733, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - goto yy703; - } - } else { - if(yych <= 'D') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'E') goto yy711; - if(yych == 'e') goto yy711; - goto yy663; - } - } -yy734: - YYDEBUG(734, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - goto yy703; - } - } else { - if(yych <= 'X') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'Y') goto yy711; - if(yych == 'y') goto yy711; - goto yy663; - } - } -yy735: - YYDEBUG(735, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ',') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy663; - goto yy703; - } else { - if(yych == ' ') goto yy703; - goto yy663; - } - } else { - if(yych <= '9') { - if(yych <= '.') goto yy703; - if(yych <= '/') goto yy663; - goto yy705; - } else { - if(yych == 'I') goto yy711; - goto yy663; - } - } -yy736: - YYDEBUG(736, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ',') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy663; - goto yy703; - } else { - if(yych == ' ') goto yy703; - goto yy663; - } - } else { - if(yych <= '9') { - if(yych <= '.') goto yy703; - if(yych <= '/') goto yy663; - goto yy705; - } else { - if(yych != 'I') goto yy663; - } - } - YYDEBUG(737, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ',') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy663; - goto yy703; - } else { - if(yych == ' ') goto yy703; - goto yy663; - } - } else { - if(yych <= '9') { - if(yych <= '.') goto yy703; - if(yych <= '/') goto yy663; - goto yy705; - } else { - if(yych == 'I') goto yy711; - goto yy663; - } - } -yy738: - YYDEBUG(738, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ',') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy663; - goto yy703; - } else { - if(yych == ' ') goto yy703; - goto yy663; - } - } else { - if(yych <= '9') { - if(yych <= '.') goto yy703; - if(yych <= '/') goto yy663; - goto yy705; - } else { - if(yych == 'I') goto yy711; - goto yy663; - } - } -yy739: - YYDEBUG(739, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= ',') goto yy678; - if(yych <= '-') goto yy772; - goto yy773; - } else { - if(yych <= '/') goto yy678; - if(yych <= '9') goto yy783; - if(yych <= ':') goto yy680; - goto yy678; - } -yy740: - YYDEBUG(740, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych <= ',') goto yy678; - if(yych <= '-') goto yy772; - if(yych <= '.') goto yy773; - goto yy678; - } else { - if(yych <= '2') goto yy783; - if(yych <= '9') goto yy694; - if(yych <= ':') goto yy680; - goto yy678; - } -yy741: - YYDEBUG(741, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= ',') goto yy678; - if(yych <= '-') goto yy772; - goto yy773; - } else { - if(yych <= '/') goto yy678; - if(yych <= '9') goto yy694; - if(yych <= ':') goto yy680; - goto yy678; - } -yy742: - YYDEBUG(742, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= ',') goto yy678; - if(yych <= '-') goto yy772; - goto yy773; - } else { - if(yych == ':') goto yy680; - goto yy678; - } -yy743: - YYDEBUG(743, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy766; - if(yych == 'e') goto yy766; - goto yy53; -yy744: - YYDEBUG(744, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy763; - if(yych == 'a') goto yy763; - goto yy53; -yy745: - YYDEBUG(745, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych == 'P') goto yy721; - if(yych <= 'T') goto yy53; - goto yy720; - } else { - if(yych <= 'p') { - if(yych <= 'o') goto yy53; - goto yy721; - } else { - if(yych == 'u') goto yy720; - goto yy53; - } - } -yy746: - YYDEBUG(746, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy756; - if(yych == 'e') goto yy756; - goto yy53; -yy747: - YYDEBUG(747, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy750; - if(yych == 'e') goto yy750; - goto yy53; -yy748: - YYDEBUG(748, *YYCURSOR); - ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 13) YYFILL(13); - yych = *YYCURSOR; -yy749: - YYDEBUG(749, *YYCURSOR); - YYDEBUG(-1, yych); - switch(yych) { - case 0x09: - case ' ': - case '-': - case '.': goto yy748; - case 'A': - case 'a': goto yy745; - case 'D': - case 'd': goto yy747; - case 'F': - case 'f': goto yy743; - case 'I': goto yy662; - case 'J': - case 'j': goto yy666; - case 'M': - case 'm': goto yy744; - case 'N': - case 'n': goto yy669; - case 'O': - case 'o': goto yy668; - case 'S': - case 's': goto yy746; - case 'V': goto yy664; - case 'X': goto yy665; - default: goto yy53; - } -yy750: - YYDEBUG(750, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'C') goto yy751; - if(yych != 'c') goto yy53; -yy751: - YYDEBUG(751, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - goto yy703; - } - } else { - if(yych <= 'D') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'E') goto yy752; - if(yych != 'e') goto yy663; - } - } -yy752: - YYDEBUG(752, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'M') goto yy753; - if(yych != 'm') goto yy53; -yy753: - YYDEBUG(753, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'B') goto yy754; - if(yych != 'b') goto yy53; -yy754: - YYDEBUG(754, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy755; - if(yych != 'e') goto yy53; -yy755: - YYDEBUG(755, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy711; - if(yych == 'r') goto yy711; - goto yy53; -yy756: - YYDEBUG(756, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'P') goto yy757; - if(yych != 'p') goto yy53; -yy757: - YYDEBUG(757, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - goto yy703; - } - } else { - if(yych <= 'S') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'T') goto yy758; - if(yych != 't') goto yy663; - } - } -yy758: - YYDEBUG(758, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - goto yy703; - } - } else { - if(yych <= 'D') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'E') goto yy759; - if(yych != 'e') goto yy663; - } - } -yy759: - YYDEBUG(759, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'M') goto yy760; - if(yych != 'm') goto yy53; -yy760: - YYDEBUG(760, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'B') goto yy761; - if(yych != 'b') goto yy53; -yy761: - YYDEBUG(761, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy762; - if(yych != 'e') goto yy53; -yy762: - YYDEBUG(762, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy711; - if(yych == 'r') goto yy711; - goto yy53; -yy763: - YYDEBUG(763, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'Y') { - if(yych == 'R') goto yy764; - if(yych <= 'X') goto yy53; - goto yy711; - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy53; - } else { - if(yych == 'y') goto yy711; - goto yy53; - } - } -yy764: - YYDEBUG(764, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - goto yy703; - } - } else { - if(yych <= 'B') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'C') goto yy765; - if(yych != 'c') goto yy663; - } - } -yy765: - YYDEBUG(765, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'H') goto yy711; - if(yych == 'h') goto yy711; - goto yy53; -yy766: - YYDEBUG(766, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'B') goto yy767; - if(yych != 'b') goto yy53; -yy767: - YYDEBUG(767, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - goto yy703; - } - } else { - if(yych <= 'Q') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'R') goto yy768; - if(yych != 'r') goto yy663; - } - } -yy768: - YYDEBUG(768, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'U') goto yy769; - if(yych != 'u') goto yy53; -yy769: - YYDEBUG(769, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy770; - if(yych != 'a') goto yy53; -yy770: - YYDEBUG(770, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy771; - if(yych != 'r') goto yy53; -yy771: - YYDEBUG(771, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy711; - if(yych == 'y') goto yy711; - goto yy53; -yy772: - YYDEBUG(772, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy782; - goto yy53; -yy773: - YYDEBUG(773, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy774; - if(yych <= '6') goto yy775; - if(yych <= '9') goto yy776; - goto yy53; -yy774: - YYDEBUG(774, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '.') goto yy684; - if(yych <= '/') goto yy678; - if(yych <= '9') goto yy781; - goto yy678; -yy775: - YYDEBUG(775, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy684; - goto yy678; - } else { - if(yych <= '0') goto yy781; - if(yych <= '9') goto yy777; - goto yy678; - } -yy776: - YYDEBUG(776, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '.') goto yy684; - if(yych <= '/') goto yy678; - if(yych >= ':') goto yy678; -yy777: - YYDEBUG(777, *YYCURSOR); - ++YYCURSOR; - if((yych = *YYCURSOR) <= '/') goto yy778; - if(yych <= '9') goto yy779; -yy778: - YYDEBUG(778, *YYCURSOR); -#line 1141 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("pointed date"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->d = timelib_get_nr((char **) &ptr, 2); - s->time->m = timelib_get_nr((char **) &ptr, 2); - s->time->y = timelib_get_nr((char **) &ptr, 4); - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_DATE_FULL_POINTED; - } -#line 13636 "ext/date/lib/parse_date.c" -yy779: - YYDEBUG(779, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy778; - if(yych >= ':') goto yy778; - YYDEBUG(780, *YYCURSOR); - yych = *++YYCURSOR; - goto yy778; -yy781: - YYDEBUG(781, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= ' ') { - if(yych == 0x09) goto yy688; - if(yych <= 0x1F) goto yy678; - goto yy688; - } else { - if(yych == '.') goto yy684; - if(yych <= '/') goto yy678; - goto yy779; - } - } else { - if(yych <= 'P') { - if(yych == 'A') goto yy690; - if(yych <= 'O') goto yy678; - goto yy690; - } else { - if(yych <= 'a') { - if(yych <= '`') goto yy678; - goto yy690; - } else { - if(yych == 'p') goto yy690; - goto yy678; - } - } - } -yy782: - YYDEBUG(782, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy778; - if(yych <= '9') goto yy777; - goto yy778; -yy783: - YYDEBUG(783, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ':') { - if(yych <= ' ') { - if(yych == 0x09) goto yy695; - if(yych <= 0x1F) goto yy678; - goto yy695; - } else { - if(yych <= '-') { - if(yych <= ',') goto yy678; - goto yy772; - } else { - if(yych <= '.') goto yy773; - if(yych <= '9') goto yy678; - goto yy680; - } - } - } else { - if(yych <= 'P') { - if(yych == 'A') goto yy697; - if(yych <= 'O') goto yy678; - goto yy697; - } else { - if(yych <= 'a') { - if(yych <= '`') goto yy678; - goto yy697; - } else { - if(yych == 'p') goto yy697; - goto yy678; - } - } - } -yy784: - YYDEBUG(784, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '.') { - if(yych <= ',') goto yy53; - if(yych <= '-') goto yy823; - goto yy772; - } else { - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy786; - goto yy53; - } -yy785: - YYDEBUG(785, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '.') { - if(yych <= ',') goto yy53; - if(yych <= '-') goto yy823; - goto yy772; - } else { - if(yych <= '/') goto yy53; - if(yych >= '3') goto yy53; - } -yy786: - YYDEBUG(786, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= ',') goto yy53; - if(yych <= '-') goto yy823; - if(yych <= '.') goto yy772; - goto yy53; -yy787: - YYDEBUG(787, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych == 'A') goto yy819; - if(yych <= 'T') goto yy53; - goto yy818; - } else { - if(yych <= 'a') { - if(yych <= '`') goto yy53; - goto yy819; - } else { - if(yych == 'u') goto yy818; - goto yy53; - } - } -yy788: - YYDEBUG(788, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy816; - if(yych == 'e') goto yy816; - goto yy53; -yy789: - YYDEBUG(789, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy813; - if(yych == 'a') goto yy813; - goto yy53; -yy790: - YYDEBUG(790, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych == 'P') goto yy810; - if(yych <= 'T') goto yy53; - goto yy809; - } else { - if(yych <= 'p') { - if(yych <= 'o') goto yy53; - goto yy810; - } else { - if(yych == 'u') goto yy809; - goto yy53; - } - } -yy791: - YYDEBUG(791, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy806; - if(yych == 'e') goto yy806; - goto yy53; -yy792: - YYDEBUG(792, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'C') goto yy804; - if(yych == 'c') goto yy804; - goto yy53; -yy793: - YYDEBUG(793, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'O') goto yy802; - if(yych == 'o') goto yy802; - goto yy53; -yy794: - YYDEBUG(794, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy795; - if(yych != 'e') goto yy53; -yy795: - YYDEBUG(795, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'C') goto yy796; - if(yych != 'c') goto yy53; -yy796: - YYDEBUG(796, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - if(yych >= '.') goto yy703; - } - } else { - if(yych <= 'D') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'E') goto yy752; - if(yych == 'e') goto yy752; - goto yy663; - } - } -yy797: - YYDEBUG(797, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy704; - if(yych <= '0') goto yy798; - if(yych <= '2') goto yy799; - if(yych <= '3') goto yy800; - goto yy704; -yy798: - YYDEBUG(798, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy706; - if(yych <= '0') goto yy712; - if(yych <= '9') goto yy801; - goto yy706; -yy799: - YYDEBUG(799, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy706; - if(yych <= '9') goto yy801; - goto yy706; -yy800: - YYDEBUG(800, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy706; - if(yych <= '1') goto yy801; - if(yych <= '9') goto yy712; - goto yy706; -yy801: - YYDEBUG(801, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy706; - if(yych <= '9') goto yy713; - goto yy706; -yy802: - YYDEBUG(802, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'V') goto yy803; - if(yych != 'v') goto yy53; -yy803: - YYDEBUG(803, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - if(yych <= '-') goto yy797; - goto yy703; - } - } else { - if(yych <= 'D') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'E') goto yy707; - if(yych == 'e') goto yy707; - goto yy663; - } - } -yy804: - YYDEBUG(804, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy805; - if(yych != 't') goto yy53; -yy805: - YYDEBUG(805, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - if(yych <= '-') goto yy797; - goto yy703; - } - } else { - if(yych <= 'N') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'O') goto yy717; - if(yych == 'o') goto yy717; - goto yy663; - } - } -yy806: - YYDEBUG(806, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'P') goto yy807; - if(yych != 'p') goto yy53; -yy807: - YYDEBUG(807, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - if(yych <= '-') goto yy797; - goto yy703; - } - } else { - if(yych <= 'S') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'T') goto yy808; - if(yych != 't') goto yy663; - } - } -yy808: - YYDEBUG(808, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - if(yych <= '-') goto yy797; - goto yy703; - } - } else { - if(yych <= 'D') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'E') goto yy759; - if(yych == 'e') goto yy759; - goto yy663; - } - } -yy809: - YYDEBUG(809, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'G') goto yy812; - if(yych == 'g') goto yy812; - goto yy53; -yy810: - YYDEBUG(810, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy811; - if(yych != 'r') goto yy53; -yy811: - YYDEBUG(811, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - if(yych <= '-') goto yy797; - goto yy703; - } - } else { - if(yych <= 'H') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'I') goto yy723; - if(yych == 'i') goto yy723; - goto yy663; - } - } -yy812: - YYDEBUG(812, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - if(yych <= '-') goto yy797; - goto yy703; - } - } else { - if(yych <= 'T') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'U') goto yy725; - if(yych == 'u') goto yy725; - goto yy663; - } - } -yy813: - YYDEBUG(813, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'Y') { - if(yych == 'R') goto yy814; - if(yych <= 'X') goto yy53; - goto yy815; - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy53; - } else { - if(yych == 'y') goto yy815; - goto yy53; - } - } -yy814: - YYDEBUG(814, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - if(yych <= '-') goto yy797; - goto yy703; - } - } else { - if(yych <= 'B') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'C') goto yy765; - if(yych == 'c') goto yy765; - goto yy663; - } - } -yy815: - YYDEBUG(815, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= ',') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy663; - goto yy703; - } else { - if(yych == ' ') goto yy703; - goto yy663; - } - } else { - if(yych <= '.') { - if(yych <= '-') goto yy797; - goto yy703; - } else { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } - } -yy816: - YYDEBUG(816, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'B') goto yy817; - if(yych != 'b') goto yy53; -yy817: - YYDEBUG(817, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - if(yych <= '-') goto yy797; - goto yy703; - } - } else { - if(yych <= 'Q') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'R') goto yy768; - if(yych == 'r') goto yy768; - goto yy663; - } - } -yy818: - YYDEBUG(818, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'N') { - if(yych == 'L') goto yy822; - if(yych <= 'M') goto yy53; - goto yy821; - } else { - if(yych <= 'l') { - if(yych <= 'k') goto yy53; - goto yy822; - } else { - if(yych == 'n') goto yy821; - goto yy53; - } - } -yy819: - YYDEBUG(819, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'N') goto yy820; - if(yych != 'n') goto yy53; -yy820: - YYDEBUG(820, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - if(yych <= '-') goto yy797; - goto yy703; - } - } else { - if(yych <= 'T') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'U') goto yy730; - if(yych == 'u') goto yy730; - goto yy663; - } - } -yy821: - YYDEBUG(821, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - if(yych <= '-') goto yy797; - goto yy703; - } - } else { - if(yych <= 'D') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'E') goto yy711; - if(yych == 'e') goto yy711; - goto yy663; - } - } -yy822: - YYDEBUG(822, *YYCURSOR); - yyaccept = 11; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= 0x1F) { - if(yych == 0x09) goto yy703; - goto yy663; - } else { - if(yych <= ' ') goto yy703; - if(yych <= ',') goto yy663; - if(yych <= '-') goto yy797; - goto yy703; - } - } else { - if(yych <= 'X') { - if(yych <= '/') goto yy663; - if(yych <= '9') goto yy705; - goto yy663; - } else { - if(yych <= 'Y') goto yy711; - if(yych == 'y') goto yy711; - goto yy663; - } - } -yy823: - YYDEBUG(823, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '2') goto yy824; - if(yych <= '3') goto yy826; - if(yych <= '9') goto yy827; - goto yy53; -yy824: - YYDEBUG(824, *YYCURSOR); - yyaccept = 13; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'n') { - if(yych <= '/') goto yy825; - if(yych <= '9') goto yy833; - if(yych >= 'n') goto yy829; - } else { - if(yych <= 'r') { - if(yych >= 'r') goto yy830; - } else { - if(yych <= 's') goto yy828; - if(yych <= 't') goto yy831; - } - } -yy825: - YYDEBUG(825, *YYCURSOR); -#line 1114 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("gnudateshort"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->m = timelib_get_nr((char **) &ptr, 2); - s->time->d = timelib_get_nr((char **) &ptr, 2); - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_ISO_DATE; - } -#line 14275 "ext/date/lib/parse_date.c" -yy826: - YYDEBUG(826, *YYCURSOR); - yyaccept = 13; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'n') { - if(yych <= '1') { - if(yych <= '/') goto yy825; - goto yy833; - } else { - if(yych <= '9') goto yy777; - if(yych <= 'm') goto yy825; - goto yy829; - } - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy825; - goto yy830; - } else { - if(yych <= 's') goto yy828; - if(yych <= 't') goto yy831; - goto yy825; - } - } -yy827: - YYDEBUG(827, *YYCURSOR); - yyaccept = 13; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'n') { - if(yych <= '/') goto yy825; - if(yych <= '9') goto yy777; - if(yych <= 'm') goto yy825; - goto yy829; - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy825; - goto yy830; - } else { - if(yych <= 's') goto yy828; - if(yych <= 't') goto yy831; - goto yy825; - } - } -yy828: - YYDEBUG(828, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 't') goto yy832; - goto yy53; -yy829: - YYDEBUG(829, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'd') goto yy832; - goto yy53; -yy830: - YYDEBUG(830, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'd') goto yy832; - goto yy53; -yy831: - YYDEBUG(831, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != 'h') goto yy53; -yy832: - YYDEBUG(832, *YYCURSOR); - yych = *++YYCURSOR; - goto yy825; -yy833: - YYDEBUG(833, *YYCURSOR); - yyaccept = 13; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'n') { - if(yych <= '/') goto yy825; - if(yych <= '9') goto yy779; - if(yych <= 'm') goto yy825; - goto yy829; - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy825; - goto yy830; - } else { - if(yych <= 's') goto yy828; - if(yych <= 't') goto yy831; - goto yy825; - } - } -yy834: - YYDEBUG(834, *YYCURSOR); - yyaccept = 14; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'n') { - if(yych <= '/') { - if(yych >= '/') goto yy888; - } else { - if(yych <= '9') goto yy837; - if(yych >= 'n') goto yy885; - } - } else { - if(yych <= 'r') { - if(yych >= 'r') goto yy886; - } else { - if(yych <= 's') goto yy884; - if(yych <= 't') goto yy887; - } - } -yy835: - YYDEBUG(835, *YYCURSOR); -#line 1075 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("americanshort | american"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->m = timelib_get_nr((char **) &ptr, 2); - s->time->d = timelib_get_nr((char **) &ptr, 2); - if (*ptr == '/') { - s->time->y = timelib_get_nr((char **) &ptr, 4); - TIMELIB_PROCESS_YEAR(s->time->y); - } - TIMELIB_DEINIT; - return TIMELIB_AMERICAN; - } -#line 14395 "ext/date/lib/parse_date.c" -yy836: - YYDEBUG(836, *YYCURSOR); - yyaccept = 14; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'n') { - if(yych <= '/') { - if(yych <= '.') goto yy835; - goto yy888; - } else { - if(yych <= '1') goto yy837; - if(yych <= 'm') goto yy835; - goto yy885; - } - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy835; - goto yy886; - } else { - if(yych <= 's') goto yy884; - if(yych <= 't') goto yy887; - goto yy835; - } - } -yy837: - YYDEBUG(837, *YYCURSOR); - yyaccept = 14; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'n') { - if(yych == '/') goto yy888; - if(yych <= 'm') goto yy835; - goto yy885; - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy835; - goto yy886; - } else { - if(yych <= 's') goto yy884; - if(yych <= 't') goto yy887; - goto yy835; - } - } -yy838: - YYDEBUG(838, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych == 'A') goto yy883; - if(yych <= 'T') goto yy53; - goto yy882; - } else { - if(yych <= 'a') { - if(yych <= '`') goto yy53; - goto yy883; - } else { - if(yych == 'u') goto yy882; - goto yy53; - } - } -yy839: - YYDEBUG(839, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy881; - if(yych == 'e') goto yy881; - goto yy53; -yy840: - YYDEBUG(840, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy880; - if(yych == 'a') goto yy880; - goto yy53; -yy841: - YYDEBUG(841, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych == 'P') goto yy879; - if(yych <= 'T') goto yy53; - goto yy878; - } else { - if(yych <= 'p') { - if(yych <= 'o') goto yy53; - goto yy879; - } else { - if(yych == 'u') goto yy878; - goto yy53; - } - } -yy842: - YYDEBUG(842, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy876; - if(yych == 'e') goto yy876; - goto yy53; -yy843: - YYDEBUG(843, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'C') goto yy875; - if(yych == 'c') goto yy875; - goto yy53; -yy844: - YYDEBUG(844, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'O') goto yy874; - if(yych == 'o') goto yy874; - goto yy53; -yy845: - YYDEBUG(845, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy846; - if(yych != 'e') goto yy53; -yy846: - YYDEBUG(846, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'C') goto yy847; - if(yych != 'c') goto yy53; -yy847: - YYDEBUG(847, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != '/') goto yy53; -yy848: - YYDEBUG(848, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= ':') goto yy53; - YYDEBUG(849, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= ':') goto yy53; - YYDEBUG(850, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= ':') goto yy53; - YYDEBUG(851, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= ':') goto yy53; - YYDEBUG(852, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != ':') goto yy53; - YYDEBUG(853, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '1') goto yy854; - if(yych <= '2') goto yy855; - goto yy53; -yy854: - YYDEBUG(854, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy856; - goto yy53; -yy855: - YYDEBUG(855, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= '4') goto yy53; -yy856: - YYDEBUG(856, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != ':') goto yy53; - YYDEBUG(857, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= '6') goto yy53; - YYDEBUG(858, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= ':') goto yy53; - YYDEBUG(859, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != ':') goto yy53; - YYDEBUG(860, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy861; - if(yych <= '6') goto yy862; - goto yy53; -yy861: - YYDEBUG(861, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy863; - goto yy53; -yy862: - YYDEBUG(862, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != '0') goto yy53; -yy863: - YYDEBUG(863, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 0x09) goto yy864; - if(yych != ' ') goto yy53; -yy864: - YYDEBUG(864, *YYCURSOR); - ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 6) YYFILL(6); - yych = *YYCURSOR; - YYDEBUG(865, *YYCURSOR); - if(yych <= ' ') { - if(yych == 0x09) goto yy864; - if(yych <= 0x1F) goto yy53; - goto yy864; - } else { - if(yych <= '+') { - if(yych <= '*') goto yy53; - } else { - if(yych != '-') goto yy53; - } - } - YYDEBUG(866, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '1') goto yy867; - if(yych <= '2') goto yy869; - if(yych <= '9') goto yy870; - goto yy53; -yy867: - YYDEBUG(867, *YYCURSOR); - ++YYCURSOR; - if((yych = *YYCURSOR) <= '/') goto yy868; - if(yych <= '9') goto yy870; - if(yych <= ':') goto yy871; -yy868: - YYDEBUG(868, *YYCURSOR); -#line 1320 "ext/date/lib/parse_date.re" - { - int tz_not_found; - DEBUG_OUTPUT("clf"); - TIMELIB_INIT; - TIMELIB_HAVE_TIME(); - TIMELIB_HAVE_DATE(); - s->time->d = timelib_get_nr((char **) &ptr, 2); - s->time->m = timelib_get_month((char **) &ptr); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->h = timelib_get_nr((char **) &ptr, 2); - s->time->i = timelib_get_nr((char **) &ptr, 2); - s->time->s = timelib_get_nr((char **) &ptr, 2); - s->time->z = timelib_get_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb); - if (tz_not_found) { - add_error(s, "The timezone could not be found in the database"); - } - TIMELIB_DEINIT; - return TIMELIB_CLF; - } -#line 14638 "ext/date/lib/parse_date.c" -yy869: - YYDEBUG(869, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '5') { - if(yych <= '/') goto yy868; - if(yych >= '4') goto yy872; - } else { - if(yych <= '9') goto yy873; - if(yych <= ':') goto yy871; - goto yy868; - } -yy870: - YYDEBUG(870, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy868; - if(yych <= '5') goto yy872; - if(yych <= '9') goto yy873; - if(yych >= ';') goto yy868; -yy871: - YYDEBUG(871, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy868; - if(yych <= '5') goto yy872; - if(yych <= '9') goto yy873; - goto yy868; -yy872: - YYDEBUG(872, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy868; - if(yych >= ':') goto yy868; -yy873: - YYDEBUG(873, *YYCURSOR); - yych = *++YYCURSOR; - goto yy868; -yy874: - YYDEBUG(874, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'V') goto yy847; - if(yych == 'v') goto yy847; - goto yy53; -yy875: - YYDEBUG(875, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy847; - if(yych == 't') goto yy847; - goto yy53; -yy876: - YYDEBUG(876, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'P') goto yy877; - if(yych != 'p') goto yy53; -yy877: - YYDEBUG(877, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'S') { - if(yych == '/') goto yy848; - goto yy53; - } else { - if(yych <= 'T') goto yy847; - if(yych == 't') goto yy847; - goto yy53; - } -yy878: - YYDEBUG(878, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'G') goto yy847; - if(yych == 'g') goto yy847; - goto yy53; -yy879: - YYDEBUG(879, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy847; - if(yych == 'r') goto yy847; - goto yy53; -yy880: - YYDEBUG(880, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'Y') { - if(yych == 'R') goto yy847; - if(yych <= 'X') goto yy53; - goto yy847; - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy53; - goto yy847; - } else { - if(yych == 'y') goto yy847; - goto yy53; - } - } -yy881: - YYDEBUG(881, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'B') goto yy847; - if(yych == 'b') goto yy847; - goto yy53; -yy882: - YYDEBUG(882, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'N') { - if(yych == 'L') goto yy847; - if(yych <= 'M') goto yy53; - goto yy847; - } else { - if(yych <= 'l') { - if(yych <= 'k') goto yy53; - goto yy847; - } else { - if(yych == 'n') goto yy847; - goto yy53; - } - } -yy883: - YYDEBUG(883, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'N') goto yy847; - if(yych == 'n') goto yy847; - goto yy53; -yy884: - YYDEBUG(884, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 't') goto yy893; - goto yy53; -yy885: - YYDEBUG(885, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'd') goto yy893; - goto yy53; -yy886: - YYDEBUG(886, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'd') goto yy893; - goto yy53; -yy887: - YYDEBUG(887, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'h') goto yy893; - goto yy53; -yy888: - YYDEBUG(888, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= ':') goto yy53; - YYDEBUG(889, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy835; - if(yych >= ':') goto yy835; - YYDEBUG(890, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy835; - if(yych >= ':') goto yy835; - YYDEBUG(891, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy835; - if(yych >= ':') goto yy835; - YYDEBUG(892, *YYCURSOR); - yych = *++YYCURSOR; - goto yy835; -yy893: - YYDEBUG(893, *YYCURSOR); - yyaccept = 14; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '/') goto yy888; - goto yy835; -yy894: - YYDEBUG(894, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= ',') { - if(yych == 0x09) goto yy896; - goto yy749; - } else { - if(yych <= '.') goto yy896; - if(yych >= '0') goto yy749; - } -yy895: - YYDEBUG(895, *YYCURSOR); - yych = *++YYCURSOR; - YYDEBUG(-1, yych); - switch(yych) { - case 'A': - case 'a': goto yy841; - case 'D': - case 'd': goto yy845; - case 'F': - case 'f': goto yy839; - case 'J': - case 'j': goto yy838; - case 'M': - case 'm': goto yy840; - case 'N': - case 'n': goto yy844; - case 'O': - case 'o': goto yy843; - case 'S': - case 's': goto yy842; - default: goto yy53; - } -yy896: - YYDEBUG(896, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy749; - if(yych <= '0') goto yy897; - if(yych <= '1') goto yy898; - if(yych <= '9') goto yy899; - goto yy749; -yy897: - YYDEBUG(897, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= ',') goto yy53; - if(yych <= '.') goto yy772; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy899; - goto yy53; -yy898: - YYDEBUG(898, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= ',') goto yy53; - if(yych <= '.') goto yy772; - if(yych <= '/') goto yy53; - if(yych >= '3') goto yy53; -yy899: - YYDEBUG(899, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= ',') goto yy53; - if(yych <= '.') goto yy772; - goto yy53; -yy900: - YYDEBUG(900, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == '-') goto yy901; - if(yych <= '/') goto yy57; - if(yych <= '9') goto yy935; - goto yy57; -yy901: - YYDEBUG(901, *YYCURSOR); - yych = *++YYCURSOR; - YYDEBUG(-1, yych); - switch(yych) { - case '0': goto yy910; - case '1': goto yy911; - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy912; - case 'A': - case 'a': goto yy905; - case 'D': - case 'd': goto yy909; - case 'F': - case 'f': goto yy903; - case 'J': - case 'j': goto yy902; - case 'M': - case 'm': goto yy904; - case 'N': - case 'n': goto yy908; - case 'O': - case 'o': goto yy907; - case 'S': - case 's': goto yy906; - default: goto yy53; - } -yy902: - YYDEBUG(902, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych == 'A') goto yy934; - if(yych <= 'T') goto yy53; - goto yy933; - } else { - if(yych <= 'a') { - if(yych <= '`') goto yy53; - goto yy934; - } else { - if(yych == 'u') goto yy933; - goto yy53; - } - } -yy903: - YYDEBUG(903, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy932; - if(yych == 'e') goto yy932; - goto yy53; -yy904: - YYDEBUG(904, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy931; - if(yych == 'a') goto yy931; - goto yy53; -yy905: - YYDEBUG(905, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych == 'P') goto yy930; - if(yych <= 'T') goto yy53; - goto yy929; - } else { - if(yych <= 'p') { - if(yych <= 'o') goto yy53; - goto yy930; - } else { - if(yych == 'u') goto yy929; - goto yy53; - } - } -yy906: - YYDEBUG(906, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy927; - if(yych == 'e') goto yy927; - goto yy53; -yy907: - YYDEBUG(907, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'C') goto yy926; - if(yych == 'c') goto yy926; - goto yy53; -yy908: - YYDEBUG(908, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'O') goto yy925; - if(yych == 'o') goto yy925; - goto yy53; -yy909: - YYDEBUG(909, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy917; - if(yych == 'e') goto yy917; - goto yy53; -yy910: - YYDEBUG(910, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == '-') goto yy913; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy912; - goto yy53; -yy911: - YYDEBUG(911, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == '-') goto yy913; - if(yych <= '/') goto yy53; - if(yych >= '3') goto yy53; -yy912: - YYDEBUG(912, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != '-') goto yy53; -yy913: - YYDEBUG(913, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '2') goto yy914; - if(yych <= '3') goto yy915; - if(yych <= '9') goto yy916; - goto yy53; -yy914: - YYDEBUG(914, *YYCURSOR); - yyaccept = 13; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'n') { - if(yych <= '/') goto yy825; - if(yych <= '9') goto yy916; - if(yych <= 'm') goto yy825; - goto yy829; - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy825; - goto yy830; - } else { - if(yych <= 's') goto yy828; - if(yych <= 't') goto yy831; - goto yy825; - } - } -yy915: - YYDEBUG(915, *YYCURSOR); - yyaccept = 13; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'n') { - if(yych <= '/') goto yy825; - if(yych <= '1') goto yy916; - if(yych <= 'm') goto yy825; - goto yy829; - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy825; - goto yy830; - } else { - if(yych <= 's') goto yy828; - if(yych <= 't') goto yy831; - goto yy825; - } - } -yy916: - YYDEBUG(916, *YYCURSOR); - yyaccept = 13; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'q') { - if(yych == 'n') goto yy829; - goto yy825; - } else { - if(yych <= 'r') goto yy830; - if(yych <= 's') goto yy828; - if(yych <= 't') goto yy831; - goto yy825; - } -yy917: - YYDEBUG(917, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'C') goto yy918; - if(yych != 'c') goto yy53; -yy918: - YYDEBUG(918, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != '-') goto yy53; -yy919: - YYDEBUG(919, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '0') goto yy920; - if(yych <= '2') goto yy921; - if(yych <= '3') goto yy922; - goto yy53; -yy920: - YYDEBUG(920, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '0') goto yy53; - if(yych <= '9') goto yy923; - goto yy53; -yy921: - YYDEBUG(921, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy923; - goto yy53; -yy922: - YYDEBUG(922, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= '2') goto yy53; -yy923: - YYDEBUG(923, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(924, *YYCURSOR); -#line 1307 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("pgtextreverse"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->m = timelib_get_month((char **) &ptr); - s->time->d = timelib_get_nr((char **) &ptr, 2); - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_PG_TEXT; - } -#line 15099 "ext/date/lib/parse_date.c" -yy925: - YYDEBUG(925, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'V') goto yy918; - if(yych == 'v') goto yy918; - goto yy53; -yy926: - YYDEBUG(926, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy918; - if(yych == 't') goto yy918; - goto yy53; -yy927: - YYDEBUG(927, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'P') goto yy928; - if(yych != 'p') goto yy53; -yy928: - YYDEBUG(928, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'S') { - if(yych == '-') goto yy919; - goto yy53; - } else { - if(yych <= 'T') goto yy918; - if(yych == 't') goto yy918; - goto yy53; - } -yy929: - YYDEBUG(929, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'G') goto yy918; - if(yych == 'g') goto yy918; - goto yy53; -yy930: - YYDEBUG(930, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy918; - if(yych == 'r') goto yy918; - goto yy53; -yy931: - YYDEBUG(931, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'Y') { - if(yych == 'R') goto yy918; - if(yych <= 'X') goto yy53; - goto yy918; - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy53; - goto yy918; - } else { - if(yych == 'y') goto yy918; - goto yy53; - } - } -yy932: - YYDEBUG(932, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'B') goto yy918; - if(yych == 'b') goto yy918; - goto yy53; -yy933: - YYDEBUG(933, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'N') { - if(yych == 'L') goto yy918; - if(yych <= 'M') goto yy53; - goto yy918; - } else { - if(yych <= 'l') { - if(yych <= 'k') goto yy53; - goto yy918; - } else { - if(yych == 'n') goto yy918; - goto yy53; - } - } -yy934: - YYDEBUG(934, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'N') goto yy918; - if(yych == 'n') goto yy918; - goto yy53; -yy935: - YYDEBUG(935, *YYCURSOR); - yyaccept = 15; - yych = *(YYMARKER = ++YYCURSOR); - YYDEBUG(-1, yych); - switch(yych) { - case 0x09: - case ' ': - case 'A': - case 'D': - case 'F': - case 'H': - case 'I': - case 'J': - case 'M': - case 'N': - case 'O': - case 'S': - case 'T': - case 'V': - case 'X': - case 'Y': - case 'a': - case 'd': - case 'f': - case 'h': - case 'j': - case 'm': - case 'n': - case 'o': - case 's': - case 't': - case 'w': - case 'y': goto yy940; - case '-': goto yy937; - case '.': goto yy941; - case '/': goto yy938; - case '0': goto yy954; - case '1': goto yy955; - case '2': goto yy957; - case '3': goto yy958; - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy51; - case ':': goto yy956; - case 'W': goto yy959; - default: goto yy936; - } -yy936: - YYDEBUG(936, *YYCURSOR); -#line 1341 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("year4"); - TIMELIB_INIT; - s->time->y = timelib_get_nr((char **) &ptr, 4); - TIMELIB_DEINIT; - return TIMELIB_CLF; - } -#line 15245 "ext/date/lib/parse_date.c" -yy937: - YYDEBUG(937, *YYCURSOR); - yych = *++YYCURSOR; - YYDEBUG(-1, yych); - switch(yych) { - case '0': goto yy1123; - case '1': goto yy1125; - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy1126; - case 'A': - case 'a': goto yy1117; - case 'D': - case 'd': goto yy1121; - case 'F': - case 'f': goto yy1115; - case 'J': - case 'j': goto yy1114; - case 'M': - case 'm': goto yy1116; - case 'N': - case 'n': goto yy1120; - case 'O': - case 'o': goto yy1119; - case 'S': - case 's': goto yy1118; - case 'W': goto yy1122; - default: goto yy1087; - } -yy938: - YYDEBUG(938, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '0') goto yy1095; - if(yych <= '1') goto yy1096; - if(yych <= '9') goto yy1097; - goto yy53; -yy939: - YYDEBUG(939, *YYCURSOR); - ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 11) YYFILL(11); - yych = *YYCURSOR; -yy940: - YYDEBUG(940, *YYCURSOR); - YYDEBUG(-1, yych); - switch(yych) { - case 0x09: - case ' ': goto yy939; - case '-': - case '.': goto yy1086; - case 'A': - case 'a': goto yy949; - case 'D': - case 'd': goto yy953; - case 'F': - case 'f': goto yy947; - case 'H': - case 'h': goto yy60; - case 'I': goto yy942; - case 'J': - case 'j': goto yy946; - case 'M': - case 'm': goto yy948; - case 'N': - case 'n': goto yy952; - case 'O': - case 'o': goto yy951; - case 'S': - case 's': goto yy950; - case 'T': - case 't': goto yy65; - case 'V': goto yy944; - case 'W': - case 'w': goto yy62; - case 'X': goto yy945; - case 'Y': - case 'y': goto yy64; - default: goto yy53; - } -yy941: - YYDEBUG(941, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy1087; - if(yych <= '0') goto yy1079; - if(yych <= '2') goto yy1080; - if(yych <= '3') goto yy1081; - goto yy1087; -yy942: - YYDEBUG(942, *YYCURSOR); - ++YYCURSOR; - if((yych = *YYCURSOR) <= 'U') { - if(yych == 'I') goto yy1078; - } else { - if(yych == 'W') goto yy943; - if(yych <= 'X') goto yy1032; - } -yy943: - YYDEBUG(943, *YYCURSOR); -#line 1167 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("datenodayrev"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->m = timelib_get_month((char **) &ptr); - s->time->d = 1; - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_DATE_NO_DAY; - } -#line 15361 "ext/date/lib/parse_date.c" -yy944: - YYDEBUG(944, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'I') goto yy1076; - goto yy943; -yy945: - YYDEBUG(945, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'I') goto yy1075; - goto yy943; -yy946: - YYDEBUG(946, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych == 'A') goto yy1068; - if(yych <= 'T') goto yy53; - goto yy1067; - } else { - if(yych <= 'a') { - if(yych <= '`') goto yy53; - goto yy1068; - } else { - if(yych == 'u') goto yy1067; - goto yy53; - } - } -yy947: - YYDEBUG(947, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'R') { - if(yych <= 'N') { - if(yych == 'E') goto yy1061; - goto yy53; - } else { - if(yych <= 'O') goto yy83; - if(yych <= 'Q') goto yy53; - goto yy82; - } - } else { - if(yych <= 'n') { - if(yych == 'e') goto yy1061; - goto yy53; - } else { - if(yych <= 'o') goto yy83; - if(yych == 'r') goto yy82; - goto yy53; - } - } -yy948: - YYDEBUG(948, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'O') { - if(yych <= 'H') { - if(yych == 'A') goto yy1058; - goto yy53; - } else { - if(yych <= 'I') goto yy114; - if(yych <= 'N') goto yy53; - goto yy113; - } - } else { - if(yych <= 'h') { - if(yych == 'a') goto yy1058; - goto yy53; - } else { - if(yych <= 'i') goto yy114; - if(yych == 'o') goto yy113; - goto yy53; - } - } -yy949: - YYDEBUG(949, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych == 'P') goto yy1052; - if(yych <= 'T') goto yy53; - goto yy1051; - } else { - if(yych <= 'p') { - if(yych <= 'o') goto yy53; - goto yy1052; - } else { - if(yych == 'u') goto yy1051; - goto yy53; - } - } -yy950: - YYDEBUG(950, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych <= 'D') { - if(yych == 'A') goto yy123; - goto yy53; - } else { - if(yych <= 'E') goto yy1044; - if(yych <= 'T') goto yy53; - goto yy122; - } - } else { - if(yych <= 'd') { - if(yych == 'a') goto yy123; - goto yy53; - } else { - if(yych <= 'e') goto yy1044; - if(yych == 'u') goto yy122; - goto yy53; - } - } -yy951: - YYDEBUG(951, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'C') goto yy1039; - if(yych == 'c') goto yy1039; - goto yy53; -yy952: - YYDEBUG(952, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'O') goto yy1033; - if(yych == 'o') goto yy1033; - goto yy53; -yy953: - YYDEBUG(953, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'E') { - if(yych == 'A') goto yy110; - if(yych <= 'D') goto yy53; - goto yy1026; - } else { - if(yych <= 'a') { - if(yych <= '`') goto yy53; - goto yy110; - } else { - if(yych == 'e') goto yy1026; - goto yy53; - } - } -yy954: - YYDEBUG(954, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy57; - if(yych <= '0') goto yy1024; - if(yych <= '9') goto yy1025; - goto yy57; -yy955: - YYDEBUG(955, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy57; - if(yych <= '2') goto yy993; - if(yych <= '9') goto yy972; - goto yy57; -yy956: - YYDEBUG(956, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '0') goto yy973; - if(yych <= '1') goto yy974; - goto yy53; -yy957: - YYDEBUG(957, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy57; - if(yych <= '9') goto yy972; - goto yy57; -yy958: - YYDEBUG(958, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy57; - if(yych <= '5') goto yy968; - if(yych <= '6') goto yy969; - if(yych <= '9') goto yy51; - goto yy57; -yy959: - YYDEBUG(959, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '5') { - if(yych <= '/') goto yy53; - if(yych <= '0') goto yy960; - if(yych <= '4') goto yy961; - goto yy962; - } else { - if(yych <= 'E') { - if(yych <= 'D') goto yy53; - goto yy98; - } else { - if(yych == 'e') goto yy98; - goto yy53; - } - } -yy960: - YYDEBUG(960, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '0') goto yy53; - if(yych <= '9') goto yy963; - goto yy53; -yy961: - YYDEBUG(961, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy963; - goto yy53; -yy962: - YYDEBUG(962, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= '4') goto yy53; -yy963: - YYDEBUG(963, *YYCURSOR); - yyaccept = 16; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '-') goto yy965; - if(yych <= '/') goto yy964; - if(yych <= '7') goto yy966; -yy964: - YYDEBUG(964, *YYCURSOR); -#line 1275 "ext/date/lib/parse_date.re" - { - timelib_sll w, d; - DEBUG_OUTPUT("isoweek"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - TIMELIB_HAVE_RELATIVE(); - - s->time->y = timelib_get_nr((char **) &ptr, 4); - w = timelib_get_nr((char **) &ptr, 2); - d = 1; - s->time->m = 1; - s->time->d = 1; - s->time->relative.d = timelib_daynr_from_weeknr(s->time->y, w, d); - - TIMELIB_DEINIT; - return TIMELIB_ISO_WEEK; - } -#line 15594 "ext/date/lib/parse_date.c" -yy965: - YYDEBUG(965, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= '8') goto yy53; -yy966: - YYDEBUG(966, *YYCURSOR); - ++YYCURSOR; - YYDEBUG(967, *YYCURSOR); -#line 1256 "ext/date/lib/parse_date.re" - { - timelib_sll w, d; - DEBUG_OUTPUT("isoweekday"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - TIMELIB_HAVE_RELATIVE(); - - s->time->y = timelib_get_nr((char **) &ptr, 4); - w = timelib_get_nr((char **) &ptr, 2); - d = timelib_get_nr((char **) &ptr, 1); - s->time->m = 1; - s->time->d = 1; - s->time->relative.d = timelib_daynr_from_weeknr(s->time->y, w, d); - - TIMELIB_DEINIT; - return TIMELIB_ISO_WEEK; - } -#line 15622 "ext/date/lib/parse_date.c" -yy968: - YYDEBUG(968, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy57; - if(yych <= '9') goto yy970; - goto yy57; -yy969: - YYDEBUG(969, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy57; - if(yych <= '6') goto yy970; - if(yych <= '9') goto yy51; - goto yy57; -yy970: - YYDEBUG(970, *YYCURSOR); - yyaccept = 17; - yych = *(YYMARKER = ++YYCURSOR); - if(yybm[0+yych] & 8) { - goto yy51; - } - if(yych <= 'W') { - if(yych <= 'F') { - if(yych <= ' ') { - if(yych == 0x09) goto yy57; - if(yych >= ' ') goto yy57; - } else { - if(yych == 'D') goto yy57; - if(yych >= 'F') goto yy57; - } - } else { - if(yych <= 'M') { - if(yych == 'H') goto yy57; - if(yych >= 'M') goto yy57; - } else { - if(yych <= 'R') goto yy971; - if(yych <= 'T') goto yy57; - if(yych >= 'W') goto yy57; - } - } - } else { - if(yych <= 'h') { - if(yych <= 'd') { - if(yych == 'Y') goto yy57; - if(yych >= 'd') goto yy57; - } else { - if(yych == 'f') goto yy57; - if(yych >= 'h') goto yy57; - } - } else { - if(yych <= 't') { - if(yych == 'm') goto yy57; - if(yych >= 's') goto yy57; - } else { - if(yych <= 'w') { - if(yych >= 'w') goto yy57; - } else { - if(yych == 'y') goto yy57; - } - } - } - } -yy971: - YYDEBUG(971, *YYCURSOR); -#line 1243 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("pgydotd"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->d = timelib_get_nr((char **) &ptr, 3); - s->time->m = 1; - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_PG_YEARDAY; - } -#line 15698 "ext/date/lib/parse_date.c" -yy972: - YYDEBUG(972, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy57; - if(yych <= '9') goto yy970; - goto yy57; -yy973: - YYDEBUG(973, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '0') goto yy53; - if(yych <= '9') goto yy975; - goto yy53; -yy974: - YYDEBUG(974, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= '3') goto yy53; -yy975: - YYDEBUG(975, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != ':') goto yy53; - YYDEBUG(976, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '0') goto yy977; - if(yych <= '2') goto yy978; - if(yych <= '3') goto yy979; - goto yy53; -yy977: - YYDEBUG(977, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '0') goto yy53; - if(yych <= '9') goto yy980; - goto yy53; -yy978: - YYDEBUG(978, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy980; - goto yy53; -yy979: - YYDEBUG(979, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= '2') goto yy53; -yy980: - YYDEBUG(980, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != ' ') goto yy53; - YYDEBUG(981, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '1') goto yy982; - if(yych <= '2') goto yy983; - goto yy53; -yy982: - YYDEBUG(982, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy984; - goto yy53; -yy983: - YYDEBUG(983, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= '4') goto yy53; -yy984: - YYDEBUG(984, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != ':') goto yy53; - YYDEBUG(985, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= '6') goto yy53; - YYDEBUG(986, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= ':') goto yy53; - YYDEBUG(987, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != ':') goto yy53; - YYDEBUG(988, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy989; - if(yych <= '6') goto yy990; - goto yy53; -yy989: - YYDEBUG(989, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy991; - goto yy53; -yy990: - YYDEBUG(990, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != '0') goto yy53; -yy991: - YYDEBUG(991, *YYCURSOR); - ++YYCURSOR; -yy992: - YYDEBUG(992, *YYCURSOR); -#line 1217 "ext/date/lib/parse_date.re" - { - int tz_not_found; - DEBUG_OUTPUT("xmlrpc | xmlrpcnocolon | soap | wddx | exif"); - TIMELIB_INIT; - TIMELIB_HAVE_TIME(); - TIMELIB_HAVE_DATE(); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->m = timelib_get_nr((char **) &ptr, 2); - s->time->d = timelib_get_nr((char **) &ptr, 2); - s->time->h = timelib_get_nr((char **) &ptr, 2); - s->time->i = timelib_get_nr((char **) &ptr, 2); - s->time->s = timelib_get_nr((char **) &ptr, 2); - if (*ptr == '.') { - s->time->f = timelib_get_frac_nr((char **) &ptr, 9); - if (*ptr) { /* timezone is optional */ - s->time->z = timelib_get_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb); - if (tz_not_found) { - add_error(s, "The timezone could not be found in the database"); - } - } - } - TIMELIB_DEINIT; - return TIMELIB_XMLRPC_SOAP; - } -#line 15826 "ext/date/lib/parse_date.c" -yy993: - YYDEBUG(993, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '2') { - if(yych <= '/') goto yy57; - if(yych >= '1') goto yy995; - } else { - if(yych <= '3') goto yy996; - if(yych <= '9') goto yy970; - goto yy57; - } -yy994: - YYDEBUG(994, *YYCURSOR); - yyaccept = 17; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'V') { - if(yych <= 'D') { - if(yych <= ' ') { - if(yych == 0x09) goto yy57; - if(yych <= 0x1F) goto yy971; - goto yy57; - } else { - if(yych <= '0') { - if(yych <= '/') goto yy971; - goto yy51; - } else { - if(yych <= '9') goto yy997; - if(yych <= 'C') goto yy971; - goto yy57; - } - } - } else { - if(yych <= 'H') { - if(yych == 'F') goto yy57; - if(yych <= 'G') goto yy971; - goto yy57; - } else { - if(yych <= 'M') { - if(yych <= 'L') goto yy971; - goto yy57; - } else { - if(yych <= 'R') goto yy971; - if(yych <= 'T') goto yy57; - goto yy971; - } - } - } - } else { - if(yych <= 'h') { - if(yych <= 'c') { - if(yych == 'X') goto yy971; - if(yych <= 'Y') goto yy57; - goto yy971; - } else { - if(yych <= 'e') { - if(yych <= 'd') goto yy57; - goto yy971; - } else { - if(yych == 'g') goto yy971; - goto yy57; - } - } - } else { - if(yych <= 't') { - if(yych == 'm') goto yy57; - if(yych <= 'r') goto yy971; - goto yy57; - } else { - if(yych <= 'w') { - if(yych <= 'v') goto yy971; - goto yy57; - } else { - if(yych == 'y') goto yy57; - goto yy971; - } - } - } - } -yy995: - YYDEBUG(995, *YYCURSOR); - yyaccept = 17; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'V') { - if(yych <= 'D') { - if(yych <= ' ') { - if(yych == 0x09) goto yy57; - if(yych <= 0x1F) goto yy971; - goto yy57; - } else { - if(yych <= '/') goto yy971; - if(yych <= '9') goto yy997; - if(yych <= 'C') goto yy971; - goto yy57; - } - } else { - if(yych <= 'H') { - if(yych == 'F') goto yy57; - if(yych <= 'G') goto yy971; - goto yy57; - } else { - if(yych <= 'M') { - if(yych <= 'L') goto yy971; - goto yy57; - } else { - if(yych <= 'R') goto yy971; - if(yych <= 'T') goto yy57; - goto yy971; - } - } - } - } else { - if(yych <= 'h') { - if(yych <= 'c') { - if(yych == 'X') goto yy971; - if(yych <= 'Y') goto yy57; - goto yy971; - } else { - if(yych <= 'e') { - if(yych <= 'd') goto yy57; - goto yy971; - } else { - if(yych == 'g') goto yy971; - goto yy57; - } - } - } else { - if(yych <= 't') { - if(yych == 'm') goto yy57; - if(yych <= 'r') goto yy971; - goto yy57; - } else { - if(yych <= 'w') { - if(yych <= 'v') goto yy971; - goto yy57; - } else { - if(yych == 'y') goto yy57; - goto yy971; - } - } - } - } -yy996: - YYDEBUG(996, *YYCURSOR); - yyaccept = 17; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'V') { - if(yych <= 'D') { - if(yych <= ' ') { - if(yych == 0x09) goto yy57; - if(yych <= 0x1F) goto yy971; - goto yy57; - } else { - if(yych <= '1') { - if(yych <= '/') goto yy971; - } else { - if(yych <= '9') goto yy51; - if(yych <= 'C') goto yy971; - goto yy57; - } - } - } else { - if(yych <= 'H') { - if(yych == 'F') goto yy57; - if(yych <= 'G') goto yy971; - goto yy57; - } else { - if(yych <= 'M') { - if(yych <= 'L') goto yy971; - goto yy57; - } else { - if(yych <= 'R') goto yy971; - if(yych <= 'T') goto yy57; - goto yy971; - } - } - } - } else { - if(yych <= 'h') { - if(yych <= 'c') { - if(yych == 'X') goto yy971; - if(yych <= 'Y') goto yy57; - goto yy971; - } else { - if(yych <= 'e') { - if(yych <= 'd') goto yy57; - goto yy971; - } else { - if(yych == 'g') goto yy971; - goto yy57; - } - } - } else { - if(yych <= 't') { - if(yych == 'm') goto yy57; - if(yych <= 'r') goto yy971; - goto yy57; - } else { - if(yych <= 'w') { - if(yych <= 'v') goto yy971; - goto yy57; - } else { - if(yych == 'y') goto yy57; - goto yy971; - } - } - } - } -yy997: - YYDEBUG(997, *YYCURSOR); - yyaccept = 18; - yych = *(YYMARKER = ++YYCURSOR); - if(yybm[0+yych] & 8) { - goto yy51; - } - if(yych <= 'W') { - if(yych <= 'F') { - if(yych <= ' ') { - if(yych == 0x09) goto yy56; - if(yych >= ' ') goto yy56; - } else { - if(yych == 'D') goto yy61; - if(yych >= 'F') goto yy63; - } - } else { - if(yych <= 'M') { - if(yych == 'H') goto yy60; - if(yych >= 'M') goto yy59; - } else { - if(yych <= 'S') { - if(yych >= 'S') goto yy58; - } else { - if(yych <= 'T') goto yy999; - if(yych >= 'W') goto yy62; - } - } - } - } else { - if(yych <= 'l') { - if(yych <= 'd') { - if(yych == 'Y') goto yy64; - if(yych >= 'd') goto yy61; - } else { - if(yych <= 'f') { - if(yych >= 'f') goto yy63; - } else { - if(yych == 'h') goto yy60; - } - } - } else { - if(yych <= 't') { - if(yych <= 'm') goto yy59; - if(yych <= 'r') goto yy998; - if(yych <= 's') goto yy58; - goto yy1000; - } else { - if(yych <= 'w') { - if(yych >= 'w') goto yy62; - } else { - if(yych == 'y') goto yy64; - } - } - } - } -yy998: - YYDEBUG(998, *YYCURSOR); -#line 1205 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("datenocolon"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->m = timelib_get_nr((char **) &ptr, 2); - s->time->d = timelib_get_nr((char **) &ptr, 2); - TIMELIB_DEINIT; - return TIMELIB_DATE_NOCOLON; - } -#line 16103 "ext/date/lib/parse_date.c" -yy999: - YYDEBUG(999, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'H') { - if(yych <= '2') { - if(yych <= '/') goto yy53; - if(yych <= '1') goto yy1014; - goto yy1015; - } else { - if(yych <= '9') goto yy1016; - if(yych <= 'G') goto yy53; - goto yy66; - } - } else { - if(yych <= 'g') { - if(yych == 'U') goto yy67; - goto yy53; - } else { - if(yych <= 'h') goto yy66; - if(yych == 'u') goto yy67; - goto yy53; - } - } -yy1000: - YYDEBUG(1000, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'H') { - if(yych <= '2') { - if(yych <= '/') goto yy53; - if(yych >= '2') goto yy1002; - } else { - if(yych <= '9') goto yy1003; - if(yych <= 'G') goto yy53; - goto yy66; - } - } else { - if(yych <= 'g') { - if(yych == 'U') goto yy67; - goto yy53; - } else { - if(yych <= 'h') goto yy66; - if(yych == 'u') goto yy67; - goto yy53; - } - } - YYDEBUG(1001, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy1008; - if(yych <= '9') goto yy1003; - goto yy53; -yy1002: - YYDEBUG(1002, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '3') goto yy1008; - if(yych <= '5') goto yy1004; - goto yy53; -yy1003: - YYDEBUG(1003, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= '6') goto yy53; -yy1004: - YYDEBUG(1004, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= ':') goto yy53; -yy1005: - YYDEBUG(1005, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy1006; - if(yych <= '6') goto yy1007; - goto yy53; -yy1006: - YYDEBUG(1006, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy991; - goto yy53; -yy1007: - YYDEBUG(1007, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == '0') goto yy991; - goto yy53; -yy1008: - YYDEBUG(1008, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy1009; - if(yych <= '9') goto yy1005; - goto yy53; -yy1009: - YYDEBUG(1009, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy1010; - if(yych <= '6') goto yy1011; - if(yych <= '9') goto yy1005; - goto yy53; -yy1010: - YYDEBUG(1010, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy1012; - if(yych <= '6') goto yy1013; - if(yych <= '9') goto yy991; - goto yy53; -yy1011: - YYDEBUG(1011, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '0') goto yy1012; - if(yych <= '5') goto yy1006; - if(yych <= '6') goto yy1007; - goto yy53; -yy1012: - YYDEBUG(1012, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy992; - if(yych <= '9') goto yy991; - goto yy992; -yy1013: - YYDEBUG(1013, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == '0') goto yy991; - goto yy992; -yy1014: - YYDEBUG(1014, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy1023; - if(yych <= '9') goto yy1016; - if(yych <= ':') goto yy1017; - goto yy53; -yy1015: - YYDEBUG(1015, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '5') { - if(yych <= '/') goto yy53; - if(yych <= '3') goto yy1023; - goto yy1004; - } else { - if(yych == ':') goto yy1017; - goto yy53; - } -yy1016: - YYDEBUG(1016, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy1004; - if(yych != ':') goto yy53; -yy1017: - YYDEBUG(1017, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= '6') goto yy53; - YYDEBUG(1018, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= ':') goto yy53; - YYDEBUG(1019, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != ':') goto yy53; - YYDEBUG(1020, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy1021; - if(yych <= '6') goto yy1022; - goto yy53; -yy1021: - YYDEBUG(1021, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy991; - goto yy53; -yy1022: - YYDEBUG(1022, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == '0') goto yy991; - goto yy53; -yy1023: - YYDEBUG(1023, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy1009; - if(yych <= '9') goto yy1005; - if(yych <= ':') goto yy1017; - goto yy53; -yy1024: - YYDEBUG(1024, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy57; - if(yych <= '0') goto yy51; - if(yych <= '9') goto yy970; - goto yy57; -yy1025: - YYDEBUG(1025, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '2') { - if(yych <= '/') goto yy57; - if(yych <= '0') goto yy994; - goto yy995; - } else { - if(yych <= '3') goto yy996; - if(yych <= '9') goto yy970; - goto yy57; - } -yy1026: - YYDEBUG(1026, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'C') goto yy1027; - if(yych != 'c') goto yy53; -yy1027: - YYDEBUG(1027, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'E') goto yy1028; - if(yych != 'e') goto yy943; -yy1028: - YYDEBUG(1028, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'M') goto yy1029; - if(yych != 'm') goto yy53; -yy1029: - YYDEBUG(1029, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'B') goto yy1030; - if(yych != 'b') goto yy53; -yy1030: - YYDEBUG(1030, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy1031; - if(yych != 'e') goto yy53; -yy1031: - YYDEBUG(1031, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy1032; - if(yych != 'r') goto yy53; -yy1032: - YYDEBUG(1032, *YYCURSOR); - yych = *++YYCURSOR; - goto yy943; -yy1033: - YYDEBUG(1033, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'V') goto yy1034; - if(yych != 'v') goto yy53; -yy1034: - YYDEBUG(1034, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'E') goto yy1035; - if(yych != 'e') goto yy943; -yy1035: - YYDEBUG(1035, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'M') goto yy1036; - if(yych != 'm') goto yy53; -yy1036: - YYDEBUG(1036, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'B') goto yy1037; - if(yych != 'b') goto yy53; -yy1037: - YYDEBUG(1037, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy1038; - if(yych != 'e') goto yy53; -yy1038: - YYDEBUG(1038, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy1032; - if(yych == 'r') goto yy1032; - goto yy53; -yy1039: - YYDEBUG(1039, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy1040; - if(yych != 't') goto yy53; -yy1040: - YYDEBUG(1040, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'O') goto yy1041; - if(yych != 'o') goto yy943; -yy1041: - YYDEBUG(1041, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'B') goto yy1042; - if(yych != 'b') goto yy53; -yy1042: - YYDEBUG(1042, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy1043; - if(yych != 'e') goto yy53; -yy1043: - YYDEBUG(1043, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy1032; - if(yych == 'r') goto yy1032; - goto yy53; -yy1044: - YYDEBUG(1044, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'P') { - if(yych == 'C') goto yy125; - if(yych <= 'O') goto yy53; - } else { - if(yych <= 'c') { - if(yych <= 'b') goto yy53; - goto yy125; - } else { - if(yych != 'p') goto yy53; - } - } -yy1045: - YYDEBUG(1045, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy1046; - if(yych != 't') goto yy943; -yy1046: - YYDEBUG(1046, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'E') goto yy1047; - if(yych != 'e') goto yy943; -yy1047: - YYDEBUG(1047, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'M') goto yy1048; - if(yych != 'm') goto yy53; -yy1048: - YYDEBUG(1048, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'B') goto yy1049; - if(yych != 'b') goto yy53; -yy1049: - YYDEBUG(1049, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy1050; - if(yych != 'e') goto yy53; -yy1050: - YYDEBUG(1050, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy1032; - if(yych == 'r') goto yy1032; - goto yy53; -yy1051: - YYDEBUG(1051, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'G') goto yy1055; - if(yych == 'g') goto yy1055; - goto yy53; -yy1052: - YYDEBUG(1052, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy1053; - if(yych != 'r') goto yy53; -yy1053: - YYDEBUG(1053, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'I') goto yy1054; - if(yych != 'i') goto yy943; -yy1054: - YYDEBUG(1054, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'L') goto yy1032; - if(yych == 'l') goto yy1032; - goto yy53; -yy1055: - YYDEBUG(1055, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'U') goto yy1056; - if(yych != 'u') goto yy943; -yy1056: - YYDEBUG(1056, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'S') goto yy1057; - if(yych != 's') goto yy53; -yy1057: - YYDEBUG(1057, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy1032; - if(yych == 't') goto yy1032; - goto yy53; -yy1058: - YYDEBUG(1058, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'Y') { - if(yych == 'R') goto yy1059; - if(yych <= 'X') goto yy53; - goto yy1032; - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy53; - } else { - if(yych == 'y') goto yy1032; - goto yy53; - } - } -yy1059: - YYDEBUG(1059, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'C') goto yy1060; - if(yych != 'c') goto yy943; -yy1060: - YYDEBUG(1060, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'H') goto yy1032; - if(yych == 'h') goto yy1032; - goto yy53; -yy1061: - YYDEBUG(1061, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'B') goto yy1062; - if(yych != 'b') goto yy53; -yy1062: - YYDEBUG(1062, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'R') goto yy1063; - if(yych != 'r') goto yy943; -yy1063: - YYDEBUG(1063, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'U') goto yy1064; - if(yych != 'u') goto yy53; -yy1064: - YYDEBUG(1064, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy1065; - if(yych != 'a') goto yy53; -yy1065: - YYDEBUG(1065, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy1066; - if(yych != 'r') goto yy53; -yy1066: - YYDEBUG(1066, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy1032; - if(yych == 'y') goto yy1032; - goto yy53; -yy1067: - YYDEBUG(1067, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'N') { - if(yych == 'L') goto yy1074; - if(yych <= 'M') goto yy53; - goto yy1073; - } else { - if(yych <= 'l') { - if(yych <= 'k') goto yy53; - goto yy1074; - } else { - if(yych == 'n') goto yy1073; - goto yy53; - } - } -yy1068: - YYDEBUG(1068, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'N') goto yy1069; - if(yych != 'n') goto yy53; -yy1069: - YYDEBUG(1069, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'U') goto yy1070; - if(yych != 'u') goto yy943; -yy1070: - YYDEBUG(1070, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy1071; - if(yych != 'a') goto yy53; -yy1071: - YYDEBUG(1071, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy1072; - if(yych != 'r') goto yy53; -yy1072: - YYDEBUG(1072, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy1032; - if(yych == 'y') goto yy1032; - goto yy53; -yy1073: - YYDEBUG(1073, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy1032; - if(yych == 'e') goto yy1032; - goto yy943; -yy1074: - YYDEBUG(1074, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy1032; - if(yych == 'y') goto yy1032; - goto yy943; -yy1075: - YYDEBUG(1075, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'I') goto yy1032; - goto yy943; -yy1076: - YYDEBUG(1076, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != 'I') goto yy943; - YYDEBUG(1077, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'I') goto yy1032; - goto yy943; -yy1078: - YYDEBUG(1078, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'I') goto yy1032; - goto yy943; -yy1079: - YYDEBUG(1079, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '0') goto yy1094; - if(yych <= '9') goto yy1093; - goto yy53; -yy1080: - YYDEBUG(1080, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy1092; - goto yy53; -yy1081: - YYDEBUG(1081, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy1090; - if(yych <= '6') goto yy1089; - goto yy53; -yy1082: - YYDEBUG(1082, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy1061; - if(yych == 'e') goto yy1061; - goto yy53; -yy1083: - YYDEBUG(1083, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy1058; - if(yych == 'a') goto yy1058; - goto yy53; -yy1084: - YYDEBUG(1084, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy1088; - if(yych == 'e') goto yy1088; - goto yy53; -yy1085: - YYDEBUG(1085, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy1026; - if(yych == 'e') goto yy1026; - goto yy53; -yy1086: - YYDEBUG(1086, *YYCURSOR); - ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 9) YYFILL(9); - yych = *YYCURSOR; -yy1087: - YYDEBUG(1087, *YYCURSOR); - YYDEBUG(-1, yych); - switch(yych) { - case 0x09: - case ' ': - case '-': - case '.': goto yy1086; - case 'A': - case 'a': goto yy949; - case 'D': - case 'd': goto yy1085; - case 'F': - case 'f': goto yy1082; - case 'I': goto yy942; - case 'J': - case 'j': goto yy946; - case 'M': - case 'm': goto yy1083; - case 'N': - case 'n': goto yy952; - case 'O': - case 'o': goto yy951; - case 'S': - case 's': goto yy1084; - case 'V': goto yy944; - case 'X': goto yy945; - default: goto yy53; - } -yy1088: - YYDEBUG(1088, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'P') goto yy1045; - if(yych == 'p') goto yy1045; - goto yy53; -yy1089: - YYDEBUG(1089, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '6') goto yy1091; - goto yy53; -yy1090: - YYDEBUG(1090, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= ':') goto yy53; -yy1091: - YYDEBUG(1091, *YYCURSOR); - yych = *++YYCURSOR; - goto yy971; -yy1092: - YYDEBUG(1092, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy1091; - goto yy53; -yy1093: - YYDEBUG(1093, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy1091; - goto yy53; -yy1094: - YYDEBUG(1094, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '0') goto yy53; - if(yych <= '9') goto yy1091; - goto yy53; -yy1095: - YYDEBUG(1095, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '.') goto yy53; - if(yych <= '/') goto yy1098; - if(yych <= '0') goto yy1097; - if(yych <= '9') goto yy1108; - goto yy53; -yy1096: - YYDEBUG(1096, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '.') goto yy53; - if(yych <= '/') goto yy1098; - if(yych <= '2') goto yy1108; - goto yy53; -yy1097: - YYDEBUG(1097, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != '/') goto yy53; -yy1098: - YYDEBUG(1098, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '2') goto yy1099; - if(yych <= '3') goto yy1101; - if(yych <= '9') goto yy1102; - goto yy53; -yy1099: - YYDEBUG(1099, *YYCURSOR); - yyaccept = 20; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'n') { - if(yych <= '/') goto yy1100; - if(yych <= '9') goto yy1102; - if(yych >= 'n') goto yy1104; - } else { - if(yych <= 'r') { - if(yych >= 'r') goto yy1105; - } else { - if(yych <= 's') goto yy1103; - if(yych <= 't') goto yy1106; - } - } -yy1100: - YYDEBUG(1100, *YYCURSOR); -#line 1090 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("iso8601date | iso8601dateslash | dateslash"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->m = timelib_get_nr((char **) &ptr, 2); - s->time->d = timelib_get_nr((char **) &ptr, 2); - TIMELIB_DEINIT; - return TIMELIB_ISO_DATE; - } -#line 16798 "ext/date/lib/parse_date.c" -yy1101: - YYDEBUG(1101, *YYCURSOR); - yyaccept = 20; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'n') { - if(yych <= '/') goto yy1100; - if(yych <= '1') goto yy1102; - if(yych <= 'm') goto yy1100; - goto yy1104; - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy1100; - goto yy1105; - } else { - if(yych <= 's') goto yy1103; - if(yych <= 't') goto yy1106; - goto yy1100; - } - } -yy1102: - YYDEBUG(1102, *YYCURSOR); - yyaccept = 20; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'q') { - if(yych == 'n') goto yy1104; - goto yy1100; - } else { - if(yych <= 'r') goto yy1105; - if(yych <= 's') goto yy1103; - if(yych <= 't') goto yy1106; - goto yy1100; - } -yy1103: - YYDEBUG(1103, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 't') goto yy1107; - goto yy53; -yy1104: - YYDEBUG(1104, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'd') goto yy1107; - goto yy53; -yy1105: - YYDEBUG(1105, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'd') goto yy1107; - goto yy53; -yy1106: - YYDEBUG(1106, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != 'h') goto yy53; -yy1107: - YYDEBUG(1107, *YYCURSOR); - yych = *++YYCURSOR; - goto yy1100; -yy1108: - YYDEBUG(1108, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != '/') goto yy53; - YYDEBUG(1109, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '2') { - if(yych <= '/') goto yy53; - if(yych >= '1') goto yy1111; - } else { - if(yych <= '3') goto yy1112; - if(yych <= '9') goto yy1102; - goto yy53; - } - YYDEBUG(1110, *YYCURSOR); - yyaccept = 20; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'n') { - if(yych <= '0') { - if(yych <= '/') goto yy1100; - goto yy1102; - } else { - if(yych <= '9') goto yy1113; - if(yych <= 'm') goto yy1100; - goto yy1104; - } - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy1100; - goto yy1105; - } else { - if(yych <= 's') goto yy1103; - if(yych <= 't') goto yy1106; - goto yy1100; - } - } -yy1111: - YYDEBUG(1111, *YYCURSOR); - yyaccept = 20; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'n') { - if(yych <= '/') goto yy1100; - if(yych <= '9') goto yy1113; - if(yych <= 'm') goto yy1100; - goto yy1104; - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy1100; - goto yy1105; - } else { - if(yych <= 's') goto yy1103; - if(yych <= 't') goto yy1106; - goto yy1100; - } - } -yy1112: - YYDEBUG(1112, *YYCURSOR); - yyaccept = 20; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'n') { - if(yych <= '/') goto yy1100; - if(yych <= '1') goto yy1113; - if(yych <= 'm') goto yy1100; - goto yy1104; - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy1100; - goto yy1105; - } else { - if(yych <= 's') goto yy1103; - if(yych <= 't') goto yy1106; - goto yy1100; - } - } -yy1113: - YYDEBUG(1113, *YYCURSOR); - yyaccept = 20; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'n') { - if(yych == '/') goto yy1107; - if(yych <= 'm') goto yy1100; - goto yy1104; - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy1100; - goto yy1105; - } else { - if(yych <= 's') goto yy1103; - if(yych <= 't') goto yy1106; - goto yy1100; - } - } -yy1114: - YYDEBUG(1114, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych == 'A') goto yy1191; - if(yych <= 'T') goto yy53; - goto yy1190; - } else { - if(yych <= 'a') { - if(yych <= '`') goto yy53; - goto yy1191; - } else { - if(yych == 'u') goto yy1190; - goto yy53; - } - } -yy1115: - YYDEBUG(1115, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy1188; - if(yych == 'e') goto yy1188; - goto yy53; -yy1116: - YYDEBUG(1116, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy1185; - if(yych == 'a') goto yy1185; - goto yy53; -yy1117: - YYDEBUG(1117, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych == 'P') goto yy1182; - if(yych <= 'T') goto yy53; - goto yy1181; - } else { - if(yych <= 'p') { - if(yych <= 'o') goto yy53; - goto yy1182; - } else { - if(yych == 'u') goto yy1181; - goto yy53; - } - } -yy1118: - YYDEBUG(1118, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy1178; - if(yych == 'e') goto yy1178; - goto yy53; -yy1119: - YYDEBUG(1119, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'C') goto yy1176; - if(yych == 'c') goto yy1176; - goto yy53; -yy1120: - YYDEBUG(1120, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'O') goto yy1174; - if(yych == 'o') goto yy1174; - goto yy53; -yy1121: - YYDEBUG(1121, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'E') goto yy1172; - if(yych == 'e') goto yy1172; - goto yy53; -yy1122: - YYDEBUG(1122, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '0') goto yy960; - if(yych <= '4') goto yy961; - if(yych <= '5') goto yy962; - goto yy53; -yy1123: - YYDEBUG(1123, *YYCURSOR); - yyaccept = 21; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '-') goto yy1127; - } else { - if(yych <= '0') goto yy1126; - if(yych <= '9') goto yy1146; - } -yy1124: - YYDEBUG(1124, *YYCURSOR); -#line 1102 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("gnudateshorter"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->m = timelib_get_nr((char **) &ptr, 2); - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_ISO_DATE; - } -#line 17045 "ext/date/lib/parse_date.c" -yy1125: - YYDEBUG(1125, *YYCURSOR); - yyaccept = 21; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '-') goto yy1127; - if(yych <= '/') goto yy1124; - if(yych <= '2') goto yy1146; - goto yy1124; -yy1126: - YYDEBUG(1126, *YYCURSOR); - yyaccept = 21; - yych = *(YYMARKER = ++YYCURSOR); - if(yych != '-') goto yy1124; -yy1127: - YYDEBUG(1127, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '2') goto yy1128; - if(yych <= '3') goto yy1129; - if(yych <= '9') goto yy1130; - goto yy53; -yy1128: - YYDEBUG(1128, *YYCURSOR); - yyaccept = 13; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'm') { - if(yych <= '9') { - if(yych <= '/') goto yy825; - goto yy1130; - } else { - if(yych == 'T') goto yy1135; - goto yy825; - } - } else { - if(yych <= 'r') { - if(yych <= 'n') goto yy1132; - if(yych <= 'q') goto yy825; - goto yy1133; - } else { - if(yych <= 's') goto yy1131; - if(yych <= 't') goto yy1134; - goto yy825; - } - } -yy1129: - YYDEBUG(1129, *YYCURSOR); - yyaccept = 13; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'm') { - if(yych <= '1') { - if(yych <= '/') goto yy825; - } else { - if(yych == 'T') goto yy1135; - goto yy825; - } - } else { - if(yych <= 'r') { - if(yych <= 'n') goto yy1132; - if(yych <= 'q') goto yy825; - goto yy1133; - } else { - if(yych <= 's') goto yy1131; - if(yych <= 't') goto yy1134; - goto yy825; - } - } -yy1130: - YYDEBUG(1130, *YYCURSOR); - yyaccept = 13; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'n') { - if(yych == 'T') goto yy1135; - if(yych <= 'm') goto yy825; - goto yy1132; - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy825; - goto yy1133; - } else { - if(yych <= 's') goto yy1131; - if(yych <= 't') goto yy1134; - goto yy825; - } - } -yy1131: - YYDEBUG(1131, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 't') goto yy1145; - goto yy53; -yy1132: - YYDEBUG(1132, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'd') goto yy1145; - goto yy53; -yy1133: - YYDEBUG(1133, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'd') goto yy1145; - goto yy53; -yy1134: - YYDEBUG(1134, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'h') goto yy1145; - goto yy53; -yy1135: - YYDEBUG(1135, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '1') goto yy1136; - if(yych <= '2') goto yy1137; - if(yych <= '9') goto yy1138; - goto yy53; -yy1136: - YYDEBUG(1136, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy1138; - if(yych <= ':') goto yy1139; - goto yy53; -yy1137: - YYDEBUG(1137, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '3') goto yy1138; - if(yych == ':') goto yy1139; - goto yy53; -yy1138: - YYDEBUG(1138, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != ':') goto yy53; -yy1139: - YYDEBUG(1139, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy1140; - if(yych <= '9') goto yy1141; - goto yy53; -yy1140: - YYDEBUG(1140, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy1141; - if(yych <= ':') goto yy1142; - goto yy53; -yy1141: - YYDEBUG(1141, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != ':') goto yy53; -yy1142: - YYDEBUG(1142, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy1143; - if(yych <= '6') goto yy1144; - if(yych <= '9') goto yy991; - goto yy53; -yy1143: - YYDEBUG(1143, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy992; - if(yych <= '9') goto yy991; - goto yy992; -yy1144: - YYDEBUG(1144, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == '0') goto yy991; - goto yy992; -yy1145: - YYDEBUG(1145, *YYCURSOR); - yyaccept = 13; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == 'T') goto yy1135; - goto yy825; -yy1146: - YYDEBUG(1146, *YYCURSOR); - yyaccept = 21; - yych = *(YYMARKER = ++YYCURSOR); - if(yych != '-') goto yy1124; - YYDEBUG(1147, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '2') { - if(yych <= '/') goto yy53; - if(yych >= '1') goto yy1149; - } else { - if(yych <= '3') goto yy1150; - if(yych <= '9') goto yy1130; - goto yy53; - } - YYDEBUG(1148, *YYCURSOR); - yyaccept = 13; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'm') { - if(yych <= '9') { - if(yych <= '/') goto yy825; - if(yych <= '0') goto yy1130; - goto yy1151; - } else { - if(yych == 'T') goto yy1135; - goto yy825; - } - } else { - if(yych <= 'r') { - if(yych <= 'n') goto yy1132; - if(yych <= 'q') goto yy825; - goto yy1133; - } else { - if(yych <= 's') goto yy1131; - if(yych <= 't') goto yy1134; - goto yy825; - } - } -yy1149: - YYDEBUG(1149, *YYCURSOR); - yyaccept = 13; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'm') { - if(yych <= '9') { - if(yych <= '/') goto yy825; - goto yy1151; - } else { - if(yych == 'T') goto yy1135; - goto yy825; - } - } else { - if(yych <= 'r') { - if(yych <= 'n') goto yy1132; - if(yych <= 'q') goto yy825; - goto yy1133; - } else { - if(yych <= 's') goto yy1131; - if(yych <= 't') goto yy1134; - goto yy825; - } - } -yy1150: - YYDEBUG(1150, *YYCURSOR); - yyaccept = 13; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'm') { - if(yych <= '1') { - if(yych <= '/') goto yy825; - } else { - if(yych == 'T') goto yy1135; - goto yy825; - } - } else { - if(yych <= 'r') { - if(yych <= 'n') goto yy1132; - if(yych <= 'q') goto yy825; - goto yy1133; - } else { - if(yych <= 's') goto yy1131; - if(yych <= 't') goto yy1134; - goto yy825; - } - } -yy1151: - YYDEBUG(1151, *YYCURSOR); - yyaccept = 20; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'n') { - if(yych == 'T') goto yy1152; - if(yych <= 'm') goto yy1100; - goto yy1132; - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy1100; - goto yy1133; - } else { - if(yych <= 's') goto yy1131; - if(yych <= 't') goto yy1134; - goto yy1100; - } - } -yy1152: - YYDEBUG(1152, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '1') goto yy1153; - if(yych <= '2') goto yy1154; - if(yych <= '9') goto yy1138; - goto yy53; -yy1153: - YYDEBUG(1153, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy1155; - if(yych <= ':') goto yy1139; - goto yy53; -yy1154: - YYDEBUG(1154, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '3') goto yy1155; - if(yych == ':') goto yy1139; - goto yy53; -yy1155: - YYDEBUG(1155, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != ':') goto yy53; - YYDEBUG(1156, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy1157; - if(yych <= '9') goto yy1141; - goto yy53; -yy1157: - YYDEBUG(1157, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy1158; - if(yych <= ':') goto yy1142; - goto yy53; -yy1158: - YYDEBUG(1158, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != ':') goto yy53; - YYDEBUG(1159, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy1160; - if(yych <= '6') goto yy1161; - if(yych <= '9') goto yy991; - goto yy53; -yy1160: - YYDEBUG(1160, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy992; - if(yych <= '9') goto yy1162; - goto yy992; -yy1161: - YYDEBUG(1161, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != '0') goto yy992; -yy1162: - YYDEBUG(1162, *YYCURSOR); - yyaccept = 22; - yych = *(YYMARKER = ++YYCURSOR); - if(yych != '.') goto yy992; - YYDEBUG(1163, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= ':') goto yy53; -yy1164: - YYDEBUG(1164, *YYCURSOR); - yyaccept = 22; - YYMARKER = ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 6) YYFILL(6); - yych = *YYCURSOR; - YYDEBUG(1165, *YYCURSOR); - if(yych <= ',') { - if(yych != '+') goto yy992; - } else { - if(yych <= '-') goto yy1166; - if(yych <= '/') goto yy992; - if(yych <= '9') goto yy1164; - goto yy992; - } -yy1166: - YYDEBUG(1166, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '1') goto yy1167; - if(yych <= '2') goto yy1168; - if(yych <= '9') goto yy1169; - goto yy53; -yy1167: - YYDEBUG(1167, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy992; - if(yych <= '9') goto yy1169; - if(yych <= ':') goto yy1170; - goto yy992; -yy1168: - YYDEBUG(1168, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '5') { - if(yych <= '/') goto yy992; - if(yych >= '4') goto yy1171; - } else { - if(yych <= '9') goto yy991; - if(yych <= ':') goto yy1170; - goto yy992; - } -yy1169: - YYDEBUG(1169, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy992; - if(yych <= '5') goto yy1171; - if(yych <= '9') goto yy991; - if(yych >= ';') goto yy992; -yy1170: - YYDEBUG(1170, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy992; - if(yych <= '5') goto yy1171; - if(yych <= '9') goto yy991; - goto yy992; -yy1171: - YYDEBUG(1171, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy992; - if(yych <= '9') goto yy991; - goto yy992; -yy1172: - YYDEBUG(1172, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'C') goto yy1173; - if(yych != 'c') goto yy53; -yy1173: - YYDEBUG(1173, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'D') { - if(yych == '-') goto yy919; - goto yy943; - } else { - if(yych <= 'E') goto yy1028; - if(yych == 'e') goto yy1028; - goto yy943; - } -yy1174: - YYDEBUG(1174, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'V') goto yy1175; - if(yych != 'v') goto yy53; -yy1175: - YYDEBUG(1175, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'D') { - if(yych == '-') goto yy919; - goto yy943; - } else { - if(yych <= 'E') goto yy1035; - if(yych == 'e') goto yy1035; - goto yy943; - } -yy1176: - YYDEBUG(1176, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy1177; - if(yych != 't') goto yy53; -yy1177: - YYDEBUG(1177, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'N') { - if(yych == '-') goto yy919; - goto yy943; - } else { - if(yych <= 'O') goto yy1041; - if(yych == 'o') goto yy1041; - goto yy943; - } -yy1178: - YYDEBUG(1178, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'P') goto yy1179; - if(yych != 'p') goto yy53; -yy1179: - YYDEBUG(1179, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'S') { - if(yych == '-') goto yy919; - goto yy943; - } else { - if(yych <= 'T') goto yy1180; - if(yych != 't') goto yy943; - } -yy1180: - YYDEBUG(1180, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'D') { - if(yych == '-') goto yy919; - goto yy943; - } else { - if(yych <= 'E') goto yy1047; - if(yych == 'e') goto yy1047; - goto yy943; - } -yy1181: - YYDEBUG(1181, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'G') goto yy1184; - if(yych == 'g') goto yy1184; - goto yy53; -yy1182: - YYDEBUG(1182, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy1183; - if(yych != 'r') goto yy53; -yy1183: - YYDEBUG(1183, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'H') { - if(yych == '-') goto yy919; - goto yy943; - } else { - if(yych <= 'I') goto yy1054; - if(yych == 'i') goto yy1054; - goto yy943; - } -yy1184: - YYDEBUG(1184, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych == '-') goto yy919; - goto yy943; - } else { - if(yych <= 'U') goto yy1056; - if(yych == 'u') goto yy1056; - goto yy943; - } -yy1185: - YYDEBUG(1185, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'Y') { - if(yych == 'R') goto yy1186; - if(yych <= 'X') goto yy53; - goto yy1187; - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy53; - } else { - if(yych == 'y') goto yy1187; - goto yy53; - } - } -yy1186: - YYDEBUG(1186, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'B') { - if(yych == '-') goto yy919; - goto yy943; - } else { - if(yych <= 'C') goto yy1060; - if(yych == 'c') goto yy1060; - goto yy943; - } -yy1187: - YYDEBUG(1187, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '-') goto yy919; - goto yy943; -yy1188: - YYDEBUG(1188, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'B') goto yy1189; - if(yych != 'b') goto yy53; -yy1189: - YYDEBUG(1189, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'Q') { - if(yych == '-') goto yy919; - goto yy943; - } else { - if(yych <= 'R') goto yy1063; - if(yych == 'r') goto yy1063; - goto yy943; - } -yy1190: - YYDEBUG(1190, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'N') { - if(yych == 'L') goto yy1194; - if(yych <= 'M') goto yy53; - goto yy1193; - } else { - if(yych <= 'l') { - if(yych <= 'k') goto yy53; - goto yy1194; - } else { - if(yych == 'n') goto yy1193; - goto yy53; - } - } -yy1191: - YYDEBUG(1191, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'N') goto yy1192; - if(yych != 'n') goto yy53; -yy1192: - YYDEBUG(1192, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych == '-') goto yy919; - goto yy943; - } else { - if(yych <= 'U') goto yy1070; - if(yych == 'u') goto yy1070; - goto yy943; - } -yy1193: - YYDEBUG(1193, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'D') { - if(yych == '-') goto yy919; - goto yy943; - } else { - if(yych <= 'E') goto yy1032; - if(yych == 'e') goto yy1032; - goto yy943; - } -yy1194: - YYDEBUG(1194, *YYCURSOR); - yyaccept = 19; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'X') { - if(yych == '-') goto yy919; - goto yy943; - } else { - if(yych <= 'Y') goto yy1032; - if(yych == 'y') goto yy1032; - goto yy943; - } -yy1195: - YYDEBUG(1195, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy749; - goto yy896; - } else { - if(yych <= ',') goto yy749; - if(yych <= '.') goto yy896; - goto yy895; - } - } else { - if(yych <= 'U') { - if(yych <= 'T') goto yy749; - goto yy74; - } else { - if(yych == 'u') goto yy74; - goto yy749; - } - } -yy1196: - YYDEBUG(1196, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'P') { - if(yych == 'C') goto yy125; - if(yych <= 'O') goto yy53; - goto yy757; - } else { - if(yych <= 'c') { - if(yych <= 'b') goto yy53; - goto yy125; - } else { - if(yych == 'p') goto yy757; - goto yy53; - } - } -yy1197: - YYDEBUG(1197, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '9') { - if(yych <= ',') { - if(yych != 0x09) goto yy1200; - } else { - if(yych <= '-') goto yy660; - if(yych <= '.') goto yy896; - if(yych <= '/') goto yy895; - goto yy900; - } - } else { - if(yych <= 'q') { - if(yych == 'n') goto yy657; - goto yy1200; - } else { - if(yych <= 'r') goto yy658; - if(yych <= 's') goto yy651; - if(yych <= 't') goto yy655; - goto yy1200; - } - } -yy1198: - YYDEBUG(1198, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy1200; - if(yych <= '0') goto yy897; - if(yych <= '1') goto yy898; - if(yych <= '9') goto yy899; - goto yy1200; -yy1199: - YYDEBUG(1199, *YYCURSOR); - ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 13) YYFILL(13); - yych = *YYCURSOR; -yy1200: - YYDEBUG(1200, *YYCURSOR); - YYDEBUG(-1, yych); - switch(yych) { - case 0x09: - case ' ': goto yy1199; - case '-': - case '.': goto yy748; - case 'A': - case 'a': goto yy745; - case 'D': - case 'd': goto yy653; - case 'F': - case 'f': goto yy654; - case 'H': - case 'h': goto yy60; - case 'I': goto yy662; - case 'J': - case 'j': goto yy666; - case 'M': - case 'm': goto yy652; - case 'N': - case 'n': goto yy669; - case 'O': - case 'o': goto yy668; - case 'S': - case 's': goto yy650; - case 'T': - case 't': goto yy65; - case 'V': goto yy664; - case 'W': - case 'w': goto yy62; - case 'X': goto yy665; - case 'Y': - case 'y': goto yy64; - default: goto yy53; - } -yy1201: - YYDEBUG(1201, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '9') { - if(yych <= '-') { - if(yych == 0x09) goto yy1198; - if(yych <= ',') goto yy1200; - goto yy660; - } else { - if(yych <= '.') goto yy1202; - if(yych <= '/') goto yy895; - if(yych <= '5') goto yy1204; - goto yy900; - } - } else { - if(yych <= 'q') { - if(yych <= ':') goto yy1203; - if(yych == 'n') goto yy657; - goto yy1200; - } else { - if(yych <= 'r') goto yy658; - if(yych <= 's') goto yy651; - if(yych <= 't') goto yy655; - goto yy1200; - } - } -yy1202: - YYDEBUG(1202, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '1') { - if(yych <= '/') goto yy749; - if(yych <= '0') goto yy1226; - goto yy1227; - } else { - if(yych <= '5') goto yy1228; - if(yych <= '9') goto yy1229; - goto yy749; - } -yy1203: - YYDEBUG(1203, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy1221; - if(yych <= '9') goto yy1222; - goto yy53; -yy1204: - YYDEBUG(1204, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == '-') goto yy901; - if(yych <= '/') goto yy57; - if(yych >= ':') goto yy57; - YYDEBUG(1205, *YYCURSOR); - yyaccept = 23; - yych = *(YYMARKER = ++YYCURSOR); - YYDEBUG(-1, yych); - switch(yych) { - case 0x09: - case ' ': - case 'A': - case 'D': - case 'F': - case 'H': - case 'I': - case 'J': - case 'M': - case 'N': - case 'O': - case 'S': - case 'T': - case 'V': - case 'X': - case 'Y': - case 'a': - case 'd': - case 'f': - case 'h': - case 'j': - case 'm': - case 'n': - case 'o': - case 's': - case 't': - case 'w': - case 'y': goto yy940; - case '-': goto yy937; - case '.': goto yy941; - case '/': goto yy938; - case '0': goto yy1207; - case '1': goto yy1208; - case '2': goto yy1209; - case '3': goto yy1210; - case '4': - case '5': goto yy1211; - case '6': goto yy1212; - case '7': - case '8': - case '9': goto yy51; - case ':': goto yy956; - case 'W': goto yy959; - default: goto yy1206; - } -yy1206: - YYDEBUG(1206, *YYCURSOR); -#line 1009 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("gnunocolon"); - TIMELIB_INIT; - switch (s->time->have_time) { - case 0: - s->time->h = timelib_get_nr((char **) &ptr, 2); - s->time->i = timelib_get_nr((char **) &ptr, 2); - s->time->s = 0; - break; - case 1: - s->time->y = timelib_get_nr((char **) &ptr, 4); - break; - default: - TIMELIB_DEINIT; - add_error(s, "Double time specification"); - return TIMELIB_ERROR; - } - s->time->have_time++; - TIMELIB_DEINIT; - return TIMELIB_GNU_NOCOLON; - } -#line 17906 "ext/date/lib/parse_date.c" -yy1207: - YYDEBUG(1207, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy57; - if(yych <= '0') goto yy1219; - if(yych <= '9') goto yy1220; - goto yy57; -yy1208: - YYDEBUG(1208, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy57; - if(yych <= '2') goto yy1218; - if(yych <= '9') goto yy1217; - goto yy57; -yy1209: - YYDEBUG(1209, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy57; - if(yych <= '9') goto yy1217; - goto yy57; -yy1210: - YYDEBUG(1210, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy57; - if(yych <= '5') goto yy1215; - if(yych <= '6') goto yy1216; - if(yych <= '9') goto yy1213; - goto yy57; -yy1211: - YYDEBUG(1211, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy57; - if(yych <= '9') goto yy1213; - goto yy57; -yy1212: - YYDEBUG(1212, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy57; - if(yych <= '0') goto yy1213; - if(yych <= '9') goto yy51; - goto yy57; -yy1213: - YYDEBUG(1213, *YYCURSOR); - yyaccept = 24; - yych = *(YYMARKER = ++YYCURSOR); - if(yybm[0+yych] & 8) { - goto yy51; - } - if(yych <= 'W') { - if(yych <= 'F') { - if(yych <= ' ') { - if(yych == 0x09) goto yy57; - if(yych >= ' ') goto yy57; - } else { - if(yych == 'D') goto yy57; - if(yych >= 'F') goto yy57; - } - } else { - if(yych <= 'M') { - if(yych == 'H') goto yy57; - if(yych >= 'M') goto yy57; - } else { - if(yych <= 'R') goto yy1214; - if(yych <= 'T') goto yy57; - if(yych >= 'W') goto yy57; - } - } - } else { - if(yych <= 'h') { - if(yych <= 'd') { - if(yych == 'Y') goto yy57; - if(yych >= 'd') goto yy57; - } else { - if(yych == 'f') goto yy57; - if(yych >= 'h') goto yy57; - } - } else { - if(yych <= 't') { - if(yych == 'm') goto yy57; - if(yych >= 's') goto yy57; - } else { - if(yych <= 'w') { - if(yych >= 'w') goto yy57; - } else { - if(yych == 'y') goto yy57; - } - } - } - } -yy1214: - YYDEBUG(1214, *YYCURSOR); -#line 1055 "ext/date/lib/parse_date.re" - { - int tz_not_found; - DEBUG_OUTPUT("iso8601nocolon"); - TIMELIB_INIT; - TIMELIB_HAVE_TIME(); - s->time->h = timelib_get_nr((char **) &ptr, 2); - s->time->i = timelib_get_nr((char **) &ptr, 2); - s->time->s = timelib_get_nr((char **) &ptr, 2); - - if (*ptr != '\0') { - s->time->z = timelib_get_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb); - if (tz_not_found) { - add_error(s, "The timezone could not be found in the database"); - } - } - TIMELIB_DEINIT; - return TIMELIB_ISO_NOCOLON; - } -#line 18017 "ext/date/lib/parse_date.c" -yy1215: - YYDEBUG(1215, *YYCURSOR); - yyaccept = 24; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'V') { - if(yych <= 'D') { - if(yych <= ' ') { - if(yych == 0x09) goto yy57; - if(yych <= 0x1F) goto yy1214; - goto yy57; - } else { - if(yych <= '/') goto yy1214; - if(yych <= '9') goto yy970; - if(yych <= 'C') goto yy1214; - goto yy57; - } - } else { - if(yych <= 'H') { - if(yych == 'F') goto yy57; - if(yych <= 'G') goto yy1214; - goto yy57; - } else { - if(yych <= 'M') { - if(yych <= 'L') goto yy1214; - goto yy57; - } else { - if(yych <= 'R') goto yy1214; - if(yych <= 'T') goto yy57; - goto yy1214; - } - } - } - } else { - if(yych <= 'h') { - if(yych <= 'c') { - if(yych == 'X') goto yy1214; - if(yych <= 'Y') goto yy57; - goto yy1214; - } else { - if(yych <= 'e') { - if(yych <= 'd') goto yy57; - goto yy1214; - } else { - if(yych == 'g') goto yy1214; - goto yy57; - } - } - } else { - if(yych <= 't') { - if(yych == 'm') goto yy57; - if(yych <= 'r') goto yy1214; - goto yy57; - } else { - if(yych <= 'w') { - if(yych <= 'v') goto yy1214; - goto yy57; - } else { - if(yych == 'y') goto yy57; - goto yy1214; - } - } - } - } -yy1216: - YYDEBUG(1216, *YYCURSOR); - yyaccept = 24; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'V') { - if(yych <= 'D') { - if(yych <= ' ') { - if(yych == 0x09) goto yy57; - if(yych <= 0x1F) goto yy1214; - goto yy57; - } else { - if(yych <= '6') { - if(yych <= '/') goto yy1214; - goto yy970; - } else { - if(yych <= '9') goto yy51; - if(yych <= 'C') goto yy1214; - goto yy57; - } - } - } else { - if(yych <= 'H') { - if(yych == 'F') goto yy57; - if(yych <= 'G') goto yy1214; - goto yy57; - } else { - if(yych <= 'M') { - if(yych <= 'L') goto yy1214; - goto yy57; - } else { - if(yych <= 'R') goto yy1214; - if(yych <= 'T') goto yy57; - goto yy1214; - } - } - } - } else { - if(yych <= 'h') { - if(yych <= 'c') { - if(yych == 'X') goto yy1214; - if(yych <= 'Y') goto yy57; - goto yy1214; - } else { - if(yych <= 'e') { - if(yych <= 'd') goto yy57; - goto yy1214; - } else { - if(yych == 'g') goto yy1214; - goto yy57; - } - } - } else { - if(yych <= 't') { - if(yych == 'm') goto yy57; - if(yych <= 'r') goto yy1214; - goto yy57; - } else { - if(yych <= 'w') { - if(yych <= 'v') goto yy1214; - goto yy57; - } else { - if(yych == 'y') goto yy57; - goto yy1214; - } - } - } - } -yy1217: - YYDEBUG(1217, *YYCURSOR); - yyaccept = 24; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'V') { - if(yych <= 'D') { - if(yych <= ' ') { - if(yych == 0x09) goto yy57; - if(yych <= 0x1F) goto yy1214; - goto yy57; - } else { - if(yych <= '/') goto yy1214; - if(yych <= '9') goto yy970; - if(yych <= 'C') goto yy1214; - goto yy57; - } - } else { - if(yych <= 'H') { - if(yych == 'F') goto yy57; - if(yych <= 'G') goto yy1214; - goto yy57; - } else { - if(yych <= 'M') { - if(yych <= 'L') goto yy1214; - goto yy57; - } else { - if(yych <= 'R') goto yy1214; - if(yych <= 'T') goto yy57; - goto yy1214; - } - } - } - } else { - if(yych <= 'h') { - if(yych <= 'c') { - if(yych == 'X') goto yy1214; - if(yych <= 'Y') goto yy57; - goto yy1214; - } else { - if(yych <= 'e') { - if(yych <= 'd') goto yy57; - goto yy1214; - } else { - if(yych == 'g') goto yy1214; - goto yy57; - } - } - } else { - if(yych <= 't') { - if(yych == 'm') goto yy57; - if(yych <= 'r') goto yy1214; - goto yy57; - } else { - if(yych <= 'w') { - if(yych <= 'v') goto yy1214; - goto yy57; - } else { - if(yych == 'y') goto yy57; - goto yy1214; - } - } - } - } -yy1218: - YYDEBUG(1218, *YYCURSOR); - yyaccept = 24; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= '9') { - if(yych <= ' ') { - if(yych == 0x09) goto yy57; - if(yych <= 0x1F) goto yy1214; - goto yy57; - } else { - if(yych <= '0') { - if(yych <= '/') goto yy1214; - goto yy994; - } else { - if(yych <= '2') goto yy995; - if(yych <= '3') goto yy996; - goto yy970; - } - } - } else { - if(yych <= 'G') { - if(yych <= 'D') { - if(yych <= 'C') goto yy1214; - goto yy57; - } else { - if(yych == 'F') goto yy57; - goto yy1214; - } - } else { - if(yych <= 'L') { - if(yych <= 'H') goto yy57; - goto yy1214; - } else { - if(yych <= 'M') goto yy57; - if(yych <= 'R') goto yy1214; - goto yy57; - } - } - } - } else { - if(yych <= 'g') { - if(yych <= 'Y') { - if(yych == 'W') goto yy57; - if(yych <= 'X') goto yy1214; - goto yy57; - } else { - if(yych <= 'd') { - if(yych <= 'c') goto yy1214; - goto yy57; - } else { - if(yych == 'f') goto yy57; - goto yy1214; - } - } - } else { - if(yych <= 't') { - if(yych <= 'l') { - if(yych <= 'h') goto yy57; - goto yy1214; - } else { - if(yych <= 'm') goto yy57; - if(yych <= 'r') goto yy1214; - goto yy57; - } - } else { - if(yych <= 'w') { - if(yych <= 'v') goto yy1214; - goto yy57; - } else { - if(yych == 'y') goto yy57; - goto yy1214; - } - } - } - } -yy1219: - YYDEBUG(1219, *YYCURSOR); - yyaccept = 24; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'V') { - if(yych <= 'D') { - if(yych <= ' ') { - if(yych == 0x09) goto yy57; - if(yych <= 0x1F) goto yy1214; - goto yy57; - } else { - if(yych <= '0') { - if(yych <= '/') goto yy1214; - goto yy51; - } else { - if(yych <= '9') goto yy970; - if(yych <= 'C') goto yy1214; - goto yy57; - } - } - } else { - if(yych <= 'H') { - if(yych == 'F') goto yy57; - if(yych <= 'G') goto yy1214; - goto yy57; - } else { - if(yych <= 'M') { - if(yych <= 'L') goto yy1214; - goto yy57; - } else { - if(yych <= 'R') goto yy1214; - if(yych <= 'T') goto yy57; - goto yy1214; - } - } - } - } else { - if(yych <= 'h') { - if(yych <= 'c') { - if(yych == 'X') goto yy1214; - if(yych <= 'Y') goto yy57; - goto yy1214; - } else { - if(yych <= 'e') { - if(yych <= 'd') goto yy57; - goto yy1214; - } else { - if(yych == 'g') goto yy1214; - goto yy57; - } - } - } else { - if(yych <= 't') { - if(yych == 'm') goto yy57; - if(yych <= 'r') goto yy1214; - goto yy57; - } else { - if(yych <= 'w') { - if(yych <= 'v') goto yy1214; - goto yy57; - } else { - if(yych == 'y') goto yy57; - goto yy1214; - } - } - } - } -yy1220: - YYDEBUG(1220, *YYCURSOR); - yyaccept = 24; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= '9') { - if(yych <= ' ') { - if(yych == 0x09) goto yy57; - if(yych <= 0x1F) goto yy1214; - goto yy57; - } else { - if(yych <= '0') { - if(yych <= '/') goto yy1214; - goto yy994; - } else { - if(yych <= '2') goto yy995; - if(yych <= '3') goto yy996; - goto yy970; - } - } - } else { - if(yych <= 'G') { - if(yych <= 'D') { - if(yych <= 'C') goto yy1214; - goto yy57; - } else { - if(yych == 'F') goto yy57; - goto yy1214; - } - } else { - if(yych <= 'L') { - if(yych <= 'H') goto yy57; - goto yy1214; - } else { - if(yych <= 'M') goto yy57; - if(yych <= 'R') goto yy1214; - goto yy57; - } - } - } - } else { - if(yych <= 'g') { - if(yych <= 'Y') { - if(yych == 'W') goto yy57; - if(yych <= 'X') goto yy1214; - goto yy57; - } else { - if(yych <= 'd') { - if(yych <= 'c') goto yy1214; - goto yy57; - } else { - if(yych == 'f') goto yy57; - goto yy1214; - } - } - } else { - if(yych <= 't') { - if(yych <= 'l') { - if(yych <= 'h') goto yy57; - goto yy1214; - } else { - if(yych <= 'm') goto yy57; - if(yych <= 'r') goto yy1214; - goto yy57; - } - } else { - if(yych <= 'w') { - if(yych <= 'v') goto yy1214; - goto yy57; - } else { - if(yych == 'y') goto yy57; - goto yy1214; - } - } - } - } -yy1221: - YYDEBUG(1221, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy1223; - goto yy678; - } else { - if(yych <= '9') goto yy1222; - if(yych <= ':') goto yy1223; - goto yy678; - } -yy1222: - YYDEBUG(1222, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '.') goto yy1223; - if(yych != ':') goto yy678; -yy1223: - YYDEBUG(1223, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy1224; - if(yych <= '6') goto yy1225; - if(yych <= '9') goto yy683; - goto yy53; -yy1224: - YYDEBUG(1224, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '.') goto yy684; - if(yych <= '/') goto yy678; - if(yych <= '9') goto yy683; - goto yy678; -yy1225: - YYDEBUG(1225, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '.') goto yy684; - if(yych == '0') goto yy683; - goto yy678; -yy1226: - YYDEBUG(1226, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= ',') goto yy678; - if(yych <= '-') goto yy772; - goto yy1230; - } else { - if(yych <= '/') goto yy678; - if(yych <= '9') goto yy1229; - if(yych <= ':') goto yy1223; - goto yy678; - } -yy1227: - YYDEBUG(1227, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych <= ',') goto yy678; - if(yych <= '-') goto yy772; - if(yych <= '.') goto yy1230; - goto yy678; - } else { - if(yych <= '2') goto yy1229; - if(yych <= '9') goto yy1222; - if(yych <= ':') goto yy1223; - goto yy678; - } -yy1228: - YYDEBUG(1228, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= ',') goto yy678; - if(yych <= '-') goto yy772; - goto yy1230; - } else { - if(yych <= '/') goto yy678; - if(yych <= '9') goto yy1222; - if(yych <= ':') goto yy1223; - goto yy678; - } -yy1229: - YYDEBUG(1229, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= ',') goto yy678; - if(yych <= '-') goto yy772; - } else { - if(yych == ':') goto yy1223; - goto yy678; - } -yy1230: - YYDEBUG(1230, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '5') goto yy1231; - if(yych <= '6') goto yy1232; - if(yych <= '9') goto yy776; - goto yy53; -yy1231: - YYDEBUG(1231, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '.') goto yy684; - if(yych <= '/') goto yy678; - if(yych <= '9') goto yy1233; - goto yy678; -yy1232: - YYDEBUG(1232, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych == '.') goto yy684; - goto yy678; - } else { - if(yych <= '0') goto yy1233; - if(yych <= '9') goto yy777; - goto yy678; - } -yy1233: - YYDEBUG(1233, *YYCURSOR); - yyaccept = 12; - yych = *(YYMARKER = ++YYCURSOR); - if(yych == '.') goto yy684; - if(yych <= '/') goto yy678; - if(yych <= '9') goto yy779; - goto yy678; -yy1234: - YYDEBUG(1234, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '9') { - if(yych <= '-') { - if(yych == 0x09) goto yy647; - if(yych <= ',') goto yy649; - goto yy660; - } else { - if(yych <= '.') goto yy661; - if(yych <= '/') goto yy659; - if(yych <= '5') goto yy1204; - goto yy900; - } - } else { - if(yych <= 'q') { - if(yych <= ':') goto yy670; - if(yych == 'n') goto yy657; - goto yy649; - } else { - if(yych <= 'r') goto yy658; - if(yych <= 's') goto yy651; - if(yych <= 't') goto yy655; - goto yy649; - } - } -yy1235: - YYDEBUG(1235, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '9') { - if(yych <= '-') { - if(yych == 0x09) goto yy1198; - if(yych <= ',') goto yy1200; - goto yy660; - } else { - if(yych <= '.') goto yy1202; - if(yych <= '/') goto yy659; - if(yych <= '5') goto yy1204; - goto yy900; - } - } else { - if(yych <= 'q') { - if(yych <= ':') goto yy1203; - if(yych == 'n') goto yy657; - goto yy1200; - } else { - if(yych <= 'r') goto yy658; - if(yych <= 's') goto yy651; - if(yych <= 't') goto yy655; - goto yy1200; - } - } -yy1236: - YYDEBUG(1236, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= ':') goto yy53; -yy1237: - YYDEBUG(1237, *YYCURSOR); - ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - YYDEBUG(1238, *YYCURSOR); - if(yych <= '/') goto yy1239; - if(yych <= '9') goto yy1237; -yy1239: - YYDEBUG(1239, *YYCURSOR); -#line 942 "ext/date/lib/parse_date.re" - { - timelib_ull i; - - TIMELIB_INIT; - TIMELIB_HAVE_RELATIVE(); - TIMELIB_UNHAVE_DATE(); - TIMELIB_UNHAVE_TIME(); - - i = timelib_get_unsigned_nr((char **) &ptr, 24); - s->time->y = 1970; - s->time->m = 1; - s->time->d = 1; - s->time->h = s->time->i = s->time->s = 0; - s->time->f = 0.0; - s->time->relative.s += i; - s->time->is_localtime = 1; - s->time->zone_type = TIMELIB_ZONETYPE_OFFSET; - s->time->z = 0; - - TIMELIB_DEINIT; - return TIMELIB_RELATIVE; - } -#line 18651 "ext/date/lib/parse_date.c" -yy1240: - YYDEBUG(1240, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'N') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy138; - goto yy1280; - } - } else { - if(yych <= 'm') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'n') goto yy1280; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy1241: - YYDEBUG(1241, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'U') { - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych == 'I') goto yy1274; - if(yych <= 'T') goto yy138; - goto yy1273; - } - } else { - if(yych <= 'i') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - if(yych <= 'h') goto yy138; - goto yy1274; - } else { - if(yych == 'u') goto yy1273; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy1242: - YYDEBUG(1242, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'M') { - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych == 'D') goto yy1262; - if(yych <= 'L') goto yy138; - goto yy1263; - } - } else { - if(yych <= 'd') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - if(yych <= 'c') goto yy138; - goto yy1262; - } else { - if(yych == 'm') goto yy1263; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy1243: - YYDEBUG(1243, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'E') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy138; - goto yy1258; - } - } else { - if(yych <= 'd') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'e') goto yy1258; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy1244: - YYDEBUG(1244, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'E') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy138; - goto yy1254; - } - } else { - if(yych <= 'd') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'e') goto yy1254; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy1245: - YYDEBUG(1245, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') { - if(yych == '.') goto yy1203; - goto yy53; - } else { - if(yych <= '9') goto yy1248; - if(yych <= ':') goto yy1203; - goto yy53; - } -yy1246: - YYDEBUG(1246, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') { - if(yych == '.') goto yy1203; - goto yy53; - } else { - if(yych <= '3') goto yy1248; - if(yych == ':') goto yy1203; - goto yy53; - } -yy1247: - YYDEBUG(1247, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == '.') goto yy1203; - if(yych == ':') goto yy1203; - goto yy53; -yy1248: - YYDEBUG(1248, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') { - if(yych == '.') goto yy1203; - goto yy53; - } else { - if(yych <= '5') goto yy1249; - if(yych == ':') goto yy1203; - goto yy53; - } -yy1249: - YYDEBUG(1249, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych >= ':') goto yy53; - YYDEBUG(1250, *YYCURSOR); - yyaccept = 23; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') goto yy1206; - if(yych <= '5') goto yy1251; - if(yych <= '6') goto yy1252; - goto yy1206; -yy1251: - YYDEBUG(1251, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy1253; - goto yy53; -yy1252: - YYDEBUG(1252, *YYCURSOR); - yych = *++YYCURSOR; - if(yych != '0') goto yy53; -yy1253: - YYDEBUG(1253, *YYCURSOR); - yych = *++YYCURSOR; - goto yy1214; -yy1254: - YYDEBUG(1254, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'L') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'K') goto yy139; - } - } else { - if(yych <= 'k') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 'l') goto yy1255; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy1255: - YYDEBUG(1255, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'F') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'E') goto yy140; - } - } else { - if(yych <= 'e') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'f') goto yy1256; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy1256: - YYDEBUG(1256, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'T') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy141; - } - } else { - if(yych <= 's') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 't') goto yy1257; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy1257: - YYDEBUG(1257, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'G') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'H') goto yy167; - if(yych == 'h') goto yy167; - goto yy3; - } -yy1258: - YYDEBUG(1258, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'S') { - if(yych <= ')') { - if(yych <= '(') goto yy283; - goto yy136; - } else { - if(yych <= '@') goto yy283; - if(yych <= 'R') goto yy139; - } - } else { - if(yych <= 'r') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy283; - goto yy139; - } else { - if(yych <= 's') goto yy1259; - if(yych <= 'z') goto yy139; - goto yy283; - } - } -yy1259: - YYDEBUG(1259, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'D') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'C') goto yy140; - } - } else { - if(yych <= 'c') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'd') goto yy1260; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy1260: - YYDEBUG(1260, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'A') { - if(yych == ')') goto yy136; - if(yych <= '@') goto yy3; - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - goto yy3; - } else { - if(yych <= 'a') goto yy1261; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy1261: - YYDEBUG(1261, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'X') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'Y') goto yy289; - if(yych == 'y') goto yy289; - goto yy3; - } -yy1262: - YYDEBUG(1262, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'A') { - if(yych == ')') goto yy136; - if(yych <= '@') goto yy3; - goto yy1270; - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - goto yy3; - } else { - if(yych <= 'a') goto yy1270; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy1263: - YYDEBUG(1263, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'O') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'N') goto yy139; - } - } else { - if(yych <= 'n') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 'o') goto yy1264; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy1264: - YYDEBUG(1264, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'R') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'Q') goto yy140; - } - } else { - if(yych <= 'q') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'r') goto yy1265; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy1265: - YYDEBUG(1265, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'R') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'Q') goto yy141; - } - } else { - if(yych <= 'q') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 'r') goto yy1266; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy1266: - YYDEBUG(1266, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'N') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'O') goto yy1267; - if(yych != 'o') goto yy3; - } -yy1267: - YYDEBUG(1267, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'W') goto yy1268; - if(yych != 'w') goto yy53; -yy1268: - YYDEBUG(1268, *YYCURSOR); - ++YYCURSOR; -yy1269: - YYDEBUG(1269, *YYCURSOR); -#line 930 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("tomorrow"); - TIMELIB_INIT; - TIMELIB_HAVE_RELATIVE(); - TIMELIB_UNHAVE_TIME(); - - s->time->relative.d = 1; - TIMELIB_DEINIT; - return TIMELIB_RELATIVE; - } -#line 19098 "ext/date/lib/parse_date.c" -yy1270: - YYDEBUG(1270, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'Y') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'X') goto yy140; - } - } else { - if(yych <= 'x') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'y') goto yy1271; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy1271: - YYDEBUG(1271, *YYCURSOR); - ++YYCURSOR; - if((yych = *YYCURSOR) <= '@') { - if(yych == ')') goto yy136; - } else { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy1272; - if(yych <= 'z') goto yy141; - } -yy1272: - YYDEBUG(1272, *YYCURSOR); -#line 920 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("midnight | today"); - TIMELIB_INIT; - TIMELIB_UNHAVE_TIME(); - - TIMELIB_DEINIT; - return TIMELIB_RELATIVE; - } -#line 19142 "ext/date/lib/parse_date.c" -yy1273: - YYDEBUG(1273, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'R') { - if(yych <= ')') { - if(yych <= '(') goto yy283; - goto yy136; - } else { - if(yych <= '@') goto yy283; - if(yych <= 'Q') goto yy139; - goto yy1276; - } - } else { - if(yych <= 'q') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy283; - goto yy139; - } else { - if(yych <= 'r') goto yy1276; - if(yych <= 'z') goto yy139; - goto yy283; - } - } -yy1274: - YYDEBUG(1274, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'S') { - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'Q') goto yy139; - if(yych >= 'S') goto yy257; - } - } else { - if(yych <= 'q') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 'r') goto yy1275; - if(yych <= 's') goto yy257; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy1275: - YYDEBUG(1275, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'D') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'C') goto yy140; - goto yy270; - } - } else { - if(yych <= 'c') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'd') goto yy270; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy1276: - YYDEBUG(1276, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'S') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'R') goto yy140; - } - } else { - if(yych <= 'r') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 's') goto yy1277; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy1277: - YYDEBUG(1277, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'D') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'C') goto yy141; - } - } else { - if(yych <= 'c') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 'd') goto yy1278; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy1278: - YYDEBUG(1278, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'A') goto yy1279; - if(yych != 'a') goto yy3; - } -yy1279: - YYDEBUG(1279, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy289; - if(yych == 'y') goto yy289; - goto yy53; -yy1280: - YYDEBUG(1280, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'T') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy139; - } - } else { - if(yych <= 's') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 't') goto yy1281; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy1281: - YYDEBUG(1281, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'H') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'G') goto yy140; - goto yy270; - } - } else { - if(yych <= 'g') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'h') goto yy270; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy1282: - YYDEBUG(1282, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'N') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy138; - goto yy1280; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'n') goto yy1311; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy1283: - YYDEBUG(1283, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'U') { - if(yych <= '/') { - if(yych == ')') goto yy136; - if(yych <= '.') goto yy3; - goto yy144; - } else { - if(yych <= 'H') { - if(yych <= '@') goto yy3; - goto yy138; - } else { - if(yych <= 'I') goto yy1274; - if(yych <= 'T') goto yy138; - goto yy1273; - } - } - } else { - if(yych <= 'h') { - if(yych <= '^') { - if(yych <= 'Z') goto yy138; - goto yy3; - } else { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy3; - goto yy143; - } - } else { - if(yych <= 't') { - if(yych <= 'i') goto yy1305; - goto yy143; - } else { - if(yych <= 'u') goto yy1304; - if(yych <= 'z') goto yy143; - goto yy3; - } - } - } -yy1284: - YYDEBUG(1284, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'M') { - if(yych <= '/') { - if(yych == ')') goto yy136; - if(yych <= '.') goto yy3; - goto yy144; - } else { - if(yych <= 'C') { - if(yych <= '@') goto yy3; - goto yy138; - } else { - if(yych <= 'D') goto yy1262; - if(yych <= 'L') goto yy138; - goto yy1263; - } - } - } else { - if(yych <= 'c') { - if(yych <= '^') { - if(yych <= 'Z') goto yy138; - goto yy3; - } else { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy3; - goto yy143; - } - } else { - if(yych <= 'l') { - if(yych <= 'd') goto yy1295; - goto yy143; - } else { - if(yych <= 'm') goto yy1296; - if(yych <= 'z') goto yy143; - goto yy3; - } - } - } -yy1285: - YYDEBUG(1285, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'E') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy138; - goto yy1258; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'e') goto yy1291; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy1286: - YYDEBUG(1286, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'E') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy138; - goto yy1254; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'e') goto yy1287; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy1287: - YYDEBUG(1287, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'L') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'K') goto yy139; - goto yy1255; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'l') goto yy1288; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy1288: - YYDEBUG(1288, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'F') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'E') goto yy140; - goto yy1256; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'f') goto yy1289; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy1289: - YYDEBUG(1289, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy141; - goto yy1257; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 't') goto yy1290; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy1290: - YYDEBUG(1290, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'H') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= 'G') goto yy3; - goto yy167; - } - } else { - if(yych <= '`') { - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'h') goto yy254; - if(yych <= 'z') goto yy151; - goto yy3; - } - } -yy1291: - YYDEBUG(1291, *YYCURSOR); - yyaccept = 5; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'S') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy283; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy283; - if(yych <= 'R') goto yy139; - goto yy1259; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy283; - } else { - if(yych == 's') goto yy1292; - if(yych <= 'z') goto yy148; - goto yy283; - } - } -yy1292: - YYDEBUG(1292, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'D') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'C') goto yy140; - goto yy1260; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'd') goto yy1293; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy1293: - YYDEBUG(1293, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'A') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - goto yy1261; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy141; - if(yych <= '^') goto yy3; - goto yy144; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'a') goto yy1294; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy1294: - YYDEBUG(1294, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'Y') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= 'X') goto yy3; - goto yy289; - } - } else { - if(yych <= '`') { - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'y') goto yy302; - if(yych <= 'z') goto yy151; - goto yy3; - } - } -yy1295: - YYDEBUG(1295, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'A') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - goto yy1270; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy139; - if(yych <= '^') goto yy3; - goto yy144; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'a') goto yy1302; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy1296: - YYDEBUG(1296, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'O') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'N') goto yy139; - goto yy1264; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'o') goto yy1297; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy1297: - YYDEBUG(1297, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'R') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'Q') goto yy140; - goto yy1265; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'r') goto yy1298; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy1298: - YYDEBUG(1298, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'R') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'Q') goto yy141; - goto yy1266; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'r') goto yy1299; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy1299: - YYDEBUG(1299, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'O') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= 'N') goto yy3; - goto yy1267; - } - } else { - if(yych <= '`') { - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'o') goto yy1300; - if(yych <= 'z') goto yy151; - goto yy3; - } - } -yy1300: - YYDEBUG(1300, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'W') goto yy1268; - if(yych != 'w') goto yy152; - YYDEBUG(1301, *YYCURSOR); - yyaccept = 25; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '^') { - if(yych == '/') goto yy144; - goto yy1269; - } else { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy1269; - if(yych <= 'z') goto yy151; - goto yy1269; - } -yy1302: - YYDEBUG(1302, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'Y') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'X') goto yy140; - goto yy1271; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'y') goto yy1303; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy1303: - YYDEBUG(1303, *YYCURSOR); - yyaccept = 26; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '@') { - if(yych <= ')') { - if(yych <= '(') goto yy1272; - goto yy136; - } else { - if(yych == '/') goto yy144; - goto yy1272; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy141; - if(yych <= '^') goto yy1272; - goto yy144; - } else { - if(yych <= '`') goto yy1272; - if(yych <= 'z') goto yy150; - goto yy1272; - } - } -yy1304: - YYDEBUG(1304, *YYCURSOR); - yyaccept = 5; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'R') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy283; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy283; - if(yych <= 'Q') goto yy139; - goto yy1276; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy283; - } else { - if(yych == 'r') goto yy1307; - if(yych <= 'z') goto yy148; - goto yy283; - } - } -yy1305: - YYDEBUG(1305, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'S') { - if(yych <= '/') { - if(yych == ')') goto yy136; - if(yych <= '.') goto yy3; - goto yy144; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'Q') goto yy139; - if(yych <= 'R') goto yy1275; - goto yy257; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych <= 'r') { - if(yych <= 'q') goto yy148; - } else { - if(yych <= 's') goto yy260; - if(yych <= 'z') goto yy148; - goto yy3; - } - } - } - YYDEBUG(1306, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'D') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'C') goto yy140; - goto yy270; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'd') goto yy280; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy1307: - YYDEBUG(1307, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'S') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'R') goto yy140; - goto yy1277; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 's') goto yy1308; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy1308: - YYDEBUG(1308, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'D') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'C') goto yy141; - goto yy1278; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'd') goto yy1309; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy1309: - YYDEBUG(1309, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'A') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - goto yy1279; - } - } else { - if(yych <= '`') { - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych <= 'a') goto yy1310; - if(yych <= 'z') goto yy151; - goto yy3; - } - } -yy1310: - YYDEBUG(1310, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy289; - if(yych == 'y') goto yy302; - goto yy152; -yy1311: - YYDEBUG(1311, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy139; - goto yy1281; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 't') goto yy1312; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy1312: - YYDEBUG(1312, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'H') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'G') goto yy140; - goto yy270; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'h') goto yy280; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy1313: - YYDEBUG(1313, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'Y') { - if(yych <= '@') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych == 'R') goto yy1325; - if(yych <= 'X') goto yy138; - goto yy1326; - } - } else { - if(yych <= 'r') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - if(yych <= 'q') goto yy138; - goto yy1325; - } else { - if(yych == 'y') goto yy1326; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy1314: - YYDEBUG(1314, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'D') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'C') goto yy138; - goto yy1319; - } - } else { - if(yych <= 'c') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'd') goto yy1319; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy1315: - YYDEBUG(1315, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'N') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy138; - } - } else { - if(yych <= 'm') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'n') goto yy1316; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy1316: - YYDEBUG(1316, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'D') { - if(yych <= ')') { - if(yych <= '(') goto yy283; - goto yy136; - } else { - if(yych <= '@') goto yy283; - if(yych <= 'C') goto yy139; - } - } else { - if(yych <= 'c') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy283; - goto yy139; - } else { - if(yych <= 'd') goto yy1317; - if(yych <= 'z') goto yy139; - goto yy283; - } - } -yy1317: - YYDEBUG(1317, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'A') { - if(yych == ')') goto yy136; - if(yych <= '@') goto yy3; - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - goto yy3; - } else { - if(yych <= 'a') goto yy1318; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy1318: - YYDEBUG(1318, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'Y') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'X') goto yy141; - goto yy510; - } - } else { - if(yych <= 'x') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 'y') goto yy510; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy1319: - YYDEBUG(1319, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'N') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy139; - } - } else { - if(yych <= 'm') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 'n') goto yy1320; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy1320: - YYDEBUG(1320, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'I') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'H') goto yy140; - } - } else { - if(yych <= 'h') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'i') goto yy1321; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy1321: - YYDEBUG(1321, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'G') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'F') goto yy141; - } - } else { - if(yych <= 'f') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 'g') goto yy1322; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy1322: - YYDEBUG(1322, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'G') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'H') goto yy1323; - if(yych != 'h') goto yy3; - } -yy1323: - YYDEBUG(1323, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy1324; - if(yych != 't') goto yy53; -yy1324: - YYDEBUG(1324, *YYCURSOR); - yych = *++YYCURSOR; - goto yy1272; -yy1325: - YYDEBUG(1325, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= ',') { - if(yych <= ')') goto yy136; - goto yy310; - } else { - if(yych <= '-') goto yy313; - if(yych <= '.') goto yy312; - goto yy310; - } - } - } else { - if(yych <= 'Z') { - if(yych <= '@') { - if(yych <= '9') goto yy312; - goto yy310; - } else { - if(yych == 'C') goto yy1327; - goto yy139; - } - } else { - if(yych <= 'b') { - if(yych <= '`') goto yy310; - goto yy139; - } else { - if(yych <= 'c') goto yy1327; - if(yych <= 'z') goto yy139; - goto yy310; - } - } - } -yy1326: - YYDEBUG(1326, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '-') { - if(yych <= ' ') { - if(yych == 0x09) goto yy312; - if(yych <= 0x1F) goto yy310; - goto yy312; - } else { - if(yych == ')') goto yy136; - if(yych <= ',') goto yy310; - goto yy313; - } - } else { - if(yych <= '@') { - if(yych == '/') goto yy310; - if(yych <= '9') goto yy312; - goto yy310; - } else { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy310; - if(yych <= 'z') goto yy139; - goto yy310; - } - } -yy1327: - YYDEBUG(1327, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'H') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'G') goto yy140; - goto yy568; - } - } else { - if(yych <= 'g') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'h') goto yy568; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy1328: - YYDEBUG(1328, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'Y') { - if(yych <= '/') { - if(yych == ')') goto yy136; - if(yych <= '.') goto yy3; - goto yy144; - } else { - if(yych <= 'Q') { - if(yych <= '@') goto yy3; - goto yy138; - } else { - if(yych <= 'R') goto yy1325; - if(yych <= 'X') goto yy138; - goto yy1326; - } - } - } else { - if(yych <= 'q') { - if(yych <= '^') { - if(yych <= 'Z') goto yy138; - goto yy3; - } else { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy3; - goto yy143; - } - } else { - if(yych <= 'x') { - if(yych <= 'r') goto yy1340; - goto yy143; - } else { - if(yych <= 'y') goto yy1341; - if(yych <= 'z') goto yy143; - goto yy3; - } - } - } -yy1329: - YYDEBUG(1329, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'D') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'C') goto yy138; - goto yy1319; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'd') goto yy1334; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy1330: - YYDEBUG(1330, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'N') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy138; - goto yy1316; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'n') goto yy1331; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy1331: - YYDEBUG(1331, *YYCURSOR); - yyaccept = 5; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'D') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy283; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy283; - if(yych <= 'C') goto yy139; - goto yy1317; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy283; - } else { - if(yych == 'd') goto yy1332; - if(yych <= 'z') goto yy148; - goto yy283; - } - } -yy1332: - YYDEBUG(1332, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'A') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - goto yy1318; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy140; - if(yych <= '^') goto yy3; - goto yy144; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'a') goto yy1333; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy1333: - YYDEBUG(1333, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'Y') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'X') goto yy141; - goto yy510; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'y') goto yy539; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy1334: - YYDEBUG(1334, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'N') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy139; - goto yy1320; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'n') goto yy1335; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy1335: - YYDEBUG(1335, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'I') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'H') goto yy140; - goto yy1321; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'i') goto yy1336; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy1336: - YYDEBUG(1336, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'G') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'F') goto yy141; - goto yy1322; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'g') goto yy1337; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy1337: - YYDEBUG(1337, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'H') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= 'G') goto yy3; - goto yy1323; - } - } else { - if(yych <= '`') { - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'h') goto yy1338; - if(yych <= 'z') goto yy151; - goto yy3; - } - } -yy1338: - YYDEBUG(1338, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'T') goto yy1324; - if(yych != 't') goto yy152; - YYDEBUG(1339, *YYCURSOR); - yyaccept = 26; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '^') { - if(yych == '/') goto yy144; - goto yy1272; - } else { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy1272; - if(yych <= 'z') goto yy151; - goto yy1272; - } -yy1340: - YYDEBUG(1340, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= '-') { - if(yych <= ')') goto yy136; - if(yych <= ',') goto yy310; - goto yy313; - } else { - if(yych == '/') goto yy144; - goto yy312; - } - } - } else { - if(yych <= '^') { - if(yych <= 'B') { - if(yych <= '@') goto yy310; - goto yy139; - } else { - if(yych <= 'C') goto yy1327; - if(yych <= 'Z') goto yy139; - goto yy310; - } - } else { - if(yych <= 'b') { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy310; - goto yy148; - } else { - if(yych <= 'c') goto yy1342; - if(yych <= 'z') goto yy148; - goto yy310; - } - } - } -yy1341: - YYDEBUG(1341, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '.') { - if(yych <= ' ') { - if(yych == 0x09) goto yy312; - if(yych <= 0x1F) goto yy310; - goto yy312; - } else { - if(yych <= ')') { - if(yych <= '(') goto yy310; - goto yy136; - } else { - if(yych <= ',') goto yy310; - if(yych <= '-') goto yy313; - goto yy312; - } - } - } else { - if(yych <= 'Z') { - if(yych <= '/') goto yy144; - if(yych <= '9') goto yy312; - if(yych <= '@') goto yy310; - goto yy139; - } else { - if(yych <= '_') { - if(yych <= '^') goto yy310; - goto yy144; - } else { - if(yych <= '`') goto yy310; - if(yych <= 'z') goto yy148; - goto yy310; - } - } - } -yy1342: - YYDEBUG(1342, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'H') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'G') goto yy140; - goto yy568; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'h') goto yy579; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy1343: - YYDEBUG(1343, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'W') { - if(yych <= 'N') { - if(yych == ')') goto yy136; - if(yych <= '@') goto yy3; - goto yy138; - } else { - if(yych <= 'O') goto yy1351; - if(yych <= 'U') goto yy138; - if(yych <= 'V') goto yy1352; - goto yy1349; - } - } else { - if(yych <= 'o') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - if(yych <= 'n') goto yy138; - goto yy1351; - } else { - if(yych <= 'v') { - if(yych <= 'u') goto yy138; - goto yy1352; - } else { - if(yych <= 'w') goto yy1349; - if(yych <= 'z') goto yy138; - goto yy3; - } - } - } -yy1344: - YYDEBUG(1344, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'X') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'W') goto yy138; - goto yy1348; - } - } else { - if(yych <= 'w') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'x') goto yy1348; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy1345: - YYDEBUG(1345, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'N') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy138; - } - } else { - if(yych <= 'm') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 'n') goto yy1346; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy1346: - YYDEBUG(1346, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'T') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy139; - } - } else { - if(yych <= 's') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 't') goto yy1347; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy1347: - YYDEBUG(1347, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'H') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'G') goto yy140; - goto yy270; - } - } else { - if(yych <= 'g') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'h') goto yy270; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy1348: - YYDEBUG(1348, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'T') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy139; - goto yy257; - } - } else { - if(yych <= 's') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 't') goto yy257; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy1349: - YYDEBUG(1349, *YYCURSOR); - ++YYCURSOR; - if((yych = *YYCURSOR) <= '@') { - if(yych == ')') goto yy136; - } else { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy1350; - if(yych <= 'z') goto yy139; - } -yy1350: - YYDEBUG(1350, *YYCURSOR); -#line 899 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("now"); - TIMELIB_INIT; - - TIMELIB_DEINIT; - return TIMELIB_RELATIVE; - } -#line 20923 "ext/date/lib/parse_date.c" -yy1351: - YYDEBUG(1351, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'N') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy139; - goto yy1357; - } - } else { - if(yych <= 'm') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 'n') goto yy1357; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy1352: - YYDEBUG(1352, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '/') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= ',') { - if(yych <= ')') goto yy136; - goto yy310; - } else { - if(yych <= '-') goto yy313; - if(yych <= '.') goto yy312; - goto yy310; - } - } - } else { - if(yych <= 'Z') { - if(yych <= '@') { - if(yych <= '9') goto yy312; - goto yy310; - } else { - if(yych != 'E') goto yy139; - } - } else { - if(yych <= 'd') { - if(yych <= '`') goto yy310; - goto yy139; - } else { - if(yych <= 'e') goto yy1353; - if(yych <= 'z') goto yy139; - goto yy310; - } - } - } -yy1353: - YYDEBUG(1353, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'M') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'L') goto yy140; - } - } else { - if(yych <= 'l') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'm') goto yy1354; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy1354: - YYDEBUG(1354, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'B') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'A') goto yy141; - } - } else { - if(yych <= 'a') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 'b') goto yy1355; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy1355: - YYDEBUG(1355, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'D') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'E') goto yy1356; - if(yych != 'e') goto yy3; - } -yy1356: - YYDEBUG(1356, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy322; - if(yych == 'r') goto yy322; - goto yy53; -yy1357: - YYDEBUG(1357, *YYCURSOR); - ++YYCURSOR; - if((yych = *YYCURSOR) <= '@') { - if(yych == ')') goto yy136; - } else { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy1358; - if(yych <= 'z') goto yy140; - } -yy1358: - YYDEBUG(1358, *YYCURSOR); -#line 908 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("noon"); - TIMELIB_INIT; - TIMELIB_UNHAVE_TIME(); - TIMELIB_HAVE_TIME(); - s->time->h = 12; - - TIMELIB_DEINIT; - return TIMELIB_RELATIVE; - } -#line 21073 "ext/date/lib/parse_date.c" -yy1359: - YYDEBUG(1359, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'W') { - if(yych <= '@') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych == '/') goto yy144; - goto yy3; - } - } else { - if(yych <= 'O') { - if(yych <= 'N') goto yy138; - goto yy1351; - } else { - if(yych <= 'U') goto yy138; - if(yych <= 'V') goto yy1352; - goto yy1349; - } - } - } else { - if(yych <= 'n') { - if(yych <= '^') { - if(yych <= 'Z') goto yy138; - goto yy3; - } else { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy3; - goto yy143; - } - } else { - if(yych <= 'v') { - if(yych <= 'o') goto yy1366; - if(yych <= 'u') goto yy143; - goto yy1367; - } else { - if(yych <= 'w') goto yy1365; - if(yych <= 'z') goto yy143; - goto yy3; - } - } - } -yy1360: - YYDEBUG(1360, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'X') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'W') goto yy138; - goto yy1348; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'x') goto yy1364; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy1361: - YYDEBUG(1361, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'N') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy138; - goto yy1346; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'n') goto yy1362; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy1362: - YYDEBUG(1362, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy139; - goto yy1347; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 't') goto yy1363; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy1363: - YYDEBUG(1363, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'H') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'G') goto yy140; - goto yy270; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'h') goto yy280; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy1364: - YYDEBUG(1364, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy139; - goto yy257; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 't') goto yy260; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy1365: - YYDEBUG(1365, *YYCURSOR); - yyaccept = 27; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '@') { - if(yych <= ')') { - if(yych <= '(') goto yy1350; - goto yy136; - } else { - if(yych == '/') goto yy144; - goto yy1350; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy139; - if(yych <= '^') goto yy1350; - goto yy144; - } else { - if(yych <= '`') goto yy1350; - if(yych <= 'z') goto yy148; - goto yy1350; - } - } -yy1366: - YYDEBUG(1366, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'N') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'M') goto yy139; - goto yy1357; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'n') goto yy1372; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy1367: - YYDEBUG(1367, *YYCURSOR); - yyaccept = 6; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '9') { - if(yych <= '(') { - if(yych <= 0x09) { - if(yych <= 0x08) goto yy310; - goto yy312; - } else { - if(yych == ' ') goto yy312; - goto yy310; - } - } else { - if(yych <= '-') { - if(yych <= ')') goto yy136; - if(yych <= ',') goto yy310; - goto yy313; - } else { - if(yych == '/') goto yy144; - goto yy312; - } - } - } else { - if(yych <= '^') { - if(yych <= 'D') { - if(yych <= '@') goto yy310; - goto yy139; - } else { - if(yych <= 'E') goto yy1353; - if(yych <= 'Z') goto yy139; - goto yy310; - } - } else { - if(yych <= 'd') { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy310; - goto yy148; - } else { - if(yych <= 'e') goto yy1368; - if(yych <= 'z') goto yy148; - goto yy310; - } - } - } -yy1368: - YYDEBUG(1368, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'M') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'L') goto yy140; - goto yy1354; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'm') goto yy1369; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy1369: - YYDEBUG(1369, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'B') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'A') goto yy141; - goto yy1355; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'b') goto yy1370; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy1370: - YYDEBUG(1370, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'E') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= 'D') goto yy3; - goto yy1356; - } - } else { - if(yych <= '`') { - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'e') goto yy1371; - if(yych <= 'z') goto yy151; - goto yy3; - } - } -yy1371: - YYDEBUG(1371, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'R') goto yy322; - if(yych == 'r') goto yy492; - goto yy152; -yy1372: - YYDEBUG(1372, *YYCURSOR); - yyaccept = 28; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '@') { - if(yych <= ')') { - if(yych <= '(') goto yy1358; - goto yy136; - } else { - if(yych == '/') goto yy144; - goto yy1358; - } - } else { - if(yych <= '_') { - if(yych <= 'Z') goto yy140; - if(yych <= '^') goto yy1358; - goto yy144; - } else { - if(yych <= '`') goto yy1358; - if(yych <= 'z') goto yy149; - goto yy1358; - } - } -yy1373: - YYDEBUG(1373, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'S') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'R') goto yy138; - } - } else { - if(yych <= 'r') { - if(yych <= 'Z') goto yy138; - if(yych <= '`') goto yy3; - goto yy138; - } else { - if(yych <= 's') goto yy1374; - if(yych <= 'z') goto yy138; - goto yy3; - } - } -yy1374: - YYDEBUG(1374, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'T') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy139; - } - } else { - if(yych <= 's') { - if(yych <= 'Z') goto yy139; - if(yych <= '`') goto yy3; - goto yy139; - } else { - if(yych <= 't') goto yy1375; - if(yych <= 'z') goto yy139; - goto yy3; - } - } -yy1375: - YYDEBUG(1375, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'E') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy140; - } - } else { - if(yych <= 'd') { - if(yych <= 'Z') goto yy140; - if(yych <= '`') goto yy3; - goto yy140; - } else { - if(yych <= 'e') goto yy1376; - if(yych <= 'z') goto yy140; - goto yy3; - } - } -yy1376: - YYDEBUG(1376, *YYCURSOR); - yych = *++YYCURSOR; - if(yych <= 'R') { - if(yych <= ')') { - if(yych <= '(') goto yy3; - goto yy136; - } else { - if(yych <= '@') goto yy3; - if(yych <= 'Q') goto yy141; - } - } else { - if(yych <= 'q') { - if(yych <= 'Z') goto yy141; - if(yych <= '`') goto yy3; - goto yy141; - } else { - if(yych <= 'r') goto yy1377; - if(yych <= 'z') goto yy141; - goto yy3; - } - } -yy1377: - YYDEBUG(1377, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'C') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= 'D') goto yy1378; - if(yych != 'd') goto yy3; - } -yy1378: - YYDEBUG(1378, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy1379; - if(yych != 'a') goto yy53; -yy1379: - YYDEBUG(1379, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy1380; - if(yych != 'y') goto yy53; -yy1380: - YYDEBUG(1380, *YYCURSOR); - ++YYCURSOR; -yy1381: - YYDEBUG(1381, *YYCURSOR); -#line 887 "ext/date/lib/parse_date.re" - { - DEBUG_OUTPUT("yesterday"); - TIMELIB_INIT; - TIMELIB_HAVE_RELATIVE(); - TIMELIB_UNHAVE_TIME(); - - s->time->relative.d = -1; - TIMELIB_DEINIT; - return TIMELIB_RELATIVE; - } -#line 21564 "ext/date/lib/parse_date.c" -yy1382: - YYDEBUG(1382, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'S') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'R') goto yy138; - goto yy1374; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy138; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 's') goto yy1383; - if(yych <= 'z') goto yy143; - goto yy3; - } - } -yy1383: - YYDEBUG(1383, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'T') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'S') goto yy139; - goto yy1375; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy139; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 't') goto yy1384; - if(yych <= 'z') goto yy148; - goto yy3; - } - } -yy1384: - YYDEBUG(1384, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'E') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'D') goto yy140; - goto yy1376; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy140; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'e') goto yy1385; - if(yych <= 'z') goto yy149; - goto yy3; - } - } -yy1385: - YYDEBUG(1385, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'R') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= '@') goto yy3; - if(yych <= 'Q') goto yy141; - goto yy1377; - } - } else { - if(yych <= '`') { - if(yych <= 'Z') goto yy141; - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'r') goto yy1386; - if(yych <= 'z') goto yy150; - goto yy3; - } - } -yy1386: - YYDEBUG(1386, *YYCURSOR); - yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 'D') { - if(yych <= '.') { - if(yych == ')') goto yy136; - goto yy3; - } else { - if(yych <= '/') goto yy144; - if(yych <= 'C') goto yy3; - goto yy1378; - } - } else { - if(yych <= '`') { - if(yych == '_') goto yy144; - goto yy3; - } else { - if(yych == 'd') goto yy1387; - if(yych <= 'z') goto yy151; - goto yy3; - } - } -yy1387: - YYDEBUG(1387, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'A') goto yy1379; - if(yych != 'a') goto yy152; - YYDEBUG(1388, *YYCURSOR); - yych = *++YYCURSOR; - if(yych == 'Y') goto yy1380; - if(yych != 'y') goto yy152; - YYDEBUG(1389, *YYCURSOR); - yyaccept = 29; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '^') { - if(yych == '/') goto yy144; - goto yy1381; - } else { - if(yych <= '_') goto yy144; - if(yych <= '`') goto yy1381; - if(yych <= 'z') goto yy151; - goto yy1381; - } - } -} -#line 1510 "ext/date/lib/parse_date.re" - -} - -#define YYMAXFILL 29 - -timelib_time* timelib_strtotime(char *s, int len, struct timelib_error_container **errors, const timelib_tzdb *tzdb) -{ - Scanner in; - int t; - char *e = s + len - 1; - - memset(&in, 0, sizeof(in)); - in.errors = malloc(sizeof(struct timelib_error_container)); - in.errors->warning_count = 0; - in.errors->warning_messages = NULL; - in.errors->error_count = 0; - in.errors->error_messages = NULL; - - if (len > 0) { - while (isspace(*s) && s < e) { - s++; - } - while (isspace(*e) && e > s) { - e--; - } - } - if (e - s < 1) { - in.time = timelib_time_ctor(); - add_error(&in, "Empty string"); - if (errors) { - *errors = in.errors; - } else { - timelib_error_container_dtor(in.errors); - } - in.time->y = in.time->d = in.time->m = in.time->h = in.time->i = in.time->s = in.time->f = in.time->z = in.time->dst = -1; - in.time->is_localtime = in.time->zone_type = 0; - return in.time; - } - e++; - - in.str = malloc((e - s) + YYMAXFILL); - memset(in.str, 0, (e - s) + YYMAXFILL); - memcpy(in.str, s, (e - s)); - in.lim = in.str + (e - s) + YYMAXFILL; - in.cur = in.str; - in.time = timelib_time_ctor(); - in.time->y = -1; - in.time->d = -1; - in.time->m = -1; - in.time->h = -1; - in.time->i = -1; - in.time->s = -1; - in.time->f = -1; - in.time->z = -1; - in.time->dst = -1; - in.tzdb = tzdb; - in.time->is_localtime = 0; - in.time->zone_type = 0; - - do { - t = scan(&in); -#ifdef DEBUG_PARSER - printf("%d\n", t); -#endif - } while(t != EOI); - - free(in.str); - if (errors) { - *errors = in.errors; - } else { - timelib_error_container_dtor(in.errors); - } - return in.time; -} - -void timelib_fill_holes(timelib_time *parsed, timelib_time *now, int options) -{ - if (!(options && TIMELIB_OVERRIDE_TIME) && parsed->have_date && !parsed->have_time) { - parsed->h = 0; - parsed->i = 0; - parsed->s = 0; - parsed->f = 0; - } - if (parsed->y == -1) parsed->y = now->y != -1 ? now->y : 0; - if (parsed->d == -1) parsed->d = now->d != -1 ? now->d : 0; - if (parsed->m == -1) parsed->m = now->m != -1 ? now->m : 0; - if (parsed->h == -1) parsed->h = now->h != -1 ? now->h : 0; - if (parsed->i == -1) parsed->i = now->i != -1 ? now->i : 0; - if (parsed->s == -1) parsed->s = now->s != -1 ? now->s : 0; - if (parsed->f == -1) parsed->f = now->f != -1 ? now->f : 0; - if (parsed->z == -1) parsed->z = now->z != -1 ? now->z : 0; - if (parsed->dst == -1) parsed->dst = now->dst != -1 ? now->dst : 0; - - if (!parsed->tz_abbr) { - parsed->tz_abbr = now->tz_abbr ? strdup(now->tz_abbr) : NULL; - } - if (!parsed->tz_info) { - parsed->tz_info = now->tz_info ? timelib_tzinfo_clone(now->tz_info) : NULL; - } - if (parsed->zone_type == 0 && now->zone_type != 0) { - parsed->zone_type = now->zone_type; -/* parsed->tz_abbr = now->tz_abbr ? strdup(now->tz_abbr) : NULL; - parsed->tz_info = now->tz_info ? timelib_tzinfo_clone(now->tz_info) : NULL; -*/ parsed->is_localtime = 1; - } -/* timelib_dump_date(parsed, 2); - timelib_dump_date(now, 2); -*/ -} - -char *timelib_timezone_id_from_abbr(const char *abbr, long gmtoffset, int isdst) -{ - const timelib_tz_lookup_table *tp; - - tp = zone_search(abbr, gmtoffset, isdst); - if (tp) { - return (tp->full_tz_name); - } else { - return NULL; - } -} - -const timelib_tz_lookup_table *timelib_timezone_abbreviations_list(void) -{ - return timelib_timezone_lookup; -} - -#ifdef DEBUG_PARSER_STUB -int main(void) -{ - timelib_time time = timelib_strtotime("May 12"); - - printf ("%04d-%02d-%02d %02d:%02d:%02d.%-5d %+04d %1d", - time.y, time.m, time.d, time.h, time.i, time.s, time.f, time.z, time.dst); - if (time.have_relative) { - printf ("%3dY %3dM %3dD / %3dH %3dM %3dS", - time.relative.y, time.relative.m, time.relative.d, time.relative.h, time.relative.i, time.relative.s); - } - if (time.have_weekday_relative) { - printf (" / %d", time.relative.weekday); - } - if (time.have_weeknr_day) { - printf(" / %dW%d", time.relative.weeknr_day.weeknr, time.relative.weeknr_day.dayofweek); - } - return 0; -} -#endif - -/* - * vim: syntax=c - */ diff --git a/ext/date/lib/parse_date.re b/ext/date/lib/parse_date.re deleted file mode 100644 index b75cb95ed3600..0000000000000 --- a/ext/date/lib/parse_date.re +++ /dev/null @@ -1,1660 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2006 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Derick Rethans | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#include "timelib.h" - -#include -#include - -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_STRING_H -#include -#else -#include -#endif - -#if defined(_MSC_VER) -# define strtoll(s, f, b) _atoi64(s) -#elif !defined(HAVE_STRTOLL) -# if defined(HAVE_ATOLL) -# define strtoll(s, f, b) atoll(s) -# else -# define strtoll(s, f, b) strtol(s, f, b) -# endif -#endif - -#define TIMELIB_SECOND 1 -#define TIMELIB_MINUTE 2 -#define TIMELIB_HOUR 3 -#define TIMELIB_DAY 4 -#define TIMELIB_MONTH 5 -#define TIMELIB_YEAR 6 -#define TIMELIB_WEEKDAY 7 -#define TIMELIB_SPECIAL 8 - -#define EOI 257 -#define TIME 258 -#define DATE 259 - -#define TIMELIB_XMLRPC_SOAP 260 -#define TIMELIB_TIME12 261 -#define TIMELIB_TIME24 262 -#define TIMELIB_GNU_NOCOLON 263 -#define TIMELIB_GNU_NOCOLON_TZ 264 -#define TIMELIB_ISO_NOCOLON 265 - -#define TIMELIB_AMERICAN 266 -#define TIMELIB_ISO_DATE 267 -#define TIMELIB_DATE_FULL 268 -#define TIMELIB_DATE_TEXT 269 -#define TIMELIB_DATE_NOCOLON 270 -#define TIMELIB_PG_YEARDAY 271 -#define TIMELIB_PG_TEXT 272 -#define TIMELIB_PG_REVERSE 273 -#define TIMELIB_CLF 274 -#define TIMELIB_DATE_NO_DAY 275 -#define TIMELIB_SHORTDATE_WITH_TIME 276 -#define TIMELIB_DATE_FULL_POINTED 277 -#define TIMELIB_TIME24_WITH_ZONE 278 -#define TIMELIB_ISO_WEEK 279 - -#define TIMELIB_TIMEZONE 300 -#define TIMELIB_AGO 301 - -#define TIMELIB_RELATIVE 310 - -#define TIMELIB_ERROR 999 - -typedef unsigned char uchar; - -#define BSIZE 8192 - -#define YYCTYPE uchar -#define YYCURSOR cursor -#define YYLIMIT s->lim -#define YYMARKER s->ptr -#define YYFILL(n) return EOI; - -#define RET(i) {s->cur = cursor; return i;} - -#define timelib_string_free free - -#define TIMELIB_HAVE_TIME() { if (s->time->have_time) { add_error(s, "Double time specification"); timelib_string_free(str); return TIMELIB_ERROR; } else { s->time->have_time = 1; s->time->h = 0; s->time->i = 0; s->time->s = 0; s->time->f = 0; } } -#define TIMELIB_UNHAVE_TIME() { s->time->have_time = 0; s->time->h = 0; s->time->i = 0; s->time->s = 0; s->time->f = 0; } -#define TIMELIB_HAVE_DATE() { if (s->time->have_date) { add_error(s, "Double date specification"); timelib_string_free(str); return TIMELIB_ERROR; } else { s->time->have_date = 1; } } -#define TIMELIB_UNHAVE_DATE() { s->time->have_date = 0; s->time->d = 0; s->time->m = 0; s->time->y = 0; } -#define TIMELIB_HAVE_RELATIVE() { s->time->have_relative = 1; s->time->relative.weekday_behavior = 1; } -#define TIMELIB_HAVE_WEEKDAY_RELATIVE() { s->time->have_weekday_relative = 1; } -#define TIMELIB_HAVE_SPECIAL_RELATIVE() { s->time->have_special_relative = 1; } -#define TIMELIB_HAVE_TZ() { s->cur = cursor; if (s->time->have_zone) { add_warning(s, "Double timezone specification"); timelib_string_free(str); return TIMELIB_ERROR; } else { s->time->have_zone = 1; } } - -#define TIMELIB_INIT s->cur = cursor; str = timelib_string(s); ptr = str -#define TIMELIB_DEINIT timelib_string_free(str) -#define TIMELIB_ADJUST_RELATIVE_WEEKDAY() if (in->time.have_weekday_relative && (in.rel.d > 0)) { in.rel.d -= 7; } - -#define TIMELIB_PROCESS_YEAR(x) { \ - if ((x) == -1) { \ - /* (x) = 0; */ \ - } else if ((x) < 100) { \ - if ((x) < 70) { \ - (x) += 2000; \ - } else { \ - (x) += 1900; \ - } \ - } \ -} - -#ifdef DEBUG_PARSER -#define DEBUG_OUTPUT(s) printf("%s\n", s); -#define YYDEBUG(s,c) { if (s != -1) { printf("state: %d ", s); printf("[%c]\n", c); } } -#else -#define DEBUG_OUTPUT(s) -#define YYDEBUG(s,c) -#endif - -#include "timelib_structs.h" - -typedef struct timelib_elems { - unsigned int c; /* Number of elements */ - char **v; /* Values */ -} timelib_elems; - -typedef struct Scanner { - int fd; - uchar *lim, *str, *ptr, *cur, *tok, *pos; - unsigned int line, len; - struct timelib_error_container *errors; - - struct timelib_time *time; - const timelib_tzdb *tzdb; -} Scanner; - -typedef struct _timelib_lookup_table { - const char *name; - int type; - int value; -} timelib_lookup_table; - -typedef struct _timelib_relunit { - const char *name; - int unit; - int multiplier; -} timelib_relunit; - -#define HOUR(a) (int)(a * 60) - -/* The timezone table. */ -const static timelib_tz_lookup_table timelib_timezone_lookup[] = { -#include "timezonemap.h" - { NULL, 0, 0, NULL }, -}; - -const static timelib_tz_lookup_table timelib_timezone_fallbackmap[] = { -#include "fallbackmap.h" - { NULL, 0, 0, NULL }, -}; - -const static timelib_tz_lookup_table timelib_timezone_utc[] = { - { "utc", 0, 0, "UTC" }, -}; - -static timelib_relunit const timelib_relunit_lookup[] = { - { "sec", TIMELIB_SECOND, 1 }, - { "secs", TIMELIB_SECOND, 1 }, - { "second", TIMELIB_SECOND, 1 }, - { "seconds", TIMELIB_SECOND, 1 }, - { "min", TIMELIB_MINUTE, 1 }, - { "mins", TIMELIB_MINUTE, 1 }, - { "minute", TIMELIB_MINUTE, 1 }, - { "minutes", TIMELIB_MINUTE, 1 }, - { "hour", TIMELIB_HOUR, 1 }, - { "hours", TIMELIB_HOUR, 1 }, - { "day", TIMELIB_DAY, 1 }, - { "days", TIMELIB_DAY, 1 }, - { "week", TIMELIB_DAY, 7 }, - { "weeks", TIMELIB_DAY, 7 }, - { "fortnight", TIMELIB_DAY, 14 }, - { "fortnights", TIMELIB_DAY, 14 }, - { "forthnight", TIMELIB_DAY, 14 }, - { "forthnights", TIMELIB_DAY, 14 }, - { "month", TIMELIB_MONTH, 1 }, - { "months", TIMELIB_MONTH, 1 }, - { "year", TIMELIB_YEAR, 1 }, - { "years", TIMELIB_YEAR, 1 }, - - { "monday", TIMELIB_WEEKDAY, 1 }, - { "mon", TIMELIB_WEEKDAY, 1 }, - { "tuesday", TIMELIB_WEEKDAY, 2 }, - { "tue", TIMELIB_WEEKDAY, 2 }, - { "wednesday", TIMELIB_WEEKDAY, 3 }, - { "wed", TIMELIB_WEEKDAY, 3 }, - { "thursday", TIMELIB_WEEKDAY, 4 }, - { "thu", TIMELIB_WEEKDAY, 4 }, - { "friday", TIMELIB_WEEKDAY, 5 }, - { "fri", TIMELIB_WEEKDAY, 5 }, - { "saturday", TIMELIB_WEEKDAY, 6 }, - { "sat", TIMELIB_WEEKDAY, 6 }, - { "sunday", TIMELIB_WEEKDAY, 0 }, - { "sun", TIMELIB_WEEKDAY, 0 }, - - { "weekday", TIMELIB_SPECIAL, TIMELIB_SPECIAL_WEEKDAY }, - { "weekdays", TIMELIB_SPECIAL, TIMELIB_SPECIAL_WEEKDAY }, - { NULL, 0, 0 } -}; - -/* The relative text table. */ -static timelib_lookup_table const timelib_reltext_lookup[] = { - { "first", 0, 1 }, - { "next", 0, 1 }, - { "second", 0, 2 }, - { "third", 0, 3 }, - { "fourth", 0, 4 }, - { "fifth", 0, 5 }, - { "sixth", 0, 6 }, - { "seventh", 0, 7 }, - { "eight", 0, 8 }, - { "ninth", 0, 9 }, - { "tenth", 0, 10 }, - { "eleventh", 0, 11 }, - { "twelfth", 0, 12 }, - { "last", 0, -1 }, - { "previous", 0, -1 }, - { "this", 1, 0 }, - { NULL, 1, 0 } -}; - -/* The month table. */ -static timelib_lookup_table const timelib_month_lookup[] = { - { "jan", 0, 1 }, - { "feb", 0, 2 }, - { "mar", 0, 3 }, - { "apr", 0, 4 }, - { "may", 0, 5 }, - { "jun", 0, 6 }, - { "jul", 0, 7 }, - { "aug", 0, 8 }, - { "sep", 0, 9 }, - { "sept", 0, 9 }, - { "oct", 0, 10 }, - { "nov", 0, 11 }, - { "dec", 0, 12 }, - { "i", 0, 1 }, - { "ii", 0, 2 }, - { "iii", 0, 3 }, - { "iv", 0, 4 }, - { "v", 0, 5 }, - { "vi", 0, 6 }, - { "vii", 0, 7 }, - { "viii", 0, 8 }, - { "ix", 0, 9 }, - { "x", 0, 10 }, - { "xi", 0, 11 }, - { "xii", 0, 12 }, - - { "january", 0, 1 }, - { "february", 0, 2 }, - { "march", 0, 3 }, - { "april", 0, 4 }, - { "may", 0, 5 }, - { "june", 0, 6 }, - { "july", 0, 7 }, - { "august", 0, 8 }, - { "september", 0, 9 }, - { "october", 0, 10 }, - { "november", 0, 11 }, - { "december", 0, 12 }, - { NULL, 0, 0 } -}; - -#if 0 -static char* timelib_ltrim(char *s) -{ - char *ptr = s; - while (ptr[0] == ' ' || ptr[0] == '\t') { - ptr++; - } - return ptr; -} -#endif - -#if 0 -uchar *fill(Scanner *s, uchar *cursor){ - if(!s->eof){ - unsigned int cnt = s->tok - s->bot; - if(cnt){ - memcpy(s->bot, s->tok, s->lim - s->tok); - s->tok = s->bot; - s->ptr -= cnt; - cursor -= cnt; - s->pos -= cnt; - s->lim -= cnt; - } - if((s->top - s->lim) < BSIZE){ - uchar *buf = (uchar*) malloc(((s->lim - s->bot) + BSIZE)*sizeof(uchar)); - memcpy(buf, s->tok, s->lim - s->tok); - s->tok = buf; - s->ptr = &buf[s->ptr - s->bot]; - cursor = &buf[cursor - s->bot]; - s->pos = &buf[s->pos - s->bot]; - s->lim = &buf[s->lim - s->bot]; - s->top = &s->lim[BSIZE]; - free(s->bot); - s->bot = buf; - } - if((cnt = read(s->fd, (char*) s->lim, BSIZE)) != BSIZE){ - s->eof = &s->lim[cnt]; *(s->eof)++ = '\n'; - } - s->lim += cnt; - } - return cursor; -} -#endif - -static void add_warning(Scanner *s, char *error) -{ - s->errors->warning_count++; - s->errors->warning_messages = realloc(s->errors->warning_messages, s->errors->warning_count * sizeof(timelib_error_message)); - s->errors->warning_messages[s->errors->warning_count - 1].position = s->tok ? s->tok - s->str : 0; - s->errors->warning_messages[s->errors->warning_count - 1].character = s->tok ? *s->tok : 0; - s->errors->warning_messages[s->errors->warning_count - 1].message = strdup(error); -} - -static void add_error(Scanner *s, char *error) -{ - s->errors->error_count++; - s->errors->error_messages = realloc(s->errors->error_messages, s->errors->error_count * sizeof(timelib_error_message)); - s->errors->error_messages[s->errors->error_count - 1].position = s->tok ? s->tok - s->str : 0; - s->errors->error_messages[s->errors->error_count - 1].character = s->tok ? *s->tok : 0; - s->errors->error_messages[s->errors->error_count - 1].message = strdup(error); -} - -static timelib_sll timelib_meridian(char **ptr, timelib_sll h) -{ - timelib_sll retval = 0; - - while (!strchr("AaPp", **ptr)) { - ++*ptr; - } - if (**ptr == 'a' || **ptr == 'A') { - if (h == 12) { - retval = -12; - } - } else if (h != 12) { - retval = 12; - } - ++*ptr; - if (**ptr == '.') { - *ptr += 3; - } else { - ++*ptr; - } - return retval; -} - -static char *timelib_string(Scanner *s) -{ - char *tmp = calloc(1, s->cur - s->tok + 1); - memcpy(tmp, s->tok, s->cur - s->tok); - - return tmp; -} - -static timelib_sll timelib_get_nr(char **ptr, int max_length) -{ - char *begin, *end, *str; - timelib_sll tmp_nr = -1; - int len = 0; - - while ((**ptr < '0') || (**ptr > '9')) { - if (**ptr == '\0') { - return -1; - } - ++*ptr; - } - begin = *ptr; - while ((**ptr >= '0') && (**ptr <= '9') && len < max_length) { - ++*ptr; - ++len; - } - end = *ptr; - str = calloc(1, end - begin + 1); - memcpy(str, begin, end - begin); - tmp_nr = strtoll(str, NULL, 10); - free(str); - return tmp_nr; -} - -static void timelib_skip_day_suffix(char **ptr) -{ - if (isspace(**ptr)) { - return; - } - if (!strncasecmp(*ptr, "nd", 2) || !strncasecmp(*ptr, "rd", 2) ||!strncasecmp(*ptr, "st", 2) || !strncasecmp(*ptr, "th", 2)) { - *ptr += 2; - } -} - -static double timelib_get_frac_nr(char **ptr, int max_length) -{ - char *begin, *end, *str; - double tmp_nr = -1; - int len = 0; - - while ((**ptr != '.') && ((**ptr < '0') || (**ptr > '9'))) { - if (**ptr == '\0') { - return -1; - } - ++*ptr; - } - begin = *ptr; - while (((**ptr == '.') || ((**ptr >= '0') && (**ptr <= '9'))) && len < max_length) { - ++*ptr; - ++len; - } - end = *ptr; - str = calloc(1, end - begin + 1); - memcpy(str, begin, end - begin); - tmp_nr = strtod(str, NULL); - free(str); - return tmp_nr; -} - -static timelib_ull timelib_get_unsigned_nr(char **ptr, int max_length) -{ - timelib_ull dir = 1; - - while (((**ptr < '0') || (**ptr > '9')) && (**ptr != '+') && (**ptr != '-')) { - if (**ptr == '\0') { - return -1; - } - ++*ptr; - } - if (**ptr == '+') { - ++*ptr; - } else if (**ptr == '-') { - dir = -1; - ++*ptr; - } - return dir * timelib_get_nr(ptr, max_length); -} - -static long timelib_parse_tz_cor(char **ptr) -{ - char *begin = *ptr, *end; - long tmp; - - while (**ptr != '\0') { - ++*ptr; - } - end = *ptr; - switch (end - begin) { - case 1: - case 2: - return HOUR(strtol(begin, NULL, 10)); - break; - case 3: - case 4: - if (begin[1] == ':') { - tmp = HOUR(strtol(begin, NULL, 10)) + strtol(begin + 2, NULL, 10); - return tmp; - } else if (begin[2] == ':') { - tmp = HOUR(strtol(begin, NULL, 10)) + strtol(begin + 3, NULL, 10); - return tmp; - } else { - tmp = strtol(begin, NULL, 10); - return HOUR(tmp / 100) + tmp % 100; - } - case 5: - tmp = HOUR(strtol(begin, NULL, 10)) + strtol(begin + 3, NULL, 10); - return tmp; - } - return 0; -} - -static timelib_sll timelib_lookup_relative_text(char **ptr, int *behavior) -{ - char *word; - char *begin = *ptr, *end; - timelib_sll value = 0; - const timelib_lookup_table *tp; - - while ((**ptr >= 'A' && **ptr <= 'Z') || (**ptr >= 'a' && **ptr <= 'z')) { - ++*ptr; - } - end = *ptr; - word = calloc(1, end - begin + 1); - memcpy(word, begin, end - begin); - - for (tp = timelib_reltext_lookup; tp->name; tp++) { - if (strcasecmp(word, tp->name) == 0) { - value = tp->value; - *behavior = tp->type; - } - } - - free(word); - return value; -} - -static timelib_sll timelib_get_relative_text(char **ptr, int *behavior) -{ - while (**ptr == ' ' || **ptr == '\t' || **ptr == '-' || **ptr == '/') { - ++*ptr; - } - return timelib_lookup_relative_text(ptr, behavior); -} - -static long timelib_lookup_month(char **ptr) -{ - char *word; - char *begin = *ptr, *end; - long value = 0; - const timelib_lookup_table *tp; - - while ((**ptr >= 'A' && **ptr <= 'Z') || (**ptr >= 'a' && **ptr <= 'z')) { - ++*ptr; - } - end = *ptr; - word = calloc(1, end - begin + 1); - memcpy(word, begin, end - begin); - - for (tp = timelib_month_lookup; tp->name; tp++) { - if (strcasecmp(word, tp->name) == 0) { - value = tp->value; - } - } - - free(word); - return value; -} - -static long timelib_get_month(char **ptr) -{ - while (**ptr == ' ' || **ptr == '\t' || **ptr == '-' || **ptr == '.' || **ptr == '/') { - ++*ptr; - } - return timelib_lookup_month(ptr); -} - -static void timelib_eat_spaces(char **ptr) -{ - while (**ptr == ' ' || **ptr == '\t') { - ++*ptr; - } -} - -static const timelib_relunit* timelib_lookup_relunit(char **ptr) -{ - char *word; - char *begin = *ptr, *end; - const timelib_relunit *tp, *value = NULL; - - while (**ptr != '\0' && **ptr != ' ' && **ptr != '\t') { - ++*ptr; - } - end = *ptr; - word = calloc(1, end - begin + 1); - memcpy(word, begin, end - begin); - - for (tp = timelib_relunit_lookup; tp->name; tp++) { - if (strcasecmp(word, tp->name) == 0) { - value = tp; - break; - } - } - - free(word); - return value; -} - -static void timelib_set_relative(char **ptr, timelib_sll amount, int behavior, Scanner *s) -{ - const timelib_relunit* relunit; - - if (!(relunit = timelib_lookup_relunit(ptr))) { - return; - } - - switch (relunit->unit) { - case TIMELIB_SECOND: s->time->relative.s += amount * relunit->multiplier; break; - case TIMELIB_MINUTE: s->time->relative.i += amount * relunit->multiplier; break; - case TIMELIB_HOUR: s->time->relative.h += amount * relunit->multiplier; break; - case TIMELIB_DAY: s->time->relative.d += amount * relunit->multiplier; break; - case TIMELIB_MONTH: s->time->relative.m += amount * relunit->multiplier; break; - case TIMELIB_YEAR: s->time->relative.y += amount * relunit->multiplier; break; - - case TIMELIB_WEEKDAY: - TIMELIB_HAVE_WEEKDAY_RELATIVE(); - TIMELIB_UNHAVE_TIME(); - s->time->relative.d += (amount > 0 ? amount - 1 : amount) * 7; - s->time->relative.weekday = relunit->multiplier; - s->time->relative.weekday_behavior = behavior; - break; - - case TIMELIB_SPECIAL: - TIMELIB_HAVE_SPECIAL_RELATIVE(); - TIMELIB_UNHAVE_TIME(); - s->time->special.type = relunit->multiplier; - s->time->special.amount = amount; - } -} - -const static timelib_tz_lookup_table* zone_search(const char *word, long gmtoffset, int isdst) -{ - int first_found = 0; - const timelib_tz_lookup_table *tp, *first_found_elem = NULL; - const timelib_tz_lookup_table *fmp; - - if (strcasecmp("utc", word) == 0 || strcasecmp("gmt", word) == 0) { - return timelib_timezone_utc; - } - - for (tp = timelib_timezone_lookup; tp->name; tp++) { - if (strcasecmp(word, tp->name) == 0) { - if (!first_found) { - first_found = 1; - first_found_elem = tp; - if (gmtoffset == -1) { - return tp; - } - } - if (tp->gmtoffset == gmtoffset) { - return tp; - } - } - } - if (first_found) { - return first_found_elem; - } - - /* Still didn't find anything, let's find the zone solely based on - * offset/isdst then */ - for (fmp = timelib_timezone_fallbackmap; fmp->name; fmp++) { - if ((fmp->gmtoffset * 3600) == gmtoffset && fmp->type == isdst) { - return fmp; - } - } - return NULL; -} - -static long timelib_lookup_zone(char **ptr, int *dst, char **tz_abbr, int *found) -{ - char *word; - char *begin = *ptr, *end; - long value = 0; - const timelib_tz_lookup_table *tp; - - while (**ptr != '\0' && **ptr != ')') { - ++*ptr; - } - end = *ptr; - word = calloc(1, end - begin + 1); - memcpy(word, begin, end - begin); - - if ((tp = zone_search(word, -1, 0))) { - value = -tp->gmtoffset / 60; - *dst = tp->type; - value += tp->type * 60; - *found = 1; - } else { - *found = 0; - } - - *tz_abbr = word; - return value; -} - -static long timelib_get_zone(char **ptr, int *dst, timelib_time *t, int *tz_not_found, const timelib_tzdb *tzdb) -{ - timelib_tzinfo *res; - long retval = 0; - - *tz_not_found = 0; - - while (**ptr == ' ' || **ptr == '\t' || **ptr == '(') { - ++*ptr; - } - if (**ptr == '+') { - ++*ptr; - t->is_localtime = 1; - t->zone_type = TIMELIB_ZONETYPE_OFFSET; - *tz_not_found = 0; - t->dst = 0; - - retval = -1 * timelib_parse_tz_cor(ptr); - } else if (**ptr == '-') { - ++*ptr; - t->is_localtime = 1; - t->zone_type = TIMELIB_ZONETYPE_OFFSET; - *tz_not_found = 0; - t->dst = 0; - - retval = timelib_parse_tz_cor(ptr); - } else { - int found = 0; - long offset; - char *tz_abbr; - - t->is_localtime = 1; - - offset = timelib_lookup_zone(ptr, dst, &tz_abbr, &found); - if (found) { - t->zone_type = TIMELIB_ZONETYPE_ABBR; - } -#if 0 - /* If we found a TimeZone identifier, use it */ - if (tz_name) { - t->tz_info = timelib_parse_tzfile(tz_name); - t->zone_type = TIMELIB_ZONETYPE_ID; - } -#endif - /* If we have a TimeZone identifier to start with, use it */ - if (strstr(tz_abbr, "/")) { - if ((res = timelib_parse_tzfile(tz_abbr, tzdb)) != NULL) { - t->tz_info = res; - t->zone_type = TIMELIB_ZONETYPE_ID; - found++; - } - } - if (found && t->zone_type != TIMELIB_ZONETYPE_ID) { - timelib_time_tz_abbr_update(t, tz_abbr); - } - free(tz_abbr); - *tz_not_found = (found == 0); - retval = offset; - } - while (**ptr == ')') { - ++*ptr; - } - return retval; -} - -#define timelib_split_free(arg) { \ - int i; \ - for (i = 0; i < arg.c; i++) { \ - free(arg.v[i]); \ - } \ - if (arg.v) { \ - free(arg.v); \ - } \ -} - -static int scan(Scanner *s) -{ - uchar *cursor = s->cur; - char *str, *ptr = NULL; - -std: - s->tok = cursor; - s->len = 0; -/*!re2c -any = [\000-\377]; - -space = [ \t]+; -frac = "."[0-9]+; - -ago = 'ago'; - -hour24 = [01]?[0-9] | "2"[0-3]; -hour24lz = [01][0-9] | "2"[0-3]; -hour12 = "0"?[1-9] | "1"[0-2]; -minute = [0-5]?[0-9]; -minutelz = [0-5][0-9]; -second = minute | "60"; -secondlz = minutelz | "60"; -meridian = ([AaPp] "."? [Mm] "."?) [\000\t ]; -tz = "("? [A-Za-z]{1,6} ")"? | [A-Z][a-z]+([_/][A-Z][a-z]+)+; -tzcorrection = [+-] hour24 ":"? minute?; - -daysuf = "st" | "nd" | "rd" | "th"; - -month = "0"? [0-9] | "1"[0-2]; -day = ([0-2]?[0-9] | "3"[01]) daysuf?; -year = [0-9]{1,4}; -year2 = [0-9]{2}; -year4 = [0-9]{4}; - -dayofyear = "00"[1-9] | "0"[1-9][0-9] | [1-2][0-9][0-9] | "3"[0-5][0-9] | "36"[0-6]; -weekofyear = "0"[1-9] | [1-4][0-9] | "5"[0-3]; - -monthlz = "0" [1-9] | "1" [0-2]; -daylz = "0" [1-9] | [1-2][0-9] | "3" [01]; - -dayfull = 'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday'; -dayabbr = 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' | 'sun'; -dayspecial = 'weekday' | 'weekdays'; -daytext = dayfull | dayabbr | dayspecial; - -monthfull = 'january' | 'february' | 'march' | 'april' | 'may' | 'june' | 'july' | 'august' | 'september' | 'october' | 'november' | 'december'; -monthabbr = 'jan' | 'feb' | 'mar' | 'apr' | 'may' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec'; -monthroman = "I" | "II" | "III" | "IV" | "V" | "VI" | "VII" | "VIII" | "IX" | "X" | "XI" | "XII"; -monthtext = monthfull | monthabbr | monthroman; - -/* Time formats */ -timetiny12 = hour12 space? meridian; -timeshort12 = hour12[:.]minutelz space? meridian; -timelong12 = hour12[:.]minute[:.]secondlz space? meridian; - -timeshort24 = 't'? hour24[:.]minute; -timelong24 = 't'? hour24[:.]minute[:.]second; -iso8601long = 't'? hour24 [:.] minute [:.] second frac; - -/* iso8601shorttz = hour24 [:] minutelz space? (tzcorrection | tz); */ -iso8601normtz = 't'? hour24 [:.] minute [:.] secondlz space? (tzcorrection | tz); -/* iso8601longtz = hour24 [:] minute [:] secondlz frac space? (tzcorrection | tz); */ - -gnunocolon = 't'? hour24lz minutelz; -/* gnunocolontz = hour24lz minutelz space? (tzcorrection | tz); */ -iso8601nocolon = 't'? hour24lz minutelz secondlz; -/* iso8601nocolontz = hour24lz minutelz secondlz space? (tzcorrection | tz); */ - -/* Date formats */ -americanshort = month "/" day; -american = month "/" day "/" year; -iso8601dateslash = year4 "/" monthlz "/" daylz "/"?; -dateslash = year4 "/" month "/" day; -gnudateshorter = year4 "-" month; -gnudateshort = year "-" month "-" day; -iso8601date = year4 "-" monthlz "-" daylz; -pointeddate = day [.\t-] month [.-] year; -datefull = day ([ \t.-])* monthtext ([ \t.-])* year; -datenoday = monthtext ([ .\t-])* year4; -datenodayrev = year4 ([ .\t-])* monthtext; -datetextual = monthtext ([ .\t-])* day [,.stndrh\t ]* year; -datenoyear = monthtext ([ .\t-])* day [,.stndrh\t ]*; -datenoyearrev = day ([ .\t-])* monthtext; -datenocolon = year4 monthlz daylz; - -/* Special formats */ -soap = year4 "-" monthlz "-" daylz "T" hour24lz ":" minutelz ":" secondlz frac tzcorrection?; -xmlrpc = year4 monthlz daylz "T" hour24 ":" minutelz ":" secondlz; -xmlrpcnocolon = year4 monthlz daylz 't' hour24 minutelz secondlz; -wddx = year4 "-" month "-" day "T" hour24 ":" minute ":" second; -pgydotd = year4 "."? dayofyear; -pgtextshort = monthabbr "-" daylz "-" year; -pgtextreverse = year "-" monthabbr "-" daylz; -isoweekday = year4 "-"? "W" weekofyear "-"? [0-7]; -isoweek = year4 "-"? "W" weekofyear; -exif = year4 ":" monthlz ":" daylz " " hour24lz ":" minutelz ":" secondlz; - -/* Common Log Format: 10/Oct/2000:13:55:36 -0700 */ -clf = day "/" monthabbr "/" year4 ":" hour24lz ":" minutelz ":" secondlz space tzcorrection; - -/* Timestamp format: @1126396800 */ -timestamp = "@" "-"? [0-9]+; - -/* To fix some ambiguities */ -dateshortwithtimeshort12 = datenoyear timeshort12; -dateshortwithtimelong12 = datenoyear timelong12; -dateshortwithtimeshort = datenoyear timeshort24; -dateshortwithtimelong = datenoyear timelong24; -dateshortwithtimelongtz = datenoyear iso8601normtz; - -/* - * Relative regexps - */ -reltextnumber = 'first'|'next'|'second'|'third'|'fourth'|'fifth'|'sixth'|'seventh'|'eight'|'ninth'|'tenth'|'eleventh'|'twelfth'|'last'|'previous'|'this'; -reltextunit = (('sec'|'second'|'min'|'minute'|'hour'|'day'|'week'|'fortnight'|'forthnight'|'month'|'year') 's'?) | daytext; - -relnumber = ([+-]?[ \t]*[0-9]+); -relative = relnumber space? reltextunit; -relativetext = reltextnumber space reltextunit; - -*/ - -/*!re2c - /* so that vim highlights correctly */ - 'yesterday' - { - DEBUG_OUTPUT("yesterday"); - TIMELIB_INIT; - TIMELIB_HAVE_RELATIVE(); - TIMELIB_UNHAVE_TIME(); - - s->time->relative.d = -1; - TIMELIB_DEINIT; - return TIMELIB_RELATIVE; - } - - 'now' - { - DEBUG_OUTPUT("now"); - TIMELIB_INIT; - - TIMELIB_DEINIT; - return TIMELIB_RELATIVE; - } - - 'noon' - { - DEBUG_OUTPUT("noon"); - TIMELIB_INIT; - TIMELIB_UNHAVE_TIME(); - TIMELIB_HAVE_TIME(); - s->time->h = 12; - - TIMELIB_DEINIT; - return TIMELIB_RELATIVE; - } - - 'midnight' | 'today' - { - DEBUG_OUTPUT("midnight | today"); - TIMELIB_INIT; - TIMELIB_UNHAVE_TIME(); - - TIMELIB_DEINIT; - return TIMELIB_RELATIVE; - } - - 'tomorrow' - { - DEBUG_OUTPUT("tomorrow"); - TIMELIB_INIT; - TIMELIB_HAVE_RELATIVE(); - TIMELIB_UNHAVE_TIME(); - - s->time->relative.d = 1; - TIMELIB_DEINIT; - return TIMELIB_RELATIVE; - } - - timestamp - { - timelib_ull i; - - TIMELIB_INIT; - TIMELIB_HAVE_RELATIVE(); - TIMELIB_UNHAVE_DATE(); - TIMELIB_UNHAVE_TIME(); - - i = timelib_get_unsigned_nr((char **) &ptr, 24); - s->time->y = 1970; - s->time->m = 1; - s->time->d = 1; - s->time->h = s->time->i = s->time->s = 0; - s->time->f = 0.0; - s->time->relative.s += i; - s->time->is_localtime = 1; - s->time->zone_type = TIMELIB_ZONETYPE_OFFSET; - s->time->z = 0; - - TIMELIB_DEINIT; - return TIMELIB_RELATIVE; - } - - timetiny12 | timeshort12 | timelong12 - { - DEBUG_OUTPUT("timetiny12 | timeshort12 | timelong12"); - TIMELIB_INIT; - TIMELIB_HAVE_TIME(); - s->time->h = timelib_get_nr((char **) &ptr, 2); - if (*ptr == ':' || *ptr == '.') { - s->time->i = timelib_get_nr((char **) &ptr, 2); - if (*ptr == ':' || *ptr == '.') { - s->time->s = timelib_get_nr((char **) &ptr, 2); - } - } - s->time->h += timelib_meridian((char **) &ptr, s->time->h); - TIMELIB_DEINIT; - return TIMELIB_TIME12; - } - - timeshort24 | timelong24 /* | iso8601short | iso8601norm */ | iso8601long /*| iso8601shorttz | iso8601normtz | iso8601longtz*/ - { - int tz_not_found; - DEBUG_OUTPUT("timeshort24 | timelong24 | iso8601long"); - TIMELIB_INIT; - TIMELIB_HAVE_TIME(); - s->time->h = timelib_get_nr((char **) &ptr, 2); - s->time->i = timelib_get_nr((char **) &ptr, 2); - if (*ptr == ':' || *ptr == '.') { - s->time->s = timelib_get_nr((char **) &ptr, 2); - - if (*ptr == '.') { - s->time->f = timelib_get_frac_nr((char **) &ptr, 8); - } - } - - if (*ptr != '\0') { - s->time->z = timelib_get_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb); - if (tz_not_found) { - add_error(s, "The timezone could not be found in the database"); - } - } - TIMELIB_DEINIT; - return TIMELIB_TIME24_WITH_ZONE; - } - - gnunocolon - { - DEBUG_OUTPUT("gnunocolon"); - TIMELIB_INIT; - switch (s->time->have_time) { - case 0: - s->time->h = timelib_get_nr((char **) &ptr, 2); - s->time->i = timelib_get_nr((char **) &ptr, 2); - s->time->s = 0; - break; - case 1: - s->time->y = timelib_get_nr((char **) &ptr, 4); - break; - default: - TIMELIB_DEINIT; - add_error(s, "Double time specification"); - return TIMELIB_ERROR; - } - s->time->have_time++; - TIMELIB_DEINIT; - return TIMELIB_GNU_NOCOLON; - } -/* - gnunocolontz - { - DEBUG_OUTPUT("gnunocolontz"); - TIMELIB_INIT; - switch (s->time->have_time) { - case 0: - s->time->h = timelib_get_nr((char **) &ptr, 2); - s->time->i = timelib_get_nr((char **) &ptr, 2); - s->time->s = 0; - s->time->z = timelib_get_zone((char **) &ptr, &s->time->dst, s->time, s->tzdb); - break; - case 1: - s->time->y = timelib_get_nr((char **) &ptr, 4); - break; - default: - TIMELIB_DEINIT; - return TIMELIB_ERROR; - } - s->time->have_time++; - TIMELIB_DEINIT; - return TIMELIB_GNU_NOCOLON_TZ; - } -*/ - iso8601nocolon /*| iso8601nocolontz*/ - { - int tz_not_found; - DEBUG_OUTPUT("iso8601nocolon"); - TIMELIB_INIT; - TIMELIB_HAVE_TIME(); - s->time->h = timelib_get_nr((char **) &ptr, 2); - s->time->i = timelib_get_nr((char **) &ptr, 2); - s->time->s = timelib_get_nr((char **) &ptr, 2); - - if (*ptr != '\0') { - s->time->z = timelib_get_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb); - if (tz_not_found) { - add_error(s, "The timezone could not be found in the database"); - } - } - TIMELIB_DEINIT; - return TIMELIB_ISO_NOCOLON; - } - - americanshort | american - { - DEBUG_OUTPUT("americanshort | american"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->m = timelib_get_nr((char **) &ptr, 2); - s->time->d = timelib_get_nr((char **) &ptr, 2); - if (*ptr == '/') { - s->time->y = timelib_get_nr((char **) &ptr, 4); - TIMELIB_PROCESS_YEAR(s->time->y); - } - TIMELIB_DEINIT; - return TIMELIB_AMERICAN; - } - - iso8601date | iso8601dateslash | dateslash - { - DEBUG_OUTPUT("iso8601date | iso8601dateslash | dateslash"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->m = timelib_get_nr((char **) &ptr, 2); - s->time->d = timelib_get_nr((char **) &ptr, 2); - TIMELIB_DEINIT; - return TIMELIB_ISO_DATE; - } - - gnudateshorter - { - DEBUG_OUTPUT("gnudateshorter"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->m = timelib_get_nr((char **) &ptr, 2); - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_ISO_DATE; - } - - gnudateshort - { - DEBUG_OUTPUT("gnudateshort"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->m = timelib_get_nr((char **) &ptr, 2); - s->time->d = timelib_get_nr((char **) &ptr, 2); - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_ISO_DATE; - } - - datefull - { - DEBUG_OUTPUT("datefull"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->d = timelib_get_nr((char **) &ptr, 2); - timelib_skip_day_suffix((char **) &ptr); - s->time->m = timelib_get_month((char **) &ptr); - s->time->y = timelib_get_nr((char **) &ptr, 4); - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_DATE_FULL; - } - - pointeddate - { - DEBUG_OUTPUT("pointed date"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->d = timelib_get_nr((char **) &ptr, 2); - s->time->m = timelib_get_nr((char **) &ptr, 2); - s->time->y = timelib_get_nr((char **) &ptr, 4); - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_DATE_FULL_POINTED; - } - - datenoday - { - DEBUG_OUTPUT("datenoday"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->m = timelib_get_month((char **) &ptr); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->d = 1; - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_DATE_NO_DAY; - } - - datenodayrev - { - DEBUG_OUTPUT("datenodayrev"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->m = timelib_get_month((char **) &ptr); - s->time->d = 1; - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_DATE_NO_DAY; - } - - datetextual | datenoyear - { - DEBUG_OUTPUT("datetextual | datenoyear"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->m = timelib_get_month((char **) &ptr); - s->time->d = timelib_get_nr((char **) &ptr, 2); - s->time->y = timelib_get_nr((char **) &ptr, 4); - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_DATE_TEXT; - } - - datenoyearrev - { - DEBUG_OUTPUT("datenoyearrev"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->d = timelib_get_nr((char **) &ptr, 2); - timelib_skip_day_suffix((char **) &ptr); - s->time->m = timelib_get_month((char **) &ptr); - TIMELIB_DEINIT; - return TIMELIB_DATE_TEXT; - } - - datenocolon - { - DEBUG_OUTPUT("datenocolon"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->m = timelib_get_nr((char **) &ptr, 2); - s->time->d = timelib_get_nr((char **) &ptr, 2); - TIMELIB_DEINIT; - return TIMELIB_DATE_NOCOLON; - } - - xmlrpc | xmlrpcnocolon | soap | wddx | exif - { - int tz_not_found; - DEBUG_OUTPUT("xmlrpc | xmlrpcnocolon | soap | wddx | exif"); - TIMELIB_INIT; - TIMELIB_HAVE_TIME(); - TIMELIB_HAVE_DATE(); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->m = timelib_get_nr((char **) &ptr, 2); - s->time->d = timelib_get_nr((char **) &ptr, 2); - s->time->h = timelib_get_nr((char **) &ptr, 2); - s->time->i = timelib_get_nr((char **) &ptr, 2); - s->time->s = timelib_get_nr((char **) &ptr, 2); - if (*ptr == '.') { - s->time->f = timelib_get_frac_nr((char **) &ptr, 9); - if (*ptr) { /* timezone is optional */ - s->time->z = timelib_get_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb); - if (tz_not_found) { - add_error(s, "The timezone could not be found in the database"); - } - } - } - TIMELIB_DEINIT; - return TIMELIB_XMLRPC_SOAP; - } - - pgydotd - { - DEBUG_OUTPUT("pgydotd"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->d = timelib_get_nr((char **) &ptr, 3); - s->time->m = 1; - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_PG_YEARDAY; - } - - isoweekday - { - timelib_sll w, d; - DEBUG_OUTPUT("isoweekday"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - TIMELIB_HAVE_RELATIVE(); - - s->time->y = timelib_get_nr((char **) &ptr, 4); - w = timelib_get_nr((char **) &ptr, 2); - d = timelib_get_nr((char **) &ptr, 1); - s->time->m = 1; - s->time->d = 1; - s->time->relative.d = timelib_daynr_from_weeknr(s->time->y, w, d); - - TIMELIB_DEINIT; - return TIMELIB_ISO_WEEK; - } - - isoweek - { - timelib_sll w, d; - DEBUG_OUTPUT("isoweek"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - TIMELIB_HAVE_RELATIVE(); - - s->time->y = timelib_get_nr((char **) &ptr, 4); - w = timelib_get_nr((char **) &ptr, 2); - d = 1; - s->time->m = 1; - s->time->d = 1; - s->time->relative.d = timelib_daynr_from_weeknr(s->time->y, w, d); - - TIMELIB_DEINIT; - return TIMELIB_ISO_WEEK; - } - - pgtextshort - { - DEBUG_OUTPUT("pgtextshort"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->m = timelib_get_month((char **) &ptr); - s->time->d = timelib_get_nr((char **) &ptr, 2); - s->time->y = timelib_get_nr((char **) &ptr, 4); - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_PG_TEXT; - } - - pgtextreverse - { - DEBUG_OUTPUT("pgtextreverse"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->m = timelib_get_month((char **) &ptr); - s->time->d = timelib_get_nr((char **) &ptr, 2); - TIMELIB_PROCESS_YEAR(s->time->y); - TIMELIB_DEINIT; - return TIMELIB_PG_TEXT; - } - - clf - { - int tz_not_found; - DEBUG_OUTPUT("clf"); - TIMELIB_INIT; - TIMELIB_HAVE_TIME(); - TIMELIB_HAVE_DATE(); - s->time->d = timelib_get_nr((char **) &ptr, 2); - s->time->m = timelib_get_month((char **) &ptr); - s->time->y = timelib_get_nr((char **) &ptr, 4); - s->time->h = timelib_get_nr((char **) &ptr, 2); - s->time->i = timelib_get_nr((char **) &ptr, 2); - s->time->s = timelib_get_nr((char **) &ptr, 2); - s->time->z = timelib_get_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb); - if (tz_not_found) { - add_error(s, "The timezone could not be found in the database"); - } - TIMELIB_DEINIT; - return TIMELIB_CLF; - } - - year4 - { - DEBUG_OUTPUT("year4"); - TIMELIB_INIT; - s->time->y = timelib_get_nr((char **) &ptr, 4); - TIMELIB_DEINIT; - return TIMELIB_CLF; - } - - ago - { - DEBUG_OUTPUT("ago"); - TIMELIB_INIT; - s->time->relative.y = 0 - s->time->relative.y; - s->time->relative.m = 0 - s->time->relative.m; - s->time->relative.d = 0 - s->time->relative.d; - s->time->relative.h = 0 - s->time->relative.h; - s->time->relative.i = 0 - s->time->relative.i; - s->time->relative.s = 0 - s->time->relative.s; - s->time->relative.weekday = 0 - s->time->relative.weekday; - if (s->time->have_special_relative && s->time->special.type == TIMELIB_SPECIAL_WEEKDAY) { - s->time->special.amount = 0 - s->time->special.amount; - } - TIMELIB_DEINIT; - return TIMELIB_AGO; - } - - daytext - { - const timelib_relunit* relunit; - DEBUG_OUTPUT("daytext"); - TIMELIB_INIT; - TIMELIB_HAVE_RELATIVE(); - TIMELIB_HAVE_WEEKDAY_RELATIVE(); - TIMELIB_UNHAVE_TIME(); - relunit = timelib_lookup_relunit((char**) &ptr); - s->time->relative.weekday = relunit->multiplier; - s->time->relative.weekday_behavior = 1; - - TIMELIB_DEINIT; - return TIMELIB_WEEKDAY; - } - - relativetext - { - timelib_sll i; - int behavior = 0; - DEBUG_OUTPUT("relativetext"); - TIMELIB_INIT; - TIMELIB_HAVE_RELATIVE(); - - while(*ptr) { - i = timelib_get_relative_text((char **) &ptr, &behavior); - timelib_eat_spaces((char **) &ptr); - timelib_set_relative((char **) &ptr, i, behavior, s); - } - TIMELIB_DEINIT; - return TIMELIB_RELATIVE; - } - - monthfull | monthabbr - { - DEBUG_OUTPUT("monthtext"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->m = timelib_lookup_month((char **) &ptr); - TIMELIB_DEINIT; - return TIMELIB_DATE_TEXT; - } - - tzcorrection | tz - { - int tz_not_found; - DEBUG_OUTPUT("tzcorrection | tz"); - TIMELIB_INIT; - TIMELIB_HAVE_TZ(); - s->time->z = timelib_get_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb); - if (tz_not_found) { - add_error(s, "The timezone could not be found in the database"); - } - TIMELIB_DEINIT; - return TIMELIB_TIMEZONE; - } - - dateshortwithtimeshort12 | dateshortwithtimelong12 - { - DEBUG_OUTPUT("dateshortwithtimeshort12 | dateshortwithtimelong12"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->m = timelib_get_month((char **) &ptr); - s->time->d = timelib_get_nr((char **) &ptr, 2); - - TIMELIB_HAVE_TIME(); - s->time->h = timelib_get_nr((char **) &ptr, 2); - s->time->i = timelib_get_nr((char **) &ptr, 2); - if (*ptr == ':' || *ptr == '.') { - s->time->s = timelib_get_nr((char **) &ptr, 2); - - if (*ptr == '.') { - s->time->f = timelib_get_frac_nr((char **) &ptr, 8); - } - } - - s->time->h += timelib_meridian((char **) &ptr, s->time->h); - TIMELIB_DEINIT; - return TIMELIB_SHORTDATE_WITH_TIME; - } - - dateshortwithtimeshort | dateshortwithtimelong | dateshortwithtimelongtz - { - int tz_not_found; - DEBUG_OUTPUT("dateshortwithtimeshort | dateshortwithtimelong | dateshortwithtimelongtz"); - TIMELIB_INIT; - TIMELIB_HAVE_DATE(); - s->time->m = timelib_get_month((char **) &ptr); - s->time->d = timelib_get_nr((char **) &ptr, 2); - - TIMELIB_HAVE_TIME(); - s->time->h = timelib_get_nr((char **) &ptr, 2); - s->time->i = timelib_get_nr((char **) &ptr, 2); - if (*ptr == ':') { - s->time->s = timelib_get_nr((char **) &ptr, 2); - - if (*ptr == '.') { - s->time->f = timelib_get_frac_nr((char **) &ptr, 8); - } - } - - if (*ptr != '\0') { - s->time->z = timelib_get_zone((char **) &ptr, &s->time->dst, s->time, &tz_not_found, s->tzdb); - if (tz_not_found) { - add_error(s, "The timezone could not be found in the database"); - } - } - TIMELIB_DEINIT; - return TIMELIB_SHORTDATE_WITH_TIME; - } - - relative - { - timelib_ull i; - DEBUG_OUTPUT("relative"); - TIMELIB_INIT; - TIMELIB_HAVE_RELATIVE(); - - while(*ptr) { - i = timelib_get_unsigned_nr((char **) &ptr, 24); - timelib_eat_spaces((char **) &ptr); - timelib_set_relative((char **) &ptr, i, 0, s); - } - TIMELIB_DEINIT; - return TIMELIB_RELATIVE; - } - - [ .,\t] - { - goto std; - } - - "\000"|"\n" - { - s->pos = cursor; s->line++; - goto std; - } - - any - { - add_error(s, "Unexpected character"); - goto std; - } -*/ -} - -/*!max:re2c */ - -timelib_time* timelib_strtotime(char *s, int len, struct timelib_error_container **errors, const timelib_tzdb *tzdb) -{ - Scanner in; - int t; - char *e = s + len - 1; - - memset(&in, 0, sizeof(in)); - in.errors = malloc(sizeof(struct timelib_error_container)); - in.errors->warning_count = 0; - in.errors->warning_messages = NULL; - in.errors->error_count = 0; - in.errors->error_messages = NULL; - - if (len > 0) { - while (isspace(*s) && s < e) { - s++; - } - while (isspace(*e) && e > s) { - e--; - } - } - if (e - s < 1) { - in.time = timelib_time_ctor(); - add_error(&in, "Empty string"); - if (errors) { - *errors = in.errors; - } else { - timelib_error_container_dtor(in.errors); - } - in.time->y = in.time->d = in.time->m = in.time->h = in.time->i = in.time->s = in.time->f = in.time->z = in.time->dst = -1; - in.time->is_localtime = in.time->zone_type = 0; - return in.time; - } - e++; - - in.str = malloc((e - s) + YYMAXFILL); - memset(in.str, 0, (e - s) + YYMAXFILL); - memcpy(in.str, s, (e - s)); - in.lim = in.str + (e - s) + YYMAXFILL; - in.cur = in.str; - in.time = timelib_time_ctor(); - in.time->y = -1; - in.time->d = -1; - in.time->m = -1; - in.time->h = -1; - in.time->i = -1; - in.time->s = -1; - in.time->f = -1; - in.time->z = -1; - in.time->dst = -1; - in.tzdb = tzdb; - in.time->is_localtime = 0; - in.time->zone_type = 0; - - do { - t = scan(&in); -#ifdef DEBUG_PARSER - printf("%d\n", t); -#endif - } while(t != EOI); - - free(in.str); - if (errors) { - *errors = in.errors; - } else { - timelib_error_container_dtor(in.errors); - } - return in.time; -} - -void timelib_fill_holes(timelib_time *parsed, timelib_time *now, int options) -{ - if (!(options && TIMELIB_OVERRIDE_TIME) && parsed->have_date && !parsed->have_time) { - parsed->h = 0; - parsed->i = 0; - parsed->s = 0; - parsed->f = 0; - } - if (parsed->y == -1) parsed->y = now->y != -1 ? now->y : 0; - if (parsed->d == -1) parsed->d = now->d != -1 ? now->d : 0; - if (parsed->m == -1) parsed->m = now->m != -1 ? now->m : 0; - if (parsed->h == -1) parsed->h = now->h != -1 ? now->h : 0; - if (parsed->i == -1) parsed->i = now->i != -1 ? now->i : 0; - if (parsed->s == -1) parsed->s = now->s != -1 ? now->s : 0; - if (parsed->f == -1) parsed->f = now->f != -1 ? now->f : 0; - if (parsed->z == -1) parsed->z = now->z != -1 ? now->z : 0; - if (parsed->dst == -1) parsed->dst = now->dst != -1 ? now->dst : 0; - - if (!parsed->tz_abbr) { - parsed->tz_abbr = now->tz_abbr ? strdup(now->tz_abbr) : NULL; - } - if (!parsed->tz_info) { - parsed->tz_info = now->tz_info ? timelib_tzinfo_clone(now->tz_info) : NULL; - } - if (parsed->zone_type == 0 && now->zone_type != 0) { - parsed->zone_type = now->zone_type; -/* parsed->tz_abbr = now->tz_abbr ? strdup(now->tz_abbr) : NULL; - parsed->tz_info = now->tz_info ? timelib_tzinfo_clone(now->tz_info) : NULL; -*/ parsed->is_localtime = 1; - } -/* timelib_dump_date(parsed, 2); - timelib_dump_date(now, 2); -*/ -} - -char *timelib_timezone_id_from_abbr(const char *abbr, long gmtoffset, int isdst) -{ - const timelib_tz_lookup_table *tp; - - tp = zone_search(abbr, gmtoffset, isdst); - if (tp) { - return (tp->full_tz_name); - } else { - return NULL; - } -} - -const timelib_tz_lookup_table *timelib_timezone_abbreviations_list(void) -{ - return timelib_timezone_lookup; -} - -#ifdef DEBUG_PARSER_STUB -int main(void) -{ - timelib_time time = timelib_strtotime("May 12"); - - printf ("%04d-%02d-%02d %02d:%02d:%02d.%-5d %+04d %1d", - time.y, time.m, time.d, time.h, time.i, time.s, time.f, time.z, time.dst); - if (time.have_relative) { - printf ("%3dY %3dM %3dD / %3dH %3dM %3dS", - time.relative.y, time.relative.m, time.relative.d, time.relative.h, time.relative.i, time.relative.s); - } - if (time.have_weekday_relative) { - printf (" / %d", time.relative.weekday); - } - if (time.have_weeknr_day) { - printf(" / %dW%d", time.relative.weeknr_day.weeknr, time.relative.weeknr_day.dayofweek); - } - return 0; -} -#endif - -/* - * vim: syntax=c - */ diff --git a/ext/date/lib/parse_tz.c b/ext/date/lib/parse_tz.c deleted file mode 100644 index 31e42dec84656..0000000000000 --- a/ext/date/lib/parse_tz.c +++ /dev/null @@ -1,374 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Derick Rethans | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#include "timelib.h" - -#include - -#ifdef HAVE_STRING_H -#include -#else -#include -#endif -#include "timezonedb.h" - -#ifdef WORDS_BIGENDIAN -#define timelib_conv_int(l) (l) -#else -#define timelib_conv_int(l) ((l & 0x000000ff) << 24) + ((l & 0x0000ff00) << 8) + ((l & 0x00ff0000) >> 8) + ((l & 0xff000000) >> 24) -#endif - -static void read_header(char **tzf, timelib_tzinfo *tz) -{ - uint32_t buffer[6]; - - memcpy(&buffer, *tzf, sizeof(buffer)); - tz->ttisgmtcnt = timelib_conv_int(buffer[0]); - tz->ttisstdcnt = timelib_conv_int(buffer[1]); - tz->leapcnt = timelib_conv_int(buffer[2]); - tz->timecnt = timelib_conv_int(buffer[3]); - tz->typecnt = timelib_conv_int(buffer[4]); - tz->charcnt = timelib_conv_int(buffer[5]); - *tzf += sizeof(buffer); -} - -static void read_transistions(char **tzf, timelib_tzinfo *tz) -{ - int32_t *buffer = NULL; - uint32_t i; - unsigned char *cbuffer = NULL; - - if (tz->timecnt) { - buffer = (int32_t*) malloc(tz->timecnt * sizeof(int32_t)); - if (!buffer) { - return; - } - memcpy(buffer, *tzf, sizeof(int32_t) * tz->timecnt); - *tzf += (sizeof(int32_t) * tz->timecnt); - for (i = 0; i < tz->timecnt; i++) { - buffer[i] = timelib_conv_int(buffer[i]); - } - - cbuffer = (unsigned char*) malloc(tz->timecnt * sizeof(unsigned char)); - if (!cbuffer) { - return; - } - memcpy(cbuffer, *tzf, sizeof(unsigned char) * tz->timecnt); - *tzf += sizeof(unsigned char) * tz->timecnt; - } - - tz->trans = buffer; - tz->trans_idx = cbuffer; -} - -static void read_types(char **tzf, timelib_tzinfo *tz) -{ - unsigned char *buffer; - int32_t *leap_buffer; - unsigned int i, j; - - buffer = (unsigned char*) malloc(tz->typecnt * sizeof(unsigned char) * 6); - if (!buffer) { - return; - } - memcpy(buffer, *tzf, sizeof(unsigned char) * 6 * tz->typecnt); - *tzf += sizeof(unsigned char) * 6 * tz->typecnt; - - tz->type = (ttinfo*) malloc(tz->typecnt * sizeof(struct ttinfo)); - if (!tz->type) { - return; - } - - for (i = 0; i < tz->typecnt; i++) { - j = i * 6; - tz->type[i].offset = (buffer[j] * 16777216) + (buffer[j + 1] * 65536) + (buffer[j + 2] * 256) + buffer[j + 3]; - tz->type[i].isdst = buffer[j + 4]; - tz->type[i].abbr_idx = buffer[j + 5]; - } - free(buffer); - - tz->timezone_abbr = (char*) malloc(tz->charcnt); - if (!tz->timezone_abbr) { - return; - } - memcpy(tz->timezone_abbr, *tzf, sizeof(char) * tz->charcnt); - *tzf += sizeof(char) * tz->charcnt; - - leap_buffer = (int32_t *) malloc(tz->leapcnt * 2 * sizeof(int32_t)); - if (!leap_buffer) { - return; - } - memcpy(leap_buffer, *tzf, sizeof(int32_t) * tz->leapcnt * 2); - *tzf += sizeof(int32_t) * tz->leapcnt * 2; - - tz->leap_times = (tlinfo*) malloc(tz->leapcnt * sizeof(tlinfo)); - if (!tz->leap_times) { - return; - } - for (i = 0; i < tz->leapcnt; i++) { - tz->leap_times[i].trans = timelib_conv_int(leap_buffer[i * 2]); - tz->leap_times[i].offset = timelib_conv_int(leap_buffer[i * 2 + 1]); - } - free(leap_buffer); - - buffer = (unsigned char*) malloc(tz->ttisstdcnt * sizeof(unsigned char)); - if (!buffer) { - return; - } - memcpy(buffer, *tzf, sizeof(unsigned char) * tz->ttisstdcnt); - *tzf += sizeof(unsigned char) * tz->ttisstdcnt; - - for (i = 0; i < tz->ttisstdcnt; i++) { - tz->type[i].isstdcnt = buffer[i]; - } - free(buffer); - - buffer = (unsigned char*) malloc(tz->ttisgmtcnt * sizeof(unsigned char)); - if (!buffer) { - return; - } - memcpy(buffer, *tzf, sizeof(unsigned char) * tz->ttisgmtcnt); - *tzf += sizeof(unsigned char) * tz->ttisgmtcnt; - - for (i = 0; i < tz->ttisgmtcnt; i++) { - tz->type[i].isgmtcnt = buffer[i]; - } - free(buffer); -} - -void timelib_dump_tzinfo(timelib_tzinfo *tz) -{ - uint32_t i; - - printf("UTC/Local count: %lu\n", (unsigned long) tz->ttisgmtcnt); - printf("Std/Wall count: %lu\n", (unsigned long) tz->ttisstdcnt); - printf("Leap.sec. count: %lu\n", (unsigned long) tz->leapcnt); - printf("Trans. count: %lu\n", (unsigned long) tz->timecnt); - printf("Local types count: %lu\n", (unsigned long) tz->typecnt); - printf("Zone Abbr. count: %lu\n", (unsigned long) tz->charcnt); - - printf ("%8s (%12s) = %3d [%5ld %1d %3d '%s' (%d,%d)]\n", - "", "", 0, - (long int) tz->type[0].offset, - tz->type[0].isdst, - tz->type[0].abbr_idx, - &tz->timezone_abbr[tz->type[0].abbr_idx], - tz->type[0].isstdcnt, - tz->type[0].isgmtcnt - ); - for (i = 0; i < tz->timecnt; i++) { - printf ("%08X (%12d) = %3d [%5ld %1d %3d '%s' (%d,%d)]\n", - tz->trans[i], tz->trans[i], tz->trans_idx[i], - (long int) tz->type[tz->trans_idx[i]].offset, - tz->type[tz->trans_idx[i]].isdst, - tz->type[tz->trans_idx[i]].abbr_idx, - &tz->timezone_abbr[tz->type[tz->trans_idx[i]].abbr_idx], - tz->type[tz->trans_idx[i]].isstdcnt, - tz->type[tz->trans_idx[i]].isgmtcnt - ); - } - for (i = 0; i < tz->leapcnt; i++) { - printf ("%08X (%12ld) = %d\n", - tz->leap_times[i].trans, - (long) tz->leap_times[i].trans, - tz->leap_times[i].offset); - } -} - -static int seek_to_tz_position(const unsigned char **tzf, char *timezone, const timelib_tzdb *tzdb) -{ - int left = 0, right = tzdb->index_size - 1; - - do { - int mid = ((unsigned)left + right) >> 1; - int cmp = strcasecmp(timezone, tzdb->index[mid].id); - - if (cmp < 0) { - right = mid - 1; - } else if (cmp > 0) { - left = mid + 1; - } else { /* (cmp == 0) */ - (*tzf) = &(tzdb->data[tzdb->index[mid].pos + 20]); - return 1; - } - - } while (left <= right); - - return 0; -} - -const timelib_tzdb *timelib_builtin_db(void) -{ - return &timezonedb_builtin; -} - -const timelib_tzdb_index_entry *timelib_timezone_builtin_identifiers_list(int *count) -{ - *count = sizeof(timezonedb_idx_builtin) / sizeof(*timezonedb_idx_builtin); - return timezonedb_idx_builtin; -} - -int timelib_timezone_id_is_valid(char *timezone, const timelib_tzdb *tzdb) -{ - const unsigned char *tzf; - return (seek_to_tz_position(&tzf, timezone, tzdb)); -} - -timelib_tzinfo *timelib_parse_tzfile(char *timezone, const timelib_tzdb *tzdb) -{ - const unsigned char *tzf; - timelib_tzinfo *tmp; - - if (seek_to_tz_position(&tzf, timezone, tzdb)) { - tmp = timelib_tzinfo_ctor(timezone); - - read_header((char**) &tzf, tmp); - read_transistions((char**) &tzf, tmp); - read_types((char**) &tzf, tmp); - } else { - tmp = NULL; - } - - return tmp; -} - -static ttinfo* fetch_timezone_offset(timelib_tzinfo *tz, timelib_sll ts, timelib_sll *transition_time) -{ - uint32_t i; - - /* If there is no transistion time, we pick the first one, if that doesn't - * exist we return NULL */ - if (!tz->timecnt || !tz->trans) { - *transition_time = 0; - if (tz->typecnt == 1) { - return &(tz->type[0]); - } - return NULL; - } - - /* If the TS is lower than the first transistion time, then we scan over - * all the transistion times to find the first non-DST one, or the first - * one in case there are only DST entries. Not sure which smartass came up - * with this idea in the first though :) */ - if (ts < tz->trans[0]) { - uint32_t j; - - *transition_time = 0; - j = 0; - while (j < tz->timecnt && tz->type[j].isdst) { - ++j; - } - if (j == tz->timecnt) { - j = 0; - } - return &(tz->type[j]); - } - - /* In all other cases we loop through the available transtion times to find - * the correct entry */ - for (i = 0; i < tz->timecnt; i++) { - if (ts < tz->trans[i]) { - *transition_time = tz->trans[i - 1]; - return &(tz->type[tz->trans_idx[i - 1]]); - } - } - *transition_time = tz->trans[tz->timecnt - 1]; - return &(tz->type[tz->trans_idx[tz->timecnt - 1]]); -} - -static tlinfo* fetch_leaptime_offset(timelib_tzinfo *tz, timelib_sll ts) -{ - int i; - - if (!tz->leapcnt || !tz->leap_times) { - return NULL; - } - - for (i = tz->leapcnt - 1; i > 0; i--) { - if (ts > tz->leap_times[i].trans) { - return &(tz->leap_times[i]); - } - } - return NULL; -} - -int timelib_timestamp_is_in_dst(timelib_sll ts, timelib_tzinfo *tz) -{ - ttinfo *to; - timelib_sll dummy; - - if ((to = fetch_timezone_offset(tz, ts, &dummy))) { - return to->isdst; - } - return -1; -} - -timelib_time_offset *timelib_get_time_zone_info(timelib_sll ts, timelib_tzinfo *tz) -{ - ttinfo *to; - tlinfo *tl; - int32_t offset = 0, leap_secs = 0; - char *abbr; - timelib_time_offset *tmp = timelib_time_offset_ctor(); - timelib_sll transistion_time; - - if ((to = fetch_timezone_offset(tz, ts, &transistion_time))) { - offset = to->offset; - abbr = &(tz->timezone_abbr[to->abbr_idx]); - tmp->is_dst = to->isdst; - tmp->transistion_time = transistion_time; - } else { - offset = 0; - abbr = tz->timezone_abbr; - tmp->is_dst = 0; - tmp->transistion_time = 0; - } - - if ((tl = fetch_leaptime_offset(tz, ts))) { - leap_secs = -tl->offset; - } - - tmp->offset = offset; - tmp->leap_secs = leap_secs; - tmp->abbr = abbr ? strdup(abbr) : strdup("GMT"); - - return tmp; -} - -timelib_sll timelib_get_current_offset(timelib_time *t) -{ - timelib_time_offset *gmt_offset; - timelib_sll retval; - - switch (t->zone_type) { - case TIMELIB_ZONETYPE_ABBR: - case TIMELIB_ZONETYPE_OFFSET: - return t->z * 60; - - case TIMELIB_ZONETYPE_ID: - gmt_offset = timelib_get_time_zone_info(t->sse, t->tz_info); - retval = gmt_offset->offset; - timelib_time_offset_dtor(gmt_offset); - return retval; - - default: - return 0; - } -} diff --git a/ext/date/lib/timelib.c b/ext/date/lib/timelib.c deleted file mode 100644 index f926d97a3a298..0000000000000 --- a/ext/date/lib/timelib.c +++ /dev/null @@ -1,218 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Derick Rethans | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#include "timelib.h" -#include -#include - -#define TIMELIB_TIME_FREE(m) \ - if (m) { \ - free(m); \ - m = NULL; \ - } \ - -timelib_time* timelib_time_ctor() -{ - timelib_time *t; - t = calloc(1, sizeof(timelib_time)); - - return t; -} - -void timelib_time_tz_abbr_update(timelib_time* tm, char* tz_abbr) -{ - unsigned int i; - - TIMELIB_TIME_FREE(tm->tz_abbr); - tm->tz_abbr = strdup(tz_abbr); - for (i = 0; i < strlen(tz_abbr); i++) { - tm->tz_abbr[i] = toupper(tz_abbr[i]); - } -} - -void timelib_time_dtor(timelib_time* t) -{ - TIMELIB_TIME_FREE(t->tz_abbr); - TIMELIB_TIME_FREE(t); -} - -timelib_time_offset* timelib_time_offset_ctor() -{ - timelib_time_offset *t; - t = calloc(1, sizeof(timelib_time_offset)); - - return t; -} - -void timelib_time_offset_dtor(timelib_time_offset* t) -{ - TIMELIB_TIME_FREE(t->abbr); - TIMELIB_TIME_FREE(t); -} - -timelib_tzinfo* timelib_tzinfo_ctor(char *name) -{ - timelib_tzinfo *t; - t = calloc(1, sizeof(timelib_tzinfo)); - t->name = strdup(name); - - return t; -} - -timelib_tzinfo *timelib_tzinfo_clone(timelib_tzinfo *tz) -{ - timelib_tzinfo *tmp = timelib_tzinfo_ctor(tz->name); - tmp->ttisgmtcnt = tz->ttisgmtcnt; - tmp->ttisstdcnt = tz->ttisstdcnt; - tmp->leapcnt = tz->leapcnt; - tmp->timecnt = tz->timecnt; - tmp->typecnt = tz->typecnt; - tmp->charcnt = tz->charcnt; - - tmp->trans = (int32_t *) malloc(tz->timecnt * sizeof(int32_t)); - tmp->trans_idx = (unsigned char*) malloc(tz->timecnt * sizeof(unsigned char)); - memcpy(tmp->trans, tz->trans, tz->timecnt * sizeof(int32_t)); - memcpy(tmp->trans_idx, tz->trans_idx, tz->timecnt * sizeof(unsigned char)); - - tmp->type = (ttinfo*) malloc(tz->typecnt * sizeof(struct ttinfo)); - memcpy(tmp->type, tz->type, tz->typecnt * sizeof(struct ttinfo)); - - tmp->timezone_abbr = (char*) malloc(tz->charcnt); - memcpy(tmp->timezone_abbr, tz->timezone_abbr, tz->charcnt); - - tmp->leap_times = (tlinfo*) malloc(tz->leapcnt * sizeof(tlinfo)); - memcpy(tmp->leap_times, tz->leap_times, tz->leapcnt * sizeof(tlinfo)); - - return tmp; -} - -void timelib_tzinfo_dtor(timelib_tzinfo *tz) -{ - TIMELIB_TIME_FREE(tz->name); - TIMELIB_TIME_FREE(tz->trans); - TIMELIB_TIME_FREE(tz->trans_idx); - TIMELIB_TIME_FREE(tz->type); - TIMELIB_TIME_FREE(tz->timezone_abbr); - TIMELIB_TIME_FREE(tz->leap_times); - TIMELIB_TIME_FREE(tz); -} - -char *timelib_get_tz_abbr_ptr(timelib_time *t) -{ - if (!t->sse_uptodate) { - timelib_update_ts(t, NULL); - }; - return t->tz_abbr; -} - -void timelib_error_container_dtor(timelib_error_container *errors) -{ - int i; - - for (i = 0; i < errors->warning_count; i++) { - free(errors->warning_messages[i].message); - } - free(errors->warning_messages); - for (i = 0; i < errors->error_count; i++) { - free(errors->error_messages[i].message); - } - free(errors->error_messages); - free(errors); -} - -signed long timelib_date_to_int(timelib_time *d, int *error) -{ - timelib_sll ts; - - ts = d->sse; - - if (ts < LONG_MIN || ts > LONG_MAX) { - if (error) { - *error = 1; - } - return 0; - } - if (error) { - *error = 0; - } - return (signed long) d->sse; -} - -void timelib_decimal_hour_to_hms(double h, int *hour, int *min, int *sec) -{ - *hour = floor(h); - *min = floor((h - *hour) * 60); - *sec = (h - *hour - ((float) *min / 60)) * 3600; -} - -void timelib_dump_date(timelib_time *d, int options) -{ - if ((options & 2) == 2) { - printf("TYPE: %d ", d->zone_type); - } - printf("TS: %lld | %04lld-%02lld-%02lld %02lld:%02lld:%02lld", - d->sse, d->y, d->m, d->d, d->h, d->i, d->s); - if (d->f > +0.0) { - printf(" %.5f", d->f); - } - - if (d->is_localtime) { - switch (d->zone_type) { - case TIMELIB_ZONETYPE_OFFSET: /* Only offset */ - printf(" GMT %05d%s", d->z, d->dst == 1 ? " (DST)" : ""); - break; - case TIMELIB_ZONETYPE_ID: /* Timezone struct */ - /* Show abbreviation if wanted */ - if (d->tz_abbr) { - printf(" %s", d->tz_abbr); - } - /* Do we have a TimeZone struct? */ - if (d->tz_info) { - printf(" %s", d->tz_info->name); - } - break; - case TIMELIB_ZONETYPE_ABBR: - printf(" %s", d->tz_abbr); - printf(" %05d%s", d->z, d->dst == 1 ? " (DST)" : ""); - break; - } - } else { - printf(" GMT 00000"); - } - - if ((options & 1) == 1) { - if (d->have_relative) { - printf("%3lldY %3lldM %3lldD / %3lldH %3lldM %3lldS", - d->relative.y, d->relative.m, d->relative.d, d->relative.h, d->relative.i, d->relative.s); - } - if (d->have_weekday_relative) { - printf(" / %d.%d", d->relative.weekday, d->relative.weekday_behavior); - } - if (d->have_special_relative) { - switch (d->special.type) { - case TIMELIB_SPECIAL_WEEKDAY: - printf(" / %lld weekday", d->special.amount); - break; - } - } - } - printf("\n"); -} - diff --git a/ext/date/lib/timelib.h b/ext/date/lib/timelib.h deleted file mode 100644 index 5091ca21df24c..0000000000000 --- a/ext/date/lib/timelib.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Derick Rethans | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifndef __TIMELIB_H__ -#define __TIMELIB_H__ - -#include "timelib_structs.h" - -#define TIMELIB_NONE 0x00 -#define TIMELIB_OVERRIDE_TIME 0x01 - -#define TIMELIB_SPECIAL_WEEKDAY 0x01 - -#ifndef LONG_MAX -#define LONG_MAX 2147483647L -#endif - -#ifndef LONG_MIN -#define LONG_MIN (- LONG_MAX - 1) -#endif - -#if defined(_MSC_VER) && !defined(strcasecmp) -#define strcasecmp stricmp -#endif - -#if defined(_MSC_VER) && !defined(strncasecmp) -#define strncasecmp strnicmp -#endif - -/* From dow.c */ -timelib_sll timelib_day_of_week(timelib_sll y, timelib_sll m, timelib_sll d); -timelib_sll timelib_iso_day_of_week(timelib_sll y, timelib_sll m, timelib_sll d); -timelib_sll timelib_day_of_year(timelib_sll y, timelib_sll m, timelib_sll d); -timelib_sll timelib_daynr_from_weeknr(timelib_sll y, timelib_sll w, timelib_sll d); -timelib_sll timelib_days_in_month(timelib_sll y, timelib_sll m); -void timelib_isoweek_from_date(timelib_sll y, timelib_sll m, timelib_sll d, timelib_sll *iw, timelib_sll *iy); - -/* From parse_date.re */ -timelib_time *timelib_strtotime(char *s, int len, timelib_error_container **errors, const timelib_tzdb *tzdb); -void timelib_fill_holes(timelib_time *parsed, timelib_time *now, int options); -char *timelib_timezone_id_from_abbr(const char *abbr, long gmtoffset, int isdst); -const timelib_tz_lookup_table *timelib_timezone_abbreviations_list(void); - -/* From tm2unixtime.c */ -void timelib_update_ts(timelib_time* time, timelib_tzinfo* tzi); - -/* From unixtime2tm.c */ -int timelib_apply_localtime(timelib_time *t, unsigned int localtime); -void timelib_unixtime2gmt(timelib_time* tm, timelib_sll ts); -void timelib_unixtime2local(timelib_time *tm, timelib_sll ts); -void timelib_update_from_sse(timelib_time *tm); -void timelib_set_timezone(timelib_time *t, timelib_tzinfo *tz); - -/* From parse_tz.c */ -int timelib_timezone_id_is_valid(char *timezone, const timelib_tzdb *tzdb); -timelib_tzinfo *timelib_parse_tzfile(char *timezone, const timelib_tzdb *tzdb); -int timelib_timestamp_is_in_dst(timelib_sll ts, timelib_tzinfo *tz); -timelib_time_offset *timelib_get_time_zone_info(timelib_sll ts, timelib_tzinfo *tz); -timelib_sll timelib_get_current_offset(timelib_time *t); -void timelib_dump_tzinfo(timelib_tzinfo *tz); -const timelib_tzdb *timelib_builtin_db(void); -const timelib_tzdb_index_entry *timelib_timezone_builtin_identifiers_list(int *count); - -/* From timelib.c */ -timelib_tzinfo* timelib_tzinfo_ctor(); -void timelib_time_tz_abbr_update(timelib_time* tm, char* tz_abbr); -void timelib_time_tz_name_update(timelib_time* tm, char* tz_name); -void timelib_tzinfo_dtor(timelib_tzinfo *tz); -timelib_tzinfo* timelib_tzinfo_clone(timelib_tzinfo *tz); - -timelib_time* timelib_time_ctor(); -void timelib_time_set_option(timelib_time* tm, int option, void* option_value); -void timelib_time_dtor(timelib_time* t); - -timelib_time_offset* timelib_time_offset_ctor(); -void timelib_time_offset_dtor(timelib_time_offset* t); - -void timelib_error_container_dtor(timelib_error_container *errors); - -signed long timelib_date_to_int(timelib_time *d, int *error); -void timelib_dump_date(timelib_time *d, int options); - -void timelib_decimal_hour_to_hms(double h, int *hour, int *min, int *sec); - -/* from astro.c */ -double timelib_ts_to_juliandate(timelib_sll ts); -int timelib_astro_rise_set_altitude(timelib_time *time, double lon, double lat, double altit, int upper_limb, double *h_rise, double *h_set, timelib_sll *ts_rise, timelib_sll *ts_set, timelib_sll *ts_transit); - -#endif diff --git a/ext/date/lib/timelib.m4 b/ext/date/lib/timelib.m4 deleted file mode 100644 index c7255727f24e6..0000000000000 --- a/ext/date/lib/timelib.m4 +++ /dev/null @@ -1,80 +0,0 @@ -dnl -dnl $Id$ -dnl -dnl -dnl TL_DEF_HAVE(what [, why]) -dnl -dnl Generates 'AC_DEFINE(HAVE_WHAT, 1, [WHY])' -dnl -AC_DEFUN([TL_DEF_HAVE],[AC_DEFINE([HAVE_]translit($1,a-z_.-,A-Z___),1,[ $2 ])])dnl - -dnl -dnl TL_CHECK_INT_TYPE(type) -dnl -AC_DEFUN([TL_CHECK_INT_TYPE],[ -AC_CACHE_CHECK([for $1], ac_cv_int_type_$1, [ -AC_TRY_COMPILE([ -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_INTTYPES_H -# include -#elif HAVE_STDINT_H -# include -#endif], -[if (($1 *) 0) - return 0; -if (sizeof ($1)) - return 0; -], [ac_cv_int_type_$1=yes], [ac_cv_int_type_$1=no]) -]) -if test "$ac_cv_int_type_$1" = "yes"; then - TL_DEF_HAVE($1, [Define if $1 type is present.]) -fi -])dnl - -dnl -dnl AC_TIMELIB_C_BIGENDIAN -dnl Replacement macro for AC_C_BIGENDIAN -dnl -AC_DEFUN([AC_TIMELIB_C_BIGENDIAN], -[AC_CACHE_CHECK([whether byte ordering is bigendian], ac_cv_c_bigendian_php, - [ - ac_cv_c_bigendian_php=unknown - AC_TRY_RUN( - [ -int main(void) -{ - short one = 1; - char *cp = (char *)&one; - - if (*cp == 0) { - return(0); - } else { - return(1); - } -} - ], [ac_cv_c_bigendian_php=yes], [ac_cv_c_bigendian_php=no], [ac_cv_c_bigendian_php=unknown]) - ]) - if test $ac_cv_c_bigendian_php = yes; then - AC_DEFINE(WORDS_BIGENDIAN, [], [Define if processor uses big-endian word]) - fi -])dnl - -dnl Check for types, sizes, etc. needed by timelib -AC_CHECK_SIZEOF(long, 8) -AC_CHECK_SIZEOF(int, 4) -TL_CHECK_INT_TYPE(int32_t) -TL_CHECK_INT_TYPE(uint32_t) - -dnl Check for headers needed by timelib -AC_CHECK_HEADERS([ \ -sys/types.h \ -inttypes.h \ -stdint.h \ -string.h \ -stdlib.h -]) - -dnl Check for strtoll, atoll -AC_CHECK_FUNCS(strtoll atoll strftime) diff --git a/ext/date/lib/timelib_structs.h b/ext/date/lib/timelib_structs.h deleted file mode 100644 index d009535099650..0000000000000 --- a/ext/date/lib/timelib_structs.h +++ /dev/null @@ -1,208 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Derick Rethans | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifndef __TIMELIB_STRUCTS_H__ -#define __TIMELIB_STRUCTS_H__ - -#include - -#ifdef HAVE_SYS_TYPES_H -#include -#endif - -#if defined(HAVE_INTTYPES_H) -#include -#elif defined(HAVE_STDINT_H) -#include -#endif - -#ifndef HAVE_INT32_T -# if SIZEOF_INT == 4 -typedef int int32_t; -# elif SIZEOF_LONG == 4 -typedef long int int32_t; -# endif -#endif - -#ifndef HAVE_UINT32_T -# if SIZEOF_INT == 4 -typedef unsigned int uint32_t; -# elif SIZEOF_LONG == 4 -typedef unsigned long int uint32_t; -# endif -#endif - -#include - -#ifdef HAVE_STDLIB_H -#include -#endif - -#ifdef HAVE_STRING_H -#include -#else -#include -#endif - -#if defined(_MSC_VER) -typedef unsigned __int64 timelib_ull; -typedef __int64 timelib_sll; -#else -typedef unsigned long long timelib_ull; -typedef signed long long timelib_sll; -#endif - -#if defined(_MSC_VER) -#define int32_t __int32 -#define uint32_t unsigned __int32 -#endif - -#if defined(_MSC_VER) -#define TIMELIB_LL_CONST(n) n ## i64 -#else -#define TIMELIB_LL_CONST(n) n ## ll -#endif - - -typedef struct ttinfo -{ - int32_t offset; - int isdst; - unsigned int abbr_idx; - - unsigned int isstdcnt; - unsigned int isgmtcnt; -} ttinfo; - -typedef struct tlinfo -{ - int32_t trans; - int32_t offset; -} tlinfo; - -typedef struct timelib_tzinfo -{ - char *name; - uint32_t ttisgmtcnt; - uint32_t ttisstdcnt; - uint32_t leapcnt; - uint32_t timecnt; - uint32_t typecnt; - uint32_t charcnt; - - int32_t *trans; - unsigned char *trans_idx; - - ttinfo *type; - char *timezone_abbr; - - tlinfo *leap_times; -} timelib_tzinfo; - -typedef struct timelib_rel_time { - timelib_sll y, m, d; /* Years, Months and Days */ - timelib_sll h, i, s; /* Hours, mInutes and Seconds */ - - int weekday; /* Stores the day in 'next monday' */ - int weekday_behavior; /* 0: the current day should *not* be counted when advancing forwards; 1: the current day *should* be counted */ -} timelib_rel_time; - -typedef struct timelib_time_offset { - int32_t offset; - unsigned int leap_secs; - unsigned int is_dst; - char *abbr; - timelib_sll transistion_time; -} timelib_time_offset; - -typedef struct timelib_special { - unsigned int type; - timelib_sll amount; -} timelib_special; - -typedef struct timelib_time { - timelib_sll y, m, d; /* Year, Month, Day */ - timelib_sll h, i, s; /* Hour, mInute, Second */ - double f; /* Fraction */ - int z; /* GMT offset in minutes */ - char *tz_abbr; /* Timezone abbreviation (display only) */ - timelib_tzinfo *tz_info; /* Timezone structure */ - signed int dst; /* Flag if we were parsing a DST zone */ - timelib_rel_time relative; - timelib_special special; - - timelib_sll sse; /* Seconds since epoch */ - - unsigned int have_time, have_date, have_zone, have_relative, have_weekday_relative, have_special_relative, have_weeknr_day; - - unsigned int sse_uptodate; /* !0 if the sse member is up to date with the date/time members */ - unsigned int tim_uptodate; /* !0 if the date/time members are up to date with the sse member */ - unsigned int is_localtime; /* 1 if the current struct represents localtime, 0 if it is in GMT */ - unsigned int zone_type; /* 1 time offset, - * 3 TimeZone identifier, - * 2 TimeZone abbreviation */ -} timelib_time; - -typedef struct timelib_error_message { - int position; - char character; - char *message; -} timelib_error_message; - -typedef struct timelib_error_container { - int warning_count; - struct timelib_error_message *warning_messages; - int error_count; - struct timelib_error_message *error_messages; -} timelib_error_container; - -typedef struct _timelib_tz_lookup_table { - char *name; - int type; - int gmtoffset; - char *full_tz_name; -} timelib_tz_lookup_table; - -typedef struct _timelib_tzdb_index_entry { - char *id; - unsigned int pos; -} timelib_tzdb_index_entry; - -typedef struct _timelib_tzdb { - char *version; - int index_size; - const timelib_tzdb_index_entry *index; - const unsigned char *data; -} timelib_tzdb; - -#define TIMELIB_ZONETYPE_OFFSET 1 -#define TIMELIB_ZONETYPE_ABBR 2 -#define TIMELIB_ZONETYPE_ID 3 - -#define SECS_PER_ERA TIMELIB_LL_CONST(12622780800) -#define SECS_PER_DAY 86400 -#define DAYS_PER_YEAR 365 -#define DAYS_PER_LYEAR 366 - -#define timelib_is_leap(y) ((y) % 4 == 0 && ((y) % 100 != 0 || (y) % 400 == 0)) - -#define DEBUG(s) if (0) { s } - -#endif diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h deleted file mode 100644 index 4756eeb92d148..0000000000000 --- a/ext/date/lib/timezonedb.h +++ /dev/null @@ -1,17060 +0,0 @@ -const timelib_tzdb_index_entry timezonedb_idx_builtin[550] = { - { "Africa/Abidjan" , 0x000000 }, - { "Africa/Accra" , 0x000049 }, - { "Africa/Addis_Ababa" , 0x0000E5 }, - { "Africa/Algiers" , 0x00012F }, - { "Africa/Asmara" , 0x00024E }, - { "Africa/Asmera" , 0x000298 }, - { "Africa/Bamako" , 0x0002E2 }, - { "Africa/Bangui" , 0x000341 }, - { "Africa/Banjul" , 0x00038A }, - { "Africa/Bissau" , 0x0003F5 }, - { "Africa/Blantyre" , 0x00044F }, - { "Africa/Brazzaville" , 0x000498 }, - { "Africa/Bujumbura" , 0x0004E1 }, - { "Africa/Cairo" , 0x000519 }, - { "Africa/Casablanca" , 0x0008D4 }, - { "Africa/Ceuta" , 0x000990 }, - { "Africa/Conakry" , 0x000C7C }, - { "Africa/Dakar" , 0x000CDB }, - { "Africa/Dar_es_Salaam" , 0x000D35 }, - { "Africa/Djibouti" , 0x000D96 }, - { "Africa/Douala" , 0x000DDF }, - { "Africa/El_Aaiun" , 0x000E28 }, - { "Africa/Freetown" , 0x000E82 }, - { "Africa/Gaborone" , 0x000F85 }, - { "Africa/Harare" , 0x000FD4 }, - { "Africa/Johannesburg" , 0x00101D }, - { "Africa/Kampala" , 0x00107F }, - { "Africa/Khartoum" , 0x0010F2 }, - { "Africa/Kigali" , 0x0011F9 }, - { "Africa/Kinshasa" , 0x001242 }, - { "Africa/Lagos" , 0x00127A }, - { "Africa/Libreville" , 0x0012C3 }, - { "Africa/Lome" , 0x00130C }, - { "Africa/Luanda" , 0x001344 }, - { "Africa/Lubumbashi" , 0x00138D }, - { "Africa/Lusaka" , 0x0013C5 }, - { "Africa/Malabo" , 0x00140E }, - { "Africa/Maputo" , 0x001468 }, - { "Africa/Maseru" , 0x0014B1 }, - { "Africa/Mbabane" , 0x00150D }, - { "Africa/Mogadishu" , 0x001557 }, - { "Africa/Monrovia" , 0x0015A6 }, - { "Africa/Nairobi" , 0x001600 }, - { "Africa/Ndjamena" , 0x001673 }, - { "Africa/Niamey" , 0x0016D3 }, - { "Africa/Nouakchott" , 0x00173A }, - { "Africa/Ouagadougou" , 0x001799 }, - { "Africa/Porto-Novo" , 0x0017E2 }, - { "Africa/Sao_Tome" , 0x00183C }, - { "Africa/Timbuktu" , 0x001885 }, - { "Africa/Tripoli" , 0x0018E4 }, - { "Africa/Tunis" , 0x0019D2 }, - { "Africa/Windhoek" , 0x001BFA }, - { "America/Adak" , 0x001E35 }, - { "America/Anchorage" , 0x00218F }, - { "America/Anguilla" , 0x0024EC }, - { "America/Antigua" , 0x002535 }, - { "America/Araguaina" , 0x00258F }, - { "America/Argentina/Buenos_Aires" , 0x0026D5 }, - { "America/Argentina/Catamarca" , 0x00284E }, - { "America/Argentina/ComodRivadavia" , 0x0029DE }, - { "America/Argentina/Cordoba" , 0x002B6E }, - { "America/Argentina/Jujuy" , 0x002CF4 }, - { "America/Argentina/La_Rioja" , 0x002E88 }, - { "America/Argentina/Mendoza" , 0x00301D }, - { "America/Argentina/Rio_Gallegos" , 0x0031BB }, - { "America/Argentina/San_Juan" , 0x00334B }, - { "America/Argentina/Tucuman" , 0x0034E0 }, - { "America/Argentina/Ushuaia" , 0x003670 }, - { "America/Aruba" , 0x003800 }, - { "America/Asuncion" , 0x00385A }, - { "America/Atikokan" , 0x003B33 }, - { "America/Atka" , 0x003BB9 }, - { "America/Bahia" , 0x003F13 }, - { "America/Barbados" , 0x00408B }, - { "America/Belem" , 0x004119 }, - { "America/Belize" , 0x0041FB }, - { "America/Blanc-Sablon" , 0x00436B }, - { "America/Boa_Vista" , 0x0043E0 }, - { "America/Bogota" , 0x0044D6 }, - { "America/Boise" , 0x004536 }, - { "America/Buenos_Aires" , 0x004898 }, - { "America/Cambridge_Bay" , 0x004A11 }, - { "America/Campo_Grande" , 0x004D14 }, - { "America/Cancun" , 0x004FE5 }, - { "America/Caracas" , 0x005200 }, - { "America/Catamarca" , 0x005256 }, - { "America/Cayenne" , 0x0053E6 }, - { "America/Cayman" , 0x00543C }, - { "America/Chicago" , 0x005485 }, - { "America/Chihuahua" , 0x005984 }, - { "America/Coral_Harbour" , 0x005BAE }, - { "America/Cordoba" , 0x005C34 }, - { "America/Costa_Rica" , 0x005DBA }, - { "America/Cuiaba" , 0x005E38 }, - { "America/Curacao" , 0x0060FF }, - { "America/Danmarkshavn" , 0x006159 }, - { "America/Dawson" , 0x006270 }, - { "America/Dawson_Creek" , 0x006567 }, - { "America/Denver" , 0x0066EC }, - { "America/Detroit" , 0x006A59 }, - { "America/Dominica" , 0x006D84 }, - { "America/Edmonton" , 0x006DCD }, - { "America/Eirunepe" , 0x007137 }, - { "America/El_Salvador" , 0x007223 }, - { "America/Ensenada" , 0x00728C }, - { "America/Fort_Wayne" , 0x0076FD }, - { "America/Fortaleza" , 0x0075E9 }, - { "America/Glace_Bay" , 0x00795B }, - { "America/Godthab" , 0x007C7F }, - { "America/Goose_Bay" , 0x007F29 }, - { "America/Grand_Turk" , 0x0083B1 }, - { "America/Grenada" , 0x008654 }, - { "America/Guadeloupe" , 0x00869D }, - { "America/Guatemala" , 0x0086E6 }, - { "America/Guayaquil" , 0x008763 }, - { "America/Guyana" , 0x0087AC }, - { "America/Halifax" , 0x008821 }, - { "America/Havana" , 0x008CFD }, - { "America/Hermosillo" , 0x009064 }, - { "America/Indiana/Indianapolis" , 0x009117 }, - { "America/Indiana/Knox" , 0x009375 }, - { "America/Indiana/Marengo" , 0x0096DA }, - { "America/Indiana/Petersburg" , 0x00994C }, - { "America/Indiana/Vevay" , 0x009E51 }, - { "America/Indiana/Vincennes" , 0x00A055 }, - { "America/Indiana/Winamac" , 0x00A2BD }, - { "America/Indianapolis" , 0x009BF3 }, - { "America/Inuvik" , 0x00A543 }, - { "America/Iqaluit" , 0x00A83A }, - { "America/Jamaica" , 0x00AB2C }, - { "America/Jujuy" , 0x00ABE5 }, - { "America/Juneau" , 0x00AD79 }, - { "America/Kentucky/Louisville" , 0x00B0CD }, - { "America/Kentucky/Monticello" , 0x00B4B6 }, - { "America/Knox_IN" , 0x00B809 }, - { "America/La_Paz" , 0x00BB6E }, - { "America/Lima" , 0x00BBC9 }, - { "America/Los_Angeles" , 0x00BC65 }, - { "America/Louisville" , 0x00C05E }, - { "America/Maceio" , 0x00C447 }, - { "America/Managua" , 0x00C565 }, - { "America/Manaus" , 0x00C60C }, - { "America/Martinique" , 0x00C6F8 }, - { "America/Mazatlan" , 0x00C758 }, - { "America/Mendoza" , 0x00C991 }, - { "America/Menominee" , 0x00CB2F }, - { "America/Merida" , 0x00CE5D }, - { "America/Mexico_City" , 0x00D06C }, - { "America/Miquelon" , 0x00D2BE }, - { "America/Moncton" , 0x00D524 }, - { "America/Monterrey" , 0x00D992 }, - { "America/Montevideo" , 0x00DB95 }, - { "America/Montreal" , 0x00DE9B }, - { "America/Montserrat" , 0x00E37F }, - { "America/Nassau" , 0x00E3C8 }, - { "America/New_York" , 0x00E701 }, - { "America/Nipigon" , 0x00EBF4 }, - { "America/Nome" , 0x00EEEE }, - { "America/Noronha" , 0x00F247 }, - { "America/North_Dakota/Center" , 0x00F35B }, - { "America/North_Dakota/New_Salem" , 0x00F6B8 }, - { "America/Panama" , 0x00FA15 }, - { "America/Pangnirtung" , 0x00FA5E }, - { "America/Paramaribo" , 0x00FD68 }, - { "America/Phoenix" , 0x00FDEE }, - { "America/Port-au-Prince" , 0x00FE70 }, - { "America/Port_of_Spain" , 0x010198 }, - { "America/Porto_Acre" , 0x0100B6 }, - { "America/Porto_Velho" , 0x0101E1 }, - { "America/Puerto_Rico" , 0x0102C3 }, - { "America/Rainy_River" , 0x010322 }, - { "America/Rankin_Inlet" , 0x01061C }, - { "America/Recife" , 0x010902 }, - { "America/Regina" , 0x010A16 }, - { "America/Rio_Branco" , 0x010B93 }, - { "America/Rosario" , 0x010C75 }, - { "America/Santiago" , 0x010DFB }, - { "America/Santo_Domingo" , 0x01118A }, - { "America/Sao_Paulo" , 0x011244 }, - { "America/Scoresbysund" , 0x011515 }, - { "America/Shiprock" , 0x0117D8 }, - { "America/St_Johns" , 0x011B45 }, - { "America/St_Kitts" , 0x012064 }, - { "America/St_Lucia" , 0x0120AD }, - { "America/St_Thomas" , 0x0120F6 }, - { "America/St_Vincent" , 0x01213F }, - { "America/Swift_Current" , 0x012188 }, - { "America/Tegucigalpa" , 0x01226F }, - { "America/Thule" , 0x012300 }, - { "America/Thunder_Bay" , 0x01252B }, - { "America/Tijuana" , 0x012845 }, - { "America/Toronto" , 0x012BA2 }, - { "America/Tortola" , 0x013086 }, - { "America/Vancouver" , 0x0130CF }, - { "America/Virgin" , 0x0134DC }, - { "America/Whitehorse" , 0x013525 }, - { "America/Winnipeg" , 0x01381C }, - { "America/Yakutat" , 0x013C2A }, - { "America/Yellowknife" , 0x013F66 }, - { "Antarctica/Casey" , 0x014240 }, - { "Antarctica/Davis" , 0x014289 }, - { "Antarctica/DumontDUrville" , 0x0142DD }, - { "Antarctica/Mawson" , 0x01433D }, - { "Antarctica/McMurdo" , 0x014387 }, - { "Antarctica/Palmer" , 0x014661 }, - { "Antarctica/Rothera" , 0x014954 }, - { "Antarctica/South_Pole" , 0x01499E }, - { "Antarctica/Syowa" , 0x014C78 }, - { "Antarctica/Vostok" , 0x014CC2 }, - { "Arctic/Longyearbyen" , 0x014D0C }, - { "Asia/Aden" , 0x015032 }, - { "Asia/Almaty" , 0x01507B }, - { "Asia/Amman" , 0x0151E0 }, - { "Asia/Anadyr" , 0x015494 }, - { "Asia/Aqtau" , 0x015760 }, - { "Asia/Aqtobe" , 0x015922 }, - { "Asia/Ashgabat" , 0x015ABF }, - { "Asia/Ashkhabad" , 0x015BD0 }, - { "Asia/Baghdad" , 0x015CE1 }, - { "Asia/Bahrain" , 0x015F76 }, - { "Asia/Baku" , 0x015FD0 }, - { "Asia/Bangkok" , 0x0162AC }, - { "Asia/Beirut" , 0x0162F5 }, - { "Asia/Bishkek" , 0x0165F6 }, - { "Asia/Brunei" , 0x016796 }, - { "Asia/Calcutta" , 0x0167EC }, - { "Asia/Choibalsan" , 0x016859 }, - { "Asia/Chongqing" , 0x016ADD }, - { "Asia/Chungking" , 0x016B80 }, - { "Asia/Colombo" , 0x016C23 }, - { "Asia/Dacca" , 0x016CB3 }, - { "Asia/Damascus" , 0x016D36 }, - { "Asia/Dhaka" , 0x01707A }, - { "Asia/Dili" , 0x0170FD }, - { "Asia/Dubai" , 0x01717A }, - { "Asia/Dushanbe" , 0x0171C3 }, - { "Asia/Gaza" , 0x0172BA }, - { "Asia/Harbin" , 0x0175F7 }, - { "Asia/Hong_Kong" , 0x0176B1 }, - { "Asia/Hovd" , 0x01785B }, - { "Asia/Irkutsk" , 0x017AD2 }, - { "Asia/Istanbul" , 0x017D96 }, - { "Asia/Jakarta" , 0x018162 }, - { "Asia/Jayapura" , 0x0181F2 }, - { "Asia/Jerusalem" , 0x018251 }, - { "Asia/Kabul" , 0x018574 }, - { "Asia/Kamchatka" , 0x0185B9 }, - { "Asia/Karachi" , 0x01887D }, - { "Asia/Kashgar" , 0x018912 }, - { "Asia/Katmandu" , 0x0189C2 }, - { "Asia/Krasnoyarsk" , 0x018A1C }, - { "Asia/Kuala_Lumpur" , 0x018CE0 }, - { "Asia/Kuching" , 0x018D7E }, - { "Asia/Kuwait" , 0x018E51 }, - { "Asia/Macao" , 0x018E9A }, - { "Asia/Macau" , 0x018FC9 }, - { "Asia/Magadan" , 0x0190F8 }, - { "Asia/Makassar" , 0x0193BC }, - { "Asia/Manila" , 0x01942C }, - { "Asia/Muscat" , 0x0194A5 }, - { "Asia/Nicosia" , 0x0194EE }, - { "Asia/Novosibirsk" , 0x0197CA }, - { "Asia/Omsk" , 0x019A9B }, - { "Asia/Oral" , 0x019D5F }, - { "Asia/Phnom_Penh" , 0x019F14 }, - { "Asia/Pontianak" , 0x019F80 }, - { "Asia/Pyongyang" , 0x01A020 }, - { "Asia/Qatar" , 0x01A081 }, - { "Asia/Qyzylorda" , 0x01A0DB }, - { "Asia/Rangoon" , 0x01A285 }, - { "Asia/Riyadh" , 0x01A2F1 }, - { "Asia/Saigon" , 0x01A33A }, - { "Asia/Sakhalin" , 0x01A3A6 }, - { "Asia/Samarkand" , 0x01A67F }, - { "Asia/Seoul" , 0x01A79A }, - { "Asia/Shanghai" , 0x01A832 }, - { "Asia/Singapore" , 0x01A8D7 }, - { "Asia/Taipei" , 0x01A982 }, - { "Asia/Tashkent" , 0x01AA8E }, - { "Asia/Tbilisi" , 0x01ABA4 }, - { "Asia/Tehran" , 0x01AD52 }, - { "Asia/Tel_Aviv" , 0x01AE88 }, - { "Asia/Thimbu" , 0x01B1AB }, - { "Asia/Thimphu" , 0x01B205 }, - { "Asia/Tokyo" , 0x01B25F }, - { "Asia/Ujung_Pandang" , 0x01B2DC }, - { "Asia/Ulaanbaatar" , 0x01B34C }, - { "Asia/Ulan_Bator" , 0x01B5C3 }, - { "Asia/Urumqi" , 0x01B83A }, - { "Asia/Vientiane" , 0x01B8DD }, - { "Asia/Vladivostok" , 0x01B949 }, - { "Asia/Yakutsk" , 0x01BC14 }, - { "Asia/Yekaterinburg" , 0x01BED8 }, - { "Asia/Yerevan" , 0x01C1C7 }, - { "Atlantic/Azores" , 0x01C4BF }, - { "Atlantic/Bermuda" , 0x01C9B0 }, - { "Atlantic/Canary" , 0x01CC85 }, - { "Atlantic/Cape_Verde" , 0x01CF41 }, - { "Atlantic/Faeroe" , 0x01CFAE }, - { "Atlantic/Faroe" , 0x01D246 }, - { "Atlantic/Jan_Mayen" , 0x01D4DE }, - { "Atlantic/Madeira" , 0x01D804 }, - { "Atlantic/Reykjavik" , 0x01DCF2 }, - { "Atlantic/South_Georgia" , 0x01DE9F }, - { "Atlantic/St_Helena" , 0x01E19F }, - { "Atlantic/Stanley" , 0x01DED7 }, - { "Australia/ACT" , 0x01E1E8 }, - { "Australia/Adelaide" , 0x01E4F9 }, - { "Australia/Brisbane" , 0x01E80A }, - { "Australia/Broken_Hill" , 0x01E8AA }, - { "Australia/Canberra" , 0x01EBC0 }, - { "Australia/Currie" , 0x01EED1 }, - { "Australia/Darwin" , 0x01F1E2 }, - { "Australia/Eucla" , 0x01F24A }, - { "Australia/Hobart" , 0x01F2F5 }, - { "Australia/LHI" , 0x01F62E }, - { "Australia/Lindeman" , 0x01F8BD }, - { "Australia/Lord_Howe" , 0x01F976 }, - { "Australia/Melbourne" , 0x01FC05 }, - { "Australia/North" , 0x01FF16 }, - { "Australia/NSW" , 0x01FF7E }, - { "Australia/Perth" , 0x02028F }, - { "Australia/Queensland" , 0x020339 }, - { "Australia/South" , 0x0203D9 }, - { "Australia/Sydney" , 0x0206EA }, - { "Australia/Tasmania" , 0x0209FB }, - { "Australia/Victoria" , 0x020D34 }, - { "Australia/West" , 0x021045 }, - { "Australia/Yancowinna" , 0x0210EF }, - { "Brazil/Acre" , 0x021405 }, - { "Brazil/DeNoronha" , 0x0214E7 }, - { "Brazil/East" , 0x0215FB }, - { "Brazil/West" , 0x0218CC }, - { "Canada/Atlantic" , 0x0219B8 }, - { "Canada/Central" , 0x021E94 }, - { "Canada/East-Saskatchewan" , 0x022786 }, - { "Canada/Eastern" , 0x0222A2 }, - { "Canada/Mountain" , 0x022903 }, - { "Canada/Newfoundland" , 0x022C6D }, - { "Canada/Pacific" , 0x02318C }, - { "Canada/Saskatchewan" , 0x023599 }, - { "Canada/Yukon" , 0x023716 }, - { "CET" , 0x023A0D }, - { "Chile/Continental" , 0x023D00 }, - { "Chile/EasterIsland" , 0x02408F }, - { "CST6CDT" , 0x0243C5 }, - { "Cuba" , 0x02470A }, - { "EET" , 0x024A71 }, - { "Egypt" , 0x024D18 }, - { "Eire" , 0x0250D3 }, - { "EST" , 0x0255D8 }, - { "EST5EDT" , 0x025610 }, - { "Etc/GMT" , 0x025955 }, - { "Etc/GMT+0" , 0x0259FD }, - { "Etc/GMT+1" , 0x025A6F }, - { "Etc/GMT+10" , 0x025AE4 }, - { "Etc/GMT+11" , 0x025B5A }, - { "Etc/GMT+12" , 0x025BD0 }, - { "Etc/GMT+2" , 0x025CBB }, - { "Etc/GMT+3" , 0x025D2F }, - { "Etc/GMT+4" , 0x025DA3 }, - { "Etc/GMT+5" , 0x025E17 }, - { "Etc/GMT+6" , 0x025E8B }, - { "Etc/GMT+7" , 0x025EFF }, - { "Etc/GMT+8" , 0x025F73 }, - { "Etc/GMT+9" , 0x025FE7 }, - { "Etc/GMT-0" , 0x0259C5 }, - { "Etc/GMT-1" , 0x025A35 }, - { "Etc/GMT-10" , 0x025AA9 }, - { "Etc/GMT-11" , 0x025B1F }, - { "Etc/GMT-12" , 0x025B95 }, - { "Etc/GMT-13" , 0x025C0B }, - { "Etc/GMT-14" , 0x025C46 }, - { "Etc/GMT-2" , 0x025C81 }, - { "Etc/GMT-3" , 0x025CF5 }, - { "Etc/GMT-4" , 0x025D69 }, - { "Etc/GMT-5" , 0x025DDD }, - { "Etc/GMT-6" , 0x025E51 }, - { "Etc/GMT-7" , 0x025EC5 }, - { "Etc/GMT-8" , 0x025F39 }, - { "Etc/GMT-9" , 0x025FAD }, - { "Etc/GMT0" , 0x02598D }, - { "Etc/Greenwich" , 0x026021 }, - { "Etc/UCT" , 0x026059 }, - { "Etc/Universal" , 0x026091 }, - { "Etc/UTC" , 0x0260C9 }, - { "Etc/Zulu" , 0x026101 }, - { "Europe/Amsterdam" , 0x026139 }, - { "Europe/Andorra" , 0x02656B }, - { "Europe/Athens" , 0x0267DB }, - { "Europe/Belfast" , 0x026B12 }, - { "Europe/Belgrade" , 0x02703D }, - { "Europe/Berlin" , 0x0272F5 }, - { "Europe/Bratislava" , 0x02763A }, - { "Europe/Brussels" , 0x027960 }, - { "Europe/Bucharest" , 0x027D8B }, - { "Europe/Budapest" , 0x0280A9 }, - { "Europe/Chisinau" , 0x02840B }, - { "Europe/Copenhagen" , 0x02878D }, - { "Europe/Dublin" , 0x028A8B }, - { "Europe/Gibraltar" , 0x028F90 }, - { "Europe/Guernsey" , 0x0293DB }, - { "Europe/Helsinki" , 0x029906 }, - { "Europe/Isle_of_Man" , 0x029BB0 }, - { "Europe/Istanbul" , 0x02A0DB }, - { "Europe/Jersey" , 0x02A4A7 }, - { "Europe/Kaliningrad" , 0x02A9D2 }, - { "Europe/Kiev" , 0x02AD12 }, - { "Europe/Lisbon" , 0x02B00F }, - { "Europe/Ljubljana" , 0x02B4FF }, - { "Europe/London" , 0x02B7B7 }, - { "Europe/Luxembourg" , 0x02BCE2 }, - { "Europe/Madrid" , 0x02C12C }, - { "Europe/Malta" , 0x02C4DE }, - { "Europe/Mariehamn" , 0x02C88B }, - { "Europe/Minsk" , 0x02CB35 }, - { "Europe/Monaco" , 0x02CE34 }, - { "Europe/Moscow" , 0x02D263 }, - { "Europe/Nicosia" , 0x02D592 }, - { "Europe/Oslo" , 0x02D86E }, - { "Europe/Paris" , 0x02DB94 }, - { "Europe/Podgorica" , 0x02DFCE }, - { "Europe/Prague" , 0x02E286 }, - { "Europe/Riga" , 0x02E5AC }, - { "Europe/Rome" , 0x02E8E5 }, - { "Europe/Samara" , 0x02EC9C }, - { "Europe/San_Marino" , 0x02EFA0 }, - { "Europe/Sarajevo" , 0x02F357 }, - { "Europe/Simferopol" , 0x02F60F }, - { "Europe/Skopje" , 0x02F920 }, - { "Europe/Sofia" , 0x02FBD8 }, - { "Europe/Stockholm" , 0x02FEC7 }, - { "Europe/Tallinn" , 0x03016A }, - { "Europe/Tirane" , 0x030498 }, - { "Europe/Tiraspol" , 0x030792 }, - { "Europe/Uzhgorod" , 0x030B14 }, - { "Europe/Vaduz" , 0x030E17 }, - { "Europe/Vatican" , 0x03109E }, - { "Europe/Vienna" , 0x031455 }, - { "Europe/Vilnius" , 0x031776 }, - { "Europe/Volgograd" , 0x031AA9 }, - { "Europe/Warsaw" , 0x031D8F }, - { "Europe/Zagreb" , 0x032164 }, - { "Europe/Zaporozhye" , 0x03241C }, - { "Europe/Zurich" , 0x032723 }, - { "Factory" , 0x0329D0 }, - { "GB" , 0x032A35 }, - { "GB-Eire" , 0x032F60 }, - { "GMT" , 0x03348B }, - { "GMT+0" , 0x033533 }, - { "GMT-0" , 0x0334FB }, - { "GMT0" , 0x0334C3 }, - { "Greenwich" , 0x03356B }, - { "Hongkong" , 0x0335A3 }, - { "HST" , 0x03374D }, - { "Iceland" , 0x033785 }, - { "Indian/Antananarivo" , 0x033932 }, - { "Indian/Chagos" , 0x03399A }, - { "Indian/Christmas" , 0x0339F0 }, - { "Indian/Cocos" , 0x033A28 }, - { "Indian/Comoro" , 0x033A60 }, - { "Indian/Kerguelen" , 0x033AA9 }, - { "Indian/Mahe" , 0x033AF2 }, - { "Indian/Maldives" , 0x033B3B }, - { "Indian/Mauritius" , 0x033B84 }, - { "Indian/Mayotte" , 0x033BCD }, - { "Indian/Reunion" , 0x033C16 }, - { "Iran" , 0x033C5F }, - { "Israel" , 0x033D95 }, - { "Jamaica" , 0x0340B8 }, - { "Japan" , 0x034171 }, - { "Kwajalein" , 0x0341EE }, - { "Libya" , 0x034245 }, - { "MET" , 0x034333 }, - { "Mexico/BajaNorte" , 0x034626 }, - { "Mexico/BajaSur" , 0x034983 }, - { "Mexico/General" , 0x034BBC }, - { "MST" , 0x034E0E }, - { "MST7MDT" , 0x034E46 }, - { "Navajo" , 0x03518B }, - { "NZ" , 0x0354F8 }, - { "NZ-CHAT" , 0x03586A }, - { "Pacific/Apia" , 0x035B46 }, - { "Pacific/Auckland" , 0x035BA1 }, - { "Pacific/Chatham" , 0x035F13 }, - { "Pacific/Easter" , 0x0361EF }, - { "Pacific/Efate" , 0x036525 }, - { "Pacific/Enderbury" , 0x0365DF }, - { "Pacific/Fakaofo" , 0x036632 }, - { "Pacific/Fiji" , 0x03666A }, - { "Pacific/Funafuti" , 0x0366D4 }, - { "Pacific/Galapagos" , 0x03670C }, - { "Pacific/Gambier" , 0x036767 }, - { "Pacific/Guadalcanal" , 0x0367B1 }, - { "Pacific/Guam" , 0x0367FA }, - { "Pacific/Honolulu" , 0x036844 }, - { "Pacific/Johnston" , 0x0368C6 }, - { "Pacific/Kiritimati" , 0x0368FE }, - { "Pacific/Kosrae" , 0x036951 }, - { "Pacific/Kwajalein" , 0x03699C }, - { "Pacific/Majuro" , 0x0369F3 }, - { "Pacific/Marquesas" , 0x036A38 }, - { "Pacific/Midway" , 0x036A82 }, - { "Pacific/Nauru" , 0x036AF2 }, - { "Pacific/Niue" , 0x036B5E }, - { "Pacific/Norfolk" , 0x036BB0 }, - { "Pacific/Noumea" , 0x036BF9 }, - { "Pacific/Pago_Pago" , 0x036C7D }, - { "Pacific/Palau" , 0x036CFA }, - { "Pacific/Pitcairn" , 0x036D32 }, - { "Pacific/Ponape" , 0x036D7B }, - { "Pacific/Port_Moresby" , 0x036DB4 }, - { "Pacific/Rarotonga" , 0x036DEC }, - { "Pacific/Saipan" , 0x036EBC }, - { "Pacific/Samoa" , 0x036F13 }, - { "Pacific/Tahiti" , 0x036F90 }, - { "Pacific/Tarawa" , 0x036FDA }, - { "Pacific/Tongatapu" , 0x037013 }, - { "Pacific/Truk" , 0x037093 }, - { "Pacific/Wake" , 0x0370CC }, - { "Pacific/Wallis" , 0x037105 }, - { "Pacific/Yap" , 0x03713D }, - { "Poland" , 0x037176 }, - { "Portugal" , 0x03754B }, - { "PRC" , 0x037A3B }, - { "PST8PDT" , 0x037AE0 }, - { "ROC" , 0x037E25 }, - { "ROK" , 0x037F31 }, - { "Singapore" , 0x037FC9 }, - { "Turkey" , 0x038074 }, - { "UCT" , 0x038440 }, - { "Universal" , 0x038478 }, - { "US/Alaska" , 0x0384B0 }, - { "US/Aleutian" , 0x03880D }, - { "US/Arizona" , 0x038B67 }, - { "US/Central" , 0x038BE9 }, - { "US/East-Indiana" , 0x0395DB }, - { "US/Eastern" , 0x0390E8 }, - { "US/Hawaii" , 0x039839 }, - { "US/Indiana-Starke" , 0x0398BB }, - { "US/Michigan" , 0x039C20 }, - { "US/Mountain" , 0x039F4B }, - { "US/Pacific" , 0x03A2B8 }, - { "US/Pacific-New" , 0x03A6B1 }, - { "US/Samoa" , 0x03AAAA }, - { "UTC" , 0x03AB27 }, - { "W-SU" , 0x03AE06 }, - { "WET" , 0x03AB5F }, - { "Zulu" , 0x03B135 }, -}; -/* This is a generated file, do not modify */ -const unsigned char timelib_timezone_db_data_builtin[242029] = { - - -/* Africa/Abidjan */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x92, 0xE6, 0x92, 0x48, -0x01, 0xFF, 0xFF, 0xFC, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Accra */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x9E, 0x30, 0x66, 0xB4, -0xC1, 0x4C, 0xF9, 0x80, 0xC1, 0xEC, 0x7A, 0x50, 0xC3, 0x2E, 0x2D, 0x00, 0xC3, 0xCD, 0xAD, 0xD0, -0xC5, 0x0F, 0x60, 0x80, 0xC5, 0xAE, 0xE1, 0x50, 0xC6, 0xF0, 0x94, 0x00, 0xC7, 0x90, 0x14, 0xD0, -0xC8, 0xD3, 0x19, 0x00, 0xC9, 0x72, 0x99, 0xD0, 0xCA, 0xB4, 0x4C, 0x80, 0xCB, 0x53, 0xCD, 0x50, -0xCC, 0x95, 0x80, 0x00, 0xCD, 0x35, 0x00, 0xD0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xFF, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x04, -0xB0, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x47, 0x48, 0x53, -0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Addis_Ababa */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xC0, 0xAF, 0xF2, 0x98, -0x01, 0x00, 0x00, 0x24, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x05, 0x41, 0x44, 0x4D, -0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Algiers */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x16, 0x91, 0x60, 0x50, 0x4F, -0x9B, 0x47, 0x78, 0xF0, 0x9B, 0xD7, 0x2C, 0x70, 0x9C, 0xBC, 0x91, 0x70, 0x9D, 0xC0, 0x48, 0xF0, -0x9E, 0x89, 0xFE, 0x70, 0x9F, 0xA0, 0x2A, 0xF0, 0xA0, 0x60, 0xA5, 0xF0, 0xA1, 0x80, 0x0C, 0xF0, -0xA2, 0x2E, 0x12, 0xF0, 0xA3, 0x7A, 0x4C, 0xF0, 0xA4, 0x35, 0x81, 0xF0, 0xA4, 0xB8, 0x06, 0x70, -0xC6, 0xFF, 0x06, 0x70, 0xC7, 0x58, 0xBA, 0x80, 0xC7, 0xDA, 0x09, 0xA0, 0xCF, 0x92, 0x34, 0x10, -0xD0, 0x8A, 0x00, 0x00, 0xD1, 0x72, 0x16, 0x10, 0xD2, 0x4E, 0x24, 0x70, 0xD4, 0x4B, 0x07, 0x70, -0xE5, 0xCE, 0xD3, 0x00, 0xF3, 0x5C, 0xB0, 0xF0, 0x02, 0x78, 0xC1, 0xF0, 0x03, 0x43, 0xC8, 0xF0, -0x0D, 0xCF, 0xD7, 0x00, 0x0E, 0xAD, 0x44, 0xF0, 0x0F, 0x78, 0x5A, 0x00, 0x10, 0x68, 0x59, 0x10, -0x12, 0x76, 0x43, 0x70, 0x13, 0x66, 0x42, 0x80, 0x14, 0x5F, 0x7C, 0x10, 0x15, 0x4F, 0x5F, 0x00, -0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x05, -0x04, 0x05, 0x04, 0x05, 0x03, 0x05, 0x03, 0x01, 0x02, 0x06, 0x05, 0x04, 0x05, 0x03, 0x06, 0x03, -0x05, 0x00, 0x00, 0x02, 0x31, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, -0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x0D, 0x00, -0x00, 0x0E, 0x10, 0x00, 0x12, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x50, 0x4D, 0x54, 0x00, 0x57, -0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, -0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Asmara */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xC0, 0xAF, 0xF2, 0x98, -0x01, 0x00, 0x00, 0x24, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x05, 0x41, 0x44, 0x4D, -0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Asmera */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xC0, 0xAF, 0xF2, 0x98, -0x01, 0x00, 0x00, 0x24, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x05, 0x41, 0x44, 0x4D, -0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Bamako */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x92, 0xE6, 0x96, 0x00, -0xBC, 0x92, 0xB8, 0x80, 0xEE, 0x11, 0x87, 0x10, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xF8, 0x80, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x08, 0x4C, 0x4D, 0x54, -0x00, 0x47, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Bangui */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x92, 0xE6, 0x7D, 0x14, -0x01, 0x00, 0x00, 0x11, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Banjul */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x92, 0xE6, 0x9E, 0x1C, -0xBE, 0x2A, 0x27, 0x9C, 0xF4, 0xB6, 0x36, 0x10, 0x01, 0x02, 0x03, 0xFF, 0xFF, 0xF0, 0x64, 0x00, -0x00, 0xFF, 0xFF, 0xF0, 0x64, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x08, 0x00, 0x00, 0x00, -0x00, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x47, -0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Bissau */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x91, 0xC4, 0x93, 0x1C, -0x09, 0x67, 0x61, 0x10, 0x01, 0x02, 0xFF, 0xFF, 0xF1, 0x64, 0x00, 0x00, 0xFF, 0xFF, 0xF1, 0xF0, -0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, -0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Blantyre */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC3, 0xB0, -0x01, 0x00, 0x00, 0x20, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Brazzaville */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x92, 0xE6, 0x80, 0x2C, -0x01, 0x00, 0x00, 0x0E, 0x54, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Bujumbura */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, -0x00, 0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, - -/* Africa/Cairo */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xAE, 0x00, 0x00, 0x00, 0x04, 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, -0xE8, 0xF4, 0x2D, 0x50, 0xEA, 0x0B, 0xB9, 0x60, 0xEA, 0xD5, 0x60, 0xD0, 0xEB, 0xEC, 0xFA, 0xF0, -0xEC, 0xB5, 0x6D, 0x00, 0xED, 0xCF, 0x7F, 0xF0, 0xEE, 0x97, 0xF2, 0x00, 0xEF, 0xB0, 0xB3, 0x70, -0xF0, 0x79, 0x25, 0x80, 0xF1, 0x91, 0xE6, 0xF0, 0xF2, 0x5A, 0x59, 0x00, 0xF3, 0x73, 0x1A, 0x70, -0xF4, 0x3B, 0x8C, 0x80, 0xF5, 0x55, 0x9F, 0x70, 0xF6, 0x1E, 0x11, 0x80, 0xF7, 0x36, 0xD2, 0xF0, -0xF7, 0xFF, 0x45, 0x00, 0xF9, 0x18, 0x06, 0x70, 0xF9, 0xE1, 0xCA, 0x00, 0xFA, 0xF9, 0x39, 0xF0, -0xFB, 0xC2, 0xFD, 0x80, 0xFC, 0xDB, 0xBE, 0xF0, 0xFD, 0xA5, 0x82, 0x80, 0xFE, 0xBC, 0xF2, 0x70, -0xFF, 0x86, 0xB6, 0x00, 0x00, 0x9E, 0x25, 0xF0, 0x01, 0x67, 0xE9, 0x80, 0x02, 0x7F, 0x59, 0x70, -0x03, 0x49, 0x1D, 0x00, 0x04, 0x61, 0xDE, 0x70, 0x05, 0x2B, 0xA2, 0x00, 0x06, 0x43, 0x11, 0xF0, -0x07, 0x0C, 0xD5, 0x80, 0x08, 0x24, 0x45, 0x70, 0x08, 0xEE, 0x09, 0x00, 0x0A, 0x05, 0x78, 0xF0, -0x0A, 0xCF, 0x3C, 0x80, 0x0B, 0xE7, 0xFD, 0xF0, 0x0C, 0xB1, 0xC1, 0x80, 0x0D, 0xC9, 0x31, 0x70, -0x0E, 0x92, 0xF5, 0x00, 0x0F, 0xAA, 0x64, 0xF0, 0x10, 0x74, 0x28, 0x80, 0x11, 0x8B, 0x98, 0x70, -0x12, 0x55, 0x5C, 0x00, 0x13, 0x6E, 0x1D, 0x70, 0x14, 0x37, 0xE1, 0x00, 0x15, 0x4F, 0x50, 0xF0, -0x16, 0x19, 0x14, 0x80, 0x17, 0xA0, 0x93, 0xF0, 0x17, 0xFA, 0x48, 0x00, 0x19, 0x70, 0xA3, 0xF0, -0x19, 0xDB, 0x7B, 0x80, 0x1A, 0xF4, 0x3C, 0xF0, 0x1B, 0xBE, 0x00, 0x80, 0x1C, 0xD5, 0x70, 0x70, -0x1D, 0x9F, 0x34, 0x00, 0x1E, 0xB6, 0xA3, 0xF0, 0x1F, 0x80, 0x67, 0x80, 0x20, 0x97, 0xD7, 0x70, -0x21, 0x61, 0x9B, 0x00, 0x22, 0x7A, 0x5C, 0x70, 0x23, 0x44, 0x20, 0x00, 0x24, 0x62, 0x27, 0x70, -0x25, 0x25, 0x53, 0x80, 0x26, 0x3C, 0xC3, 0x70, 0x27, 0x06, 0x87, 0x00, 0x28, 0x1D, 0xF6, 0xF0, -0x28, 0xE7, 0xBA, 0x80, 0x2A, 0x00, 0x7B, 0xF0, 0x2A, 0xCA, 0x3F, 0x80, 0x2B, 0xE1, 0xAF, 0x70, -0x2C, 0xAB, 0x73, 0x00, 0x2D, 0xC2, 0xE2, 0xF0, 0x2E, 0x8C, 0xA6, 0x80, 0x2F, 0xA0, 0x13, 0xE0, -0x30, 0x6B, 0x0C, 0xD0, 0x31, 0x7F, 0xF5, 0xE0, 0x32, 0x4A, 0xEE, 0xD0, 0x33, 0x5F, 0xD7, 0xE0, -0x34, 0x2A, 0xD0, 0xD0, 0x35, 0x3F, 0xB9, 0xE0, 0x36, 0x0A, 0xB2, 0xD0, 0x37, 0x28, 0xD6, 0x60, -0x37, 0xF3, 0xCF, 0x50, 0x39, 0x08, 0xB8, 0x60, 0x39, 0xD3, 0xB1, 0x50, 0x3A, 0xE8, 0x9A, 0x60, -0x3B, 0xB3, 0x93, 0x50, 0x3C, 0xC8, 0x7C, 0x60, 0x3D, 0x93, 0x75, 0x50, 0x3E, 0xA8, 0x5E, 0x60, -0x3F, 0x73, 0x57, 0x50, 0x40, 0x91, 0x7A, 0xE0, 0x41, 0x5C, 0x73, 0xD0, 0x42, 0x71, 0x5C, 0xE0, -0x43, 0x3C, 0x55, 0xD0, 0x44, 0x51, 0x3E, 0xE0, 0x45, 0x12, 0xFD, 0x50, 0x46, 0x31, 0x20, 0xE0, -0x46, 0xFC, 0x19, 0xD0, 0x48, 0x11, 0x02, 0xE0, 0x48, 0xDB, 0xFB, 0xD0, 0x49, 0xF0, 0xE4, 0xE0, -0x4A, 0xBB, 0xDD, 0xD0, 0x4B, 0xDA, 0x01, 0x60, 0x4C, 0xA4, 0xFA, 0x50, 0x4D, 0xB9, 0xE3, 0x60, -0x4E, 0x84, 0xDC, 0x50, 0x4F, 0x99, 0xC5, 0x60, 0x50, 0x64, 0xBE, 0x50, 0x51, 0x79, 0xA7, 0x60, -0x52, 0x44, 0xA0, 0x50, 0x53, 0x59, 0x89, 0x60, 0x54, 0x24, 0x82, 0x50, 0x55, 0x39, 0x6B, 0x60, -0x56, 0x04, 0x64, 0x50, 0x57, 0x22, 0x87, 0xE0, 0x57, 0xED, 0x80, 0xD0, 0x59, 0x02, 0x69, 0xE0, -0x59, 0xCD, 0x62, 0xD0, 0x5A, 0xE2, 0x4B, 0xE0, 0x5B, 0xAD, 0x44, 0xD0, 0x5C, 0xC2, 0x2D, 0xE0, -0x5D, 0x8D, 0x26, 0xD0, 0x5E, 0xA2, 0x0F, 0xE0, 0x5F, 0x6D, 0x08, 0xD0, 0x60, 0x8B, 0x2C, 0x60, -0x61, 0x56, 0x25, 0x50, 0x62, 0x6B, 0x0E, 0x60, 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, -0x70, 0x5E, 0x6F, 0xD0, 0x71, 0x73, 0x58, 0xE0, 0x72, 0x3E, 0x51, 0xD0, 0x73, 0x53, 0x3A, 0xE0, -0x74, 0x1E, 0x33, 0xD0, 0x75, 0x3C, 0x57, 0x60, 0x76, 0x07, 0x50, 0x50, 0x77, 0x1C, 0x39, 0x60, -0x77, 0xE7, 0x32, 0x50, 0x78, 0xFC, 0x1B, 0x60, 0x79, 0xC7, 0x14, 0x50, 0x7A, 0xDB, 0xFD, 0x60, -0x7B, 0xA6, 0xF6, 0x50, 0x7C, 0xBB, 0xDF, 0x60, 0x7D, 0x86, 0xD8, 0x50, 0x7E, 0x9B, 0xC1, 0x60, -0x7F, 0x66, 0xBA, 0x50, 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, -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, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 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, - -/* Africa/Casablanca */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x96, 0x51, 0xF9, 0x9C, -0xC6, 0xFF, 0x14, 0x80, 0xC7, 0x58, 0xAC, 0x70, 0xC7, 0xD9, 0xED, 0x80, 0xD2, 0xA1, 0x32, 0xF0, -0xDB, 0x35, 0xA4, 0x00, 0xDB, 0xEE, 0x27, 0xF0, 0xFB, 0x25, 0x72, 0x40, 0xFB, 0xC2, 0xEF, 0x70, -0x08, 0x6B, 0x84, 0x80, 0x08, 0xC6, 0x6D, 0xF0, 0x0B, 0xE8, 0x0C, 0x00, 0x0C, 0x61, 0x47, 0xF0, -0x0D, 0xC9, 0x3F, 0x80, 0x0E, 0x8E, 0xF2, 0x70, 0x0F, 0xD3, 0x51, 0x80, 0x10, 0x27, 0xA3, 0x70, -0x1A, 0xB7, 0xA6, 0x00, 0x1E, 0x18, 0x6F, 0xF0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0xFF, 0xFF, 0xF8, 0xE4, 0x00, -0x00, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0E, -0x10, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, -0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Ceuta */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x12, 0x9E, 0xD6, 0x75, 0x70, -0x9F, 0xA1, 0x6E, 0x60, 0xAA, 0x05, 0xEF, 0x70, 0xAA, 0xE7, 0x5F, 0xF0, 0xAD, 0xC9, 0xA7, 0xF0, -0xAE, 0xA7, 0x23, 0xF0, 0xAF, 0xA0, 0x4F, 0x70, 0xB0, 0x87, 0x05, 0xF0, 0xB1, 0x89, 0x6B, 0xF0, -0xB2, 0x70, 0x22, 0x70, 0xB2, 0xE1, 0x91, 0x80, 0xFB, 0x25, 0x72, 0x40, 0xFB, 0xC2, 0xEF, 0x70, -0x08, 0x6B, 0x84, 0x80, 0x08, 0xC6, 0x6D, 0xF0, 0x0B, 0xE8, 0x0C, 0x00, 0x0C, 0x61, 0x47, 0xF0, -0x0D, 0xC9, 0x3F, 0x80, 0x0E, 0x8E, 0xF2, 0x70, 0x0F, 0xD3, 0x51, 0x80, 0x10, 0x27, 0xA3, 0x70, -0x1A, 0xB7, 0xA6, 0x00, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, -0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, -0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, -0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, -0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, -0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, -0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, -0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, -0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, -0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, -0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, -0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, -0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, -0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, -0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, -0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, -0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, -0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, -0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, -0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, -0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, -0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, -0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, -0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, -0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, -0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, -0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x01, -0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, -0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, -0x00, 0x00, 0x1C, 0x20, 0x01, 0x0D, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x57, 0x45, 0x54, 0x00, -0x57, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, -0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Africa/Conakry */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x92, 0xE6, 0x9B, 0x5C, -0xBC, 0x92, 0xB8, 0x80, 0xED, 0x30, 0x16, 0x90, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xF3, 0x24, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x08, 0x4C, 0x4D, 0x54, -0x00, 0x47, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Dakar */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x92, 0xE6, 0x9E, 0xD8, -0xCA, 0x3B, 0x10, 0x90, 0x01, 0x02, 0xFF, 0xFF, 0xEF, 0xA8, 0x00, 0x00, 0xFF, 0xFF, 0xF1, 0xF0, -0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, -0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Dar_es_Salaam */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0E, 0xB6, 0xA3, 0xD3, 0xAC, -0xD6, 0x9D, 0x7F, 0xD0, 0xEF, 0x12, 0x66, 0xE3, 0x01, 0x02, 0x01, 0x00, 0x00, 0x24, 0xD4, 0x00, -0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x00, 0x00, 0x26, 0x9D, 0x00, 0x08, 0x4C, 0x4D, 0x54, -0x00, 0x45, 0x41, 0x54, 0x00, 0x42, 0x45, 0x41, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, - -/* Africa/Djibouti */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF3, 0xD2, 0x0C, -0x01, 0x00, 0x00, 0x28, 0x74, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Douala */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x92, 0xE6, 0x85, 0x68, -0x01, 0x00, 0x00, 0x09, 0x18, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/El_Aaiun */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xBC, 0x48, 0xF0, 0xE0, -0x0B, 0xD1, 0xB0, 0x90, 0x01, 0x02, 0xFF, 0xFF, 0xF3, 0xA0, 0x00, 0x00, 0xFF, 0xFF, 0xF1, 0xF0, -0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, -0x57, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Freetown */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0x95, 0x90, 0x32, 0x6C, -0xBE, 0xF1, 0x38, 0x90, 0xBF, 0x92, 0x06, 0x30, 0xC0, 0xD3, 0xBD, 0x90, 0xC1, 0x74, 0x8B, 0x30, -0xC2, 0xB4, 0xF1, 0x10, 0xC3, 0x55, 0xBE, 0xB0, 0xC4, 0x96, 0x24, 0x90, 0xC5, 0x36, 0xF2, 0x30, -0xC6, 0x77, 0x58, 0x10, 0xC7, 0x18, 0x25, 0xB0, 0xC8, 0x59, 0xDD, 0x10, 0xC8, 0xFA, 0xAA, 0xB0, -0xCA, 0x3B, 0x10, 0x90, 0xCA, 0xDB, 0xDE, 0x30, 0xCC, 0x1C, 0x44, 0x10, 0xCC, 0xBD, 0x11, 0xB0, -0xE7, 0x8C, 0x7C, 0x10, 0xE8, 0x53, 0x80, 0x80, 0xE8, 0xCC, 0xBC, 0x70, 0xEA, 0x34, 0xB4, 0x00, -0xEA, 0xAD, 0xEF, 0xF0, 0xEC, 0x15, 0xE7, 0x80, 0xEC, 0x8F, 0x23, 0x70, 0xED, 0xF8, 0x6C, 0x80, -0xEE, 0x71, 0xA8, 0x70, 0xEF, 0xD9, 0xA0, 0x00, 0xF0, 0x52, 0xDB, 0xF0, 0xF1, 0xBA, 0xD3, 0x80, -0xF2, 0x34, 0x0F, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x05, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0xFF, 0xFF, 0xF3, 0x94, 0x00, 0x00, 0xFF, 0xFF, 0xFB, 0x50, 0x01, 0x04, 0xFF, 0xFF, -0xF1, 0xF0, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, -0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x46, 0x4D, 0x54, 0x00, 0x53, 0x4C, 0x53, 0x54, 0x00, 0x57, -0x41, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, - -/* Africa/Gaborone */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xCE, 0x8E, 0x6E, 0x80, -0xCF, 0x7E, 0x51, 0x70, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, -0x01, 0x04, 0x43, 0x41, 0x54, 0x00, 0x43, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Harare */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC7, 0x64, -0x01, 0x00, 0x00, 0x1D, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Johannesburg */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x82, 0x46, 0xCF, 0x68, -0xCC, 0xAE, 0x8C, 0x80, 0xCD, 0x9E, 0x6F, 0x70, 0xCE, 0x8E, 0x6E, 0x80, 0xCF, 0x7E, 0x51, 0x70, -0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x15, 0x18, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, -0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, - -/* Africa/Kampala */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0xB1, 0xEE, 0xDF, 0x1C, -0xB4, 0xC2, 0x9A, 0xD0, 0xD6, 0x9D, 0x86, 0xD8, 0xE7, 0x8C, 0x47, 0x63, 0x01, 0x02, 0x03, 0x01, -0x00, 0x00, 0x1E, 0x64, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x00, 0x00, 0x23, 0x28, -0x00, 0x08, 0x00, 0x00, 0x26, 0x9D, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x41, 0x54, 0x00, -0x42, 0x45, 0x41, 0x54, 0x00, 0x42, 0x45, 0x41, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, - -/* Africa/Khartoum */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xB6, 0xA3, 0xDA, 0x00, -0x00, 0x9E, 0x17, 0xE0, 0x01, 0x7A, 0x34, 0x50, 0x02, 0x7D, 0xF9, 0xE0, 0x03, 0x5B, 0x67, 0xD0, -0x04, 0x60, 0x7E, 0xE0, 0x05, 0x3D, 0xEC, 0xD0, 0x06, 0x40, 0x60, 0xE0, 0x07, 0x1F, 0x20, 0x50, -0x08, 0x20, 0x42, 0xE0, 0x09, 0x00, 0x53, 0xD0, 0x0A, 0x00, 0x24, 0xE0, 0x0A, 0xE1, 0x87, 0x50, -0x0B, 0xE0, 0x06, 0xE0, 0x0C, 0xC4, 0x0C, 0x50, 0x0D, 0xBF, 0xE8, 0xE0, 0x0E, 0xA5, 0x3F, 0xD0, -0x0F, 0xA9, 0x05, 0x60, 0x10, 0x86, 0x73, 0x50, 0x11, 0x88, 0xE7, 0x60, 0x12, 0x67, 0xA6, 0xD0, -0x13, 0x68, 0xC9, 0x60, 0x14, 0x4A, 0x2B, 0xD0, 0x15, 0x48, 0xAB, 0x60, 0x16, 0x2B, 0x5F, 0x50, -0x17, 0x28, 0x8D, 0x60, 0x18, 0x0C, 0x92, 0xD0, 0x19, 0x08, 0x6F, 0x60, 0x19, 0xED, 0xC6, 0x50, -0x1A, 0xF1, 0x8B, 0xE0, 0x1B, 0xD0, 0x4B, 0x50, 0x1C, 0xD1, 0x6D, 0xE0, 0x1D, 0xB1, 0x7E, 0xD0, -0x38, 0x80, 0x45, 0x20, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x00, 0x00, 0x1E, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, -0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0D, 0x4C, 0x4D, -0x54, 0x00, 0x43, 0x41, 0x53, 0x54, 0x00, 0x43, 0x41, 0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Kigali */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xBE, 0xF1, 0x0E, 0x50, -0x01, 0x00, 0x00, 0x1C, 0x30, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Kinshasa */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, -0x00, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, - -/* Africa/Lagos */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xA1, 0x51, 0xF3, 0x50, -0x01, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Libreville */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x92, 0xE6, 0x85, 0xA4, -0x01, 0x00, 0x00, 0x08, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Lome */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, - -/* Africa/Luanda */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xC4, 0x78, 0x4C, -0x01, 0x00, 0x00, 0x0C, 0x34, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x41, 0x4F, 0x54, -0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Lubumbashi */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, -0x00, 0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, - -/* Africa/Lusaka */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC9, 0xFC, -0x01, 0x00, 0x00, 0x1A, 0x84, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Malabo */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x92, 0xE6, 0x86, 0x44, -0xF4, 0x9F, 0xBE, 0x80, 0x01, 0x02, 0x00, 0x00, 0x08, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, -0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Maputo */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x82, 0x46, 0xC5, 0xF4, -0x01, 0x00, 0x00, 0x1E, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x43, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Maseru */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x82, 0x46, 0xCA, 0xB8, -0xCE, 0x8E, 0x6E, 0x80, 0xCF, 0x7E, 0x51, 0x70, 0x01, 0x02, 0x01, 0x00, 0x00, 0x19, 0xC8, 0x00, -0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Mbabane */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x82, 0x46, 0xC7, 0x58, -0x01, 0x00, 0x00, 0x1D, 0x28, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Mogadishu */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xB6, 0xA3, 0xCE, 0x50, -0xE7, 0x8C, 0x4A, 0xD8, 0x01, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x00, 0x00, 0x00, 0x23, 0x28, -0x00, 0x04, 0x45, 0x41, 0x54, 0x00, 0x42, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Monrovia */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xA0, 0x5F, 0x6C, 0x9C, -0x04, 0x61, 0xF6, 0xEE, 0x01, 0x02, 0xFF, 0xFF, 0xF5, 0xE4, 0x00, 0x00, 0xFF, 0xFF, 0xF5, 0x92, -0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x4D, 0x4D, 0x54, 0x00, 0x4C, 0x52, 0x54, 0x00, -0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Nairobi */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0xB1, 0xEE, 0xDA, 0xFC, -0xB4, 0xC2, 0x9A, 0xD0, 0xC7, 0x91, 0x47, 0xD8, 0xED, 0x2F, 0xE1, 0xE3, 0x01, 0x02, 0x03, 0x01, -0x00, 0x00, 0x22, 0x84, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x00, 0x00, 0x23, 0x28, -0x00, 0x08, 0x00, 0x00, 0x26, 0x9D, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x41, 0x54, 0x00, -0x42, 0x45, 0x41, 0x54, 0x00, 0x42, 0x45, 0x41, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, - -/* Africa/Ndjamena */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x92, 0xE6, 0x80, 0x64, -0x12, 0x66, 0x71, 0x70, 0x13, 0x26, 0xDE, 0x60, 0x01, 0x02, 0x01, 0x00, 0x00, 0x0E, 0x1C, 0x00, -0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x4C, 0x4D, 0x54, -0x00, 0x57, 0x41, 0x54, 0x00, 0x57, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* Africa/Niamey */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0C, 0x92, 0xE6, 0x8C, 0x84, -0xBC, 0x92, 0xC6, 0x90, 0xED, 0x30, 0x08, 0x80, 0x01, 0x02, 0x03, 0x00, 0x00, 0x01, 0xFC, 0x00, -0x00, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0E, -0x10, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Nouakchott */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x92, 0xE6, 0x9D, 0x74, -0xBC, 0x92, 0xB8, 0x80, 0xEE, 0xE5, 0xC8, 0x90, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xF1, 0x0C, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x08, 0x4C, 0x4D, 0x54, -0x00, 0x47, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Ouagadougou */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x92, 0xE6, 0x8F, 0xEC, -0x01, 0xFF, 0xFF, 0xFE, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Porto-Novo */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x92, 0xE6, 0x8C, 0x0C, -0xBC, 0x92, 0xB8, 0x80, 0x01, 0x02, 0x00, 0x00, 0x02, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, -0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Sao_Tome */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x92, 0xE6, 0x97, 0x10, -0x01, 0xFF, 0xFF, 0xF7, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Timbuktu */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x92, 0xE6, 0x96, 0x00, -0xBC, 0x92, 0xB8, 0x80, 0xEE, 0x11, 0x87, 0x10, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xF8, 0x80, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x08, 0x4C, 0x4D, 0x54, -0x00, 0x47, 0x4D, 0x54, 0x00, 0x57, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Tripoli */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xA1, 0xF2, 0xC1, 0x24, -0xDD, 0xBB, 0xB1, 0x10, 0xDE, 0x23, 0xAD, 0x60, 0xE1, 0x78, 0xD2, 0x10, 0xE1, 0xE7, 0x65, 0xE0, -0xE5, 0x2F, 0x3F, 0x70, 0xE5, 0xA9, 0xCC, 0xE0, 0xEB, 0x4E, 0xC6, 0xF0, 0x16, 0x92, 0x42, 0x60, -0x17, 0x08, 0xF7, 0x70, 0x17, 0xFA, 0x2B, 0xE0, 0x18, 0xEA, 0x2A, 0xF0, 0x19, 0xDB, 0x5F, 0x60, -0x1A, 0xCC, 0xAF, 0xF0, 0x1B, 0xBD, 0xE4, 0x60, 0x1C, 0xB4, 0x7A, 0xF0, 0x1D, 0x9F, 0x17, 0xE0, -0x1E, 0x93, 0x0B, 0x70, 0x1F, 0x82, 0xEE, 0x60, 0x20, 0x70, 0x4A, 0x70, 0x21, 0x61, 0x7E, 0xE0, -0x22, 0x52, 0xCF, 0x70, 0x23, 0x44, 0x03, 0xE0, 0x24, 0x34, 0x02, 0xF0, 0x25, 0x25, 0x37, 0x60, -0x26, 0x40, 0xB7, 0xF0, 0x32, 0x4E, 0xF1, 0x60, 0x33, 0x44, 0x36, 0x70, 0x34, 0x35, 0x6A, 0xE0, -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, 0x03, 0x02, 0x01, 0x03, 0x00, 0x00, 0x0C, -0x5C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, -0x00, 0x1C, 0x20, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, -0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Tunis */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x91, 0x60, 0x50, 0x4F, -0xC6, 0x3A, 0x88, 0xE0, 0xC7, 0x58, 0x9E, 0x60, 0xC7, 0xDB, 0x22, 0xE0, 0xCA, 0xE2, 0x54, 0xE0, -0xCB, 0xAD, 0x69, 0xF0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCD, 0xC2, 0x16, 0x00, -0xCD, 0xCC, 0xB0, 0x10, 0xCE, 0xA2, 0x35, 0x00, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x89, 0xE3, 0xE0, -0xD1, 0x72, 0x16, 0x10, 0xD2, 0x4E, 0x16, 0x60, 0x0D, 0xC7, 0xDF, 0xF0, 0x0E, 0x89, 0xAC, 0x70, -0x0F, 0xAA, 0x64, 0xF0, 0x10, 0x74, 0x1A, 0x70, 0x22, 0xA3, 0x3A, 0xF0, 0x23, 0x3C, 0x28, 0xF0, -0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x3C, 0xC3, 0x70, 0x27, 0x05, 0x27, 0x70, -0x42, 0x74, 0x0D, 0xF0, 0x43, 0x3C, 0x80, 0x00, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x00, 0x00, 0x02, 0x31, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, -0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x01, -0x04, 0x50, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x01, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Africa/Windhoek */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x13, 0x82, 0x46, 0xCF, 0x68, -0xCC, 0xAE, 0x8C, 0x80, 0xCD, 0x9E, 0x6F, 0x70, 0x26, 0x06, 0xA7, 0xE0, 0x2D, 0x9D, 0xEA, 0xE0, -0x2E, 0x69, 0x1C, 0x10, 0x2F, 0x7D, 0xE9, 0x00, 0x30, 0x48, 0xFE, 0x10, 0x31, 0x67, 0x05, 0x80, -0x32, 0x28, 0xE0, 0x10, 0x33, 0x46, 0xE7, 0x80, 0x34, 0x11, 0xFC, 0x90, 0x35, 0x26, 0xC9, 0x80, -0x35, 0xF1, 0xDE, 0x90, 0x37, 0x06, 0xAB, 0x80, 0x37, 0xD1, 0xC0, 0x90, 0x38, 0xE6, 0x8D, 0x80, -0x39, 0xB1, 0xA2, 0x90, 0x3A, 0xC6, 0x6F, 0x80, 0x3B, 0x91, 0x84, 0x90, 0x3C, 0xAF, 0x8C, 0x00, -0x3D, 0x71, 0x66, 0x90, 0x3E, 0x8F, 0x6E, 0x00, 0x3F, 0x5A, 0x83, 0x10, 0x40, 0x6F, 0x50, 0x00, -0x41, 0x3A, 0x65, 0x10, 0x42, 0x4F, 0x32, 0x00, 0x43, 0x1A, 0x47, 0x10, 0x44, 0x2F, 0x14, 0x00, -0x44, 0xFA, 0x29, 0x10, 0x46, 0x0E, 0xF6, 0x00, 0x46, 0xDA, 0x0B, 0x10, 0x47, 0xF8, 0x12, 0x80, -0x48, 0xC3, 0x27, 0x90, 0x49, 0xD7, 0xF4, 0x80, 0x4A, 0xA3, 0x09, 0x90, 0x4B, 0xB7, 0xD6, 0x80, -0x4C, 0x82, 0xEB, 0x90, 0x4D, 0x97, 0xB8, 0x80, 0x4E, 0x62, 0xCD, 0x90, 0x4F, 0x77, 0x9A, 0x80, -0x50, 0x42, 0xAF, 0x90, 0x51, 0x60, 0xB7, 0x00, 0x52, 0x22, 0x91, 0x90, 0x53, 0x40, 0x99, 0x00, -0x54, 0x0B, 0xAE, 0x10, 0x55, 0x20, 0x7B, 0x00, 0x55, 0xEB, 0x90, 0x10, 0x57, 0x00, 0x5D, 0x00, -0x57, 0xCB, 0x72, 0x10, 0x58, 0xE0, 0x3F, 0x00, 0x59, 0xAB, 0x54, 0x10, 0x5A, 0xC0, 0x21, 0x00, -0x5B, 0x8B, 0x36, 0x10, 0x5C, 0xA9, 0x3D, 0x80, 0x5D, 0x6B, 0x18, 0x10, 0x5E, 0x89, 0x1F, 0x80, -0x5F, 0x54, 0x34, 0x90, 0x60, 0x69, 0x01, 0x80, 0x61, 0x34, 0x16, 0x90, 0x62, 0x48, 0xE3, 0x80, -0x63, 0x13, 0xF8, 0x90, 0x64, 0x28, 0xC5, 0x80, 0x64, 0xF3, 0xDA, 0x90, 0x66, 0x11, 0xE2, 0x00, -0x66, 0xD3, 0xBC, 0x90, 0x67, 0xF1, 0xC4, 0x00, 0x68, 0xBC, 0xD9, 0x10, 0x69, 0xD1, 0xA6, 0x00, -0x6A, 0x9C, 0xBB, 0x10, 0x6B, 0xB1, 0x88, 0x00, 0x6C, 0x7C, 0x9D, 0x10, 0x6D, 0x91, 0x6A, 0x00, -0x6E, 0x5C, 0x7F, 0x10, 0x6F, 0x71, 0x4C, 0x00, 0x70, 0x3C, 0x61, 0x10, 0x71, 0x5A, 0x68, 0x80, -0x72, 0x1C, 0x43, 0x10, 0x73, 0x3A, 0x4A, 0x80, 0x74, 0x05, 0x5F, 0x90, 0x75, 0x1A, 0x2C, 0x80, -0x75, 0xE5, 0x41, 0x90, 0x76, 0xFA, 0x0E, 0x80, 0x77, 0xC5, 0x23, 0x90, 0x78, 0xD9, 0xF0, 0x80, -0x79, 0xA5, 0x05, 0x90, 0x7A, 0xB9, 0xD2, 0x80, 0x7B, 0x84, 0xE7, 0x90, 0x7C, 0xA2, 0xEF, 0x00, -0x7D, 0x6E, 0x04, 0x10, 0x7E, 0x82, 0xD1, 0x00, 0x7F, 0x4D, 0xE6, 0x10, 0x01, 0x02, 0x01, 0x03, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x00, 0x00, 0x15, 0x18, 0x00, 0x00, 0x00, 0x00, -0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, -0x00, 0x00, 0x1C, 0x20, 0x01, 0x0E, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x01, 0x53, 0x57, 0x41, 0x54, -0x00, 0x53, 0x41, 0x53, 0x54, 0x00, 0x43, 0x41, 0x54, 0x00, 0x57, 0x41, 0x53, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Adak */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0xCB, 0x89, 0x44, 0xD0, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x50, 0x40, 0xFA, 0xD2, 0x55, 0xB0, 0xFE, 0xB8, 0x71, 0x50, -0xFF, 0xA8, 0x54, 0x40, 0x00, 0x98, 0x53, 0x50, 0x01, 0x88, 0x36, 0x40, 0x02, 0x78, 0x35, 0x50, -0x03, 0x71, 0x52, 0xC0, 0x04, 0x61, 0x51, 0xD0, 0x05, 0x51, 0x34, 0xC0, 0x06, 0x41, 0x33, 0xD0, -0x07, 0x31, 0x16, 0xC0, 0x07, 0x8D, 0x6D, 0xD0, 0x09, 0x10, 0xF8, 0xC0, 0x09, 0xAD, 0xE9, 0x50, -0x0A, 0xF0, 0xDA, 0xC0, 0x0B, 0xE0, 0xD9, 0xD0, 0x0C, 0xD9, 0xF7, 0x40, 0x0D, 0xC0, 0xBB, 0xD0, -0x0E, 0xB9, 0xD9, 0x40, 0x0F, 0xA9, 0xD8, 0x50, 0x10, 0x99, 0xBB, 0x40, 0x11, 0x89, 0xBA, 0x50, -0x12, 0x79, 0x9D, 0x40, 0x13, 0x69, 0x9C, 0x50, 0x14, 0x59, 0x7F, 0x40, 0x15, 0x49, 0x7E, 0x50, -0x16, 0x39, 0x61, 0x40, 0x17, 0x29, 0x60, 0x50, 0x18, 0x22, 0x7D, 0xC0, 0x19, 0x09, 0x42, 0x50, -0x1A, 0x02, 0x5F, 0xC0, 0x1A, 0x2B, 0x22, 0x20, 0x1A, 0xF2, 0x50, 0xC0, 0x1B, 0xE2, 0x33, 0xB0, -0x1C, 0xD2, 0x32, 0xC0, 0x1D, 0xC2, 0x15, 0xB0, 0x1E, 0xB2, 0x14, 0xC0, 0x1F, 0xA1, 0xF7, 0xB0, -0x20, 0x76, 0x47, 0x40, 0x21, 0x81, 0xD9, 0xB0, 0x22, 0x56, 0x29, 0x40, 0x23, 0x6A, 0xF6, 0x30, -0x24, 0x36, 0x0B, 0x40, 0x25, 0x4A, 0xD8, 0x30, 0x26, 0x15, 0xED, 0x40, 0x27, 0x2A, 0xBA, 0x30, -0x27, 0xFF, 0x09, 0xC0, 0x29, 0x0A, 0x9C, 0x30, 0x29, 0xDE, 0xEB, 0xC0, 0x2A, 0xEA, 0x7E, 0x30, -0x2B, 0xBE, 0xCD, 0xC0, 0x2C, 0xD3, 0x9A, 0xB0, 0x2D, 0x9E, 0xAF, 0xC0, 0x2E, 0xB3, 0x7C, 0xB0, -0x2F, 0x7E, 0x91, 0xC0, 0x30, 0x93, 0x5E, 0xB0, 0x31, 0x67, 0xAE, 0x40, 0x32, 0x73, 0x40, 0xB0, -0x33, 0x47, 0x90, 0x40, 0x34, 0x53, 0x22, 0xB0, 0x35, 0x27, 0x72, 0x40, 0x36, 0x33, 0x04, 0xB0, -0x37, 0x07, 0x54, 0x40, 0x38, 0x1C, 0x21, 0x30, 0x38, 0xE7, 0x36, 0x40, 0x39, 0xFC, 0x03, 0x30, -0x3A, 0xC7, 0x18, 0x40, 0x3B, 0xDB, 0xE5, 0x30, 0x3C, 0xB0, 0x34, 0xC0, 0x3D, 0xBB, 0xC7, 0x30, -0x3E, 0x90, 0x16, 0xC0, 0x3F, 0x9B, 0xA9, 0x30, 0x40, 0x6F, 0xF8, 0xC0, 0x41, 0x84, 0xC5, 0xB0, -0x42, 0x4F, 0xDA, 0xC0, 0x43, 0x64, 0xA7, 0xB0, 0x44, 0x2F, 0xBC, 0xC0, 0x45, 0x44, 0x89, 0xB0, -0x45, 0xF3, 0xEF, 0x40, 0x47, 0x2D, 0xA6, 0x30, 0x47, 0xD3, 0xD1, 0x40, 0x49, 0x0D, 0x88, 0x30, -0x49, 0xB3, 0xB3, 0x40, 0x4A, 0xED, 0x6A, 0x30, 0x4B, 0x9C, 0xCF, 0xC0, 0x4C, 0xD6, 0x86, 0xB0, -0x4D, 0x7C, 0xB1, 0xC0, 0x4E, 0xB6, 0x68, 0xB0, 0x4F, 0x5C, 0x93, 0xC0, 0x50, 0x96, 0x4A, 0xB0, -0x51, 0x3C, 0x75, 0xC0, 0x52, 0x76, 0x2C, 0xB0, 0x53, 0x1C, 0x57, 0xC0, 0x54, 0x56, 0x0E, 0xB0, -0x54, 0xFC, 0x39, 0xC0, 0x56, 0x35, 0xF0, 0xB0, 0x56, 0xE5, 0x56, 0x40, 0x58, 0x1F, 0x0D, 0x30, -0x58, 0xC5, 0x38, 0x40, 0x59, 0xFE, 0xEF, 0x30, 0x5A, 0xA5, 0x1A, 0x40, 0x5B, 0xDE, 0xD1, 0x30, -0x5C, 0x84, 0xFC, 0x40, 0x5D, 0xBE, 0xB3, 0x30, 0x5E, 0x64, 0xDE, 0x40, 0x5F, 0x9E, 0x95, 0x30, -0x60, 0x4D, 0xFA, 0xC0, 0x61, 0x87, 0xB1, 0xB0, 0x62, 0x2D, 0xDC, 0xC0, 0x63, 0x67, 0x93, 0xB0, -0x64, 0x0D, 0xBE, 0xC0, 0x65, 0x47, 0x75, 0xB0, 0x65, 0xED, 0xA0, 0xC0, 0x67, 0x27, 0x57, 0xB0, -0x67, 0xCD, 0x82, 0xC0, 0x69, 0x07, 0x39, 0xB0, 0x69, 0xAD, 0x64, 0xC0, 0x6A, 0xE7, 0x1B, 0xB0, -0x6B, 0x96, 0x81, 0x40, 0x6C, 0xD0, 0x38, 0x30, 0x6D, 0x76, 0x63, 0x40, 0x6E, 0xB0, 0x1A, 0x30, -0x6F, 0x56, 0x45, 0x40, 0x70, 0x8F, 0xFC, 0x30, 0x71, 0x36, 0x27, 0x40, 0x72, 0x6F, 0xDE, 0x30, -0x73, 0x16, 0x09, 0x40, 0x74, 0x4F, 0xC0, 0x30, 0x74, 0xFF, 0x25, 0xC0, 0x76, 0x38, 0xDC, 0xB0, -0x76, 0xDF, 0x07, 0xC0, 0x78, 0x18, 0xBE, 0xB0, 0x78, 0xBE, 0xE9, 0xC0, 0x79, 0xF8, 0xA0, 0xB0, -0x7A, 0x9E, 0xCB, 0xC0, 0x7B, 0xD8, 0x82, 0xB0, 0x7C, 0x7E, 0xAD, 0xC0, 0x7D, 0xB8, 0x64, 0xB0, -0x7E, 0x5E, 0x8F, 0xC0, 0x7F, 0x98, 0x46, 0xB0, 0x01, 0x02, 0x00, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x05, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x00, 0xFF, 0xFF, 0x73, -0x60, 0x01, 0x04, 0xFF, 0xFF, 0x73, 0x60, 0x01, 0x08, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x0C, 0xFF, -0xFF, 0x73, 0x60, 0x01, 0x10, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x14, 0xFF, 0xFF, 0x81, 0x70, 0x01, -0x19, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x1E, 0x4E, 0x53, 0x54, 0x00, 0x4E, 0x57, 0x54, 0x00, 0x4E, -0x50, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x42, 0x44, 0x54, 0x00, 0x41, 0x48, 0x53, 0x54, 0x00, -0x48, 0x41, 0x44, 0x54, 0x00, 0x48, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Anchorage */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x26, 0xCB, 0x89, 0x36, 0xC0, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x42, 0x30, 0xFA, 0xD2, 0x47, 0xA0, 0xFE, 0xB8, 0x63, 0x40, -0xFF, 0xA8, 0x46, 0x30, 0x00, 0x98, 0x45, 0x40, 0x01, 0x88, 0x28, 0x30, 0x02, 0x78, 0x27, 0x40, -0x03, 0x71, 0x44, 0xB0, 0x04, 0x61, 0x43, 0xC0, 0x05, 0x51, 0x26, 0xB0, 0x06, 0x41, 0x25, 0xC0, -0x07, 0x31, 0x08, 0xB0, 0x07, 0x8D, 0x5F, 0xC0, 0x09, 0x10, 0xEA, 0xB0, 0x09, 0xAD, 0xDB, 0x40, -0x0A, 0xF0, 0xCC, 0xB0, 0x0B, 0xE0, 0xCB, 0xC0, 0x0C, 0xD9, 0xE9, 0x30, 0x0D, 0xC0, 0xAD, 0xC0, -0x0E, 0xB9, 0xCB, 0x30, 0x0F, 0xA9, 0xCA, 0x40, 0x10, 0x99, 0xAD, 0x30, 0x11, 0x89, 0xAC, 0x40, -0x12, 0x79, 0x8F, 0x30, 0x13, 0x69, 0x8E, 0x40, 0x14, 0x59, 0x71, 0x30, 0x15, 0x49, 0x70, 0x40, -0x16, 0x39, 0x53, 0x30, 0x17, 0x29, 0x52, 0x40, 0x18, 0x22, 0x6F, 0xB0, 0x19, 0x09, 0x34, 0x40, -0x1A, 0x02, 0x51, 0xB0, 0x1A, 0x2B, 0x14, 0x10, 0x1A, 0xF2, 0x42, 0xB0, 0x1B, 0xE2, 0x25, 0xA0, -0x1C, 0xD2, 0x24, 0xB0, 0x1D, 0xC2, 0x07, 0xA0, 0x1E, 0xB2, 0x06, 0xB0, 0x1F, 0xA1, 0xE9, 0xA0, -0x20, 0x76, 0x39, 0x30, 0x21, 0x81, 0xCB, 0xA0, 0x22, 0x56, 0x1B, 0x30, 0x23, 0x6A, 0xE8, 0x20, -0x24, 0x35, 0xFD, 0x30, 0x25, 0x4A, 0xCA, 0x20, 0x26, 0x15, 0xDF, 0x30, 0x27, 0x2A, 0xAC, 0x20, -0x27, 0xFE, 0xFB, 0xB0, 0x29, 0x0A, 0x8E, 0x20, 0x29, 0xDE, 0xDD, 0xB0, 0x2A, 0xEA, 0x70, 0x20, -0x2B, 0xBE, 0xBF, 0xB0, 0x2C, 0xD3, 0x8C, 0xA0, 0x2D, 0x9E, 0xA1, 0xB0, 0x2E, 0xB3, 0x6E, 0xA0, -0x2F, 0x7E, 0x83, 0xB0, 0x30, 0x93, 0x50, 0xA0, 0x31, 0x67, 0xA0, 0x30, 0x32, 0x73, 0x32, 0xA0, -0x33, 0x47, 0x82, 0x30, 0x34, 0x53, 0x14, 0xA0, 0x35, 0x27, 0x64, 0x30, 0x36, 0x32, 0xF6, 0xA0, -0x37, 0x07, 0x46, 0x30, 0x38, 0x1C, 0x13, 0x20, 0x38, 0xE7, 0x28, 0x30, 0x39, 0xFB, 0xF5, 0x20, -0x3A, 0xC7, 0x0A, 0x30, 0x3B, 0xDB, 0xD7, 0x20, 0x3C, 0xB0, 0x26, 0xB0, 0x3D, 0xBB, 0xB9, 0x20, -0x3E, 0x90, 0x08, 0xB0, 0x3F, 0x9B, 0x9B, 0x20, 0x40, 0x6F, 0xEA, 0xB0, 0x41, 0x84, 0xB7, 0xA0, -0x42, 0x4F, 0xCC, 0xB0, 0x43, 0x64, 0x99, 0xA0, 0x44, 0x2F, 0xAE, 0xB0, 0x45, 0x44, 0x7B, 0xA0, -0x45, 0xF3, 0xE1, 0x30, 0x47, 0x2D, 0x98, 0x20, 0x47, 0xD3, 0xC3, 0x30, 0x49, 0x0D, 0x7A, 0x20, -0x49, 0xB3, 0xA5, 0x30, 0x4A, 0xED, 0x5C, 0x20, 0x4B, 0x9C, 0xC1, 0xB0, 0x4C, 0xD6, 0x78, 0xA0, -0x4D, 0x7C, 0xA3, 0xB0, 0x4E, 0xB6, 0x5A, 0xA0, 0x4F, 0x5C, 0x85, 0xB0, 0x50, 0x96, 0x3C, 0xA0, -0x51, 0x3C, 0x67, 0xB0, 0x52, 0x76, 0x1E, 0xA0, 0x53, 0x1C, 0x49, 0xB0, 0x54, 0x56, 0x00, 0xA0, -0x54, 0xFC, 0x2B, 0xB0, 0x56, 0x35, 0xE2, 0xA0, 0x56, 0xE5, 0x48, 0x30, 0x58, 0x1E, 0xFF, 0x20, -0x58, 0xC5, 0x2A, 0x30, 0x59, 0xFE, 0xE1, 0x20, 0x5A, 0xA5, 0x0C, 0x30, 0x5B, 0xDE, 0xC3, 0x20, -0x5C, 0x84, 0xEE, 0x30, 0x5D, 0xBE, 0xA5, 0x20, 0x5E, 0x64, 0xD0, 0x30, 0x5F, 0x9E, 0x87, 0x20, -0x60, 0x4D, 0xEC, 0xB0, 0x61, 0x87, 0xA3, 0xA0, 0x62, 0x2D, 0xCE, 0xB0, 0x63, 0x67, 0x85, 0xA0, -0x64, 0x0D, 0xB0, 0xB0, 0x65, 0x47, 0x67, 0xA0, 0x65, 0xED, 0x92, 0xB0, 0x67, 0x27, 0x49, 0xA0, -0x67, 0xCD, 0x74, 0xB0, 0x69, 0x07, 0x2B, 0xA0, 0x69, 0xAD, 0x56, 0xB0, 0x6A, 0xE7, 0x0D, 0xA0, -0x6B, 0x96, 0x73, 0x30, 0x6C, 0xD0, 0x2A, 0x20, 0x6D, 0x76, 0x55, 0x30, 0x6E, 0xB0, 0x0C, 0x20, -0x6F, 0x56, 0x37, 0x30, 0x70, 0x8F, 0xEE, 0x20, 0x71, 0x36, 0x19, 0x30, 0x72, 0x6F, 0xD0, 0x20, -0x73, 0x15, 0xFB, 0x30, 0x74, 0x4F, 0xB2, 0x20, 0x74, 0xFF, 0x17, 0xB0, 0x76, 0x38, 0xCE, 0xA0, -0x76, 0xDE, 0xF9, 0xB0, 0x78, 0x18, 0xB0, 0xA0, 0x78, 0xBE, 0xDB, 0xB0, 0x79, 0xF8, 0x92, 0xA0, -0x7A, 0x9E, 0xBD, 0xB0, 0x7B, 0xD8, 0x74, 0xA0, 0x7C, 0x7E, 0x9F, 0xB0, 0x7D, 0xB8, 0x56, 0xA0, -0x7E, 0x5E, 0x81, 0xB0, 0x7F, 0x98, 0x38, 0xA0, 0x01, 0x02, 0x00, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x05, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x00, 0xFF, 0xFF, 0x81, -0x70, 0x01, 0x04, 0xFF, 0xFF, 0x81, 0x70, 0x01, 0x09, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x0E, 0xFF, -0xFF, 0x81, 0x70, 0x01, 0x13, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x18, 0xFF, 0xFF, 0x8F, 0x80, 0x01, -0x1C, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x21, 0x43, 0x41, 0x54, 0x00, 0x43, 0x41, 0x57, 0x54, 0x00, -0x43, 0x41, 0x50, 0x54, 0x00, 0x41, 0x48, 0x53, 0x54, 0x00, 0x41, 0x48, 0x44, 0x54, 0x00, 0x59, -0x53, 0x54, 0x00, 0x41, 0x4B, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Anguilla */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x93, 0x37, 0x35, 0x20, -0x01, 0xFF, 0xFF, 0xC4, 0xE0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Antigua */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x37, 0x33, 0xF0, -0xDC, 0x42, 0xDC, 0x50, 0x01, 0x02, 0xFF, 0xFF, 0xC6, 0x10, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, -0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, -0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Araguaina */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x74, 0x30, -0xB8, 0x0F, 0x49, 0xE0, 0xB8, 0xFD, 0x40, 0xA0, 0xB9, 0xF1, 0x34, 0x30, 0xBA, 0xDE, 0x74, 0x20, -0xDA, 0x38, 0xAE, 0x30, 0xDA, 0xEB, 0xFA, 0x30, 0xDC, 0x19, 0xE1, 0xB0, 0xDC, 0xB9, 0x59, 0x20, -0xDD, 0xFB, 0x15, 0x30, 0xDE, 0x9B, 0xDE, 0x20, 0xDF, 0xDD, 0x9A, 0x30, 0xE0, 0x54, 0x33, 0x20, -0xF4, 0x97, 0xFF, 0xB0, 0xF5, 0x05, 0x5E, 0x20, 0xF6, 0xC0, 0x64, 0x30, 0xF7, 0x0E, 0x1E, 0xA0, -0xF8, 0x51, 0x2C, 0x30, 0xF8, 0xC7, 0xC5, 0x20, 0xFA, 0x0A, 0xD2, 0xB0, 0xFA, 0xA8, 0xF8, 0xA0, -0xFB, 0xEC, 0x06, 0x30, 0xFC, 0x8B, 0x7D, 0xA0, 0x1D, 0xC9, 0x8E, 0x30, 0x1E, 0x78, 0xD7, 0xA0, -0x1F, 0xA0, 0x35, 0xB0, 0x20, 0x33, 0xCF, 0xA0, 0x21, 0x81, 0x69, 0x30, 0x22, 0x0B, 0xC8, 0xA0, -0x23, 0x58, 0x10, 0xB0, 0x23, 0xE2, 0x70, 0x20, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xD4, 0xC7, 0x20, -0x30, 0x80, 0x79, 0x30, 0x31, 0x1D, 0x4D, 0xA0, 0x32, 0x57, 0x20, 0xB0, 0x33, 0x06, 0x6A, 0x20, -0x34, 0x38, 0x54, 0x30, 0x34, 0xF8, 0xC1, 0x20, 0x36, 0x20, 0x1F, 0x30, 0x36, 0xCF, 0x68, 0xA0, -0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xB8, 0x85, 0x20, 0x39, 0xDF, 0xE3, 0x30, 0x3A, 0x8F, 0x2C, 0xA0, -0x3B, 0xC8, 0xFF, 0xB0, 0x3C, 0x6F, 0x0E, 0xA0, 0x3D, 0xC4, 0x91, 0x30, 0x3E, 0x4E, 0xF0, 0xA0, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0xFF, 0xFF, 0xD2, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, -0xD0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Argentina/Buenos_Aires */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0xA2, 0x92, 0x8F, 0x30, -0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30, -0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30, -0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0, -0xC1, 0x9D, 0x9D, 0x40, 0xC2, 0x3B, 0xC3, 0x30, 0xC3, 0x7E, 0xD0, 0xC0, 0xC4, 0x1C, 0xF6, 0xB0, -0xC5, 0x60, 0x04, 0x40, 0xC5, 0xFE, 0x2A, 0x30, 0xC7, 0x41, 0x37, 0xC0, 0xC7, 0xE0, 0xAF, 0x30, -0xC8, 0x81, 0x94, 0x40, 0xCA, 0x4D, 0xA1, 0xB0, 0xCA, 0xEE, 0x86, 0xC0, 0xCE, 0x4D, 0xFF, 0x30, -0xCE, 0xB0, 0xED, 0xC0, 0xD3, 0x29, 0x35, 0xB0, 0xD4, 0x43, 0x64, 0xC0, 0xF4, 0x3D, 0x08, 0x30, -0xF4, 0x9F, 0xF6, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0x32, 0x10, 0x40, 0xF6, 0xE6, 0x9F, 0xB0, -0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40, 0xFA, 0xD3, 0x36, 0xB0, -0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, 0xFE, 0x9C, 0x35, 0x30, -0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, 0x23, 0x94, 0xB5, 0xB0, -0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30, -0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xF1, 0x30, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30, -0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x02, 0x04, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, -0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, -0x00, 0x04, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Argentina/Catamarca */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30, -0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30, -0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30, -0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0, -0xC1, 0x9D, 0x9D, 0x40, 0xC2, 0x3B, 0xC3, 0x30, 0xC3, 0x7E, 0xD0, 0xC0, 0xC4, 0x1C, 0xF6, 0xB0, -0xC5, 0x60, 0x04, 0x40, 0xC5, 0xFE, 0x2A, 0x30, 0xC7, 0x41, 0x37, 0xC0, 0xC7, 0xE0, 0xAF, 0x30, -0xC8, 0x81, 0x94, 0x40, 0xCA, 0x4D, 0xA1, 0xB0, 0xCA, 0xEE, 0x86, 0xC0, 0xCE, 0x4D, 0xFF, 0x30, -0xCE, 0xB0, 0xED, 0xC0, 0xD3, 0x29, 0x35, 0xB0, 0xD4, 0x43, 0x64, 0xC0, 0xF4, 0x3D, 0x08, 0x30, -0xF4, 0x9F, 0xF6, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0x32, 0x10, 0x40, 0xF6, 0xE6, 0x9F, 0xB0, -0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40, 0xFA, 0xD3, 0x36, 0xB0, -0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, 0xFE, 0x9C, 0x35, 0x30, -0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, 0x23, 0x94, 0xB5, 0xB0, -0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30, -0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xFF, 0x40, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30, -0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x40, 0xBB, 0xF1, 0x30, -0x40, 0xD5, 0x0B, 0xC0, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, 0x04, 0x02, 0x04, 0x05, 0x04, 0xFF, 0xFF, -0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, -0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, -0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, -0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* America/Argentina/ComodRivadavia */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30, -0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30, -0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30, -0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0, -0xC1, 0x9D, 0x9D, 0x40, 0xC2, 0x3B, 0xC3, 0x30, 0xC3, 0x7E, 0xD0, 0xC0, 0xC4, 0x1C, 0xF6, 0xB0, -0xC5, 0x60, 0x04, 0x40, 0xC5, 0xFE, 0x2A, 0x30, 0xC7, 0x41, 0x37, 0xC0, 0xC7, 0xE0, 0xAF, 0x30, -0xC8, 0x81, 0x94, 0x40, 0xCA, 0x4D, 0xA1, 0xB0, 0xCA, 0xEE, 0x86, 0xC0, 0xCE, 0x4D, 0xFF, 0x30, -0xCE, 0xB0, 0xED, 0xC0, 0xD3, 0x29, 0x35, 0xB0, 0xD4, 0x43, 0x64, 0xC0, 0xF4, 0x3D, 0x08, 0x30, -0xF4, 0x9F, 0xF6, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0x32, 0x10, 0x40, 0xF6, 0xE6, 0x9F, 0xB0, -0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40, 0xFA, 0xD3, 0x36, 0xB0, -0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, 0xFE, 0x9C, 0x35, 0x30, -0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, 0x23, 0x94, 0xB5, 0xB0, -0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30, -0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xFF, 0x40, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30, -0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x40, 0xBB, 0xF1, 0x30, -0x40, 0xD5, 0x0B, 0xC0, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, 0x04, 0x02, 0x04, 0x05, 0x04, 0xFF, 0xFF, -0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, -0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, -0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, -0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* America/Argentina/Cordoba */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30, -0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30, -0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30, -0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0, -0xC1, 0x9D, 0x9D, 0x40, 0xC2, 0x3B, 0xC3, 0x30, 0xC3, 0x7E, 0xD0, 0xC0, 0xC4, 0x1C, 0xF6, 0xB0, -0xC5, 0x60, 0x04, 0x40, 0xC5, 0xFE, 0x2A, 0x30, 0xC7, 0x41, 0x37, 0xC0, 0xC7, 0xE0, 0xAF, 0x30, -0xC8, 0x81, 0x94, 0x40, 0xCA, 0x4D, 0xA1, 0xB0, 0xCA, 0xEE, 0x86, 0xC0, 0xCE, 0x4D, 0xFF, 0x30, -0xCE, 0xB0, 0xED, 0xC0, 0xD3, 0x29, 0x35, 0xB0, 0xD4, 0x43, 0x64, 0xC0, 0xF4, 0x3D, 0x08, 0x30, -0xF4, 0x9F, 0xF6, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0x32, 0x10, 0x40, 0xF6, 0xE6, 0x9F, 0xB0, -0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40, 0xFA, 0xD3, 0x36, 0xB0, -0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, 0xFE, 0x9C, 0x35, 0x30, -0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, 0x23, 0x94, 0xB5, 0xB0, -0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30, -0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xFF, 0x40, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30, -0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, -0x03, 0x04, 0x02, 0x04, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, -0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, -0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, -0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Argentina/Jujuy */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x92, 0x8F, 0x30, -0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30, -0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30, -0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0, -0xC1, 0x9D, 0x9D, 0x40, 0xC2, 0x3B, 0xC3, 0x30, 0xC3, 0x7E, 0xD0, 0xC0, 0xC4, 0x1C, 0xF6, 0xB0, -0xC5, 0x60, 0x04, 0x40, 0xC5, 0xFE, 0x2A, 0x30, 0xC7, 0x41, 0x37, 0xC0, 0xC7, 0xE0, 0xAF, 0x30, -0xC8, 0x81, 0x94, 0x40, 0xCA, 0x4D, 0xA1, 0xB0, 0xCA, 0xEE, 0x86, 0xC0, 0xCE, 0x4D, 0xFF, 0x30, -0xCE, 0xB0, 0xED, 0xC0, 0xD3, 0x29, 0x35, 0xB0, 0xD4, 0x43, 0x64, 0xC0, 0xF4, 0x3D, 0x08, 0x30, -0xF4, 0x9F, 0xF6, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0x32, 0x10, 0x40, 0xF6, 0xE6, 0x9F, 0xB0, -0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40, 0xFA, 0xD3, 0x36, 0xB0, -0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, 0xFE, 0x9C, 0x35, 0x30, -0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, 0x23, 0x94, 0xB5, 0xB0, -0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x2A, 0x57, 0xC0, -0x27, 0xE2, 0xDB, 0xB0, 0x28, 0xEE, 0x8A, 0x40, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30, -0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x06, 0x05, 0x03, 0x04, -0x03, 0x04, 0x02, 0x04, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, -0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, -0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x12, 0x43, 0x4D, -0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, -0x57, 0x41, 0x52, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, - -/* America/Argentina/La_Rioja */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30, -0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30, -0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30, -0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0, -0xC1, 0x9D, 0x9D, 0x40, 0xC2, 0x3B, 0xC3, 0x30, 0xC3, 0x7E, 0xD0, 0xC0, 0xC4, 0x1C, 0xF6, 0xB0, -0xC5, 0x60, 0x04, 0x40, 0xC5, 0xFE, 0x2A, 0x30, 0xC7, 0x41, 0x37, 0xC0, 0xC7, 0xE0, 0xAF, 0x30, -0xC8, 0x81, 0x94, 0x40, 0xCA, 0x4D, 0xA1, 0xB0, 0xCA, 0xEE, 0x86, 0xC0, 0xCE, 0x4D, 0xFF, 0x30, -0xCE, 0xB0, 0xED, 0xC0, 0xD3, 0x29, 0x35, 0xB0, 0xD4, 0x43, 0x64, 0xC0, 0xF4, 0x3D, 0x08, 0x30, -0xF4, 0x9F, 0xF6, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0x32, 0x10, 0x40, 0xF6, 0xE6, 0x9F, 0xB0, -0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40, 0xFA, 0xD3, 0x36, 0xB0, -0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, 0xFE, 0x9C, 0x35, 0x30, -0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, 0x23, 0x94, 0xB5, 0xB0, -0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30, -0x27, 0xCD, 0xB5, 0xA0, 0x28, 0x26, 0x26, 0x40, 0x29, 0x00, 0xF1, 0x30, 0x29, 0xB0, 0x3A, 0xA0, -0x2A, 0xE0, 0xD3, 0x30, 0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, -0x40, 0xBB, 0xF1, 0x30, 0x40, 0xD5, 0x0B, 0xC0, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x04, 0x03, 0x04, 0x03, 0x04, 0x02, -0x04, 0x05, 0x04, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, -0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, -0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, -0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Argentina/Mendoza */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x92, 0x8F, 0x30, -0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30, -0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30, -0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0, -0xC1, 0x9D, 0x9D, 0x40, 0xC2, 0x3B, 0xC3, 0x30, 0xC3, 0x7E, 0xD0, 0xC0, 0xC4, 0x1C, 0xF6, 0xB0, -0xC5, 0x60, 0x04, 0x40, 0xC5, 0xFE, 0x2A, 0x30, 0xC7, 0x41, 0x37, 0xC0, 0xC7, 0xE0, 0xAF, 0x30, -0xC8, 0x81, 0x94, 0x40, 0xCA, 0x4D, 0xA1, 0xB0, 0xCA, 0xEE, 0x86, 0xC0, 0xCE, 0x4D, 0xFF, 0x30, -0xCE, 0xB0, 0xED, 0xC0, 0xD3, 0x29, 0x35, 0xB0, 0xD4, 0x43, 0x64, 0xC0, 0xF4, 0x3D, 0x08, 0x30, -0xF4, 0x9F, 0xF6, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0x32, 0x10, 0x40, 0xF6, 0xE6, 0x9F, 0xB0, -0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40, 0xFA, 0xD3, 0x36, 0xB0, -0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, 0xFE, 0x9C, 0x35, 0x30, -0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, 0x23, 0x94, 0xB5, 0xB0, -0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x19, 0x34, 0x40, -0x27, 0xCD, 0xC3, 0xB0, 0x28, 0xFA, 0x67, 0xC0, 0x29, 0xB0, 0x48, 0xB0, 0x2A, 0xE0, 0xE1, 0x40, -0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x40, 0xB0, 0x13, 0xB0, -0x41, 0x56, 0x3E, 0xC0, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x05, 0x06, 0x05, 0x06, 0x05, 0x03, 0x04, 0x02, 0x04, 0x05, 0x04, 0xFF, 0xFF, -0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, -0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, -0x00, 0x0D, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x12, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, -0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x57, 0x41, 0x52, 0x53, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Argentina/Rio_Gallegos */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30, -0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30, -0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30, -0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0, -0xC1, 0x9D, 0x9D, 0x40, 0xC2, 0x3B, 0xC3, 0x30, 0xC3, 0x7E, 0xD0, 0xC0, 0xC4, 0x1C, 0xF6, 0xB0, -0xC5, 0x60, 0x04, 0x40, 0xC5, 0xFE, 0x2A, 0x30, 0xC7, 0x41, 0x37, 0xC0, 0xC7, 0xE0, 0xAF, 0x30, -0xC8, 0x81, 0x94, 0x40, 0xCA, 0x4D, 0xA1, 0xB0, 0xCA, 0xEE, 0x86, 0xC0, 0xCE, 0x4D, 0xFF, 0x30, -0xCE, 0xB0, 0xED, 0xC0, 0xD3, 0x29, 0x35, 0xB0, 0xD4, 0x43, 0x64, 0xC0, 0xF4, 0x3D, 0x08, 0x30, -0xF4, 0x9F, 0xF6, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0x32, 0x10, 0x40, 0xF6, 0xE6, 0x9F, 0xB0, -0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40, 0xFA, 0xD3, 0x36, 0xB0, -0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, 0xFE, 0x9C, 0x35, 0x30, -0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, 0x23, 0x94, 0xB5, 0xB0, -0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30, -0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xF1, 0x30, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30, -0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x40, 0xBB, 0xF1, 0x30, -0x40, 0xD5, 0x0B, 0xC0, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x02, 0x04, 0x05, 0x04, 0xFF, 0xFF, -0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, -0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, -0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, -0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* America/Argentina/San_Juan */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30, -0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30, -0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30, -0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0, -0xC1, 0x9D, 0x9D, 0x40, 0xC2, 0x3B, 0xC3, 0x30, 0xC3, 0x7E, 0xD0, 0xC0, 0xC4, 0x1C, 0xF6, 0xB0, -0xC5, 0x60, 0x04, 0x40, 0xC5, 0xFE, 0x2A, 0x30, 0xC7, 0x41, 0x37, 0xC0, 0xC7, 0xE0, 0xAF, 0x30, -0xC8, 0x81, 0x94, 0x40, 0xCA, 0x4D, 0xA1, 0xB0, 0xCA, 0xEE, 0x86, 0xC0, 0xCE, 0x4D, 0xFF, 0x30, -0xCE, 0xB0, 0xED, 0xC0, 0xD3, 0x29, 0x35, 0xB0, 0xD4, 0x43, 0x64, 0xC0, 0xF4, 0x3D, 0x08, 0x30, -0xF4, 0x9F, 0xF6, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0x32, 0x10, 0x40, 0xF6, 0xE6, 0x9F, 0xB0, -0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40, 0xFA, 0xD3, 0x36, 0xB0, -0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, 0xFE, 0x9C, 0x35, 0x30, -0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, 0x23, 0x94, 0xB5, 0xB0, -0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30, -0x27, 0xCD, 0xB5, 0xA0, 0x28, 0x26, 0x26, 0x40, 0x29, 0x00, 0xF1, 0x30, 0x29, 0xB0, 0x3A, 0xA0, -0x2A, 0xE0, 0xD3, 0x30, 0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, -0x40, 0xBA, 0x9F, 0xB0, 0x41, 0x03, 0x30, 0x40, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x04, 0x03, 0x04, 0x03, 0x04, 0x02, -0x04, 0x05, 0x04, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, -0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, -0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, -0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Argentina/Tucuman */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30, -0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30, -0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30, -0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0, -0xC1, 0x9D, 0x9D, 0x40, 0xC2, 0x3B, 0xC3, 0x30, 0xC3, 0x7E, 0xD0, 0xC0, 0xC4, 0x1C, 0xF6, 0xB0, -0xC5, 0x60, 0x04, 0x40, 0xC5, 0xFE, 0x2A, 0x30, 0xC7, 0x41, 0x37, 0xC0, 0xC7, 0xE0, 0xAF, 0x30, -0xC8, 0x81, 0x94, 0x40, 0xCA, 0x4D, 0xA1, 0xB0, 0xCA, 0xEE, 0x86, 0xC0, 0xCE, 0x4D, 0xFF, 0x30, -0xCE, 0xB0, 0xED, 0xC0, 0xD3, 0x29, 0x35, 0xB0, 0xD4, 0x43, 0x64, 0xC0, 0xF4, 0x3D, 0x08, 0x30, -0xF4, 0x9F, 0xF6, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0x32, 0x10, 0x40, 0xF6, 0xE6, 0x9F, 0xB0, -0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40, 0xFA, 0xD3, 0x36, 0xB0, -0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, 0xFE, 0x9C, 0x35, 0x30, -0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, 0x23, 0x94, 0xB5, 0xB0, -0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30, -0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xFF, 0x40, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30, -0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x40, 0xBB, 0xF1, 0x30, -0x40, 0xCB, 0xD1, 0x40, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, 0x04, 0x02, 0x04, 0x05, 0x04, 0xFF, 0xFF, -0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, -0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, -0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, -0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* America/Argentina/Ushuaia */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30, -0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30, -0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30, -0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0, -0xC1, 0x9D, 0x9D, 0x40, 0xC2, 0x3B, 0xC3, 0x30, 0xC3, 0x7E, 0xD0, 0xC0, 0xC4, 0x1C, 0xF6, 0xB0, -0xC5, 0x60, 0x04, 0x40, 0xC5, 0xFE, 0x2A, 0x30, 0xC7, 0x41, 0x37, 0xC0, 0xC7, 0xE0, 0xAF, 0x30, -0xC8, 0x81, 0x94, 0x40, 0xCA, 0x4D, 0xA1, 0xB0, 0xCA, 0xEE, 0x86, 0xC0, 0xCE, 0x4D, 0xFF, 0x30, -0xCE, 0xB0, 0xED, 0xC0, 0xD3, 0x29, 0x35, 0xB0, 0xD4, 0x43, 0x64, 0xC0, 0xF4, 0x3D, 0x08, 0x30, -0xF4, 0x9F, 0xF6, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0x32, 0x10, 0x40, 0xF6, 0xE6, 0x9F, 0xB0, -0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40, 0xFA, 0xD3, 0x36, 0xB0, -0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, 0xFE, 0x9C, 0x35, 0x30, -0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, 0x23, 0x94, 0xB5, 0xB0, -0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30, -0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xF1, 0x30, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30, -0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x40, 0xB9, 0x4E, 0x30, -0x40, 0xD5, 0x0B, 0xC0, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x02, 0x04, 0x05, 0x04, 0xFF, 0xFF, -0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, -0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, -0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, -0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* America/Aruba */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x1E, 0x2F, 0x38, -0xF6, 0x98, 0xEC, 0x48, 0x01, 0x02, 0xFF, 0xFF, 0xBE, 0x48, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0xB8, -0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4E, 0x54, 0x00, -0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Asuncion */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0D, 0xB8, 0x17, 0xF5, 0x90, -0x05, 0x2B, 0xDA, 0x40, 0x07, 0xFC, 0xF0, 0xB0, 0x0A, 0xCF, 0x74, 0xC0, 0x0B, 0x97, 0xCA, 0xB0, -0x0C, 0xB1, 0xF9, 0xC0, 0x0D, 0x78, 0xFE, 0x30, 0x0E, 0x93, 0x2D, 0x40, 0x0F, 0x5A, 0x31, 0xB0, -0x10, 0x74, 0x60, 0xC0, 0x11, 0x64, 0x43, 0xB0, 0x12, 0x55, 0x94, 0x40, 0x13, 0x46, 0xC8, 0xB0, -0x14, 0x38, 0x19, 0x40, 0x15, 0x27, 0xFC, 0x30, 0x16, 0x19, 0x4C, 0xC0, 0x17, 0x09, 0x2F, 0xB0, -0x17, 0xFA, 0x80, 0x40, 0x18, 0xEA, 0x63, 0x30, 0x19, 0xDB, 0xB3, 0xC0, 0x1A, 0xCC, 0xE8, 0x30, -0x1B, 0xBE, 0x38, 0xC0, 0x1C, 0xAE, 0x1B, 0xB0, 0x1D, 0x9F, 0x6C, 0x40, 0x1E, 0x8F, 0x4F, 0x30, -0x1F, 0x80, 0x9F, 0xC0, 0x20, 0x70, 0x82, 0xB0, 0x21, 0x61, 0xD3, 0x40, 0x22, 0x53, 0x07, 0xB0, -0x23, 0x44, 0x58, 0x40, 0x24, 0x34, 0x3B, 0x30, 0x25, 0x41, 0x3B, 0x40, 0x26, 0x15, 0x6E, 0xB0, -0x27, 0x06, 0xBF, 0x40, 0x27, 0xF6, 0xA2, 0x30, 0x28, 0xEE, 0x8A, 0x40, 0x29, 0xB0, 0x48, 0xB0, -0x2A, 0xCF, 0xBD, 0xC0, 0x2B, 0xB9, 0x09, 0x30, 0x2C, 0xAB, 0xAB, 0x40, 0x2D, 0x70, 0x0C, 0xB0, -0x2E, 0x8C, 0xDE, 0xC0, 0x2F, 0x4F, 0xEE, 0xB0, 0x30, 0x6E, 0x12, 0x40, 0x31, 0x36, 0x68, 0x30, -0x32, 0x57, 0x2E, 0xC0, 0x33, 0x0F, 0xB2, 0xB0, 0x34, 0x37, 0x10, 0xC0, 0x34, 0xF8, 0xCF, 0x30, -0x36, 0x16, 0xF2, 0xC0, 0x36, 0xE1, 0xEB, 0xB0, 0x37, 0xF6, 0xD4, 0xC0, 0x38, 0xC1, 0xCD, 0xB0, -0x39, 0xD6, 0xB6, 0xC0, 0x3A, 0xA1, 0xAF, 0xB0, 0x3B, 0xBF, 0xD3, 0x40, 0x3C, 0xAF, 0xB6, 0x30, -0x3D, 0x71, 0x90, 0xC0, 0x3E, 0x8F, 0x98, 0x30, 0x3F, 0x5A, 0xAD, 0x40, 0x40, 0x6F, 0x7A, 0x30, -0x41, 0x71, 0xEE, 0x40, 0x42, 0x33, 0xAC, 0xB0, 0x43, 0x51, 0xD0, 0x40, 0x44, 0x13, 0x8E, 0xB0, -0x45, 0x31, 0xB2, 0x40, 0x45, 0xF3, 0x70, 0xB0, 0x47, 0x1A, 0xCE, 0xC0, 0x47, 0xD3, 0x52, 0xB0, -0x48, 0xFA, 0xB0, 0xC0, 0x49, 0xB3, 0x34, 0xB0, 0x4A, 0xDA, 0x92, 0xC0, 0x4B, 0x9C, 0x51, 0x30, -0x4C, 0xBA, 0x74, 0xC0, 0x4D, 0x7C, 0x33, 0x30, 0x4E, 0x9A, 0x56, 0xC0, 0x4F, 0x5C, 0x15, 0x30, -0x50, 0x83, 0x73, 0x40, 0x51, 0x3B, 0xF7, 0x30, 0x52, 0x63, 0x55, 0x40, 0x53, 0x1B, 0xD9, 0x30, -0x54, 0x43, 0x37, 0x40, 0x54, 0xFB, 0xBB, 0x30, 0x56, 0x23, 0x19, 0x40, 0x56, 0xE4, 0xD7, 0xB0, -0x58, 0x02, 0xFB, 0x40, 0x58, 0xC4, 0xB9, 0xB0, 0x59, 0xE2, 0xDD, 0x40, 0x5A, 0xA4, 0x9B, 0xB0, -0x5B, 0xCB, 0xF9, 0xC0, 0x5C, 0x84, 0x7D, 0xB0, 0x5D, 0xAB, 0xDB, 0xC0, 0x5E, 0x64, 0x5F, 0xB0, -0x5F, 0x8B, 0xBD, 0xC0, 0x60, 0x4D, 0x7C, 0x30, 0x61, 0x6B, 0x9F, 0xC0, 0x62, 0x2D, 0x5E, 0x30, -0x63, 0x4B, 0x81, 0xC0, 0x64, 0x0D, 0x40, 0x30, 0x65, 0x2B, 0x63, 0xC0, 0x65, 0xED, 0x22, 0x30, -0x67, 0x14, 0x80, 0x40, 0x67, 0xCD, 0x04, 0x30, 0x68, 0xF4, 0x62, 0x40, 0x69, 0xAC, 0xE6, 0x30, -0x6A, 0xD4, 0x44, 0x40, 0x6B, 0x96, 0x02, 0xB0, 0x6C, 0xB4, 0x26, 0x40, 0x6D, 0x75, 0xE4, 0xB0, -0x6E, 0x94, 0x08, 0x40, 0x6F, 0x55, 0xC6, 0xB0, 0x70, 0x7D, 0x24, 0xC0, 0x71, 0x35, 0xA8, 0xB0, -0x72, 0x5D, 0x06, 0xC0, 0x73, 0x15, 0x8A, 0xB0, 0x74, 0x3C, 0xE8, 0xC0, 0x74, 0xFE, 0xA7, 0x30, -0x76, 0x1C, 0xCA, 0xC0, 0x76, 0xDE, 0x89, 0x30, 0x77, 0xFC, 0xAC, 0xC0, 0x78, 0xBE, 0x6B, 0x30, -0x79, 0xDC, 0x8E, 0xC0, 0x7A, 0x9E, 0x4D, 0x30, 0x7B, 0xC5, 0xAB, 0x40, 0x7C, 0x7E, 0x2F, 0x30, -0x7D, 0xA5, 0x8D, 0x40, 0x7E, 0x5E, 0x11, 0x30, 0x7F, 0x85, 0x6F, 0x40, 0x01, 0x02, 0x01, 0x03, -0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, -0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, -0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, -0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, -0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, -0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, -0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, -0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0xFF, 0xFF, 0xC9, 0xF0, -0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, -0xD5, 0xD0, 0x01, 0x08, 0x41, 0x4D, 0x54, 0x00, 0x50, 0x59, 0x54, 0x00, 0x50, 0x59, 0x53, 0x54, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Atikokan */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x9E, 0xB8, 0xA1, 0x80, -0x9F, 0xC0, 0x3F, 0x70, 0xC8, 0xF8, 0x57, 0x60, 0xCB, 0x88, 0xFE, 0x80, 0xD2, 0x23, 0xF4, 0x70, -0xD2, 0x61, 0x09, 0xF0, 0x00, 0x01, 0x00, 0x02, 0x03, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, -0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, -0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, -0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, -0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - -/* America/Atka */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0xCB, 0x89, 0x44, 0xD0, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x50, 0x40, 0xFA, 0xD2, 0x55, 0xB0, 0xFE, 0xB8, 0x71, 0x50, -0xFF, 0xA8, 0x54, 0x40, 0x00, 0x98, 0x53, 0x50, 0x01, 0x88, 0x36, 0x40, 0x02, 0x78, 0x35, 0x50, -0x03, 0x71, 0x52, 0xC0, 0x04, 0x61, 0x51, 0xD0, 0x05, 0x51, 0x34, 0xC0, 0x06, 0x41, 0x33, 0xD0, -0x07, 0x31, 0x16, 0xC0, 0x07, 0x8D, 0x6D, 0xD0, 0x09, 0x10, 0xF8, 0xC0, 0x09, 0xAD, 0xE9, 0x50, -0x0A, 0xF0, 0xDA, 0xC0, 0x0B, 0xE0, 0xD9, 0xD0, 0x0C, 0xD9, 0xF7, 0x40, 0x0D, 0xC0, 0xBB, 0xD0, -0x0E, 0xB9, 0xD9, 0x40, 0x0F, 0xA9, 0xD8, 0x50, 0x10, 0x99, 0xBB, 0x40, 0x11, 0x89, 0xBA, 0x50, -0x12, 0x79, 0x9D, 0x40, 0x13, 0x69, 0x9C, 0x50, 0x14, 0x59, 0x7F, 0x40, 0x15, 0x49, 0x7E, 0x50, -0x16, 0x39, 0x61, 0x40, 0x17, 0x29, 0x60, 0x50, 0x18, 0x22, 0x7D, 0xC0, 0x19, 0x09, 0x42, 0x50, -0x1A, 0x02, 0x5F, 0xC0, 0x1A, 0x2B, 0x22, 0x20, 0x1A, 0xF2, 0x50, 0xC0, 0x1B, 0xE2, 0x33, 0xB0, -0x1C, 0xD2, 0x32, 0xC0, 0x1D, 0xC2, 0x15, 0xB0, 0x1E, 0xB2, 0x14, 0xC0, 0x1F, 0xA1, 0xF7, 0xB0, -0x20, 0x76, 0x47, 0x40, 0x21, 0x81, 0xD9, 0xB0, 0x22, 0x56, 0x29, 0x40, 0x23, 0x6A, 0xF6, 0x30, -0x24, 0x36, 0x0B, 0x40, 0x25, 0x4A, 0xD8, 0x30, 0x26, 0x15, 0xED, 0x40, 0x27, 0x2A, 0xBA, 0x30, -0x27, 0xFF, 0x09, 0xC0, 0x29, 0x0A, 0x9C, 0x30, 0x29, 0xDE, 0xEB, 0xC0, 0x2A, 0xEA, 0x7E, 0x30, -0x2B, 0xBE, 0xCD, 0xC0, 0x2C, 0xD3, 0x9A, 0xB0, 0x2D, 0x9E, 0xAF, 0xC0, 0x2E, 0xB3, 0x7C, 0xB0, -0x2F, 0x7E, 0x91, 0xC0, 0x30, 0x93, 0x5E, 0xB0, 0x31, 0x67, 0xAE, 0x40, 0x32, 0x73, 0x40, 0xB0, -0x33, 0x47, 0x90, 0x40, 0x34, 0x53, 0x22, 0xB0, 0x35, 0x27, 0x72, 0x40, 0x36, 0x33, 0x04, 0xB0, -0x37, 0x07, 0x54, 0x40, 0x38, 0x1C, 0x21, 0x30, 0x38, 0xE7, 0x36, 0x40, 0x39, 0xFC, 0x03, 0x30, -0x3A, 0xC7, 0x18, 0x40, 0x3B, 0xDB, 0xE5, 0x30, 0x3C, 0xB0, 0x34, 0xC0, 0x3D, 0xBB, 0xC7, 0x30, -0x3E, 0x90, 0x16, 0xC0, 0x3F, 0x9B, 0xA9, 0x30, 0x40, 0x6F, 0xF8, 0xC0, 0x41, 0x84, 0xC5, 0xB0, -0x42, 0x4F, 0xDA, 0xC0, 0x43, 0x64, 0xA7, 0xB0, 0x44, 0x2F, 0xBC, 0xC0, 0x45, 0x44, 0x89, 0xB0, -0x45, 0xF3, 0xEF, 0x40, 0x47, 0x2D, 0xA6, 0x30, 0x47, 0xD3, 0xD1, 0x40, 0x49, 0x0D, 0x88, 0x30, -0x49, 0xB3, 0xB3, 0x40, 0x4A, 0xED, 0x6A, 0x30, 0x4B, 0x9C, 0xCF, 0xC0, 0x4C, 0xD6, 0x86, 0xB0, -0x4D, 0x7C, 0xB1, 0xC0, 0x4E, 0xB6, 0x68, 0xB0, 0x4F, 0x5C, 0x93, 0xC0, 0x50, 0x96, 0x4A, 0xB0, -0x51, 0x3C, 0x75, 0xC0, 0x52, 0x76, 0x2C, 0xB0, 0x53, 0x1C, 0x57, 0xC0, 0x54, 0x56, 0x0E, 0xB0, -0x54, 0xFC, 0x39, 0xC0, 0x56, 0x35, 0xF0, 0xB0, 0x56, 0xE5, 0x56, 0x40, 0x58, 0x1F, 0x0D, 0x30, -0x58, 0xC5, 0x38, 0x40, 0x59, 0xFE, 0xEF, 0x30, 0x5A, 0xA5, 0x1A, 0x40, 0x5B, 0xDE, 0xD1, 0x30, -0x5C, 0x84, 0xFC, 0x40, 0x5D, 0xBE, 0xB3, 0x30, 0x5E, 0x64, 0xDE, 0x40, 0x5F, 0x9E, 0x95, 0x30, -0x60, 0x4D, 0xFA, 0xC0, 0x61, 0x87, 0xB1, 0xB0, 0x62, 0x2D, 0xDC, 0xC0, 0x63, 0x67, 0x93, 0xB0, -0x64, 0x0D, 0xBE, 0xC0, 0x65, 0x47, 0x75, 0xB0, 0x65, 0xED, 0xA0, 0xC0, 0x67, 0x27, 0x57, 0xB0, -0x67, 0xCD, 0x82, 0xC0, 0x69, 0x07, 0x39, 0xB0, 0x69, 0xAD, 0x64, 0xC0, 0x6A, 0xE7, 0x1B, 0xB0, -0x6B, 0x96, 0x81, 0x40, 0x6C, 0xD0, 0x38, 0x30, 0x6D, 0x76, 0x63, 0x40, 0x6E, 0xB0, 0x1A, 0x30, -0x6F, 0x56, 0x45, 0x40, 0x70, 0x8F, 0xFC, 0x30, 0x71, 0x36, 0x27, 0x40, 0x72, 0x6F, 0xDE, 0x30, -0x73, 0x16, 0x09, 0x40, 0x74, 0x4F, 0xC0, 0x30, 0x74, 0xFF, 0x25, 0xC0, 0x76, 0x38, 0xDC, 0xB0, -0x76, 0xDF, 0x07, 0xC0, 0x78, 0x18, 0xBE, 0xB0, 0x78, 0xBE, 0xE9, 0xC0, 0x79, 0xF8, 0xA0, 0xB0, -0x7A, 0x9E, 0xCB, 0xC0, 0x7B, 0xD8, 0x82, 0xB0, 0x7C, 0x7E, 0xAD, 0xC0, 0x7D, 0xB8, 0x64, 0xB0, -0x7E, 0x5E, 0x8F, 0xC0, 0x7F, 0x98, 0x46, 0xB0, 0x01, 0x02, 0x00, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x05, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x00, 0xFF, 0xFF, 0x73, -0x60, 0x01, 0x04, 0xFF, 0xFF, 0x73, 0x60, 0x01, 0x08, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x0C, 0xFF, -0xFF, 0x73, 0x60, 0x01, 0x10, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x14, 0xFF, 0xFF, 0x81, 0x70, 0x01, -0x19, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x1E, 0x4E, 0x53, 0x54, 0x00, 0x4E, 0x57, 0x54, 0x00, 0x4E, -0x50, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x42, 0x44, 0x54, 0x00, 0x41, 0x48, 0x53, 0x54, 0x00, -0x48, 0x41, 0x44, 0x54, 0x00, 0x48, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Bahia */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x6B, 0x1C, -0xB8, 0x0F, 0x49, 0xE0, 0xB8, 0xFD, 0x40, 0xA0, 0xB9, 0xF1, 0x34, 0x30, 0xBA, 0xDE, 0x74, 0x20, -0xDA, 0x38, 0xAE, 0x30, 0xDA, 0xEB, 0xFA, 0x30, 0xDC, 0x19, 0xE1, 0xB0, 0xDC, 0xB9, 0x59, 0x20, -0xDD, 0xFB, 0x15, 0x30, 0xDE, 0x9B, 0xDE, 0x20, 0xDF, 0xDD, 0x9A, 0x30, 0xE0, 0x54, 0x33, 0x20, -0xF4, 0x97, 0xFF, 0xB0, 0xF5, 0x05, 0x5E, 0x20, 0xF6, 0xC0, 0x64, 0x30, 0xF7, 0x0E, 0x1E, 0xA0, -0xF8, 0x51, 0x2C, 0x30, 0xF8, 0xC7, 0xC5, 0x20, 0xFA, 0x0A, 0xD2, 0xB0, 0xFA, 0xA8, 0xF8, 0xA0, -0xFB, 0xEC, 0x06, 0x30, 0xFC, 0x8B, 0x7D, 0xA0, 0x1D, 0xC9, 0x8E, 0x30, 0x1E, 0x78, 0xD7, 0xA0, -0x1F, 0xA0, 0x35, 0xB0, 0x20, 0x33, 0xCF, 0xA0, 0x21, 0x81, 0x69, 0x30, 0x22, 0x0B, 0xC8, 0xA0, -0x23, 0x58, 0x10, 0xB0, 0x23, 0xE2, 0x70, 0x20, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xD4, 0xC7, 0x20, -0x27, 0x21, 0x0F, 0x30, 0x27, 0xBD, 0xE3, 0xA0, 0x29, 0x00, 0xF1, 0x30, 0x29, 0x94, 0x8B, 0x20, -0x2A, 0xEA, 0x0D, 0xB0, 0x2B, 0x6B, 0x32, 0xA0, 0x2C, 0xC0, 0xB5, 0x30, 0x2D, 0x66, 0xC4, 0x20, -0x2E, 0xA0, 0x97, 0x30, 0x2F, 0x46, 0xA6, 0x20, 0x30, 0x80, 0x79, 0x30, 0x31, 0x1D, 0x4D, 0xA0, -0x32, 0x57, 0x20, 0xB0, 0x33, 0x06, 0x6A, 0x20, 0x34, 0x38, 0x54, 0x30, 0x34, 0xF8, 0xC1, 0x20, -0x36, 0x20, 0x1F, 0x30, 0x36, 0xCF, 0x68, 0xA0, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xB8, 0x85, 0x20, -0x39, 0xDF, 0xE3, 0x30, 0x3A, 0x8F, 0x2C, 0xA0, 0x3B, 0xC8, 0xFF, 0xB0, 0x3C, 0x6F, 0x0E, 0xA0, -0x3D, 0xC4, 0x91, 0x30, 0x3E, 0x4E, 0xF0, 0xA0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0xFF, 0xFF, 0xDB, 0xE4, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, -0xFF, 0xD5, 0xD0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52, -0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Barbados */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0xA9, 0x79, 0x24, 0xE4, -0xB8, 0x85, 0x63, 0xE4, 0x0E, 0x00, 0xF2, 0xE0, 0x0E, 0x94, 0x8C, 0xD0, 0x0F, 0x97, 0x00, 0xE0, -0x10, 0x74, 0x6E, 0xD0, 0x11, 0x76, 0xE2, 0xE0, 0x12, 0x54, 0x50, 0xD0, 0x13, 0x5F, 0xFF, 0x60, -0x14, 0x30, 0x3E, 0x50, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0xFF, 0xFF, -0xC8, 0x1C, 0x00, 0x00, 0xFF, 0xFF, 0xC8, 0x1C, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, -0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x4D, 0x54, 0x00, 0x41, 0x44, -0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Belem */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x74, 0x74, -0xB8, 0x0F, 0x49, 0xE0, 0xB8, 0xFD, 0x40, 0xA0, 0xB9, 0xF1, 0x34, 0x30, 0xBA, 0xDE, 0x74, 0x20, -0xDA, 0x38, 0xAE, 0x30, 0xDA, 0xEB, 0xFA, 0x30, 0xDC, 0x19, 0xE1, 0xB0, 0xDC, 0xB9, 0x59, 0x20, -0xDD, 0xFB, 0x15, 0x30, 0xDE, 0x9B, 0xDE, 0x20, 0xDF, 0xDD, 0x9A, 0x30, 0xE0, 0x54, 0x33, 0x20, -0xF4, 0x97, 0xFF, 0xB0, 0xF5, 0x05, 0x5E, 0x20, 0xF6, 0xC0, 0x64, 0x30, 0xF7, 0x0E, 0x1E, 0xA0, -0xF8, 0x51, 0x2C, 0x30, 0xF8, 0xC7, 0xC5, 0x20, 0xFA, 0x0A, 0xD2, 0xB0, 0xFA, 0xA8, 0xF8, 0xA0, -0xFB, 0xEC, 0x06, 0x30, 0xFC, 0x8B, 0x7D, 0xA0, 0x1D, 0xC9, 0x8E, 0x30, 0x1E, 0x78, 0xD7, 0xA0, -0x1F, 0xA0, 0x35, 0xB0, 0x20, 0x33, 0xCF, 0xA0, 0x21, 0x81, 0x69, 0x30, 0x22, 0x0B, 0xC8, 0xA0, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xD2, -0x8C, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x09, 0x4C, -0x4D, 0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, - -/* America/Belize */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x93, 0x5E, 0xD9, 0xB0, -0x9F, 0x9F, 0x3B, 0xE0, 0xA0, 0x45, 0x51, 0xD8, 0xA1, 0x7F, 0x1D, 0xE0, 0xA2, 0x2E, 0x6E, 0x58, -0xA3, 0x5E, 0xFF, 0xE0, 0xA4, 0x0E, 0x50, 0x58, 0xA5, 0x3E, 0xE1, 0xE0, 0xA5, 0xEE, 0x32, 0x58, -0xA7, 0x27, 0xFE, 0x60, 0xA7, 0xCE, 0x14, 0x58, 0xA9, 0x07, 0xE0, 0x60, 0xA9, 0xAD, 0xF6, 0x58, -0xAA, 0xE7, 0xC2, 0x60, 0xAB, 0x97, 0x12, 0xD8, 0xAC, 0xC7, 0xA4, 0x60, 0xAD, 0x76, 0xF4, 0xD8, -0xAE, 0xA7, 0x86, 0x60, 0xAF, 0x56, 0xD6, 0xD8, 0xB0, 0x87, 0x68, 0x60, 0xB1, 0x36, 0xB8, 0xD8, -0xB2, 0x70, 0x84, 0xE0, 0xB3, 0x16, 0x9A, 0xD8, 0xB4, 0x50, 0x66, 0xE0, 0xB4, 0xF6, 0x7C, 0xD8, -0xB6, 0x30, 0x48, 0xE0, 0xB6, 0xDF, 0x99, 0x58, 0xB8, 0x10, 0x2A, 0xE0, 0xB8, 0xBF, 0x7B, 0x58, -0xB9, 0xF0, 0x0C, 0xE0, 0xBA, 0x9F, 0x5D, 0x58, 0xBB, 0xD9, 0x29, 0x60, 0xBC, 0x7F, 0x3F, 0x58, -0xBD, 0xB9, 0x0B, 0x60, 0xBE, 0x5F, 0x21, 0x58, 0xBF, 0x98, 0xED, 0x60, 0xC0, 0x3F, 0x03, 0x58, -0xC1, 0x78, 0xCF, 0x60, 0xC2, 0x28, 0x1F, 0xD8, 0xC3, 0x58, 0xB1, 0x60, 0xC4, 0x08, 0x01, 0xD8, -0xC5, 0x38, 0x93, 0x60, 0xC5, 0xE7, 0xE3, 0xD8, 0xC7, 0x21, 0xAF, 0xE0, 0xC7, 0xC7, 0xC5, 0xD8, -0xC9, 0x01, 0x91, 0xE0, 0xC9, 0xA7, 0xA7, 0xD8, 0xCA, 0xE1, 0x73, 0xE0, 0xCB, 0x90, 0xC4, 0x58, -0xCC, 0xC1, 0x55, 0xE0, 0xCD, 0x70, 0xA6, 0x58, 0x07, 0x62, 0xDB, 0x60, 0x07, 0xB9, 0xD0, 0x50, -0x18, 0x61, 0x71, 0x60, 0x18, 0xAB, 0x37, 0x50, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0xFF, -0xFF, 0xAD, 0x50, 0x00, 0x00, 0xFF, 0xFF, 0xB2, 0xA8, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, -0x09, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x48, 0x44, 0x54, 0x00, -0x43, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* America/Blanc-Sablon */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xB8, 0x85, 0x60, -0x9F, 0xC0, 0x23, 0x50, 0xCB, 0x88, 0xE2, 0x60, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xED, 0xD0, -0x00, 0x01, 0x02, 0x03, 0x01, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, -0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x0C, 0x41, 0x44, 0x54, -0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x57, 0x54, 0x00, 0x41, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, 0x00, 0x00, 0x01, - -/* America/Boa_Vista */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x7F, 0xE0, -0xB8, 0x0F, 0x57, 0xF0, 0xB8, 0xFD, 0x4E, 0xB0, 0xB9, 0xF1, 0x42, 0x40, 0xBA, 0xDE, 0x82, 0x30, -0xDA, 0x38, 0xBC, 0x40, 0xDA, 0xEC, 0x08, 0x40, 0xDC, 0x19, 0xEF, 0xC0, 0xDC, 0xB9, 0x67, 0x30, -0xDD, 0xFB, 0x23, 0x40, 0xDE, 0x9B, 0xEC, 0x30, 0xDF, 0xDD, 0xA8, 0x40, 0xE0, 0x54, 0x41, 0x30, -0xF4, 0x98, 0x0D, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0xC0, 0x72, 0x40, 0xF7, 0x0E, 0x2C, 0xB0, -0xF8, 0x51, 0x3A, 0x40, 0xF8, 0xC7, 0xD3, 0x30, 0xFA, 0x0A, 0xE0, 0xC0, 0xFA, 0xA9, 0x06, 0xB0, -0xFB, 0xEC, 0x14, 0x40, 0xFC, 0x8B, 0x8B, 0xB0, 0x1D, 0xC9, 0x9C, 0x40, 0x1E, 0x78, 0xE5, 0xB0, -0x1F, 0xA0, 0x43, 0xC0, 0x20, 0x33, 0xDD, 0xB0, 0x21, 0x81, 0x77, 0x40, 0x22, 0x0B, 0xD6, 0xB0, -0x37, 0xF6, 0xD4, 0xC0, 0x38, 0xB8, 0x93, 0x30, 0x39, 0xDF, 0xF1, 0x40, 0x39, 0xE9, 0x1D, 0xB0, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0xFF, 0xFF, 0xC7, 0x20, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, -0xC0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Bogota */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x98, 0x58, 0x55, 0x74, -0x2A, 0x03, 0x73, 0x50, 0x2B, 0xBE, 0x5D, 0x40, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xBA, 0x8C, 0x00, -0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0x42, 0x4D, 0x54, -0x00, 0x43, 0x4F, 0x53, 0x54, 0x00, 0x43, 0x4F, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* America/Boise */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x48, 0xA0, -0x9F, 0xBB, 0x15, 0x90, 0xA0, 0x86, 0x2A, 0xA0, 0xA1, 0x9A, 0xF7, 0x90, 0xA8, 0x46, 0x4C, 0x20, -0xCB, 0x89, 0x0C, 0x90, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x18, 0x00, 0xFA, 0xF8, 0x75, 0x10, -0xFB, 0xE8, 0x58, 0x00, 0xFC, 0xD8, 0x57, 0x10, 0xFD, 0xC8, 0x3A, 0x00, 0xFE, 0xB8, 0x39, 0x10, -0xFF, 0xA8, 0x1C, 0x00, 0x00, 0x98, 0x1B, 0x10, 0x01, 0x87, 0xFE, 0x00, 0x02, 0x77, 0xFD, 0x10, -0x03, 0x71, 0x1A, 0x80, 0x04, 0x61, 0x19, 0x90, 0x05, 0x50, 0xFC, 0x80, 0x06, 0x40, 0xFB, 0x90, -0x07, 0x30, 0xDE, 0x80, 0x07, 0xB2, 0x1F, 0x90, 0x09, 0x10, 0xC0, 0x80, 0x09, 0xAD, 0xB1, 0x10, -0x0A, 0xF0, 0xA2, 0x80, 0x0B, 0xE0, 0xA1, 0x90, 0x0C, 0xD9, 0xBF, 0x00, 0x0D, 0xC0, 0x83, 0x90, -0x0E, 0xB9, 0xA1, 0x00, 0x0F, 0xA9, 0xA0, 0x10, 0x10, 0x99, 0x83, 0x00, 0x11, 0x89, 0x82, 0x10, -0x12, 0x79, 0x65, 0x00, 0x13, 0x69, 0x64, 0x10, 0x14, 0x59, 0x47, 0x00, 0x15, 0x49, 0x46, 0x10, -0x16, 0x39, 0x29, 0x00, 0x17, 0x29, 0x28, 0x10, 0x18, 0x22, 0x45, 0x80, 0x19, 0x09, 0x0A, 0x10, -0x1A, 0x02, 0x27, 0x80, 0x1A, 0xF2, 0x26, 0x90, 0x1B, 0xE2, 0x09, 0x80, 0x1C, 0xD2, 0x08, 0x90, -0x1D, 0xC1, 0xEB, 0x80, 0x1E, 0xB1, 0xEA, 0x90, 0x1F, 0xA1, 0xCD, 0x80, 0x20, 0x76, 0x1D, 0x10, -0x21, 0x81, 0xAF, 0x80, 0x22, 0x55, 0xFF, 0x10, 0x23, 0x6A, 0xCC, 0x00, 0x24, 0x35, 0xE1, 0x10, -0x25, 0x4A, 0xAE, 0x00, 0x26, 0x15, 0xC3, 0x10, 0x27, 0x2A, 0x90, 0x00, 0x27, 0xFE, 0xDF, 0x90, -0x29, 0x0A, 0x72, 0x00, 0x29, 0xDE, 0xC1, 0x90, 0x2A, 0xEA, 0x54, 0x00, 0x2B, 0xBE, 0xA3, 0x90, -0x2C, 0xD3, 0x70, 0x80, 0x2D, 0x9E, 0x85, 0x90, 0x2E, 0xB3, 0x52, 0x80, 0x2F, 0x7E, 0x67, 0x90, -0x30, 0x93, 0x34, 0x80, 0x31, 0x67, 0x84, 0x10, 0x32, 0x73, 0x16, 0x80, 0x33, 0x47, 0x66, 0x10, -0x34, 0x52, 0xF8, 0x80, 0x35, 0x27, 0x48, 0x10, 0x36, 0x32, 0xDA, 0x80, 0x37, 0x07, 0x2A, 0x10, -0x38, 0x1B, 0xF7, 0x00, 0x38, 0xE7, 0x0C, 0x10, 0x39, 0xFB, 0xD9, 0x00, 0x3A, 0xC6, 0xEE, 0x10, -0x3B, 0xDB, 0xBB, 0x00, 0x3C, 0xB0, 0x0A, 0x90, 0x3D, 0xBB, 0x9D, 0x00, 0x3E, 0x8F, 0xEC, 0x90, -0x3F, 0x9B, 0x7F, 0x00, 0x40, 0x6F, 0xCE, 0x90, 0x41, 0x84, 0x9B, 0x80, 0x42, 0x4F, 0xB0, 0x90, -0x43, 0x64, 0x7D, 0x80, 0x44, 0x2F, 0x92, 0x90, 0x45, 0x44, 0x5F, 0x80, 0x45, 0xF3, 0xC5, 0x10, -0x47, 0x2D, 0x7C, 0x00, 0x47, 0xD3, 0xA7, 0x10, 0x49, 0x0D, 0x5E, 0x00, 0x49, 0xB3, 0x89, 0x10, -0x4A, 0xED, 0x40, 0x00, 0x4B, 0x9C, 0xA5, 0x90, 0x4C, 0xD6, 0x5C, 0x80, 0x4D, 0x7C, 0x87, 0x90, -0x4E, 0xB6, 0x3E, 0x80, 0x4F, 0x5C, 0x69, 0x90, 0x50, 0x96, 0x20, 0x80, 0x51, 0x3C, 0x4B, 0x90, -0x52, 0x76, 0x02, 0x80, 0x53, 0x1C, 0x2D, 0x90, 0x54, 0x55, 0xE4, 0x80, 0x54, 0xFC, 0x0F, 0x90, -0x56, 0x35, 0xC6, 0x80, 0x56, 0xE5, 0x2C, 0x10, 0x58, 0x1E, 0xE3, 0x00, 0x58, 0xC5, 0x0E, 0x10, -0x59, 0xFE, 0xC5, 0x00, 0x5A, 0xA4, 0xF0, 0x10, 0x5B, 0xDE, 0xA7, 0x00, 0x5C, 0x84, 0xD2, 0x10, -0x5D, 0xBE, 0x89, 0x00, 0x5E, 0x64, 0xB4, 0x10, 0x5F, 0x9E, 0x6B, 0x00, 0x60, 0x4D, 0xD0, 0x90, -0x61, 0x87, 0x87, 0x80, 0x62, 0x2D, 0xB2, 0x90, 0x63, 0x67, 0x69, 0x80, 0x64, 0x0D, 0x94, 0x90, -0x65, 0x47, 0x4B, 0x80, 0x65, 0xED, 0x76, 0x90, 0x67, 0x27, 0x2D, 0x80, 0x67, 0xCD, 0x58, 0x90, -0x69, 0x07, 0x0F, 0x80, 0x69, 0xAD, 0x3A, 0x90, 0x6A, 0xE6, 0xF1, 0x80, 0x6B, 0x96, 0x57, 0x10, -0x6C, 0xD0, 0x0E, 0x00, 0x6D, 0x76, 0x39, 0x10, 0x6E, 0xAF, 0xF0, 0x00, 0x6F, 0x56, 0x1B, 0x10, -0x70, 0x8F, 0xD2, 0x00, 0x71, 0x35, 0xFD, 0x10, 0x72, 0x6F, 0xB4, 0x00, 0x73, 0x15, 0xDF, 0x10, -0x74, 0x4F, 0x96, 0x00, 0x74, 0xFE, 0xFB, 0x90, 0x76, 0x38, 0xB2, 0x80, 0x76, 0xDE, 0xDD, 0x90, -0x78, 0x18, 0x94, 0x80, 0x78, 0xBE, 0xBF, 0x90, 0x79, 0xF8, 0x76, 0x80, 0x7A, 0x9E, 0xA1, 0x90, -0x7B, 0xD8, 0x58, 0x80, 0x7C, 0x7E, 0x83, 0x90, 0x7D, 0xB8, 0x3A, 0x80, 0x7E, 0x5E, 0x65, 0x90, -0x7F, 0x98, 0x1C, 0x80, 0x00, 0x01, 0x00, 0x01, 0x04, 0x02, 0x03, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x00, -0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF, 0xFF, 0xAB, 0xA0, -0x01, 0x0C, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x10, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x14, 0x50, 0x44, -0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x4D, 0x53, -0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, -0x00, 0x00, - -/* America/Buenos_Aires */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0xA2, 0x92, 0x8F, 0x30, -0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30, -0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30, -0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0, -0xC1, 0x9D, 0x9D, 0x40, 0xC2, 0x3B, 0xC3, 0x30, 0xC3, 0x7E, 0xD0, 0xC0, 0xC4, 0x1C, 0xF6, 0xB0, -0xC5, 0x60, 0x04, 0x40, 0xC5, 0xFE, 0x2A, 0x30, 0xC7, 0x41, 0x37, 0xC0, 0xC7, 0xE0, 0xAF, 0x30, -0xC8, 0x81, 0x94, 0x40, 0xCA, 0x4D, 0xA1, 0xB0, 0xCA, 0xEE, 0x86, 0xC0, 0xCE, 0x4D, 0xFF, 0x30, -0xCE, 0xB0, 0xED, 0xC0, 0xD3, 0x29, 0x35, 0xB0, 0xD4, 0x43, 0x64, 0xC0, 0xF4, 0x3D, 0x08, 0x30, -0xF4, 0x9F, 0xF6, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0x32, 0x10, 0x40, 0xF6, 0xE6, 0x9F, 0xB0, -0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40, 0xFA, 0xD3, 0x36, 0xB0, -0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, 0xFE, 0x9C, 0x35, 0x30, -0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, 0x23, 0x94, 0xB5, 0xB0, -0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30, -0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xF1, 0x30, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30, -0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x02, 0x04, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, -0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, -0x00, 0x04, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Cambridge_Bay */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x21, 0x9E, 0xB8, 0xAF, 0x90, -0x9F, 0xBB, 0x07, 0x80, 0xA0, 0xCF, 0xF0, 0x90, 0xA1, 0xA2, 0xB6, 0x60, 0xCB, 0x89, 0x0C, 0x90, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x18, 0x00, 0xF7, 0x2F, 0x5A, 0x70, 0xF8, 0x28, 0x85, 0xF0, -0x13, 0x69, 0x64, 0x10, 0x14, 0x59, 0x47, 0x00, 0x15, 0x49, 0x46, 0x10, 0x16, 0x39, 0x29, 0x00, -0x17, 0x29, 0x28, 0x10, 0x18, 0x22, 0x45, 0x80, 0x19, 0x09, 0x0A, 0x10, 0x1A, 0x02, 0x27, 0x80, -0x1A, 0xF2, 0x26, 0x90, 0x1B, 0xE2, 0x09, 0x80, 0x1C, 0xD2, 0x08, 0x90, 0x1D, 0xC1, 0xEB, 0x80, -0x1E, 0xB1, 0xEA, 0x90, 0x1F, 0xA1, 0xCD, 0x80, 0x20, 0x76, 0x1D, 0x10, 0x21, 0x81, 0xAF, 0x80, -0x22, 0x55, 0xFF, 0x10, 0x23, 0x6A, 0xCC, 0x00, 0x24, 0x35, 0xE1, 0x10, 0x25, 0x4A, 0xAE, 0x00, -0x26, 0x15, 0xC3, 0x10, 0x27, 0x2A, 0x90, 0x00, 0x27, 0xFE, 0xDF, 0x90, 0x29, 0x0A, 0x72, 0x00, -0x29, 0xDE, 0xC1, 0x90, 0x2A, 0xEA, 0x54, 0x00, 0x2B, 0xBE, 0xA3, 0x90, 0x2C, 0xD3, 0x70, 0x80, -0x2D, 0x9E, 0x85, 0x90, 0x2E, 0xB3, 0x52, 0x80, 0x2F, 0x7E, 0x67, 0x90, 0x30, 0x93, 0x34, 0x80, -0x31, 0x67, 0x84, 0x10, 0x32, 0x73, 0x16, 0x80, 0x33, 0x47, 0x66, 0x10, 0x34, 0x52, 0xF8, 0x80, -0x35, 0x27, 0x48, 0x10, 0x36, 0x32, 0xDA, 0x80, 0x37, 0x07, 0x2A, 0x10, 0x38, 0x1B, 0xF7, 0x00, -0x38, 0xE6, 0xFE, 0x00, 0x39, 0xFB, 0xCA, 0xF0, 0x3A, 0x04, 0xE9, 0x50, 0x3A, 0xC6, 0xEE, 0x10, -0x3B, 0xDB, 0xBB, 0x00, 0x3C, 0xB0, 0x0A, 0x90, 0x3D, 0xBB, 0x9D, 0x00, 0x3E, 0x8F, 0xEC, 0x90, -0x3F, 0x9B, 0x7F, 0x00, 0x40, 0x6F, 0xCE, 0x90, 0x41, 0x84, 0x9B, 0x80, 0x42, 0x4F, 0xB0, 0x90, -0x43, 0x64, 0x7D, 0x80, 0x44, 0x2F, 0x92, 0x90, 0x45, 0x44, 0x5F, 0x80, 0x45, 0xF3, 0xC5, 0x10, -0x47, 0x2D, 0x7C, 0x00, 0x47, 0xD3, 0xA7, 0x10, 0x49, 0x0D, 0x5E, 0x00, 0x49, 0xB3, 0x89, 0x10, -0x4A, 0xED, 0x40, 0x00, 0x4B, 0x9C, 0xA5, 0x90, 0x4C, 0xD6, 0x5C, 0x80, 0x4D, 0x7C, 0x87, 0x90, -0x4E, 0xB6, 0x3E, 0x80, 0x4F, 0x5C, 0x69, 0x90, 0x50, 0x96, 0x20, 0x80, 0x51, 0x3C, 0x4B, 0x90, -0x52, 0x76, 0x02, 0x80, 0x53, 0x1C, 0x2D, 0x90, 0x54, 0x55, 0xE4, 0x80, 0x54, 0xFC, 0x0F, 0x90, -0x56, 0x35, 0xC6, 0x80, 0x56, 0xE5, 0x2C, 0x10, 0x58, 0x1E, 0xE3, 0x00, 0x58, 0xC5, 0x0E, 0x10, -0x59, 0xFE, 0xC5, 0x00, 0x5A, 0xA4, 0xF0, 0x10, 0x5B, 0xDE, 0xA7, 0x00, 0x5C, 0x84, 0xD2, 0x10, -0x5D, 0xBE, 0x89, 0x00, 0x5E, 0x64, 0xB4, 0x10, 0x5F, 0x9E, 0x6B, 0x00, 0x60, 0x4D, 0xD0, 0x90, -0x61, 0x87, 0x87, 0x80, 0x62, 0x2D, 0xB2, 0x90, 0x63, 0x67, 0x69, 0x80, 0x64, 0x0D, 0x94, 0x90, -0x65, 0x47, 0x4B, 0x80, 0x65, 0xED, 0x76, 0x90, 0x67, 0x27, 0x2D, 0x80, 0x67, 0xCD, 0x58, 0x90, -0x69, 0x07, 0x0F, 0x80, 0x69, 0xAD, 0x3A, 0x90, 0x6A, 0xE6, 0xF1, 0x80, 0x6B, 0x96, 0x57, 0x10, -0x6C, 0xD0, 0x0E, 0x00, 0x6D, 0x76, 0x39, 0x10, 0x6E, 0xAF, 0xF0, 0x00, 0x6F, 0x56, 0x1B, 0x10, -0x70, 0x8F, 0xD2, 0x00, 0x71, 0x35, 0xFD, 0x10, 0x72, 0x6F, 0xB4, 0x00, 0x73, 0x15, 0xDF, 0x10, -0x74, 0x4F, 0x96, 0x00, 0x74, 0xFE, 0xFB, 0x90, 0x76, 0x38, 0xB2, 0x80, 0x76, 0xDE, 0xDD, 0x90, -0x78, 0x18, 0x94, 0x80, 0x78, 0xBE, 0xBF, 0x90, 0x79, 0xF8, 0x76, 0x80, 0x7A, 0x9E, 0xA1, 0x90, -0x7B, 0xD8, 0x58, 0x80, 0x7C, 0x7E, 0x83, 0x90, 0x7D, 0xB8, 0x3A, 0x80, 0x7E, 0x5E, 0x65, 0x90, -0x7F, 0x98, 0x1C, 0x80, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x01, 0x04, 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, 0x06, 0x05, 0x07, 0x06, 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, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, -0x00, 0x01, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, -0xAB, 0xA0, 0x01, 0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, -0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x15, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x19, 0xFF, 0xFF, 0xB9, 0xB0, -0x00, 0x1D, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, -0x54, 0x00, 0x4D, 0x44, 0x44, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x45, -0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, -0x00, 0x00, 0x00, - -/* America/Campo_Grande */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x7A, 0x34, -0xB8, 0x0F, 0x57, 0xF0, 0xB8, 0xFD, 0x4E, 0xB0, 0xB9, 0xF1, 0x42, 0x40, 0xBA, 0xDE, 0x82, 0x30, -0xDA, 0x38, 0xBC, 0x40, 0xDA, 0xEC, 0x08, 0x40, 0xDC, 0x19, 0xEF, 0xC0, 0xDC, 0xB9, 0x67, 0x30, -0xDD, 0xFB, 0x23, 0x40, 0xDE, 0x9B, 0xEC, 0x30, 0xDF, 0xDD, 0xA8, 0x40, 0xE0, 0x54, 0x41, 0x30, -0xF4, 0x98, 0x0D, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0xC0, 0x72, 0x40, 0xF7, 0x0E, 0x2C, 0xB0, -0xF8, 0x51, 0x3A, 0x40, 0xF8, 0xC7, 0xD3, 0x30, 0xFA, 0x0A, 0xE0, 0xC0, 0xFA, 0xA9, 0x06, 0xB0, -0xFB, 0xEC, 0x14, 0x40, 0xFC, 0x8B, 0x8B, 0xB0, 0x1D, 0xC9, 0x9C, 0x40, 0x1E, 0x78, 0xE5, 0xB0, -0x1F, 0xA0, 0x43, 0xC0, 0x20, 0x33, 0xDD, 0xB0, 0x21, 0x81, 0x77, 0x40, 0x22, 0x0B, 0xD6, 0xB0, -0x23, 0x58, 0x1E, 0xC0, 0x23, 0xE2, 0x7E, 0x30, 0x25, 0x38, 0x00, 0xC0, 0x25, 0xD4, 0xD5, 0x30, -0x27, 0x21, 0x1D, 0x40, 0x27, 0xBD, 0xF1, 0xB0, 0x29, 0x00, 0xFF, 0x40, 0x29, 0x94, 0x99, 0x30, -0x2A, 0xEA, 0x1B, 0xC0, 0x2B, 0x6B, 0x40, 0xB0, 0x2C, 0xC0, 0xC3, 0x40, 0x2D, 0x66, 0xD2, 0x30, -0x2E, 0xA0, 0xA5, 0x40, 0x2F, 0x46, 0xB4, 0x30, 0x30, 0x80, 0x87, 0x40, 0x31, 0x1D, 0x5B, 0xB0, -0x32, 0x57, 0x2E, 0xC0, 0x33, 0x06, 0x78, 0x30, 0x34, 0x38, 0x62, 0x40, 0x34, 0xF8, 0xCF, 0x30, -0x36, 0x20, 0x2D, 0x40, 0x36, 0xCF, 0x76, 0xB0, 0x37, 0xF6, 0xD4, 0xC0, 0x38, 0xB8, 0x93, 0x30, -0x39, 0xDF, 0xF1, 0x40, 0x3A, 0x8F, 0x3A, 0xB0, 0x3B, 0xC9, 0x0D, 0xC0, 0x3C, 0x6F, 0x1C, 0xB0, -0x3D, 0xC4, 0x9F, 0x40, 0x3E, 0x4E, 0xFE, 0xB0, 0x3F, 0x92, 0x0C, 0x40, 0x40, 0x2E, 0xE0, 0xB0, -0x41, 0x87, 0x06, 0x40, 0x42, 0x17, 0xFD, 0x30, 0x43, 0x51, 0xD0, 0x40, 0x43, 0xF7, 0xDF, 0x30, -0x45, 0x4D, 0x61, 0xC0, 0x45, 0xE0, 0xFB, 0xB0, 0x47, 0x2D, 0x43, 0xC0, 0x47, 0xC0, 0xDD, 0xB0, -0x49, 0x0D, 0x25, 0xC0, 0x49, 0xA0, 0xBF, 0xB0, 0x4A, 0xED, 0x07, 0xC0, 0x4B, 0x89, 0xDC, 0x30, -0x4C, 0xD6, 0x24, 0x40, 0x4D, 0x69, 0xBE, 0x30, 0x4E, 0xB6, 0x06, 0x40, 0x4F, 0x49, 0xA0, 0x30, -0x50, 0x95, 0xE8, 0x40, 0x51, 0x29, 0x82, 0x30, 0x52, 0x75, 0xCA, 0x40, 0x53, 0x09, 0x64, 0x30, -0x54, 0x55, 0xAC, 0x40, 0x54, 0xE9, 0x46, 0x30, 0x56, 0x35, 0x8E, 0x40, 0x56, 0xD2, 0x62, 0xB0, -0x58, 0x1E, 0xAA, 0xC0, 0x58, 0xB2, 0x44, 0xB0, 0x59, 0xFE, 0x8C, 0xC0, 0x5A, 0x92, 0x26, 0xB0, -0x5B, 0xDE, 0x6E, 0xC0, 0x5C, 0x72, 0x08, 0xB0, 0x5D, 0xBE, 0x50, 0xC0, 0x5E, 0x51, 0xEA, 0xB0, -0x5F, 0x9E, 0x32, 0xC0, 0x60, 0x3B, 0x07, 0x30, 0x61, 0x87, 0x4F, 0x40, 0x62, 0x1A, 0xE9, 0x30, -0x63, 0x67, 0x31, 0x40, 0x63, 0xFA, 0xCB, 0x30, 0x65, 0x47, 0x13, 0x40, 0x65, 0xDA, 0xAD, 0x30, -0x67, 0x26, 0xF5, 0x40, 0x67, 0xBA, 0x8F, 0x30, 0x69, 0x06, 0xD7, 0x40, 0x69, 0x9A, 0x71, 0x30, -0x6A, 0xE6, 0xB9, 0x40, 0x6B, 0x83, 0x8D, 0xB0, 0x6C, 0xCF, 0xD5, 0xC0, 0x6D, 0x63, 0x6F, 0xB0, -0x6E, 0xAF, 0xB7, 0xC0, 0x6F, 0x43, 0x51, 0xB0, 0x70, 0x8F, 0x99, 0xC0, 0x71, 0x23, 0x33, 0xB0, -0x72, 0x6F, 0x7B, 0xC0, 0x73, 0x03, 0x15, 0xB0, 0x74, 0x4F, 0x5D, 0xC0, 0x74, 0xEC, 0x32, 0x30, -0x76, 0x38, 0x7A, 0x40, 0x76, 0xCC, 0x14, 0x30, 0x78, 0x18, 0x5C, 0x40, 0x78, 0xAB, 0xF6, 0x30, -0x79, 0xF8, 0x3E, 0x40, 0x7A, 0x8B, 0xD8, 0x30, 0x7B, 0xD8, 0x20, 0x40, 0x7C, 0x6B, 0xBA, 0x30, -0x7D, 0xB8, 0x02, 0x40, 0x7E, 0x4B, 0x9C, 0x30, 0x7F, 0x97, 0xE4, 0x40, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xCC, 0xCC, -0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x09, 0x4C, 0x4D, -0x54, 0x00, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, - -/* America/Cancun */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xA5, 0xB6, 0xDA, 0x60, -0x16, 0x86, 0xD5, 0x60, 0x31, 0x67, 0x67, 0xF0, 0x32, 0x72, 0xFA, 0x60, 0x33, 0x47, 0x49, 0xF0, -0x34, 0x52, 0xDC, 0x60, 0x35, 0x27, 0x2B, 0xF0, 0x35, 0xC4, 0x00, 0x60, 0x36, 0x32, 0xCC, 0x70, -0x37, 0x07, 0x1C, 0x00, 0x38, 0x1B, 0xE8, 0xF0, 0x38, 0xE6, 0xFE, 0x00, 0x39, 0xFB, 0xCA, 0xF0, -0x3A, 0xF5, 0x04, 0x80, 0x3B, 0xB6, 0xC2, 0xF0, 0x3C, 0xAF, 0xFC, 0x80, 0x3D, 0xBB, 0x8E, 0xF0, -0x3E, 0x8F, 0xDE, 0x80, 0x3F, 0x9B, 0x70, 0xF0, 0x40, 0x6F, 0xC0, 0x80, 0x41, 0x84, 0x8D, 0x70, -0x42, 0x4F, 0xA2, 0x80, 0x43, 0x64, 0x6F, 0x70, 0x44, 0x2F, 0x84, 0x80, 0x45, 0x44, 0x51, 0x70, -0x46, 0x0F, 0x66, 0x80, 0x47, 0x24, 0x33, 0x70, 0x47, 0xF8, 0x83, 0x00, 0x49, 0x04, 0x15, 0x70, -0x49, 0xD8, 0x65, 0x00, 0x4A, 0xE3, 0xF7, 0x70, 0x4B, 0xB8, 0x47, 0x00, 0x4C, 0xCD, 0x13, 0xF0, -0x4D, 0x98, 0x29, 0x00, 0x4E, 0xAC, 0xF5, 0xF0, 0x4F, 0x78, 0x0B, 0x00, 0x50, 0x8C, 0xD7, 0xF0, -0x51, 0x61, 0x27, 0x80, 0x52, 0x6C, 0xB9, 0xF0, 0x53, 0x41, 0x09, 0x80, 0x54, 0x4C, 0x9B, 0xF0, -0x55, 0x20, 0xEB, 0x80, 0x56, 0x2C, 0x7D, 0xF0, 0x57, 0x00, 0xCD, 0x80, 0x58, 0x15, 0x9A, 0x70, -0x58, 0xE0, 0xAF, 0x80, 0x59, 0xF5, 0x7C, 0x70, 0x5A, 0xC0, 0x91, 0x80, 0x5B, 0xD5, 0x5E, 0x70, -0x5C, 0xA9, 0xAE, 0x00, 0x5D, 0xB5, 0x40, 0x70, 0x5E, 0x89, 0x90, 0x00, 0x5F, 0x95, 0x22, 0x70, -0x60, 0x69, 0x72, 0x00, 0x61, 0x7E, 0x3E, 0xF0, 0x62, 0x49, 0x54, 0x00, 0x63, 0x5E, 0x20, 0xF0, -0x64, 0x29, 0x36, 0x00, 0x65, 0x3E, 0x02, 0xF0, 0x66, 0x12, 0x52, 0x80, 0x67, 0x1D, 0xE4, 0xF0, -0x67, 0xF2, 0x34, 0x80, 0x68, 0xFD, 0xC6, 0xF0, 0x69, 0xD2, 0x16, 0x80, 0x6A, 0xDD, 0xA8, 0xF0, -0x6B, 0xB1, 0xF8, 0x80, 0x6C, 0xC6, 0xC5, 0x70, 0x6D, 0x91, 0xDA, 0x80, 0x6E, 0xA6, 0xA7, 0x70, -0x6F, 0x71, 0xBC, 0x80, 0x70, 0x86, 0x89, 0x70, 0x71, 0x5A, 0xD9, 0x00, 0x72, 0x66, 0x6B, 0x70, -0x73, 0x3A, 0xBB, 0x00, 0x74, 0x46, 0x4D, 0x70, 0x75, 0x1A, 0x9D, 0x00, 0x76, 0x2F, 0x69, 0xF0, -0x76, 0xFA, 0x7F, 0x00, 0x78, 0x0F, 0x4B, 0xF0, 0x78, 0xDA, 0x61, 0x00, 0x79, 0xEF, 0x2D, 0xF0, -0x7A, 0xBA, 0x43, 0x00, 0x7B, 0xCF, 0x0F, 0xF0, 0x7C, 0xA3, 0x5F, 0x80, 0x7D, 0xAE, 0xF1, 0xF0, -0x7E, 0x83, 0x41, 0x80, 0x7F, 0x8E, 0xD3, 0xF0, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, -0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, -0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, -0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, -0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, -0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0xFF, -0xFF, 0xAE, 0xA8, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, -0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0x4C, 0x4D, 0x54, -0x00, 0x43, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Caracas */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x93, 0x1E, 0x2C, 0x3C, -0xF6, 0x98, 0xEC, 0x48, 0x01, 0x02, 0xFF, 0xFF, 0xC1, 0x44, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0xB8, -0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x43, 0x4D, 0x54, 0x00, 0x56, 0x45, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Catamarca */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30, -0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30, -0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30, -0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0, -0xC1, 0x9D, 0x9D, 0x40, 0xC2, 0x3B, 0xC3, 0x30, 0xC3, 0x7E, 0xD0, 0xC0, 0xC4, 0x1C, 0xF6, 0xB0, -0xC5, 0x60, 0x04, 0x40, 0xC5, 0xFE, 0x2A, 0x30, 0xC7, 0x41, 0x37, 0xC0, 0xC7, 0xE0, 0xAF, 0x30, -0xC8, 0x81, 0x94, 0x40, 0xCA, 0x4D, 0xA1, 0xB0, 0xCA, 0xEE, 0x86, 0xC0, 0xCE, 0x4D, 0xFF, 0x30, -0xCE, 0xB0, 0xED, 0xC0, 0xD3, 0x29, 0x35, 0xB0, 0xD4, 0x43, 0x64, 0xC0, 0xF4, 0x3D, 0x08, 0x30, -0xF4, 0x9F, 0xF6, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0x32, 0x10, 0x40, 0xF6, 0xE6, 0x9F, 0xB0, -0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40, 0xFA, 0xD3, 0x36, 0xB0, -0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, 0xFE, 0x9C, 0x35, 0x30, -0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, 0x23, 0x94, 0xB5, 0xB0, -0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30, -0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xFF, 0x40, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30, -0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x40, 0xBB, 0xF1, 0x30, -0x40, 0xD5, 0x0B, 0xC0, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, 0x04, 0x02, 0x04, 0x05, 0x04, 0xFF, 0xFF, -0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, -0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, -0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, -0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* America/Cayenne */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF4, 0x2B, 0x90, -0xFB, 0xC3, 0x35, 0xC0, 0x01, 0x02, 0xFF, 0xFF, 0xCE, 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, -0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x47, 0x46, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Cayman */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x93, 0x0F, 0xB5, 0x00, -0x01, 0xFF, 0xFF, 0xB8, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0x4B, 0x4D, 0x54, -0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Chicago */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x9E, 0xA6, 0x2C, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xA2, 0xCB, 0x74, 0x00, -0xA3, 0x83, 0xF7, 0xF0, 0xA4, 0x45, 0xD2, 0x80, 0xA5, 0x63, 0xD9, 0xF0, 0xA6, 0x53, 0xD9, 0x00, -0xA7, 0x15, 0x97, 0x70, 0xA8, 0x33, 0xBB, 0x00, 0xA8, 0xFE, 0xB3, 0xF0, 0xAA, 0x13, 0x9D, 0x00, -0xAA, 0xDE, 0x95, 0xF0, 0xAB, 0xF3, 0x7F, 0x00, 0xAC, 0xBE, 0x77, 0xF0, 0xAD, 0xD3, 0x61, 0x00, -0xAE, 0x9E, 0x59, 0xF0, 0xAF, 0xB3, 0x43, 0x00, 0xB0, 0x7E, 0x3B, 0xF0, 0xB1, 0x9C, 0x5F, 0x80, -0xB2, 0x67, 0x58, 0x70, 0xB3, 0x7C, 0x41, 0x80, 0xB4, 0x47, 0x3A, 0x70, 0xB5, 0x5C, 0x23, 0x80, -0xB6, 0x27, 0x1C, 0x70, 0xB7, 0x3C, 0x05, 0x80, 0xB8, 0x06, 0xFE, 0x70, 0xB9, 0x1B, 0xE7, 0x80, -0xB9, 0xE6, 0xE0, 0x70, 0xBB, 0x05, 0x04, 0x00, 0xBB, 0xC6, 0xC2, 0x70, 0xBC, 0xE4, 0xE6, 0x00, -0xBD, 0xAF, 0xDE, 0xF0, 0xBE, 0xC4, 0xC8, 0x00, 0xBF, 0x8F, 0xC0, 0xF0, 0xC0, 0x5A, 0xD6, 0x00, -0xC1, 0xB0, 0x3C, 0x70, 0xC2, 0x84, 0x8C, 0x00, 0xC3, 0x4F, 0x84, 0xF0, 0xC4, 0x64, 0x6E, 0x00, -0xC5, 0x2F, 0x66, 0xF0, 0xC6, 0x4D, 0x8A, 0x80, 0xC7, 0x0F, 0x48, 0xF0, 0xC8, 0x2D, 0x6C, 0x80, -0xC8, 0xF8, 0x65, 0x70, 0xCA, 0x0D, 0x4E, 0x80, 0xCA, 0xD8, 0x47, 0x70, 0xCB, 0x88, 0xFE, 0x80, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, 0xD3, 0x75, 0xF3, 0x00, 0xD4, 0x40, 0xEB, 0xF0, -0xD5, 0x55, 0xD5, 0x00, 0xD6, 0x20, 0xCD, 0xF0, 0xD7, 0x35, 0xB7, 0x00, 0xD8, 0x00, 0xAF, 0xF0, -0xD9, 0x15, 0x99, 0x00, 0xD9, 0xE0, 0x91, 0xF0, 0xDA, 0xFE, 0xB5, 0x80, 0xDB, 0xC0, 0x73, 0xF0, -0xDC, 0xDE, 0x97, 0x80, 0xDD, 0xA9, 0x90, 0x70, 0xDE, 0xBE, 0x79, 0x80, 0xDF, 0x89, 0x72, 0x70, -0xE0, 0x9E, 0x5B, 0x80, 0xE1, 0x69, 0x54, 0x70, 0xE2, 0x7E, 0x3D, 0x80, 0xE3, 0x49, 0x36, 0x70, -0xE4, 0x5E, 0x1F, 0x80, 0xE5, 0x57, 0x3C, 0xF0, 0xE6, 0x47, 0x3C, 0x00, 0xE7, 0x37, 0x1E, 0xF0, -0xE8, 0x27, 0x1E, 0x00, 0xE9, 0x17, 0x00, 0xF0, 0xEA, 0x07, 0x00, 0x00, 0xEA, 0xF6, 0xE2, 0xF0, -0xEB, 0xE6, 0xE2, 0x00, 0xEC, 0xD6, 0xC4, 0xF0, 0xED, 0xC6, 0xC4, 0x00, 0xEE, 0xBF, 0xE1, 0x70, -0xEF, 0xAF, 0xE0, 0x80, 0xF0, 0x9F, 0xC3, 0x70, 0xF1, 0x8F, 0xC2, 0x80, 0xF2, 0x7F, 0xA5, 0x70, -0xF3, 0x6F, 0xA4, 0x80, 0xF4, 0x5F, 0x87, 0x70, 0xF5, 0x4F, 0x86, 0x80, 0xF6, 0x3F, 0x69, 0x70, -0xF7, 0x2F, 0x68, 0x80, 0xF8, 0x28, 0x85, 0xF0, 0xF9, 0x0F, 0x4A, 0x80, 0xFA, 0x08, 0x67, 0xF0, -0xFA, 0xF8, 0x67, 0x00, 0xFB, 0xE8, 0x49, 0xF0, 0xFC, 0xD8, 0x49, 0x00, 0xFD, 0xC8, 0x2B, 0xF0, -0xFE, 0xB8, 0x2B, 0x00, 0xFF, 0xA8, 0x0D, 0xF0, 0x00, 0x98, 0x0D, 0x00, 0x01, 0x87, 0xEF, 0xF0, -0x02, 0x77, 0xEF, 0x00, 0x03, 0x71, 0x0C, 0x70, 0x04, 0x61, 0x0B, 0x80, 0x05, 0x50, 0xEE, 0x70, -0x06, 0x40, 0xED, 0x80, 0x07, 0x30, 0xD0, 0x70, 0x07, 0x8D, 0x27, 0x80, 0x09, 0x10, 0xB2, 0x70, -0x09, 0xAD, 0xA3, 0x00, 0x0A, 0xF0, 0x94, 0x70, 0x0B, 0xE0, 0x93, 0x80, 0x0C, 0xD9, 0xB0, 0xF0, -0x0D, 0xC0, 0x75, 0x80, 0x0E, 0xB9, 0x92, 0xF0, 0x0F, 0xA9, 0x92, 0x00, 0x10, 0x99, 0x74, 0xF0, -0x11, 0x89, 0x74, 0x00, 0x12, 0x79, 0x56, 0xF0, 0x13, 0x69, 0x56, 0x00, 0x14, 0x59, 0x38, 0xF0, -0x15, 0x49, 0x38, 0x00, 0x16, 0x39, 0x1A, 0xF0, 0x17, 0x29, 0x1A, 0x00, 0x18, 0x22, 0x37, 0x70, -0x19, 0x08, 0xFC, 0x00, 0x1A, 0x02, 0x19, 0x70, 0x1A, 0xF2, 0x18, 0x80, 0x1B, 0xE1, 0xFB, 0x70, -0x1C, 0xD1, 0xFA, 0x80, 0x1D, 0xC1, 0xDD, 0x70, 0x1E, 0xB1, 0xDC, 0x80, 0x1F, 0xA1, 0xBF, 0x70, -0x20, 0x76, 0x0F, 0x00, 0x21, 0x81, 0xA1, 0x70, 0x22, 0x55, 0xF1, 0x00, 0x23, 0x6A, 0xBD, 0xF0, -0x24, 0x35, 0xD3, 0x00, 0x25, 0x4A, 0x9F, 0xF0, 0x26, 0x15, 0xB5, 0x00, 0x27, 0x2A, 0x81, 0xF0, -0x27, 0xFE, 0xD1, 0x80, 0x29, 0x0A, 0x63, 0xF0, 0x29, 0xDE, 0xB3, 0x80, 0x2A, 0xEA, 0x45, 0xF0, -0x2B, 0xBE, 0x95, 0x80, 0x2C, 0xD3, 0x62, 0x70, 0x2D, 0x9E, 0x77, 0x80, 0x2E, 0xB3, 0x44, 0x70, -0x2F, 0x7E, 0x59, 0x80, 0x30, 0x93, 0x26, 0x70, 0x31, 0x67, 0x76, 0x00, 0x32, 0x73, 0x08, 0x70, -0x33, 0x47, 0x58, 0x00, 0x34, 0x52, 0xEA, 0x70, 0x35, 0x27, 0x3A, 0x00, 0x36, 0x32, 0xCC, 0x70, -0x37, 0x07, 0x1C, 0x00, 0x38, 0x1B, 0xE8, 0xF0, 0x38, 0xE6, 0xFE, 0x00, 0x39, 0xFB, 0xCA, 0xF0, -0x3A, 0xC6, 0xE0, 0x00, 0x3B, 0xDB, 0xAC, 0xF0, 0x3C, 0xAF, 0xFC, 0x80, 0x3D, 0xBB, 0x8E, 0xF0, -0x3E, 0x8F, 0xDE, 0x80, 0x3F, 0x9B, 0x70, 0xF0, 0x40, 0x6F, 0xC0, 0x80, 0x41, 0x84, 0x8D, 0x70, -0x42, 0x4F, 0xA2, 0x80, 0x43, 0x64, 0x6F, 0x70, 0x44, 0x2F, 0x84, 0x80, 0x45, 0x44, 0x51, 0x70, -0x45, 0xF3, 0xB7, 0x00, 0x47, 0x2D, 0x6D, 0xF0, 0x47, 0xD3, 0x99, 0x00, 0x49, 0x0D, 0x4F, 0xF0, -0x49, 0xB3, 0x7B, 0x00, 0x4A, 0xED, 0x31, 0xF0, 0x4B, 0x9C, 0x97, 0x80, 0x4C, 0xD6, 0x4E, 0x70, -0x4D, 0x7C, 0x79, 0x80, 0x4E, 0xB6, 0x30, 0x70, 0x4F, 0x5C, 0x5B, 0x80, 0x50, 0x96, 0x12, 0x70, -0x51, 0x3C, 0x3D, 0x80, 0x52, 0x75, 0xF4, 0x70, 0x53, 0x1C, 0x1F, 0x80, 0x54, 0x55, 0xD6, 0x70, -0x54, 0xFC, 0x01, 0x80, 0x56, 0x35, 0xB8, 0x70, 0x56, 0xE5, 0x1E, 0x00, 0x58, 0x1E, 0xD4, 0xF0, -0x58, 0xC5, 0x00, 0x00, 0x59, 0xFE, 0xB6, 0xF0, 0x5A, 0xA4, 0xE2, 0x00, 0x5B, 0xDE, 0x98, 0xF0, -0x5C, 0x84, 0xC4, 0x00, 0x5D, 0xBE, 0x7A, 0xF0, 0x5E, 0x64, 0xA6, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, -0x60, 0x4D, 0xC2, 0x80, 0x61, 0x87, 0x79, 0x70, 0x62, 0x2D, 0xA4, 0x80, 0x63, 0x67, 0x5B, 0x70, -0x64, 0x0D, 0x86, 0x80, 0x65, 0x47, 0x3D, 0x70, 0x65, 0xED, 0x68, 0x80, 0x67, 0x27, 0x1F, 0x70, -0x67, 0xCD, 0x4A, 0x80, 0x69, 0x07, 0x01, 0x70, 0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, -0x6B, 0x96, 0x49, 0x00, 0x6C, 0xCF, 0xFF, 0xF0, 0x6D, 0x76, 0x2B, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, -0x6F, 0x56, 0x0D, 0x00, 0x70, 0x8F, 0xC3, 0xF0, 0x71, 0x35, 0xEF, 0x00, 0x72, 0x6F, 0xA5, 0xF0, -0x73, 0x15, 0xD1, 0x00, 0x74, 0x4F, 0x87, 0xF0, 0x74, 0xFE, 0xED, 0x80, 0x76, 0x38, 0xA4, 0x70, -0x76, 0xDE, 0xCF, 0x80, 0x78, 0x18, 0x86, 0x70, 0x78, 0xBE, 0xB1, 0x80, 0x79, 0xF8, 0x68, 0x70, -0x7A, 0x9E, 0x93, 0x80, 0x7B, 0xD8, 0x4A, 0x70, 0x7C, 0x7E, 0x75, 0x80, 0x7D, 0xB8, 0x2C, 0x70, -0x7E, 0x5E, 0x57, 0x80, 0x7F, 0x98, 0x0E, 0x70, 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, 0x01, 0x00, 0x01, -0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x03, 0x04, 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, 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, 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, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, -0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, -0x10, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, -0x00, 0x43, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, - -/* America/Chihuahua */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xA5, 0xB6, 0xE8, 0x70, -0xAF, 0xF2, 0x6E, 0xE0, 0xB6, 0x66, 0x56, 0x60, 0xB7, 0x43, 0xD2, 0x60, 0xB8, 0x0C, 0x36, 0x60, -0xB8, 0xFD, 0x86, 0xF0, 0x31, 0x67, 0x76, 0x00, 0x32, 0x73, 0x08, 0x70, 0x33, 0x47, 0x58, 0x00, -0x34, 0x52, 0xEA, 0x70, 0x35, 0x27, 0x48, 0x10, 0x36, 0x32, 0xDA, 0x80, 0x37, 0x07, 0x2A, 0x10, -0x38, 0x1B, 0xF7, 0x00, 0x38, 0xE7, 0x0C, 0x10, 0x39, 0xFB, 0xD9, 0x00, 0x3A, 0xF5, 0x12, 0x90, -0x3B, 0xB6, 0xD1, 0x00, 0x3C, 0xB0, 0x0A, 0x90, 0x3D, 0xBB, 0x9D, 0x00, 0x3E, 0x8F, 0xEC, 0x90, -0x3F, 0x9B, 0x7F, 0x00, 0x40, 0x6F, 0xCE, 0x90, 0x41, 0x84, 0x9B, 0x80, 0x42, 0x4F, 0xB0, 0x90, -0x43, 0x64, 0x7D, 0x80, 0x44, 0x2F, 0x92, 0x90, 0x45, 0x44, 0x5F, 0x80, 0x46, 0x0F, 0x74, 0x90, -0x47, 0x24, 0x41, 0x80, 0x47, 0xF8, 0x91, 0x10, 0x49, 0x04, 0x23, 0x80, 0x49, 0xD8, 0x73, 0x10, -0x4A, 0xE4, 0x05, 0x80, 0x4B, 0xB8, 0x55, 0x10, 0x4C, 0xCD, 0x22, 0x00, 0x4D, 0x98, 0x37, 0x10, -0x4E, 0xAD, 0x04, 0x00, 0x4F, 0x78, 0x19, 0x10, 0x50, 0x8C, 0xE6, 0x00, 0x51, 0x61, 0x35, 0x90, -0x52, 0x6C, 0xC8, 0x00, 0x53, 0x41, 0x17, 0x90, 0x54, 0x4C, 0xAA, 0x00, 0x55, 0x20, 0xF9, 0x90, -0x56, 0x2C, 0x8C, 0x00, 0x57, 0x00, 0xDB, 0x90, 0x58, 0x15, 0xA8, 0x80, 0x58, 0xE0, 0xBD, 0x90, -0x59, 0xF5, 0x8A, 0x80, 0x5A, 0xC0, 0x9F, 0x90, 0x5B, 0xD5, 0x6C, 0x80, 0x5C, 0xA9, 0xBC, 0x10, -0x5D, 0xB5, 0x4E, 0x80, 0x5E, 0x89, 0x9E, 0x10, 0x5F, 0x95, 0x30, 0x80, 0x60, 0x69, 0x80, 0x10, -0x61, 0x7E, 0x4D, 0x00, 0x62, 0x49, 0x62, 0x10, 0x63, 0x5E, 0x2F, 0x00, 0x64, 0x29, 0x44, 0x10, -0x65, 0x3E, 0x11, 0x00, 0x66, 0x12, 0x60, 0x90, 0x67, 0x1D, 0xF3, 0x00, 0x67, 0xF2, 0x42, 0x90, -0x68, 0xFD, 0xD5, 0x00, 0x69, 0xD2, 0x24, 0x90, 0x6A, 0xDD, 0xB7, 0x00, 0x6B, 0xB2, 0x06, 0x90, -0x6C, 0xC6, 0xD3, 0x80, 0x6D, 0x91, 0xE8, 0x90, 0x6E, 0xA6, 0xB5, 0x80, 0x6F, 0x71, 0xCA, 0x90, -0x70, 0x86, 0x97, 0x80, 0x71, 0x5A, 0xE7, 0x10, 0x72, 0x66, 0x79, 0x80, 0x73, 0x3A, 0xC9, 0x10, -0x74, 0x46, 0x5B, 0x80, 0x75, 0x1A, 0xAB, 0x10, 0x76, 0x2F, 0x78, 0x00, 0x76, 0xFA, 0x8D, 0x10, -0x78, 0x0F, 0x5A, 0x00, 0x78, 0xDA, 0x6F, 0x10, 0x79, 0xEF, 0x3C, 0x00, 0x7A, 0xBA, 0x51, 0x10, -0x7B, 0xCF, 0x1E, 0x00, 0x7C, 0xA3, 0x6D, 0x90, 0x7D, 0xAF, 0x00, 0x00, 0x7E, 0x83, 0x4F, 0x90, -0x7F, 0x8E, 0xE2, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x01, -0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, -0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, -0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, -0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, -0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0xFF, 0xFF, -0x9C, 0x8C, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, -0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, -0x4D, 0x53, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Coral_Harbour */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x9E, 0xB8, 0xA1, 0x80, -0x9F, 0xC0, 0x3F, 0x70, 0xC8, 0xF8, 0x57, 0x60, 0xCB, 0x88, 0xFE, 0x80, 0xD2, 0x23, 0xF4, 0x70, -0xD2, 0x61, 0x09, 0xF0, 0x00, 0x01, 0x00, 0x02, 0x03, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, -0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, -0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, -0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, -0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - -/* America/Cordoba */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30, -0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30, -0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30, -0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0, -0xC1, 0x9D, 0x9D, 0x40, 0xC2, 0x3B, 0xC3, 0x30, 0xC3, 0x7E, 0xD0, 0xC0, 0xC4, 0x1C, 0xF6, 0xB0, -0xC5, 0x60, 0x04, 0x40, 0xC5, 0xFE, 0x2A, 0x30, 0xC7, 0x41, 0x37, 0xC0, 0xC7, 0xE0, 0xAF, 0x30, -0xC8, 0x81, 0x94, 0x40, 0xCA, 0x4D, 0xA1, 0xB0, 0xCA, 0xEE, 0x86, 0xC0, 0xCE, 0x4D, 0xFF, 0x30, -0xCE, 0xB0, 0xED, 0xC0, 0xD3, 0x29, 0x35, 0xB0, 0xD4, 0x43, 0x64, 0xC0, 0xF4, 0x3D, 0x08, 0x30, -0xF4, 0x9F, 0xF6, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0x32, 0x10, 0x40, 0xF6, 0xE6, 0x9F, 0xB0, -0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40, 0xFA, 0xD3, 0x36, 0xB0, -0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, 0xFE, 0x9C, 0x35, 0x30, -0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, 0x23, 0x94, 0xB5, 0xB0, -0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30, -0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xFF, 0x40, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30, -0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, -0x03, 0x04, 0x02, 0x04, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, -0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, -0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, -0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Costa_Rica */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0xA3, 0xE8, 0x16, 0x54, -0x11, 0x36, 0x49, 0x60, 0x11, 0xB7, 0x6E, 0x50, 0x13, 0x16, 0x2B, 0x60, 0x13, 0x97, 0x50, 0x50, -0x27, 0x97, 0xE0, 0x60, 0x28, 0x6E, 0xB6, 0xD0, 0x29, 0x77, 0xC2, 0x60, 0x29, 0xC2, 0xD9, 0xD0, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xB1, 0x2C, 0x00, 0x00, 0xFF, -0xFF, 0xB9, 0xB0, 0x01, 0x05, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x09, 0x53, 0x4A, 0x4D, 0x54, 0x00, -0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Cuiaba */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x7B, 0x94, -0xB8, 0x0F, 0x57, 0xF0, 0xB8, 0xFD, 0x4E, 0xB0, 0xB9, 0xF1, 0x42, 0x40, 0xBA, 0xDE, 0x82, 0x30, -0xDA, 0x38, 0xBC, 0x40, 0xDA, 0xEC, 0x08, 0x40, 0xDC, 0x19, 0xEF, 0xC0, 0xDC, 0xB9, 0x67, 0x30, -0xDD, 0xFB, 0x23, 0x40, 0xDE, 0x9B, 0xEC, 0x30, 0xDF, 0xDD, 0xA8, 0x40, 0xE0, 0x54, 0x41, 0x30, -0xF4, 0x98, 0x0D, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0xC0, 0x72, 0x40, 0xF7, 0x0E, 0x2C, 0xB0, -0xF8, 0x51, 0x3A, 0x40, 0xF8, 0xC7, 0xD3, 0x30, 0xFA, 0x0A, 0xE0, 0xC0, 0xFA, 0xA9, 0x06, 0xB0, -0xFB, 0xEC, 0x14, 0x40, 0xFC, 0x8B, 0x8B, 0xB0, 0x1D, 0xC9, 0x9C, 0x40, 0x1E, 0x78, 0xE5, 0xB0, -0x1F, 0xA0, 0x43, 0xC0, 0x20, 0x33, 0xDD, 0xB0, 0x21, 0x81, 0x77, 0x40, 0x22, 0x0B, 0xD6, 0xB0, -0x23, 0x58, 0x1E, 0xC0, 0x23, 0xE2, 0x7E, 0x30, 0x25, 0x38, 0x00, 0xC0, 0x25, 0xD4, 0xD5, 0x30, -0x27, 0x21, 0x1D, 0x40, 0x27, 0xBD, 0xF1, 0xB0, 0x29, 0x00, 0xFF, 0x40, 0x29, 0x94, 0x99, 0x30, -0x2A, 0xEA, 0x1B, 0xC0, 0x2B, 0x6B, 0x40, 0xB0, 0x2C, 0xC0, 0xC3, 0x40, 0x2D, 0x66, 0xD2, 0x30, -0x2E, 0xA0, 0xA5, 0x40, 0x2F, 0x46, 0xB4, 0x30, 0x30, 0x80, 0x87, 0x40, 0x31, 0x1D, 0x5B, 0xB0, -0x32, 0x57, 0x2E, 0xC0, 0x33, 0x06, 0x78, 0x30, 0x34, 0x38, 0x62, 0x40, 0x34, 0xF8, 0xCF, 0x30, -0x36, 0x20, 0x2D, 0x40, 0x36, 0xCF, 0x76, 0xB0, 0x37, 0xF6, 0xD4, 0xC0, 0x38, 0xB8, 0x93, 0x30, -0x39, 0xDF, 0xF1, 0x40, 0x3A, 0x8F, 0x3A, 0xB0, 0x3B, 0xC9, 0x0D, 0xC0, 0x3C, 0x6F, 0x1C, 0xB0, -0x3D, 0xC4, 0x9F, 0x40, 0x3E, 0x4E, 0xFE, 0xB0, 0x41, 0x87, 0x06, 0x40, 0x42, 0x17, 0xFD, 0x30, -0x43, 0x51, 0xD0, 0x40, 0x43, 0xF7, 0xDF, 0x30, 0x45, 0x4D, 0x61, 0xC0, 0x45, 0xE0, 0xFB, 0xB0, -0x47, 0x2D, 0x43, 0xC0, 0x47, 0xC0, 0xDD, 0xB0, 0x49, 0x0D, 0x25, 0xC0, 0x49, 0xA0, 0xBF, 0xB0, -0x4A, 0xED, 0x07, 0xC0, 0x4B, 0x89, 0xDC, 0x30, 0x4C, 0xD6, 0x24, 0x40, 0x4D, 0x69, 0xBE, 0x30, -0x4E, 0xB6, 0x06, 0x40, 0x4F, 0x49, 0xA0, 0x30, 0x50, 0x95, 0xE8, 0x40, 0x51, 0x29, 0x82, 0x30, -0x52, 0x75, 0xCA, 0x40, 0x53, 0x09, 0x64, 0x30, 0x54, 0x55, 0xAC, 0x40, 0x54, 0xE9, 0x46, 0x30, -0x56, 0x35, 0x8E, 0x40, 0x56, 0xD2, 0x62, 0xB0, 0x58, 0x1E, 0xAA, 0xC0, 0x58, 0xB2, 0x44, 0xB0, -0x59, 0xFE, 0x8C, 0xC0, 0x5A, 0x92, 0x26, 0xB0, 0x5B, 0xDE, 0x6E, 0xC0, 0x5C, 0x72, 0x08, 0xB0, -0x5D, 0xBE, 0x50, 0xC0, 0x5E, 0x51, 0xEA, 0xB0, 0x5F, 0x9E, 0x32, 0xC0, 0x60, 0x3B, 0x07, 0x30, -0x61, 0x87, 0x4F, 0x40, 0x62, 0x1A, 0xE9, 0x30, 0x63, 0x67, 0x31, 0x40, 0x63, 0xFA, 0xCB, 0x30, -0x65, 0x47, 0x13, 0x40, 0x65, 0xDA, 0xAD, 0x30, 0x67, 0x26, 0xF5, 0x40, 0x67, 0xBA, 0x8F, 0x30, -0x69, 0x06, 0xD7, 0x40, 0x69, 0x9A, 0x71, 0x30, 0x6A, 0xE6, 0xB9, 0x40, 0x6B, 0x83, 0x8D, 0xB0, -0x6C, 0xCF, 0xD5, 0xC0, 0x6D, 0x63, 0x6F, 0xB0, 0x6E, 0xAF, 0xB7, 0xC0, 0x6F, 0x43, 0x51, 0xB0, -0x70, 0x8F, 0x99, 0xC0, 0x71, 0x23, 0x33, 0xB0, 0x72, 0x6F, 0x7B, 0xC0, 0x73, 0x03, 0x15, 0xB0, -0x74, 0x4F, 0x5D, 0xC0, 0x74, 0xEC, 0x32, 0x30, 0x76, 0x38, 0x7A, 0x40, 0x76, 0xCC, 0x14, 0x30, -0x78, 0x18, 0x5C, 0x40, 0x78, 0xAB, 0xF6, 0x30, 0x79, 0xF8, 0x3E, 0x40, 0x7A, 0x8B, 0xD8, 0x30, -0x7B, 0xD8, 0x20, 0x40, 0x7C, 0x6B, 0xBA, 0x30, 0x7D, 0xB8, 0x02, 0x40, 0x7E, 0x4B, 0x9C, 0x30, -0x7F, 0x97, 0xE4, 0x40, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0xFF, 0xFF, 0xCB, 0x6C, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, -0xC7, 0xC0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x41, 0x4D, 0x54, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Curacao */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x1E, 0x2E, 0x20, -0xF6, 0x98, 0xEC, 0x48, 0x01, 0x02, 0xFF, 0xFF, 0xBF, 0x60, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0xB8, -0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4E, 0x54, 0x00, -0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Danmarkshavn */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0x9B, 0x80, 0x49, 0x00, -0x13, 0x4D, 0x7C, 0x50, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x30, 0xE7, 0x4E, 0x30, 0x01, 0x04, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x05, 0xFF, 0xFF, 0xEE, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, -0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, -0xE3, 0xE0, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x47, -0x54, 0x00, 0x57, 0x47, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, - -/* America/Dawson */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1D, 0x9E, 0xB8, 0xCB, 0xB0, -0x9F, 0xBB, 0x23, 0xA0, 0xA0, 0xD0, 0x0C, 0xB0, 0xA1, 0xA2, 0xD2, 0x80, 0xCB, 0x89, 0x28, 0xB0, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x34, 0x20, 0xF7, 0x2F, 0x76, 0x90, 0xF8, 0x28, 0xA2, 0x10, -0x07, 0x30, 0xEC, 0x90, 0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, 0x15, 0x49, 0x54, 0x20, -0x16, 0x39, 0x37, 0x10, 0x17, 0x29, 0x36, 0x20, 0x18, 0x22, 0x53, 0x90, 0x19, 0x09, 0x18, 0x20, -0x1A, 0x02, 0x35, 0x90, 0x1A, 0xF2, 0x34, 0xA0, 0x1B, 0xE2, 0x17, 0x90, 0x1C, 0xD2, 0x16, 0xA0, -0x1D, 0xC1, 0xF9, 0x90, 0x1E, 0xB1, 0xF8, 0xA0, 0x1F, 0xA1, 0xDB, 0x90, 0x20, 0x76, 0x2B, 0x20, -0x21, 0x81, 0xBD, 0x90, 0x22, 0x56, 0x0D, 0x20, 0x23, 0x6A, 0xDA, 0x10, 0x24, 0x35, 0xEF, 0x20, -0x25, 0x4A, 0xBC, 0x10, 0x26, 0x15, 0xD1, 0x20, 0x27, 0x2A, 0x9E, 0x10, 0x27, 0xFE, 0xED, 0xA0, -0x29, 0x0A, 0x80, 0x10, 0x29, 0xDE, 0xCF, 0xA0, 0x2A, 0xEA, 0x62, 0x10, 0x2B, 0xBE, 0xB1, 0xA0, -0x2C, 0xD3, 0x7E, 0x90, 0x2D, 0x9E, 0x93, 0xA0, 0x2E, 0xB3, 0x60, 0x90, 0x2F, 0x7E, 0x75, 0xA0, -0x30, 0x93, 0x42, 0x90, 0x31, 0x67, 0x92, 0x20, 0x32, 0x73, 0x24, 0x90, 0x33, 0x47, 0x74, 0x20, -0x34, 0x53, 0x06, 0x90, 0x35, 0x27, 0x56, 0x20, 0x36, 0x32, 0xE8, 0x90, 0x37, 0x07, 0x38, 0x20, -0x38, 0x1C, 0x05, 0x10, 0x38, 0xE7, 0x1A, 0x20, 0x39, 0xFB, 0xE7, 0x10, 0x3A, 0xC6, 0xFC, 0x20, -0x3B, 0xDB, 0xC9, 0x10, 0x3C, 0xB0, 0x18, 0xA0, 0x3D, 0xBB, 0xAB, 0x10, 0x3E, 0x8F, 0xFA, 0xA0, -0x3F, 0x9B, 0x8D, 0x10, 0x40, 0x6F, 0xDC, 0xA0, 0x41, 0x84, 0xA9, 0x90, 0x42, 0x4F, 0xBE, 0xA0, -0x43, 0x64, 0x8B, 0x90, 0x44, 0x2F, 0xA0, 0xA0, 0x45, 0x44, 0x6D, 0x90, 0x45, 0xF3, 0xD3, 0x20, -0x47, 0x2D, 0x8A, 0x10, 0x47, 0xD3, 0xB5, 0x20, 0x49, 0x0D, 0x6C, 0x10, 0x49, 0xB3, 0x97, 0x20, -0x4A, 0xED, 0x4E, 0x10, 0x4B, 0x9C, 0xB3, 0xA0, 0x4C, 0xD6, 0x6A, 0x90, 0x4D, 0x7C, 0x95, 0xA0, -0x4E, 0xB6, 0x4C, 0x90, 0x4F, 0x5C, 0x77, 0xA0, 0x50, 0x96, 0x2E, 0x90, 0x51, 0x3C, 0x59, 0xA0, -0x52, 0x76, 0x10, 0x90, 0x53, 0x1C, 0x3B, 0xA0, 0x54, 0x55, 0xF2, 0x90, 0x54, 0xFC, 0x1D, 0xA0, -0x56, 0x35, 0xD4, 0x90, 0x56, 0xE5, 0x3A, 0x20, 0x58, 0x1E, 0xF1, 0x10, 0x58, 0xC5, 0x1C, 0x20, -0x59, 0xFE, 0xD3, 0x10, 0x5A, 0xA4, 0xFE, 0x20, 0x5B, 0xDE, 0xB5, 0x10, 0x5C, 0x84, 0xE0, 0x20, -0x5D, 0xBE, 0x97, 0x10, 0x5E, 0x64, 0xC2, 0x20, 0x5F, 0x9E, 0x79, 0x10, 0x60, 0x4D, 0xDE, 0xA0, -0x61, 0x87, 0x95, 0x90, 0x62, 0x2D, 0xC0, 0xA0, 0x63, 0x67, 0x77, 0x90, 0x64, 0x0D, 0xA2, 0xA0, -0x65, 0x47, 0x59, 0x90, 0x65, 0xED, 0x84, 0xA0, 0x67, 0x27, 0x3B, 0x90, 0x67, 0xCD, 0x66, 0xA0, -0x69, 0x07, 0x1D, 0x90, 0x69, 0xAD, 0x48, 0xA0, 0x6A, 0xE6, 0xFF, 0x90, 0x6B, 0x96, 0x65, 0x20, -0x6C, 0xD0, 0x1C, 0x10, 0x6D, 0x76, 0x47, 0x20, 0x6E, 0xAF, 0xFE, 0x10, 0x6F, 0x56, 0x29, 0x20, -0x70, 0x8F, 0xE0, 0x10, 0x71, 0x36, 0x0B, 0x20, 0x72, 0x6F, 0xC2, 0x10, 0x73, 0x15, 0xED, 0x20, -0x74, 0x4F, 0xA4, 0x10, 0x74, 0xFF, 0x09, 0xA0, 0x76, 0x38, 0xC0, 0x90, 0x76, 0xDE, 0xEB, 0xA0, -0x78, 0x18, 0xA2, 0x90, 0x78, 0xBE, 0xCD, 0xA0, 0x79, 0xF8, 0x84, 0x90, 0x7A, 0x9E, 0xAF, 0xA0, -0x7B, 0xD8, 0x66, 0x90, 0x7C, 0x7E, 0x91, 0xA0, 0x7D, 0xB8, 0x48, 0x90, 0x7E, 0x5E, 0x73, 0xA0, -0x7F, 0x98, 0x2A, 0x90, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x01, 0x04, 0x01, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x00, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x04, 0xFF, 0xFF, -0x8F, 0x80, 0x01, 0x08, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x0C, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x10, -0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x15, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x19, 0x59, 0x44, 0x54, 0x00, -0x59, 0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50, 0x54, 0x00, 0x59, 0x44, 0x44, 0x54, -0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - -/* America/Dawson_Creek */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x9E, 0xB8, 0xBD, 0xA0, -0x9F, 0xC0, 0x5B, 0x90, 0xCB, 0x89, 0x1A, 0xA0, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x26, 0x10, -0xD5, 0x55, 0xF1, 0x20, 0xD6, 0x20, 0xEA, 0x10, 0xD7, 0x35, 0xD3, 0x20, 0xD8, 0x00, 0xCC, 0x10, -0xD9, 0x15, 0xB5, 0x20, 0xD9, 0xE0, 0xAE, 0x10, 0xDA, 0xFE, 0xD1, 0xA0, 0xDB, 0xC0, 0x90, 0x10, -0xDC, 0xDE, 0xB3, 0xA0, 0xDD, 0xA9, 0xAC, 0x90, 0xDE, 0xBE, 0x95, 0xA0, 0xDF, 0x89, 0x8E, 0x90, -0xE0, 0x9E, 0x77, 0xA0, 0xE1, 0x69, 0x70, 0x90, 0xE2, 0x7E, 0x59, 0xA0, 0xE3, 0x49, 0x52, 0x90, -0xE4, 0x5E, 0x3B, 0xA0, 0xE5, 0x29, 0x34, 0x90, 0xE6, 0x47, 0x58, 0x20, 0xE7, 0x12, 0x51, 0x10, -0xE8, 0x27, 0x3A, 0x20, 0xE8, 0xF2, 0x33, 0x10, 0xEA, 0x07, 0x1C, 0x20, 0xEA, 0xD2, 0x15, 0x10, -0xEB, 0xE6, 0xFE, 0x20, 0xEC, 0xB1, 0xF7, 0x10, 0xED, 0xC6, 0xE0, 0x20, 0xEE, 0x91, 0xD9, 0x10, -0xEF, 0xAF, 0xFC, 0xA0, 0xF0, 0x71, 0xBB, 0x10, 0xF1, 0x8F, 0xDE, 0xA0, 0xF2, 0x7F, 0xC1, 0x90, -0xF3, 0x6F, 0xC0, 0xA0, 0xF4, 0x5F, 0xA3, 0x90, 0xF5, 0x4F, 0xA2, 0xA0, 0xF6, 0x3F, 0x85, 0x90, -0xF7, 0x2F, 0x84, 0xA0, 0xF8, 0x28, 0xA2, 0x10, 0xF9, 0x0F, 0x66, 0xA0, 0xFA, 0x08, 0x84, 0x10, -0xFA, 0xF8, 0x83, 0x20, 0xFB, 0xE8, 0x66, 0x10, 0xFC, 0xD8, 0x65, 0x20, 0xFD, 0xC8, 0x48, 0x10, -0xFE, 0xB8, 0x47, 0x20, 0xFF, 0xA8, 0x2A, 0x10, 0x00, 0x98, 0x29, 0x20, 0x01, 0x88, 0x0C, 0x10, -0x02, 0x78, 0x0B, 0x20, 0x03, 0x71, 0x28, 0x90, 0x04, 0x61, 0x27, 0xA0, 0x05, 0x01, 0xF0, 0x90, -0x00, 0x01, 0x02, 0x03, 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, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x00, 0xFF, -0xFF, 0x8F, 0x80, 0x00, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, -0x0C, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x10, 0x50, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, -0x57, 0x54, 0x00, 0x50, 0x50, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, - -/* America/Denver */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x9D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x3A, 0x90, -0x9F, 0xBB, 0x07, 0x80, 0xA0, 0x86, 0x1C, 0x90, 0xA1, 0x9A, 0xE9, 0x80, 0xA2, 0x65, 0xFE, 0x90, -0xA3, 0x84, 0x06, 0x00, 0xA4, 0x45, 0xE0, 0x90, 0xA4, 0x8F, 0xA6, 0x80, 0xCB, 0x89, 0x0C, 0x90, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x18, 0x00, 0xF7, 0x2F, 0x76, 0x90, 0xF8, 0x28, 0x94, 0x00, -0xF9, 0x0F, 0x58, 0x90, 0xFA, 0x08, 0x76, 0x00, 0xFA, 0xF8, 0x75, 0x10, 0xFB, 0xE8, 0x58, 0x00, -0xFC, 0xD8, 0x57, 0x10, 0xFD, 0xC8, 0x3A, 0x00, 0xFE, 0xB8, 0x39, 0x10, 0xFF, 0xA8, 0x1C, 0x00, -0x00, 0x98, 0x1B, 0x10, 0x01, 0x87, 0xFE, 0x00, 0x02, 0x77, 0xFD, 0x10, 0x03, 0x71, 0x1A, 0x80, -0x04, 0x61, 0x19, 0x90, 0x05, 0x50, 0xFC, 0x80, 0x06, 0x40, 0xFB, 0x90, 0x07, 0x30, 0xDE, 0x80, -0x07, 0x8D, 0x35, 0x90, 0x09, 0x10, 0xC0, 0x80, 0x09, 0xAD, 0xB1, 0x10, 0x0A, 0xF0, 0xA2, 0x80, -0x0B, 0xE0, 0xA1, 0x90, 0x0C, 0xD9, 0xBF, 0x00, 0x0D, 0xC0, 0x83, 0x90, 0x0E, 0xB9, 0xA1, 0x00, -0x0F, 0xA9, 0xA0, 0x10, 0x10, 0x99, 0x83, 0x00, 0x11, 0x89, 0x82, 0x10, 0x12, 0x79, 0x65, 0x00, -0x13, 0x69, 0x64, 0x10, 0x14, 0x59, 0x47, 0x00, 0x15, 0x49, 0x46, 0x10, 0x16, 0x39, 0x29, 0x00, -0x17, 0x29, 0x28, 0x10, 0x18, 0x22, 0x45, 0x80, 0x19, 0x09, 0x0A, 0x10, 0x1A, 0x02, 0x27, 0x80, -0x1A, 0xF2, 0x26, 0x90, 0x1B, 0xE2, 0x09, 0x80, 0x1C, 0xD2, 0x08, 0x90, 0x1D, 0xC1, 0xEB, 0x80, -0x1E, 0xB1, 0xEA, 0x90, 0x1F, 0xA1, 0xCD, 0x80, 0x20, 0x76, 0x1D, 0x10, 0x21, 0x81, 0xAF, 0x80, -0x22, 0x55, 0xFF, 0x10, 0x23, 0x6A, 0xCC, 0x00, 0x24, 0x35, 0xE1, 0x10, 0x25, 0x4A, 0xAE, 0x00, -0x26, 0x15, 0xC3, 0x10, 0x27, 0x2A, 0x90, 0x00, 0x27, 0xFE, 0xDF, 0x90, 0x29, 0x0A, 0x72, 0x00, -0x29, 0xDE, 0xC1, 0x90, 0x2A, 0xEA, 0x54, 0x00, 0x2B, 0xBE, 0xA3, 0x90, 0x2C, 0xD3, 0x70, 0x80, -0x2D, 0x9E, 0x85, 0x90, 0x2E, 0xB3, 0x52, 0x80, 0x2F, 0x7E, 0x67, 0x90, 0x30, 0x93, 0x34, 0x80, -0x31, 0x67, 0x84, 0x10, 0x32, 0x73, 0x16, 0x80, 0x33, 0x47, 0x66, 0x10, 0x34, 0x52, 0xF8, 0x80, -0x35, 0x27, 0x48, 0x10, 0x36, 0x32, 0xDA, 0x80, 0x37, 0x07, 0x2A, 0x10, 0x38, 0x1B, 0xF7, 0x00, -0x38, 0xE7, 0x0C, 0x10, 0x39, 0xFB, 0xD9, 0x00, 0x3A, 0xC6, 0xEE, 0x10, 0x3B, 0xDB, 0xBB, 0x00, -0x3C, 0xB0, 0x0A, 0x90, 0x3D, 0xBB, 0x9D, 0x00, 0x3E, 0x8F, 0xEC, 0x90, 0x3F, 0x9B, 0x7F, 0x00, -0x40, 0x6F, 0xCE, 0x90, 0x41, 0x84, 0x9B, 0x80, 0x42, 0x4F, 0xB0, 0x90, 0x43, 0x64, 0x7D, 0x80, -0x44, 0x2F, 0x92, 0x90, 0x45, 0x44, 0x5F, 0x80, 0x45, 0xF3, 0xC5, 0x10, 0x47, 0x2D, 0x7C, 0x00, -0x47, 0xD3, 0xA7, 0x10, 0x49, 0x0D, 0x5E, 0x00, 0x49, 0xB3, 0x89, 0x10, 0x4A, 0xED, 0x40, 0x00, -0x4B, 0x9C, 0xA5, 0x90, 0x4C, 0xD6, 0x5C, 0x80, 0x4D, 0x7C, 0x87, 0x90, 0x4E, 0xB6, 0x3E, 0x80, -0x4F, 0x5C, 0x69, 0x90, 0x50, 0x96, 0x20, 0x80, 0x51, 0x3C, 0x4B, 0x90, 0x52, 0x76, 0x02, 0x80, -0x53, 0x1C, 0x2D, 0x90, 0x54, 0x55, 0xE4, 0x80, 0x54, 0xFC, 0x0F, 0x90, 0x56, 0x35, 0xC6, 0x80, -0x56, 0xE5, 0x2C, 0x10, 0x58, 0x1E, 0xE3, 0x00, 0x58, 0xC5, 0x0E, 0x10, 0x59, 0xFE, 0xC5, 0x00, -0x5A, 0xA4, 0xF0, 0x10, 0x5B, 0xDE, 0xA7, 0x00, 0x5C, 0x84, 0xD2, 0x10, 0x5D, 0xBE, 0x89, 0x00, -0x5E, 0x64, 0xB4, 0x10, 0x5F, 0x9E, 0x6B, 0x00, 0x60, 0x4D, 0xD0, 0x90, 0x61, 0x87, 0x87, 0x80, -0x62, 0x2D, 0xB2, 0x90, 0x63, 0x67, 0x69, 0x80, 0x64, 0x0D, 0x94, 0x90, 0x65, 0x47, 0x4B, 0x80, -0x65, 0xED, 0x76, 0x90, 0x67, 0x27, 0x2D, 0x80, 0x67, 0xCD, 0x58, 0x90, 0x69, 0x07, 0x0F, 0x80, -0x69, 0xAD, 0x3A, 0x90, 0x6A, 0xE6, 0xF1, 0x80, 0x6B, 0x96, 0x57, 0x10, 0x6C, 0xD0, 0x0E, 0x00, -0x6D, 0x76, 0x39, 0x10, 0x6E, 0xAF, 0xF0, 0x00, 0x6F, 0x56, 0x1B, 0x10, 0x70, 0x8F, 0xD2, 0x00, -0x71, 0x35, 0xFD, 0x10, 0x72, 0x6F, 0xB4, 0x00, 0x73, 0x15, 0xDF, 0x10, 0x74, 0x4F, 0x96, 0x00, -0x74, 0xFE, 0xFB, 0x90, 0x76, 0x38, 0xB2, 0x80, 0x76, 0xDE, 0xDD, 0x90, 0x78, 0x18, 0x94, 0x80, -0x78, 0xBE, 0xBF, 0x90, 0x79, 0xF8, 0x76, 0x80, 0x7A, 0x9E, 0xA1, 0x90, 0x7B, 0xD8, 0x58, 0x80, -0x7C, 0x7E, 0x83, 0x90, 0x7D, 0xB8, 0x3A, 0x80, 0x7E, 0x5E, 0x65, 0x90, 0x7F, 0x98, 0x1C, 0x80, -0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 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, 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, 0xFF, 0xFF, 0xAB, -0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF, -0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, -0x00, 0x4D, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - -/* America/Detroit */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8B, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x85, 0xBD, 0x22, 0x5B, -0x99, 0x3C, 0x94, 0x00, 0xCB, 0x88, 0xF0, 0x70, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xFB, 0xE0, -0xD7, 0x35, 0xA8, 0xF0, 0xD8, 0x00, 0xA1, 0xE0, 0xFB, 0x33, 0xAC, 0x70, 0xFB, 0xE8, 0x3B, 0xE0, -0x06, 0x40, 0xDF, 0x70, 0x07, 0x30, 0xC2, 0x60, 0x07, 0x8D, 0x19, 0x70, 0x09, 0x10, 0xA4, 0x60, -0x0A, 0x00, 0xA3, 0x70, 0x0A, 0xF0, 0x86, 0x60, 0x0B, 0xE0, 0x85, 0x70, 0x0C, 0xD9, 0xA2, 0xE0, -0x0D, 0xC0, 0x67, 0x70, 0x0E, 0xB9, 0x84, 0xE0, 0x0F, 0xA9, 0x83, 0xF0, 0x10, 0x99, 0x66, 0xE0, -0x11, 0x89, 0x65, 0xF0, 0x12, 0x79, 0x48, 0xE0, 0x13, 0x69, 0x47, 0xF0, 0x14, 0x59, 0x2A, 0xE0, -0x15, 0x49, 0x29, 0xF0, 0x16, 0x39, 0x0C, 0xE0, 0x17, 0x29, 0x0B, 0xF0, 0x18, 0x22, 0x29, 0x60, -0x19, 0x08, 0xED, 0xF0, 0x1A, 0x02, 0x0B, 0x60, 0x1A, 0xF2, 0x0A, 0x70, 0x1B, 0xE1, 0xED, 0x60, -0x1C, 0xD1, 0xEC, 0x70, 0x1D, 0xC1, 0xCF, 0x60, 0x1E, 0xB1, 0xCE, 0x70, 0x1F, 0xA1, 0xB1, 0x60, -0x20, 0x76, 0x00, 0xF0, 0x21, 0x81, 0x93, 0x60, 0x22, 0x55, 0xE2, 0xF0, 0x23, 0x6A, 0xAF, 0xE0, -0x24, 0x35, 0xC4, 0xF0, 0x25, 0x4A, 0x91, 0xE0, 0x26, 0x15, 0xA6, 0xF0, 0x27, 0x2A, 0x73, 0xE0, -0x27, 0xFE, 0xC3, 0x70, 0x29, 0x0A, 0x55, 0xE0, 0x29, 0xDE, 0xA5, 0x70, 0x2A, 0xEA, 0x37, 0xE0, -0x2B, 0xBE, 0x87, 0x70, 0x2C, 0xD3, 0x54, 0x60, 0x2D, 0x9E, 0x69, 0x70, 0x2E, 0xB3, 0x36, 0x60, -0x2F, 0x7E, 0x4B, 0x70, 0x30, 0x93, 0x18, 0x60, 0x31, 0x67, 0x67, 0xF0, 0x32, 0x72, 0xFA, 0x60, -0x33, 0x47, 0x49, 0xF0, 0x34, 0x52, 0xDC, 0x60, 0x35, 0x27, 0x2B, 0xF0, 0x36, 0x32, 0xBE, 0x60, -0x37, 0x07, 0x0D, 0xF0, 0x38, 0x1B, 0xDA, 0xE0, 0x38, 0xE6, 0xEF, 0xF0, 0x39, 0xFB, 0xBC, 0xE0, -0x3A, 0xC6, 0xD1, 0xF0, 0x3B, 0xDB, 0x9E, 0xE0, 0x3C, 0xAF, 0xEE, 0x70, 0x3D, 0xBB, 0x80, 0xE0, -0x3E, 0x8F, 0xD0, 0x70, 0x3F, 0x9B, 0x62, 0xE0, 0x40, 0x6F, 0xB2, 0x70, 0x41, 0x84, 0x7F, 0x60, -0x42, 0x4F, 0x94, 0x70, 0x43, 0x64, 0x61, 0x60, 0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x43, 0x60, -0x45, 0xF3, 0xA8, 0xF0, 0x47, 0x2D, 0x5F, 0xE0, 0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x41, 0xE0, -0x49, 0xB3, 0x6C, 0xF0, 0x4A, 0xED, 0x23, 0xE0, 0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x40, 0x60, -0x4D, 0x7C, 0x6B, 0x70, 0x4E, 0xB6, 0x22, 0x60, 0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x04, 0x60, -0x51, 0x3C, 0x2F, 0x70, 0x52, 0x75, 0xE6, 0x60, 0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xC8, 0x60, -0x54, 0xFB, 0xF3, 0x70, 0x56, 0x35, 0xAA, 0x60, 0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, -0x58, 0xC4, 0xF1, 0xF0, 0x59, 0xFE, 0xA8, 0xE0, 0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, -0x5C, 0x84, 0xB5, 0xF0, 0x5D, 0xBE, 0x6C, 0xE0, 0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, -0x60, 0x4D, 0xB4, 0x70, 0x61, 0x87, 0x6B, 0x60, 0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, -0x64, 0x0D, 0x78, 0x70, 0x65, 0x47, 0x2F, 0x60, 0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, -0x67, 0xCD, 0x3C, 0x70, 0x69, 0x06, 0xF3, 0x60, 0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, -0x6B, 0x96, 0x3A, 0xF0, 0x6C, 0xCF, 0xF1, 0xE0, 0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, -0x6F, 0x55, 0xFE, 0xF0, 0x70, 0x8F, 0xB5, 0xE0, 0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, -0x73, 0x15, 0xC2, 0xF0, 0x74, 0x4F, 0x79, 0xE0, 0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, -0x76, 0xDE, 0xC1, 0x70, 0x78, 0x18, 0x78, 0x60, 0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, -0x7A, 0x9E, 0x85, 0x70, 0x7B, 0xD8, 0x3C, 0x60, 0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, -0x7E, 0x5E, 0x49, 0x70, 0x7F, 0x98, 0x00, 0x60, 0x01, 0x02, 0x03, 0x04, 0x02, 0x05, 0x02, 0x05, -0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, -0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, -0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, -0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, -0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, -0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, -0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, -0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, -0x02, 0x05, 0x02, 0xFF, 0xFF, 0xB2, 0x25, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, -0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, -0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x45, -0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - -/* America/Dominica */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF4, 0x34, 0x4C, -0x01, 0xFF, 0xFF, 0xC6, 0x70, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Edmonton */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x9A, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x88, 0xDE, 0xCE, 0xE0, -0x9E, 0xB8, 0xAF, 0x90, 0x9F, 0xC0, 0x4D, 0x80, 0xA0, 0x98, 0x91, 0x90, 0xA0, 0xD2, 0x85, 0x80, -0xA2, 0x8A, 0xE8, 0x90, 0xA3, 0x84, 0x06, 0x00, 0xA4, 0x6A, 0xCA, 0x90, 0xA5, 0x35, 0xC3, 0x80, -0xA6, 0x53, 0xE7, 0x10, 0xA7, 0x15, 0xA5, 0x80, 0xA8, 0x33, 0xC9, 0x10, 0xA8, 0xFE, 0xC2, 0x00, -0xCB, 0x89, 0x0C, 0x90, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x18, 0x00, 0xD5, 0x55, 0xE3, 0x10, -0xD6, 0x20, 0xDC, 0x00, 0xFA, 0xF8, 0x75, 0x10, 0xFB, 0xE8, 0x58, 0x00, 0xFE, 0xB8, 0x39, 0x10, -0xFF, 0xA8, 0x1C, 0x00, 0x04, 0x61, 0x19, 0x90, 0x05, 0x50, 0xFC, 0x80, 0x06, 0x40, 0xFB, 0x90, -0x07, 0x30, 0xDE, 0x80, 0x08, 0x20, 0xDD, 0x90, 0x09, 0x10, 0xC0, 0x80, 0x0A, 0x00, 0xBF, 0x90, -0x0A, 0xF0, 0xA2, 0x80, 0x0B, 0xE0, 0xA1, 0x90, 0x0C, 0xD9, 0xBF, 0x00, 0x0D, 0xC0, 0x83, 0x90, -0x0E, 0xB9, 0xA1, 0x00, 0x0F, 0xA9, 0xA0, 0x10, 0x10, 0x99, 0x83, 0x00, 0x11, 0x89, 0x82, 0x10, -0x12, 0x79, 0x65, 0x00, 0x13, 0x69, 0x64, 0x10, 0x14, 0x59, 0x47, 0x00, 0x15, 0x49, 0x46, 0x10, -0x16, 0x39, 0x29, 0x00, 0x17, 0x29, 0x28, 0x10, 0x18, 0x22, 0x45, 0x80, 0x19, 0x09, 0x0A, 0x10, -0x1A, 0x02, 0x27, 0x80, 0x1A, 0xF2, 0x26, 0x90, 0x1B, 0xE2, 0x09, 0x80, 0x1C, 0xD2, 0x08, 0x90, -0x1D, 0xC1, 0xEB, 0x80, 0x1E, 0xB1, 0xEA, 0x90, 0x1F, 0xA1, 0xCD, 0x80, 0x20, 0x76, 0x1D, 0x10, -0x21, 0x81, 0xAF, 0x80, 0x22, 0x55, 0xFF, 0x10, 0x23, 0x6A, 0xCC, 0x00, 0x24, 0x35, 0xE1, 0x10, -0x25, 0x4A, 0xAE, 0x00, 0x26, 0x15, 0xC3, 0x10, 0x27, 0x2A, 0x90, 0x00, 0x27, 0xFE, 0xDF, 0x90, -0x29, 0x0A, 0x72, 0x00, 0x29, 0xDE, 0xC1, 0x90, 0x2A, 0xEA, 0x54, 0x00, 0x2B, 0xBE, 0xA3, 0x90, -0x2C, 0xD3, 0x70, 0x80, 0x2D, 0x9E, 0x85, 0x90, 0x2E, 0xB3, 0x52, 0x80, 0x2F, 0x7E, 0x67, 0x90, -0x30, 0x93, 0x34, 0x80, 0x31, 0x67, 0x84, 0x10, 0x32, 0x73, 0x16, 0x80, 0x33, 0x47, 0x66, 0x10, -0x34, 0x52, 0xF8, 0x80, 0x35, 0x27, 0x48, 0x10, 0x36, 0x32, 0xDA, 0x80, 0x37, 0x07, 0x2A, 0x10, -0x38, 0x1B, 0xF7, 0x00, 0x38, 0xE7, 0x0C, 0x10, 0x39, 0xFB, 0xD9, 0x00, 0x3A, 0xC6, 0xEE, 0x10, -0x3B, 0xDB, 0xBB, 0x00, 0x3C, 0xB0, 0x0A, 0x90, 0x3D, 0xBB, 0x9D, 0x00, 0x3E, 0x8F, 0xEC, 0x90, -0x3F, 0x9B, 0x7F, 0x00, 0x40, 0x6F, 0xCE, 0x90, 0x41, 0x84, 0x9B, 0x80, 0x42, 0x4F, 0xB0, 0x90, -0x43, 0x64, 0x7D, 0x80, 0x44, 0x2F, 0x92, 0x90, 0x45, 0x44, 0x5F, 0x80, 0x45, 0xF3, 0xC5, 0x10, -0x47, 0x2D, 0x7C, 0x00, 0x47, 0xD3, 0xA7, 0x10, 0x49, 0x0D, 0x5E, 0x00, 0x49, 0xB3, 0x89, 0x10, -0x4A, 0xED, 0x40, 0x00, 0x4B, 0x9C, 0xA5, 0x90, 0x4C, 0xD6, 0x5C, 0x80, 0x4D, 0x7C, 0x87, 0x90, -0x4E, 0xB6, 0x3E, 0x80, 0x4F, 0x5C, 0x69, 0x90, 0x50, 0x96, 0x20, 0x80, 0x51, 0x3C, 0x4B, 0x90, -0x52, 0x76, 0x02, 0x80, 0x53, 0x1C, 0x2D, 0x90, 0x54, 0x55, 0xE4, 0x80, 0x54, 0xFC, 0x0F, 0x90, -0x56, 0x35, 0xC6, 0x80, 0x56, 0xE5, 0x2C, 0x10, 0x58, 0x1E, 0xE3, 0x00, 0x58, 0xC5, 0x0E, 0x10, -0x59, 0xFE, 0xC5, 0x00, 0x5A, 0xA4, 0xF0, 0x10, 0x5B, 0xDE, 0xA7, 0x00, 0x5C, 0x84, 0xD2, 0x10, -0x5D, 0xBE, 0x89, 0x00, 0x5E, 0x64, 0xB4, 0x10, 0x5F, 0x9E, 0x6B, 0x00, 0x60, 0x4D, 0xD0, 0x90, -0x61, 0x87, 0x87, 0x80, 0x62, 0x2D, 0xB2, 0x90, 0x63, 0x67, 0x69, 0x80, 0x64, 0x0D, 0x94, 0x90, -0x65, 0x47, 0x4B, 0x80, 0x65, 0xED, 0x76, 0x90, 0x67, 0x27, 0x2D, 0x80, 0x67, 0xCD, 0x58, 0x90, -0x69, 0x07, 0x0F, 0x80, 0x69, 0xAD, 0x3A, 0x90, 0x6A, 0xE6, 0xF1, 0x80, 0x6B, 0x96, 0x57, 0x10, -0x6C, 0xD0, 0x0E, 0x00, 0x6D, 0x76, 0x39, 0x10, 0x6E, 0xAF, 0xF0, 0x00, 0x6F, 0x56, 0x1B, 0x10, -0x70, 0x8F, 0xD2, 0x00, 0x71, 0x35, 0xFD, 0x10, 0x72, 0x6F, 0xB4, 0x00, 0x73, 0x15, 0xDF, 0x10, -0x74, 0x4F, 0x96, 0x00, 0x74, 0xFE, 0xFB, 0x90, 0x76, 0x38, 0xB2, 0x80, 0x76, 0xDE, 0xDD, 0x90, -0x78, 0x18, 0x94, 0x80, 0x78, 0xBE, 0xBF, 0x90, 0x79, 0xF8, 0x76, 0x80, 0x7A, 0x9E, 0xA1, 0x90, -0x7B, 0xD8, 0x58, 0x80, 0x7C, 0x7E, 0x83, 0x90, 0x7D, 0xB8, 0x3A, 0x80, 0x7E, 0x5E, 0x65, 0x90, -0x7F, 0x98, 0x1C, 0x80, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, -0x95, 0xA0, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x08, -0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, -0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, - -/* America/Eirunepe */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x88, 0x80, -0xB8, 0x0F, 0x66, 0x00, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xF1, 0x50, 0x50, 0xBA, 0xDE, 0x90, 0x40, -0xDA, 0x38, 0xCA, 0x50, 0xDA, 0xEC, 0x16, 0x50, 0xDC, 0x19, 0xFD, 0xD0, 0xDC, 0xB9, 0x75, 0x40, -0xDD, 0xFB, 0x31, 0x50, 0xDE, 0x9B, 0xFA, 0x40, 0xDF, 0xDD, 0xB6, 0x50, 0xE0, 0x54, 0x4F, 0x40, -0xF4, 0x98, 0x1B, 0xD0, 0xF5, 0x05, 0x7A, 0x40, 0xF6, 0xC0, 0x80, 0x50, 0xF7, 0x0E, 0x3A, 0xC0, -0xF8, 0x51, 0x48, 0x50, 0xF8, 0xC7, 0xE1, 0x40, 0xFA, 0x0A, 0xEE, 0xD0, 0xFA, 0xA9, 0x14, 0xC0, -0xFB, 0xEC, 0x22, 0x50, 0xFC, 0x8B, 0x99, 0xC0, 0x1D, 0xC9, 0xAA, 0x50, 0x1E, 0x78, 0xF3, 0xC0, -0x1F, 0xA0, 0x51, 0xD0, 0x20, 0x33, 0xEB, 0xC0, 0x21, 0x81, 0x85, 0x50, 0x22, 0x0B, 0xE4, 0xC0, -0x2C, 0xC0, 0xD1, 0x50, 0x2D, 0x66, 0xE0, 0x40, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xBE, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xC7, -0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x43, 0x53, -0x54, 0x00, 0x41, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/El_Salvador */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xA3, 0xD5, 0xA6, 0x20, -0x20, 0x9A, 0xDC, 0xE0, 0x21, 0x5C, 0x9B, 0x50, 0x22, 0x7A, 0xBE, 0xE0, 0x23, 0x3C, 0x7D, 0x50, -0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xAC, 0x60, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, -0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, -0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Ensenada */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0xA5, 0xB6, 0xF6, 0x80, -0xA9, 0x79, 0x4F, 0x70, 0xAF, 0xF2, 0x7C, 0xF0, 0xB6, 0x66, 0x64, 0x70, 0xB7, 0x1B, 0x10, 0x00, -0xB8, 0x0A, 0xF2, 0xF0, 0xCB, 0xEA, 0x8D, 0x80, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x99, 0xBA, 0x70, -0xD7, 0x1B, 0x59, 0x00, 0xD8, 0x91, 0xB4, 0xF0, 0xE2, 0x7E, 0x59, 0xA0, 0xE3, 0x49, 0x52, 0x90, -0xE4, 0x5E, 0x3B, 0xA0, 0xE5, 0x29, 0x34, 0x90, 0xE6, 0x47, 0x58, 0x20, 0xE7, 0x12, 0x51, 0x10, -0xE8, 0x27, 0x3A, 0x20, 0xE8, 0xF2, 0x33, 0x10, 0xEA, 0x07, 0x1C, 0x20, 0xEA, 0xD2, 0x15, 0x10, -0xEB, 0xE6, 0xFE, 0x20, 0xEC, 0xB1, 0xF7, 0x10, 0xED, 0xC6, 0xE0, 0x20, 0xEE, 0x91, 0xD9, 0x10, -0x0B, 0xE0, 0xAF, 0xA0, 0x0C, 0xD9, 0xCD, 0x10, 0x0D, 0xC0, 0x91, 0xA0, 0x0E, 0xB9, 0xAF, 0x10, -0x0F, 0xA9, 0xAE, 0x20, 0x10, 0x99, 0x91, 0x10, 0x11, 0x89, 0x90, 0x20, 0x12, 0x79, 0x73, 0x10, -0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, 0x15, 0x49, 0x54, 0x20, 0x16, 0x39, 0x37, 0x10, -0x17, 0x29, 0x36, 0x20, 0x18, 0x22, 0x53, 0x90, 0x19, 0x09, 0x18, 0x20, 0x1A, 0x02, 0x35, 0x90, -0x1A, 0xF2, 0x34, 0xA0, 0x1B, 0xE2, 0x17, 0x90, 0x1C, 0xD2, 0x16, 0xA0, 0x1D, 0xC1, 0xF9, 0x90, -0x1E, 0xB1, 0xF8, 0xA0, 0x1F, 0xA1, 0xDB, 0x90, 0x20, 0x76, 0x2B, 0x20, 0x21, 0x81, 0xBD, 0x90, -0x22, 0x56, 0x0D, 0x20, 0x23, 0x6A, 0xDA, 0x10, 0x24, 0x35, 0xEF, 0x20, 0x25, 0x4A, 0xBC, 0x10, -0x26, 0x15, 0xD1, 0x20, 0x27, 0x2A, 0x9E, 0x10, 0x27, 0xFE, 0xED, 0xA0, 0x29, 0x0A, 0x80, 0x10, -0x29, 0xDE, 0xCF, 0xA0, 0x2A, 0xEA, 0x62, 0x10, 0x2B, 0xBE, 0xB1, 0xA0, 0x2C, 0xD3, 0x7E, 0x90, -0x2D, 0x9E, 0x93, 0xA0, 0x2E, 0xB3, 0x60, 0x90, 0x2F, 0x7E, 0x75, 0xA0, 0x30, 0x93, 0x42, 0x90, -0x31, 0x67, 0x92, 0x20, 0x32, 0x73, 0x24, 0x90, 0x33, 0x47, 0x74, 0x20, 0x34, 0x53, 0x06, 0x90, -0x35, 0x27, 0x56, 0x20, 0x36, 0x32, 0xE8, 0x90, 0x37, 0x07, 0x38, 0x20, 0x38, 0x1C, 0x05, 0x10, -0x38, 0xE7, 0x1A, 0x20, 0x39, 0xFB, 0xE7, 0x10, 0x3A, 0xC6, 0xFC, 0x20, 0x3B, 0xDB, 0xC9, 0x10, -0x3C, 0xB0, 0x18, 0xA0, 0x3D, 0xBB, 0xAB, 0x10, 0x3E, 0x8F, 0xFA, 0xA0, 0x3F, 0x9B, 0x8D, 0x10, -0x40, 0x6F, 0xDC, 0xA0, 0x41, 0x84, 0xA9, 0x90, 0x42, 0x4F, 0xBE, 0xA0, 0x43, 0x64, 0x8B, 0x90, -0x44, 0x2F, 0xA0, 0xA0, 0x45, 0x44, 0x6D, 0x90, 0x46, 0x0F, 0x82, 0xA0, 0x47, 0x24, 0x4F, 0x90, -0x47, 0xF8, 0x9F, 0x20, 0x49, 0x04, 0x31, 0x90, 0x49, 0xD8, 0x81, 0x20, 0x4A, 0xE4, 0x13, 0x90, -0x4B, 0xB8, 0x63, 0x20, 0x4C, 0xCD, 0x30, 0x10, 0x4D, 0x98, 0x45, 0x20, 0x4E, 0xAD, 0x12, 0x10, -0x4F, 0x78, 0x27, 0x20, 0x50, 0x8C, 0xF4, 0x10, 0x51, 0x61, 0x43, 0xA0, 0x52, 0x6C, 0xD6, 0x10, -0x53, 0x41, 0x25, 0xA0, 0x54, 0x4C, 0xB8, 0x10, 0x55, 0x21, 0x07, 0xA0, 0x56, 0x2C, 0x9A, 0x10, -0x57, 0x00, 0xE9, 0xA0, 0x58, 0x15, 0xB6, 0x90, 0x58, 0xE0, 0xCB, 0xA0, 0x59, 0xF5, 0x98, 0x90, -0x5A, 0xC0, 0xAD, 0xA0, 0x5B, 0xD5, 0x7A, 0x90, 0x5C, 0xA9, 0xCA, 0x20, 0x5D, 0xB5, 0x5C, 0x90, -0x5E, 0x89, 0xAC, 0x20, 0x5F, 0x95, 0x3E, 0x90, 0x60, 0x69, 0x8E, 0x20, 0x61, 0x7E, 0x5B, 0x10, -0x62, 0x49, 0x70, 0x20, 0x63, 0x5E, 0x3D, 0x10, 0x64, 0x29, 0x52, 0x20, 0x65, 0x3E, 0x1F, 0x10, -0x66, 0x12, 0x6E, 0xA0, 0x67, 0x1E, 0x01, 0x10, 0x67, 0xF2, 0x50, 0xA0, 0x68, 0xFD, 0xE3, 0x10, -0x69, 0xD2, 0x32, 0xA0, 0x6A, 0xDD, 0xC5, 0x10, 0x6B, 0xB2, 0x14, 0xA0, 0x6C, 0xC6, 0xE1, 0x90, -0x6D, 0x91, 0xF6, 0xA0, 0x6E, 0xA6, 0xC3, 0x90, 0x6F, 0x71, 0xD8, 0xA0, 0x70, 0x86, 0xA5, 0x90, -0x71, 0x5A, 0xF5, 0x20, 0x72, 0x66, 0x87, 0x90, 0x73, 0x3A, 0xD7, 0x20, 0x74, 0x46, 0x69, 0x90, -0x75, 0x1A, 0xB9, 0x20, 0x76, 0x2F, 0x86, 0x10, 0x76, 0xFA, 0x9B, 0x20, 0x78, 0x0F, 0x68, 0x10, -0x78, 0xDA, 0x7D, 0x20, 0x79, 0xEF, 0x4A, 0x10, 0x7A, 0xBA, 0x5F, 0x20, 0x7B, 0xCF, 0x2C, 0x10, -0x7C, 0xA3, 0x7B, 0xA0, 0x7D, 0xAF, 0x0E, 0x10, 0x7E, 0x83, 0x5D, 0xA0, 0x7F, 0x8E, 0xF0, 0x10, -0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x04, 0x05, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0xFF, 0xFF, 0x92, 0x4C, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, -0x04, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, 0x9D, -0x90, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, -0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - -/* America/Fortaleza */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x6B, 0x18, -0xB8, 0x0F, 0x49, 0xE0, 0xB8, 0xFD, 0x40, 0xA0, 0xB9, 0xF1, 0x34, 0x30, 0xBA, 0xDE, 0x74, 0x20, -0xDA, 0x38, 0xAE, 0x30, 0xDA, 0xEB, 0xFA, 0x30, 0xDC, 0x19, 0xE1, 0xB0, 0xDC, 0xB9, 0x59, 0x20, -0xDD, 0xFB, 0x15, 0x30, 0xDE, 0x9B, 0xDE, 0x20, 0xDF, 0xDD, 0x9A, 0x30, 0xE0, 0x54, 0x33, 0x20, -0xF4, 0x97, 0xFF, 0xB0, 0xF5, 0x05, 0x5E, 0x20, 0xF6, 0xC0, 0x64, 0x30, 0xF7, 0x0E, 0x1E, 0xA0, -0xF8, 0x51, 0x2C, 0x30, 0xF8, 0xC7, 0xC5, 0x20, 0xFA, 0x0A, 0xD2, 0xB0, 0xFA, 0xA8, 0xF8, 0xA0, -0xFB, 0xEC, 0x06, 0x30, 0xFC, 0x8B, 0x7D, 0xA0, 0x1D, 0xC9, 0x8E, 0x30, 0x1E, 0x78, 0xD7, 0xA0, -0x1F, 0xA0, 0x35, 0xB0, 0x20, 0x33, 0xCF, 0xA0, 0x21, 0x81, 0x69, 0x30, 0x22, 0x0B, 0xC8, 0xA0, -0x23, 0x58, 0x10, 0xB0, 0x23, 0xE2, 0x70, 0x20, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xD4, 0xC7, 0x20, -0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xB8, 0x85, 0x20, 0x39, 0xDF, 0xE3, 0x30, 0x39, 0xF2, 0x4A, 0x20, -0x3B, 0xC8, 0xFF, 0xB0, 0x3C, 0x6F, 0x0E, 0xA0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, -0xFF, 0xDB, 0xE8, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, -0x09, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, - -/* America/Fort_Wayne */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCA, 0x57, 0x22, 0x80, -0xCA, 0xD8, 0x47, 0x70, 0xCB, 0x88, 0xFE, 0x80, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, -0xD3, 0x75, 0xF3, 0x00, 0xD4, 0x40, 0xEB, 0xF0, 0xD5, 0x55, 0xD5, 0x00, 0xD6, 0x20, 0xCD, 0xF0, -0xD7, 0x35, 0xB7, 0x00, 0xD8, 0x00, 0xAF, 0xF0, 0xD9, 0x15, 0x99, 0x00, 0xD9, 0xE0, 0x91, 0xF0, -0xDA, 0xFE, 0xB5, 0x80, 0xDB, 0xC0, 0x73, 0xF0, 0xDC, 0xDE, 0x97, 0x80, 0xDD, 0xA9, 0x90, 0x70, -0xDE, 0xBE, 0x79, 0x80, 0xDF, 0x89, 0x72, 0x70, 0xE0, 0x9E, 0x5B, 0x80, 0xE1, 0x69, 0x54, 0x70, -0xE2, 0x7E, 0x3D, 0x80, 0xE3, 0x49, 0x36, 0x70, 0xE4, 0x5E, 0x1F, 0x80, 0xE8, 0xF2, 0x16, 0xF0, -0xEA, 0x07, 0x00, 0x00, 0xFE, 0xB8, 0x1C, 0xF0, 0xFF, 0xA7, 0xFF, 0xE0, 0x00, 0x97, 0xFE, 0xF0, -0x01, 0x87, 0xE1, 0xE0, 0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x43, 0x60, 0x45, 0xF3, 0xA8, 0xF0, -0x47, 0x2D, 0x5F, 0xE0, 0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x41, 0xE0, 0x49, 0xB3, 0x6C, 0xF0, -0x4A, 0xED, 0x23, 0xE0, 0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x40, 0x60, 0x4D, 0x7C, 0x6B, 0x70, -0x4E, 0xB6, 0x22, 0x60, 0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x04, 0x60, 0x51, 0x3C, 0x2F, 0x70, -0x52, 0x75, 0xE6, 0x60, 0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xC8, 0x60, 0x54, 0xFB, 0xF3, 0x70, -0x56, 0x35, 0xAA, 0x60, 0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, 0x58, 0xC4, 0xF1, 0xF0, -0x59, 0xFE, 0xA8, 0xE0, 0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, 0x5C, 0x84, 0xB5, 0xF0, -0x5D, 0xBE, 0x6C, 0xE0, 0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, 0x60, 0x4D, 0xB4, 0x70, -0x61, 0x87, 0x6B, 0x60, 0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, 0x64, 0x0D, 0x78, 0x70, -0x65, 0x47, 0x2F, 0x60, 0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, 0x67, 0xCD, 0x3C, 0x70, -0x69, 0x06, 0xF3, 0x60, 0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, 0x6B, 0x96, 0x3A, 0xF0, -0x6C, 0xCF, 0xF1, 0xE0, 0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, 0x6F, 0x55, 0xFE, 0xF0, -0x70, 0x8F, 0xB5, 0xE0, 0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, 0x73, 0x15, 0xC2, 0xF0, -0x74, 0x4F, 0x79, 0xE0, 0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, 0x76, 0xDE, 0xC1, 0x70, -0x78, 0x18, 0x78, 0x60, 0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, 0x7A, 0x9E, 0x85, 0x70, -0x7B, 0xD8, 0x3C, 0x60, 0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, 0x7E, 0x5E, 0x49, 0x70, -0x7F, 0x98, 0x00, 0x60, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x01, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x04, -0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, -0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, -0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, -0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, -0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - -/* America/Glace_Bay */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x80, 0xF1, 0xA8, 0x34, -0x9E, 0xB8, 0x85, 0x60, 0x9F, 0xC0, 0x23, 0x50, 0xCB, 0x88, 0xE2, 0x60, 0xD2, 0x23, 0xF4, 0x70, -0xD2, 0x60, 0xED, 0xD0, 0xE0, 0x9E, 0x3F, 0x60, 0xE1, 0x69, 0x38, 0x50, 0x04, 0x60, 0xEF, 0x60, -0x05, 0x50, 0xD2, 0x50, 0x06, 0x40, 0xD1, 0x60, 0x07, 0x30, 0xB4, 0x50, 0x08, 0x20, 0xB3, 0x60, -0x09, 0x10, 0x96, 0x50, 0x0A, 0x00, 0x95, 0x60, 0x0A, 0xF0, 0x78, 0x50, 0x0B, 0xE0, 0x77, 0x60, -0x0C, 0xD9, 0x94, 0xD0, 0x0D, 0xC0, 0x59, 0x60, 0x0E, 0xB9, 0x76, 0xD0, 0x0F, 0xA9, 0x75, 0xE0, -0x10, 0x99, 0x58, 0xD0, 0x11, 0x89, 0x57, 0xE0, 0x12, 0x79, 0x3A, 0xD0, 0x13, 0x69, 0x39, 0xE0, -0x14, 0x59, 0x1C, 0xD0, 0x15, 0x49, 0x1B, 0xE0, 0x16, 0x38, 0xFE, 0xD0, 0x17, 0x28, 0xFD, 0xE0, -0x18, 0x22, 0x1B, 0x50, 0x19, 0x08, 0xDF, 0xE0, 0x1A, 0x01, 0xFD, 0x50, 0x1A, 0xF1, 0xFC, 0x60, -0x1B, 0xE1, 0xDF, 0x50, 0x1C, 0xD1, 0xDE, 0x60, 0x1D, 0xC1, 0xC1, 0x50, 0x1E, 0xB1, 0xC0, 0x60, -0x1F, 0xA1, 0xA3, 0x50, 0x20, 0x75, 0xF2, 0xE0, 0x21, 0x81, 0x85, 0x50, 0x22, 0x55, 0xD4, 0xE0, -0x23, 0x6A, 0xA1, 0xD0, 0x24, 0x35, 0xB6, 0xE0, 0x25, 0x4A, 0x83, 0xD0, 0x26, 0x15, 0x98, 0xE0, -0x27, 0x2A, 0x65, 0xD0, 0x27, 0xFE, 0xB5, 0x60, 0x29, 0x0A, 0x47, 0xD0, 0x29, 0xDE, 0x97, 0x60, -0x2A, 0xEA, 0x29, 0xD0, 0x2B, 0xBE, 0x79, 0x60, 0x2C, 0xD3, 0x46, 0x50, 0x2D, 0x9E, 0x5B, 0x60, -0x2E, 0xB3, 0x28, 0x50, 0x2F, 0x7E, 0x3D, 0x60, 0x30, 0x93, 0x0A, 0x50, 0x31, 0x67, 0x59, 0xE0, -0x32, 0x72, 0xEC, 0x50, 0x33, 0x47, 0x3B, 0xE0, 0x34, 0x52, 0xCE, 0x50, 0x35, 0x27, 0x1D, 0xE0, -0x36, 0x32, 0xB0, 0x50, 0x37, 0x06, 0xFF, 0xE0, 0x38, 0x1B, 0xCC, 0xD0, 0x38, 0xE6, 0xE1, 0xE0, -0x39, 0xFB, 0xAE, 0xD0, 0x3A, 0xC6, 0xC3, 0xE0, 0x3B, 0xDB, 0x90, 0xD0, 0x3C, 0xAF, 0xE0, 0x60, -0x3D, 0xBB, 0x72, 0xD0, 0x3E, 0x8F, 0xC2, 0x60, 0x3F, 0x9B, 0x54, 0xD0, 0x40, 0x6F, 0xA4, 0x60, -0x41, 0x84, 0x71, 0x50, 0x42, 0x4F, 0x86, 0x60, 0x43, 0x64, 0x53, 0x50, 0x44, 0x2F, 0x68, 0x60, -0x45, 0x44, 0x35, 0x50, 0x45, 0xF3, 0x9A, 0xE0, 0x47, 0x2D, 0x51, 0xD0, 0x47, 0xD3, 0x7C, 0xE0, -0x49, 0x0D, 0x33, 0xD0, 0x49, 0xB3, 0x5E, 0xE0, 0x4A, 0xED, 0x15, 0xD0, 0x4B, 0x9C, 0x7B, 0x60, -0x4C, 0xD6, 0x32, 0x50, 0x4D, 0x7C, 0x5D, 0x60, 0x4E, 0xB6, 0x14, 0x50, 0x4F, 0x5C, 0x3F, 0x60, -0x50, 0x95, 0xF6, 0x50, 0x51, 0x3C, 0x21, 0x60, 0x52, 0x75, 0xD8, 0x50, 0x53, 0x1C, 0x03, 0x60, -0x54, 0x55, 0xBA, 0x50, 0x54, 0xFB, 0xE5, 0x60, 0x56, 0x35, 0x9C, 0x50, 0x56, 0xE5, 0x01, 0xE0, -0x58, 0x1E, 0xB8, 0xD0, 0x58, 0xC4, 0xE3, 0xE0, 0x59, 0xFE, 0x9A, 0xD0, 0x5A, 0xA4, 0xC5, 0xE0, -0x5B, 0xDE, 0x7C, 0xD0, 0x5C, 0x84, 0xA7, 0xE0, 0x5D, 0xBE, 0x5E, 0xD0, 0x5E, 0x64, 0x89, 0xE0, -0x5F, 0x9E, 0x40, 0xD0, 0x60, 0x4D, 0xA6, 0x60, 0x61, 0x87, 0x5D, 0x50, 0x62, 0x2D, 0x88, 0x60, -0x63, 0x67, 0x3F, 0x50, 0x64, 0x0D, 0x6A, 0x60, 0x65, 0x47, 0x21, 0x50, 0x65, 0xED, 0x4C, 0x60, -0x67, 0x27, 0x03, 0x50, 0x67, 0xCD, 0x2E, 0x60, 0x69, 0x06, 0xE5, 0x50, 0x69, 0xAD, 0x10, 0x60, -0x6A, 0xE6, 0xC7, 0x50, 0x6B, 0x96, 0x2C, 0xE0, 0x6C, 0xCF, 0xE3, 0xD0, 0x6D, 0x76, 0x0E, 0xE0, -0x6E, 0xAF, 0xC5, 0xD0, 0x6F, 0x55, 0xF0, 0xE0, 0x70, 0x8F, 0xA7, 0xD0, 0x71, 0x35, 0xD2, 0xE0, -0x72, 0x6F, 0x89, 0xD0, 0x73, 0x15, 0xB4, 0xE0, 0x74, 0x4F, 0x6B, 0xD0, 0x74, 0xFE, 0xD1, 0x60, -0x76, 0x38, 0x88, 0x50, 0x76, 0xDE, 0xB3, 0x60, 0x78, 0x18, 0x6A, 0x50, 0x78, 0xBE, 0x95, 0x60, -0x79, 0xF8, 0x4C, 0x50, 0x7A, 0x9E, 0x77, 0x60, 0x7B, 0xD8, 0x2E, 0x50, 0x7C, 0x7E, 0x59, 0x60, -0x7D, 0xB8, 0x10, 0x50, 0x7E, 0x5E, 0x3B, 0x60, 0x7F, 0x97, 0xF2, 0x50, 0x02, 0x01, 0x02, 0x03, -0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xC7, 0xCC, 0x00, 0x00, 0xFF, 0xFF, -0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x0C, -0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x41, 0x53, -0x54, 0x00, 0x41, 0x57, 0x54, 0x00, 0x41, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, -0x00, 0x00, 0x00, 0x01, - -/* America/Godthab */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x9B, 0x80, 0x68, 0x00, -0x13, 0x4D, 0x7C, 0x50, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x01, 0x04, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0xFF, 0xFF, 0xCF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, -0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, -0xE0, 0x01, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x47, 0x54, 0x00, 0x57, 0x47, 0x53, 0x54, 0x00, -0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, - -/* America/Goose_Bay */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xCB, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1D, 0x9E, 0xB8, 0x7E, 0x8C, -0x9F, 0xC0, 0x1C, 0x7C, 0xBE, 0x9E, 0x4D, 0x6C, 0xC0, 0xB8, 0x31, 0x38, 0xC1, 0x79, 0xEF, 0xA8, -0xC2, 0x98, 0x13, 0x38, 0xC3, 0x59, 0xD1, 0xA8, 0xC4, 0x77, 0xF5, 0x38, 0xC5, 0x39, 0xB3, 0xA8, -0xC6, 0x61, 0x11, 0xB8, 0xC7, 0x19, 0x95, 0xA8, 0xC8, 0x40, 0xF3, 0xB8, 0xC9, 0x02, 0xB2, 0x28, -0xCA, 0x20, 0xD5, 0xB8, 0xCA, 0xE2, 0x94, 0x28, 0xCC, 0x00, 0xB7, 0xB8, 0xD2, 0x23, 0xF4, 0x70, -0xD2, 0x60, 0xE6, 0xC8, 0xD3, 0x88, 0x44, 0xD8, 0xD4, 0x4A, 0x03, 0x48, 0xD5, 0x68, 0x26, 0xD8, -0xD6, 0x29, 0xE5, 0x48, 0xD7, 0x48, 0x08, 0xD8, 0xD8, 0x09, 0xC7, 0x48, 0xD9, 0x27, 0xEA, 0xD8, -0xD9, 0xE9, 0xA9, 0x48, 0xDB, 0x11, 0x07, 0x58, 0xDB, 0xD2, 0xC5, 0xC8, 0xDC, 0xDE, 0x74, 0x58, -0xDD, 0xA9, 0x6D, 0x48, 0xDE, 0xBE, 0x56, 0x58, 0xDF, 0x89, 0x4F, 0x48, 0xE0, 0x9E, 0x38, 0x58, -0xE1, 0x69, 0x31, 0x48, 0xE2, 0x7E, 0x1A, 0x58, 0xE3, 0x49, 0x13, 0x48, 0xE4, 0x5D, 0xFC, 0x58, -0xE5, 0x28, 0xF5, 0x48, 0xE6, 0x47, 0x18, 0xD8, 0xE7, 0x12, 0x11, 0xC8, 0xE8, 0x26, 0xFA, 0xD8, -0xE8, 0xF1, 0xF3, 0xC8, 0xEA, 0x06, 0xDC, 0xD8, 0xEA, 0xD1, 0xD5, 0xC8, 0xEB, 0xE6, 0xBE, 0xD8, -0xEC, 0xB1, 0xB7, 0xC8, 0xED, 0xC6, 0xA0, 0xD8, 0xEE, 0xBF, 0xBE, 0x48, 0xEF, 0xAF, 0xBD, 0x58, -0xF0, 0x9F, 0xA0, 0x48, 0xF1, 0x8F, 0x9F, 0x58, 0xF2, 0x7F, 0x82, 0x48, 0xF3, 0x6F, 0x81, 0x58, -0xF4, 0x5F, 0x64, 0x48, 0xF5, 0x4F, 0x63, 0x58, 0xF6, 0x3F, 0x46, 0x48, 0xF7, 0x2F, 0x45, 0x58, -0xF8, 0x28, 0x62, 0xC8, 0xF8, 0xDA, 0x6B, 0x58, 0xF9, 0x0F, 0x2E, 0x60, 0xFA, 0x08, 0x4B, 0xD0, -0xFA, 0xF8, 0x4A, 0xE0, 0xFB, 0xE8, 0x2D, 0xD0, 0xFC, 0xD8, 0x2C, 0xE0, 0xFD, 0xC8, 0x0F, 0xD0, -0xFE, 0xB8, 0x0E, 0xE0, 0xFF, 0xA7, 0xF1, 0xD0, 0x00, 0x97, 0xF0, 0xE0, 0x01, 0x87, 0xD3, 0xD0, -0x02, 0x77, 0xD2, 0xE0, 0x03, 0x70, 0xF0, 0x50, 0x04, 0x60, 0xEF, 0x60, 0x05, 0x50, 0xD2, 0x50, -0x06, 0x40, 0xD1, 0x60, 0x07, 0x30, 0xB4, 0x50, 0x08, 0x20, 0xB3, 0x60, 0x09, 0x10, 0x96, 0x50, -0x0A, 0x00, 0x95, 0x60, 0x0A, 0xF0, 0x78, 0x50, 0x0B, 0xE0, 0x77, 0x60, 0x0C, 0xD9, 0x94, 0xD0, -0x0D, 0xC0, 0x59, 0x60, 0x0E, 0xB9, 0x76, 0xD0, 0x0F, 0xA9, 0x75, 0xE0, 0x10, 0x99, 0x58, 0xD0, -0x11, 0x89, 0x57, 0xE0, 0x12, 0x79, 0x3A, 0xD0, 0x13, 0x69, 0x39, 0xE0, 0x14, 0x59, 0x1C, 0xD0, -0x15, 0x49, 0x1B, 0xE0, 0x16, 0x38, 0xFE, 0xD0, 0x17, 0x28, 0xFD, 0xE0, 0x18, 0x22, 0x1B, 0x50, -0x19, 0x08, 0xDF, 0xE0, 0x1A, 0x01, 0xFD, 0x50, 0x1A, 0xF1, 0xFC, 0x60, 0x1B, 0xE1, 0xDF, 0x50, -0x1C, 0xD1, 0xDE, 0x60, 0x1D, 0xC1, 0xC1, 0x50, 0x1E, 0xB1, 0xC0, 0x60, 0x1F, 0xA1, 0xA3, 0x50, -0x20, 0x75, 0xD6, 0xFC, 0x21, 0x81, 0x69, 0x6C, 0x22, 0x55, 0xB8, 0xFC, 0x23, 0x6A, 0x77, 0xDC, -0x24, 0x35, 0x9A, 0xFC, 0x25, 0x4A, 0x67, 0xEC, 0x26, 0x15, 0x7C, 0xFC, 0x27, 0x2A, 0x49, 0xEC, -0x27, 0xFE, 0x99, 0x7C, 0x29, 0x0A, 0x2B, 0xEC, 0x29, 0xDE, 0x7B, 0x7C, 0x2A, 0xEA, 0x0D, 0xEC, -0x2B, 0xBE, 0x5D, 0x7C, 0x2C, 0xD3, 0x2A, 0x6C, 0x2D, 0x9E, 0x3F, 0x7C, 0x2E, 0xB3, 0x0C, 0x6C, -0x2F, 0x7E, 0x21, 0x7C, 0x30, 0x92, 0xEE, 0x6C, 0x31, 0x67, 0x3D, 0xFC, 0x32, 0x72, 0xD0, 0x6C, -0x33, 0x47, 0x1F, 0xFC, 0x34, 0x52, 0xB2, 0x6C, 0x35, 0x27, 0x01, 0xFC, 0x36, 0x32, 0x94, 0x6C, -0x37, 0x06, 0xE3, 0xFC, 0x38, 0x1B, 0xB0, 0xEC, 0x38, 0xE6, 0xC5, 0xFC, 0x39, 0xFB, 0x92, 0xEC, -0x3A, 0xC6, 0xA7, 0xFC, 0x3B, 0xDB, 0x74, 0xEC, 0x3C, 0xAF, 0xC4, 0x7C, 0x3D, 0xBB, 0x56, 0xEC, -0x3E, 0x8F, 0xA6, 0x7C, 0x3F, 0x9B, 0x38, 0xEC, 0x40, 0x6F, 0x88, 0x7C, 0x41, 0x84, 0x55, 0x6C, -0x42, 0x4F, 0x6A, 0x7C, 0x43, 0x64, 0x37, 0x6C, 0x44, 0x2F, 0x4C, 0x7C, 0x45, 0x44, 0x19, 0x6C, -0x45, 0xF3, 0x7E, 0xFC, 0x47, 0x2D, 0x35, 0xEC, 0x47, 0xD3, 0x60, 0xFC, 0x49, 0x0D, 0x17, 0xEC, -0x49, 0xB3, 0x42, 0xFC, 0x4A, 0xEC, 0xF9, 0xEC, 0x4B, 0x9C, 0x5F, 0x7C, 0x4C, 0xD6, 0x16, 0x6C, -0x4D, 0x7C, 0x41, 0x7C, 0x4E, 0xB5, 0xF8, 0x6C, 0x4F, 0x5C, 0x23, 0x7C, 0x50, 0x95, 0xDA, 0x6C, -0x51, 0x3C, 0x05, 0x7C, 0x52, 0x75, 0xBC, 0x6C, 0x53, 0x1B, 0xE7, 0x7C, 0x54, 0x55, 0x9E, 0x6C, -0x54, 0xFB, 0xC9, 0x7C, 0x56, 0x35, 0x80, 0x6C, 0x56, 0xE4, 0xE5, 0xFC, 0x58, 0x1E, 0x9C, 0xEC, -0x58, 0xC4, 0xC7, 0xFC, 0x59, 0xFE, 0x7E, 0xEC, 0x5A, 0xA4, 0xA9, 0xFC, 0x5B, 0xDE, 0x60, 0xEC, -0x5C, 0x84, 0x8B, 0xFC, 0x5D, 0xBE, 0x42, 0xEC, 0x5E, 0x64, 0x6D, 0xFC, 0x5F, 0x9E, 0x24, 0xEC, -0x60, 0x4D, 0x8A, 0x7C, 0x61, 0x87, 0x41, 0x6C, 0x62, 0x2D, 0x6C, 0x7C, 0x63, 0x67, 0x23, 0x6C, -0x64, 0x0D, 0x4E, 0x7C, 0x65, 0x47, 0x05, 0x6C, 0x65, 0xED, 0x30, 0x7C, 0x67, 0x26, 0xE7, 0x6C, -0x67, 0xCD, 0x12, 0x7C, 0x69, 0x06, 0xC9, 0x6C, 0x69, 0xAC, 0xF4, 0x7C, 0x6A, 0xE6, 0xAB, 0x6C, -0x6B, 0x96, 0x10, 0xFC, 0x6C, 0xCF, 0xC7, 0xEC, 0x6D, 0x75, 0xF2, 0xFC, 0x6E, 0xAF, 0xA9, 0xEC, -0x6F, 0x55, 0xD4, 0xFC, 0x70, 0x8F, 0x8B, 0xEC, 0x71, 0x35, 0xB6, 0xFC, 0x72, 0x6F, 0x6D, 0xEC, -0x73, 0x15, 0x98, 0xFC, 0x74, 0x4F, 0x4F, 0xEC, 0x74, 0xFE, 0xB5, 0x7C, 0x76, 0x38, 0x6C, 0x6C, -0x76, 0xDE, 0x97, 0x7C, 0x78, 0x18, 0x4E, 0x6C, 0x78, 0xBE, 0x79, 0x7C, 0x79, 0xF8, 0x30, 0x6C, -0x7A, 0x9E, 0x5B, 0x7C, 0x7B, 0xD8, 0x12, 0x6C, 0x7C, 0x7E, 0x3D, 0x7C, 0x7D, 0xB7, 0xF4, 0x6C, -0x7E, 0x5E, 0x1F, 0x7C, 0x7F, 0x97, 0xD6, 0x6C, 0x01, 0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x05, 0x04, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x08, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0xFF, 0xFF, 0xCE, 0x94, 0x00, 0x00, 0xFF, 0xFF, 0xDC, 0xA4, 0x01, 0x04, 0xFF, -0xFF, 0xCE, 0xC8, 0x00, 0x00, 0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x04, 0xFF, 0xFF, 0xDC, 0xD8, 0x01, -0x08, 0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, -0xC0, 0x00, 0x14, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x18, 0x4E, 0x53, 0x54, 0x00, 0x4E, 0x44, 0x54, -0x00, 0x4E, 0x50, 0x54, 0x00, 0x4E, 0x57, 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x41, 0x53, 0x54, -0x00, 0x41, 0x44, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - -/* America/Grand_Turk */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x0F, 0xB5, 0x00, -0x11, 0x89, 0x49, 0xD0, 0x12, 0x79, 0x2C, 0xC0, 0x13, 0x69, 0x2B, 0xD0, 0x14, 0x59, 0x0E, 0xC0, -0x15, 0x49, 0x0D, 0xD0, 0x16, 0x38, 0xF0, 0xC0, 0x17, 0x28, 0xEF, 0xD0, 0x18, 0x22, 0x0D, 0x40, -0x19, 0x08, 0xD1, 0xD0, 0x1A, 0x01, 0xEF, 0x40, 0x1A, 0xF1, 0xEE, 0x50, 0x1B, 0xE1, 0xD1, 0x40, -0x1C, 0xD1, 0xD0, 0x50, 0x1D, 0xC1, 0xB3, 0x40, 0x1E, 0xB1, 0xB2, 0x50, 0x1F, 0xA1, 0x95, 0x40, -0x20, 0x75, 0xE4, 0xD0, 0x21, 0x81, 0x77, 0x40, 0x22, 0x55, 0xC6, 0xD0, 0x23, 0x6A, 0x93, 0xC0, -0x24, 0x35, 0xA8, 0xD0, 0x25, 0x4A, 0x75, 0xC0, 0x26, 0x15, 0x8A, 0xD0, 0x27, 0x2A, 0x57, 0xC0, -0x27, 0xFE, 0xA7, 0x50, 0x29, 0x0A, 0x39, 0xC0, 0x29, 0xDE, 0x89, 0x50, 0x2A, 0xEA, 0x1B, 0xC0, -0x2B, 0xBE, 0x6B, 0x50, 0x2C, 0xD3, 0x38, 0x40, 0x2D, 0x9E, 0x4D, 0x50, 0x2E, 0xB3, 0x1A, 0x40, -0x2F, 0x7E, 0x2F, 0x50, 0x30, 0x92, 0xFC, 0x40, 0x31, 0x67, 0x4B, 0xD0, 0x32, 0x72, 0xDE, 0x40, -0x33, 0x47, 0x2D, 0xD0, 0x34, 0x52, 0xC0, 0x40, 0x35, 0x27, 0x0F, 0xD0, 0x36, 0x32, 0xA2, 0x40, -0x37, 0x06, 0xF1, 0xD0, 0x38, 0x1B, 0xBE, 0xC0, 0x38, 0xE6, 0xD3, 0xD0, 0x39, 0xFB, 0xA0, 0xC0, -0x3A, 0xC6, 0xB5, 0xD0, 0x3B, 0xDB, 0x82, 0xC0, 0x3C, 0xAF, 0xD2, 0x50, 0x3D, 0xBB, 0x64, 0xC0, -0x3E, 0x8F, 0xB4, 0x50, 0x3F, 0x9B, 0x46, 0xC0, 0x40, 0x6F, 0x96, 0x50, 0x41, 0x84, 0x63, 0x40, -0x42, 0x4F, 0x78, 0x50, 0x43, 0x64, 0x45, 0x40, 0x44, 0x2F, 0x5A, 0x50, 0x45, 0x44, 0x27, 0x40, -0x46, 0x0F, 0x3C, 0x50, 0x47, 0x24, 0x09, 0x40, 0x47, 0xF8, 0x58, 0xD0, 0x49, 0x03, 0xEB, 0x40, -0x49, 0xD8, 0x3A, 0xD0, 0x4A, 0xE3, 0xCD, 0x40, 0x4B, 0xB8, 0x1C, 0xD0, 0x4C, 0xCC, 0xE9, 0xC0, -0x4D, 0x97, 0xFE, 0xD0, 0x4E, 0xAC, 0xCB, 0xC0, 0x4F, 0x77, 0xE0, 0xD0, 0x50, 0x8C, 0xAD, 0xC0, -0x51, 0x60, 0xFD, 0x50, 0x52, 0x6C, 0x8F, 0xC0, 0x53, 0x40, 0xDF, 0x50, 0x54, 0x4C, 0x71, 0xC0, -0x55, 0x20, 0xC1, 0x50, 0x56, 0x2C, 0x53, 0xC0, 0x57, 0x00, 0xA3, 0x50, 0x58, 0x15, 0x70, 0x40, -0x58, 0xE0, 0x85, 0x50, 0x59, 0xF5, 0x52, 0x40, 0x5A, 0xC0, 0x67, 0x50, 0x5B, 0xD5, 0x34, 0x40, -0x5C, 0xA9, 0x83, 0xD0, 0x5D, 0xB5, 0x16, 0x40, 0x5E, 0x89, 0x65, 0xD0, 0x5F, 0x94, 0xF8, 0x40, -0x60, 0x69, 0x47, 0xD0, 0x61, 0x7E, 0x14, 0xC0, 0x62, 0x49, 0x29, 0xD0, 0x63, 0x5D, 0xF6, 0xC0, -0x64, 0x29, 0x0B, 0xD0, 0x65, 0x3D, 0xD8, 0xC0, 0x66, 0x12, 0x28, 0x50, 0x67, 0x1D, 0xBA, 0xC0, -0x67, 0xF2, 0x0A, 0x50, 0x68, 0xFD, 0x9C, 0xC0, 0x69, 0xD1, 0xEC, 0x50, 0x6A, 0xDD, 0x7E, 0xC0, -0x6B, 0xB1, 0xCE, 0x50, 0x6C, 0xC6, 0x9B, 0x40, 0x6D, 0x91, 0xB0, 0x50, 0x6E, 0xA6, 0x7D, 0x40, -0x6F, 0x71, 0x92, 0x50, 0x70, 0x86, 0x5F, 0x40, 0x71, 0x5A, 0xAE, 0xD0, 0x72, 0x66, 0x41, 0x40, -0x73, 0x3A, 0x90, 0xD0, 0x74, 0x46, 0x23, 0x40, 0x75, 0x1A, 0x72, 0xD0, 0x76, 0x2F, 0x3F, 0xC0, -0x76, 0xFA, 0x54, 0xD0, 0x78, 0x0F, 0x21, 0xC0, 0x78, 0xDA, 0x36, 0xD0, 0x79, 0xEF, 0x03, 0xC0, -0x7A, 0xBA, 0x18, 0xD0, 0x7B, 0xCE, 0xE5, 0xC0, 0x7C, 0xA3, 0x35, 0x50, 0x7D, 0xAE, 0xC7, 0xC0, -0x7E, 0x83, 0x17, 0x50, 0x7F, 0x8E, 0xA9, 0xC0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, -0xFF, 0xB8, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, -0x08, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, - -/* America/Grenada */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF4, 0x34, 0x64, -0x01, 0xFF, 0xFF, 0xC6, 0x1C, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Guadeloupe */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xD5, 0xE1, 0xB0, -0x01, 0xFF, 0xFF, 0xC6, 0x50, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Guatemala */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x9F, 0x9D, 0xEA, 0xDC, -0x07, 0x55, 0xAC, 0x60, 0x07, 0xCD, 0x96, 0xD0, 0x19, 0x2C, 0x78, 0x60, 0x19, 0xCF, 0xE4, 0x50, -0x27, 0xEA, 0xEE, 0xE0, 0x28, 0xC8, 0x5C, 0xD0, 0x44, 0x54, 0x52, 0x60, 0x45, 0x1F, 0x4B, 0x50, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xAB, 0x24, 0x00, 0x00, 0xFF, -0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, -0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Guayaquil */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xB6, 0xA4, 0x42, 0x18, -0x01, 0xFF, 0xFF, 0xB6, 0x68, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0x51, 0x4D, 0x54, -0x00, 0x45, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Guyana */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x98, 0xD9, 0x79, 0x88, -0xF9, 0x39, 0x3E, 0xBC, 0x0A, 0x7D, 0xB4, 0x3C, 0x27, 0x7F, 0xFB, 0x30, 0x01, 0x02, 0x03, 0x04, -0xFF, 0xFF, 0xC9, 0x78, 0x00, 0x00, 0xFF, 0xFF, 0xCB, 0x44, 0x00, 0x04, 0xFF, 0xFF, 0xCB, 0x44, -0x00, 0x09, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x09, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x09, 0x4C, 0x4D, -0x54, 0x00, 0x47, 0x42, 0x47, 0x54, 0x00, 0x47, 0x59, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Halifax */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xE4, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x80, 0xF1, 0xAB, 0xA0, -0x9A, 0xE4, 0xDE, 0xC0, 0x9B, 0xD6, 0x13, 0x30, 0x9E, 0xB8, 0x85, 0x60, 0x9F, 0xC0, 0x23, 0x50, -0xA2, 0x9D, 0x17, 0x40, 0xA3, 0x30, 0xB1, 0x30, 0xA4, 0x7A, 0x56, 0x40, 0xA5, 0x1B, 0x1F, 0x30, -0xA6, 0x53, 0xA0, 0xC0, 0xA6, 0xFC, 0x52, 0xB0, 0xA8, 0x3C, 0xBD, 0x40, 0xA8, 0xDC, 0x34, 0xB0, -0xAA, 0x1C, 0x9F, 0x40, 0xAA, 0xCD, 0x3A, 0x30, 0xAB, 0xFC, 0x81, 0x40, 0xAC, 0xBF, 0x91, 0x30, -0xAD, 0xEE, 0xD8, 0x40, 0xAE, 0x8C, 0xFE, 0x30, 0xAF, 0xBC, 0x45, 0x40, 0xB0, 0x7F, 0x55, 0x30, -0xB1, 0xAE, 0x9C, 0x40, 0xB2, 0x4B, 0x70, 0xB0, 0xB3, 0x8E, 0x7E, 0x40, 0xB4, 0x24, 0xBB, 0x30, -0xB5, 0x6E, 0x60, 0x40, 0xB6, 0x15, 0xC0, 0xB0, 0xB7, 0x4E, 0x42, 0x40, 0xB8, 0x08, 0x17, 0xB0, -0xB9, 0x24, 0xE9, 0xC0, 0xB9, 0xE7, 0xF9, 0xB0, 0xBB, 0x04, 0xCB, 0xC0, 0xBB, 0xD1, 0x16, 0x30, -0xBD, 0x00, 0x5D, 0x40, 0xBD, 0x9D, 0x31, 0xB0, 0xBE, 0xF2, 0xB4, 0x40, 0xBF, 0x90, 0xDA, 0x30, -0xC0, 0xD3, 0xE7, 0xC0, 0xC1, 0x5E, 0x47, 0x30, 0xC2, 0x8D, 0x8E, 0x40, 0xC3, 0x50, 0x9E, 0x30, -0xC4, 0x6D, 0x70, 0x40, 0xC5, 0x30, 0x80, 0x30, 0xC6, 0x72, 0x3C, 0x40, 0xC7, 0x10, 0x62, 0x30, -0xC8, 0x36, 0x6E, 0xC0, 0xC8, 0xF9, 0x7E, 0xB0, 0xCA, 0x16, 0x50, 0xC0, 0xCA, 0xD9, 0x60, 0xB0, -0xCB, 0x88, 0xE2, 0x60, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xED, 0xD0, 0xD3, 0x75, 0xD6, 0xE0, -0xD4, 0x40, 0xCF, 0xD0, 0xD5, 0x55, 0xB8, 0xE0, 0xD6, 0x20, 0xB1, 0xD0, 0xD7, 0x35, 0x9A, 0xE0, -0xD8, 0x00, 0x93, 0xD0, 0xD9, 0x15, 0x7C, 0xE0, 0xD9, 0xE0, 0x75, 0xD0, 0xDC, 0xDE, 0x7B, 0x60, -0xDD, 0xA9, 0x74, 0x50, 0xDE, 0xBE, 0x5D, 0x60, 0xDF, 0x89, 0x56, 0x50, 0xE0, 0x9E, 0x3F, 0x60, -0xE1, 0x69, 0x38, 0x50, 0xE2, 0x7E, 0x21, 0x60, 0xE3, 0x49, 0x1A, 0x50, 0xE6, 0x47, 0x1F, 0xE0, -0xE7, 0x12, 0x18, 0xD0, 0xE8, 0x27, 0x01, 0xE0, 0xE8, 0xF1, 0xFA, 0xD0, 0xEA, 0x06, 0xE3, 0xE0, -0xEA, 0xD1, 0xDC, 0xD0, 0xEB, 0xE6, 0xC5, 0xE0, 0xEC, 0xB1, 0xBE, 0xD0, 0xF1, 0x8F, 0xA6, 0x60, -0xF2, 0x7F, 0x89, 0x50, 0xF3, 0x6F, 0x88, 0x60, 0xF4, 0x5F, 0x6B, 0x50, 0xF5, 0x4F, 0x6A, 0x60, -0xF6, 0x3F, 0x4D, 0x50, 0xF7, 0x2F, 0x4C, 0x60, 0xF8, 0x28, 0x69, 0xD0, 0xF9, 0x0F, 0x2E, 0x60, -0xFA, 0x08, 0x4B, 0xD0, 0xFA, 0xF8, 0x4A, 0xE0, 0xFB, 0xE8, 0x2D, 0xD0, 0xFC, 0xD8, 0x2C, 0xE0, -0xFD, 0xC8, 0x0F, 0xD0, 0xFE, 0xB8, 0x0E, 0xE0, 0xFF, 0xA7, 0xF1, 0xD0, 0x00, 0x97, 0xF0, 0xE0, -0x01, 0x87, 0xD3, 0xD0, 0x02, 0x77, 0xD2, 0xE0, 0x03, 0x70, 0xF0, 0x50, 0x04, 0x60, 0xEF, 0x60, -0x05, 0x50, 0xD2, 0x50, 0x06, 0x40, 0xD1, 0x60, 0x07, 0x30, 0xB4, 0x50, 0x08, 0x20, 0xB3, 0x60, -0x09, 0x10, 0x96, 0x50, 0x0A, 0x00, 0x95, 0x60, 0x0A, 0xF0, 0x78, 0x50, 0x0B, 0xE0, 0x77, 0x60, -0x0C, 0xD9, 0x94, 0xD0, 0x0D, 0xC0, 0x59, 0x60, 0x0E, 0xB9, 0x76, 0xD0, 0x0F, 0xA9, 0x75, 0xE0, -0x10, 0x99, 0x58, 0xD0, 0x11, 0x89, 0x57, 0xE0, 0x12, 0x79, 0x3A, 0xD0, 0x13, 0x69, 0x39, 0xE0, -0x14, 0x59, 0x1C, 0xD0, 0x15, 0x49, 0x1B, 0xE0, 0x16, 0x38, 0xFE, 0xD0, 0x17, 0x28, 0xFD, 0xE0, -0x18, 0x22, 0x1B, 0x50, 0x19, 0x08, 0xDF, 0xE0, 0x1A, 0x01, 0xFD, 0x50, 0x1A, 0xF1, 0xFC, 0x60, -0x1B, 0xE1, 0xDF, 0x50, 0x1C, 0xD1, 0xDE, 0x60, 0x1D, 0xC1, 0xC1, 0x50, 0x1E, 0xB1, 0xC0, 0x60, -0x1F, 0xA1, 0xA3, 0x50, 0x20, 0x75, 0xF2, 0xE0, 0x21, 0x81, 0x85, 0x50, 0x22, 0x55, 0xD4, 0xE0, -0x23, 0x6A, 0xA1, 0xD0, 0x24, 0x35, 0xB6, 0xE0, 0x25, 0x4A, 0x83, 0xD0, 0x26, 0x15, 0x98, 0xE0, -0x27, 0x2A, 0x65, 0xD0, 0x27, 0xFE, 0xB5, 0x60, 0x29, 0x0A, 0x47, 0xD0, 0x29, 0xDE, 0x97, 0x60, -0x2A, 0xEA, 0x29, 0xD0, 0x2B, 0xBE, 0x79, 0x60, 0x2C, 0xD3, 0x46, 0x50, 0x2D, 0x9E, 0x5B, 0x60, -0x2E, 0xB3, 0x28, 0x50, 0x2F, 0x7E, 0x3D, 0x60, 0x30, 0x93, 0x0A, 0x50, 0x31, 0x67, 0x59, 0xE0, -0x32, 0x72, 0xEC, 0x50, 0x33, 0x47, 0x3B, 0xE0, 0x34, 0x52, 0xCE, 0x50, 0x35, 0x27, 0x1D, 0xE0, -0x36, 0x32, 0xB0, 0x50, 0x37, 0x06, 0xFF, 0xE0, 0x38, 0x1B, 0xCC, 0xD0, 0x38, 0xE6, 0xE1, 0xE0, -0x39, 0xFB, 0xAE, 0xD0, 0x3A, 0xC6, 0xC3, 0xE0, 0x3B, 0xDB, 0x90, 0xD0, 0x3C, 0xAF, 0xE0, 0x60, -0x3D, 0xBB, 0x72, 0xD0, 0x3E, 0x8F, 0xC2, 0x60, 0x3F, 0x9B, 0x54, 0xD0, 0x40, 0x6F, 0xA4, 0x60, -0x41, 0x84, 0x71, 0x50, 0x42, 0x4F, 0x86, 0x60, 0x43, 0x64, 0x53, 0x50, 0x44, 0x2F, 0x68, 0x60, -0x45, 0x44, 0x35, 0x50, 0x45, 0xF3, 0x9A, 0xE0, 0x47, 0x2D, 0x51, 0xD0, 0x47, 0xD3, 0x7C, 0xE0, -0x49, 0x0D, 0x33, 0xD0, 0x49, 0xB3, 0x5E, 0xE0, 0x4A, 0xED, 0x15, 0xD0, 0x4B, 0x9C, 0x7B, 0x60, -0x4C, 0xD6, 0x32, 0x50, 0x4D, 0x7C, 0x5D, 0x60, 0x4E, 0xB6, 0x14, 0x50, 0x4F, 0x5C, 0x3F, 0x60, -0x50, 0x95, 0xF6, 0x50, 0x51, 0x3C, 0x21, 0x60, 0x52, 0x75, 0xD8, 0x50, 0x53, 0x1C, 0x03, 0x60, -0x54, 0x55, 0xBA, 0x50, 0x54, 0xFB, 0xE5, 0x60, 0x56, 0x35, 0x9C, 0x50, 0x56, 0xE5, 0x01, 0xE0, -0x58, 0x1E, 0xB8, 0xD0, 0x58, 0xC4, 0xE3, 0xE0, 0x59, 0xFE, 0x9A, 0xD0, 0x5A, 0xA4, 0xC5, 0xE0, -0x5B, 0xDE, 0x7C, 0xD0, 0x5C, 0x84, 0xA7, 0xE0, 0x5D, 0xBE, 0x5E, 0xD0, 0x5E, 0x64, 0x89, 0xE0, -0x5F, 0x9E, 0x40, 0xD0, 0x60, 0x4D, 0xA6, 0x60, 0x61, 0x87, 0x5D, 0x50, 0x62, 0x2D, 0x88, 0x60, -0x63, 0x67, 0x3F, 0x50, 0x64, 0x0D, 0x6A, 0x60, 0x65, 0x47, 0x21, 0x50, 0x65, 0xED, 0x4C, 0x60, -0x67, 0x27, 0x03, 0x50, 0x67, 0xCD, 0x2E, 0x60, 0x69, 0x06, 0xE5, 0x50, 0x69, 0xAD, 0x10, 0x60, -0x6A, 0xE6, 0xC7, 0x50, 0x6B, 0x96, 0x2C, 0xE0, 0x6C, 0xCF, 0xE3, 0xD0, 0x6D, 0x76, 0x0E, 0xE0, -0x6E, 0xAF, 0xC5, 0xD0, 0x6F, 0x55, 0xF0, 0xE0, 0x70, 0x8F, 0xA7, 0xD0, 0x71, 0x35, 0xD2, 0xE0, -0x72, 0x6F, 0x89, 0xD0, 0x73, 0x15, 0xB4, 0xE0, 0x74, 0x4F, 0x6B, 0xD0, 0x74, 0xFE, 0xD1, 0x60, -0x76, 0x38, 0x88, 0x50, 0x76, 0xDE, 0xB3, 0x60, 0x78, 0x18, 0x6A, 0x50, 0x78, 0xBE, 0x95, 0x60, -0x79, 0xF8, 0x4C, 0x50, 0x7A, 0x9E, 0x77, 0x60, 0x7B, 0xD8, 0x2E, 0x50, 0x7C, 0x7E, 0x59, 0x60, -0x7D, 0xB8, 0x10, 0x50, 0x7E, 0x5E, 0x3B, 0x60, 0x7F, 0x97, 0xF2, 0x50, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0xFF, 0xFF, 0xC4, 0x60, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, -0x00, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0x4C, 0x4D, -0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x57, 0x54, 0x00, 0x41, 0x50, -0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, - -/* America/Havana */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0C, 0xAC, 0x62, 0xC2, 0x80, -0xB1, 0xD3, 0x94, 0x50, 0xB2, 0x74, 0x5D, 0x40, 0xC8, 0x5B, 0x66, 0xD0, 0xC8, 0xD3, 0x51, 0x40, -0xCA, 0x3B, 0x48, 0xD0, 0xCA, 0xBC, 0x6D, 0xC0, 0xCC, 0x24, 0x65, 0x50, 0xCC, 0x9C, 0x4F, 0xC0, -0xD1, 0xC4, 0x0B, 0x50, 0xD2, 0x3B, 0xF5, 0xC0, 0xD3, 0xA3, 0xED, 0x50, 0xD4, 0x1B, 0xD7, 0xC0, -0xF7, 0x60, 0x05, 0xD0, 0xF7, 0xFF, 0x7D, 0x40, 0xF9, 0x3D, 0x44, 0xD0, 0xF9, 0xE3, 0x53, 0xC0, -0xFA, 0xDB, 0x3B, 0xD0, 0xFB, 0xA7, 0x86, 0x40, 0xFC, 0xC5, 0xA9, 0xD0, 0xFD, 0x87, 0x68, 0x40, -0xFE, 0xB8, 0x00, 0xD0, 0xFF, 0xA7, 0xE3, 0xC0, 0x00, 0x97, 0xE2, 0xD0, 0x01, 0x87, 0xC5, 0xC0, -0x02, 0x77, 0xC4, 0xD0, 0x03, 0x70, 0xE2, 0x40, 0x04, 0x60, 0xE1, 0x50, 0x05, 0x35, 0x14, 0xC0, -0x06, 0x40, 0xC3, 0x50, 0x07, 0x16, 0x48, 0x40, 0x08, 0x20, 0xA5, 0x50, 0x08, 0xF7, 0x7B, 0xC0, -0x0A, 0x00, 0x87, 0x50, 0x0A, 0xF0, 0x6A, 0x40, 0x0B, 0xE0, 0x69, 0x50, 0x0C, 0xD9, 0x86, 0xC0, -0x0D, 0xC0, 0x4B, 0x50, 0x0E, 0xB9, 0x68, 0xC0, 0x0F, 0xB2, 0xA2, 0x50, 0x10, 0x7D, 0x9B, 0x40, -0x11, 0x51, 0xEA, 0xD0, 0x12, 0x66, 0xB7, 0xC0, 0x13, 0x31, 0xCC, 0xD0, 0x14, 0x46, 0x99, 0xC0, -0x15, 0x5B, 0x82, 0xD0, 0x16, 0x26, 0x7B, 0xC0, 0x17, 0x3B, 0x64, 0xD0, 0x18, 0x06, 0x5D, 0xC0, -0x19, 0x1B, 0x46, 0xD0, 0x19, 0xE6, 0x3F, 0xC0, 0x1A, 0xFB, 0x28, 0xD0, 0x1B, 0xCF, 0x5C, 0x40, -0x1C, 0xDB, 0x0A, 0xD0, 0x1D, 0xAF, 0x3E, 0x40, 0x1E, 0x7A, 0x53, 0x50, 0x1F, 0x8F, 0x20, 0x40, -0x20, 0x5A, 0x35, 0x50, 0x21, 0x6F, 0x02, 0x40, 0x22, 0x43, 0x51, 0xD0, 0x23, 0x4E, 0xE4, 0x40, -0x24, 0x23, 0x33, 0xD0, 0x25, 0x2E, 0xC6, 0x40, 0x26, 0x15, 0x8A, 0xD0, 0x27, 0x17, 0xE2, 0xC0, -0x27, 0xFE, 0xA7, 0x50, 0x28, 0xF7, 0xD2, 0xD0, 0x29, 0xDE, 0x89, 0x50, 0x2A, 0xD7, 0xB4, 0xD0, -0x2B, 0xBE, 0x6B, 0x50, 0x2C, 0xB7, 0x96, 0xD0, 0x2D, 0x9E, 0x4D, 0x50, 0x2E, 0x97, 0x78, 0xD0, -0x2F, 0x7E, 0x2F, 0x50, 0x30, 0x77, 0x5A, 0xD0, 0x31, 0x67, 0x4B, 0xD0, 0x32, 0x57, 0x3C, 0xD0, -0x33, 0x47, 0x2D, 0xD0, 0x34, 0x40, 0x59, 0x50, 0x35, 0x1D, 0xD5, 0x50, 0x36, 0x32, 0xB0, 0x50, -0x36, 0xFD, 0xB7, 0x50, 0x38, 0x1B, 0xCC, 0xD0, 0x38, 0xE6, 0xD3, 0xD0, 0x39, 0xFB, 0xAE, 0xD0, -0x3A, 0xC6, 0xB5, 0xD0, 0x3B, 0xDB, 0x90, 0xD0, 0x3C, 0xAF, 0xD2, 0x50, 0x3D, 0xBB, 0x72, 0xD0, -0x3E, 0x8F, 0xB4, 0x50, 0x3F, 0x9B, 0x54, 0xD0, 0x40, 0x6F, 0x96, 0x50, 0x45, 0x44, 0x35, 0x50, -0x46, 0x0F, 0x3C, 0x50, 0x47, 0x24, 0x17, 0x50, 0x47, 0xF8, 0x58, 0xD0, 0x49, 0x03, 0xF9, 0x50, -0x49, 0xD8, 0x3A, 0xD0, 0x4A, 0xE3, 0xDB, 0x50, 0x4B, 0xB8, 0x1C, 0xD0, 0x4C, 0xCC, 0xF7, 0xD0, -0x4D, 0x97, 0xFE, 0xD0, 0x4E, 0xAC, 0xD9, 0xD0, 0x4F, 0x77, 0xE0, 0xD0, 0x50, 0x8C, 0xBB, 0xD0, -0x51, 0x60, 0xFD, 0x50, 0x52, 0x6C, 0x9D, 0xD0, 0x53, 0x40, 0xDF, 0x50, 0x54, 0x4C, 0x7F, 0xD0, -0x55, 0x20, 0xC1, 0x50, 0x56, 0x2C, 0x61, 0xD0, 0x57, 0x00, 0xA3, 0x50, 0x58, 0x15, 0x7E, 0x50, -0x58, 0xE0, 0x85, 0x50, 0x59, 0xF5, 0x60, 0x50, 0x5A, 0xC0, 0x67, 0x50, 0x5B, 0xD5, 0x42, 0x50, -0x5C, 0xA9, 0x83, 0xD0, 0x5D, 0xB5, 0x24, 0x50, 0x5E, 0x89, 0x65, 0xD0, 0x5F, 0x95, 0x06, 0x50, -0x60, 0x69, 0x47, 0xD0, 0x61, 0x7E, 0x22, 0xD0, 0x62, 0x49, 0x29, 0xD0, 0x63, 0x5E, 0x04, 0xD0, -0x64, 0x29, 0x0B, 0xD0, 0x65, 0x3D, 0xE6, 0xD0, 0x66, 0x12, 0x28, 0x50, 0x67, 0x1D, 0xC8, 0xD0, -0x67, 0xF2, 0x0A, 0x50, 0x68, 0xFD, 0xAA, 0xD0, 0x69, 0xD1, 0xEC, 0x50, 0x6A, 0xDD, 0x8C, 0xD0, -0x6B, 0xB1, 0xCE, 0x50, 0x6C, 0xC6, 0xA9, 0x50, 0x6D, 0x91, 0xB0, 0x50, 0x6E, 0xA6, 0x8B, 0x50, -0x6F, 0x71, 0x92, 0x50, 0x70, 0x86, 0x6D, 0x50, 0x71, 0x5A, 0xAE, 0xD0, 0x72, 0x66, 0x4F, 0x50, -0x73, 0x3A, 0x90, 0xD0, 0x74, 0x46, 0x31, 0x50, 0x75, 0x1A, 0x72, 0xD0, 0x76, 0x2F, 0x4D, 0xD0, -0x76, 0xFA, 0x54, 0xD0, 0x78, 0x0F, 0x2F, 0xD0, 0x78, 0xDA, 0x36, 0xD0, 0x79, 0xEF, 0x11, 0xD0, -0x7A, 0xBA, 0x18, 0xD0, 0x7B, 0xCE, 0xF3, 0xD0, 0x7C, 0xA3, 0x35, 0x50, 0x7D, 0xAE, 0xD5, 0xD0, -0x7E, 0x83, 0x17, 0x50, 0x7F, 0x8E, 0xB7, 0xD0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, -0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0xFF, 0xFF, 0xB2, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, -0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, -0x04, 0x48, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, -0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Hermosillo */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xA5, 0xB6, 0xE8, 0x70, -0xAF, 0xF2, 0x6E, 0xE0, 0xB6, 0x66, 0x56, 0x60, 0xB7, 0x43, 0xD2, 0x60, 0xB8, 0x0C, 0x36, 0x60, -0xB8, 0xFD, 0x86, 0xF0, 0xCB, 0xEA, 0x71, 0x60, 0xD8, 0x91, 0xB4, 0xF0, 0x00, 0x00, 0x70, 0x80, -0x31, 0x67, 0x84, 0x10, 0x32, 0x73, 0x16, 0x80, 0x33, 0x47, 0x66, 0x10, 0x34, 0x52, 0xF8, 0x80, -0x35, 0x27, 0x48, 0x10, 0x36, 0x32, 0xDA, 0x80, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, -0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0xFF, 0xFF, 0x97, 0xF8, 0x00, 0x00, 0xFF, 0xFF, 0x9D, -0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x0C, 0xFF, -0xFF, 0xAB, 0xA0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x43, 0x53, 0x54, -0x00, 0x50, 0x53, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, - -/* America/Indiana/Indianapolis */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCA, 0x57, 0x22, 0x80, -0xCA, 0xD8, 0x47, 0x70, 0xCB, 0x88, 0xFE, 0x80, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, -0xD3, 0x75, 0xF3, 0x00, 0xD4, 0x40, 0xEB, 0xF0, 0xD5, 0x55, 0xD5, 0x00, 0xD6, 0x20, 0xCD, 0xF0, -0xD7, 0x35, 0xB7, 0x00, 0xD8, 0x00, 0xAF, 0xF0, 0xD9, 0x15, 0x99, 0x00, 0xD9, 0xE0, 0x91, 0xF0, -0xDA, 0xFE, 0xB5, 0x80, 0xDB, 0xC0, 0x73, 0xF0, 0xDC, 0xDE, 0x97, 0x80, 0xDD, 0xA9, 0x90, 0x70, -0xDE, 0xBE, 0x79, 0x80, 0xDF, 0x89, 0x72, 0x70, 0xE0, 0x9E, 0x5B, 0x80, 0xE1, 0x69, 0x54, 0x70, -0xE2, 0x7E, 0x3D, 0x80, 0xE3, 0x49, 0x36, 0x70, 0xE4, 0x5E, 0x1F, 0x80, 0xE8, 0xF2, 0x16, 0xF0, -0xEA, 0x07, 0x00, 0x00, 0xFE, 0xB8, 0x1C, 0xF0, 0xFF, 0xA7, 0xFF, 0xE0, 0x00, 0x97, 0xFE, 0xF0, -0x01, 0x87, 0xE1, 0xE0, 0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x43, 0x60, 0x45, 0xF3, 0xA8, 0xF0, -0x47, 0x2D, 0x5F, 0xE0, 0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x41, 0xE0, 0x49, 0xB3, 0x6C, 0xF0, -0x4A, 0xED, 0x23, 0xE0, 0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x40, 0x60, 0x4D, 0x7C, 0x6B, 0x70, -0x4E, 0xB6, 0x22, 0x60, 0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x04, 0x60, 0x51, 0x3C, 0x2F, 0x70, -0x52, 0x75, 0xE6, 0x60, 0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xC8, 0x60, 0x54, 0xFB, 0xF3, 0x70, -0x56, 0x35, 0xAA, 0x60, 0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, 0x58, 0xC4, 0xF1, 0xF0, -0x59, 0xFE, 0xA8, 0xE0, 0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, 0x5C, 0x84, 0xB5, 0xF0, -0x5D, 0xBE, 0x6C, 0xE0, 0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, 0x60, 0x4D, 0xB4, 0x70, -0x61, 0x87, 0x6B, 0x60, 0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, 0x64, 0x0D, 0x78, 0x70, -0x65, 0x47, 0x2F, 0x60, 0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, 0x67, 0xCD, 0x3C, 0x70, -0x69, 0x06, 0xF3, 0x60, 0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, 0x6B, 0x96, 0x3A, 0xF0, -0x6C, 0xCF, 0xF1, 0xE0, 0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, 0x6F, 0x55, 0xFE, 0xF0, -0x70, 0x8F, 0xB5, 0xE0, 0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, 0x73, 0x15, 0xC2, 0xF0, -0x74, 0x4F, 0x79, 0xE0, 0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, 0x76, 0xDE, 0xC1, 0x70, -0x78, 0x18, 0x78, 0x60, 0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, 0x7A, 0x9E, 0x85, 0x70, -0x7B, 0xD8, 0x3C, 0x60, 0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, 0x7E, 0x5E, 0x49, 0x70, -0x7F, 0x98, 0x00, 0x60, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x01, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x04, -0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, -0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, -0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, -0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, -0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - -/* America/Indiana/Knox */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x9E, 0xA6, 0x2C, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, 0xD5, 0x55, 0xD5, 0x00, 0xD6, 0x20, 0xCD, 0xF0, -0xD7, 0x35, 0xB7, 0x00, 0xD8, 0x00, 0xAF, 0xF0, 0xD9, 0x15, 0x99, 0x00, 0xD9, 0xE0, 0x91, 0xF0, -0xDA, 0xFE, 0xB5, 0x80, 0xDB, 0xC0, 0x73, 0xF0, 0xDC, 0xDE, 0x97, 0x80, 0xDD, 0xA9, 0x90, 0x70, -0xDE, 0xBE, 0x79, 0x80, 0xDF, 0x89, 0x72, 0x70, 0xE0, 0x9E, 0x5B, 0x80, 0xE1, 0x69, 0x54, 0x70, -0xE2, 0x7E, 0x3D, 0x80, 0xE3, 0x49, 0x36, 0x70, 0xE4, 0x5E, 0x1F, 0x80, 0xE5, 0x57, 0x3C, 0xF0, -0xE6, 0x47, 0x3C, 0x00, 0xE7, 0x37, 0x1E, 0xF0, 0xE8, 0x27, 0x1E, 0x00, 0xE8, 0xF2, 0x16, 0xF0, -0xEA, 0x07, 0x00, 0x00, 0xEA, 0xD1, 0xF8, 0xF0, 0xEB, 0xE6, 0xE2, 0x00, 0xEC, 0xD6, 0xC4, 0xF0, -0xED, 0xC6, 0xC4, 0x00, 0xEE, 0xBF, 0xE1, 0x70, 0xEF, 0xAF, 0xE0, 0x80, 0xF0, 0x9F, 0xC3, 0x70, -0xF1, 0x8F, 0xC2, 0x80, 0xF4, 0x5F, 0x87, 0x70, 0xFA, 0xF8, 0x67, 0x00, 0xFB, 0xE8, 0x49, 0xF0, -0xFC, 0xD8, 0x49, 0x00, 0xFD, 0xC8, 0x2B, 0xF0, 0xFE, 0xB8, 0x2B, 0x00, 0xFF, 0xA8, 0x0D, 0xF0, -0x00, 0x98, 0x0D, 0x00, 0x01, 0x87, 0xEF, 0xF0, 0x02, 0x77, 0xEF, 0x00, 0x03, 0x71, 0x0C, 0x70, -0x04, 0x61, 0x0B, 0x80, 0x05, 0x50, 0xEE, 0x70, 0x06, 0x40, 0xED, 0x80, 0x07, 0x30, 0xD0, 0x70, -0x07, 0x8D, 0x27, 0x80, 0x09, 0x10, 0xB2, 0x70, 0x09, 0xAD, 0xA3, 0x00, 0x0A, 0xF0, 0x94, 0x70, -0x0B, 0xE0, 0x93, 0x80, 0x0C, 0xD9, 0xB0, 0xF0, 0x0D, 0xC0, 0x75, 0x80, 0x0E, 0xB9, 0x92, 0xF0, -0x0F, 0xA9, 0x92, 0x00, 0x10, 0x99, 0x74, 0xF0, 0x11, 0x89, 0x74, 0x00, 0x12, 0x79, 0x56, 0xF0, -0x13, 0x69, 0x56, 0x00, 0x14, 0x59, 0x38, 0xF0, 0x15, 0x49, 0x38, 0x00, 0x16, 0x39, 0x1A, 0xF0, -0x17, 0x29, 0x1A, 0x00, 0x18, 0x22, 0x37, 0x70, 0x19, 0x08, 0xFC, 0x00, 0x1A, 0x02, 0x19, 0x70, -0x1A, 0xF2, 0x18, 0x80, 0x1B, 0xE1, 0xFB, 0x70, 0x1C, 0xD1, 0xFA, 0x80, 0x1D, 0xC1, 0xDD, 0x70, -0x1E, 0xB1, 0xDC, 0x80, 0x1F, 0xA1, 0xBF, 0x70, 0x20, 0x76, 0x0F, 0x00, 0x21, 0x81, 0xA1, 0x70, -0x22, 0x55, 0xF1, 0x00, 0x23, 0x6A, 0xBD, 0xF0, 0x24, 0x35, 0xD3, 0x00, 0x25, 0x4A, 0x9F, 0xF0, -0x26, 0x15, 0xB5, 0x00, 0x27, 0x2A, 0x81, 0xF0, 0x27, 0xFE, 0xD1, 0x80, 0x29, 0x0A, 0x63, 0xF0, -0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x51, 0x70, 0x45, 0xF3, 0xB7, 0x00, 0x47, 0x2D, 0x6D, 0xF0, -0x47, 0xD3, 0x99, 0x00, 0x49, 0x0D, 0x4F, 0xF0, 0x49, 0xB3, 0x7B, 0x00, 0x4A, 0xED, 0x31, 0xF0, -0x4B, 0x9C, 0x97, 0x80, 0x4C, 0xD6, 0x4E, 0x70, 0x4D, 0x7C, 0x79, 0x80, 0x4E, 0xB6, 0x30, 0x70, -0x4F, 0x5C, 0x5B, 0x80, 0x50, 0x96, 0x12, 0x70, 0x51, 0x3C, 0x3D, 0x80, 0x52, 0x75, 0xF4, 0x70, -0x53, 0x1C, 0x1F, 0x80, 0x54, 0x55, 0xD6, 0x70, 0x54, 0xFC, 0x01, 0x80, 0x56, 0x35, 0xB8, 0x70, -0x56, 0xE5, 0x1E, 0x00, 0x58, 0x1E, 0xD4, 0xF0, 0x58, 0xC5, 0x00, 0x00, 0x59, 0xFE, 0xB6, 0xF0, -0x5A, 0xA4, 0xE2, 0x00, 0x5B, 0xDE, 0x98, 0xF0, 0x5C, 0x84, 0xC4, 0x00, 0x5D, 0xBE, 0x7A, 0xF0, -0x5E, 0x64, 0xA6, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x60, 0x4D, 0xC2, 0x80, 0x61, 0x87, 0x79, 0x70, -0x62, 0x2D, 0xA4, 0x80, 0x63, 0x67, 0x5B, 0x70, 0x64, 0x0D, 0x86, 0x80, 0x65, 0x47, 0x3D, 0x70, -0x65, 0xED, 0x68, 0x80, 0x67, 0x27, 0x1F, 0x70, 0x67, 0xCD, 0x4A, 0x80, 0x69, 0x07, 0x01, 0x70, -0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, 0x6B, 0x96, 0x49, 0x00, 0x6C, 0xCF, 0xFF, 0xF0, -0x6D, 0x76, 0x2B, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, 0x6F, 0x56, 0x0D, 0x00, 0x70, 0x8F, 0xC3, 0xF0, -0x71, 0x35, 0xEF, 0x00, 0x72, 0x6F, 0xA5, 0xF0, 0x73, 0x15, 0xD1, 0x00, 0x74, 0x4F, 0x87, 0xF0, -0x74, 0xFE, 0xED, 0x80, 0x76, 0x38, 0xA4, 0x70, 0x76, 0xDE, 0xCF, 0x80, 0x78, 0x18, 0x86, 0x70, -0x78, 0xBE, 0xB1, 0x80, 0x79, 0xF8, 0x68, 0x70, 0x7A, 0x9E, 0x93, 0x80, 0x7B, 0xD8, 0x4A, 0x70, -0x7C, 0x7E, 0x75, 0x80, 0x7D, 0xB8, 0x2C, 0x70, 0x7E, 0x5E, 0x57, 0x80, 0x7F, 0x98, 0x0E, 0x70, -0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 0x04, 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, 0x04, 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, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, -0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, -0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, -0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, - -/* America/Indiana/Marengo */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, 0xDC, 0xDE, 0x97, 0x80, 0xDD, 0xA9, 0x90, 0x70, -0xE2, 0x7E, 0x3D, 0x80, 0xE3, 0x49, 0x36, 0x70, 0xE4, 0x5E, 0x1F, 0x80, 0xE5, 0x29, 0x18, 0x70, -0xE6, 0x47, 0x3C, 0x00, 0xE7, 0x12, 0x34, 0xF0, 0xE8, 0x27, 0x1E, 0x00, 0xE8, 0xF2, 0x16, 0xF0, -0xEA, 0x07, 0x00, 0x00, 0xEA, 0xD1, 0xF8, 0xF0, 0xEB, 0xE6, 0xE2, 0x00, 0xEC, 0xB1, 0xDA, 0xF0, -0xED, 0xC6, 0xC4, 0x00, 0xEE, 0x91, 0xBC, 0xF0, 0xEF, 0xAF, 0xE0, 0x80, 0xFE, 0xB8, 0x1C, 0xF0, -0xFF, 0xA7, 0xFF, 0xE0, 0x00, 0x97, 0xFE, 0xF0, 0x01, 0x87, 0xE1, 0xE0, 0x02, 0x77, 0xE0, 0xF0, -0x03, 0x70, 0xFE, 0x60, 0x04, 0x60, 0xFD, 0x70, 0x05, 0x50, 0xE0, 0x60, 0x06, 0x40, 0xDF, 0x70, -0x07, 0x30, 0xC2, 0x60, 0x07, 0x8D, 0x19, 0x70, 0x09, 0x10, 0xB2, 0x70, 0x09, 0xAD, 0x94, 0xF0, -0x0A, 0xF0, 0x86, 0x60, 0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x43, 0x60, 0x45, 0xF3, 0xA8, 0xF0, -0x47, 0x2D, 0x5F, 0xE0, 0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x41, 0xE0, 0x49, 0xB3, 0x6C, 0xF0, -0x4A, 0xED, 0x23, 0xE0, 0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x40, 0x60, 0x4D, 0x7C, 0x6B, 0x70, -0x4E, 0xB6, 0x22, 0x60, 0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x04, 0x60, 0x51, 0x3C, 0x2F, 0x70, -0x52, 0x75, 0xE6, 0x60, 0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xC8, 0x60, 0x54, 0xFB, 0xF3, 0x70, -0x56, 0x35, 0xAA, 0x60, 0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, 0x58, 0xC4, 0xF1, 0xF0, -0x59, 0xFE, 0xA8, 0xE0, 0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, 0x5C, 0x84, 0xB5, 0xF0, -0x5D, 0xBE, 0x6C, 0xE0, 0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, 0x60, 0x4D, 0xB4, 0x70, -0x61, 0x87, 0x6B, 0x60, 0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, 0x64, 0x0D, 0x78, 0x70, -0x65, 0x47, 0x2F, 0x60, 0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, 0x67, 0xCD, 0x3C, 0x70, -0x69, 0x06, 0xF3, 0x60, 0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, 0x6B, 0x96, 0x3A, 0xF0, -0x6C, 0xCF, 0xF1, 0xE0, 0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, 0x6F, 0x55, 0xFE, 0xF0, -0x70, 0x8F, 0xB5, 0xE0, 0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, 0x73, 0x15, 0xC2, 0xF0, -0x74, 0x4F, 0x79, 0xE0, 0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, 0x76, 0xDE, 0xC1, 0x70, -0x78, 0x18, 0x78, 0x60, 0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, 0x7A, 0x9E, 0x85, 0x70, -0x7B, 0xD8, 0x3C, 0x60, 0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, 0x7E, 0x5E, 0x49, 0x70, -0x7F, 0x98, 0x00, 0x60, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, -0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, -0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, -0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, -0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, -0x00, 0x00, - -/* America/Indiana/Petersburg */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x9E, 0xA6, 0x2C, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, 0xE4, 0x67, 0x3D, 0xE0, 0xE5, 0x29, 0x18, 0x70, -0xE6, 0x47, 0x3C, 0x00, 0xE7, 0x12, 0x34, 0xF0, 0xE8, 0x27, 0x1E, 0x00, 0xE8, 0xF2, 0x16, 0xF0, -0xEA, 0x07, 0x00, 0x00, 0xEA, 0xD1, 0xF8, 0xF0, 0xEB, 0xE6, 0xE2, 0x00, 0xEC, 0xB1, 0xDA, 0xF0, -0xED, 0xC6, 0xC4, 0x00, 0xEE, 0x91, 0xBC, 0xF0, 0xEF, 0xAF, 0xE0, 0x80, 0xF0, 0x9F, 0xC3, 0x70, -0xF1, 0x8F, 0xC2, 0x80, 0xF2, 0x7F, 0xA5, 0x70, 0xF3, 0x6F, 0xA4, 0x80, 0xF4, 0x5F, 0x87, 0x70, -0xF5, 0x4F, 0x86, 0x80, 0xF6, 0x3F, 0x69, 0x70, 0xF7, 0x2F, 0x68, 0x80, 0xFA, 0x08, 0x67, 0xF0, -0xFA, 0xF8, 0x67, 0x00, 0xFB, 0xE8, 0x49, 0xF0, 0xFC, 0xD8, 0x49, 0x00, 0xFD, 0xC8, 0x2B, 0xF0, -0xFE, 0xB8, 0x2B, 0x00, 0xFF, 0xA8, 0x0D, 0xF0, 0x00, 0x98, 0x0D, 0x00, 0x01, 0x87, 0xEF, 0xF0, -0x02, 0x77, 0xEF, 0x00, 0x03, 0x71, 0x0C, 0x70, 0x04, 0x61, 0x0B, 0x80, 0x05, 0x50, 0xEE, 0x70, -0x06, 0x40, 0xED, 0x80, 0x07, 0x30, 0xD0, 0x70, 0x07, 0x8D, 0x27, 0x80, 0x09, 0x10, 0xB2, 0x70, -0x09, 0xAD, 0xA3, 0x00, 0x0A, 0xF0, 0x94, 0x70, 0x0B, 0xE0, 0x93, 0x80, 0x0C, 0xD9, 0xB0, 0xF0, -0x0D, 0xC0, 0x75, 0x80, 0x0E, 0xB9, 0x92, 0xF0, 0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x51, 0x70, -0x45, 0xF3, 0xB7, 0x00, 0x47, 0x2D, 0x6D, 0xF0, 0x47, 0xD3, 0x99, 0x00, 0x49, 0x0D, 0x4F, 0xF0, -0x49, 0xB3, 0x7B, 0x00, 0x4A, 0xED, 0x31, 0xF0, 0x4B, 0x9C, 0x97, 0x80, 0x4C, 0xD6, 0x4E, 0x70, -0x4D, 0x7C, 0x79, 0x80, 0x4E, 0xB6, 0x30, 0x70, 0x4F, 0x5C, 0x5B, 0x80, 0x50, 0x96, 0x12, 0x70, -0x51, 0x3C, 0x3D, 0x80, 0x52, 0x75, 0xF4, 0x70, 0x53, 0x1C, 0x1F, 0x80, 0x54, 0x55, 0xD6, 0x70, -0x54, 0xFC, 0x01, 0x80, 0x56, 0x35, 0xB8, 0x70, 0x56, 0xE5, 0x1E, 0x00, 0x58, 0x1E, 0xD4, 0xF0, -0x58, 0xC5, 0x00, 0x00, 0x59, 0xFE, 0xB6, 0xF0, 0x5A, 0xA4, 0xE2, 0x00, 0x5B, 0xDE, 0x98, 0xF0, -0x5C, 0x84, 0xC4, 0x00, 0x5D, 0xBE, 0x7A, 0xF0, 0x5E, 0x64, 0xA6, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, -0x60, 0x4D, 0xC2, 0x80, 0x61, 0x87, 0x79, 0x70, 0x62, 0x2D, 0xA4, 0x80, 0x63, 0x67, 0x5B, 0x70, -0x64, 0x0D, 0x86, 0x80, 0x65, 0x47, 0x3D, 0x70, 0x65, 0xED, 0x68, 0x80, 0x67, 0x27, 0x1F, 0x70, -0x67, 0xCD, 0x4A, 0x80, 0x69, 0x07, 0x01, 0x70, 0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, -0x6B, 0x96, 0x49, 0x00, 0x6C, 0xCF, 0xFF, 0xF0, 0x6D, 0x76, 0x2B, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, -0x6F, 0x56, 0x0D, 0x00, 0x70, 0x8F, 0xC3, 0xF0, 0x71, 0x35, 0xEF, 0x00, 0x72, 0x6F, 0xA5, 0xF0, -0x73, 0x15, 0xD1, 0x00, 0x74, 0x4F, 0x87, 0xF0, 0x74, 0xFE, 0xED, 0x80, 0x76, 0x38, 0xA4, 0x70, -0x76, 0xDE, 0xCF, 0x80, 0x78, 0x18, 0x86, 0x70, 0x78, 0xBE, 0xB1, 0x80, 0x79, 0xF8, 0x68, 0x70, -0x7A, 0x9E, 0x93, 0x80, 0x7B, 0xD8, 0x4A, 0x70, 0x7C, 0x7E, 0x75, 0x80, 0x7D, 0xB8, 0x2C, 0x70, -0x7E, 0x5E, 0x57, 0x80, 0x7F, 0x98, 0x0E, 0x70, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x01, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x04, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 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, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, -0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, -0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, -0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - -/* America/Indianapolis */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCA, 0x57, 0x22, 0x80, -0xCA, 0xD8, 0x47, 0x70, 0xCB, 0x88, 0xFE, 0x80, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, -0xD3, 0x75, 0xF3, 0x00, 0xD4, 0x40, 0xEB, 0xF0, 0xD5, 0x55, 0xD5, 0x00, 0xD6, 0x20, 0xCD, 0xF0, -0xD7, 0x35, 0xB7, 0x00, 0xD8, 0x00, 0xAF, 0xF0, 0xD9, 0x15, 0x99, 0x00, 0xD9, 0xE0, 0x91, 0xF0, -0xDA, 0xFE, 0xB5, 0x80, 0xDB, 0xC0, 0x73, 0xF0, 0xDC, 0xDE, 0x97, 0x80, 0xDD, 0xA9, 0x90, 0x70, -0xDE, 0xBE, 0x79, 0x80, 0xDF, 0x89, 0x72, 0x70, 0xE0, 0x9E, 0x5B, 0x80, 0xE1, 0x69, 0x54, 0x70, -0xE2, 0x7E, 0x3D, 0x80, 0xE3, 0x49, 0x36, 0x70, 0xE4, 0x5E, 0x1F, 0x80, 0xE8, 0xF2, 0x16, 0xF0, -0xEA, 0x07, 0x00, 0x00, 0xFE, 0xB8, 0x1C, 0xF0, 0xFF, 0xA7, 0xFF, 0xE0, 0x00, 0x97, 0xFE, 0xF0, -0x01, 0x87, 0xE1, 0xE0, 0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x43, 0x60, 0x45, 0xF3, 0xA8, 0xF0, -0x47, 0x2D, 0x5F, 0xE0, 0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x41, 0xE0, 0x49, 0xB3, 0x6C, 0xF0, -0x4A, 0xED, 0x23, 0xE0, 0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x40, 0x60, 0x4D, 0x7C, 0x6B, 0x70, -0x4E, 0xB6, 0x22, 0x60, 0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x04, 0x60, 0x51, 0x3C, 0x2F, 0x70, -0x52, 0x75, 0xE6, 0x60, 0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xC8, 0x60, 0x54, 0xFB, 0xF3, 0x70, -0x56, 0x35, 0xAA, 0x60, 0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, 0x58, 0xC4, 0xF1, 0xF0, -0x59, 0xFE, 0xA8, 0xE0, 0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, 0x5C, 0x84, 0xB5, 0xF0, -0x5D, 0xBE, 0x6C, 0xE0, 0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, 0x60, 0x4D, 0xB4, 0x70, -0x61, 0x87, 0x6B, 0x60, 0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, 0x64, 0x0D, 0x78, 0x70, -0x65, 0x47, 0x2F, 0x60, 0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, 0x67, 0xCD, 0x3C, 0x70, -0x69, 0x06, 0xF3, 0x60, 0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, 0x6B, 0x96, 0x3A, 0xF0, -0x6C, 0xCF, 0xF1, 0xE0, 0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, 0x6F, 0x55, 0xFE, 0xF0, -0x70, 0x8F, 0xB5, 0xE0, 0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, 0x73, 0x15, 0xC2, 0xF0, -0x74, 0x4F, 0x79, 0xE0, 0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, 0x76, 0xDE, 0xC1, 0x70, -0x78, 0x18, 0x78, 0x60, 0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, 0x7A, 0x9E, 0x85, 0x70, -0x7B, 0xD8, 0x3C, 0x60, 0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, 0x7E, 0x5E, 0x49, 0x70, -0x7F, 0x98, 0x00, 0x60, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x01, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x04, -0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, -0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, -0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, -0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, -0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - -/* America/Indiana/Vevay */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, 0xE2, 0x7E, 0x3D, 0x80, 0xFE, 0xB8, 0x1C, 0xF0, -0xFF, 0xA7, 0xFF, 0xE0, 0x00, 0x97, 0xFE, 0xF0, 0x01, 0x87, 0xE1, 0xE0, 0x02, 0x77, 0xE0, 0xF0, -0x03, 0x70, 0xFE, 0x60, 0x04, 0x60, 0xFD, 0x70, 0x05, 0x50, 0xE0, 0x60, 0x44, 0x2F, 0x76, 0x70, -0x45, 0x44, 0x43, 0x60, 0x45, 0xF3, 0xA8, 0xF0, 0x47, 0x2D, 0x5F, 0xE0, 0x47, 0xD3, 0x8A, 0xF0, -0x49, 0x0D, 0x41, 0xE0, 0x49, 0xB3, 0x6C, 0xF0, 0x4A, 0xED, 0x23, 0xE0, 0x4B, 0x9C, 0x89, 0x70, -0x4C, 0xD6, 0x40, 0x60, 0x4D, 0x7C, 0x6B, 0x70, 0x4E, 0xB6, 0x22, 0x60, 0x4F, 0x5C, 0x4D, 0x70, -0x50, 0x96, 0x04, 0x60, 0x51, 0x3C, 0x2F, 0x70, 0x52, 0x75, 0xE6, 0x60, 0x53, 0x1C, 0x11, 0x70, -0x54, 0x55, 0xC8, 0x60, 0x54, 0xFB, 0xF3, 0x70, 0x56, 0x35, 0xAA, 0x60, 0x56, 0xE5, 0x0F, 0xF0, -0x58, 0x1E, 0xC6, 0xE0, 0x58, 0xC4, 0xF1, 0xF0, 0x59, 0xFE, 0xA8, 0xE0, 0x5A, 0xA4, 0xD3, 0xF0, -0x5B, 0xDE, 0x8A, 0xE0, 0x5C, 0x84, 0xB5, 0xF0, 0x5D, 0xBE, 0x6C, 0xE0, 0x5E, 0x64, 0x97, 0xF0, -0x5F, 0x9E, 0x4E, 0xE0, 0x60, 0x4D, 0xB4, 0x70, 0x61, 0x87, 0x6B, 0x60, 0x62, 0x2D, 0x96, 0x70, -0x63, 0x67, 0x4D, 0x60, 0x64, 0x0D, 0x78, 0x70, 0x65, 0x47, 0x2F, 0x60, 0x65, 0xED, 0x5A, 0x70, -0x67, 0x27, 0x11, 0x60, 0x67, 0xCD, 0x3C, 0x70, 0x69, 0x06, 0xF3, 0x60, 0x69, 0xAD, 0x1E, 0x70, -0x6A, 0xE6, 0xD5, 0x60, 0x6B, 0x96, 0x3A, 0xF0, 0x6C, 0xCF, 0xF1, 0xE0, 0x6D, 0x76, 0x1C, 0xF0, -0x6E, 0xAF, 0xD3, 0xE0, 0x6F, 0x55, 0xFE, 0xF0, 0x70, 0x8F, 0xB5, 0xE0, 0x71, 0x35, 0xE0, 0xF0, -0x72, 0x6F, 0x97, 0xE0, 0x73, 0x15, 0xC2, 0xF0, 0x74, 0x4F, 0x79, 0xE0, 0x74, 0xFE, 0xDF, 0x70, -0x76, 0x38, 0x96, 0x60, 0x76, 0xDE, 0xC1, 0x70, 0x78, 0x18, 0x78, 0x60, 0x78, 0xBE, 0xA3, 0x70, -0x79, 0xF8, 0x5A, 0x60, 0x7A, 0x9E, 0x85, 0x70, 0x7B, 0xD8, 0x3C, 0x60, 0x7C, 0x7E, 0x67, 0x70, -0x7D, 0xB8, 0x1E, 0x60, 0x7E, 0x5E, 0x49, 0x70, 0x7F, 0x98, 0x00, 0x60, 0x00, 0x01, 0x00, 0x01, -0x02, 0x03, 0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, -0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, -0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, -0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, -0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x01, 0x00, 0x00, - -/* America/Indiana/Vincennes */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, 0xD3, 0x75, 0xF3, 0x00, 0xD4, 0x40, 0xEB, 0xF0, -0xE0, 0x9E, 0x5B, 0x80, 0xE1, 0x69, 0x54, 0x70, 0xE2, 0x7E, 0x3D, 0x80, 0xE3, 0x49, 0x36, 0x70, -0xE4, 0x67, 0x3D, 0xE0, 0xE5, 0x29, 0x18, 0x70, 0xE6, 0x47, 0x3C, 0x00, 0xE7, 0x12, 0x34, 0xF0, -0xE8, 0x27, 0x1E, 0x00, 0xE8, 0xF2, 0x16, 0xF0, 0xEA, 0x07, 0x00, 0x00, 0xEA, 0xD1, 0xF8, 0xF0, -0xEB, 0xE6, 0xE2, 0x00, 0xEC, 0xB1, 0xDA, 0xF0, 0xED, 0xC6, 0xC4, 0x00, 0xEE, 0xBF, 0xE1, 0x70, -0xEF, 0xAF, 0xE0, 0x80, 0xF0, 0x71, 0x9E, 0xF0, 0xF1, 0x8F, 0xC2, 0x80, 0xF2, 0x7F, 0xA5, 0x70, -0xF3, 0x6F, 0xA4, 0x80, 0xF4, 0x5F, 0x87, 0x70, 0xF5, 0x4F, 0x86, 0x80, 0xFE, 0xB8, 0x1C, 0xF0, -0xFF, 0xA7, 0xFF, 0xE0, 0x00, 0x97, 0xFE, 0xF0, 0x01, 0x87, 0xE1, 0xE0, 0x44, 0x2F, 0x76, 0x70, -0x45, 0x44, 0x51, 0x70, 0x45, 0xF3, 0xB7, 0x00, 0x47, 0x2D, 0x6D, 0xF0, 0x47, 0xD3, 0x99, 0x00, -0x49, 0x0D, 0x4F, 0xF0, 0x49, 0xB3, 0x7B, 0x00, 0x4A, 0xED, 0x31, 0xF0, 0x4B, 0x9C, 0x97, 0x80, -0x4C, 0xD6, 0x4E, 0x70, 0x4D, 0x7C, 0x79, 0x80, 0x4E, 0xB6, 0x30, 0x70, 0x4F, 0x5C, 0x5B, 0x80, -0x50, 0x96, 0x12, 0x70, 0x51, 0x3C, 0x3D, 0x80, 0x52, 0x75, 0xF4, 0x70, 0x53, 0x1C, 0x1F, 0x80, -0x54, 0x55, 0xD6, 0x70, 0x54, 0xFC, 0x01, 0x80, 0x56, 0x35, 0xB8, 0x70, 0x56, 0xE5, 0x1E, 0x00, -0x58, 0x1E, 0xD4, 0xF0, 0x58, 0xC5, 0x00, 0x00, 0x59, 0xFE, 0xB6, 0xF0, 0x5A, 0xA4, 0xE2, 0x00, -0x5B, 0xDE, 0x98, 0xF0, 0x5C, 0x84, 0xC4, 0x00, 0x5D, 0xBE, 0x7A, 0xF0, 0x5E, 0x64, 0xA6, 0x00, -0x5F, 0x9E, 0x5C, 0xF0, 0x60, 0x4D, 0xC2, 0x80, 0x61, 0x87, 0x79, 0x70, 0x62, 0x2D, 0xA4, 0x80, -0x63, 0x67, 0x5B, 0x70, 0x64, 0x0D, 0x86, 0x80, 0x65, 0x47, 0x3D, 0x70, 0x65, 0xED, 0x68, 0x80, -0x67, 0x27, 0x1F, 0x70, 0x67, 0xCD, 0x4A, 0x80, 0x69, 0x07, 0x01, 0x70, 0x69, 0xAD, 0x2C, 0x80, -0x6A, 0xE6, 0xE3, 0x70, 0x6B, 0x96, 0x49, 0x00, 0x6C, 0xCF, 0xFF, 0xF0, 0x6D, 0x76, 0x2B, 0x00, -0x6E, 0xAF, 0xE1, 0xF0, 0x6F, 0x56, 0x0D, 0x00, 0x70, 0x8F, 0xC3, 0xF0, 0x71, 0x35, 0xEF, 0x00, -0x72, 0x6F, 0xA5, 0xF0, 0x73, 0x15, 0xD1, 0x00, 0x74, 0x4F, 0x87, 0xF0, 0x74, 0xFE, 0xED, 0x80, -0x76, 0x38, 0xA4, 0x70, 0x76, 0xDE, 0xCF, 0x80, 0x78, 0x18, 0x86, 0x70, 0x78, 0xBE, 0xB1, 0x80, -0x79, 0xF8, 0x68, 0x70, 0x7A, 0x9E, 0x93, 0x80, 0x7B, 0xD8, 0x4A, 0x70, 0x7C, 0x7E, 0x75, 0x80, -0x7D, 0xB8, 0x2C, 0x70, 0x7E, 0x5E, 0x57, 0x80, 0x7F, 0x98, 0x0E, 0x70, 0x00, 0x01, 0x00, 0x01, -0x02, 0x03, 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, 0x04, 0x05, 0x04, 0x05, 0x04, -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, 0x00, 0x01, 0x00, 0x01, -0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, -0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, -0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, -0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, -0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - -/* America/Indiana/Winamac */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, 0xD3, 0x75, 0xF3, 0x00, 0xD4, 0x40, 0xEB, 0xF0, -0xD5, 0x55, 0xD5, 0x00, 0xD6, 0x20, 0xCD, 0xF0, 0xD7, 0x35, 0xB7, 0x00, 0xD8, 0x00, 0xAF, 0xF0, -0xD9, 0x15, 0x99, 0x00, 0xD9, 0xE0, 0x91, 0xF0, 0xDA, 0xFE, 0xB5, 0x80, 0xDB, 0xC0, 0x73, 0xF0, -0xDC, 0xDE, 0x97, 0x80, 0xDD, 0xA9, 0x90, 0x70, 0xDE, 0xBE, 0x79, 0x80, 0xDF, 0x89, 0x72, 0x70, -0xE0, 0x9E, 0x5B, 0x80, 0xE1, 0x69, 0x54, 0x70, 0xE2, 0x7E, 0x3D, 0x80, 0xE3, 0x49, 0x36, 0x70, -0xE4, 0x5E, 0x1F, 0x80, 0xE5, 0x57, 0x3C, 0xF0, 0xE6, 0x47, 0x3C, 0x00, 0xE7, 0x37, 0x1E, 0xF0, -0xE8, 0x27, 0x1E, 0x00, 0xE8, 0xF2, 0x16, 0xF0, 0xEA, 0x07, 0x00, 0x00, 0xEA, 0xD1, 0xF8, 0xF0, -0xEB, 0xE6, 0xE2, 0x00, 0xEC, 0xB1, 0xDA, 0xF0, 0xED, 0xC6, 0xC4, 0x00, 0xEE, 0x91, 0xBC, 0xF0, -0xEF, 0xAF, 0xE0, 0x80, 0xFE, 0xB8, 0x1C, 0xF0, 0xFF, 0xA7, 0xFF, 0xE0, 0x00, 0x97, 0xFE, 0xF0, -0x01, 0x87, 0xE1, 0xE0, 0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x51, 0x70, 0x45, 0xF3, 0xB7, 0x00, -0x47, 0x2D, 0x5F, 0xE0, 0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x41, 0xE0, 0x49, 0xB3, 0x6C, 0xF0, -0x4A, 0xED, 0x23, 0xE0, 0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x40, 0x60, 0x4D, 0x7C, 0x6B, 0x70, -0x4E, 0xB6, 0x22, 0x60, 0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x04, 0x60, 0x51, 0x3C, 0x2F, 0x70, -0x52, 0x75, 0xE6, 0x60, 0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xC8, 0x60, 0x54, 0xFB, 0xF3, 0x70, -0x56, 0x35, 0xAA, 0x60, 0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, 0x58, 0xC4, 0xF1, 0xF0, -0x59, 0xFE, 0xA8, 0xE0, 0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, 0x5C, 0x84, 0xB5, 0xF0, -0x5D, 0xBE, 0x6C, 0xE0, 0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, 0x60, 0x4D, 0xB4, 0x70, -0x61, 0x87, 0x6B, 0x60, 0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, 0x64, 0x0D, 0x78, 0x70, -0x65, 0x47, 0x2F, 0x60, 0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, 0x67, 0xCD, 0x3C, 0x70, -0x69, 0x06, 0xF3, 0x60, 0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, 0x6B, 0x96, 0x3A, 0xF0, -0x6C, 0xCF, 0xF1, 0xE0, 0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, 0x6F, 0x55, 0xFE, 0xF0, -0x70, 0x8F, 0xB5, 0xE0, 0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, 0x73, 0x15, 0xC2, 0xF0, -0x74, 0x4F, 0x79, 0xE0, 0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, 0x76, 0xDE, 0xC1, 0x70, -0x78, 0x18, 0x78, 0x60, 0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, 0x7A, 0x9E, 0x85, 0x70, -0x7B, 0xD8, 0x3C, 0x60, 0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, 0x7E, 0x5E, 0x49, 0x70, -0x7F, 0x98, 0x00, 0x60, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 0x04, 0x05, 0x04, 0x05, 0x04, 0x00, 0x01, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0xFF, 0xFF, -0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, -0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, -0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, -0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - -/* America/Inuvik */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1D, 0x9E, 0xB8, 0xBD, 0xA0, -0x9F, 0xBB, 0x15, 0x90, 0xA0, 0xCF, 0xFE, 0xA0, 0xA1, 0xA2, 0xC4, 0x70, 0xCB, 0x89, 0x1A, 0xA0, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x26, 0x10, 0xF7, 0x2F, 0x68, 0x80, 0xF8, 0x28, 0x94, 0x00, -0x11, 0x89, 0x90, 0x20, 0x13, 0x69, 0x64, 0x10, 0x14, 0x59, 0x47, 0x00, 0x15, 0x49, 0x46, 0x10, -0x16, 0x39, 0x29, 0x00, 0x17, 0x29, 0x28, 0x10, 0x18, 0x22, 0x45, 0x80, 0x19, 0x09, 0x0A, 0x10, -0x1A, 0x02, 0x27, 0x80, 0x1A, 0xF2, 0x26, 0x90, 0x1B, 0xE2, 0x09, 0x80, 0x1C, 0xD2, 0x08, 0x90, -0x1D, 0xC1, 0xEB, 0x80, 0x1E, 0xB1, 0xEA, 0x90, 0x1F, 0xA1, 0xCD, 0x80, 0x20, 0x76, 0x1D, 0x10, -0x21, 0x81, 0xAF, 0x80, 0x22, 0x55, 0xFF, 0x10, 0x23, 0x6A, 0xCC, 0x00, 0x24, 0x35, 0xE1, 0x10, -0x25, 0x4A, 0xAE, 0x00, 0x26, 0x15, 0xC3, 0x10, 0x27, 0x2A, 0x90, 0x00, 0x27, 0xFE, 0xDF, 0x90, -0x29, 0x0A, 0x72, 0x00, 0x29, 0xDE, 0xC1, 0x90, 0x2A, 0xEA, 0x54, 0x00, 0x2B, 0xBE, 0xA3, 0x90, -0x2C, 0xD3, 0x70, 0x80, 0x2D, 0x9E, 0x85, 0x90, 0x2E, 0xB3, 0x52, 0x80, 0x2F, 0x7E, 0x67, 0x90, -0x30, 0x93, 0x34, 0x80, 0x31, 0x67, 0x84, 0x10, 0x32, 0x73, 0x16, 0x80, 0x33, 0x47, 0x66, 0x10, -0x34, 0x52, 0xF8, 0x80, 0x35, 0x27, 0x48, 0x10, 0x36, 0x32, 0xDA, 0x80, 0x37, 0x07, 0x2A, 0x10, -0x38, 0x1B, 0xF7, 0x00, 0x38, 0xE7, 0x0C, 0x10, 0x39, 0xFB, 0xD9, 0x00, 0x3A, 0xC6, 0xEE, 0x10, -0x3B, 0xDB, 0xBB, 0x00, 0x3C, 0xB0, 0x0A, 0x90, 0x3D, 0xBB, 0x9D, 0x00, 0x3E, 0x8F, 0xEC, 0x90, -0x3F, 0x9B, 0x7F, 0x00, 0x40, 0x6F, 0xCE, 0x90, 0x41, 0x84, 0x9B, 0x80, 0x42, 0x4F, 0xB0, 0x90, -0x43, 0x64, 0x7D, 0x80, 0x44, 0x2F, 0x92, 0x90, 0x45, 0x44, 0x5F, 0x80, 0x45, 0xF3, 0xC5, 0x10, -0x47, 0x2D, 0x7C, 0x00, 0x47, 0xD3, 0xA7, 0x10, 0x49, 0x0D, 0x5E, 0x00, 0x49, 0xB3, 0x89, 0x10, -0x4A, 0xED, 0x40, 0x00, 0x4B, 0x9C, 0xA5, 0x90, 0x4C, 0xD6, 0x5C, 0x80, 0x4D, 0x7C, 0x87, 0x90, -0x4E, 0xB6, 0x3E, 0x80, 0x4F, 0x5C, 0x69, 0x90, 0x50, 0x96, 0x20, 0x80, 0x51, 0x3C, 0x4B, 0x90, -0x52, 0x76, 0x02, 0x80, 0x53, 0x1C, 0x2D, 0x90, 0x54, 0x55, 0xE4, 0x80, 0x54, 0xFC, 0x0F, 0x90, -0x56, 0x35, 0xC6, 0x80, 0x56, 0xE5, 0x2C, 0x10, 0x58, 0x1E, 0xE3, 0x00, 0x58, 0xC5, 0x0E, 0x10, -0x59, 0xFE, 0xC5, 0x00, 0x5A, 0xA4, 0xF0, 0x10, 0x5B, 0xDE, 0xA7, 0x00, 0x5C, 0x84, 0xD2, 0x10, -0x5D, 0xBE, 0x89, 0x00, 0x5E, 0x64, 0xB4, 0x10, 0x5F, 0x9E, 0x6B, 0x00, 0x60, 0x4D, 0xD0, 0x90, -0x61, 0x87, 0x87, 0x80, 0x62, 0x2D, 0xB2, 0x90, 0x63, 0x67, 0x69, 0x80, 0x64, 0x0D, 0x94, 0x90, -0x65, 0x47, 0x4B, 0x80, 0x65, 0xED, 0x76, 0x90, 0x67, 0x27, 0x2D, 0x80, 0x67, 0xCD, 0x58, 0x90, -0x69, 0x07, 0x0F, 0x80, 0x69, 0xAD, 0x3A, 0x90, 0x6A, 0xE6, 0xF1, 0x80, 0x6B, 0x96, 0x57, 0x10, -0x6C, 0xD0, 0x0E, 0x00, 0x6D, 0x76, 0x39, 0x10, 0x6E, 0xAF, 0xF0, 0x00, 0x6F, 0x56, 0x1B, 0x10, -0x70, 0x8F, 0xD2, 0x00, 0x71, 0x35, 0xFD, 0x10, 0x72, 0x6F, 0xB4, 0x00, 0x73, 0x15, 0xDF, 0x10, -0x74, 0x4F, 0x96, 0x00, 0x74, 0xFE, 0xFB, 0x90, 0x76, 0x38, 0xB2, 0x80, 0x76, 0xDE, 0xDD, 0x90, -0x78, 0x18, 0x94, 0x80, 0x78, 0xBE, 0xBF, 0x90, 0x79, 0xF8, 0x76, 0x80, 0x7A, 0x9E, 0xA1, 0x90, -0x7B, 0xD8, 0x58, 0x80, 0x7C, 0x7E, 0x83, 0x90, 0x7D, 0xB8, 0x3A, 0x80, 0x7E, 0x5E, 0x65, 0x90, -0x7F, 0x98, 0x1C, 0x80, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x01, 0x04, 0x01, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x00, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x04, 0xFF, 0xFF, -0x9D, 0x90, 0x01, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x10, -0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x15, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x19, 0x50, 0x44, 0x54, 0x00, -0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, 0x00, 0x50, 0x44, 0x44, 0x54, -0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - -/* America/Iqaluit */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1D, 0x9E, 0xB8, 0x93, 0x70, -0x9F, 0xBA, 0xEB, 0x60, 0xA0, 0xCF, 0xD4, 0x70, 0xA1, 0xA2, 0x9A, 0x40, 0xCB, 0x88, 0xF0, 0x70, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xFB, 0xE0, 0xF7, 0x2F, 0x3E, 0x50, 0xF8, 0x28, 0x69, 0xD0, -0x13, 0x69, 0x47, 0xF0, 0x14, 0x59, 0x2A, 0xE0, 0x15, 0x49, 0x29, 0xF0, 0x16, 0x39, 0x0C, 0xE0, -0x17, 0x29, 0x0B, 0xF0, 0x18, 0x22, 0x29, 0x60, 0x19, 0x08, 0xED, 0xF0, 0x1A, 0x02, 0x0B, 0x60, -0x1A, 0xF2, 0x0A, 0x70, 0x1B, 0xE1, 0xED, 0x60, 0x1C, 0xD1, 0xEC, 0x70, 0x1D, 0xC1, 0xCF, 0x60, -0x1E, 0xB1, 0xCE, 0x70, 0x1F, 0xA1, 0xB1, 0x60, 0x20, 0x76, 0x00, 0xF0, 0x21, 0x81, 0x93, 0x60, -0x22, 0x55, 0xE2, 0xF0, 0x23, 0x6A, 0xAF, 0xE0, 0x24, 0x35, 0xC4, 0xF0, 0x25, 0x4A, 0x91, 0xE0, -0x26, 0x15, 0xA6, 0xF0, 0x27, 0x2A, 0x73, 0xE0, 0x27, 0xFE, 0xC3, 0x70, 0x29, 0x0A, 0x55, 0xE0, -0x29, 0xDE, 0xA5, 0x70, 0x2A, 0xEA, 0x37, 0xE0, 0x2B, 0xBE, 0x87, 0x70, 0x2C, 0xD3, 0x54, 0x60, -0x2D, 0x9E, 0x69, 0x70, 0x2E, 0xB3, 0x36, 0x60, 0x2F, 0x7E, 0x4B, 0x70, 0x30, 0x93, 0x18, 0x60, -0x31, 0x67, 0x67, 0xF0, 0x32, 0x72, 0xFA, 0x60, 0x33, 0x47, 0x49, 0xF0, 0x34, 0x52, 0xDC, 0x60, -0x35, 0x27, 0x2B, 0xF0, 0x36, 0x32, 0xBE, 0x60, 0x37, 0x07, 0x0D, 0xF0, 0x38, 0x1B, 0xDA, 0xE0, -0x38, 0xE6, 0xFE, 0x00, 0x39, 0xFB, 0xCA, 0xF0, 0x3A, 0xC6, 0xD1, 0xF0, 0x3B, 0xDB, 0x9E, 0xE0, -0x3C, 0xAF, 0xEE, 0x70, 0x3D, 0xBB, 0x80, 0xE0, 0x3E, 0x8F, 0xD0, 0x70, 0x3F, 0x9B, 0x62, 0xE0, -0x40, 0x6F, 0xB2, 0x70, 0x41, 0x84, 0x7F, 0x60, 0x42, 0x4F, 0x94, 0x70, 0x43, 0x64, 0x61, 0x60, -0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x43, 0x60, 0x45, 0xF3, 0xA8, 0xF0, 0x47, 0x2D, 0x5F, 0xE0, -0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x41, 0xE0, 0x49, 0xB3, 0x6C, 0xF0, 0x4A, 0xED, 0x23, 0xE0, -0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x40, 0x60, 0x4D, 0x7C, 0x6B, 0x70, 0x4E, 0xB6, 0x22, 0x60, -0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x04, 0x60, 0x51, 0x3C, 0x2F, 0x70, 0x52, 0x75, 0xE6, 0x60, -0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xC8, 0x60, 0x54, 0xFB, 0xF3, 0x70, 0x56, 0x35, 0xAA, 0x60, -0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, 0x58, 0xC4, 0xF1, 0xF0, 0x59, 0xFE, 0xA8, 0xE0, -0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, 0x5C, 0x84, 0xB5, 0xF0, 0x5D, 0xBE, 0x6C, 0xE0, -0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, 0x60, 0x4D, 0xB4, 0x70, 0x61, 0x87, 0x6B, 0x60, -0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, 0x64, 0x0D, 0x78, 0x70, 0x65, 0x47, 0x2F, 0x60, -0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, 0x67, 0xCD, 0x3C, 0x70, 0x69, 0x06, 0xF3, 0x60, -0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, 0x6B, 0x96, 0x3A, 0xF0, 0x6C, 0xCF, 0xF1, 0xE0, -0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, 0x6F, 0x55, 0xFE, 0xF0, 0x70, 0x8F, 0xB5, 0xE0, -0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, 0x73, 0x15, 0xC2, 0xF0, 0x74, 0x4F, 0x79, 0xE0, -0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, 0x76, 0xDE, 0xC1, 0x70, 0x78, 0x18, 0x78, 0x60, -0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, 0x7A, 0x9E, 0x85, 0x70, 0x7B, 0xD8, 0x3C, 0x60, -0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, 0x7E, 0x5E, 0x49, 0x70, 0x7F, 0x98, 0x00, 0x60, -0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x01, 0x04, 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, -0x05, 0x06, 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, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xC7, -0xC0, 0x01, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, -0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, -0x15, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x19, 0x45, 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, -0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x45, 0x44, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, -0x43, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, -0x00, 0x00, - -/* America/Jamaica */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x0F, 0xB5, 0x00, -0x08, 0x20, 0xC1, 0x70, 0x09, 0x10, 0xA4, 0x60, 0x09, 0xAD, 0x94, 0xF0, 0x0A, 0xF0, 0x86, 0x60, -0x0B, 0xE0, 0x85, 0x70, 0x0C, 0xD9, 0xA2, 0xE0, 0x0D, 0xC0, 0x67, 0x70, 0x0E, 0xB9, 0x84, 0xE0, -0x0F, 0xA9, 0x83, 0xF0, 0x10, 0x99, 0x66, 0xE0, 0x11, 0x89, 0x65, 0xF0, 0x12, 0x79, 0x48, 0xE0, -0x13, 0x69, 0x47, 0xF0, 0x14, 0x59, 0x2A, 0xE0, 0x15, 0x49, 0x29, 0xF0, 0x16, 0x39, 0x0C, 0xE0, -0x17, 0x29, 0x0B, 0xF0, 0x18, 0x22, 0x29, 0x60, 0x19, 0x08, 0xED, 0xF0, 0x1A, 0x02, 0x0B, 0x60, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xB8, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, -0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, -0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Jujuy */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x92, 0x8F, 0x30, -0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30, -0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30, -0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0, -0xC1, 0x9D, 0x9D, 0x40, 0xC2, 0x3B, 0xC3, 0x30, 0xC3, 0x7E, 0xD0, 0xC0, 0xC4, 0x1C, 0xF6, 0xB0, -0xC5, 0x60, 0x04, 0x40, 0xC5, 0xFE, 0x2A, 0x30, 0xC7, 0x41, 0x37, 0xC0, 0xC7, 0xE0, 0xAF, 0x30, -0xC8, 0x81, 0x94, 0x40, 0xCA, 0x4D, 0xA1, 0xB0, 0xCA, 0xEE, 0x86, 0xC0, 0xCE, 0x4D, 0xFF, 0x30, -0xCE, 0xB0, 0xED, 0xC0, 0xD3, 0x29, 0x35, 0xB0, 0xD4, 0x43, 0x64, 0xC0, 0xF4, 0x3D, 0x08, 0x30, -0xF4, 0x9F, 0xF6, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0x32, 0x10, 0x40, 0xF6, 0xE6, 0x9F, 0xB0, -0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40, 0xFA, 0xD3, 0x36, 0xB0, -0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, 0xFE, 0x9C, 0x35, 0x30, -0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, 0x23, 0x94, 0xB5, 0xB0, -0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x2A, 0x57, 0xC0, -0x27, 0xE2, 0xDB, 0xB0, 0x28, 0xEE, 0x8A, 0x40, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30, -0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x06, 0x05, 0x03, 0x04, -0x03, 0x04, 0x02, 0x04, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, -0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, -0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x12, 0x43, 0x4D, -0x54, 0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, -0x57, 0x41, 0x52, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, - -/* America/Juneau */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x22, 0xCB, 0x89, 0x1A, 0xA0, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x26, 0x10, 0xFE, 0xB8, 0x47, 0x20, 0xFF, 0xA8, 0x2A, 0x10, -0x00, 0x98, 0x29, 0x20, 0x01, 0x88, 0x0C, 0x10, 0x02, 0x78, 0x0B, 0x20, 0x03, 0x71, 0x28, 0x90, -0x04, 0x61, 0x27, 0xA0, 0x05, 0x51, 0x0A, 0x90, 0x06, 0x41, 0x09, 0xA0, 0x07, 0x30, 0xEC, 0x90, -0x07, 0x8D, 0x43, 0xA0, 0x09, 0x10, 0xCE, 0x90, 0x09, 0xAD, 0xBF, 0x20, 0x0A, 0xF0, 0xB0, 0x90, -0x0B, 0xE0, 0xAF, 0xA0, 0x0C, 0xD9, 0xCD, 0x10, 0x0D, 0xC0, 0x91, 0xA0, 0x0E, 0xB9, 0xAF, 0x10, -0x0F, 0xA9, 0xAE, 0x20, 0x10, 0x99, 0x91, 0x10, 0x11, 0x89, 0x90, 0x20, 0x12, 0x79, 0x73, 0x10, -0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, 0x15, 0x49, 0x54, 0x20, 0x16, 0x39, 0x37, 0x10, -0x17, 0x29, 0x36, 0x20, 0x18, 0x22, 0x53, 0x90, 0x19, 0x09, 0x18, 0x20, 0x1A, 0x02, 0x35, 0x90, -0x1A, 0x2B, 0x14, 0x10, 0x1A, 0xF2, 0x42, 0xB0, 0x1B, 0xE2, 0x25, 0xA0, 0x1C, 0xD2, 0x24, 0xB0, -0x1D, 0xC2, 0x07, 0xA0, 0x1E, 0xB2, 0x06, 0xB0, 0x1F, 0xA1, 0xE9, 0xA0, 0x20, 0x76, 0x39, 0x30, -0x21, 0x81, 0xCB, 0xA0, 0x22, 0x56, 0x1B, 0x30, 0x23, 0x6A, 0xE8, 0x20, 0x24, 0x35, 0xFD, 0x30, -0x25, 0x4A, 0xCA, 0x20, 0x26, 0x15, 0xDF, 0x30, 0x27, 0x2A, 0xAC, 0x20, 0x27, 0xFE, 0xFB, 0xB0, -0x29, 0x0A, 0x8E, 0x20, 0x29, 0xDE, 0xDD, 0xB0, 0x2A, 0xEA, 0x70, 0x20, 0x2B, 0xBE, 0xBF, 0xB0, -0x2C, 0xD3, 0x8C, 0xA0, 0x2D, 0x9E, 0xA1, 0xB0, 0x2E, 0xB3, 0x6E, 0xA0, 0x2F, 0x7E, 0x83, 0xB0, -0x30, 0x93, 0x50, 0xA0, 0x31, 0x67, 0xA0, 0x30, 0x32, 0x73, 0x32, 0xA0, 0x33, 0x47, 0x82, 0x30, -0x34, 0x53, 0x14, 0xA0, 0x35, 0x27, 0x64, 0x30, 0x36, 0x32, 0xF6, 0xA0, 0x37, 0x07, 0x46, 0x30, -0x38, 0x1C, 0x13, 0x20, 0x38, 0xE7, 0x28, 0x30, 0x39, 0xFB, 0xF5, 0x20, 0x3A, 0xC7, 0x0A, 0x30, -0x3B, 0xDB, 0xD7, 0x20, 0x3C, 0xB0, 0x26, 0xB0, 0x3D, 0xBB, 0xB9, 0x20, 0x3E, 0x90, 0x08, 0xB0, -0x3F, 0x9B, 0x9B, 0x20, 0x40, 0x6F, 0xEA, 0xB0, 0x41, 0x84, 0xB7, 0xA0, 0x42, 0x4F, 0xCC, 0xB0, -0x43, 0x64, 0x99, 0xA0, 0x44, 0x2F, 0xAE, 0xB0, 0x45, 0x44, 0x7B, 0xA0, 0x45, 0xF3, 0xE1, 0x30, -0x47, 0x2D, 0x98, 0x20, 0x47, 0xD3, 0xC3, 0x30, 0x49, 0x0D, 0x7A, 0x20, 0x49, 0xB3, 0xA5, 0x30, -0x4A, 0xED, 0x5C, 0x20, 0x4B, 0x9C, 0xC1, 0xB0, 0x4C, 0xD6, 0x78, 0xA0, 0x4D, 0x7C, 0xA3, 0xB0, -0x4E, 0xB6, 0x5A, 0xA0, 0x4F, 0x5C, 0x85, 0xB0, 0x50, 0x96, 0x3C, 0xA0, 0x51, 0x3C, 0x67, 0xB0, -0x52, 0x76, 0x1E, 0xA0, 0x53, 0x1C, 0x49, 0xB0, 0x54, 0x56, 0x00, 0xA0, 0x54, 0xFC, 0x2B, 0xB0, -0x56, 0x35, 0xE2, 0xA0, 0x56, 0xE5, 0x48, 0x30, 0x58, 0x1E, 0xFF, 0x20, 0x58, 0xC5, 0x2A, 0x30, -0x59, 0xFE, 0xE1, 0x20, 0x5A, 0xA5, 0x0C, 0x30, 0x5B, 0xDE, 0xC3, 0x20, 0x5C, 0x84, 0xEE, 0x30, -0x5D, 0xBE, 0xA5, 0x20, 0x5E, 0x64, 0xD0, 0x30, 0x5F, 0x9E, 0x87, 0x20, 0x60, 0x4D, 0xEC, 0xB0, -0x61, 0x87, 0xA3, 0xA0, 0x62, 0x2D, 0xCE, 0xB0, 0x63, 0x67, 0x85, 0xA0, 0x64, 0x0D, 0xB0, 0xB0, -0x65, 0x47, 0x67, 0xA0, 0x65, 0xED, 0x92, 0xB0, 0x67, 0x27, 0x49, 0xA0, 0x67, 0xCD, 0x74, 0xB0, -0x69, 0x07, 0x2B, 0xA0, 0x69, 0xAD, 0x56, 0xB0, 0x6A, 0xE7, 0x0D, 0xA0, 0x6B, 0x96, 0x73, 0x30, -0x6C, 0xD0, 0x2A, 0x20, 0x6D, 0x76, 0x55, 0x30, 0x6E, 0xB0, 0x0C, 0x20, 0x6F, 0x56, 0x37, 0x30, -0x70, 0x8F, 0xEE, 0x20, 0x71, 0x36, 0x19, 0x30, 0x72, 0x6F, 0xD0, 0x20, 0x73, 0x15, 0xFB, 0x30, -0x74, 0x4F, 0xB2, 0x20, 0x74, 0xFF, 0x17, 0xB0, 0x76, 0x38, 0xCE, 0xA0, 0x76, 0xDE, 0xF9, 0xB0, -0x78, 0x18, 0xB0, 0xA0, 0x78, 0xBE, 0xDB, 0xB0, 0x79, 0xF8, 0x92, 0xA0, 0x7A, 0x9E, 0xBD, 0xB0, -0x7B, 0xD8, 0x74, 0xA0, 0x7C, 0x7E, 0x9F, 0xB0, 0x7D, 0xB8, 0x56, 0xA0, 0x7E, 0x5E, 0x81, 0xB0, -0x7F, 0x98, 0x38, 0xA0, 0x01, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, -0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, -0x00, 0x03, 0x00, 0x03, 0x04, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x04, 0xFF, 0xFF, -0x9D, 0x90, 0x01, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x10, -0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x14, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x18, 0xFF, 0xFF, 0x81, 0x70, -0x00, 0x1D, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, 0x00, 0x50, 0x44, -0x54, 0x00, 0x59, 0x53, 0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x44, 0x54, 0x00, 0x41, -0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, -0x00, 0x00, 0x00, 0x00, - -/* America/Kentucky/Louisville */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xB1, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xA4, 0x73, 0xF7, 0x00, -0xA5, 0x16, 0x11, 0x70, 0xCA, 0x0D, 0x4E, 0x80, 0xCA, 0xD8, 0x47, 0x70, 0xCB, 0x88, 0xFE, 0x80, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, 0xD2, 0xDB, 0x97, 0x60, 0xD3, 0xA4, 0x09, 0x70, -0xD5, 0x55, 0xD5, 0x00, 0xDB, 0xC0, 0x73, 0xF0, 0xDC, 0xDE, 0x97, 0x80, 0xDD, 0xA9, 0x90, 0x70, -0xDE, 0xBE, 0x79, 0x80, 0xDF, 0x89, 0x72, 0x70, 0xE0, 0x9E, 0x5B, 0x80, 0xE1, 0x69, 0x54, 0x70, -0xE2, 0x7E, 0x3D, 0x80, 0xE3, 0x49, 0x36, 0x70, 0xE4, 0x5E, 0x1F, 0x80, 0xE5, 0x29, 0x18, 0x70, -0xE6, 0x47, 0x3C, 0x00, 0xE7, 0x37, 0x1E, 0xF0, 0xE8, 0x27, 0x1E, 0x00, 0xE9, 0x17, 0x00, 0xF0, -0xEA, 0x07, 0x00, 0x00, 0xEA, 0xF6, 0xE2, 0xF0, 0xEB, 0xE6, 0xE2, 0x00, 0xEC, 0xD6, 0xC4, 0xF0, -0xED, 0xC6, 0xC4, 0x00, 0xEE, 0xBF, 0xE1, 0x70, 0xEF, 0xAF, 0xE0, 0x80, 0xF0, 0x1E, 0x90, 0x70, -0xFC, 0xD8, 0x3A, 0xF0, 0xFD, 0xC8, 0x1D, 0xE0, 0xFE, 0xB8, 0x1C, 0xF0, 0xFF, 0xA7, 0xFF, 0xE0, -0x00, 0x97, 0xFE, 0xF0, 0x01, 0x87, 0xE1, 0xE0, 0x02, 0x77, 0xE0, 0xF0, 0x03, 0x70, 0xFE, 0x60, -0x04, 0x60, 0xFD, 0x70, 0x05, 0x50, 0xE0, 0x60, 0x06, 0x40, 0xDF, 0x70, 0x07, 0x30, 0xC2, 0x60, -0x07, 0x8D, 0x19, 0x70, 0x09, 0x10, 0xB2, 0x70, 0x09, 0xAD, 0x94, 0xF0, 0x0A, 0xF0, 0x86, 0x60, -0x0B, 0xE0, 0x85, 0x70, 0x0C, 0xD9, 0xA2, 0xE0, 0x0D, 0xC0, 0x67, 0x70, 0x0E, 0xB9, 0x84, 0xE0, -0x0F, 0xA9, 0x83, 0xF0, 0x10, 0x99, 0x66, 0xE0, 0x11, 0x89, 0x65, 0xF0, 0x12, 0x79, 0x48, 0xE0, -0x13, 0x69, 0x47, 0xF0, 0x14, 0x59, 0x2A, 0xE0, 0x15, 0x49, 0x29, 0xF0, 0x16, 0x39, 0x0C, 0xE0, -0x17, 0x29, 0x0B, 0xF0, 0x18, 0x22, 0x29, 0x60, 0x19, 0x08, 0xED, 0xF0, 0x1A, 0x02, 0x0B, 0x60, -0x1A, 0xF2, 0x0A, 0x70, 0x1B, 0xE1, 0xED, 0x60, 0x1C, 0xD1, 0xEC, 0x70, 0x1D, 0xC1, 0xCF, 0x60, -0x1E, 0xB1, 0xCE, 0x70, 0x1F, 0xA1, 0xB1, 0x60, 0x20, 0x76, 0x00, 0xF0, 0x21, 0x81, 0x93, 0x60, -0x22, 0x55, 0xE2, 0xF0, 0x23, 0x6A, 0xAF, 0xE0, 0x24, 0x35, 0xC4, 0xF0, 0x25, 0x4A, 0x91, 0xE0, -0x26, 0x15, 0xA6, 0xF0, 0x27, 0x2A, 0x73, 0xE0, 0x27, 0xFE, 0xC3, 0x70, 0x29, 0x0A, 0x55, 0xE0, -0x29, 0xDE, 0xA5, 0x70, 0x2A, 0xEA, 0x37, 0xE0, 0x2B, 0xBE, 0x87, 0x70, 0x2C, 0xD3, 0x54, 0x60, -0x2D, 0x9E, 0x69, 0x70, 0x2E, 0xB3, 0x36, 0x60, 0x2F, 0x7E, 0x4B, 0x70, 0x30, 0x93, 0x18, 0x60, -0x31, 0x67, 0x67, 0xF0, 0x32, 0x72, 0xFA, 0x60, 0x33, 0x47, 0x49, 0xF0, 0x34, 0x52, 0xDC, 0x60, -0x35, 0x27, 0x2B, 0xF0, 0x36, 0x32, 0xBE, 0x60, 0x37, 0x07, 0x0D, 0xF0, 0x38, 0x1B, 0xDA, 0xE0, -0x38, 0xE6, 0xEF, 0xF0, 0x39, 0xFB, 0xBC, 0xE0, 0x3A, 0xC6, 0xD1, 0xF0, 0x3B, 0xDB, 0x9E, 0xE0, -0x3C, 0xAF, 0xEE, 0x70, 0x3D, 0xBB, 0x80, 0xE0, 0x3E, 0x8F, 0xD0, 0x70, 0x3F, 0x9B, 0x62, 0xE0, -0x40, 0x6F, 0xB2, 0x70, 0x41, 0x84, 0x7F, 0x60, 0x42, 0x4F, 0x94, 0x70, 0x43, 0x64, 0x61, 0x60, -0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x43, 0x60, 0x45, 0xF3, 0xA8, 0xF0, 0x47, 0x2D, 0x5F, 0xE0, -0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x41, 0xE0, 0x49, 0xB3, 0x6C, 0xF0, 0x4A, 0xED, 0x23, 0xE0, -0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x40, 0x60, 0x4D, 0x7C, 0x6B, 0x70, 0x4E, 0xB6, 0x22, 0x60, -0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x04, 0x60, 0x51, 0x3C, 0x2F, 0x70, 0x52, 0x75, 0xE6, 0x60, -0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xC8, 0x60, 0x54, 0xFB, 0xF3, 0x70, 0x56, 0x35, 0xAA, 0x60, -0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, 0x58, 0xC4, 0xF1, 0xF0, 0x59, 0xFE, 0xA8, 0xE0, -0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, 0x5C, 0x84, 0xB5, 0xF0, 0x5D, 0xBE, 0x6C, 0xE0, -0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, 0x60, 0x4D, 0xB4, 0x70, 0x61, 0x87, 0x6B, 0x60, -0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, 0x64, 0x0D, 0x78, 0x70, 0x65, 0x47, 0x2F, 0x60, -0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, 0x67, 0xCD, 0x3C, 0x70, 0x69, 0x06, 0xF3, 0x60, -0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, 0x6B, 0x96, 0x3A, 0xF0, 0x6C, 0xCF, 0xF1, 0xE0, -0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, 0x6F, 0x55, 0xFE, 0xF0, 0x70, 0x8F, 0xB5, 0xE0, -0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, 0x73, 0x15, 0xC2, 0xF0, 0x74, 0x4F, 0x79, 0xE0, -0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, 0x76, 0xDE, 0xC1, 0x70, 0x78, 0x18, 0x78, 0x60, -0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, 0x7A, 0x9E, 0x85, 0x70, 0x7B, 0xD8, 0x3C, 0x60, -0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, 0x7E, 0x5E, 0x49, 0x70, 0x7F, 0x98, 0x00, 0x60, -0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, -0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF, -0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, -0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - -/* America/Kentucky/Monticello */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, 0xFC, 0xD8, 0x49, 0x00, 0xFD, 0xC8, 0x2B, 0xF0, -0xFE, 0xB8, 0x2B, 0x00, 0xFF, 0xA8, 0x0D, 0xF0, 0x00, 0x98, 0x0D, 0x00, 0x01, 0x87, 0xEF, 0xF0, -0x02, 0x77, 0xEF, 0x00, 0x03, 0x71, 0x0C, 0x70, 0x04, 0x61, 0x0B, 0x80, 0x05, 0x50, 0xEE, 0x70, -0x06, 0x40, 0xED, 0x80, 0x07, 0x30, 0xD0, 0x70, 0x07, 0x8D, 0x27, 0x80, 0x09, 0x10, 0xB2, 0x70, -0x09, 0xAD, 0xA3, 0x00, 0x0A, 0xF0, 0x94, 0x70, 0x0B, 0xE0, 0x93, 0x80, 0x0C, 0xD9, 0xB0, 0xF0, -0x0D, 0xC0, 0x75, 0x80, 0x0E, 0xB9, 0x92, 0xF0, 0x0F, 0xA9, 0x92, 0x00, 0x10, 0x99, 0x74, 0xF0, -0x11, 0x89, 0x74, 0x00, 0x12, 0x79, 0x56, 0xF0, 0x13, 0x69, 0x56, 0x00, 0x14, 0x59, 0x38, 0xF0, -0x15, 0x49, 0x38, 0x00, 0x16, 0x39, 0x1A, 0xF0, 0x17, 0x29, 0x1A, 0x00, 0x18, 0x22, 0x37, 0x70, -0x19, 0x08, 0xFC, 0x00, 0x1A, 0x02, 0x19, 0x70, 0x1A, 0xF2, 0x18, 0x80, 0x1B, 0xE1, 0xFB, 0x70, -0x1C, 0xD1, 0xFA, 0x80, 0x1D, 0xC1, 0xDD, 0x70, 0x1E, 0xB1, 0xDC, 0x80, 0x1F, 0xA1, 0xBF, 0x70, -0x20, 0x76, 0x0F, 0x00, 0x21, 0x81, 0xA1, 0x70, 0x22, 0x55, 0xF1, 0x00, 0x23, 0x6A, 0xBD, 0xF0, -0x24, 0x35, 0xD3, 0x00, 0x25, 0x4A, 0x9F, 0xF0, 0x26, 0x15, 0xB5, 0x00, 0x27, 0x2A, 0x81, 0xF0, -0x27, 0xFE, 0xD1, 0x80, 0x29, 0x0A, 0x63, 0xF0, 0x29, 0xDE, 0xB3, 0x80, 0x2A, 0xEA, 0x45, 0xF0, -0x2B, 0xBE, 0x95, 0x80, 0x2C, 0xD3, 0x62, 0x70, 0x2D, 0x9E, 0x77, 0x80, 0x2E, 0xB3, 0x44, 0x70, -0x2F, 0x7E, 0x59, 0x80, 0x30, 0x93, 0x26, 0x70, 0x31, 0x67, 0x76, 0x00, 0x32, 0x73, 0x08, 0x70, -0x33, 0x47, 0x58, 0x00, 0x34, 0x52, 0xEA, 0x70, 0x35, 0x27, 0x3A, 0x00, 0x36, 0x32, 0xCC, 0x70, -0x37, 0x07, 0x1C, 0x00, 0x38, 0x1B, 0xE8, 0xF0, 0x38, 0xE6, 0xFE, 0x00, 0x39, 0xFB, 0xCA, 0xF0, -0x3A, 0xC6, 0xD1, 0xF0, 0x3B, 0xDB, 0x9E, 0xE0, 0x3C, 0xAF, 0xEE, 0x70, 0x3D, 0xBB, 0x80, 0xE0, -0x3E, 0x8F, 0xD0, 0x70, 0x3F, 0x9B, 0x62, 0xE0, 0x40, 0x6F, 0xB2, 0x70, 0x41, 0x84, 0x7F, 0x60, -0x42, 0x4F, 0x94, 0x70, 0x43, 0x64, 0x61, 0x60, 0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x43, 0x60, -0x45, 0xF3, 0xA8, 0xF0, 0x47, 0x2D, 0x5F, 0xE0, 0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x41, 0xE0, -0x49, 0xB3, 0x6C, 0xF0, 0x4A, 0xED, 0x23, 0xE0, 0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x40, 0x60, -0x4D, 0x7C, 0x6B, 0x70, 0x4E, 0xB6, 0x22, 0x60, 0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x04, 0x60, -0x51, 0x3C, 0x2F, 0x70, 0x52, 0x75, 0xE6, 0x60, 0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xC8, 0x60, -0x54, 0xFB, 0xF3, 0x70, 0x56, 0x35, 0xAA, 0x60, 0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, -0x58, 0xC4, 0xF1, 0xF0, 0x59, 0xFE, 0xA8, 0xE0, 0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, -0x5C, 0x84, 0xB5, 0xF0, 0x5D, 0xBE, 0x6C, 0xE0, 0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, -0x60, 0x4D, 0xB4, 0x70, 0x61, 0x87, 0x6B, 0x60, 0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, -0x64, 0x0D, 0x78, 0x70, 0x65, 0x47, 0x2F, 0x60, 0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, -0x67, 0xCD, 0x3C, 0x70, 0x69, 0x06, 0xF3, 0x60, 0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, -0x6B, 0x96, 0x3A, 0xF0, 0x6C, 0xCF, 0xF1, 0xE0, 0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, -0x6F, 0x55, 0xFE, 0xF0, 0x70, 0x8F, 0xB5, 0xE0, 0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, -0x73, 0x15, 0xC2, 0xF0, 0x74, 0x4F, 0x79, 0xE0, 0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, -0x76, 0xDE, 0xC1, 0x70, 0x78, 0x18, 0x78, 0x60, 0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, -0x7A, 0x9E, 0x85, 0x70, 0x7B, 0xD8, 0x3C, 0x60, 0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, -0x7E, 0x5E, 0x49, 0x70, 0x7F, 0x98, 0x00, 0x60, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, -0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, -0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x10, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x14, 0x43, -0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, -0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, 0x00, - -/* America/Knox_IN */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x9E, 0xA6, 0x2C, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, 0xD5, 0x55, 0xD5, 0x00, 0xD6, 0x20, 0xCD, 0xF0, -0xD7, 0x35, 0xB7, 0x00, 0xD8, 0x00, 0xAF, 0xF0, 0xD9, 0x15, 0x99, 0x00, 0xD9, 0xE0, 0x91, 0xF0, -0xDA, 0xFE, 0xB5, 0x80, 0xDB, 0xC0, 0x73, 0xF0, 0xDC, 0xDE, 0x97, 0x80, 0xDD, 0xA9, 0x90, 0x70, -0xDE, 0xBE, 0x79, 0x80, 0xDF, 0x89, 0x72, 0x70, 0xE0, 0x9E, 0x5B, 0x80, 0xE1, 0x69, 0x54, 0x70, -0xE2, 0x7E, 0x3D, 0x80, 0xE3, 0x49, 0x36, 0x70, 0xE4, 0x5E, 0x1F, 0x80, 0xE5, 0x57, 0x3C, 0xF0, -0xE6, 0x47, 0x3C, 0x00, 0xE7, 0x37, 0x1E, 0xF0, 0xE8, 0x27, 0x1E, 0x00, 0xE8, 0xF2, 0x16, 0xF0, -0xEA, 0x07, 0x00, 0x00, 0xEA, 0xD1, 0xF8, 0xF0, 0xEB, 0xE6, 0xE2, 0x00, 0xEC, 0xD6, 0xC4, 0xF0, -0xED, 0xC6, 0xC4, 0x00, 0xEE, 0xBF, 0xE1, 0x70, 0xEF, 0xAF, 0xE0, 0x80, 0xF0, 0x9F, 0xC3, 0x70, -0xF1, 0x8F, 0xC2, 0x80, 0xF4, 0x5F, 0x87, 0x70, 0xFA, 0xF8, 0x67, 0x00, 0xFB, 0xE8, 0x49, 0xF0, -0xFC, 0xD8, 0x49, 0x00, 0xFD, 0xC8, 0x2B, 0xF0, 0xFE, 0xB8, 0x2B, 0x00, 0xFF, 0xA8, 0x0D, 0xF0, -0x00, 0x98, 0x0D, 0x00, 0x01, 0x87, 0xEF, 0xF0, 0x02, 0x77, 0xEF, 0x00, 0x03, 0x71, 0x0C, 0x70, -0x04, 0x61, 0x0B, 0x80, 0x05, 0x50, 0xEE, 0x70, 0x06, 0x40, 0xED, 0x80, 0x07, 0x30, 0xD0, 0x70, -0x07, 0x8D, 0x27, 0x80, 0x09, 0x10, 0xB2, 0x70, 0x09, 0xAD, 0xA3, 0x00, 0x0A, 0xF0, 0x94, 0x70, -0x0B, 0xE0, 0x93, 0x80, 0x0C, 0xD9, 0xB0, 0xF0, 0x0D, 0xC0, 0x75, 0x80, 0x0E, 0xB9, 0x92, 0xF0, -0x0F, 0xA9, 0x92, 0x00, 0x10, 0x99, 0x74, 0xF0, 0x11, 0x89, 0x74, 0x00, 0x12, 0x79, 0x56, 0xF0, -0x13, 0x69, 0x56, 0x00, 0x14, 0x59, 0x38, 0xF0, 0x15, 0x49, 0x38, 0x00, 0x16, 0x39, 0x1A, 0xF0, -0x17, 0x29, 0x1A, 0x00, 0x18, 0x22, 0x37, 0x70, 0x19, 0x08, 0xFC, 0x00, 0x1A, 0x02, 0x19, 0x70, -0x1A, 0xF2, 0x18, 0x80, 0x1B, 0xE1, 0xFB, 0x70, 0x1C, 0xD1, 0xFA, 0x80, 0x1D, 0xC1, 0xDD, 0x70, -0x1E, 0xB1, 0xDC, 0x80, 0x1F, 0xA1, 0xBF, 0x70, 0x20, 0x76, 0x0F, 0x00, 0x21, 0x81, 0xA1, 0x70, -0x22, 0x55, 0xF1, 0x00, 0x23, 0x6A, 0xBD, 0xF0, 0x24, 0x35, 0xD3, 0x00, 0x25, 0x4A, 0x9F, 0xF0, -0x26, 0x15, 0xB5, 0x00, 0x27, 0x2A, 0x81, 0xF0, 0x27, 0xFE, 0xD1, 0x80, 0x29, 0x0A, 0x63, 0xF0, -0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x51, 0x70, 0x45, 0xF3, 0xB7, 0x00, 0x47, 0x2D, 0x6D, 0xF0, -0x47, 0xD3, 0x99, 0x00, 0x49, 0x0D, 0x4F, 0xF0, 0x49, 0xB3, 0x7B, 0x00, 0x4A, 0xED, 0x31, 0xF0, -0x4B, 0x9C, 0x97, 0x80, 0x4C, 0xD6, 0x4E, 0x70, 0x4D, 0x7C, 0x79, 0x80, 0x4E, 0xB6, 0x30, 0x70, -0x4F, 0x5C, 0x5B, 0x80, 0x50, 0x96, 0x12, 0x70, 0x51, 0x3C, 0x3D, 0x80, 0x52, 0x75, 0xF4, 0x70, -0x53, 0x1C, 0x1F, 0x80, 0x54, 0x55, 0xD6, 0x70, 0x54, 0xFC, 0x01, 0x80, 0x56, 0x35, 0xB8, 0x70, -0x56, 0xE5, 0x1E, 0x00, 0x58, 0x1E, 0xD4, 0xF0, 0x58, 0xC5, 0x00, 0x00, 0x59, 0xFE, 0xB6, 0xF0, -0x5A, 0xA4, 0xE2, 0x00, 0x5B, 0xDE, 0x98, 0xF0, 0x5C, 0x84, 0xC4, 0x00, 0x5D, 0xBE, 0x7A, 0xF0, -0x5E, 0x64, 0xA6, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x60, 0x4D, 0xC2, 0x80, 0x61, 0x87, 0x79, 0x70, -0x62, 0x2D, 0xA4, 0x80, 0x63, 0x67, 0x5B, 0x70, 0x64, 0x0D, 0x86, 0x80, 0x65, 0x47, 0x3D, 0x70, -0x65, 0xED, 0x68, 0x80, 0x67, 0x27, 0x1F, 0x70, 0x67, 0xCD, 0x4A, 0x80, 0x69, 0x07, 0x01, 0x70, -0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, 0x6B, 0x96, 0x49, 0x00, 0x6C, 0xCF, 0xFF, 0xF0, -0x6D, 0x76, 0x2B, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, 0x6F, 0x56, 0x0D, 0x00, 0x70, 0x8F, 0xC3, 0xF0, -0x71, 0x35, 0xEF, 0x00, 0x72, 0x6F, 0xA5, 0xF0, 0x73, 0x15, 0xD1, 0x00, 0x74, 0x4F, 0x87, 0xF0, -0x74, 0xFE, 0xED, 0x80, 0x76, 0x38, 0xA4, 0x70, 0x76, 0xDE, 0xCF, 0x80, 0x78, 0x18, 0x86, 0x70, -0x78, 0xBE, 0xB1, 0x80, 0x79, 0xF8, 0x68, 0x70, 0x7A, 0x9E, 0x93, 0x80, 0x7B, 0xD8, 0x4A, 0x70, -0x7C, 0x7E, 0x75, 0x80, 0x7D, 0xB8, 0x2C, 0x70, 0x7E, 0x5E, 0x57, 0x80, 0x7F, 0x98, 0x0E, 0x70, -0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 0x04, 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, 0x04, 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, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, -0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, -0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, -0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, - -/* America/La_Paz */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0xB8, 0x1E, 0x96, 0xE4, -0xB8, 0xEE, 0xD5, 0xD4, 0x01, 0x02, 0xFF, 0xFF, 0xC0, 0x1C, 0x00, 0x00, 0xFF, 0xFF, 0xCE, 0x2C, -0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x09, 0x43, 0x4D, 0x54, 0x00, 0x42, 0x4F, 0x53, 0x54, -0x00, 0x42, 0x4F, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Lima */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x8C, 0x74, 0x40, 0xD4, -0xC3, 0xCF, 0x4A, 0x50, 0xC4, 0x45, 0xE3, 0x40, 0xC5, 0x2F, 0x4A, 0xD0, 0xC6, 0x1F, 0x2D, 0xC0, -0xC7, 0x0F, 0x2C, 0xD0, 0xC7, 0xFF, 0x0F, 0xC0, 0x1E, 0x18, 0xC4, 0x50, 0x1E, 0x8F, 0x5D, 0x40, -0x1F, 0xF9, 0xF7, 0xD0, 0x20, 0x70, 0x90, 0xC0, 0x25, 0x9E, 0xE3, 0xD0, 0x26, 0x15, 0x7C, 0xC0, -0x2D, 0x25, 0x03, 0x50, 0x2D, 0x9B, 0x9C, 0x40, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xB7, 0xAC, 0x00, 0x00, 0xFF, 0xFF, 0xC7, -0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x50, 0x45, 0x53, -0x54, 0x00, 0x50, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Los_Angeles */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xB9, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x48, 0xA0, -0x9F, 0xBB, 0x15, 0x90, 0xA0, 0x86, 0x2A, 0xA0, 0xA1, 0x9A, 0xF7, 0x90, 0xCB, 0x89, 0x1A, 0xA0, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x26, 0x10, 0xD6, 0xFE, 0x74, 0x20, 0xD8, 0x80, 0xAD, 0x90, -0xDA, 0xFE, 0xD1, 0xA0, 0xDB, 0xC0, 0x90, 0x10, 0xDC, 0xDE, 0xB3, 0xA0, 0xDD, 0xA9, 0xAC, 0x90, -0xDE, 0xBE, 0x95, 0xA0, 0xDF, 0x89, 0x8E, 0x90, 0xE0, 0x9E, 0x77, 0xA0, 0xE1, 0x69, 0x70, 0x90, -0xE2, 0x7E, 0x59, 0xA0, 0xE3, 0x49, 0x52, 0x90, 0xE4, 0x5E, 0x3B, 0xA0, 0xE5, 0x29, 0x34, 0x90, -0xE6, 0x47, 0x58, 0x20, 0xE7, 0x12, 0x51, 0x10, 0xE8, 0x27, 0x3A, 0x20, 0xE8, 0xF2, 0x33, 0x10, -0xEA, 0x07, 0x1C, 0x20, 0xEA, 0xD2, 0x15, 0x10, 0xEB, 0xE6, 0xFE, 0x20, 0xEC, 0xB1, 0xF7, 0x10, -0xED, 0xC6, 0xE0, 0x20, 0xEE, 0x91, 0xD9, 0x10, 0xEF, 0xAF, 0xFC, 0xA0, 0xF0, 0x71, 0xBB, 0x10, -0xF1, 0x8F, 0xDE, 0xA0, 0xF2, 0x7F, 0xC1, 0x90, 0xF3, 0x6F, 0xC0, 0xA0, 0xF4, 0x5F, 0xA3, 0x90, -0xF5, 0x4F, 0xA2, 0xA0, 0xF6, 0x3F, 0x85, 0x90, 0xF7, 0x2F, 0x84, 0xA0, 0xF8, 0x28, 0xA2, 0x10, -0xF9, 0x0F, 0x66, 0xA0, 0xFA, 0x08, 0x84, 0x10, 0xFA, 0xF8, 0x83, 0x20, 0xFB, 0xE8, 0x66, 0x10, -0xFC, 0xD8, 0x65, 0x20, 0xFD, 0xC8, 0x48, 0x10, 0xFE, 0xB8, 0x47, 0x20, 0xFF, 0xA8, 0x2A, 0x10, -0x00, 0x98, 0x29, 0x20, 0x01, 0x88, 0x0C, 0x10, 0x02, 0x78, 0x0B, 0x20, 0x03, 0x71, 0x28, 0x90, -0x04, 0x61, 0x27, 0xA0, 0x05, 0x51, 0x0A, 0x90, 0x06, 0x41, 0x09, 0xA0, 0x07, 0x30, 0xEC, 0x90, -0x07, 0x8D, 0x43, 0xA0, 0x09, 0x10, 0xCE, 0x90, 0x09, 0xAD, 0xBF, 0x20, 0x0A, 0xF0, 0xB0, 0x90, -0x0B, 0xE0, 0xAF, 0xA0, 0x0C, 0xD9, 0xCD, 0x10, 0x0D, 0xC0, 0x91, 0xA0, 0x0E, 0xB9, 0xAF, 0x10, -0x0F, 0xA9, 0xAE, 0x20, 0x10, 0x99, 0x91, 0x10, 0x11, 0x89, 0x90, 0x20, 0x12, 0x79, 0x73, 0x10, -0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, 0x15, 0x49, 0x54, 0x20, 0x16, 0x39, 0x37, 0x10, -0x17, 0x29, 0x36, 0x20, 0x18, 0x22, 0x53, 0x90, 0x19, 0x09, 0x18, 0x20, 0x1A, 0x02, 0x35, 0x90, -0x1A, 0xF2, 0x34, 0xA0, 0x1B, 0xE2, 0x17, 0x90, 0x1C, 0xD2, 0x16, 0xA0, 0x1D, 0xC1, 0xF9, 0x90, -0x1E, 0xB1, 0xF8, 0xA0, 0x1F, 0xA1, 0xDB, 0x90, 0x20, 0x76, 0x2B, 0x20, 0x21, 0x81, 0xBD, 0x90, -0x22, 0x56, 0x0D, 0x20, 0x23, 0x6A, 0xDA, 0x10, 0x24, 0x35, 0xEF, 0x20, 0x25, 0x4A, 0xBC, 0x10, -0x26, 0x15, 0xD1, 0x20, 0x27, 0x2A, 0x9E, 0x10, 0x27, 0xFE, 0xED, 0xA0, 0x29, 0x0A, 0x80, 0x10, -0x29, 0xDE, 0xCF, 0xA0, 0x2A, 0xEA, 0x62, 0x10, 0x2B, 0xBE, 0xB1, 0xA0, 0x2C, 0xD3, 0x7E, 0x90, -0x2D, 0x9E, 0x93, 0xA0, 0x2E, 0xB3, 0x60, 0x90, 0x2F, 0x7E, 0x75, 0xA0, 0x30, 0x93, 0x42, 0x90, -0x31, 0x67, 0x92, 0x20, 0x32, 0x73, 0x24, 0x90, 0x33, 0x47, 0x74, 0x20, 0x34, 0x53, 0x06, 0x90, -0x35, 0x27, 0x56, 0x20, 0x36, 0x32, 0xE8, 0x90, 0x37, 0x07, 0x38, 0x20, 0x38, 0x1C, 0x05, 0x10, -0x38, 0xE7, 0x1A, 0x20, 0x39, 0xFB, 0xE7, 0x10, 0x3A, 0xC6, 0xFC, 0x20, 0x3B, 0xDB, 0xC9, 0x10, -0x3C, 0xB0, 0x18, 0xA0, 0x3D, 0xBB, 0xAB, 0x10, 0x3E, 0x8F, 0xFA, 0xA0, 0x3F, 0x9B, 0x8D, 0x10, -0x40, 0x6F, 0xDC, 0xA0, 0x41, 0x84, 0xA9, 0x90, 0x42, 0x4F, 0xBE, 0xA0, 0x43, 0x64, 0x8B, 0x90, -0x44, 0x2F, 0xA0, 0xA0, 0x45, 0x44, 0x6D, 0x90, 0x45, 0xF3, 0xD3, 0x20, 0x47, 0x2D, 0x8A, 0x10, -0x47, 0xD3, 0xB5, 0x20, 0x49, 0x0D, 0x6C, 0x10, 0x49, 0xB3, 0x97, 0x20, 0x4A, 0xED, 0x4E, 0x10, -0x4B, 0x9C, 0xB3, 0xA0, 0x4C, 0xD6, 0x6A, 0x90, 0x4D, 0x7C, 0x95, 0xA0, 0x4E, 0xB6, 0x4C, 0x90, -0x4F, 0x5C, 0x77, 0xA0, 0x50, 0x96, 0x2E, 0x90, 0x51, 0x3C, 0x59, 0xA0, 0x52, 0x76, 0x10, 0x90, -0x53, 0x1C, 0x3B, 0xA0, 0x54, 0x55, 0xF2, 0x90, 0x54, 0xFC, 0x1D, 0xA0, 0x56, 0x35, 0xD4, 0x90, -0x56, 0xE5, 0x3A, 0x20, 0x58, 0x1E, 0xF1, 0x10, 0x58, 0xC5, 0x1C, 0x20, 0x59, 0xFE, 0xD3, 0x10, -0x5A, 0xA4, 0xFE, 0x20, 0x5B, 0xDE, 0xB5, 0x10, 0x5C, 0x84, 0xE0, 0x20, 0x5D, 0xBE, 0x97, 0x10, -0x5E, 0x64, 0xC2, 0x20, 0x5F, 0x9E, 0x79, 0x10, 0x60, 0x4D, 0xDE, 0xA0, 0x61, 0x87, 0x95, 0x90, -0x62, 0x2D, 0xC0, 0xA0, 0x63, 0x67, 0x77, 0x90, 0x64, 0x0D, 0xA2, 0xA0, 0x65, 0x47, 0x59, 0x90, -0x65, 0xED, 0x84, 0xA0, 0x67, 0x27, 0x3B, 0x90, 0x67, 0xCD, 0x66, 0xA0, 0x69, 0x07, 0x1D, 0x90, -0x69, 0xAD, 0x48, 0xA0, 0x6A, 0xE6, 0xFF, 0x90, 0x6B, 0x96, 0x65, 0x20, 0x6C, 0xD0, 0x1C, 0x10, -0x6D, 0x76, 0x47, 0x20, 0x6E, 0xAF, 0xFE, 0x10, 0x6F, 0x56, 0x29, 0x20, 0x70, 0x8F, 0xE0, 0x10, -0x71, 0x36, 0x0B, 0x20, 0x72, 0x6F, 0xC2, 0x10, 0x73, 0x15, 0xED, 0x20, 0x74, 0x4F, 0xA4, 0x10, -0x74, 0xFF, 0x09, 0xA0, 0x76, 0x38, 0xC0, 0x90, 0x76, 0xDE, 0xEB, 0xA0, 0x78, 0x18, 0xA2, 0x90, -0x78, 0xBE, 0xCD, 0xA0, 0x79, 0xF8, 0x84, 0x90, 0x7A, 0x9E, 0xAF, 0xA0, 0x7B, 0xD8, 0x66, 0x90, -0x7C, 0x7E, 0x91, 0xA0, 0x7D, 0xB8, 0x48, 0x90, 0x7E, 0x5E, 0x73, 0xA0, 0x7F, 0x98, 0x2A, 0x90, -0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 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, 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, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x00, 0xFF, -0xFF, 0x8F, 0x80, 0x00, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, -0x0C, 0x50, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, -0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - -/* America/Louisville */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xB1, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xA4, 0x73, 0xF7, 0x00, -0xA5, 0x16, 0x11, 0x70, 0xCA, 0x0D, 0x4E, 0x80, 0xCA, 0xD8, 0x47, 0x70, 0xCB, 0x88, 0xFE, 0x80, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, 0xD2, 0xDB, 0x97, 0x60, 0xD3, 0xA4, 0x09, 0x70, -0xD5, 0x55, 0xD5, 0x00, 0xDB, 0xC0, 0x73, 0xF0, 0xDC, 0xDE, 0x97, 0x80, 0xDD, 0xA9, 0x90, 0x70, -0xDE, 0xBE, 0x79, 0x80, 0xDF, 0x89, 0x72, 0x70, 0xE0, 0x9E, 0x5B, 0x80, 0xE1, 0x69, 0x54, 0x70, -0xE2, 0x7E, 0x3D, 0x80, 0xE3, 0x49, 0x36, 0x70, 0xE4, 0x5E, 0x1F, 0x80, 0xE5, 0x29, 0x18, 0x70, -0xE6, 0x47, 0x3C, 0x00, 0xE7, 0x37, 0x1E, 0xF0, 0xE8, 0x27, 0x1E, 0x00, 0xE9, 0x17, 0x00, 0xF0, -0xEA, 0x07, 0x00, 0x00, 0xEA, 0xF6, 0xE2, 0xF0, 0xEB, 0xE6, 0xE2, 0x00, 0xEC, 0xD6, 0xC4, 0xF0, -0xED, 0xC6, 0xC4, 0x00, 0xEE, 0xBF, 0xE1, 0x70, 0xEF, 0xAF, 0xE0, 0x80, 0xF0, 0x1E, 0x90, 0x70, -0xFC, 0xD8, 0x3A, 0xF0, 0xFD, 0xC8, 0x1D, 0xE0, 0xFE, 0xB8, 0x1C, 0xF0, 0xFF, 0xA7, 0xFF, 0xE0, -0x00, 0x97, 0xFE, 0xF0, 0x01, 0x87, 0xE1, 0xE0, 0x02, 0x77, 0xE0, 0xF0, 0x03, 0x70, 0xFE, 0x60, -0x04, 0x60, 0xFD, 0x70, 0x05, 0x50, 0xE0, 0x60, 0x06, 0x40, 0xDF, 0x70, 0x07, 0x30, 0xC2, 0x60, -0x07, 0x8D, 0x19, 0x70, 0x09, 0x10, 0xB2, 0x70, 0x09, 0xAD, 0x94, 0xF0, 0x0A, 0xF0, 0x86, 0x60, -0x0B, 0xE0, 0x85, 0x70, 0x0C, 0xD9, 0xA2, 0xE0, 0x0D, 0xC0, 0x67, 0x70, 0x0E, 0xB9, 0x84, 0xE0, -0x0F, 0xA9, 0x83, 0xF0, 0x10, 0x99, 0x66, 0xE0, 0x11, 0x89, 0x65, 0xF0, 0x12, 0x79, 0x48, 0xE0, -0x13, 0x69, 0x47, 0xF0, 0x14, 0x59, 0x2A, 0xE0, 0x15, 0x49, 0x29, 0xF0, 0x16, 0x39, 0x0C, 0xE0, -0x17, 0x29, 0x0B, 0xF0, 0x18, 0x22, 0x29, 0x60, 0x19, 0x08, 0xED, 0xF0, 0x1A, 0x02, 0x0B, 0x60, -0x1A, 0xF2, 0x0A, 0x70, 0x1B, 0xE1, 0xED, 0x60, 0x1C, 0xD1, 0xEC, 0x70, 0x1D, 0xC1, 0xCF, 0x60, -0x1E, 0xB1, 0xCE, 0x70, 0x1F, 0xA1, 0xB1, 0x60, 0x20, 0x76, 0x00, 0xF0, 0x21, 0x81, 0x93, 0x60, -0x22, 0x55, 0xE2, 0xF0, 0x23, 0x6A, 0xAF, 0xE0, 0x24, 0x35, 0xC4, 0xF0, 0x25, 0x4A, 0x91, 0xE0, -0x26, 0x15, 0xA6, 0xF0, 0x27, 0x2A, 0x73, 0xE0, 0x27, 0xFE, 0xC3, 0x70, 0x29, 0x0A, 0x55, 0xE0, -0x29, 0xDE, 0xA5, 0x70, 0x2A, 0xEA, 0x37, 0xE0, 0x2B, 0xBE, 0x87, 0x70, 0x2C, 0xD3, 0x54, 0x60, -0x2D, 0x9E, 0x69, 0x70, 0x2E, 0xB3, 0x36, 0x60, 0x2F, 0x7E, 0x4B, 0x70, 0x30, 0x93, 0x18, 0x60, -0x31, 0x67, 0x67, 0xF0, 0x32, 0x72, 0xFA, 0x60, 0x33, 0x47, 0x49, 0xF0, 0x34, 0x52, 0xDC, 0x60, -0x35, 0x27, 0x2B, 0xF0, 0x36, 0x32, 0xBE, 0x60, 0x37, 0x07, 0x0D, 0xF0, 0x38, 0x1B, 0xDA, 0xE0, -0x38, 0xE6, 0xEF, 0xF0, 0x39, 0xFB, 0xBC, 0xE0, 0x3A, 0xC6, 0xD1, 0xF0, 0x3B, 0xDB, 0x9E, 0xE0, -0x3C, 0xAF, 0xEE, 0x70, 0x3D, 0xBB, 0x80, 0xE0, 0x3E, 0x8F, 0xD0, 0x70, 0x3F, 0x9B, 0x62, 0xE0, -0x40, 0x6F, 0xB2, 0x70, 0x41, 0x84, 0x7F, 0x60, 0x42, 0x4F, 0x94, 0x70, 0x43, 0x64, 0x61, 0x60, -0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x43, 0x60, 0x45, 0xF3, 0xA8, 0xF0, 0x47, 0x2D, 0x5F, 0xE0, -0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x41, 0xE0, 0x49, 0xB3, 0x6C, 0xF0, 0x4A, 0xED, 0x23, 0xE0, -0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x40, 0x60, 0x4D, 0x7C, 0x6B, 0x70, 0x4E, 0xB6, 0x22, 0x60, -0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x04, 0x60, 0x51, 0x3C, 0x2F, 0x70, 0x52, 0x75, 0xE6, 0x60, -0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xC8, 0x60, 0x54, 0xFB, 0xF3, 0x70, 0x56, 0x35, 0xAA, 0x60, -0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, 0x58, 0xC4, 0xF1, 0xF0, 0x59, 0xFE, 0xA8, 0xE0, -0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, 0x5C, 0x84, 0xB5, 0xF0, 0x5D, 0xBE, 0x6C, 0xE0, -0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, 0x60, 0x4D, 0xB4, 0x70, 0x61, 0x87, 0x6B, 0x60, -0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, 0x64, 0x0D, 0x78, 0x70, 0x65, 0x47, 0x2F, 0x60, -0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, 0x67, 0xCD, 0x3C, 0x70, 0x69, 0x06, 0xF3, 0x60, -0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, 0x6B, 0x96, 0x3A, 0xF0, 0x6C, 0xCF, 0xF1, 0xE0, -0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, 0x6F, 0x55, 0xFE, 0xF0, 0x70, 0x8F, 0xB5, 0xE0, -0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, 0x73, 0x15, 0xC2, 0xF0, 0x74, 0x4F, 0x79, 0xE0, -0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, 0x76, 0xDE, 0xC1, 0x70, 0x78, 0x18, 0x78, 0x60, -0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, 0x7A, 0x9E, 0x85, 0x70, 0x7B, 0xD8, 0x3C, 0x60, -0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, 0x7E, 0x5E, 0x49, 0x70, 0x7F, 0x98, 0x00, 0x60, -0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, -0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0xFF, -0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, -0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - -/* America/Maceio */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x68, 0x7C, -0xB8, 0x0F, 0x49, 0xE0, 0xB8, 0xFD, 0x40, 0xA0, 0xB9, 0xF1, 0x34, 0x30, 0xBA, 0xDE, 0x74, 0x20, -0xDA, 0x38, 0xAE, 0x30, 0xDA, 0xEB, 0xFA, 0x30, 0xDC, 0x19, 0xE1, 0xB0, 0xDC, 0xB9, 0x59, 0x20, -0xDD, 0xFB, 0x15, 0x30, 0xDE, 0x9B, 0xDE, 0x20, 0xDF, 0xDD, 0x9A, 0x30, 0xE0, 0x54, 0x33, 0x20, -0xF4, 0x97, 0xFF, 0xB0, 0xF5, 0x05, 0x5E, 0x20, 0xF6, 0xC0, 0x64, 0x30, 0xF7, 0x0E, 0x1E, 0xA0, -0xF8, 0x51, 0x2C, 0x30, 0xF8, 0xC7, 0xC5, 0x20, 0xFA, 0x0A, 0xD2, 0xB0, 0xFA, 0xA8, 0xF8, 0xA0, -0xFB, 0xEC, 0x06, 0x30, 0xFC, 0x8B, 0x7D, 0xA0, 0x1D, 0xC9, 0x8E, 0x30, 0x1E, 0x78, 0xD7, 0xA0, -0x1F, 0xA0, 0x35, 0xB0, 0x20, 0x33, 0xCF, 0xA0, 0x21, 0x81, 0x69, 0x30, 0x22, 0x0B, 0xC8, 0xA0, -0x23, 0x58, 0x10, 0xB0, 0x23, 0xE2, 0x70, 0x20, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xD4, 0xC7, 0x20, -0x30, 0x80, 0x79, 0x30, 0x31, 0x1D, 0x4D, 0xA0, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xB8, 0x85, 0x20, -0x39, 0xDF, 0xE3, 0x30, 0x39, 0xF2, 0x4A, 0x20, 0x3B, 0xC8, 0xFF, 0xB0, 0x3C, 0x6F, 0x0E, 0xA0, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xDE, 0x84, 0x00, 0x00, 0xFF, -0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x42, -0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Managua */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0xBD, 0x2D, 0x48, 0xE8, -0x06, 0x43, 0x74, 0x60, 0x09, 0xA4, 0x3E, 0x50, 0x11, 0x51, 0xF8, 0xE0, 0x11, 0xD4, 0x6F, 0x50, -0x13, 0x31, 0xDA, 0xE0, 0x13, 0xB4, 0x51, 0x50, 0x29, 0x61, 0x91, 0x20, 0x2A, 0xC1, 0x4B, 0x50, -0x2B, 0x43, 0xDD, 0xE0, 0x32, 0xC9, 0xEF, 0x50, 0x42, 0x58, 0xC0, 0xE0, 0x43, 0x3F, 0x69, 0x50, -0x44, 0x54, 0x6E, 0x80, 0x45, 0x1F, 0x59, 0x60, 0x01, 0x02, 0x01, 0x03, 0x01, 0x03, 0x01, 0x02, -0x01, 0x02, 0x01, 0x03, 0x01, 0x03, 0x01, 0xFF, 0xFF, 0xAF, 0x18, 0x00, 0x00, 0xFF, 0xFF, 0xAB, -0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0x4D, -0x4D, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Manaus */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x7F, 0x44, -0xB8, 0x0F, 0x57, 0xF0, 0xB8, 0xFD, 0x4E, 0xB0, 0xB9, 0xF1, 0x42, 0x40, 0xBA, 0xDE, 0x82, 0x30, -0xDA, 0x38, 0xBC, 0x40, 0xDA, 0xEC, 0x08, 0x40, 0xDC, 0x19, 0xEF, 0xC0, 0xDC, 0xB9, 0x67, 0x30, -0xDD, 0xFB, 0x23, 0x40, 0xDE, 0x9B, 0xEC, 0x30, 0xDF, 0xDD, 0xA8, 0x40, 0xE0, 0x54, 0x41, 0x30, -0xF4, 0x98, 0x0D, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0xC0, 0x72, 0x40, 0xF7, 0x0E, 0x2C, 0xB0, -0xF8, 0x51, 0x3A, 0x40, 0xF8, 0xC7, 0xD3, 0x30, 0xFA, 0x0A, 0xE0, 0xC0, 0xFA, 0xA9, 0x06, 0xB0, -0xFB, 0xEC, 0x14, 0x40, 0xFC, 0x8B, 0x8B, 0xB0, 0x1D, 0xC9, 0x9C, 0x40, 0x1E, 0x78, 0xE5, 0xB0, -0x1F, 0xA0, 0x43, 0xC0, 0x20, 0x33, 0xDD, 0xB0, 0x21, 0x81, 0x77, 0x40, 0x22, 0x0B, 0xD6, 0xB0, -0x2C, 0xC0, 0xC3, 0x40, 0x2D, 0x66, 0xD2, 0x30, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xC7, 0xBC, 0x00, 0x00, 0xFF, 0xFF, 0xD5, -0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4D, 0x53, -0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Martinique */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x91, 0xA3, 0xC8, 0x44, -0x13, 0x4D, 0x6E, 0x40, 0x14, 0x34, 0x16, 0xB0, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xC6, 0xBC, 0x00, -0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x05, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x09, 0x46, 0x46, 0x4D, -0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* America/Mazatlan */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xA5, 0xB6, 0xE8, 0x70, -0xAF, 0xF2, 0x6E, 0xE0, 0xB6, 0x66, 0x56, 0x60, 0xB7, 0x43, 0xD2, 0x60, 0xB8, 0x0C, 0x36, 0x60, -0xB8, 0xFD, 0x86, 0xF0, 0xCB, 0xEA, 0x71, 0x60, 0xD8, 0x91, 0xB4, 0xF0, 0x00, 0x00, 0x70, 0x80, -0x31, 0x67, 0x84, 0x10, 0x32, 0x73, 0x16, 0x80, 0x33, 0x47, 0x66, 0x10, 0x34, 0x52, 0xF8, 0x80, -0x35, 0x27, 0x48, 0x10, 0x36, 0x32, 0xDA, 0x80, 0x37, 0x07, 0x2A, 0x10, 0x38, 0x1B, 0xF7, 0x00, -0x38, 0xE7, 0x0C, 0x10, 0x39, 0xFB, 0xD9, 0x00, 0x3A, 0xF5, 0x12, 0x90, 0x3B, 0xB6, 0xD1, 0x00, -0x3C, 0xB0, 0x0A, 0x90, 0x3D, 0xBB, 0x9D, 0x00, 0x3E, 0x8F, 0xEC, 0x90, 0x3F, 0x9B, 0x7F, 0x00, -0x40, 0x6F, 0xCE, 0x90, 0x41, 0x84, 0x9B, 0x80, 0x42, 0x4F, 0xB0, 0x90, 0x43, 0x64, 0x7D, 0x80, -0x44, 0x2F, 0x92, 0x90, 0x45, 0x44, 0x5F, 0x80, 0x46, 0x0F, 0x74, 0x90, 0x47, 0x24, 0x41, 0x80, -0x47, 0xF8, 0x91, 0x10, 0x49, 0x04, 0x23, 0x80, 0x49, 0xD8, 0x73, 0x10, 0x4A, 0xE4, 0x05, 0x80, -0x4B, 0xB8, 0x55, 0x10, 0x4C, 0xCD, 0x22, 0x00, 0x4D, 0x98, 0x37, 0x10, 0x4E, 0xAD, 0x04, 0x00, -0x4F, 0x78, 0x19, 0x10, 0x50, 0x8C, 0xE6, 0x00, 0x51, 0x61, 0x35, 0x90, 0x52, 0x6C, 0xC8, 0x00, -0x53, 0x41, 0x17, 0x90, 0x54, 0x4C, 0xAA, 0x00, 0x55, 0x20, 0xF9, 0x90, 0x56, 0x2C, 0x8C, 0x00, -0x57, 0x00, 0xDB, 0x90, 0x58, 0x15, 0xA8, 0x80, 0x58, 0xE0, 0xBD, 0x90, 0x59, 0xF5, 0x8A, 0x80, -0x5A, 0xC0, 0x9F, 0x90, 0x5B, 0xD5, 0x6C, 0x80, 0x5C, 0xA9, 0xBC, 0x10, 0x5D, 0xB5, 0x4E, 0x80, -0x5E, 0x89, 0x9E, 0x10, 0x5F, 0x95, 0x30, 0x80, 0x60, 0x69, 0x80, 0x10, 0x61, 0x7E, 0x4D, 0x00, -0x62, 0x49, 0x62, 0x10, 0x63, 0x5E, 0x2F, 0x00, 0x64, 0x29, 0x44, 0x10, 0x65, 0x3E, 0x11, 0x00, -0x66, 0x12, 0x60, 0x90, 0x67, 0x1D, 0xF3, 0x00, 0x67, 0xF2, 0x42, 0x90, 0x68, 0xFD, 0xD5, 0x00, -0x69, 0xD2, 0x24, 0x90, 0x6A, 0xDD, 0xB7, 0x00, 0x6B, 0xB2, 0x06, 0x90, 0x6C, 0xC6, 0xD3, 0x80, -0x6D, 0x91, 0xE8, 0x90, 0x6E, 0xA6, 0xB5, 0x80, 0x6F, 0x71, 0xCA, 0x90, 0x70, 0x86, 0x97, 0x80, -0x71, 0x5A, 0xE7, 0x10, 0x72, 0x66, 0x79, 0x80, 0x73, 0x3A, 0xC9, 0x10, 0x74, 0x46, 0x5B, 0x80, -0x75, 0x1A, 0xAB, 0x10, 0x76, 0x2F, 0x78, 0x00, 0x76, 0xFA, 0x8D, 0x10, 0x78, 0x0F, 0x5A, 0x00, -0x78, 0xDA, 0x6F, 0x10, 0x79, 0xEF, 0x3C, 0x00, 0x7A, 0xBA, 0x51, 0x10, 0x7B, 0xCF, 0x1E, 0x00, -0x7C, 0xA3, 0x6D, 0x90, 0x7D, 0xAF, 0x00, 0x00, 0x7E, 0x83, 0x4F, 0x90, 0x7F, 0x8E, 0xE2, 0x00, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, -0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, -0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, -0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, -0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, -0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0xFF, 0xFF, 0x9C, -0x3C, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, -0xFF, 0x8F, 0x80, 0x00, 0x0C, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x4D, -0x53, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Mendoza */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x92, 0x8F, 0x30, -0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30, -0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30, -0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0, -0xC1, 0x9D, 0x9D, 0x40, 0xC2, 0x3B, 0xC3, 0x30, 0xC3, 0x7E, 0xD0, 0xC0, 0xC4, 0x1C, 0xF6, 0xB0, -0xC5, 0x60, 0x04, 0x40, 0xC5, 0xFE, 0x2A, 0x30, 0xC7, 0x41, 0x37, 0xC0, 0xC7, 0xE0, 0xAF, 0x30, -0xC8, 0x81, 0x94, 0x40, 0xCA, 0x4D, 0xA1, 0xB0, 0xCA, 0xEE, 0x86, 0xC0, 0xCE, 0x4D, 0xFF, 0x30, -0xCE, 0xB0, 0xED, 0xC0, 0xD3, 0x29, 0x35, 0xB0, 0xD4, 0x43, 0x64, 0xC0, 0xF4, 0x3D, 0x08, 0x30, -0xF4, 0x9F, 0xF6, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0x32, 0x10, 0x40, 0xF6, 0xE6, 0x9F, 0xB0, -0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40, 0xFA, 0xD3, 0x36, 0xB0, -0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, 0xFE, 0x9C, 0x35, 0x30, -0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, 0x23, 0x94, 0xB5, 0xB0, -0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x19, 0x34, 0x40, -0x27, 0xCD, 0xC3, 0xB0, 0x28, 0xFA, 0x67, 0xC0, 0x29, 0xB0, 0x48, 0xB0, 0x2A, 0xE0, 0xE1, 0x40, -0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x40, 0xB0, 0x13, 0xB0, -0x41, 0x56, 0x3E, 0xC0, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x05, 0x06, 0x05, 0x06, 0x05, 0x03, 0x04, 0x02, 0x04, 0x05, 0x04, 0xFF, 0xFF, -0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, -0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, -0x00, 0x0D, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x12, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, -0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x57, 0x41, 0x52, 0x53, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Menominee */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x9E, 0xA6, 0x2C, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, 0xD3, 0x75, 0xF3, 0x00, 0xD4, 0x40, 0xEB, 0xF0, -0xF9, 0x0F, 0x4A, 0x80, 0xFA, 0x08, 0x67, 0xF0, 0xFE, 0xB8, 0x2B, 0x00, 0x06, 0x40, 0xDF, 0x70, -0x07, 0x30, 0xD0, 0x70, 0x07, 0x8D, 0x27, 0x80, 0x09, 0x10, 0xB2, 0x70, 0x09, 0xAD, 0xA3, 0x00, -0x0A, 0xF0, 0x94, 0x70, 0x0B, 0xE0, 0x93, 0x80, 0x0C, 0xD9, 0xB0, 0xF0, 0x0D, 0xC0, 0x75, 0x80, -0x0E, 0xB9, 0x92, 0xF0, 0x0F, 0xA9, 0x92, 0x00, 0x10, 0x99, 0x74, 0xF0, 0x11, 0x89, 0x74, 0x00, -0x12, 0x79, 0x56, 0xF0, 0x13, 0x69, 0x56, 0x00, 0x14, 0x59, 0x38, 0xF0, 0x15, 0x49, 0x38, 0x00, -0x16, 0x39, 0x1A, 0xF0, 0x17, 0x29, 0x1A, 0x00, 0x18, 0x22, 0x37, 0x70, 0x19, 0x08, 0xFC, 0x00, -0x1A, 0x02, 0x19, 0x70, 0x1A, 0xF2, 0x18, 0x80, 0x1B, 0xE1, 0xFB, 0x70, 0x1C, 0xD1, 0xFA, 0x80, -0x1D, 0xC1, 0xDD, 0x70, 0x1E, 0xB1, 0xDC, 0x80, 0x1F, 0xA1, 0xBF, 0x70, 0x20, 0x76, 0x0F, 0x00, -0x21, 0x81, 0xA1, 0x70, 0x22, 0x55, 0xF1, 0x00, 0x23, 0x6A, 0xBD, 0xF0, 0x24, 0x35, 0xD3, 0x00, -0x25, 0x4A, 0x9F, 0xF0, 0x26, 0x15, 0xB5, 0x00, 0x27, 0x2A, 0x81, 0xF0, 0x27, 0xFE, 0xD1, 0x80, -0x29, 0x0A, 0x63, 0xF0, 0x29, 0xDE, 0xB3, 0x80, 0x2A, 0xEA, 0x45, 0xF0, 0x2B, 0xBE, 0x95, 0x80, -0x2C, 0xD3, 0x62, 0x70, 0x2D, 0x9E, 0x77, 0x80, 0x2E, 0xB3, 0x44, 0x70, 0x2F, 0x7E, 0x59, 0x80, -0x30, 0x93, 0x26, 0x70, 0x31, 0x67, 0x76, 0x00, 0x32, 0x73, 0x08, 0x70, 0x33, 0x47, 0x58, 0x00, -0x34, 0x52, 0xEA, 0x70, 0x35, 0x27, 0x3A, 0x00, 0x36, 0x32, 0xCC, 0x70, 0x37, 0x07, 0x1C, 0x00, -0x38, 0x1B, 0xE8, 0xF0, 0x38, 0xE6, 0xFE, 0x00, 0x39, 0xFB, 0xCA, 0xF0, 0x3A, 0xC6, 0xE0, 0x00, -0x3B, 0xDB, 0xAC, 0xF0, 0x3C, 0xAF, 0xFC, 0x80, 0x3D, 0xBB, 0x8E, 0xF0, 0x3E, 0x8F, 0xDE, 0x80, -0x3F, 0x9B, 0x70, 0xF0, 0x40, 0x6F, 0xC0, 0x80, 0x41, 0x84, 0x8D, 0x70, 0x42, 0x4F, 0xA2, 0x80, -0x43, 0x64, 0x6F, 0x70, 0x44, 0x2F, 0x84, 0x80, 0x45, 0x44, 0x51, 0x70, 0x45, 0xF3, 0xB7, 0x00, -0x47, 0x2D, 0x6D, 0xF0, 0x47, 0xD3, 0x99, 0x00, 0x49, 0x0D, 0x4F, 0xF0, 0x49, 0xB3, 0x7B, 0x00, -0x4A, 0xED, 0x31, 0xF0, 0x4B, 0x9C, 0x97, 0x80, 0x4C, 0xD6, 0x4E, 0x70, 0x4D, 0x7C, 0x79, 0x80, -0x4E, 0xB6, 0x30, 0x70, 0x4F, 0x5C, 0x5B, 0x80, 0x50, 0x96, 0x12, 0x70, 0x51, 0x3C, 0x3D, 0x80, -0x52, 0x75, 0xF4, 0x70, 0x53, 0x1C, 0x1F, 0x80, 0x54, 0x55, 0xD6, 0x70, 0x54, 0xFC, 0x01, 0x80, -0x56, 0x35, 0xB8, 0x70, 0x56, 0xE5, 0x1E, 0x00, 0x58, 0x1E, 0xD4, 0xF0, 0x58, 0xC5, 0x00, 0x00, -0x59, 0xFE, 0xB6, 0xF0, 0x5A, 0xA4, 0xE2, 0x00, 0x5B, 0xDE, 0x98, 0xF0, 0x5C, 0x84, 0xC4, 0x00, -0x5D, 0xBE, 0x7A, 0xF0, 0x5E, 0x64, 0xA6, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x60, 0x4D, 0xC2, 0x80, -0x61, 0x87, 0x79, 0x70, 0x62, 0x2D, 0xA4, 0x80, 0x63, 0x67, 0x5B, 0x70, 0x64, 0x0D, 0x86, 0x80, -0x65, 0x47, 0x3D, 0x70, 0x65, 0xED, 0x68, 0x80, 0x67, 0x27, 0x1F, 0x70, 0x67, 0xCD, 0x4A, 0x80, -0x69, 0x07, 0x01, 0x70, 0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, 0x6B, 0x96, 0x49, 0x00, -0x6C, 0xCF, 0xFF, 0xF0, 0x6D, 0x76, 0x2B, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, 0x6F, 0x56, 0x0D, 0x00, -0x70, 0x8F, 0xC3, 0xF0, 0x71, 0x35, 0xEF, 0x00, 0x72, 0x6F, 0xA5, 0xF0, 0x73, 0x15, 0xD1, 0x00, -0x74, 0x4F, 0x87, 0xF0, 0x74, 0xFE, 0xED, 0x80, 0x76, 0x38, 0xA4, 0x70, 0x76, 0xDE, 0xCF, 0x80, -0x78, 0x18, 0x86, 0x70, 0x78, 0xBE, 0xB1, 0x80, 0x79, 0xF8, 0x68, 0x70, 0x7A, 0x9E, 0x93, 0x80, -0x7B, 0xD8, 0x4A, 0x70, 0x7C, 0x7E, 0x75, 0x80, 0x7D, 0xB8, 0x2C, 0x70, 0x7E, 0x5E, 0x57, 0x80, -0x7F, 0x98, 0x0E, 0x70, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x01, 0x00, 0x01, 0x00, 0x01, 0x04, -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, 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, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, -0x00, 0x01, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, -0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, -0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, -0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - -/* America/Merida */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0xA5, 0xB6, 0xDA, 0x60, -0x16, 0x86, 0xD5, 0x60, 0x18, 0x4C, 0x4B, 0x50, 0x31, 0x67, 0x76, 0x00, 0x32, 0x73, 0x08, 0x70, -0x33, 0x47, 0x58, 0x00, 0x34, 0x52, 0xEA, 0x70, 0x35, 0x27, 0x3A, 0x00, 0x36, 0x32, 0xCC, 0x70, -0x37, 0x07, 0x1C, 0x00, 0x38, 0x1B, 0xE8, 0xF0, 0x38, 0xE6, 0xFE, 0x00, 0x39, 0xFB, 0xCA, 0xF0, -0x3A, 0xF5, 0x04, 0x80, 0x3B, 0xB6, 0xC2, 0xF0, 0x3C, 0xAF, 0xFC, 0x80, 0x3D, 0xBB, 0x8E, 0xF0, -0x3E, 0x8F, 0xDE, 0x80, 0x3F, 0x9B, 0x70, 0xF0, 0x40, 0x6F, 0xC0, 0x80, 0x41, 0x84, 0x8D, 0x70, -0x42, 0x4F, 0xA2, 0x80, 0x43, 0x64, 0x6F, 0x70, 0x44, 0x2F, 0x84, 0x80, 0x45, 0x44, 0x51, 0x70, -0x46, 0x0F, 0x66, 0x80, 0x47, 0x24, 0x33, 0x70, 0x47, 0xF8, 0x83, 0x00, 0x49, 0x04, 0x15, 0x70, -0x49, 0xD8, 0x65, 0x00, 0x4A, 0xE3, 0xF7, 0x70, 0x4B, 0xB8, 0x47, 0x00, 0x4C, 0xCD, 0x13, 0xF0, -0x4D, 0x98, 0x29, 0x00, 0x4E, 0xAC, 0xF5, 0xF0, 0x4F, 0x78, 0x0B, 0x00, 0x50, 0x8C, 0xD7, 0xF0, -0x51, 0x61, 0x27, 0x80, 0x52, 0x6C, 0xB9, 0xF0, 0x53, 0x41, 0x09, 0x80, 0x54, 0x4C, 0x9B, 0xF0, -0x55, 0x20, 0xEB, 0x80, 0x56, 0x2C, 0x7D, 0xF0, 0x57, 0x00, 0xCD, 0x80, 0x58, 0x15, 0x9A, 0x70, -0x58, 0xE0, 0xAF, 0x80, 0x59, 0xF5, 0x7C, 0x70, 0x5A, 0xC0, 0x91, 0x80, 0x5B, 0xD5, 0x5E, 0x70, -0x5C, 0xA9, 0xAE, 0x00, 0x5D, 0xB5, 0x40, 0x70, 0x5E, 0x89, 0x90, 0x00, 0x5F, 0x95, 0x22, 0x70, -0x60, 0x69, 0x72, 0x00, 0x61, 0x7E, 0x3E, 0xF0, 0x62, 0x49, 0x54, 0x00, 0x63, 0x5E, 0x20, 0xF0, -0x64, 0x29, 0x36, 0x00, 0x65, 0x3E, 0x02, 0xF0, 0x66, 0x12, 0x52, 0x80, 0x67, 0x1D, 0xE4, 0xF0, -0x67, 0xF2, 0x34, 0x80, 0x68, 0xFD, 0xC6, 0xF0, 0x69, 0xD2, 0x16, 0x80, 0x6A, 0xDD, 0xA8, 0xF0, -0x6B, 0xB1, 0xF8, 0x80, 0x6C, 0xC6, 0xC5, 0x70, 0x6D, 0x91, 0xDA, 0x80, 0x6E, 0xA6, 0xA7, 0x70, -0x6F, 0x71, 0xBC, 0x80, 0x70, 0x86, 0x89, 0x70, 0x71, 0x5A, 0xD9, 0x00, 0x72, 0x66, 0x6B, 0x70, -0x73, 0x3A, 0xBB, 0x00, 0x74, 0x46, 0x4D, 0x70, 0x75, 0x1A, 0x9D, 0x00, 0x76, 0x2F, 0x69, 0xF0, -0x76, 0xFA, 0x7F, 0x00, 0x78, 0x0F, 0x4B, 0xF0, 0x78, 0xDA, 0x61, 0x00, 0x79, 0xEF, 0x2D, 0xF0, -0x7A, 0xBA, 0x43, 0x00, 0x7B, 0xCF, 0x0F, 0xF0, 0x7C, 0xA3, 0x5F, 0x80, 0x7D, 0xAE, 0xF1, 0xF0, -0x7E, 0x83, 0x41, 0x80, 0x7F, 0x8E, 0xD3, 0xF0, 0x01, 0x02, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, -0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, -0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, -0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, -0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, -0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0xFF, -0xFF, 0xAB, 0xFC, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, -0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x45, -0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Mexico_City */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xA5, 0xB6, 0xE8, 0x70, -0xAF, 0xF2, 0x6E, 0xE0, 0xB6, 0x66, 0x56, 0x60, 0xB7, 0x43, 0xD2, 0x60, 0xB8, 0x0C, 0x36, 0x60, -0xB8, 0xFD, 0x86, 0xF0, 0xC5, 0xDE, 0xB0, 0x60, 0xC6, 0x97, 0x34, 0x50, 0xC9, 0x55, 0xF1, 0xE0, -0xC9, 0xEA, 0xDD, 0x50, 0xCF, 0x02, 0xC6, 0xE0, 0xCF, 0xB7, 0x56, 0x50, 0xDA, 0x99, 0x15, 0xE0, -0xDB, 0x76, 0x83, 0xD0, 0x31, 0x67, 0x76, 0x00, 0x32, 0x73, 0x08, 0x70, 0x33, 0x47, 0x58, 0x00, -0x34, 0x52, 0xEA, 0x70, 0x35, 0x27, 0x3A, 0x00, 0x36, 0x32, 0xCC, 0x70, 0x37, 0x07, 0x1C, 0x00, -0x38, 0x1B, 0xE8, 0xF0, 0x38, 0xE6, 0xFE, 0x00, 0x39, 0xFB, 0xCA, 0xF0, 0x3A, 0xF5, 0x04, 0x80, -0x3B, 0xB6, 0xC2, 0xF0, 0x3C, 0xAF, 0xFC, 0x80, 0x3D, 0xBB, 0x8E, 0xF0, 0x3E, 0x8F, 0xDE, 0x80, -0x3F, 0x9B, 0x70, 0xF0, 0x40, 0x6F, 0xC0, 0x80, 0x41, 0x84, 0x8D, 0x70, 0x42, 0x4F, 0xA2, 0x80, -0x43, 0x64, 0x6F, 0x70, 0x44, 0x2F, 0x84, 0x80, 0x45, 0x44, 0x51, 0x70, 0x46, 0x0F, 0x66, 0x80, -0x47, 0x24, 0x33, 0x70, 0x47, 0xF8, 0x83, 0x00, 0x49, 0x04, 0x15, 0x70, 0x49, 0xD8, 0x65, 0x00, -0x4A, 0xE3, 0xF7, 0x70, 0x4B, 0xB8, 0x47, 0x00, 0x4C, 0xCD, 0x13, 0xF0, 0x4D, 0x98, 0x29, 0x00, -0x4E, 0xAC, 0xF5, 0xF0, 0x4F, 0x78, 0x0B, 0x00, 0x50, 0x8C, 0xD7, 0xF0, 0x51, 0x61, 0x27, 0x80, -0x52, 0x6C, 0xB9, 0xF0, 0x53, 0x41, 0x09, 0x80, 0x54, 0x4C, 0x9B, 0xF0, 0x55, 0x20, 0xEB, 0x80, -0x56, 0x2C, 0x7D, 0xF0, 0x57, 0x00, 0xCD, 0x80, 0x58, 0x15, 0x9A, 0x70, 0x58, 0xE0, 0xAF, 0x80, -0x59, 0xF5, 0x7C, 0x70, 0x5A, 0xC0, 0x91, 0x80, 0x5B, 0xD5, 0x5E, 0x70, 0x5C, 0xA9, 0xAE, 0x00, -0x5D, 0xB5, 0x40, 0x70, 0x5E, 0x89, 0x90, 0x00, 0x5F, 0x95, 0x22, 0x70, 0x60, 0x69, 0x72, 0x00, -0x61, 0x7E, 0x3E, 0xF0, 0x62, 0x49, 0x54, 0x00, 0x63, 0x5E, 0x20, 0xF0, 0x64, 0x29, 0x36, 0x00, -0x65, 0x3E, 0x02, 0xF0, 0x66, 0x12, 0x52, 0x80, 0x67, 0x1D, 0xE4, 0xF0, 0x67, 0xF2, 0x34, 0x80, -0x68, 0xFD, 0xC6, 0xF0, 0x69, 0xD2, 0x16, 0x80, 0x6A, 0xDD, 0xA8, 0xF0, 0x6B, 0xB1, 0xF8, 0x80, -0x6C, 0xC6, 0xC5, 0x70, 0x6D, 0x91, 0xDA, 0x80, 0x6E, 0xA6, 0xA7, 0x70, 0x6F, 0x71, 0xBC, 0x80, -0x70, 0x86, 0x89, 0x70, 0x71, 0x5A, 0xD9, 0x00, 0x72, 0x66, 0x6B, 0x70, 0x73, 0x3A, 0xBB, 0x00, -0x74, 0x46, 0x4D, 0x70, 0x75, 0x1A, 0x9D, 0x00, 0x76, 0x2F, 0x69, 0xF0, 0x76, 0xFA, 0x7F, 0x00, -0x78, 0x0F, 0x4B, 0xF0, 0x78, 0xDA, 0x61, 0x00, 0x79, 0xEF, 0x2D, 0xF0, 0x7A, 0xBA, 0x43, 0x00, -0x7B, 0xCF, 0x0F, 0xF0, 0x7C, 0xA3, 0x5F, 0x80, 0x7D, 0xAE, 0xF1, 0xF0, 0x7E, 0x83, 0x41, 0x80, -0x7F, 0x8E, 0xD3, 0xF0, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0xFF, 0xFF, 0xA3, 0x0C, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, -0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, -0xB9, 0xB0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, -0x43, 0x44, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, - -/* America/Miquelon */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x12, 0x91, 0xB6, 0x38, 0xA8, -0x13, 0x6E, 0x63, 0xC0, 0x20, 0x75, 0xE4, 0xD0, 0x21, 0x81, 0x77, 0x40, 0x22, 0x55, 0xC6, 0xD0, -0x23, 0x6A, 0x93, 0xC0, 0x24, 0x35, 0xA8, 0xD0, 0x25, 0x4A, 0x75, 0xC0, 0x26, 0x15, 0x8A, 0xD0, -0x27, 0x2A, 0x57, 0xC0, 0x27, 0xFE, 0xA7, 0x50, 0x29, 0x0A, 0x39, 0xC0, 0x29, 0xDE, 0x89, 0x50, -0x2A, 0xEA, 0x1B, 0xC0, 0x2B, 0xBE, 0x6B, 0x50, 0x2C, 0xD3, 0x38, 0x40, 0x2D, 0x9E, 0x4D, 0x50, -0x2E, 0xB3, 0x1A, 0x40, 0x2F, 0x7E, 0x2F, 0x50, 0x30, 0x92, 0xFC, 0x40, 0x31, 0x67, 0x4B, 0xD0, -0x32, 0x72, 0xDE, 0x40, 0x33, 0x47, 0x2D, 0xD0, 0x34, 0x52, 0xC0, 0x40, 0x35, 0x27, 0x0F, 0xD0, -0x36, 0x32, 0xA2, 0x40, 0x37, 0x06, 0xF1, 0xD0, 0x38, 0x1B, 0xBE, 0xC0, 0x38, 0xE6, 0xD3, 0xD0, -0x39, 0xFB, 0xA0, 0xC0, 0x3A, 0xC6, 0xB5, 0xD0, 0x3B, 0xDB, 0x82, 0xC0, 0x3C, 0xAF, 0xD2, 0x50, -0x3D, 0xBB, 0x64, 0xC0, 0x3E, 0x8F, 0xB4, 0x50, 0x3F, 0x9B, 0x46, 0xC0, 0x40, 0x6F, 0x96, 0x50, -0x41, 0x84, 0x63, 0x40, 0x42, 0x4F, 0x78, 0x50, 0x43, 0x64, 0x45, 0x40, 0x44, 0x2F, 0x5A, 0x50, -0x45, 0x44, 0x27, 0x40, 0x45, 0xF3, 0x8C, 0xD0, 0x47, 0x2D, 0x43, 0xC0, 0x47, 0xD3, 0x6E, 0xD0, -0x49, 0x0D, 0x25, 0xC0, 0x49, 0xB3, 0x50, 0xD0, 0x4A, 0xED, 0x07, 0xC0, 0x4B, 0x9C, 0x6D, 0x50, -0x4C, 0xD6, 0x24, 0x40, 0x4D, 0x7C, 0x4F, 0x50, 0x4E, 0xB6, 0x06, 0x40, 0x4F, 0x5C, 0x31, 0x50, -0x50, 0x95, 0xE8, 0x40, 0x51, 0x3C, 0x13, 0x50, 0x52, 0x75, 0xCA, 0x40, 0x53, 0x1B, 0xF5, 0x50, -0x54, 0x55, 0xAC, 0x40, 0x54, 0xFB, 0xD7, 0x50, 0x56, 0x35, 0x8E, 0x40, 0x56, 0xE4, 0xF3, 0xD0, -0x58, 0x1E, 0xAA, 0xC0, 0x58, 0xC4, 0xD5, 0xD0, 0x59, 0xFE, 0x8C, 0xC0, 0x5A, 0xA4, 0xB7, 0xD0, -0x5B, 0xDE, 0x6E, 0xC0, 0x5C, 0x84, 0x99, 0xD0, 0x5D, 0xBE, 0x50, 0xC0, 0x5E, 0x64, 0x7B, 0xD0, -0x5F, 0x9E, 0x32, 0xC0, 0x60, 0x4D, 0x98, 0x50, 0x61, 0x87, 0x4F, 0x40, 0x62, 0x2D, 0x7A, 0x50, -0x63, 0x67, 0x31, 0x40, 0x64, 0x0D, 0x5C, 0x50, 0x65, 0x47, 0x13, 0x40, 0x65, 0xED, 0x3E, 0x50, -0x67, 0x26, 0xF5, 0x40, 0x67, 0xCD, 0x20, 0x50, 0x69, 0x06, 0xD7, 0x40, 0x69, 0xAD, 0x02, 0x50, -0x6A, 0xE6, 0xB9, 0x40, 0x6B, 0x96, 0x1E, 0xD0, 0x6C, 0xCF, 0xD5, 0xC0, 0x6D, 0x76, 0x00, 0xD0, -0x6E, 0xAF, 0xB7, 0xC0, 0x6F, 0x55, 0xE2, 0xD0, 0x70, 0x8F, 0x99, 0xC0, 0x71, 0x35, 0xC4, 0xD0, -0x72, 0x6F, 0x7B, 0xC0, 0x73, 0x15, 0xA6, 0xD0, 0x74, 0x4F, 0x5D, 0xC0, 0x74, 0xFE, 0xC3, 0x50, -0x76, 0x38, 0x7A, 0x40, 0x76, 0xDE, 0xA5, 0x50, 0x78, 0x18, 0x5C, 0x40, 0x78, 0xBE, 0x87, 0x50, -0x79, 0xF8, 0x3E, 0x40, 0x7A, 0x9E, 0x69, 0x50, 0x7B, 0xD8, 0x20, 0x40, 0x7C, 0x7E, 0x4B, 0x50, -0x7D, 0xB8, 0x02, 0x40, 0x7E, 0x5E, 0x2D, 0x50, 0x7F, 0x97, 0xE4, 0x40, 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, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0xFF, 0xFF, 0xCB, 0x58, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, -0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x0D, 0x4C, 0x4D, 0x54, 0x00, -0x41, 0x53, 0x54, 0x00, 0x50, 0x4D, 0x53, 0x54, 0x00, 0x50, 0x4D, 0x44, 0x54, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Moncton */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x80, 0xF1, 0xB6, 0x50, -0x9E, 0xB8, 0x85, 0x60, 0x9F, 0xC0, 0x23, 0x50, 0xBB, 0x3C, 0x38, 0xD0, 0xBB, 0xB4, 0x23, 0x40, -0xBD, 0x1C, 0x1A, 0xD0, 0xBD, 0x94, 0x05, 0x40, 0xBE, 0xFB, 0xFC, 0xD0, 0xBF, 0x73, 0xE7, 0x40, -0xC0, 0xDB, 0xDE, 0xD0, 0xC1, 0x53, 0xC9, 0x40, 0xC2, 0xBB, 0xC0, 0xD0, 0xC3, 0x33, 0xAB, 0x40, -0xC4, 0x9B, 0xA2, 0xD0, 0xC5, 0x13, 0x8D, 0x40, 0xC6, 0x70, 0xF8, 0xD0, 0xC7, 0x0D, 0xCD, 0x40, -0xC8, 0x48, 0xF1, 0xD0, 0xC8, 0xED, 0xAF, 0x40, 0xCA, 0x16, 0x5E, 0xD0, 0xCA, 0xD6, 0xCB, 0xC0, -0xCB, 0x88, 0xE2, 0x60, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xED, 0xD0, 0xD3, 0x75, 0xD6, 0xE0, -0xD4, 0x40, 0xCF, 0xD0, 0xD5, 0x55, 0xB8, 0xE0, 0xD6, 0x20, 0xB1, 0xD0, 0xD7, 0x35, 0x9A, 0xE0, -0xD8, 0x00, 0x93, 0xD0, 0xD9, 0x15, 0x7C, 0xE0, 0xD9, 0xE0, 0x75, 0xD0, 0xDA, 0xFE, 0x99, 0x60, -0xDB, 0xC0, 0x57, 0xD0, 0xDC, 0xDE, 0x7B, 0x60, 0xDD, 0xA9, 0x74, 0x50, 0xDE, 0xBE, 0x5D, 0x60, -0xDF, 0x89, 0x56, 0x50, 0xE0, 0x9E, 0x3F, 0x60, 0xE1, 0x69, 0x38, 0x50, 0xE2, 0x7E, 0x21, 0x60, -0xE3, 0x49, 0x1A, 0x50, 0xE4, 0x5E, 0x03, 0x60, 0xE5, 0x28, 0xFC, 0x50, 0xE6, 0x47, 0x1F, 0xE0, -0xE7, 0x12, 0x18, 0xD0, 0xE8, 0x27, 0x01, 0xE0, 0xE9, 0x16, 0xE4, 0xD0, 0xEA, 0x06, 0xE3, 0xE0, -0xEA, 0xF6, 0xC6, 0xD0, 0xEB, 0xE6, 0xC5, 0xE0, 0xEC, 0xD6, 0xA8, 0xD0, 0xED, 0xC6, 0xA7, 0xE0, -0xEE, 0xBF, 0xC5, 0x50, 0xEF, 0xAF, 0xC4, 0x60, 0xF0, 0x9F, 0xA7, 0x50, 0xF1, 0x8F, 0xA6, 0x60, -0xF2, 0x7F, 0x89, 0x50, 0xF3, 0x6F, 0x88, 0x60, 0xF4, 0x5F, 0x6B, 0x50, 0xF5, 0x4F, 0x6A, 0x60, -0xF6, 0x3F, 0x4D, 0x50, 0xF7, 0x2F, 0x4C, 0x60, 0xF8, 0x28, 0x69, 0xD0, 0xF9, 0x0F, 0x2E, 0x60, -0xFA, 0x08, 0x4B, 0xD0, 0xFA, 0xF8, 0x4A, 0xE0, 0xFB, 0xE8, 0x2D, 0xD0, 0xFC, 0xD8, 0x2C, 0xE0, -0xFD, 0xC8, 0x0F, 0xD0, 0xFE, 0xB8, 0x0E, 0xE0, 0xFF, 0xA7, 0xF1, 0xD0, 0x00, 0x97, 0xF0, 0xE0, -0x01, 0x87, 0xD3, 0xD0, 0x02, 0x77, 0xD2, 0xE0, 0x03, 0x70, 0xF0, 0x50, 0x04, 0x60, 0xEF, 0x60, -0x05, 0x50, 0xD2, 0x50, 0x08, 0x20, 0xB3, 0x60, 0x09, 0x10, 0x96, 0x50, 0x0A, 0x00, 0x95, 0x60, -0x0A, 0xF0, 0x78, 0x50, 0x0B, 0xE0, 0x77, 0x60, 0x0C, 0xD9, 0x94, 0xD0, 0x0D, 0xC0, 0x59, 0x60, -0x0E, 0xB9, 0x76, 0xD0, 0x0F, 0xA9, 0x75, 0xE0, 0x10, 0x99, 0x58, 0xD0, 0x11, 0x89, 0x57, 0xE0, -0x12, 0x79, 0x3A, 0xD0, 0x13, 0x69, 0x39, 0xE0, 0x14, 0x59, 0x1C, 0xD0, 0x15, 0x49, 0x1B, 0xE0, -0x16, 0x38, 0xFE, 0xD0, 0x17, 0x28, 0xFD, 0xE0, 0x18, 0x22, 0x1B, 0x50, 0x19, 0x08, 0xDF, 0xE0, -0x1A, 0x01, 0xFD, 0x50, 0x1A, 0xF1, 0xFC, 0x60, 0x1B, 0xE1, 0xDF, 0x50, 0x1C, 0xD1, 0xDE, 0x60, -0x1D, 0xC1, 0xC1, 0x50, 0x1E, 0xB1, 0xC0, 0x60, 0x1F, 0xA1, 0xA3, 0x50, 0x20, 0x75, 0xF2, 0xE0, -0x21, 0x81, 0x85, 0x50, 0x22, 0x55, 0xD4, 0xE0, 0x23, 0x6A, 0xA1, 0xD0, 0x24, 0x35, 0xB6, 0xE0, -0x25, 0x4A, 0x83, 0xD0, 0x26, 0x15, 0x98, 0xE0, 0x27, 0x2A, 0x65, 0xD0, 0x27, 0xFE, 0xB5, 0x60, -0x29, 0x0A, 0x47, 0xD0, 0x29, 0xDE, 0x97, 0x60, 0x2A, 0xEA, 0x29, 0xD0, 0x2B, 0xBE, 0x5D, 0x7C, -0x2C, 0xD3, 0x2A, 0x6C, 0x2D, 0x9E, 0x3F, 0x7C, 0x2E, 0xB3, 0x0C, 0x6C, 0x2F, 0x7E, 0x21, 0x7C, -0x30, 0x92, 0xEE, 0x6C, 0x31, 0x67, 0x3D, 0xFC, 0x32, 0x72, 0xD0, 0x6C, 0x33, 0x47, 0x1F, 0xFC, -0x34, 0x52, 0xB2, 0x6C, 0x35, 0x27, 0x01, 0xFC, 0x36, 0x32, 0x94, 0x6C, 0x37, 0x06, 0xE3, 0xFC, -0x38, 0x1B, 0xB0, 0xEC, 0x38, 0xE6, 0xC5, 0xFC, 0x39, 0xFB, 0x92, 0xEC, 0x3A, 0xC6, 0xA7, 0xFC, -0x3B, 0xDB, 0x74, 0xEC, 0x3C, 0xAF, 0xC4, 0x7C, 0x3D, 0xBB, 0x56, 0xEC, 0x3E, 0x8F, 0xA6, 0x7C, -0x3F, 0x9B, 0x38, 0xEC, 0x40, 0x6F, 0x88, 0x7C, 0x41, 0x84, 0x55, 0x6C, 0x42, 0x4F, 0x6A, 0x7C, -0x43, 0x64, 0x37, 0x6C, 0x44, 0x2F, 0x4C, 0x7C, 0x45, 0x44, 0x19, 0x6C, 0x45, 0xF3, 0x9A, 0xE0, -0x47, 0x2D, 0x51, 0xD0, 0x47, 0xD3, 0x7C, 0xE0, 0x49, 0x0D, 0x33, 0xD0, 0x49, 0xB3, 0x5E, 0xE0, -0x4A, 0xED, 0x15, 0xD0, 0x4B, 0x9C, 0x7B, 0x60, 0x4C, 0xD6, 0x32, 0x50, 0x4D, 0x7C, 0x5D, 0x60, -0x4E, 0xB6, 0x14, 0x50, 0x4F, 0x5C, 0x3F, 0x60, 0x50, 0x95, 0xF6, 0x50, 0x51, 0x3C, 0x21, 0x60, -0x52, 0x75, 0xD8, 0x50, 0x53, 0x1C, 0x03, 0x60, 0x54, 0x55, 0xBA, 0x50, 0x54, 0xFB, 0xE5, 0x60, -0x56, 0x35, 0x9C, 0x50, 0x56, 0xE5, 0x01, 0xE0, 0x58, 0x1E, 0xB8, 0xD0, 0x58, 0xC4, 0xE3, 0xE0, -0x59, 0xFE, 0x9A, 0xD0, 0x5A, 0xA4, 0xC5, 0xE0, 0x5B, 0xDE, 0x7C, 0xD0, 0x5C, 0x84, 0xA7, 0xE0, -0x5D, 0xBE, 0x5E, 0xD0, 0x5E, 0x64, 0x89, 0xE0, 0x5F, 0x9E, 0x40, 0xD0, 0x60, 0x4D, 0xA6, 0x60, -0x61, 0x87, 0x5D, 0x50, 0x62, 0x2D, 0x88, 0x60, 0x63, 0x67, 0x3F, 0x50, 0x64, 0x0D, 0x6A, 0x60, -0x65, 0x47, 0x21, 0x50, 0x65, 0xED, 0x4C, 0x60, 0x67, 0x27, 0x03, 0x50, 0x67, 0xCD, 0x2E, 0x60, -0x69, 0x06, 0xE5, 0x50, 0x69, 0xAD, 0x10, 0x60, 0x6A, 0xE6, 0xC7, 0x50, 0x6B, 0x96, 0x2C, 0xE0, -0x6C, 0xCF, 0xE3, 0xD0, 0x6D, 0x76, 0x0E, 0xE0, 0x6E, 0xAF, 0xC5, 0xD0, 0x6F, 0x55, 0xF0, 0xE0, -0x70, 0x8F, 0xA7, 0xD0, 0x71, 0x35, 0xD2, 0xE0, 0x72, 0x6F, 0x89, 0xD0, 0x73, 0x15, 0xB4, 0xE0, -0x74, 0x4F, 0x6B, 0xD0, 0x74, 0xFE, 0xD1, 0x60, 0x76, 0x38, 0x88, 0x50, 0x76, 0xDE, 0xB3, 0x60, -0x78, 0x18, 0x6A, 0x50, 0x78, 0xBE, 0x95, 0x60, 0x79, 0xF8, 0x4C, 0x50, 0x7A, 0x9E, 0x77, 0x60, -0x7B, 0xD8, 0x2E, 0x50, 0x7C, 0x7E, 0x59, 0x60, 0x7D, 0xB8, 0x10, 0x50, 0x7E, 0x5E, 0x3B, 0x60, -0x7F, 0x97, 0xF2, 0x50, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, -0xC7, 0xC0, 0x00, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, -0x45, 0x53, 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x57, 0x54, 0x00, -0x41, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, - -/* America/Monterrey */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xA5, 0xB6, 0xDA, 0x60, -0x22, 0x55, 0xF1, 0x00, 0x23, 0x6A, 0xBD, 0xF0, 0x31, 0x67, 0x76, 0x00, 0x32, 0x73, 0x08, 0x70, -0x33, 0x47, 0x58, 0x00, 0x34, 0x52, 0xEA, 0x70, 0x35, 0x27, 0x3A, 0x00, 0x36, 0x32, 0xCC, 0x70, -0x37, 0x07, 0x1C, 0x00, 0x38, 0x1B, 0xE8, 0xF0, 0x38, 0xE6, 0xFE, 0x00, 0x39, 0xFB, 0xCA, 0xF0, -0x3A, 0xF5, 0x04, 0x80, 0x3B, 0xB6, 0xC2, 0xF0, 0x3C, 0xAF, 0xFC, 0x80, 0x3D, 0xBB, 0x8E, 0xF0, -0x3E, 0x8F, 0xDE, 0x80, 0x3F, 0x9B, 0x70, 0xF0, 0x40, 0x6F, 0xC0, 0x80, 0x41, 0x84, 0x8D, 0x70, -0x42, 0x4F, 0xA2, 0x80, 0x43, 0x64, 0x6F, 0x70, 0x44, 0x2F, 0x84, 0x80, 0x45, 0x44, 0x51, 0x70, -0x46, 0x0F, 0x66, 0x80, 0x47, 0x24, 0x33, 0x70, 0x47, 0xF8, 0x83, 0x00, 0x49, 0x04, 0x15, 0x70, -0x49, 0xD8, 0x65, 0x00, 0x4A, 0xE3, 0xF7, 0x70, 0x4B, 0xB8, 0x47, 0x00, 0x4C, 0xCD, 0x13, 0xF0, -0x4D, 0x98, 0x29, 0x00, 0x4E, 0xAC, 0xF5, 0xF0, 0x4F, 0x78, 0x0B, 0x00, 0x50, 0x8C, 0xD7, 0xF0, -0x51, 0x61, 0x27, 0x80, 0x52, 0x6C, 0xB9, 0xF0, 0x53, 0x41, 0x09, 0x80, 0x54, 0x4C, 0x9B, 0xF0, -0x55, 0x20, 0xEB, 0x80, 0x56, 0x2C, 0x7D, 0xF0, 0x57, 0x00, 0xCD, 0x80, 0x58, 0x15, 0x9A, 0x70, -0x58, 0xE0, 0xAF, 0x80, 0x59, 0xF5, 0x7C, 0x70, 0x5A, 0xC0, 0x91, 0x80, 0x5B, 0xD5, 0x5E, 0x70, -0x5C, 0xA9, 0xAE, 0x00, 0x5D, 0xB5, 0x40, 0x70, 0x5E, 0x89, 0x90, 0x00, 0x5F, 0x95, 0x22, 0x70, -0x60, 0x69, 0x72, 0x00, 0x61, 0x7E, 0x3E, 0xF0, 0x62, 0x49, 0x54, 0x00, 0x63, 0x5E, 0x20, 0xF0, -0x64, 0x29, 0x36, 0x00, 0x65, 0x3E, 0x02, 0xF0, 0x66, 0x12, 0x52, 0x80, 0x67, 0x1D, 0xE4, 0xF0, -0x67, 0xF2, 0x34, 0x80, 0x68, 0xFD, 0xC6, 0xF0, 0x69, 0xD2, 0x16, 0x80, 0x6A, 0xDD, 0xA8, 0xF0, -0x6B, 0xB1, 0xF8, 0x80, 0x6C, 0xC6, 0xC5, 0x70, 0x6D, 0x91, 0xDA, 0x80, 0x6E, 0xA6, 0xA7, 0x70, -0x6F, 0x71, 0xBC, 0x80, 0x70, 0x86, 0x89, 0x70, 0x71, 0x5A, 0xD9, 0x00, 0x72, 0x66, 0x6B, 0x70, -0x73, 0x3A, 0xBB, 0x00, 0x74, 0x46, 0x4D, 0x70, 0x75, 0x1A, 0x9D, 0x00, 0x76, 0x2F, 0x69, 0xF0, -0x76, 0xFA, 0x7F, 0x00, 0x78, 0x0F, 0x4B, 0xF0, 0x78, 0xDA, 0x61, 0x00, 0x79, 0xEF, 0x2D, 0xF0, -0x7A, 0xBA, 0x43, 0x00, 0x7B, 0xCF, 0x0F, 0xF0, 0x7C, 0xA3, 0x5F, 0x80, 0x7D, 0xAE, 0xF1, 0xF0, -0x7E, 0x83, 0x41, 0x80, 0x7F, 0x8E, 0xD3, 0xF0, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, -0xFF, 0xA1, 0xF4, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, -0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, - -/* America/Montevideo */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0xA2, 0x92, 0x87, 0xAC, -0xA9, 0x01, 0x25, 0xB8, 0xA9, 0xF1, 0x0F, 0xB0, 0xAA, 0xE2, 0x59, 0x38, 0xAB, 0xD2, 0x43, 0x30, -0xAC, 0xC3, 0x8C, 0xB8, 0xAD, 0xB3, 0x76, 0xB0, 0xBB, 0xF4, 0xB5, 0xB8, 0xBC, 0xBF, 0xB5, 0xB0, -0xBD, 0xD4, 0x97, 0xB8, 0xBE, 0x9F, 0x97, 0xB0, 0xBF, 0xB4, 0x79, 0xB8, 0xC0, 0x7F, 0x79, 0xB0, -0xC1, 0x9D, 0x96, 0x38, 0xC2, 0x5F, 0x5B, 0xB0, 0xC3, 0x7D, 0x78, 0x38, 0xC4, 0x3F, 0x3D, 0xB0, -0xC5, 0x5D, 0x5A, 0x38, 0xC6, 0x1F, 0x1F, 0xB0, 0xC7, 0x3D, 0x3C, 0x38, 0xC8, 0x08, 0x3C, 0x30, -0xC9, 0x1D, 0x1E, 0x38, 0xC9, 0xE8, 0x1E, 0x30, 0xCA, 0x8B, 0x9F, 0x38, 0xCB, 0x55, 0x4D, 0xB0, -0xCD, 0x1E, 0xCD, 0x38, 0xCD, 0x95, 0x5F, 0x20, 0xEC, 0x0B, 0x85, 0xB0, 0xEC, 0xF2, 0x2E, 0x20, -0xED, 0x45, 0x4A, 0xB0, 0xED, 0x85, 0xD6, 0x20, 0xF7, 0x13, 0x72, 0xB0, 0xF7, 0xFA, 0x1B, 0x20, -0xF8, 0xF3, 0x54, 0xB0, 0xFA, 0x09, 0x73, 0x20, 0xFA, 0xD3, 0x36, 0xB0, 0xFB, 0xEA, 0xA6, 0xA0, -0xFC, 0xFE, 0x3E, 0x30, 0xFD, 0xF7, 0x62, 0xA8, 0xFE, 0xDF, 0x71, 0xB0, 0xFF, 0xD8, 0x96, 0x28, -0x00, 0xC0, 0xA5, 0x30, 0x01, 0xB9, 0xC9, 0xA8, 0x04, 0x58, 0xDC, 0x30, 0x04, 0xED, 0xC7, 0xA0, -0x07, 0xDF, 0xEF, 0xB0, 0x09, 0x5A, 0x47, 0x28, 0x0C, 0xB1, 0xDD, 0xA0, 0x0E, 0xE7, 0x7F, 0x30, -0x0F, 0x83, 0x02, 0x20, 0x12, 0x55, 0x86, 0x30, 0x13, 0x6E, 0x47, 0xA0, 0x21, 0xC3, 0x54, 0x30, -0x22, 0x3B, 0x3E, 0xA0, 0x23, 0xA1, 0xE4, 0xB0, 0x24, 0x19, 0xCF, 0x20, 0x25, 0x4A, 0x67, 0xB0, -0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30, 0x27, 0xD0, 0x58, 0xA0, 0x29, 0x0A, 0x2B, 0xB0, -0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30, 0x2B, 0x90, 0x1C, 0xA0, 0x41, 0x4C, 0xF6, 0x30, -0x42, 0x46, 0x2F, 0xC0, 0x43, 0x48, 0xA3, 0xD0, 0x44, 0x13, 0x9C, 0xC0, 0x45, 0x1F, 0x4B, 0x50, -0x45, 0xF3, 0x7E, 0xC0, 0x47, 0x08, 0x67, 0xD0, 0x47, 0xD3, 0x60, 0xC0, 0x48, 0xE8, 0x49, 0xD0, -0x49, 0xB3, 0x42, 0xC0, 0x4A, 0xC8, 0x2B, 0xD0, 0x4B, 0x9C, 0x5F, 0x40, 0x4C, 0xA8, 0x0D, 0xD0, -0x4D, 0x7C, 0x41, 0x40, 0x4E, 0x87, 0xEF, 0xD0, 0x4F, 0x5C, 0x23, 0x40, 0x50, 0x71, 0x0C, 0x50, -0x51, 0x3C, 0x05, 0x40, 0x52, 0x50, 0xEE, 0x50, 0x53, 0x1B, 0xE7, 0x40, 0x54, 0x30, 0xD0, 0x50, -0x54, 0xFB, 0xC9, 0x40, 0x56, 0x10, 0xB2, 0x50, 0x56, 0xE4, 0xE5, 0xC0, 0x57, 0xF0, 0x94, 0x50, -0x58, 0xC4, 0xC7, 0xC0, 0x59, 0xD0, 0x76, 0x50, 0x5A, 0xA4, 0xA9, 0xC0, 0x5B, 0xB9, 0x92, 0xD0, -0x5C, 0x84, 0x8B, 0xC0, 0x5D, 0x99, 0x74, 0xD0, 0x5E, 0x64, 0x6D, 0xC0, 0x5F, 0x79, 0x56, 0xD0, -0x60, 0x4D, 0x8A, 0x40, 0x61, 0x59, 0x38, 0xD0, 0x62, 0x2D, 0x6C, 0x40, 0x63, 0x39, 0x1A, 0xD0, -0x64, 0x0D, 0x4E, 0x40, 0x65, 0x18, 0xFC, 0xD0, 0x65, 0xED, 0x30, 0x40, 0x67, 0x02, 0x19, 0x50, -0x67, 0xCD, 0x12, 0x40, 0x68, 0xE1, 0xFB, 0x50, 0x69, 0xAC, 0xF4, 0x40, 0x6A, 0xC1, 0xDD, 0x50, -0x6B, 0x96, 0x10, 0xC0, 0x6C, 0xA1, 0xBF, 0x50, 0x6D, 0x75, 0xF2, 0xC0, 0x6E, 0x81, 0xA1, 0x50, -0x6F, 0x55, 0xD4, 0xC0, 0x70, 0x6A, 0xBD, 0xD0, 0x71, 0x35, 0xB6, 0xC0, 0x72, 0x4A, 0x9F, 0xD0, -0x73, 0x15, 0x98, 0xC0, 0x74, 0x2A, 0x81, 0xD0, 0x74, 0xFE, 0xB5, 0x40, 0x76, 0x0A, 0x63, 0xD0, -0x76, 0xDE, 0x97, 0x40, 0x77, 0xEA, 0x45, 0xD0, 0x78, 0xBE, 0x79, 0x40, 0x79, 0xCA, 0x27, 0xD0, -0x7A, 0x9E, 0x5B, 0x40, 0x7B, 0xB3, 0x44, 0x50, 0x7C, 0x7E, 0x3D, 0x40, 0x7D, 0x93, 0x26, 0x50, -0x7E, 0x5E, 0x1F, 0x40, 0x7F, 0x73, 0x08, 0x50, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x04, 0x06, -0x04, 0x06, 0x04, 0x05, 0x04, 0x06, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0xFF, 0xFF, 0xCB, 0x54, 0x00, -0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xCE, 0xC8, 0x00, 0x0A, 0xFF, 0xFF, 0xCE, -0xC8, 0x00, 0x0A, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x0A, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x0E, 0xFF, -0xFF, 0xDC, 0xD8, 0x01, 0x04, 0x4D, 0x4D, 0x54, 0x00, 0x55, 0x59, 0x48, 0x53, 0x54, 0x00, 0x55, -0x59, 0x54, 0x00, 0x55, 0x59, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Montreal */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xE8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9C, 0xBD, 0x01, 0xF0, -0x9C, 0xE4, 0x64, 0xC0, 0x9E, 0xB8, 0x93, 0x70, 0x9F, 0xC0, 0x31, 0x60, 0xA0, 0x87, 0x58, 0xF8, -0xA1, 0x99, 0x82, 0xE8, 0xA2, 0x94, 0x0D, 0xF8, 0xA3, 0x5F, 0x06, 0xE8, 0xA4, 0x73, 0xE8, 0xF0, -0xA5, 0x3E, 0xE8, 0xE8, 0xA6, 0x53, 0xCA, 0xF0, 0xA7, 0x1E, 0xCA, 0xE8, 0xAA, 0x2D, 0xEC, 0xF0, -0xAA, 0xDE, 0x8E, 0xE8, 0xAB, 0xFC, 0xAB, 0x70, 0xAC, 0xBE, 0x70, 0xE8, 0xAD, 0xDC, 0x8D, 0x70, -0xAE, 0x9E, 0x52, 0xE8, 0xAF, 0xBC, 0x53, 0x50, 0xB0, 0x7E, 0x11, 0xC0, 0xB1, 0x9C, 0x35, 0x50, -0xB2, 0x67, 0x2E, 0x40, 0xB3, 0x7C, 0x17, 0x50, 0xB4, 0x47, 0x10, 0x40, 0xB5, 0x5B, 0xF9, 0x50, -0xB6, 0x26, 0xF2, 0x40, 0xB7, 0x3B, 0xDB, 0x50, 0xB8, 0x06, 0xD4, 0x40, 0xB9, 0x24, 0xF7, 0xD0, -0xB9, 0xE6, 0xB6, 0x40, 0xBB, 0x04, 0xD9, 0xD0, 0xBB, 0xCF, 0xD2, 0xC0, 0xBC, 0xE4, 0xBB, 0xD0, -0xBD, 0xAF, 0xB4, 0xC0, 0xBE, 0xC4, 0x9D, 0xD0, 0xBF, 0x8F, 0x96, 0xC0, 0xC0, 0xA4, 0x7F, 0xD0, -0xC1, 0x6F, 0x78, 0xC0, 0xC2, 0x84, 0x61, 0xD0, 0xC3, 0x4F, 0x5A, 0xC0, 0xC4, 0x64, 0x43, 0xD0, -0xC5, 0x2F, 0x3C, 0xC0, 0xC6, 0x4D, 0x60, 0x50, 0xC7, 0x0F, 0x1E, 0xC0, 0xC8, 0x2D, 0x42, 0x50, -0xCB, 0x88, 0xF0, 0x70, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xFB, 0xE0, 0xD3, 0x75, 0xE4, 0xF0, -0xD4, 0x40, 0xDD, 0xE0, 0xD5, 0x55, 0xC6, 0xF0, 0xD6, 0x20, 0xBF, 0xE0, 0xD7, 0x35, 0xA8, 0xF0, -0xD8, 0x00, 0xA1, 0xE0, 0xD9, 0x15, 0x8A, 0xF0, 0xDA, 0x0E, 0xA8, 0x60, 0xDA, 0xFE, 0xA7, 0x70, -0xDB, 0xEE, 0x8A, 0x60, 0xDC, 0xDE, 0x89, 0x70, 0xDD, 0xA9, 0x82, 0x60, 0xDE, 0xBE, 0x6B, 0x70, -0xDF, 0x89, 0x64, 0x60, 0xE0, 0x9E, 0x4D, 0x70, 0xE1, 0x69, 0x46, 0x60, 0xE2, 0x7E, 0x2F, 0x70, -0xE3, 0x49, 0x28, 0x60, 0xE4, 0x5E, 0x11, 0x70, 0xE5, 0x29, 0x0A, 0x60, 0xE6, 0x47, 0x2D, 0xF0, -0xE7, 0x12, 0x26, 0xE0, 0xE8, 0x27, 0x0F, 0xF0, 0xE9, 0x16, 0xF2, 0xE0, 0xEA, 0x06, 0xF1, 0xF0, -0xEA, 0xF6, 0xD4, 0xE0, 0xEB, 0xE6, 0xD3, 0xF0, 0xEC, 0xD6, 0xB6, 0xE0, 0xED, 0xC6, 0xB5, 0xF0, -0xEE, 0xBF, 0xD3, 0x60, 0xEF, 0xAF, 0xD2, 0x70, 0xF0, 0x9F, 0xB5, 0x60, 0xF1, 0x8F, 0xB4, 0x70, -0xF2, 0x7F, 0x97, 0x60, 0xF3, 0x6F, 0x96, 0x70, 0xF4, 0x5F, 0x79, 0x60, 0xF5, 0x4F, 0x78, 0x70, -0xF6, 0x3F, 0x5B, 0x60, 0xF7, 0x2F, 0x5A, 0x70, 0xF8, 0x28, 0x77, 0xE0, 0xF9, 0x0F, 0x3C, 0x70, -0xFA, 0x08, 0x59, 0xE0, 0xFA, 0xF8, 0x58, 0xF0, 0xFB, 0xE8, 0x3B, 0xE0, 0xFC, 0xD8, 0x3A, 0xF0, -0xFD, 0xC8, 0x1D, 0xE0, 0xFE, 0xB8, 0x1C, 0xF0, 0xFF, 0xA7, 0xFF, 0xE0, 0x00, 0x97, 0xFE, 0xF0, -0x01, 0x87, 0xE1, 0xE0, 0x02, 0x77, 0xE0, 0xF0, 0x03, 0x70, 0xFE, 0x60, 0x04, 0x60, 0xFD, 0x70, -0x05, 0x50, 0xE0, 0x60, 0x06, 0x40, 0xDF, 0x70, 0x07, 0x30, 0xC2, 0x60, 0x08, 0x20, 0xC1, 0x70, -0x09, 0x10, 0xA4, 0x60, 0x0A, 0x00, 0xA3, 0x70, 0x0A, 0xF0, 0x86, 0x60, 0x0B, 0xE0, 0x85, 0x70, -0x0C, 0xD9, 0xA2, 0xE0, 0x0D, 0xC0, 0x67, 0x70, 0x0E, 0xB9, 0x84, 0xE0, 0x0F, 0xA9, 0x83, 0xF0, -0x10, 0x99, 0x66, 0xE0, 0x11, 0x89, 0x65, 0xF0, 0x12, 0x79, 0x48, 0xE0, 0x13, 0x69, 0x47, 0xF0, -0x14, 0x59, 0x2A, 0xE0, 0x15, 0x49, 0x29, 0xF0, 0x16, 0x39, 0x0C, 0xE0, 0x17, 0x29, 0x0B, 0xF0, -0x18, 0x22, 0x29, 0x60, 0x19, 0x08, 0xED, 0xF0, 0x1A, 0x02, 0x0B, 0x60, 0x1A, 0xF2, 0x0A, 0x70, -0x1B, 0xE1, 0xED, 0x60, 0x1C, 0xD1, 0xEC, 0x70, 0x1D, 0xC1, 0xCF, 0x60, 0x1E, 0xB1, 0xCE, 0x70, -0x1F, 0xA1, 0xB1, 0x60, 0x20, 0x76, 0x00, 0xF0, 0x21, 0x81, 0x93, 0x60, 0x22, 0x55, 0xE2, 0xF0, -0x23, 0x6A, 0xAF, 0xE0, 0x24, 0x35, 0xC4, 0xF0, 0x25, 0x4A, 0x91, 0xE0, 0x26, 0x15, 0xA6, 0xF0, -0x27, 0x2A, 0x73, 0xE0, 0x27, 0xFE, 0xC3, 0x70, 0x29, 0x0A, 0x55, 0xE0, 0x29, 0xDE, 0xA5, 0x70, -0x2A, 0xEA, 0x37, 0xE0, 0x2B, 0xBE, 0x87, 0x70, 0x2C, 0xD3, 0x54, 0x60, 0x2D, 0x9E, 0x69, 0x70, -0x2E, 0xB3, 0x36, 0x60, 0x2F, 0x7E, 0x4B, 0x70, 0x30, 0x93, 0x18, 0x60, 0x31, 0x67, 0x67, 0xF0, -0x32, 0x72, 0xFA, 0x60, 0x33, 0x47, 0x49, 0xF0, 0x34, 0x52, 0xDC, 0x60, 0x35, 0x27, 0x2B, 0xF0, -0x36, 0x32, 0xBE, 0x60, 0x37, 0x07, 0x0D, 0xF0, 0x38, 0x1B, 0xDA, 0xE0, 0x38, 0xE6, 0xEF, 0xF0, -0x39, 0xFB, 0xBC, 0xE0, 0x3A, 0xC6, 0xD1, 0xF0, 0x3B, 0xDB, 0x9E, 0xE0, 0x3C, 0xAF, 0xEE, 0x70, -0x3D, 0xBB, 0x80, 0xE0, 0x3E, 0x8F, 0xD0, 0x70, 0x3F, 0x9B, 0x62, 0xE0, 0x40, 0x6F, 0xB2, 0x70, -0x41, 0x84, 0x7F, 0x60, 0x42, 0x4F, 0x94, 0x70, 0x43, 0x64, 0x61, 0x60, 0x44, 0x2F, 0x76, 0x70, -0x45, 0x44, 0x43, 0x60, 0x45, 0xF3, 0xA8, 0xF0, 0x47, 0x2D, 0x5F, 0xE0, 0x47, 0xD3, 0x8A, 0xF0, -0x49, 0x0D, 0x41, 0xE0, 0x49, 0xB3, 0x6C, 0xF0, 0x4A, 0xED, 0x23, 0xE0, 0x4B, 0x9C, 0x89, 0x70, -0x4C, 0xD6, 0x40, 0x60, 0x4D, 0x7C, 0x6B, 0x70, 0x4E, 0xB6, 0x22, 0x60, 0x4F, 0x5C, 0x4D, 0x70, -0x50, 0x96, 0x04, 0x60, 0x51, 0x3C, 0x2F, 0x70, 0x52, 0x75, 0xE6, 0x60, 0x53, 0x1C, 0x11, 0x70, -0x54, 0x55, 0xC8, 0x60, 0x54, 0xFB, 0xF3, 0x70, 0x56, 0x35, 0xAA, 0x60, 0x56, 0xE5, 0x0F, 0xF0, -0x58, 0x1E, 0xC6, 0xE0, 0x58, 0xC4, 0xF1, 0xF0, 0x59, 0xFE, 0xA8, 0xE0, 0x5A, 0xA4, 0xD3, 0xF0, -0x5B, 0xDE, 0x8A, 0xE0, 0x5C, 0x84, 0xB5, 0xF0, 0x5D, 0xBE, 0x6C, 0xE0, 0x5E, 0x64, 0x97, 0xF0, -0x5F, 0x9E, 0x4E, 0xE0, 0x60, 0x4D, 0xB4, 0x70, 0x61, 0x87, 0x6B, 0x60, 0x62, 0x2D, 0x96, 0x70, -0x63, 0x67, 0x4D, 0x60, 0x64, 0x0D, 0x78, 0x70, 0x65, 0x47, 0x2F, 0x60, 0x65, 0xED, 0x5A, 0x70, -0x67, 0x27, 0x11, 0x60, 0x67, 0xCD, 0x3C, 0x70, 0x69, 0x06, 0xF3, 0x60, 0x69, 0xAD, 0x1E, 0x70, -0x6A, 0xE6, 0xD5, 0x60, 0x6B, 0x96, 0x3A, 0xF0, 0x6C, 0xCF, 0xF1, 0xE0, 0x6D, 0x76, 0x1C, 0xF0, -0x6E, 0xAF, 0xD3, 0xE0, 0x6F, 0x55, 0xFE, 0xF0, 0x70, 0x8F, 0xB5, 0xE0, 0x71, 0x35, 0xE0, 0xF0, -0x72, 0x6F, 0x97, 0xE0, 0x73, 0x15, 0xC2, 0xF0, 0x74, 0x4F, 0x79, 0xE0, 0x74, 0xFE, 0xDF, 0x70, -0x76, 0x38, 0x96, 0x60, 0x76, 0xDE, 0xC1, 0x70, 0x78, 0x18, 0x78, 0x60, 0x78, 0xBE, 0xA3, 0x70, -0x79, 0xF8, 0x5A, 0x60, 0x7A, 0x9E, 0x85, 0x70, 0x7B, 0xD8, 0x3C, 0x60, 0x7C, 0x7E, 0x67, 0x70, -0x7D, 0xB8, 0x1E, 0x60, 0x7E, 0x5E, 0x49, 0x70, 0x7F, 0x98, 0x00, 0x60, 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, 0x02, 0x03, 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, 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, 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, 0x00, 0x01, -0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, -0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0x45, 0x44, 0x54, 0x00, -0x45, 0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, -0x00, 0x00, 0x00, 0x01, - -/* America/Montserrat */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF4, 0x35, 0x10, -0x01, 0xFF, 0xFF, 0xC5, 0xAC, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Nassau */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x37, 0x42, 0x84, -0xF5, 0x4F, 0x78, 0x70, 0xF6, 0x3F, 0x5B, 0x60, 0xF7, 0x2F, 0x5A, 0x70, 0xF8, 0x28, 0x77, 0xE0, -0xF9, 0x0F, 0x3C, 0x70, 0xFA, 0x08, 0x59, 0xE0, 0xFA, 0xF8, 0x58, 0xF0, 0xFB, 0xE8, 0x3B, 0xE0, -0xFC, 0xD8, 0x3A, 0xF0, 0xFD, 0xC8, 0x1D, 0xE0, 0xFE, 0xB8, 0x1C, 0xF0, 0xFF, 0xA7, 0xFF, 0xE0, -0x00, 0x97, 0xFE, 0xF0, 0x01, 0x87, 0xE1, 0xE0, 0x02, 0x77, 0xE0, 0xF0, 0x03, 0x70, 0xFE, 0x60, -0x04, 0x60, 0xFD, 0x70, 0x05, 0x50, 0xE0, 0x60, 0x06, 0x40, 0xDF, 0x70, 0x07, 0x30, 0xC2, 0x60, -0x08, 0x20, 0xC1, 0x70, 0x09, 0x10, 0xA4, 0x60, 0x0A, 0x00, 0xA3, 0x70, 0x0A, 0xF0, 0x86, 0x60, -0x0B, 0xE0, 0x85, 0x70, 0x0C, 0xD9, 0xA2, 0xE0, 0x0D, 0xC0, 0x67, 0x70, 0x0E, 0xB9, 0x84, 0xE0, -0x0F, 0xA9, 0x83, 0xF0, 0x10, 0x99, 0x66, 0xE0, 0x11, 0x89, 0x65, 0xF0, 0x12, 0x79, 0x48, 0xE0, -0x13, 0x69, 0x47, 0xF0, 0x14, 0x59, 0x2A, 0xE0, 0x15, 0x49, 0x29, 0xF0, 0x16, 0x39, 0x0C, 0xE0, -0x17, 0x29, 0x0B, 0xF0, 0x18, 0x22, 0x29, 0x60, 0x19, 0x08, 0xED, 0xF0, 0x1A, 0x02, 0x0B, 0x60, -0x1A, 0xF2, 0x0A, 0x70, 0x1B, 0xE1, 0xED, 0x60, 0x1C, 0xD1, 0xEC, 0x70, 0x1D, 0xC1, 0xCF, 0x60, -0x1E, 0xB1, 0xCE, 0x70, 0x1F, 0xA1, 0xB1, 0x60, 0x20, 0x76, 0x00, 0xF0, 0x21, 0x81, 0x93, 0x60, -0x22, 0x55, 0xE2, 0xF0, 0x23, 0x6A, 0xAF, 0xE0, 0x24, 0x35, 0xC4, 0xF0, 0x25, 0x4A, 0x91, 0xE0, -0x26, 0x15, 0xA6, 0xF0, 0x27, 0x2A, 0x73, 0xE0, 0x27, 0xFE, 0xC3, 0x70, 0x29, 0x0A, 0x55, 0xE0, -0x29, 0xDE, 0xA5, 0x70, 0x2A, 0xEA, 0x37, 0xE0, 0x2B, 0xBE, 0x87, 0x70, 0x2C, 0xD3, 0x54, 0x60, -0x2D, 0x9E, 0x69, 0x70, 0x2E, 0xB3, 0x36, 0x60, 0x2F, 0x7E, 0x4B, 0x70, 0x30, 0x93, 0x18, 0x60, -0x31, 0x67, 0x67, 0xF0, 0x32, 0x72, 0xFA, 0x60, 0x33, 0x47, 0x49, 0xF0, 0x34, 0x52, 0xDC, 0x60, -0x35, 0x27, 0x2B, 0xF0, 0x36, 0x32, 0xBE, 0x60, 0x37, 0x07, 0x0D, 0xF0, 0x38, 0x1B, 0xDA, 0xE0, -0x38, 0xE6, 0xEF, 0xF0, 0x39, 0xFB, 0xBC, 0xE0, 0x3A, 0xC6, 0xD1, 0xF0, 0x3B, 0xDB, 0x9E, 0xE0, -0x3C, 0xAF, 0xEE, 0x70, 0x3D, 0xBB, 0x80, 0xE0, 0x3E, 0x8F, 0xD0, 0x70, 0x3F, 0x9B, 0x62, 0xE0, -0x40, 0x6F, 0xB2, 0x70, 0x41, 0x84, 0x7F, 0x60, 0x42, 0x4F, 0x94, 0x70, 0x43, 0x64, 0x61, 0x60, -0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x43, 0x60, 0x45, 0xF3, 0xA8, 0xF0, 0x47, 0x2D, 0x5F, 0xE0, -0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x41, 0xE0, 0x49, 0xB3, 0x6C, 0xF0, 0x4A, 0xED, 0x23, 0xE0, -0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x40, 0x60, 0x4D, 0x7C, 0x6B, 0x70, 0x4E, 0xB6, 0x22, 0x60, -0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x04, 0x60, 0x51, 0x3C, 0x2F, 0x70, 0x52, 0x75, 0xE6, 0x60, -0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xC8, 0x60, 0x54, 0xFB, 0xF3, 0x70, 0x56, 0x35, 0xAA, 0x60, -0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, 0x58, 0xC4, 0xF1, 0xF0, 0x59, 0xFE, 0xA8, 0xE0, -0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, 0x5C, 0x84, 0xB5, 0xF0, 0x5D, 0xBE, 0x6C, 0xE0, -0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, 0x60, 0x4D, 0xB4, 0x70, 0x61, 0x87, 0x6B, 0x60, -0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, 0x64, 0x0D, 0x78, 0x70, 0x65, 0x47, 0x2F, 0x60, -0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, 0x67, 0xCD, 0x3C, 0x70, 0x69, 0x06, 0xF3, 0x60, -0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, 0x6B, 0x96, 0x3A, 0xF0, 0x6C, 0xCF, 0xF1, 0xE0, -0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, 0x6F, 0x55, 0xFE, 0xF0, 0x70, 0x8F, 0xB5, 0xE0, -0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, 0x73, 0x15, 0xC2, 0xF0, 0x74, 0x4F, 0x79, 0xE0, -0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, 0x76, 0xDE, 0xC1, 0x70, 0x78, 0x18, 0x78, 0x60, -0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, 0x7A, 0x9E, 0x85, 0x70, 0x7B, 0xD8, 0x3C, 0x60, -0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, 0x7E, 0x5E, 0x49, 0x70, 0x7F, 0x98, 0x00, 0x60, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xB7, 0x7C, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, -0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x45, -0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/New_York */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x1E, 0x70, -0x9F, 0xBA, 0xEB, 0x60, 0xA0, 0x86, 0x00, 0x70, 0xA1, 0x9A, 0xCD, 0x60, 0xA2, 0x65, 0xE2, 0x70, -0xA3, 0x83, 0xE9, 0xE0, 0xA4, 0x6A, 0xAE, 0x70, 0xA5, 0x35, 0xA7, 0x60, 0xA6, 0x53, 0xCA, 0xF0, -0xA7, 0x15, 0x89, 0x60, 0xA8, 0x33, 0xAC, 0xF0, 0xA8, 0xFE, 0xA5, 0xE0, 0xAA, 0x13, 0x8E, 0xF0, -0xAA, 0xDE, 0x87, 0xE0, 0xAB, 0xF3, 0x70, 0xF0, 0xAC, 0xBE, 0x69, 0xE0, 0xAD, 0xD3, 0x52, 0xF0, -0xAE, 0x9E, 0x4B, 0xE0, 0xAF, 0xB3, 0x34, 0xF0, 0xB0, 0x7E, 0x2D, 0xE0, 0xB1, 0x9C, 0x51, 0x70, -0xB2, 0x67, 0x4A, 0x60, 0xB3, 0x7C, 0x33, 0x70, 0xB4, 0x47, 0x2C, 0x60, 0xB5, 0x5C, 0x15, 0x70, -0xB6, 0x27, 0x0E, 0x60, 0xB7, 0x3B, 0xF7, 0x70, 0xB8, 0x06, 0xF0, 0x60, 0xB9, 0x1B, 0xD9, 0x70, -0xB9, 0xE6, 0xD2, 0x60, 0xBB, 0x04, 0xF5, 0xF0, 0xBB, 0xC6, 0xB4, 0x60, 0xBC, 0xE4, 0xD7, 0xF0, -0xBD, 0xAF, 0xD0, 0xE0, 0xBE, 0xC4, 0xB9, 0xF0, 0xBF, 0x8F, 0xB2, 0xE0, 0xC0, 0xA4, 0x9B, 0xF0, -0xC1, 0x6F, 0x94, 0xE0, 0xC2, 0x84, 0x7D, 0xF0, 0xC3, 0x4F, 0x76, 0xE0, 0xC4, 0x64, 0x5F, 0xF0, -0xC5, 0x2F, 0x58, 0xE0, 0xC6, 0x4D, 0x7C, 0x70, 0xC7, 0x0F, 0x3A, 0xE0, 0xC8, 0x2D, 0x5E, 0x70, -0xC8, 0xF8, 0x57, 0x60, 0xCA, 0x0D, 0x40, 0x70, 0xCA, 0xD8, 0x39, 0x60, 0xCB, 0x88, 0xF0, 0x70, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xFB, 0xE0, 0xD3, 0x75, 0xE4, 0xF0, 0xD4, 0x40, 0xDD, 0xE0, -0xD5, 0x55, 0xC6, 0xF0, 0xD6, 0x20, 0xBF, 0xE0, 0xD7, 0x35, 0xA8, 0xF0, 0xD8, 0x00, 0xA1, 0xE0, -0xD9, 0x15, 0x8A, 0xF0, 0xD9, 0xE0, 0x83, 0xE0, 0xDA, 0xFE, 0xA7, 0x70, 0xDB, 0xC0, 0x65, 0xE0, -0xDC, 0xDE, 0x89, 0x70, 0xDD, 0xA9, 0x82, 0x60, 0xDE, 0xBE, 0x6B, 0x70, 0xDF, 0x89, 0x64, 0x60, -0xE0, 0x9E, 0x4D, 0x70, 0xE1, 0x69, 0x46, 0x60, 0xE2, 0x7E, 0x2F, 0x70, 0xE3, 0x49, 0x28, 0x60, -0xE4, 0x5E, 0x11, 0x70, 0xE5, 0x57, 0x2E, 0xE0, 0xE6, 0x47, 0x2D, 0xF0, 0xE7, 0x37, 0x10, 0xE0, -0xE8, 0x27, 0x0F, 0xF0, 0xE9, 0x16, 0xF2, 0xE0, 0xEA, 0x06, 0xF1, 0xF0, 0xEA, 0xF6, 0xD4, 0xE0, -0xEB, 0xE6, 0xD3, 0xF0, 0xEC, 0xD6, 0xB6, 0xE0, 0xED, 0xC6, 0xB5, 0xF0, 0xEE, 0xBF, 0xD3, 0x60, -0xEF, 0xAF, 0xD2, 0x70, 0xF0, 0x9F, 0xB5, 0x60, 0xF1, 0x8F, 0xB4, 0x70, 0xF2, 0x7F, 0x97, 0x60, -0xF3, 0x6F, 0x96, 0x70, 0xF4, 0x5F, 0x79, 0x60, 0xF5, 0x4F, 0x78, 0x70, 0xF6, 0x3F, 0x5B, 0x60, -0xF7, 0x2F, 0x5A, 0x70, 0xF8, 0x28, 0x77, 0xE0, 0xF9, 0x0F, 0x3C, 0x70, 0xFA, 0x08, 0x59, 0xE0, -0xFA, 0xF8, 0x58, 0xF0, 0xFB, 0xE8, 0x3B, 0xE0, 0xFC, 0xD8, 0x3A, 0xF0, 0xFD, 0xC8, 0x1D, 0xE0, -0xFE, 0xB8, 0x1C, 0xF0, 0xFF, 0xA7, 0xFF, 0xE0, 0x00, 0x97, 0xFE, 0xF0, 0x01, 0x87, 0xE1, 0xE0, -0x02, 0x77, 0xE0, 0xF0, 0x03, 0x70, 0xFE, 0x60, 0x04, 0x60, 0xFD, 0x70, 0x05, 0x50, 0xE0, 0x60, -0x06, 0x40, 0xDF, 0x70, 0x07, 0x30, 0xC2, 0x60, 0x07, 0x8D, 0x19, 0x70, 0x09, 0x10, 0xA4, 0x60, -0x09, 0xAD, 0x94, 0xF0, 0x0A, 0xF0, 0x86, 0x60, 0x0B, 0xE0, 0x85, 0x70, 0x0C, 0xD9, 0xA2, 0xE0, -0x0D, 0xC0, 0x67, 0x70, 0x0E, 0xB9, 0x84, 0xE0, 0x0F, 0xA9, 0x83, 0xF0, 0x10, 0x99, 0x66, 0xE0, -0x11, 0x89, 0x65, 0xF0, 0x12, 0x79, 0x48, 0xE0, 0x13, 0x69, 0x47, 0xF0, 0x14, 0x59, 0x2A, 0xE0, -0x15, 0x49, 0x29, 0xF0, 0x16, 0x39, 0x0C, 0xE0, 0x17, 0x29, 0x0B, 0xF0, 0x18, 0x22, 0x29, 0x60, -0x19, 0x08, 0xED, 0xF0, 0x1A, 0x02, 0x0B, 0x60, 0x1A, 0xF2, 0x0A, 0x70, 0x1B, 0xE1, 0xED, 0x60, -0x1C, 0xD1, 0xEC, 0x70, 0x1D, 0xC1, 0xCF, 0x60, 0x1E, 0xB1, 0xCE, 0x70, 0x1F, 0xA1, 0xB1, 0x60, -0x20, 0x76, 0x00, 0xF0, 0x21, 0x81, 0x93, 0x60, 0x22, 0x55, 0xE2, 0xF0, 0x23, 0x6A, 0xAF, 0xE0, -0x24, 0x35, 0xC4, 0xF0, 0x25, 0x4A, 0x91, 0xE0, 0x26, 0x15, 0xA6, 0xF0, 0x27, 0x2A, 0x73, 0xE0, -0x27, 0xFE, 0xC3, 0x70, 0x29, 0x0A, 0x55, 0xE0, 0x29, 0xDE, 0xA5, 0x70, 0x2A, 0xEA, 0x37, 0xE0, -0x2B, 0xBE, 0x87, 0x70, 0x2C, 0xD3, 0x54, 0x60, 0x2D, 0x9E, 0x69, 0x70, 0x2E, 0xB3, 0x36, 0x60, -0x2F, 0x7E, 0x4B, 0x70, 0x30, 0x93, 0x18, 0x60, 0x31, 0x67, 0x67, 0xF0, 0x32, 0x72, 0xFA, 0x60, -0x33, 0x47, 0x49, 0xF0, 0x34, 0x52, 0xDC, 0x60, 0x35, 0x27, 0x2B, 0xF0, 0x36, 0x32, 0xBE, 0x60, -0x37, 0x07, 0x0D, 0xF0, 0x38, 0x1B, 0xDA, 0xE0, 0x38, 0xE6, 0xEF, 0xF0, 0x39, 0xFB, 0xBC, 0xE0, -0x3A, 0xC6, 0xD1, 0xF0, 0x3B, 0xDB, 0x9E, 0xE0, 0x3C, 0xAF, 0xEE, 0x70, 0x3D, 0xBB, 0x80, 0xE0, -0x3E, 0x8F, 0xD0, 0x70, 0x3F, 0x9B, 0x62, 0xE0, 0x40, 0x6F, 0xB2, 0x70, 0x41, 0x84, 0x7F, 0x60, -0x42, 0x4F, 0x94, 0x70, 0x43, 0x64, 0x61, 0x60, 0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x43, 0x60, -0x45, 0xF3, 0xA8, 0xF0, 0x47, 0x2D, 0x5F, 0xE0, 0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x41, 0xE0, -0x49, 0xB3, 0x6C, 0xF0, 0x4A, 0xED, 0x23, 0xE0, 0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x40, 0x60, -0x4D, 0x7C, 0x6B, 0x70, 0x4E, 0xB6, 0x22, 0x60, 0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x04, 0x60, -0x51, 0x3C, 0x2F, 0x70, 0x52, 0x75, 0xE6, 0x60, 0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xC8, 0x60, -0x54, 0xFB, 0xF3, 0x70, 0x56, 0x35, 0xAA, 0x60, 0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, -0x58, 0xC4, 0xF1, 0xF0, 0x59, 0xFE, 0xA8, 0xE0, 0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, -0x5C, 0x84, 0xB5, 0xF0, 0x5D, 0xBE, 0x6C, 0xE0, 0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, -0x60, 0x4D, 0xB4, 0x70, 0x61, 0x87, 0x6B, 0x60, 0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, -0x64, 0x0D, 0x78, 0x70, 0x65, 0x47, 0x2F, 0x60, 0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, -0x67, 0xCD, 0x3C, 0x70, 0x69, 0x06, 0xF3, 0x60, 0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, -0x6B, 0x96, 0x3A, 0xF0, 0x6C, 0xCF, 0xF1, 0xE0, 0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, -0x6F, 0x55, 0xFE, 0xF0, 0x70, 0x8F, 0xB5, 0xE0, 0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, -0x73, 0x15, 0xC2, 0xF0, 0x74, 0x4F, 0x79, 0xE0, 0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, -0x76, 0xDE, 0xC1, 0x70, 0x78, 0x18, 0x78, 0x60, 0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, -0x7A, 0x9E, 0x85, 0x70, 0x7B, 0xD8, 0x3C, 0x60, 0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, -0x7E, 0x5E, 0x49, 0x70, 0x7F, 0x98, 0x00, 0x60, 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, 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, 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, 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, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, -0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0x45, 0x44, 0x54, 0x00, 0x45, -0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, -0x00, 0x00, 0x01, - -/* America/Nipigon */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xB8, 0x93, 0x70, -0x9F, 0xC0, 0x31, 0x60, 0xC8, 0xF8, 0x49, 0x50, 0xCB, 0x88, 0xF0, 0x70, 0xD2, 0x23, 0xF4, 0x70, -0xD2, 0x60, 0xFB, 0xE0, 0x08, 0x20, 0xC1, 0x70, 0x09, 0x10, 0xA4, 0x60, 0x0A, 0x00, 0xA3, 0x70, -0x0A, 0xF0, 0x86, 0x60, 0x0B, 0xE0, 0x85, 0x70, 0x0C, 0xD9, 0xA2, 0xE0, 0x0D, 0xC0, 0x67, 0x70, -0x0E, 0xB9, 0x84, 0xE0, 0x0F, 0xA9, 0x83, 0xF0, 0x10, 0x99, 0x66, 0xE0, 0x11, 0x89, 0x65, 0xF0, -0x12, 0x79, 0x48, 0xE0, 0x13, 0x69, 0x47, 0xF0, 0x14, 0x59, 0x2A, 0xE0, 0x15, 0x49, 0x29, 0xF0, -0x16, 0x39, 0x0C, 0xE0, 0x17, 0x29, 0x0B, 0xF0, 0x18, 0x22, 0x29, 0x60, 0x19, 0x08, 0xED, 0xF0, -0x1A, 0x02, 0x0B, 0x60, 0x1A, 0xF2, 0x0A, 0x70, 0x1B, 0xE1, 0xED, 0x60, 0x1C, 0xD1, 0xEC, 0x70, -0x1D, 0xC1, 0xCF, 0x60, 0x1E, 0xB1, 0xCE, 0x70, 0x1F, 0xA1, 0xB1, 0x60, 0x20, 0x76, 0x00, 0xF0, -0x21, 0x81, 0x93, 0x60, 0x22, 0x55, 0xE2, 0xF0, 0x23, 0x6A, 0xAF, 0xE0, 0x24, 0x35, 0xC4, 0xF0, -0x25, 0x4A, 0x91, 0xE0, 0x26, 0x15, 0xA6, 0xF0, 0x27, 0x2A, 0x73, 0xE0, 0x27, 0xFE, 0xC3, 0x70, -0x29, 0x0A, 0x55, 0xE0, 0x29, 0xDE, 0xA5, 0x70, 0x2A, 0xEA, 0x37, 0xE0, 0x2B, 0xBE, 0x87, 0x70, -0x2C, 0xD3, 0x54, 0x60, 0x2D, 0x9E, 0x69, 0x70, 0x2E, 0xB3, 0x36, 0x60, 0x2F, 0x7E, 0x4B, 0x70, -0x30, 0x93, 0x18, 0x60, 0x31, 0x67, 0x67, 0xF0, 0x32, 0x72, 0xFA, 0x60, 0x33, 0x47, 0x49, 0xF0, -0x34, 0x52, 0xDC, 0x60, 0x35, 0x27, 0x2B, 0xF0, 0x36, 0x32, 0xBE, 0x60, 0x37, 0x07, 0x0D, 0xF0, -0x38, 0x1B, 0xDA, 0xE0, 0x38, 0xE6, 0xEF, 0xF0, 0x39, 0xFB, 0xBC, 0xE0, 0x3A, 0xC6, 0xD1, 0xF0, -0x3B, 0xDB, 0x9E, 0xE0, 0x3C, 0xAF, 0xEE, 0x70, 0x3D, 0xBB, 0x80, 0xE0, 0x3E, 0x8F, 0xD0, 0x70, -0x3F, 0x9B, 0x62, 0xE0, 0x40, 0x6F, 0xB2, 0x70, 0x41, 0x84, 0x7F, 0x60, 0x42, 0x4F, 0x94, 0x70, -0x43, 0x64, 0x61, 0x60, 0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x43, 0x60, 0x45, 0xF3, 0xA8, 0xF0, -0x47, 0x2D, 0x5F, 0xE0, 0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x41, 0xE0, 0x49, 0xB3, 0x6C, 0xF0, -0x4A, 0xED, 0x23, 0xE0, 0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x40, 0x60, 0x4D, 0x7C, 0x6B, 0x70, -0x4E, 0xB6, 0x22, 0x60, 0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x04, 0x60, 0x51, 0x3C, 0x2F, 0x70, -0x52, 0x75, 0xE6, 0x60, 0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xC8, 0x60, 0x54, 0xFB, 0xF3, 0x70, -0x56, 0x35, 0xAA, 0x60, 0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, 0x58, 0xC4, 0xF1, 0xF0, -0x59, 0xFE, 0xA8, 0xE0, 0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, 0x5C, 0x84, 0xB5, 0xF0, -0x5D, 0xBE, 0x6C, 0xE0, 0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, 0x60, 0x4D, 0xB4, 0x70, -0x61, 0x87, 0x6B, 0x60, 0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, 0x64, 0x0D, 0x78, 0x70, -0x65, 0x47, 0x2F, 0x60, 0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, 0x67, 0xCD, 0x3C, 0x70, -0x69, 0x06, 0xF3, 0x60, 0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, 0x6B, 0x96, 0x3A, 0xF0, -0x6C, 0xCF, 0xF1, 0xE0, 0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, 0x6F, 0x55, 0xFE, 0xF0, -0x70, 0x8F, 0xB5, 0xE0, 0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, 0x73, 0x15, 0xC2, 0xF0, -0x74, 0x4F, 0x79, 0xE0, 0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, 0x76, 0xDE, 0xC1, 0x70, -0x78, 0x18, 0x78, 0x60, 0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, 0x7A, 0x9E, 0x85, 0x70, -0x7B, 0xD8, 0x3C, 0x60, 0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, 0x7E, 0x5E, 0x49, 0x70, -0x7F, 0x98, 0x00, 0x60, 0x00, 0x01, 0x00, 0x02, 0x03, 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, 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, -0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x00, -0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, -0x01, 0x0C, 0x45, 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, -0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - -/* America/Nome */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x22, 0xCB, 0x89, 0x44, 0xD0, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x50, 0x40, 0xFA, 0xD2, 0x55, 0xB0, 0xFE, 0xB8, 0x71, 0x50, -0xFF, 0xA8, 0x54, 0x40, 0x00, 0x98, 0x53, 0x50, 0x01, 0x88, 0x36, 0x40, 0x02, 0x78, 0x35, 0x50, -0x03, 0x71, 0x52, 0xC0, 0x04, 0x61, 0x51, 0xD0, 0x05, 0x51, 0x34, 0xC0, 0x06, 0x41, 0x33, 0xD0, -0x07, 0x31, 0x16, 0xC0, 0x07, 0x8D, 0x6D, 0xD0, 0x09, 0x10, 0xF8, 0xC0, 0x09, 0xAD, 0xE9, 0x50, -0x0A, 0xF0, 0xDA, 0xC0, 0x0B, 0xE0, 0xD9, 0xD0, 0x0C, 0xD9, 0xF7, 0x40, 0x0D, 0xC0, 0xBB, 0xD0, -0x0E, 0xB9, 0xD9, 0x40, 0x0F, 0xA9, 0xD8, 0x50, 0x10, 0x99, 0xBB, 0x40, 0x11, 0x89, 0xBA, 0x50, -0x12, 0x79, 0x9D, 0x40, 0x13, 0x69, 0x9C, 0x50, 0x14, 0x59, 0x7F, 0x40, 0x15, 0x49, 0x7E, 0x50, -0x16, 0x39, 0x61, 0x40, 0x17, 0x29, 0x60, 0x50, 0x18, 0x22, 0x7D, 0xC0, 0x19, 0x09, 0x42, 0x50, -0x1A, 0x02, 0x5F, 0xC0, 0x1A, 0x2B, 0x14, 0x10, 0x1A, 0xF2, 0x42, 0xB0, 0x1B, 0xE2, 0x25, 0xA0, -0x1C, 0xD2, 0x24, 0xB0, 0x1D, 0xC2, 0x07, 0xA0, 0x1E, 0xB2, 0x06, 0xB0, 0x1F, 0xA1, 0xE9, 0xA0, -0x20, 0x76, 0x39, 0x30, 0x21, 0x81, 0xCB, 0xA0, 0x22, 0x56, 0x1B, 0x30, 0x23, 0x6A, 0xE8, 0x20, -0x24, 0x35, 0xFD, 0x30, 0x25, 0x4A, 0xCA, 0x20, 0x26, 0x15, 0xDF, 0x30, 0x27, 0x2A, 0xAC, 0x20, -0x27, 0xFE, 0xFB, 0xB0, 0x29, 0x0A, 0x8E, 0x20, 0x29, 0xDE, 0xDD, 0xB0, 0x2A, 0xEA, 0x70, 0x20, -0x2B, 0xBE, 0xBF, 0xB0, 0x2C, 0xD3, 0x8C, 0xA0, 0x2D, 0x9E, 0xA1, 0xB0, 0x2E, 0xB3, 0x6E, 0xA0, -0x2F, 0x7E, 0x83, 0xB0, 0x30, 0x93, 0x50, 0xA0, 0x31, 0x67, 0xA0, 0x30, 0x32, 0x73, 0x32, 0xA0, -0x33, 0x47, 0x82, 0x30, 0x34, 0x53, 0x14, 0xA0, 0x35, 0x27, 0x64, 0x30, 0x36, 0x32, 0xF6, 0xA0, -0x37, 0x07, 0x46, 0x30, 0x38, 0x1C, 0x13, 0x20, 0x38, 0xE7, 0x28, 0x30, 0x39, 0xFB, 0xF5, 0x20, -0x3A, 0xC7, 0x0A, 0x30, 0x3B, 0xDB, 0xD7, 0x20, 0x3C, 0xB0, 0x26, 0xB0, 0x3D, 0xBB, 0xB9, 0x20, -0x3E, 0x90, 0x08, 0xB0, 0x3F, 0x9B, 0x9B, 0x20, 0x40, 0x6F, 0xEA, 0xB0, 0x41, 0x84, 0xB7, 0xA0, -0x42, 0x4F, 0xCC, 0xB0, 0x43, 0x64, 0x99, 0xA0, 0x44, 0x2F, 0xAE, 0xB0, 0x45, 0x44, 0x7B, 0xA0, -0x45, 0xF3, 0xE1, 0x30, 0x47, 0x2D, 0x98, 0x20, 0x47, 0xD3, 0xC3, 0x30, 0x49, 0x0D, 0x7A, 0x20, -0x49, 0xB3, 0xA5, 0x30, 0x4A, 0xED, 0x5C, 0x20, 0x4B, 0x9C, 0xC1, 0xB0, 0x4C, 0xD6, 0x78, 0xA0, -0x4D, 0x7C, 0xA3, 0xB0, 0x4E, 0xB6, 0x5A, 0xA0, 0x4F, 0x5C, 0x85, 0xB0, 0x50, 0x96, 0x3C, 0xA0, -0x51, 0x3C, 0x67, 0xB0, 0x52, 0x76, 0x1E, 0xA0, 0x53, 0x1C, 0x49, 0xB0, 0x54, 0x56, 0x00, 0xA0, -0x54, 0xFC, 0x2B, 0xB0, 0x56, 0x35, 0xE2, 0xA0, 0x56, 0xE5, 0x48, 0x30, 0x58, 0x1E, 0xFF, 0x20, -0x58, 0xC5, 0x2A, 0x30, 0x59, 0xFE, 0xE1, 0x20, 0x5A, 0xA5, 0x0C, 0x30, 0x5B, 0xDE, 0xC3, 0x20, -0x5C, 0x84, 0xEE, 0x30, 0x5D, 0xBE, 0xA5, 0x20, 0x5E, 0x64, 0xD0, 0x30, 0x5F, 0x9E, 0x87, 0x20, -0x60, 0x4D, 0xEC, 0xB0, 0x61, 0x87, 0xA3, 0xA0, 0x62, 0x2D, 0xCE, 0xB0, 0x63, 0x67, 0x85, 0xA0, -0x64, 0x0D, 0xB0, 0xB0, 0x65, 0x47, 0x67, 0xA0, 0x65, 0xED, 0x92, 0xB0, 0x67, 0x27, 0x49, 0xA0, -0x67, 0xCD, 0x74, 0xB0, 0x69, 0x07, 0x2B, 0xA0, 0x69, 0xAD, 0x56, 0xB0, 0x6A, 0xE7, 0x0D, 0xA0, -0x6B, 0x96, 0x73, 0x30, 0x6C, 0xD0, 0x2A, 0x20, 0x6D, 0x76, 0x55, 0x30, 0x6E, 0xB0, 0x0C, 0x20, -0x6F, 0x56, 0x37, 0x30, 0x70, 0x8F, 0xEE, 0x20, 0x71, 0x36, 0x19, 0x30, 0x72, 0x6F, 0xD0, 0x20, -0x73, 0x15, 0xFB, 0x30, 0x74, 0x4F, 0xB2, 0x20, 0x74, 0xFF, 0x17, 0xB0, 0x76, 0x38, 0xCE, 0xA0, -0x76, 0xDE, 0xF9, 0xB0, 0x78, 0x18, 0xB0, 0xA0, 0x78, 0xBE, 0xDB, 0xB0, 0x79, 0xF8, 0x92, 0xA0, -0x7A, 0x9E, 0xBD, 0xB0, 0x7B, 0xD8, 0x74, 0xA0, 0x7C, 0x7E, 0x9F, 0xB0, 0x7D, 0xB8, 0x56, 0xA0, -0x7E, 0x5E, 0x81, 0xB0, 0x7F, 0x98, 0x38, 0xA0, 0x01, 0x02, 0x00, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x05, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x00, 0xFF, 0xFF, 0x73, -0x60, 0x01, 0x04, 0xFF, 0xFF, 0x73, 0x60, 0x01, 0x08, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x0C, 0xFF, -0xFF, 0x73, 0x60, 0x01, 0x10, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x14, 0xFF, 0xFF, 0x8F, 0x80, 0x01, -0x18, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x1D, 0x4E, 0x53, 0x54, 0x00, 0x4E, 0x57, 0x54, 0x00, 0x4E, -0x50, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x42, 0x44, 0x54, 0x00, 0x59, 0x53, 0x54, 0x00, 0x41, -0x4B, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Noronha */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x65, 0x64, -0xB8, 0x0F, 0x3B, 0xD0, 0xB8, 0xFD, 0x32, 0x90, 0xB9, 0xF1, 0x26, 0x20, 0xBA, 0xDE, 0x66, 0x10, -0xDA, 0x38, 0xA0, 0x20, 0xDA, 0xEB, 0xEC, 0x20, 0xDC, 0x19, 0xD3, 0xA0, 0xDC, 0xB9, 0x4B, 0x10, -0xDD, 0xFB, 0x07, 0x20, 0xDE, 0x9B, 0xD0, 0x10, 0xDF, 0xDD, 0x8C, 0x20, 0xE0, 0x54, 0x25, 0x10, -0xF4, 0x97, 0xF1, 0xA0, 0xF5, 0x05, 0x50, 0x10, 0xF6, 0xC0, 0x56, 0x20, 0xF7, 0x0E, 0x10, 0x90, -0xF8, 0x51, 0x1E, 0x20, 0xF8, 0xC7, 0xB7, 0x10, 0xFA, 0x0A, 0xC4, 0xA0, 0xFA, 0xA8, 0xEA, 0x90, -0xFB, 0xEB, 0xF8, 0x20, 0xFC, 0x8B, 0x6F, 0x90, 0x1D, 0xC9, 0x80, 0x20, 0x1E, 0x78, 0xC9, 0x90, -0x1F, 0xA0, 0x27, 0xA0, 0x20, 0x33, 0xC1, 0x90, 0x21, 0x81, 0x5B, 0x20, 0x22, 0x0B, 0xBA, 0x90, -0x23, 0x58, 0x02, 0xA0, 0x23, 0xE2, 0x62, 0x10, 0x25, 0x37, 0xE4, 0xA0, 0x25, 0xD4, 0xB9, 0x10, -0x37, 0xF6, 0xB8, 0xA0, 0x38, 0xB8, 0x77, 0x10, 0x39, 0xDF, 0xD5, 0x20, 0x39, 0xE9, 0x01, 0x90, -0x3B, 0xC8, 0xF1, 0xA0, 0x3C, 0x6F, 0x00, 0x90, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, -0xFF, 0xE1, 0x9C, 0x00, 0x00, 0xFF, 0xFF, 0xF1, 0xF0, 0x01, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, -0x09, 0x4C, 0x4D, 0x54, 0x00, 0x46, 0x4E, 0x53, 0x54, 0x00, 0x46, 0x4E, 0x54, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, - -/* America/North_Dakota/Center */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x3A, 0x90, -0x9F, 0xBB, 0x07, 0x80, 0xA0, 0x86, 0x1C, 0x90, 0xA1, 0x9A, 0xE9, 0x80, 0xCB, 0x89, 0x0C, 0x90, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x18, 0x00, 0xFA, 0xF8, 0x75, 0x10, 0xFB, 0xE8, 0x58, 0x00, -0xFC, 0xD8, 0x57, 0x10, 0xFD, 0xC8, 0x3A, 0x00, 0xFE, 0xB8, 0x39, 0x10, 0xFF, 0xA8, 0x1C, 0x00, -0x00, 0x98, 0x1B, 0x10, 0x01, 0x87, 0xFE, 0x00, 0x02, 0x77, 0xFD, 0x10, 0x03, 0x71, 0x1A, 0x80, -0x04, 0x61, 0x19, 0x90, 0x05, 0x50, 0xFC, 0x80, 0x06, 0x40, 0xFB, 0x90, 0x07, 0x30, 0xDE, 0x80, -0x07, 0x8D, 0x35, 0x90, 0x09, 0x10, 0xC0, 0x80, 0x09, 0xAD, 0xB1, 0x10, 0x0A, 0xF0, 0xA2, 0x80, -0x0B, 0xE0, 0xA1, 0x90, 0x0C, 0xD9, 0xBF, 0x00, 0x0D, 0xC0, 0x83, 0x90, 0x0E, 0xB9, 0xA1, 0x00, -0x0F, 0xA9, 0xA0, 0x10, 0x10, 0x99, 0x83, 0x00, 0x11, 0x89, 0x82, 0x10, 0x12, 0x79, 0x65, 0x00, -0x13, 0x69, 0x64, 0x10, 0x14, 0x59, 0x47, 0x00, 0x15, 0x49, 0x46, 0x10, 0x16, 0x39, 0x29, 0x00, -0x17, 0x29, 0x28, 0x10, 0x18, 0x22, 0x45, 0x80, 0x19, 0x09, 0x0A, 0x10, 0x1A, 0x02, 0x27, 0x80, -0x1A, 0xF2, 0x26, 0x90, 0x1B, 0xE2, 0x09, 0x80, 0x1C, 0xD2, 0x08, 0x90, 0x1D, 0xC1, 0xEB, 0x80, -0x1E, 0xB1, 0xEA, 0x90, 0x1F, 0xA1, 0xCD, 0x80, 0x20, 0x76, 0x1D, 0x10, 0x21, 0x81, 0xAF, 0x80, -0x22, 0x55, 0xFF, 0x10, 0x23, 0x6A, 0xCC, 0x00, 0x24, 0x35, 0xE1, 0x10, 0x25, 0x4A, 0xAE, 0x00, -0x26, 0x15, 0xC3, 0x10, 0x27, 0x2A, 0x90, 0x00, 0x27, 0xFE, 0xDF, 0x90, 0x29, 0x0A, 0x72, 0x00, -0x29, 0xDE, 0xC1, 0x90, 0x2A, 0xEA, 0x54, 0x00, 0x2B, 0xBE, 0x95, 0x80, 0x2C, 0xD3, 0x62, 0x70, -0x2D, 0x9E, 0x77, 0x80, 0x2E, 0xB3, 0x44, 0x70, 0x2F, 0x7E, 0x59, 0x80, 0x30, 0x93, 0x26, 0x70, -0x31, 0x67, 0x76, 0x00, 0x32, 0x73, 0x08, 0x70, 0x33, 0x47, 0x58, 0x00, 0x34, 0x52, 0xEA, 0x70, -0x35, 0x27, 0x3A, 0x00, 0x36, 0x32, 0xCC, 0x70, 0x37, 0x07, 0x1C, 0x00, 0x38, 0x1B, 0xE8, 0xF0, -0x38, 0xE6, 0xFE, 0x00, 0x39, 0xFB, 0xCA, 0xF0, 0x3A, 0xC6, 0xE0, 0x00, 0x3B, 0xDB, 0xAC, 0xF0, -0x3C, 0xAF, 0xFC, 0x80, 0x3D, 0xBB, 0x8E, 0xF0, 0x3E, 0x8F, 0xDE, 0x80, 0x3F, 0x9B, 0x70, 0xF0, -0x40, 0x6F, 0xC0, 0x80, 0x41, 0x84, 0x8D, 0x70, 0x42, 0x4F, 0xA2, 0x80, 0x43, 0x64, 0x6F, 0x70, -0x44, 0x2F, 0x84, 0x80, 0x45, 0x44, 0x51, 0x70, 0x45, 0xF3, 0xB7, 0x00, 0x47, 0x2D, 0x6D, 0xF0, -0x47, 0xD3, 0x99, 0x00, 0x49, 0x0D, 0x4F, 0xF0, 0x49, 0xB3, 0x7B, 0x00, 0x4A, 0xED, 0x31, 0xF0, -0x4B, 0x9C, 0x97, 0x80, 0x4C, 0xD6, 0x4E, 0x70, 0x4D, 0x7C, 0x79, 0x80, 0x4E, 0xB6, 0x30, 0x70, -0x4F, 0x5C, 0x5B, 0x80, 0x50, 0x96, 0x12, 0x70, 0x51, 0x3C, 0x3D, 0x80, 0x52, 0x75, 0xF4, 0x70, -0x53, 0x1C, 0x1F, 0x80, 0x54, 0x55, 0xD6, 0x70, 0x54, 0xFC, 0x01, 0x80, 0x56, 0x35, 0xB8, 0x70, -0x56, 0xE5, 0x1E, 0x00, 0x58, 0x1E, 0xD4, 0xF0, 0x58, 0xC5, 0x00, 0x00, 0x59, 0xFE, 0xB6, 0xF0, -0x5A, 0xA4, 0xE2, 0x00, 0x5B, 0xDE, 0x98, 0xF0, 0x5C, 0x84, 0xC4, 0x00, 0x5D, 0xBE, 0x7A, 0xF0, -0x5E, 0x64, 0xA6, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x60, 0x4D, 0xC2, 0x80, 0x61, 0x87, 0x79, 0x70, -0x62, 0x2D, 0xA4, 0x80, 0x63, 0x67, 0x5B, 0x70, 0x64, 0x0D, 0x86, 0x80, 0x65, 0x47, 0x3D, 0x70, -0x65, 0xED, 0x68, 0x80, 0x67, 0x27, 0x1F, 0x70, 0x67, 0xCD, 0x4A, 0x80, 0x69, 0x07, 0x01, 0x70, -0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, 0x6B, 0x96, 0x49, 0x00, 0x6C, 0xCF, 0xFF, 0xF0, -0x6D, 0x76, 0x2B, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, 0x6F, 0x56, 0x0D, 0x00, 0x70, 0x8F, 0xC3, 0xF0, -0x71, 0x35, 0xEF, 0x00, 0x72, 0x6F, 0xA5, 0xF0, 0x73, 0x15, 0xD1, 0x00, 0x74, 0x4F, 0x87, 0xF0, -0x74, 0xFE, 0xED, 0x80, 0x76, 0x38, 0xA4, 0x70, 0x76, 0xDE, 0xCF, 0x80, 0x78, 0x18, 0x86, 0x70, -0x78, 0xBE, 0xB1, 0x80, 0x79, 0xF8, 0x68, 0x70, 0x7A, 0x9E, 0x93, 0x80, 0x7B, 0xD8, 0x4A, 0x70, -0x7C, 0x7E, 0x75, 0x80, 0x7D, 0xB8, 0x2C, 0x70, 0x7E, 0x5E, 0x57, 0x80, 0x7F, 0x98, 0x0E, 0x70, -0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, -0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, -0xB0, 0x01, 0x10, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x14, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, -0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, -0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - -/* America/North_Dakota/New_Salem */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x3A, 0x90, -0x9F, 0xBB, 0x07, 0x80, 0xA0, 0x86, 0x1C, 0x90, 0xA1, 0x9A, 0xE9, 0x80, 0xCB, 0x89, 0x0C, 0x90, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x18, 0x00, 0xFA, 0xF8, 0x75, 0x10, 0xFB, 0xE8, 0x58, 0x00, -0xFC, 0xD8, 0x57, 0x10, 0xFD, 0xC8, 0x3A, 0x00, 0xFE, 0xB8, 0x39, 0x10, 0xFF, 0xA8, 0x1C, 0x00, -0x00, 0x98, 0x1B, 0x10, 0x01, 0x87, 0xFE, 0x00, 0x02, 0x77, 0xFD, 0x10, 0x03, 0x71, 0x1A, 0x80, -0x04, 0x61, 0x19, 0x90, 0x05, 0x50, 0xFC, 0x80, 0x06, 0x40, 0xFB, 0x90, 0x07, 0x30, 0xDE, 0x80, -0x07, 0x8D, 0x35, 0x90, 0x09, 0x10, 0xC0, 0x80, 0x09, 0xAD, 0xB1, 0x10, 0x0A, 0xF0, 0xA2, 0x80, -0x0B, 0xE0, 0xA1, 0x90, 0x0C, 0xD9, 0xBF, 0x00, 0x0D, 0xC0, 0x83, 0x90, 0x0E, 0xB9, 0xA1, 0x00, -0x0F, 0xA9, 0xA0, 0x10, 0x10, 0x99, 0x83, 0x00, 0x11, 0x89, 0x82, 0x10, 0x12, 0x79, 0x65, 0x00, -0x13, 0x69, 0x64, 0x10, 0x14, 0x59, 0x47, 0x00, 0x15, 0x49, 0x46, 0x10, 0x16, 0x39, 0x29, 0x00, -0x17, 0x29, 0x28, 0x10, 0x18, 0x22, 0x45, 0x80, 0x19, 0x09, 0x0A, 0x10, 0x1A, 0x02, 0x27, 0x80, -0x1A, 0xF2, 0x26, 0x90, 0x1B, 0xE2, 0x09, 0x80, 0x1C, 0xD2, 0x08, 0x90, 0x1D, 0xC1, 0xEB, 0x80, -0x1E, 0xB1, 0xEA, 0x90, 0x1F, 0xA1, 0xCD, 0x80, 0x20, 0x76, 0x1D, 0x10, 0x21, 0x81, 0xAF, 0x80, -0x22, 0x55, 0xFF, 0x10, 0x23, 0x6A, 0xCC, 0x00, 0x24, 0x35, 0xE1, 0x10, 0x25, 0x4A, 0xAE, 0x00, -0x26, 0x15, 0xC3, 0x10, 0x27, 0x2A, 0x90, 0x00, 0x27, 0xFE, 0xDF, 0x90, 0x29, 0x0A, 0x72, 0x00, -0x29, 0xDE, 0xC1, 0x90, 0x2A, 0xEA, 0x54, 0x00, 0x2B, 0xBE, 0xA3, 0x90, 0x2C, 0xD3, 0x70, 0x80, -0x2D, 0x9E, 0x85, 0x90, 0x2E, 0xB3, 0x52, 0x80, 0x2F, 0x7E, 0x67, 0x90, 0x30, 0x93, 0x34, 0x80, -0x31, 0x67, 0x84, 0x10, 0x32, 0x73, 0x16, 0x80, 0x33, 0x47, 0x66, 0x10, 0x34, 0x52, 0xF8, 0x80, -0x35, 0x27, 0x48, 0x10, 0x36, 0x32, 0xDA, 0x80, 0x37, 0x07, 0x2A, 0x10, 0x38, 0x1B, 0xF7, 0x00, -0x38, 0xE7, 0x0C, 0x10, 0x39, 0xFB, 0xD9, 0x00, 0x3A, 0xC6, 0xEE, 0x10, 0x3B, 0xDB, 0xBB, 0x00, -0x3C, 0xB0, 0x0A, 0x90, 0x3D, 0xBB, 0x9D, 0x00, 0x3E, 0x8F, 0xEC, 0x90, 0x3F, 0x9B, 0x7F, 0x00, -0x40, 0x6F, 0xC0, 0x80, 0x41, 0x84, 0x8D, 0x70, 0x42, 0x4F, 0xA2, 0x80, 0x43, 0x64, 0x6F, 0x70, -0x44, 0x2F, 0x84, 0x80, 0x45, 0x44, 0x51, 0x70, 0x45, 0xF3, 0xB7, 0x00, 0x47, 0x2D, 0x6D, 0xF0, -0x47, 0xD3, 0x99, 0x00, 0x49, 0x0D, 0x4F, 0xF0, 0x49, 0xB3, 0x7B, 0x00, 0x4A, 0xED, 0x31, 0xF0, -0x4B, 0x9C, 0x97, 0x80, 0x4C, 0xD6, 0x4E, 0x70, 0x4D, 0x7C, 0x79, 0x80, 0x4E, 0xB6, 0x30, 0x70, -0x4F, 0x5C, 0x5B, 0x80, 0x50, 0x96, 0x12, 0x70, 0x51, 0x3C, 0x3D, 0x80, 0x52, 0x75, 0xF4, 0x70, -0x53, 0x1C, 0x1F, 0x80, 0x54, 0x55, 0xD6, 0x70, 0x54, 0xFC, 0x01, 0x80, 0x56, 0x35, 0xB8, 0x70, -0x56, 0xE5, 0x1E, 0x00, 0x58, 0x1E, 0xD4, 0xF0, 0x58, 0xC5, 0x00, 0x00, 0x59, 0xFE, 0xB6, 0xF0, -0x5A, 0xA4, 0xE2, 0x00, 0x5B, 0xDE, 0x98, 0xF0, 0x5C, 0x84, 0xC4, 0x00, 0x5D, 0xBE, 0x7A, 0xF0, -0x5E, 0x64, 0xA6, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x60, 0x4D, 0xC2, 0x80, 0x61, 0x87, 0x79, 0x70, -0x62, 0x2D, 0xA4, 0x80, 0x63, 0x67, 0x5B, 0x70, 0x64, 0x0D, 0x86, 0x80, 0x65, 0x47, 0x3D, 0x70, -0x65, 0xED, 0x68, 0x80, 0x67, 0x27, 0x1F, 0x70, 0x67, 0xCD, 0x4A, 0x80, 0x69, 0x07, 0x01, 0x70, -0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, 0x6B, 0x96, 0x49, 0x00, 0x6C, 0xCF, 0xFF, 0xF0, -0x6D, 0x76, 0x2B, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, 0x6F, 0x56, 0x0D, 0x00, 0x70, 0x8F, 0xC3, 0xF0, -0x71, 0x35, 0xEF, 0x00, 0x72, 0x6F, 0xA5, 0xF0, 0x73, 0x15, 0xD1, 0x00, 0x74, 0x4F, 0x87, 0xF0, -0x74, 0xFE, 0xED, 0x80, 0x76, 0x38, 0xA4, 0x70, 0x76, 0xDE, 0xCF, 0x80, 0x78, 0x18, 0x86, 0x70, -0x78, 0xBE, 0xB1, 0x80, 0x79, 0xF8, 0x68, 0x70, 0x7A, 0x9E, 0x93, 0x80, 0x7B, 0xD8, 0x4A, 0x70, -0x7C, 0x7E, 0x75, 0x80, 0x7D, 0xB8, 0x2C, 0x70, 0x7E, 0x5E, 0x57, 0x80, 0x7F, 0x98, 0x0E, 0x70, -0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, -0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, -0xB0, 0x01, 0x10, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x14, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, -0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, -0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - -/* America/Panama */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x8B, 0xF4, 0x61, 0xE8, -0x01, 0xFF, 0xFF, 0xB5, 0x18, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0x43, 0x4D, 0x54, -0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Pangnirtung */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x25, 0x9E, 0xB8, 0x85, 0x60, -0x9F, 0xBA, 0xDD, 0x50, 0xA0, 0xCF, 0xC6, 0x60, 0xA1, 0xA2, 0x8C, 0x30, 0xCB, 0x88, 0xE2, 0x60, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xED, 0xD0, 0xF7, 0x2F, 0x30, 0x40, 0xF8, 0x28, 0x5B, 0xC0, -0x13, 0x69, 0x39, 0xE0, 0x14, 0x59, 0x1C, 0xD0, 0x15, 0x49, 0x1B, 0xE0, 0x16, 0x38, 0xFE, 0xD0, -0x17, 0x28, 0xFD, 0xE0, 0x18, 0x22, 0x1B, 0x50, 0x19, 0x08, 0xDF, 0xE0, 0x1A, 0x01, 0xFD, 0x50, -0x1A, 0xF1, 0xFC, 0x60, 0x1B, 0xE1, 0xDF, 0x50, 0x1C, 0xD1, 0xDE, 0x60, 0x1D, 0xC1, 0xC1, 0x50, -0x1E, 0xB1, 0xC0, 0x60, 0x1F, 0xA1, 0xA3, 0x50, 0x20, 0x75, 0xF2, 0xE0, 0x21, 0x81, 0x85, 0x50, -0x22, 0x55, 0xD4, 0xE0, 0x23, 0x6A, 0xA1, 0xD0, 0x24, 0x35, 0xB6, 0xE0, 0x25, 0x4A, 0x83, 0xD0, -0x26, 0x15, 0x98, 0xE0, 0x27, 0x2A, 0x65, 0xD0, 0x27, 0xFE, 0xB5, 0x60, 0x29, 0x0A, 0x47, 0xD0, -0x29, 0xDE, 0x97, 0x60, 0x2A, 0xEA, 0x29, 0xD0, 0x2B, 0xBE, 0x79, 0x60, 0x2C, 0xD3, 0x46, 0x50, -0x2D, 0x9E, 0x5B, 0x60, 0x2E, 0xB3, 0x28, 0x50, 0x2F, 0x7E, 0x3D, 0x60, 0x30, 0x93, 0x18, 0x60, -0x31, 0x67, 0x67, 0xF0, 0x32, 0x72, 0xFA, 0x60, 0x33, 0x47, 0x49, 0xF0, 0x34, 0x52, 0xDC, 0x60, -0x35, 0x27, 0x2B, 0xF0, 0x36, 0x32, 0xBE, 0x60, 0x37, 0x07, 0x0D, 0xF0, 0x38, 0x1B, 0xDA, 0xE0, -0x38, 0xE6, 0xFE, 0x00, 0x39, 0xFB, 0xCA, 0xF0, 0x3A, 0xC6, 0xD1, 0xF0, 0x3B, 0xDB, 0x9E, 0xE0, -0x3C, 0xAF, 0xEE, 0x70, 0x3D, 0xBB, 0x80, 0xE0, 0x3E, 0x8F, 0xD0, 0x70, 0x3F, 0x9B, 0x62, 0xE0, -0x40, 0x6F, 0xB2, 0x70, 0x41, 0x84, 0x7F, 0x60, 0x42, 0x4F, 0x94, 0x70, 0x43, 0x64, 0x61, 0x60, -0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x43, 0x60, 0x45, 0xF3, 0xA8, 0xF0, 0x47, 0x2D, 0x5F, 0xE0, -0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x41, 0xE0, 0x49, 0xB3, 0x6C, 0xF0, 0x4A, 0xED, 0x23, 0xE0, -0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x40, 0x60, 0x4D, 0x7C, 0x6B, 0x70, 0x4E, 0xB6, 0x22, 0x60, -0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x04, 0x60, 0x51, 0x3C, 0x2F, 0x70, 0x52, 0x75, 0xE6, 0x60, -0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xC8, 0x60, 0x54, 0xFB, 0xF3, 0x70, 0x56, 0x35, 0xAA, 0x60, -0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, 0x58, 0xC4, 0xF1, 0xF0, 0x59, 0xFE, 0xA8, 0xE0, -0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, 0x5C, 0x84, 0xB5, 0xF0, 0x5D, 0xBE, 0x6C, 0xE0, -0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, 0x60, 0x4D, 0xB4, 0x70, 0x61, 0x87, 0x6B, 0x60, -0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, 0x64, 0x0D, 0x78, 0x70, 0x65, 0x47, 0x2F, 0x60, -0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, 0x67, 0xCD, 0x3C, 0x70, 0x69, 0x06, 0xF3, 0x60, -0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, 0x6B, 0x96, 0x3A, 0xF0, 0x6C, 0xCF, 0xF1, 0xE0, -0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, 0x6F, 0x55, 0xFE, 0xF0, 0x70, 0x8F, 0xB5, 0xE0, -0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, 0x73, 0x15, 0xC2, 0xF0, 0x74, 0x4F, 0x79, 0xE0, -0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, 0x76, 0xDE, 0xC1, 0x70, 0x78, 0x18, 0x78, 0x60, -0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, 0x7A, 0x9E, 0x85, 0x70, 0x7B, 0xD8, 0x3C, 0x60, -0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, 0x7E, 0x5E, 0x49, 0x70, 0x7F, 0x98, 0x00, 0x60, -0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x01, 0x04, 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, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x07, 0x08, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0xFF, 0xFF, 0xD5, -0xD0, 0x01, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, -0xFF, 0xD5, 0xD0, 0x01, 0x0C, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, -0x15, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x19, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x1D, 0xFF, 0xFF, 0xB9, -0xB0, 0x01, 0x21, 0x41, 0x44, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x57, 0x54, 0x00, 0x41, -0x50, 0x54, 0x00, 0x41, 0x44, 0x44, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, -0x43, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Paramaribo */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0x91, 0x05, 0x8E, 0xB8, -0xBE, 0x2A, 0x4B, 0xC4, 0xD2, 0x62, 0x2C, 0xB4, 0x0B, 0x11, 0x58, 0xB8, 0x1B, 0xBE, 0x31, 0xB8, -0x01, 0x02, 0x03, 0x04, 0x05, 0xFF, 0xFF, 0xCC, 0x48, 0x00, 0x00, 0xFF, 0xFF, 0xCC, 0x3C, 0x00, -0x04, 0xFF, 0xFF, 0xCC, 0x4C, 0x00, 0x04, 0xFF, 0xFF, 0xCE, 0xC8, 0x00, 0x08, 0xFF, 0xFF, 0xCE, -0xC8, 0x00, 0x0D, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x50, 0x4D, 0x54, -0x00, 0x4E, 0x45, 0x47, 0x54, 0x00, 0x53, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Phoenix */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x9E, 0xA6, 0x3A, 0x90, -0x9F, 0xBB, 0x07, 0x80, 0xA0, 0x86, 0x1C, 0x90, 0xA1, 0x9A, 0xE9, 0x80, 0xCB, 0x89, 0x0C, 0x90, -0xCF, 0x17, 0xDF, 0x1C, 0xCF, 0x8F, 0xE5, 0xAC, 0xD0, 0x81, 0x1A, 0x1C, 0xFA, 0xF8, 0x75, 0x10, -0xFB, 0xE8, 0x58, 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x01, 0xFF, 0xFF, -0xAB, 0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, -0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, - -/* America/Port-au-Prince */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x9C, 0x6E, 0x71, 0xFC, -0x19, 0x1B, 0x46, 0xD0, 0x1A, 0x01, 0xEF, 0x40, 0x1A, 0xF1, 0xEE, 0x50, 0x1B, 0xE1, 0xD1, 0x40, -0x1C, 0xD1, 0xD0, 0x50, 0x1D, 0xC1, 0xB3, 0x40, 0x1E, 0xB1, 0xB2, 0x50, 0x1F, 0xA1, 0x95, 0x40, -0x20, 0x91, 0x94, 0x50, 0x21, 0x81, 0x77, 0x40, 0x22, 0x55, 0xD4, 0xE0, 0x23, 0x6A, 0xAF, 0xE0, -0x24, 0x35, 0xB6, 0xE0, 0x25, 0x4A, 0x91, 0xE0, 0x26, 0x15, 0x98, 0xE0, 0x27, 0x2A, 0x73, 0xE0, -0x27, 0xFE, 0xB5, 0x60, 0x29, 0x0A, 0x55, 0xE0, 0x29, 0xDE, 0x97, 0x60, 0x2A, 0xEA, 0x37, 0xE0, -0x2B, 0xBE, 0x79, 0x60, 0x2C, 0xD3, 0x54, 0x60, 0x2D, 0x9E, 0x5B, 0x60, 0x2E, 0xB3, 0x36, 0x60, -0x2F, 0x7E, 0x3D, 0x60, 0x30, 0x93, 0x18, 0x60, 0x31, 0x67, 0x59, 0xE0, 0x32, 0x72, 0xFA, 0x60, -0x33, 0x47, 0x3B, 0xE0, 0x34, 0x52, 0xDC, 0x60, 0x42, 0x4F, 0x78, 0x50, 0x43, 0x64, 0x45, 0x40, -0x44, 0x2F, 0x5A, 0x50, 0x45, 0x44, 0x27, 0x40, 0x46, 0x0F, 0x3C, 0x50, 0x47, 0x24, 0x09, 0x40, -0x47, 0xF8, 0x58, 0xD0, 0x49, 0x03, 0xEB, 0x40, 0x49, 0xD8, 0x3A, 0xD0, 0x4A, 0xE3, 0xCD, 0x40, -0x4B, 0xB8, 0x1C, 0xD0, 0x4C, 0xCC, 0xE9, 0xC0, 0x4D, 0x97, 0xFE, 0xD0, 0x4E, 0xAC, 0xCB, 0xC0, -0x4F, 0x77, 0xE0, 0xD0, 0x50, 0x8C, 0xAD, 0xC0, 0x51, 0x60, 0xFD, 0x50, 0x52, 0x6C, 0x8F, 0xC0, -0x53, 0x40, 0xDF, 0x50, 0x54, 0x4C, 0x71, 0xC0, 0x55, 0x20, 0xC1, 0x50, 0x56, 0x2C, 0x53, 0xC0, -0x57, 0x00, 0xA3, 0x50, 0x58, 0x15, 0x70, 0x40, 0x58, 0xE0, 0x85, 0x50, 0x59, 0xF5, 0x52, 0x40, -0x5A, 0xC0, 0x67, 0x50, 0x5B, 0xD5, 0x34, 0x40, 0x5C, 0xA9, 0x83, 0xD0, 0x5D, 0xB5, 0x16, 0x40, -0x5E, 0x89, 0x65, 0xD0, 0x5F, 0x94, 0xF8, 0x40, 0x60, 0x69, 0x47, 0xD0, 0x61, 0x7E, 0x14, 0xC0, -0x62, 0x49, 0x29, 0xD0, 0x63, 0x5D, 0xF6, 0xC0, 0x64, 0x29, 0x0B, 0xD0, 0x65, 0x3D, 0xD8, 0xC0, -0x66, 0x12, 0x28, 0x50, 0x67, 0x1D, 0xBA, 0xC0, 0x67, 0xF2, 0x0A, 0x50, 0x68, 0xFD, 0x9C, 0xC0, -0x69, 0xD1, 0xEC, 0x50, 0x6A, 0xDD, 0x7E, 0xC0, 0x6B, 0xB1, 0xCE, 0x50, 0x6C, 0xC6, 0x9B, 0x40, -0x6D, 0x91, 0xB0, 0x50, 0x6E, 0xA6, 0x7D, 0x40, 0x6F, 0x71, 0x92, 0x50, 0x70, 0x86, 0x5F, 0x40, -0x71, 0x5A, 0xAE, 0xD0, 0x72, 0x66, 0x41, 0x40, 0x73, 0x3A, 0x90, 0xD0, 0x74, 0x46, 0x23, 0x40, -0x75, 0x1A, 0x72, 0xD0, 0x76, 0x2F, 0x3F, 0xC0, 0x76, 0xFA, 0x54, 0xD0, 0x78, 0x0F, 0x21, 0xC0, -0x78, 0xDA, 0x36, 0xD0, 0x79, 0xEF, 0x03, 0xC0, 0x7A, 0xBA, 0x18, 0xD0, 0x7B, 0xCE, 0xE5, 0xC0, -0x7C, 0xA3, 0x35, 0x50, 0x7D, 0xAE, 0xC7, 0xC0, 0x7E, 0x83, 0x17, 0x50, 0x7F, 0x8E, 0xA9, 0xC0, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0xFF, 0xFF, 0xBC, 0x44, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x05, 0xFF, 0xFF, 0xB9, -0xB0, 0x00, 0x09, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x05, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0x50, -0x50, 0x4D, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Porto_Acre */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x86, 0x90, -0xB8, 0x0F, 0x66, 0x00, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xF1, 0x50, 0x50, 0xBA, 0xDE, 0x90, 0x40, -0xDA, 0x38, 0xCA, 0x50, 0xDA, 0xEC, 0x16, 0x50, 0xDC, 0x19, 0xFD, 0xD0, 0xDC, 0xB9, 0x75, 0x40, -0xDD, 0xFB, 0x31, 0x50, 0xDE, 0x9B, 0xFA, 0x40, 0xDF, 0xDD, 0xB6, 0x50, 0xE0, 0x54, 0x4F, 0x40, -0xF4, 0x98, 0x1B, 0xD0, 0xF5, 0x05, 0x7A, 0x40, 0xF6, 0xC0, 0x80, 0x50, 0xF7, 0x0E, 0x3A, 0xC0, -0xF8, 0x51, 0x48, 0x50, 0xF8, 0xC7, 0xE1, 0x40, 0xFA, 0x0A, 0xEE, 0xD0, 0xFA, 0xA9, 0x14, 0xC0, -0xFB, 0xEC, 0x22, 0x50, 0xFC, 0x8B, 0x99, 0xC0, 0x1D, 0xC9, 0xAA, 0x50, 0x1E, 0x78, 0xF3, 0xC0, -0x1F, 0xA0, 0x51, 0xD0, 0x20, 0x33, 0xEB, 0xC0, 0x21, 0x81, 0x85, 0x50, 0x22, 0x0B, 0xE4, 0xC0, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xC0, -0x70, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0x4C, -0x4D, 0x54, 0x00, 0x41, 0x43, 0x53, 0x54, 0x00, 0x41, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, - -/* America/Port_of_Spain */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x93, 0x37, 0x33, 0xAC, -0x01, 0xFF, 0xFF, 0xC6, 0x54, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Porto_Velho */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x82, 0xE8, -0xB8, 0x0F, 0x57, 0xF0, 0xB8, 0xFD, 0x4E, 0xB0, 0xB9, 0xF1, 0x42, 0x40, 0xBA, 0xDE, 0x82, 0x30, -0xDA, 0x38, 0xBC, 0x40, 0xDA, 0xEC, 0x08, 0x40, 0xDC, 0x19, 0xEF, 0xC0, 0xDC, 0xB9, 0x67, 0x30, -0xDD, 0xFB, 0x23, 0x40, 0xDE, 0x9B, 0xEC, 0x30, 0xDF, 0xDD, 0xA8, 0x40, 0xE0, 0x54, 0x41, 0x30, -0xF4, 0x98, 0x0D, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0xC0, 0x72, 0x40, 0xF7, 0x0E, 0x2C, 0xB0, -0xF8, 0x51, 0x3A, 0x40, 0xF8, 0xC7, 0xD3, 0x30, 0xFA, 0x0A, 0xE0, 0xC0, 0xFA, 0xA9, 0x06, 0xB0, -0xFB, 0xEC, 0x14, 0x40, 0xFC, 0x8B, 0x8B, 0xB0, 0x1D, 0xC9, 0x9C, 0x40, 0x1E, 0x78, 0xE5, 0xB0, -0x1F, 0xA0, 0x43, 0xC0, 0x20, 0x33, 0xDD, 0xB0, 0x21, 0x81, 0x77, 0x40, 0x22, 0x0B, 0xD6, 0xB0, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xC4, -0x18, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x09, 0x4C, -0x4D, 0x54, 0x00, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, - -/* America/Puerto_Rico */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xCB, 0xF6, 0x32, 0xC0, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xED, 0xD0, 0x02, 0x01, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, -0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0x41, 0x53, 0x54, -0x00, 0x41, 0x50, 0x54, 0x00, 0x41, 0x57, 0x54, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, - -/* America/Rainy_River */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xB8, 0xA1, 0x80, -0x9F, 0xC0, 0x3F, 0x70, 0xC8, 0xF8, 0x57, 0x60, 0xCB, 0x88, 0xFE, 0x80, 0xD2, 0x23, 0xF4, 0x70, -0xD2, 0x61, 0x09, 0xF0, 0x08, 0x20, 0xCF, 0x80, 0x09, 0x10, 0xB2, 0x70, 0x0A, 0x00, 0xB1, 0x80, -0x0A, 0xF0, 0x94, 0x70, 0x0B, 0xE0, 0x93, 0x80, 0x0C, 0xD9, 0xB0, 0xF0, 0x0D, 0xC0, 0x75, 0x80, -0x0E, 0xB9, 0x92, 0xF0, 0x0F, 0xA9, 0x92, 0x00, 0x10, 0x99, 0x74, 0xF0, 0x11, 0x89, 0x74, 0x00, -0x12, 0x79, 0x56, 0xF0, 0x13, 0x69, 0x56, 0x00, 0x14, 0x59, 0x38, 0xF0, 0x15, 0x49, 0x38, 0x00, -0x16, 0x39, 0x1A, 0xF0, 0x17, 0x29, 0x1A, 0x00, 0x18, 0x22, 0x37, 0x70, 0x19, 0x08, 0xFC, 0x00, -0x1A, 0x02, 0x19, 0x70, 0x1A, 0xF2, 0x18, 0x80, 0x1B, 0xE1, 0xFB, 0x70, 0x1C, 0xD1, 0xFA, 0x80, -0x1D, 0xC1, 0xDD, 0x70, 0x1E, 0xB1, 0xDC, 0x80, 0x1F, 0xA1, 0xBF, 0x70, 0x20, 0x76, 0x0F, 0x00, -0x21, 0x81, 0xA1, 0x70, 0x22, 0x55, 0xF1, 0x00, 0x23, 0x6A, 0xBD, 0xF0, 0x24, 0x35, 0xD3, 0x00, -0x25, 0x4A, 0x9F, 0xF0, 0x26, 0x15, 0xB5, 0x00, 0x27, 0x2A, 0x81, 0xF0, 0x27, 0xFE, 0xD1, 0x80, -0x29, 0x0A, 0x63, 0xF0, 0x29, 0xDE, 0xB3, 0x80, 0x2A, 0xEA, 0x45, 0xF0, 0x2B, 0xBE, 0x95, 0x80, -0x2C, 0xD3, 0x62, 0x70, 0x2D, 0x9E, 0x77, 0x80, 0x2E, 0xB3, 0x44, 0x70, 0x2F, 0x7E, 0x59, 0x80, -0x30, 0x93, 0x26, 0x70, 0x31, 0x67, 0x76, 0x00, 0x32, 0x73, 0x08, 0x70, 0x33, 0x47, 0x58, 0x00, -0x34, 0x52, 0xEA, 0x70, 0x35, 0x27, 0x3A, 0x00, 0x36, 0x32, 0xCC, 0x70, 0x37, 0x07, 0x1C, 0x00, -0x38, 0x1B, 0xE8, 0xF0, 0x38, 0xE6, 0xFE, 0x00, 0x39, 0xFB, 0xCA, 0xF0, 0x3A, 0xC6, 0xE0, 0x00, -0x3B, 0xDB, 0xAC, 0xF0, 0x3C, 0xAF, 0xFC, 0x80, 0x3D, 0xBB, 0x8E, 0xF0, 0x3E, 0x8F, 0xDE, 0x80, -0x3F, 0x9B, 0x70, 0xF0, 0x40, 0x6F, 0xC0, 0x80, 0x41, 0x84, 0x8D, 0x70, 0x42, 0x4F, 0xA2, 0x80, -0x43, 0x64, 0x6F, 0x70, 0x44, 0x2F, 0x84, 0x80, 0x45, 0x44, 0x51, 0x70, 0x45, 0xF3, 0xB7, 0x00, -0x47, 0x2D, 0x6D, 0xF0, 0x47, 0xD3, 0x99, 0x00, 0x49, 0x0D, 0x4F, 0xF0, 0x49, 0xB3, 0x7B, 0x00, -0x4A, 0xED, 0x31, 0xF0, 0x4B, 0x9C, 0x97, 0x80, 0x4C, 0xD6, 0x4E, 0x70, 0x4D, 0x7C, 0x79, 0x80, -0x4E, 0xB6, 0x30, 0x70, 0x4F, 0x5C, 0x5B, 0x80, 0x50, 0x96, 0x12, 0x70, 0x51, 0x3C, 0x3D, 0x80, -0x52, 0x75, 0xF4, 0x70, 0x53, 0x1C, 0x1F, 0x80, 0x54, 0x55, 0xD6, 0x70, 0x54, 0xFC, 0x01, 0x80, -0x56, 0x35, 0xB8, 0x70, 0x56, 0xE5, 0x1E, 0x00, 0x58, 0x1E, 0xD4, 0xF0, 0x58, 0xC5, 0x00, 0x00, -0x59, 0xFE, 0xB6, 0xF0, 0x5A, 0xA4, 0xE2, 0x00, 0x5B, 0xDE, 0x98, 0xF0, 0x5C, 0x84, 0xC4, 0x00, -0x5D, 0xBE, 0x7A, 0xF0, 0x5E, 0x64, 0xA6, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x60, 0x4D, 0xC2, 0x80, -0x61, 0x87, 0x79, 0x70, 0x62, 0x2D, 0xA4, 0x80, 0x63, 0x67, 0x5B, 0x70, 0x64, 0x0D, 0x86, 0x80, -0x65, 0x47, 0x3D, 0x70, 0x65, 0xED, 0x68, 0x80, 0x67, 0x27, 0x1F, 0x70, 0x67, 0xCD, 0x4A, 0x80, -0x69, 0x07, 0x01, 0x70, 0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, 0x6B, 0x96, 0x49, 0x00, -0x6C, 0xCF, 0xFF, 0xF0, 0x6D, 0x76, 0x2B, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, 0x6F, 0x56, 0x0D, 0x00, -0x70, 0x8F, 0xC3, 0xF0, 0x71, 0x35, 0xEF, 0x00, 0x72, 0x6F, 0xA5, 0xF0, 0x73, 0x15, 0xD1, 0x00, -0x74, 0x4F, 0x87, 0xF0, 0x74, 0xFE, 0xED, 0x80, 0x76, 0x38, 0xA4, 0x70, 0x76, 0xDE, 0xCF, 0x80, -0x78, 0x18, 0x86, 0x70, 0x78, 0xBE, 0xB1, 0x80, 0x79, 0xF8, 0x68, 0x70, 0x7A, 0x9E, 0x93, 0x80, -0x7B, 0xD8, 0x4A, 0x70, 0x7C, 0x7E, 0x75, 0x80, 0x7D, 0xB8, 0x2C, 0x70, 0x7E, 0x5E, 0x57, 0x80, -0x7F, 0x98, 0x0E, 0x70, 0x00, 0x01, 0x00, 0x02, 0x03, 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, 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, -0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, -0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, -0x01, 0x0C, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, -0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - -/* America/Rankin_Inlet */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x19, 0x9E, 0xB8, 0xA1, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0xCF, 0xE2, 0x80, 0xA1, 0xA2, 0xA8, 0x50, 0xCB, 0x88, 0xFE, 0x80, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, 0xF7, 0x2F, 0x4C, 0x60, 0xF8, 0x28, 0x77, 0xE0, -0x13, 0x69, 0x56, 0x00, 0x14, 0x59, 0x38, 0xF0, 0x15, 0x49, 0x38, 0x00, 0x16, 0x39, 0x1A, 0xF0, -0x17, 0x29, 0x1A, 0x00, 0x18, 0x22, 0x37, 0x70, 0x19, 0x08, 0xFC, 0x00, 0x1A, 0x02, 0x19, 0x70, -0x1A, 0xF2, 0x18, 0x80, 0x1B, 0xE1, 0xFB, 0x70, 0x1C, 0xD1, 0xFA, 0x80, 0x1D, 0xC1, 0xDD, 0x70, -0x1E, 0xB1, 0xDC, 0x80, 0x1F, 0xA1, 0xBF, 0x70, 0x20, 0x76, 0x0F, 0x00, 0x21, 0x81, 0xA1, 0x70, -0x22, 0x55, 0xF1, 0x00, 0x23, 0x6A, 0xBD, 0xF0, 0x24, 0x35, 0xD3, 0x00, 0x25, 0x4A, 0x9F, 0xF0, -0x26, 0x15, 0xB5, 0x00, 0x27, 0x2A, 0x81, 0xF0, 0x27, 0xFE, 0xD1, 0x80, 0x29, 0x0A, 0x63, 0xF0, -0x29, 0xDE, 0xB3, 0x80, 0x2A, 0xEA, 0x45, 0xF0, 0x2B, 0xBE, 0x95, 0x80, 0x2C, 0xD3, 0x62, 0x70, -0x2D, 0x9E, 0x77, 0x80, 0x2E, 0xB3, 0x44, 0x70, 0x2F, 0x7E, 0x59, 0x80, 0x30, 0x93, 0x26, 0x70, -0x31, 0x67, 0x76, 0x00, 0x32, 0x73, 0x08, 0x70, 0x33, 0x47, 0x58, 0x00, 0x34, 0x52, 0xEA, 0x70, -0x35, 0x27, 0x3A, 0x00, 0x36, 0x32, 0xCC, 0x70, 0x37, 0x07, 0x1C, 0x00, 0x38, 0x1B, 0xE8, 0xF0, -0x38, 0xE6, 0xFE, 0x00, 0x39, 0xFB, 0xCA, 0xF0, 0x3A, 0xC6, 0xE0, 0x00, 0x3B, 0xDB, 0xAC, 0xF0, -0x3C, 0xAF, 0xFC, 0x80, 0x3D, 0xBB, 0x8E, 0xF0, 0x3E, 0x8F, 0xDE, 0x80, 0x3F, 0x9B, 0x70, 0xF0, -0x40, 0x6F, 0xC0, 0x80, 0x41, 0x84, 0x8D, 0x70, 0x42, 0x4F, 0xA2, 0x80, 0x43, 0x64, 0x6F, 0x70, -0x44, 0x2F, 0x84, 0x80, 0x45, 0x44, 0x51, 0x70, 0x45, 0xF3, 0xB7, 0x00, 0x47, 0x2D, 0x6D, 0xF0, -0x47, 0xD3, 0x99, 0x00, 0x49, 0x0D, 0x4F, 0xF0, 0x49, 0xB3, 0x7B, 0x00, 0x4A, 0xED, 0x31, 0xF0, -0x4B, 0x9C, 0x97, 0x80, 0x4C, 0xD6, 0x4E, 0x70, 0x4D, 0x7C, 0x79, 0x80, 0x4E, 0xB6, 0x30, 0x70, -0x4F, 0x5C, 0x5B, 0x80, 0x50, 0x96, 0x12, 0x70, 0x51, 0x3C, 0x3D, 0x80, 0x52, 0x75, 0xF4, 0x70, -0x53, 0x1C, 0x1F, 0x80, 0x54, 0x55, 0xD6, 0x70, 0x54, 0xFC, 0x01, 0x80, 0x56, 0x35, 0xB8, 0x70, -0x56, 0xE5, 0x1E, 0x00, 0x58, 0x1E, 0xD4, 0xF0, 0x58, 0xC5, 0x00, 0x00, 0x59, 0xFE, 0xB6, 0xF0, -0x5A, 0xA4, 0xE2, 0x00, 0x5B, 0xDE, 0x98, 0xF0, 0x5C, 0x84, 0xC4, 0x00, 0x5D, 0xBE, 0x7A, 0xF0, -0x5E, 0x64, 0xA6, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x60, 0x4D, 0xC2, 0x80, 0x61, 0x87, 0x79, 0x70, -0x62, 0x2D, 0xA4, 0x80, 0x63, 0x67, 0x5B, 0x70, 0x64, 0x0D, 0x86, 0x80, 0x65, 0x47, 0x3D, 0x70, -0x65, 0xED, 0x68, 0x80, 0x67, 0x27, 0x1F, 0x70, 0x67, 0xCD, 0x4A, 0x80, 0x69, 0x07, 0x01, 0x70, -0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, 0x6B, 0x96, 0x49, 0x00, 0x6C, 0xCF, 0xFF, 0xF0, -0x6D, 0x76, 0x2B, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, 0x6F, 0x56, 0x0D, 0x00, 0x70, 0x8F, 0xC3, 0xF0, -0x71, 0x35, 0xEF, 0x00, 0x72, 0x6F, 0xA5, 0xF0, 0x73, 0x15, 0xD1, 0x00, 0x74, 0x4F, 0x87, 0xF0, -0x74, 0xFE, 0xED, 0x80, 0x76, 0x38, 0xA4, 0x70, 0x76, 0xDE, 0xCF, 0x80, 0x78, 0x18, 0x86, 0x70, -0x78, 0xBE, 0xB1, 0x80, 0x79, 0xF8, 0x68, 0x70, 0x7A, 0x9E, 0x93, 0x80, 0x7B, 0xD8, 0x4A, 0x70, -0x7C, 0x7E, 0x75, 0x80, 0x7D, 0xB8, 0x2C, 0x70, 0x7E, 0x5E, 0x57, 0x80, 0x7F, 0x98, 0x0E, 0x70, -0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x01, 0x04, 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, 0x05, 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, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xB9, -0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, -0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x10, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, -0x15, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, -0x00, 0x43, 0x44, 0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - -/* America/Recife */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x67, 0xB8, -0xB8, 0x0F, 0x49, 0xE0, 0xB8, 0xFD, 0x40, 0xA0, 0xB9, 0xF1, 0x34, 0x30, 0xBA, 0xDE, 0x74, 0x20, -0xDA, 0x38, 0xAE, 0x30, 0xDA, 0xEB, 0xFA, 0x30, 0xDC, 0x19, 0xE1, 0xB0, 0xDC, 0xB9, 0x59, 0x20, -0xDD, 0xFB, 0x15, 0x30, 0xDE, 0x9B, 0xDE, 0x20, 0xDF, 0xDD, 0x9A, 0x30, 0xE0, 0x54, 0x33, 0x20, -0xF4, 0x97, 0xFF, 0xB0, 0xF5, 0x05, 0x5E, 0x20, 0xF6, 0xC0, 0x64, 0x30, 0xF7, 0x0E, 0x1E, 0xA0, -0xF8, 0x51, 0x2C, 0x30, 0xF8, 0xC7, 0xC5, 0x20, 0xFA, 0x0A, 0xD2, 0xB0, 0xFA, 0xA8, 0xF8, 0xA0, -0xFB, 0xEC, 0x06, 0x30, 0xFC, 0x8B, 0x7D, 0xA0, 0x1D, 0xC9, 0x8E, 0x30, 0x1E, 0x78, 0xD7, 0xA0, -0x1F, 0xA0, 0x35, 0xB0, 0x20, 0x33, 0xCF, 0xA0, 0x21, 0x81, 0x69, 0x30, 0x22, 0x0B, 0xC8, 0xA0, -0x23, 0x58, 0x10, 0xB0, 0x23, 0xE2, 0x70, 0x20, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xD4, 0xC7, 0x20, -0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xB8, 0x85, 0x20, 0x39, 0xDF, 0xE3, 0x30, 0x39, 0xE9, 0x0F, 0xA0, -0x3B, 0xC8, 0xFF, 0xB0, 0x3C, 0x6F, 0x0E, 0xA0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, -0xFF, 0xDF, 0x48, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, -0x09, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, - -/* America/Regina */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x86, 0xFD, 0x93, 0x1C, -0x9E, 0xB8, 0xAF, 0x90, 0x9F, 0xC0, 0x4D, 0x80, 0xB5, 0x65, 0x4F, 0xF0, 0xB6, 0x30, 0x48, 0xE0, -0xB7, 0x45, 0x31, 0xF0, 0xB8, 0x10, 0x2A, 0xE0, 0xB9, 0x25, 0x13, 0xF0, 0xB9, 0xF0, 0x0C, 0xE0, -0xBB, 0x0E, 0x30, 0x70, 0xBB, 0xCF, 0xEE, 0xE0, 0xBC, 0xEE, 0x12, 0x70, 0xBD, 0xB9, 0x0B, 0x60, -0xC2, 0x72, 0x08, 0xF0, 0xC3, 0x61, 0xEB, 0xE0, 0xC4, 0x51, 0xEA, 0xF0, 0xC5, 0x38, 0x93, 0x60, -0xC6, 0x31, 0xCC, 0xF0, 0xC7, 0x21, 0xAF, 0xE0, 0xC8, 0x1A, 0xE9, 0x70, 0xC9, 0x0A, 0xCC, 0x60, -0xC9, 0xFA, 0xCB, 0x70, 0xCA, 0xEA, 0xAE, 0x60, 0xCB, 0x89, 0x0C, 0x90, 0xD2, 0x23, 0xF4, 0x70, -0xD2, 0x61, 0x18, 0x00, 0xD3, 0x63, 0x8C, 0x10, 0xD4, 0x53, 0x6F, 0x00, 0xD5, 0x55, 0xE3, 0x10, -0xD6, 0x20, 0xDC, 0x00, 0xD7, 0x35, 0xC5, 0x10, 0xD8, 0x00, 0xBE, 0x00, 0xD9, 0x15, 0xA7, 0x10, -0xD9, 0xE0, 0xA0, 0x00, 0xDA, 0xFE, 0xC3, 0x90, 0xDB, 0xC0, 0x82, 0x00, 0xDC, 0xDE, 0xA5, 0x90, -0xDD, 0xA9, 0x9E, 0x80, 0xDE, 0xBE, 0x87, 0x90, 0xDF, 0x89, 0x80, 0x80, 0xE0, 0x9E, 0x69, 0x90, -0xE1, 0x69, 0x62, 0x80, 0xE2, 0x7E, 0x4B, 0x90, 0xE3, 0x49, 0x44, 0x80, 0xE4, 0x5E, 0x2D, 0x90, -0xE5, 0x29, 0x26, 0x80, 0xE6, 0x47, 0x4A, 0x10, 0xE7, 0x12, 0x43, 0x00, 0xE8, 0x27, 0x2C, 0x10, -0xE8, 0xF2, 0x25, 0x00, 0xEB, 0xE6, 0xF0, 0x10, 0xEC, 0xD6, 0xD3, 0x00, 0xED, 0xC6, 0xD2, 0x10, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x05, 0xFF, 0xFF, 0x9D, 0xE4, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, -0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xAB, -0xA0, 0x01, 0x10, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x44, 0x54, -0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x53, 0x54, -0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - -/* America/Rio_Branco */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x86, 0x90, -0xB8, 0x0F, 0x66, 0x00, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xF1, 0x50, 0x50, 0xBA, 0xDE, 0x90, 0x40, -0xDA, 0x38, 0xCA, 0x50, 0xDA, 0xEC, 0x16, 0x50, 0xDC, 0x19, 0xFD, 0xD0, 0xDC, 0xB9, 0x75, 0x40, -0xDD, 0xFB, 0x31, 0x50, 0xDE, 0x9B, 0xFA, 0x40, 0xDF, 0xDD, 0xB6, 0x50, 0xE0, 0x54, 0x4F, 0x40, -0xF4, 0x98, 0x1B, 0xD0, 0xF5, 0x05, 0x7A, 0x40, 0xF6, 0xC0, 0x80, 0x50, 0xF7, 0x0E, 0x3A, 0xC0, -0xF8, 0x51, 0x48, 0x50, 0xF8, 0xC7, 0xE1, 0x40, 0xFA, 0x0A, 0xEE, 0xD0, 0xFA, 0xA9, 0x14, 0xC0, -0xFB, 0xEC, 0x22, 0x50, 0xFC, 0x8B, 0x99, 0xC0, 0x1D, 0xC9, 0xAA, 0x50, 0x1E, 0x78, 0xF3, 0xC0, -0x1F, 0xA0, 0x51, 0xD0, 0x20, 0x33, 0xEB, 0xC0, 0x21, 0x81, 0x85, 0x50, 0x22, 0x0B, 0xE4, 0xC0, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xC0, -0x70, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0x4C, -0x4D, 0x54, 0x00, 0x41, 0x43, 0x53, 0x54, 0x00, 0x41, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, - -/* America/Rosario */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA2, 0x92, 0x8F, 0x30, -0xB6, 0x7B, 0x52, 0x40, 0xB7, 0x1A, 0xC9, 0xB0, 0xB8, 0x1E, 0x8F, 0x40, 0xB8, 0xD4, 0x70, 0x30, -0xBA, 0x17, 0x7D, 0xC0, 0xBA, 0xB5, 0xA3, 0xB0, 0xBB, 0xF8, 0xB1, 0x40, 0xBC, 0x96, 0xD7, 0x30, -0xBD, 0xD9, 0xE4, 0xC0, 0xBE, 0x78, 0x0A, 0xB0, 0xBF, 0xBB, 0x18, 0x40, 0xC0, 0x5A, 0x8F, 0xB0, -0xC1, 0x9D, 0x9D, 0x40, 0xC2, 0x3B, 0xC3, 0x30, 0xC3, 0x7E, 0xD0, 0xC0, 0xC4, 0x1C, 0xF6, 0xB0, -0xC5, 0x60, 0x04, 0x40, 0xC5, 0xFE, 0x2A, 0x30, 0xC7, 0x41, 0x37, 0xC0, 0xC7, 0xE0, 0xAF, 0x30, -0xC8, 0x81, 0x94, 0x40, 0xCA, 0x4D, 0xA1, 0xB0, 0xCA, 0xEE, 0x86, 0xC0, 0xCE, 0x4D, 0xFF, 0x30, -0xCE, 0xB0, 0xED, 0xC0, 0xD3, 0x29, 0x35, 0xB0, 0xD4, 0x43, 0x64, 0xC0, 0xF4, 0x3D, 0x08, 0x30, -0xF4, 0x9F, 0xF6, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0x32, 0x10, 0x40, 0xF6, 0xE6, 0x9F, 0xB0, -0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40, 0xFA, 0xD3, 0x36, 0xB0, -0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, 0xFE, 0x9C, 0x35, 0x30, -0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, 0x23, 0x94, 0xB5, 0xB0, -0x24, 0x10, 0x94, 0xA0, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xF0, 0x76, 0xA0, 0x27, 0x21, 0x0F, 0x30, -0x27, 0xD0, 0x58, 0xA0, 0x29, 0x00, 0xFF, 0x40, 0x29, 0xB0, 0x3A, 0xA0, 0x2A, 0xE0, 0xD3, 0x30, -0x2B, 0x99, 0x57, 0x20, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xBF, 0x2A, 0xB0, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, -0x03, 0x04, 0x02, 0x04, 0xFF, 0xFF, 0xC3, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, -0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, -0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x41, 0x52, 0x54, 0x00, -0x41, 0x52, 0x53, 0x54, 0x00, 0x57, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Santiago */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x9E, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0D, 0x8F, 0x24, 0x69, 0xC6, -0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x71, 0x05, 0x46, 0xA1, 0x00, 0x71, 0xC0, 0xB0, 0x5E, 0x77, 0xC6, -0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, 0xB4, 0x22, 0x34, 0x50, -0xB5, 0x39, 0xA4, 0x40, 0xB6, 0x03, 0x67, 0xD0, 0xB7, 0x1A, 0xD7, 0xC0, 0xB7, 0xE4, 0x9B, 0x50, -0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xC7, 0x20, 0x50, 0xCC, 0x1C, 0x6E, 0x40, 0xCC, 0x6C, 0xE7, 0xD0, -0xD4, 0x1B, 0xC9, 0xB0, 0xD5, 0x76, 0xA0, 0x50, 0xFD, 0xD1, 0x3C, 0x40, 0xFE, 0x92, 0xFA, 0xB0, -0xFF, 0xCC, 0xCD, 0xC0, 0x00, 0x72, 0xDC, 0xB0, 0x01, 0x75, 0x50, 0xC0, 0x02, 0x40, 0x49, 0xB0, -0x03, 0x55, 0x32, 0xC0, 0x04, 0x20, 0x2B, 0xB0, 0x05, 0x3E, 0x4F, 0x40, 0x06, 0x00, 0x0D, 0xB0, -0x07, 0x0B, 0xBC, 0x40, 0x07, 0xDF, 0xEF, 0xB0, 0x08, 0xFE, 0x13, 0x40, 0x09, 0xBF, 0xD1, 0xB0, -0x0A, 0xDD, 0xF5, 0x40, 0x0B, 0xA8, 0xEE, 0x30, 0x0C, 0xBD, 0xD7, 0x40, 0x0D, 0x88, 0xD0, 0x30, -0x0E, 0x9D, 0xB9, 0x40, 0x0F, 0x68, 0xB2, 0x30, 0x10, 0x86, 0xD5, 0xC0, 0x11, 0x48, 0x94, 0x30, -0x12, 0x66, 0xB7, 0xC0, 0x13, 0x28, 0x76, 0x30, 0x14, 0x46, 0x99, 0xC0, 0x15, 0x11, 0x92, 0xB0, -0x16, 0x26, 0x7B, 0xC0, 0x16, 0xF1, 0x74, 0xB0, 0x18, 0x06, 0x5D, 0xC0, 0x18, 0xD1, 0x56, 0xB0, -0x19, 0xE6, 0x3F, 0xC0, 0x1A, 0xB1, 0x38, 0xB0, 0x1B, 0xCF, 0x5C, 0x40, 0x1C, 0x91, 0x1A, 0xB0, -0x1D, 0xAF, 0x3E, 0x40, 0x1E, 0x70, 0xFC, 0xB0, 0x1F, 0x8F, 0x20, 0x40, 0x20, 0x7F, 0x03, 0x30, -0x21, 0x6F, 0x02, 0x40, 0x22, 0x39, 0xFB, 0x30, 0x23, 0x45, 0xA9, 0xC0, 0x24, 0x19, 0xDD, 0x30, -0x25, 0x38, 0x00, 0xC0, 0x26, 0x02, 0xF9, 0xB0, 0x26, 0xF2, 0xF8, 0xC0, 0x27, 0xD9, 0xA1, 0x30, -0x28, 0xF7, 0xC4, 0xC0, 0x29, 0xC2, 0xBD, 0xB0, 0x2A, 0xD7, 0xA6, 0xC0, 0x2B, 0xA2, 0x9F, 0xB0, -0x2C, 0xB7, 0x88, 0xC0, 0x2D, 0x82, 0x81, 0xB0, 0x2E, 0x97, 0x6A, 0xC0, 0x2F, 0x62, 0x63, 0xB0, -0x30, 0x80, 0x87, 0x40, 0x31, 0x42, 0x45, 0xB0, 0x32, 0x60, 0x69, 0x40, 0x33, 0x3D, 0xD7, 0x30, -0x34, 0x40, 0x4B, 0x40, 0x35, 0x0B, 0x44, 0x30, 0x36, 0x0D, 0xB8, 0x40, 0x37, 0x06, 0xD5, 0xB0, -0x38, 0x00, 0x0F, 0x40, 0x38, 0xCB, 0x08, 0x30, 0x39, 0xE9, 0x2B, 0xC0, 0x3A, 0xAA, 0xEA, 0x30, -0x3B, 0xC9, 0x0D, 0xC0, 0x3C, 0x8A, 0xCC, 0x30, 0x3D, 0xA8, 0xEF, 0xC0, 0x3E, 0x6A, 0xAE, 0x30, -0x3F, 0x88, 0xD1, 0xC0, 0x40, 0x53, 0xCA, 0xB0, 0x41, 0x68, 0xB3, 0xC0, 0x42, 0x33, 0xAC, 0xB0, -0x43, 0x48, 0x95, 0xC0, 0x44, 0x13, 0x8E, 0xB0, 0x45, 0x31, 0xB2, 0x40, 0x45, 0xF3, 0x70, 0xB0, -0x47, 0x11, 0x94, 0x40, 0x47, 0xD3, 0x52, 0xB0, 0x48, 0xF1, 0x76, 0x40, 0x49, 0xBC, 0x6F, 0x30, -0x4A, 0xD1, 0x58, 0x40, 0x4B, 0x9C, 0x51, 0x30, 0x4C, 0xB1, 0x3A, 0x40, 0x4D, 0x7C, 0x33, 0x30, -0x4E, 0x91, 0x1C, 0x40, 0x4F, 0x5C, 0x15, 0x30, 0x50, 0x7A, 0x38, 0xC0, 0x51, 0x3B, 0xF7, 0x30, -0x52, 0x5A, 0x1A, 0xC0, 0x53, 0x1B, 0xD9, 0x30, 0x54, 0x39, 0xFC, 0xC0, 0x55, 0x04, 0xF5, 0xB0, -0x56, 0x19, 0xDE, 0xC0, 0x56, 0xE4, 0xD7, 0xB0, 0x57, 0xF9, 0xC0, 0xC0, 0x58, 0xC4, 0xB9, 0xB0, -0x59, 0xE2, 0xDD, 0x40, 0x5A, 0xA4, 0x9B, 0xB0, 0x5B, 0xC2, 0xBF, 0x40, 0x5C, 0x84, 0x7D, 0xB0, -0x5D, 0xA2, 0xA1, 0x40, 0x5E, 0x6D, 0x9A, 0x30, 0x5F, 0x82, 0x83, 0x40, 0x60, 0x4D, 0x7C, 0x30, -0x61, 0x62, 0x65, 0x40, 0x62, 0x2D, 0x5E, 0x30, 0x63, 0x42, 0x47, 0x40, 0x64, 0x0D, 0x40, 0x30, -0x65, 0x2B, 0x63, 0xC0, 0x65, 0xED, 0x22, 0x30, 0x67, 0x0B, 0x45, 0xC0, 0x67, 0xCD, 0x04, 0x30, -0x68, 0xEB, 0x27, 0xC0, 0x69, 0xB6, 0x20, 0xB0, 0x6A, 0xCB, 0x09, 0xC0, 0x6B, 0x96, 0x02, 0xB0, -0x6C, 0xAA, 0xEB, 0xC0, 0x6D, 0x75, 0xE4, 0xB0, 0x6E, 0x94, 0x08, 0x40, 0x6F, 0x55, 0xC6, 0xB0, -0x70, 0x73, 0xEA, 0x40, 0x71, 0x35, 0xA8, 0xB0, 0x72, 0x53, 0xCC, 0x40, 0x73, 0x15, 0x8A, 0xB0, -0x74, 0x33, 0xAE, 0x40, 0x74, 0xFE, 0xA7, 0x30, 0x76, 0x13, 0x90, 0x40, 0x76, 0xDE, 0x89, 0x30, -0x77, 0xF3, 0x72, 0x40, 0x78, 0xBE, 0x6B, 0x30, 0x79, 0xDC, 0x8E, 0xC0, 0x7A, 0x9E, 0x4D, 0x30, -0x7B, 0xBC, 0x70, 0xC0, 0x7C, 0x7E, 0x2F, 0x30, 0x7D, 0x9C, 0x52, 0xC0, 0x7E, 0x67, 0x4B, 0xB0, -0x7F, 0x7C, 0x34, 0xC0, 0x01, 0x00, 0x02, 0x00, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, -0x03, 0x01, 0x03, 0x04, 0x05, 0x04, 0x02, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, 0xFF, -0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, -0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, -0x00, 0x04, 0x53, 0x4D, 0x54, 0x00, 0x43, 0x4C, 0x54, 0x00, 0x43, 0x4C, 0x53, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, - -/* America/Santo_Domingo */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x16, 0xBA, 0xDF, 0x42, 0x60, -0xFA, 0x08, 0x4B, 0xD0, 0xFA, 0xA7, 0xC3, 0x40, 0xFF, 0xA7, 0xF1, 0xD0, 0x00, 0x43, 0x7B, 0xC8, -0x01, 0x87, 0xD3, 0xD0, 0x01, 0xFA, 0x7F, 0x48, 0x03, 0x70, 0xF0, 0x50, 0x03, 0xDD, 0x04, 0x48, -0x05, 0x50, 0xD2, 0x50, 0x05, 0xBF, 0x89, 0x48, 0x07, 0x30, 0xB4, 0x50, 0x07, 0xA0, 0xBC, 0xC8, -0x09, 0x10, 0x96, 0x50, 0x39, 0xFB, 0xBC, 0xE0, 0x3A, 0x29, 0xE1, 0x60, 0x02, 0x01, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x02, 0x04, 0xFF, 0xFF, 0xBE, 0x60, -0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x05, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0xFF, 0xFF, -0xC0, 0xB8, 0x01, 0x0D, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x12, 0x53, 0x44, 0x4D, 0x54, 0x00, 0x45, -0x44, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x48, 0x44, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Sao_Paulo */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x72, 0xB4, -0xB8, 0x0F, 0x49, 0xE0, 0xB8, 0xFD, 0x40, 0xA0, 0xB9, 0xF1, 0x34, 0x30, 0xBA, 0xDE, 0x74, 0x20, -0xDA, 0x38, 0xAE, 0x30, 0xDA, 0xEB, 0xFA, 0x30, 0xDC, 0x19, 0xE1, 0xB0, 0xDC, 0xB9, 0x59, 0x20, -0xDD, 0xFB, 0x15, 0x30, 0xDE, 0x9B, 0xDE, 0x20, 0xDF, 0xDD, 0x9A, 0x30, 0xE0, 0x54, 0x33, 0x20, -0xF4, 0x5A, 0x09, 0x30, 0xF5, 0x05, 0x5E, 0x20, 0xF6, 0xC0, 0x64, 0x30, 0xF7, 0x0E, 0x1E, 0xA0, -0xF8, 0x51, 0x2C, 0x30, 0xF8, 0xC7, 0xC5, 0x20, 0xFA, 0x0A, 0xD2, 0xB0, 0xFA, 0xA8, 0xF8, 0xA0, -0xFB, 0xEC, 0x06, 0x30, 0xFC, 0x8B, 0x7D, 0xA0, 0x1D, 0xC9, 0x8E, 0x30, 0x1E, 0x78, 0xD7, 0xA0, -0x1F, 0xA0, 0x35, 0xB0, 0x20, 0x33, 0xCF, 0xA0, 0x21, 0x81, 0x69, 0x30, 0x22, 0x0B, 0xC8, 0xA0, -0x23, 0x58, 0x10, 0xB0, 0x23, 0xE2, 0x70, 0x20, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xD4, 0xC7, 0x20, -0x27, 0x21, 0x0F, 0x30, 0x27, 0xBD, 0xE3, 0xA0, 0x29, 0x00, 0xF1, 0x30, 0x29, 0x94, 0x8B, 0x20, -0x2A, 0xEA, 0x0D, 0xB0, 0x2B, 0x6B, 0x32, 0xA0, 0x2C, 0xC0, 0xB5, 0x30, 0x2D, 0x66, 0xC4, 0x20, -0x2E, 0xA0, 0x97, 0x30, 0x2F, 0x46, 0xA6, 0x20, 0x30, 0x80, 0x79, 0x30, 0x31, 0x1D, 0x4D, 0xA0, -0x32, 0x57, 0x20, 0xB0, 0x33, 0x06, 0x6A, 0x20, 0x34, 0x38, 0x54, 0x30, 0x34, 0xF8, 0xC1, 0x20, -0x36, 0x20, 0x1F, 0x30, 0x36, 0xCF, 0x68, 0xA0, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xB8, 0x85, 0x20, -0x39, 0xDF, 0xE3, 0x30, 0x3A, 0x8F, 0x2C, 0xA0, 0x3B, 0xC8, 0xFF, 0xB0, 0x3C, 0x6F, 0x0E, 0xA0, -0x3D, 0xC4, 0x91, 0x30, 0x3E, 0x4E, 0xF0, 0xA0, 0x3F, 0x91, 0xFE, 0x30, 0x40, 0x2E, 0xD2, 0xA0, -0x41, 0x86, 0xF8, 0x30, 0x42, 0x17, 0xEF, 0x20, 0x43, 0x51, 0xC2, 0x30, 0x43, 0xF7, 0xD1, 0x20, -0x45, 0x4D, 0x53, 0xB0, 0x45, 0xE0, 0xED, 0xA0, 0x47, 0x2D, 0x35, 0xB0, 0x47, 0xC0, 0xCF, 0xA0, -0x49, 0x0D, 0x17, 0xB0, 0x49, 0xA0, 0xB1, 0xA0, 0x4A, 0xEC, 0xF9, 0xB0, 0x4B, 0x89, 0xCE, 0x20, -0x4C, 0xD6, 0x16, 0x30, 0x4D, 0x69, 0xB0, 0x20, 0x4E, 0xB5, 0xF8, 0x30, 0x4F, 0x49, 0x92, 0x20, -0x50, 0x95, 0xDA, 0x30, 0x51, 0x29, 0x74, 0x20, 0x52, 0x75, 0xBC, 0x30, 0x53, 0x09, 0x56, 0x20, -0x54, 0x55, 0x9E, 0x30, 0x54, 0xE9, 0x38, 0x20, 0x56, 0x35, 0x80, 0x30, 0x56, 0xD2, 0x54, 0xA0, -0x58, 0x1E, 0x9C, 0xB0, 0x58, 0xB2, 0x36, 0xA0, 0x59, 0xFE, 0x7E, 0xB0, 0x5A, 0x92, 0x18, 0xA0, -0x5B, 0xDE, 0x60, 0xB0, 0x5C, 0x71, 0xFA, 0xA0, 0x5D, 0xBE, 0x42, 0xB0, 0x5E, 0x51, 0xDC, 0xA0, -0x5F, 0x9E, 0x24, 0xB0, 0x60, 0x3A, 0xF9, 0x20, 0x61, 0x87, 0x41, 0x30, 0x62, 0x1A, 0xDB, 0x20, -0x63, 0x67, 0x23, 0x30, 0x63, 0xFA, 0xBD, 0x20, 0x65, 0x47, 0x05, 0x30, 0x65, 0xDA, 0x9F, 0x20, -0x67, 0x26, 0xE7, 0x30, 0x67, 0xBA, 0x81, 0x20, 0x69, 0x06, 0xC9, 0x30, 0x69, 0x9A, 0x63, 0x20, -0x6A, 0xE6, 0xAB, 0x30, 0x6B, 0x83, 0x7F, 0xA0, 0x6C, 0xCF, 0xC7, 0xB0, 0x6D, 0x63, 0x61, 0xA0, -0x6E, 0xAF, 0xA9, 0xB0, 0x6F, 0x43, 0x43, 0xA0, 0x70, 0x8F, 0x8B, 0xB0, 0x71, 0x23, 0x25, 0xA0, -0x72, 0x6F, 0x6D, 0xB0, 0x73, 0x03, 0x07, 0xA0, 0x74, 0x4F, 0x4F, 0xB0, 0x74, 0xEC, 0x24, 0x20, -0x76, 0x38, 0x6C, 0x30, 0x76, 0xCC, 0x06, 0x20, 0x78, 0x18, 0x4E, 0x30, 0x78, 0xAB, 0xE8, 0x20, -0x79, 0xF8, 0x30, 0x30, 0x7A, 0x8B, 0xCA, 0x20, 0x7B, 0xD8, 0x12, 0x30, 0x7C, 0x6B, 0xAC, 0x20, -0x7D, 0xB7, 0xF4, 0x30, 0x7E, 0x4B, 0x8E, 0x20, 0x7F, 0x97, 0xD6, 0x30, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xD4, 0x4C, -0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x09, 0x4C, 0x4D, -0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, - -/* America/Scoresbysund */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x16, 0x9B, 0x80, 0x4C, 0x18, -0x13, 0x4D, 0x6E, 0x40, 0x14, 0x34, 0x24, 0xC0, 0x15, 0x23, 0xF9, 0xA0, 0x16, 0x13, 0xDC, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0xFF, 0xFF, 0xEB, 0x68, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, -0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x01, 0x08, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x04, 0xFF, 0xFF, 0xF1, -0xF0, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x4C, -0x4D, 0x54, 0x00, 0x43, 0x47, 0x54, 0x00, 0x43, 0x47, 0x53, 0x54, 0x00, 0x45, 0x47, 0x54, 0x00, -0x45, 0x47, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x01, 0x00, - -/* America/Shiprock */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x9D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x3A, 0x90, -0x9F, 0xBB, 0x07, 0x80, 0xA0, 0x86, 0x1C, 0x90, 0xA1, 0x9A, 0xE9, 0x80, 0xA2, 0x65, 0xFE, 0x90, -0xA3, 0x84, 0x06, 0x00, 0xA4, 0x45, 0xE0, 0x90, 0xA4, 0x8F, 0xA6, 0x80, 0xCB, 0x89, 0x0C, 0x90, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x18, 0x00, 0xF7, 0x2F, 0x76, 0x90, 0xF8, 0x28, 0x94, 0x00, -0xF9, 0x0F, 0x58, 0x90, 0xFA, 0x08, 0x76, 0x00, 0xFA, 0xF8, 0x75, 0x10, 0xFB, 0xE8, 0x58, 0x00, -0xFC, 0xD8, 0x57, 0x10, 0xFD, 0xC8, 0x3A, 0x00, 0xFE, 0xB8, 0x39, 0x10, 0xFF, 0xA8, 0x1C, 0x00, -0x00, 0x98, 0x1B, 0x10, 0x01, 0x87, 0xFE, 0x00, 0x02, 0x77, 0xFD, 0x10, 0x03, 0x71, 0x1A, 0x80, -0x04, 0x61, 0x19, 0x90, 0x05, 0x50, 0xFC, 0x80, 0x06, 0x40, 0xFB, 0x90, 0x07, 0x30, 0xDE, 0x80, -0x07, 0x8D, 0x35, 0x90, 0x09, 0x10, 0xC0, 0x80, 0x09, 0xAD, 0xB1, 0x10, 0x0A, 0xF0, 0xA2, 0x80, -0x0B, 0xE0, 0xA1, 0x90, 0x0C, 0xD9, 0xBF, 0x00, 0x0D, 0xC0, 0x83, 0x90, 0x0E, 0xB9, 0xA1, 0x00, -0x0F, 0xA9, 0xA0, 0x10, 0x10, 0x99, 0x83, 0x00, 0x11, 0x89, 0x82, 0x10, 0x12, 0x79, 0x65, 0x00, -0x13, 0x69, 0x64, 0x10, 0x14, 0x59, 0x47, 0x00, 0x15, 0x49, 0x46, 0x10, 0x16, 0x39, 0x29, 0x00, -0x17, 0x29, 0x28, 0x10, 0x18, 0x22, 0x45, 0x80, 0x19, 0x09, 0x0A, 0x10, 0x1A, 0x02, 0x27, 0x80, -0x1A, 0xF2, 0x26, 0x90, 0x1B, 0xE2, 0x09, 0x80, 0x1C, 0xD2, 0x08, 0x90, 0x1D, 0xC1, 0xEB, 0x80, -0x1E, 0xB1, 0xEA, 0x90, 0x1F, 0xA1, 0xCD, 0x80, 0x20, 0x76, 0x1D, 0x10, 0x21, 0x81, 0xAF, 0x80, -0x22, 0x55, 0xFF, 0x10, 0x23, 0x6A, 0xCC, 0x00, 0x24, 0x35, 0xE1, 0x10, 0x25, 0x4A, 0xAE, 0x00, -0x26, 0x15, 0xC3, 0x10, 0x27, 0x2A, 0x90, 0x00, 0x27, 0xFE, 0xDF, 0x90, 0x29, 0x0A, 0x72, 0x00, -0x29, 0xDE, 0xC1, 0x90, 0x2A, 0xEA, 0x54, 0x00, 0x2B, 0xBE, 0xA3, 0x90, 0x2C, 0xD3, 0x70, 0x80, -0x2D, 0x9E, 0x85, 0x90, 0x2E, 0xB3, 0x52, 0x80, 0x2F, 0x7E, 0x67, 0x90, 0x30, 0x93, 0x34, 0x80, -0x31, 0x67, 0x84, 0x10, 0x32, 0x73, 0x16, 0x80, 0x33, 0x47, 0x66, 0x10, 0x34, 0x52, 0xF8, 0x80, -0x35, 0x27, 0x48, 0x10, 0x36, 0x32, 0xDA, 0x80, 0x37, 0x07, 0x2A, 0x10, 0x38, 0x1B, 0xF7, 0x00, -0x38, 0xE7, 0x0C, 0x10, 0x39, 0xFB, 0xD9, 0x00, 0x3A, 0xC6, 0xEE, 0x10, 0x3B, 0xDB, 0xBB, 0x00, -0x3C, 0xB0, 0x0A, 0x90, 0x3D, 0xBB, 0x9D, 0x00, 0x3E, 0x8F, 0xEC, 0x90, 0x3F, 0x9B, 0x7F, 0x00, -0x40, 0x6F, 0xCE, 0x90, 0x41, 0x84, 0x9B, 0x80, 0x42, 0x4F, 0xB0, 0x90, 0x43, 0x64, 0x7D, 0x80, -0x44, 0x2F, 0x92, 0x90, 0x45, 0x44, 0x5F, 0x80, 0x45, 0xF3, 0xC5, 0x10, 0x47, 0x2D, 0x7C, 0x00, -0x47, 0xD3, 0xA7, 0x10, 0x49, 0x0D, 0x5E, 0x00, 0x49, 0xB3, 0x89, 0x10, 0x4A, 0xED, 0x40, 0x00, -0x4B, 0x9C, 0xA5, 0x90, 0x4C, 0xD6, 0x5C, 0x80, 0x4D, 0x7C, 0x87, 0x90, 0x4E, 0xB6, 0x3E, 0x80, -0x4F, 0x5C, 0x69, 0x90, 0x50, 0x96, 0x20, 0x80, 0x51, 0x3C, 0x4B, 0x90, 0x52, 0x76, 0x02, 0x80, -0x53, 0x1C, 0x2D, 0x90, 0x54, 0x55, 0xE4, 0x80, 0x54, 0xFC, 0x0F, 0x90, 0x56, 0x35, 0xC6, 0x80, -0x56, 0xE5, 0x2C, 0x10, 0x58, 0x1E, 0xE3, 0x00, 0x58, 0xC5, 0x0E, 0x10, 0x59, 0xFE, 0xC5, 0x00, -0x5A, 0xA4, 0xF0, 0x10, 0x5B, 0xDE, 0xA7, 0x00, 0x5C, 0x84, 0xD2, 0x10, 0x5D, 0xBE, 0x89, 0x00, -0x5E, 0x64, 0xB4, 0x10, 0x5F, 0x9E, 0x6B, 0x00, 0x60, 0x4D, 0xD0, 0x90, 0x61, 0x87, 0x87, 0x80, -0x62, 0x2D, 0xB2, 0x90, 0x63, 0x67, 0x69, 0x80, 0x64, 0x0D, 0x94, 0x90, 0x65, 0x47, 0x4B, 0x80, -0x65, 0xED, 0x76, 0x90, 0x67, 0x27, 0x2D, 0x80, 0x67, 0xCD, 0x58, 0x90, 0x69, 0x07, 0x0F, 0x80, -0x69, 0xAD, 0x3A, 0x90, 0x6A, 0xE6, 0xF1, 0x80, 0x6B, 0x96, 0x57, 0x10, 0x6C, 0xD0, 0x0E, 0x00, -0x6D, 0x76, 0x39, 0x10, 0x6E, 0xAF, 0xF0, 0x00, 0x6F, 0x56, 0x1B, 0x10, 0x70, 0x8F, 0xD2, 0x00, -0x71, 0x35, 0xFD, 0x10, 0x72, 0x6F, 0xB4, 0x00, 0x73, 0x15, 0xDF, 0x10, 0x74, 0x4F, 0x96, 0x00, -0x74, 0xFE, 0xFB, 0x90, 0x76, 0x38, 0xB2, 0x80, 0x76, 0xDE, 0xDD, 0x90, 0x78, 0x18, 0x94, 0x80, -0x78, 0xBE, 0xBF, 0x90, 0x79, 0xF8, 0x76, 0x80, 0x7A, 0x9E, 0xA1, 0x90, 0x7B, 0xD8, 0x58, 0x80, -0x7C, 0x7E, 0x83, 0x90, 0x7D, 0xB8, 0x3A, 0x80, 0x7E, 0x5E, 0x65, 0x90, 0x7F, 0x98, 0x1C, 0x80, -0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 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, 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, 0xFF, 0xFF, 0xAB, -0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF, -0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, -0x00, 0x4D, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - -/* America/St_Johns */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xEE, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x15, 0x9C, 0xCF, 0x62, 0x0C, -0x9D, 0xA4, 0xE6, 0xFC, 0x9E, 0xB8, 0x7E, 0x8C, 0x9F, 0xC0, 0x1C, 0x7C, 0xA0, 0xB6, 0x88, 0xDC, -0xA1, 0x38, 0xFF, 0x4C, 0xA2, 0x95, 0x19, 0x5C, 0xA3, 0x84, 0xFC, 0x4C, 0xA4, 0x74, 0xFB, 0x5C, -0xA5, 0x64, 0xDE, 0x4C, 0xA6, 0x5E, 0x17, 0xDC, 0xA7, 0x44, 0xC0, 0x4C, 0xA8, 0x3D, 0xF9, 0xDC, -0xA9, 0x24, 0xA2, 0x4C, 0xAA, 0x1D, 0xDB, 0xDC, 0xAB, 0x04, 0x84, 0x4C, 0xAB, 0xFD, 0xBD, 0xDC, -0xAC, 0xE4, 0x66, 0x4C, 0xAD, 0xDD, 0x9F, 0xDC, 0xAE, 0xCD, 0x82, 0xCC, 0xAF, 0xBD, 0x81, 0xDC, -0xB0, 0xAD, 0x64, 0xCC, 0xB1, 0xA6, 0x9E, 0x5C, 0xB2, 0x8D, 0x46, 0xCC, 0xB3, 0x86, 0x80, 0x5C, -0xB4, 0x6D, 0x28, 0xCC, 0xB5, 0x66, 0x62, 0x5C, 0xB6, 0x4D, 0x0A, 0xCC, 0xB7, 0x46, 0x44, 0x5C, -0xB8, 0x2C, 0xEC, 0xCC, 0xB9, 0x26, 0x26, 0x5C, 0xBA, 0x16, 0x09, 0x4C, 0xBB, 0x0F, 0x42, 0xDC, -0xBB, 0xF5, 0xEB, 0x4C, 0xBC, 0xEF, 0x24, 0xDC, 0xBD, 0xD5, 0xCD, 0x4C, 0xBE, 0x9E, 0x4D, 0x6C, -0xBE, 0xCF, 0x06, 0xA8, 0xBF, 0xB5, 0xAF, 0x18, 0xC0, 0xB8, 0x31, 0x38, 0xC1, 0x79, 0xEF, 0xA8, -0xC2, 0x98, 0x13, 0x38, 0xC3, 0x59, 0xD1, 0xA8, 0xC4, 0x77, 0xF5, 0x38, 0xC5, 0x39, 0xB3, 0xA8, -0xC6, 0x61, 0x11, 0xB8, 0xC7, 0x19, 0x95, 0xA8, 0xC8, 0x40, 0xF3, 0xB8, 0xC9, 0x02, 0xB2, 0x28, -0xCA, 0x20, 0xD5, 0xB8, 0xCA, 0xE2, 0x94, 0x28, 0xCC, 0x00, 0xB7, 0xB8, 0xD2, 0x23, 0xF4, 0x70, -0xD2, 0x60, 0xE6, 0xC8, 0xD3, 0x88, 0x44, 0xD8, 0xD4, 0x4A, 0x03, 0x48, 0xD5, 0x68, 0x26, 0xD8, -0xD6, 0x29, 0xE5, 0x48, 0xD7, 0x48, 0x08, 0xD8, 0xD8, 0x09, 0xC7, 0x48, 0xD9, 0x27, 0xEA, 0xD8, -0xD9, 0xE9, 0xA9, 0x48, 0xDB, 0x11, 0x07, 0x58, 0xDB, 0xD2, 0xC5, 0xC8, 0xDC, 0xDE, 0x74, 0x58, -0xDD, 0xA9, 0x6D, 0x48, 0xDE, 0xBE, 0x56, 0x58, 0xDF, 0x89, 0x4F, 0x48, 0xE0, 0x9E, 0x38, 0x58, -0xE1, 0x69, 0x31, 0x48, 0xE2, 0x7E, 0x1A, 0x58, 0xE3, 0x49, 0x13, 0x48, 0xE4, 0x5D, 0xFC, 0x58, -0xE5, 0x28, 0xF5, 0x48, 0xE6, 0x47, 0x18, 0xD8, 0xE7, 0x12, 0x11, 0xC8, 0xE8, 0x26, 0xFA, 0xD8, -0xE8, 0xF1, 0xF3, 0xC8, 0xEA, 0x06, 0xDC, 0xD8, 0xEA, 0xD1, 0xD5, 0xC8, 0xEB, 0xE6, 0xBE, 0xD8, -0xEC, 0xB1, 0xB7, 0xC8, 0xED, 0xC6, 0xA0, 0xD8, 0xEE, 0xBF, 0xBE, 0x48, 0xEF, 0xAF, 0xBD, 0x58, -0xF0, 0x9F, 0xA0, 0x48, 0xF1, 0x8F, 0x9F, 0x58, 0xF2, 0x7F, 0x82, 0x48, 0xF3, 0x6F, 0x81, 0x58, -0xF4, 0x5F, 0x64, 0x48, 0xF5, 0x4F, 0x63, 0x58, 0xF6, 0x3F, 0x46, 0x48, 0xF7, 0x2F, 0x45, 0x58, -0xF8, 0x28, 0x62, 0xC8, 0xF9, 0x0F, 0x27, 0x58, 0xFA, 0x08, 0x44, 0xC8, 0xFA, 0xF8, 0x43, 0xD8, -0xFB, 0xE8, 0x26, 0xC8, 0xFC, 0xD8, 0x25, 0xD8, 0xFD, 0xC8, 0x08, 0xC8, 0xFE, 0xB8, 0x07, 0xD8, -0xFF, 0xA7, 0xEA, 0xC8, 0x00, 0x97, 0xE9, 0xD8, 0x01, 0x87, 0xCC, 0xC8, 0x02, 0x77, 0xCB, 0xD8, -0x03, 0x70, 0xE9, 0x48, 0x04, 0x60, 0xE8, 0x58, 0x05, 0x50, 0xCB, 0x48, 0x06, 0x40, 0xCA, 0x58, -0x07, 0x30, 0xAD, 0x48, 0x08, 0x20, 0xAC, 0x58, 0x09, 0x10, 0x8F, 0x48, 0x0A, 0x00, 0x8E, 0x58, -0x0A, 0xF0, 0x71, 0x48, 0x0B, 0xE0, 0x70, 0x58, 0x0C, 0xD9, 0x8D, 0xC8, 0x0D, 0xC0, 0x52, 0x58, -0x0E, 0xB9, 0x6F, 0xC8, 0x0F, 0xA9, 0x6E, 0xD8, 0x10, 0x99, 0x51, 0xC8, 0x11, 0x89, 0x50, 0xD8, -0x12, 0x79, 0x33, 0xC8, 0x13, 0x69, 0x32, 0xD8, 0x14, 0x59, 0x15, 0xC8, 0x15, 0x49, 0x14, 0xD8, -0x16, 0x38, 0xF7, 0xC8, 0x17, 0x28, 0xF6, 0xD8, 0x18, 0x22, 0x14, 0x48, 0x19, 0x08, 0xD8, 0xD8, -0x1A, 0x01, 0xF6, 0x48, 0x1A, 0xF1, 0xF5, 0x58, 0x1B, 0xE1, 0xD8, 0x48, 0x1C, 0xD1, 0xD7, 0x58, -0x1D, 0xC1, 0xBA, 0x48, 0x1E, 0xB1, 0xB9, 0x58, 0x1F, 0xA1, 0x9C, 0x48, 0x20, 0x75, 0xCF, 0xF4, -0x21, 0x81, 0x62, 0x64, 0x22, 0x55, 0xB1, 0xF4, 0x23, 0x6A, 0x70, 0xD4, 0x24, 0x35, 0x93, 0xF4, -0x25, 0x4A, 0x60, 0xE4, 0x26, 0x15, 0x75, 0xF4, 0x27, 0x2A, 0x42, 0xE4, 0x27, 0xFE, 0x92, 0x74, -0x29, 0x0A, 0x24, 0xE4, 0x29, 0xDE, 0x74, 0x74, 0x2A, 0xEA, 0x06, 0xE4, 0x2B, 0xBE, 0x56, 0x74, -0x2C, 0xD3, 0x23, 0x64, 0x2D, 0x9E, 0x38, 0x74, 0x2E, 0xB3, 0x05, 0x64, 0x2F, 0x7E, 0x1A, 0x74, -0x30, 0x92, 0xE7, 0x64, 0x31, 0x67, 0x36, 0xF4, 0x32, 0x72, 0xC9, 0x64, 0x33, 0x47, 0x18, 0xF4, -0x34, 0x52, 0xAB, 0x64, 0x35, 0x26, 0xFA, 0xF4, 0x36, 0x32, 0x8D, 0x64, 0x37, 0x06, 0xDC, 0xF4, -0x38, 0x1B, 0xA9, 0xE4, 0x38, 0xE6, 0xBE, 0xF4, 0x39, 0xFB, 0x8B, 0xE4, 0x3A, 0xC6, 0xA0, 0xF4, -0x3B, 0xDB, 0x6D, 0xE4, 0x3C, 0xAF, 0xBD, 0x74, 0x3D, 0xBB, 0x4F, 0xE4, 0x3E, 0x8F, 0x9F, 0x74, -0x3F, 0x9B, 0x31, 0xE4, 0x40, 0x6F, 0x81, 0x74, 0x41, 0x84, 0x4E, 0x64, 0x42, 0x4F, 0x63, 0x74, -0x43, 0x64, 0x30, 0x64, 0x44, 0x2F, 0x45, 0x74, 0x45, 0x44, 0x12, 0x64, 0x45, 0xF3, 0x77, 0xF4, -0x47, 0x2D, 0x2E, 0xE4, 0x47, 0xD3, 0x59, 0xF4, 0x49, 0x0D, 0x10, 0xE4, 0x49, 0xB3, 0x3B, 0xF4, -0x4A, 0xEC, 0xF2, 0xE4, 0x4B, 0x9C, 0x58, 0x74, 0x4C, 0xD6, 0x0F, 0x64, 0x4D, 0x7C, 0x3A, 0x74, -0x4E, 0xB5, 0xF1, 0x64, 0x4F, 0x5C, 0x1C, 0x74, 0x50, 0x95, 0xD3, 0x64, 0x51, 0x3B, 0xFE, 0x74, -0x52, 0x75, 0xB5, 0x64, 0x53, 0x1B, 0xE0, 0x74, 0x54, 0x55, 0x97, 0x64, 0x54, 0xFB, 0xC2, 0x74, -0x56, 0x35, 0x79, 0x64, 0x56, 0xE4, 0xDE, 0xF4, 0x58, 0x1E, 0x95, 0xE4, 0x58, 0xC4, 0xC0, 0xF4, -0x59, 0xFE, 0x77, 0xE4, 0x5A, 0xA4, 0xA2, 0xF4, 0x5B, 0xDE, 0x59, 0xE4, 0x5C, 0x84, 0x84, 0xF4, -0x5D, 0xBE, 0x3B, 0xE4, 0x5E, 0x64, 0x66, 0xF4, 0x5F, 0x9E, 0x1D, 0xE4, 0x60, 0x4D, 0x83, 0x74, -0x61, 0x87, 0x3A, 0x64, 0x62, 0x2D, 0x65, 0x74, 0x63, 0x67, 0x1C, 0x64, 0x64, 0x0D, 0x47, 0x74, -0x65, 0x46, 0xFE, 0x64, 0x65, 0xED, 0x29, 0x74, 0x67, 0x26, 0xE0, 0x64, 0x67, 0xCD, 0x0B, 0x74, -0x69, 0x06, 0xC2, 0x64, 0x69, 0xAC, 0xED, 0x74, 0x6A, 0xE6, 0xA4, 0x64, 0x6B, 0x96, 0x09, 0xF4, -0x6C, 0xCF, 0xC0, 0xE4, 0x6D, 0x75, 0xEB, 0xF4, 0x6E, 0xAF, 0xA2, 0xE4, 0x6F, 0x55, 0xCD, 0xF4, -0x70, 0x8F, 0x84, 0xE4, 0x71, 0x35, 0xAF, 0xF4, 0x72, 0x6F, 0x66, 0xE4, 0x73, 0x15, 0x91, 0xF4, -0x74, 0x4F, 0x48, 0xE4, 0x74, 0xFE, 0xAE, 0x74, 0x76, 0x38, 0x65, 0x64, 0x76, 0xDE, 0x90, 0x74, -0x78, 0x18, 0x47, 0x64, 0x78, 0xBE, 0x72, 0x74, 0x79, 0xF8, 0x29, 0x64, 0x7A, 0x9E, 0x54, 0x74, -0x7B, 0xD8, 0x0B, 0x64, 0x7C, 0x7E, 0x36, 0x74, 0x7D, 0xB7, 0xED, 0x64, 0x7E, 0x5E, 0x18, 0x74, -0x7F, 0x97, 0xCF, 0x64, 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, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x04, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x06, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0xFF, 0xFF, 0xDC, 0xA4, 0x01, 0x00, 0xFF, 0xFF, 0xCE, 0x94, 0x00, 0x04, 0xFF, 0xFF, -0xDC, 0xD8, 0x01, 0x00, 0xFF, 0xFF, 0xCE, 0xC8, 0x00, 0x04, 0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x08, -0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x0C, 0xFF, 0xFF, 0xEA, 0xE8, 0x01, 0x10, 0x4E, 0x44, 0x54, 0x00, -0x4E, 0x53, 0x54, 0x00, 0x4E, 0x50, 0x54, 0x00, 0x4E, 0x57, 0x54, 0x00, 0x4E, 0x44, 0x44, 0x54, -0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - -/* America/St_Kitts */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x93, 0x37, 0x34, 0xCC, -0x01, 0xFF, 0xFF, 0xC5, 0x34, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/St_Lucia */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x92, 0xE6, 0xC7, 0xB0, -0x01, 0xFF, 0xFF, 0xC6, 0xD0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x43, 0x4D, 0x54, -0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/St_Thomas */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF4, 0x37, 0x60, -0x01, 0xFF, 0xFF, 0xC3, 0x20, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/St_Vincent */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x92, 0xE6, 0xC7, 0xE8, -0x01, 0xFF, 0xFF, 0xC6, 0x98, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4B, 0x4D, 0x54, -0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Swift_Current */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x86, 0xFD, 0x96, 0x18, -0x9E, 0xB8, 0xAF, 0x90, 0x9F, 0xC0, 0x4D, 0x80, 0xCB, 0x89, 0x0C, 0x90, 0xD2, 0x23, 0xF4, 0x70, -0xD2, 0x61, 0x18, 0x00, 0xD3, 0x76, 0x01, 0x10, 0xD4, 0x53, 0x6F, 0x00, 0xD5, 0x55, 0xE3, 0x10, -0xD6, 0x20, 0xDC, 0x00, 0xD7, 0x35, 0xC5, 0x10, 0xD8, 0x00, 0xBE, 0x00, 0xD9, 0x15, 0xA7, 0x10, -0xD9, 0xE0, 0xA0, 0x00, 0xE8, 0x27, 0x2C, 0x10, 0xE9, 0x17, 0x0F, 0x00, 0xEB, 0xE6, 0xF0, 0x10, -0xEC, 0xD6, 0xD3, 0x00, 0xED, 0xC6, 0xD2, 0x10, 0xEE, 0x91, 0xCB, 0x00, 0xEF, 0xAF, 0xEE, 0x90, -0xF0, 0x71, 0xAD, 0x00, 0x04, 0x61, 0x19, 0x90, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x05, 0xFF, -0xFF, 0x9A, 0xE8, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x00, -0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x10, 0xFF, 0xFF, 0xAB, -0xA0, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, -0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, -0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - -/* America/Tegucigalpa */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xA4, 0x4C, 0x4B, 0x44, -0x20, 0x9A, 0xDC, 0xE0, 0x21, 0x5C, 0x9B, 0x50, 0x22, 0x7A, 0xBE, 0xE0, 0x23, 0x3C, 0x7D, 0x50, -0x44, 0x5D, 0x8C, 0xE0, 0x44, 0xD6, 0xC8, 0xD0, 0x46, 0x3D, 0x6E, 0xE0, 0x46, 0xB6, 0xAA, 0xD0, -0x48, 0x1D, 0x50, 0xE0, 0x48, 0x96, 0x8C, 0xD0, 0x49, 0xFD, 0x32, 0xE0, 0x4A, 0x76, 0x6E, 0xD0, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xAE, -0x3C, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0x4C, -0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, - -/* America/Thule */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x9B, 0x80, 0x77, 0xFC, -0x27, 0xF5, 0x7A, 0xE0, 0x28, 0xE5, 0x5D, 0xD0, 0x29, 0xD5, 0x5C, 0xE0, 0x2A, 0xC5, 0x3F, 0xD0, -0x2B, 0xBE, 0x79, 0x60, 0x2C, 0xD3, 0x46, 0x50, 0x2D, 0x9E, 0x5B, 0x60, 0x2E, 0xB3, 0x28, 0x50, -0x2F, 0x7E, 0x3D, 0x60, 0x30, 0x93, 0x0A, 0x50, 0x31, 0x67, 0x59, 0xE0, 0x32, 0x72, 0xEC, 0x50, -0x33, 0x47, 0x3B, 0xE0, 0x34, 0x52, 0xCE, 0x50, 0x35, 0x27, 0x1D, 0xE0, 0x36, 0x32, 0xB0, 0x50, -0x37, 0x06, 0xFF, 0xE0, 0x38, 0x1B, 0xCC, 0xD0, 0x38, 0xE6, 0xE1, 0xE0, 0x39, 0xFB, 0xAE, 0xD0, -0x3A, 0xC6, 0xC3, 0xE0, 0x3B, 0xDB, 0x90, 0xD0, 0x3C, 0xAF, 0xE0, 0x60, 0x3D, 0xBB, 0x72, 0xD0, -0x3E, 0x8F, 0xC2, 0x60, 0x3F, 0x9B, 0x54, 0xD0, 0x40, 0x6F, 0xA4, 0x60, 0x41, 0x84, 0x71, 0x50, -0x42, 0x4F, 0x86, 0x60, 0x43, 0x64, 0x53, 0x50, 0x44, 0x2F, 0x68, 0x60, 0x45, 0x44, 0x35, 0x50, -0x45, 0xF3, 0x9A, 0xE0, 0x47, 0x2D, 0x51, 0xD0, 0x47, 0xD3, 0x7C, 0xE0, 0x49, 0x0D, 0x33, 0xD0, -0x49, 0xB3, 0x5E, 0xE0, 0x4A, 0xED, 0x15, 0xD0, 0x4B, 0x9C, 0x7B, 0x60, 0x4C, 0xD6, 0x32, 0x50, -0x4D, 0x7C, 0x5D, 0x60, 0x4E, 0xB6, 0x14, 0x50, 0x4F, 0x5C, 0x3F, 0x60, 0x50, 0x95, 0xF6, 0x50, -0x51, 0x3C, 0x21, 0x60, 0x52, 0x75, 0xD8, 0x50, 0x53, 0x1C, 0x03, 0x60, 0x54, 0x55, 0xBA, 0x50, -0x54, 0xFB, 0xE5, 0x60, 0x56, 0x35, 0x9C, 0x50, 0x56, 0xE5, 0x01, 0xE0, 0x58, 0x1E, 0xB8, 0xD0, -0x58, 0xC4, 0xE3, 0xE0, 0x59, 0xFE, 0x9A, 0xD0, 0x5A, 0xA4, 0xC5, 0xE0, 0x5B, 0xDE, 0x7C, 0xD0, -0x5C, 0x84, 0xA7, 0xE0, 0x5D, 0xBE, 0x5E, 0xD0, 0x5E, 0x64, 0x89, 0xE0, 0x5F, 0x9E, 0x40, 0xD0, -0x60, 0x4D, 0xA6, 0x60, 0x61, 0x87, 0x5D, 0x50, 0x62, 0x2D, 0x88, 0x60, 0x63, 0x67, 0x3F, 0x50, -0x64, 0x0D, 0x6A, 0x60, 0x65, 0x47, 0x21, 0x50, 0x65, 0xED, 0x4C, 0x60, 0x67, 0x27, 0x03, 0x50, -0x67, 0xCD, 0x2E, 0x60, 0x69, 0x06, 0xE5, 0x50, 0x69, 0xAD, 0x10, 0x60, 0x6A, 0xE6, 0xC7, 0x50, -0x6B, 0x96, 0x2C, 0xE0, 0x6C, 0xCF, 0xE3, 0xD0, 0x6D, 0x76, 0x0E, 0xE0, 0x6E, 0xAF, 0xC5, 0xD0, -0x6F, 0x55, 0xF0, 0xE0, 0x70, 0x8F, 0xA7, 0xD0, 0x71, 0x35, 0xD2, 0xE0, 0x72, 0x6F, 0x89, 0xD0, -0x73, 0x15, 0xB4, 0xE0, 0x74, 0x4F, 0x6B, 0xD0, 0x74, 0xFE, 0xD1, 0x60, 0x76, 0x38, 0x88, 0x50, -0x76, 0xDE, 0xB3, 0x60, 0x78, 0x18, 0x6A, 0x50, 0x78, 0xBE, 0x95, 0x60, 0x79, 0xF8, 0x4C, 0x50, -0x7A, 0x9E, 0x77, 0x60, 0x7B, 0xD8, 0x2E, 0x50, 0x7C, 0x7E, 0x59, 0x60, 0x7D, 0xB8, 0x10, 0x50, -0x7E, 0x5E, 0x3B, 0x60, 0x7F, 0x97, 0xF2, 0x50, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xBF, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xD5, -0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x44, 0x54, -0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Thunder_Bay */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x8F, 0x24, 0x7B, 0xE0, -0xCB, 0x88, 0xF0, 0x70, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xFB, 0xE0, 0x00, 0x97, 0xFE, 0xF0, -0x01, 0x87, 0xE1, 0xE0, 0x02, 0x77, 0xE0, 0xF0, 0x03, 0x70, 0xFE, 0x60, 0x04, 0x60, 0xFD, 0x70, -0x05, 0x50, 0xE0, 0x60, 0x08, 0x20, 0xC1, 0x70, 0x09, 0x10, 0xA4, 0x60, 0x0A, 0x00, 0xA3, 0x70, -0x0A, 0xF0, 0x86, 0x60, 0x0B, 0xE0, 0x85, 0x70, 0x0C, 0xD9, 0xA2, 0xE0, 0x0D, 0xC0, 0x67, 0x70, -0x0E, 0xB9, 0x84, 0xE0, 0x0F, 0xA9, 0x83, 0xF0, 0x10, 0x99, 0x66, 0xE0, 0x11, 0x89, 0x65, 0xF0, -0x12, 0x79, 0x48, 0xE0, 0x13, 0x69, 0x47, 0xF0, 0x14, 0x59, 0x2A, 0xE0, 0x15, 0x49, 0x29, 0xF0, -0x16, 0x39, 0x0C, 0xE0, 0x17, 0x29, 0x0B, 0xF0, 0x18, 0x22, 0x29, 0x60, 0x19, 0x08, 0xED, 0xF0, -0x1A, 0x02, 0x0B, 0x60, 0x1A, 0xF2, 0x0A, 0x70, 0x1B, 0xE1, 0xED, 0x60, 0x1C, 0xD1, 0xEC, 0x70, -0x1D, 0xC1, 0xCF, 0x60, 0x1E, 0xB1, 0xCE, 0x70, 0x1F, 0xA1, 0xB1, 0x60, 0x20, 0x76, 0x00, 0xF0, -0x21, 0x81, 0x93, 0x60, 0x22, 0x55, 0xE2, 0xF0, 0x23, 0x6A, 0xAF, 0xE0, 0x24, 0x35, 0xC4, 0xF0, -0x25, 0x4A, 0x91, 0xE0, 0x26, 0x15, 0xA6, 0xF0, 0x27, 0x2A, 0x73, 0xE0, 0x27, 0xFE, 0xC3, 0x70, -0x29, 0x0A, 0x55, 0xE0, 0x29, 0xDE, 0xA5, 0x70, 0x2A, 0xEA, 0x37, 0xE0, 0x2B, 0xBE, 0x87, 0x70, -0x2C, 0xD3, 0x54, 0x60, 0x2D, 0x9E, 0x69, 0x70, 0x2E, 0xB3, 0x36, 0x60, 0x2F, 0x7E, 0x4B, 0x70, -0x30, 0x93, 0x18, 0x60, 0x31, 0x67, 0x67, 0xF0, 0x32, 0x72, 0xFA, 0x60, 0x33, 0x47, 0x49, 0xF0, -0x34, 0x52, 0xDC, 0x60, 0x35, 0x27, 0x2B, 0xF0, 0x36, 0x32, 0xBE, 0x60, 0x37, 0x07, 0x0D, 0xF0, -0x38, 0x1B, 0xDA, 0xE0, 0x38, 0xE6, 0xEF, 0xF0, 0x39, 0xFB, 0xBC, 0xE0, 0x3A, 0xC6, 0xD1, 0xF0, -0x3B, 0xDB, 0x9E, 0xE0, 0x3C, 0xAF, 0xEE, 0x70, 0x3D, 0xBB, 0x80, 0xE0, 0x3E, 0x8F, 0xD0, 0x70, -0x3F, 0x9B, 0x62, 0xE0, 0x40, 0x6F, 0xB2, 0x70, 0x41, 0x84, 0x7F, 0x60, 0x42, 0x4F, 0x94, 0x70, -0x43, 0x64, 0x61, 0x60, 0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x43, 0x60, 0x45, 0xF3, 0xA8, 0xF0, -0x47, 0x2D, 0x5F, 0xE0, 0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x41, 0xE0, 0x49, 0xB3, 0x6C, 0xF0, -0x4A, 0xED, 0x23, 0xE0, 0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x40, 0x60, 0x4D, 0x7C, 0x6B, 0x70, -0x4E, 0xB6, 0x22, 0x60, 0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x04, 0x60, 0x51, 0x3C, 0x2F, 0x70, -0x52, 0x75, 0xE6, 0x60, 0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xC8, 0x60, 0x54, 0xFB, 0xF3, 0x70, -0x56, 0x35, 0xAA, 0x60, 0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, 0x58, 0xC4, 0xF1, 0xF0, -0x59, 0xFE, 0xA8, 0xE0, 0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, 0x5C, 0x84, 0xB5, 0xF0, -0x5D, 0xBE, 0x6C, 0xE0, 0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, 0x60, 0x4D, 0xB4, 0x70, -0x61, 0x87, 0x6B, 0x60, 0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, 0x64, 0x0D, 0x78, 0x70, -0x65, 0x47, 0x2F, 0x60, 0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, 0x67, 0xCD, 0x3C, 0x70, -0x69, 0x06, 0xF3, 0x60, 0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, 0x6B, 0x96, 0x3A, 0xF0, -0x6C, 0xCF, 0xF1, 0xE0, 0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, 0x6F, 0x55, 0xFE, 0xF0, -0x70, 0x8F, 0xB5, 0xE0, 0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, 0x73, 0x15, 0xC2, 0xF0, -0x74, 0x4F, 0x79, 0xE0, 0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, 0x76, 0xDE, 0xC1, 0x70, -0x78, 0x18, 0x78, 0x60, 0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, 0x7A, 0x9E, 0x85, 0x70, -0x7B, 0xD8, 0x3C, 0x60, 0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, 0x7E, 0x5E, 0x49, 0x70, -0x7F, 0x98, 0x00, 0x60, 0x01, 0x02, 0x03, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, -0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, -0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, -0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, -0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, -0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, -0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, -0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, -0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0xFF, 0xFF, -0xAB, 0xA0, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, -0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x10, 0x43, 0x53, 0x54, 0x00, -0x45, 0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - -/* America/Tijuana */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0xA5, 0xB6, 0xF6, 0x80, -0xA9, 0x79, 0x4F, 0x70, 0xAF, 0xF2, 0x7C, 0xF0, 0xB6, 0x66, 0x64, 0x70, 0xB7, 0x1B, 0x10, 0x00, -0xB8, 0x0A, 0xF2, 0xF0, 0xCB, 0xEA, 0x8D, 0x80, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x99, 0xBA, 0x70, -0xD7, 0x1B, 0x59, 0x00, 0xD8, 0x91, 0xB4, 0xF0, 0xE2, 0x7E, 0x59, 0xA0, 0xE3, 0x49, 0x52, 0x90, -0xE4, 0x5E, 0x3B, 0xA0, 0xE5, 0x29, 0x34, 0x90, 0xE6, 0x47, 0x58, 0x20, 0xE7, 0x12, 0x51, 0x10, -0xE8, 0x27, 0x3A, 0x20, 0xE8, 0xF2, 0x33, 0x10, 0xEA, 0x07, 0x1C, 0x20, 0xEA, 0xD2, 0x15, 0x10, -0xEB, 0xE6, 0xFE, 0x20, 0xEC, 0xB1, 0xF7, 0x10, 0xED, 0xC6, 0xE0, 0x20, 0xEE, 0x91, 0xD9, 0x10, -0x0B, 0xE0, 0xAF, 0xA0, 0x0C, 0xD9, 0xCD, 0x10, 0x0D, 0xC0, 0x91, 0xA0, 0x0E, 0xB9, 0xAF, 0x10, -0x0F, 0xA9, 0xAE, 0x20, 0x10, 0x99, 0x91, 0x10, 0x11, 0x89, 0x90, 0x20, 0x12, 0x79, 0x73, 0x10, -0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, 0x15, 0x49, 0x54, 0x20, 0x16, 0x39, 0x37, 0x10, -0x17, 0x29, 0x36, 0x20, 0x18, 0x22, 0x53, 0x90, 0x19, 0x09, 0x18, 0x20, 0x1A, 0x02, 0x35, 0x90, -0x1A, 0xF2, 0x34, 0xA0, 0x1B, 0xE2, 0x17, 0x90, 0x1C, 0xD2, 0x16, 0xA0, 0x1D, 0xC1, 0xF9, 0x90, -0x1E, 0xB1, 0xF8, 0xA0, 0x1F, 0xA1, 0xDB, 0x90, 0x20, 0x76, 0x2B, 0x20, 0x21, 0x81, 0xBD, 0x90, -0x22, 0x56, 0x0D, 0x20, 0x23, 0x6A, 0xDA, 0x10, 0x24, 0x35, 0xEF, 0x20, 0x25, 0x4A, 0xBC, 0x10, -0x26, 0x15, 0xD1, 0x20, 0x27, 0x2A, 0x9E, 0x10, 0x27, 0xFE, 0xED, 0xA0, 0x29, 0x0A, 0x80, 0x10, -0x29, 0xDE, 0xCF, 0xA0, 0x2A, 0xEA, 0x62, 0x10, 0x2B, 0xBE, 0xB1, 0xA0, 0x2C, 0xD3, 0x7E, 0x90, -0x2D, 0x9E, 0x93, 0xA0, 0x2E, 0xB3, 0x60, 0x90, 0x2F, 0x7E, 0x75, 0xA0, 0x30, 0x93, 0x42, 0x90, -0x31, 0x67, 0x92, 0x20, 0x32, 0x73, 0x24, 0x90, 0x33, 0x47, 0x74, 0x20, 0x34, 0x53, 0x06, 0x90, -0x35, 0x27, 0x56, 0x20, 0x36, 0x32, 0xE8, 0x90, 0x37, 0x07, 0x38, 0x20, 0x38, 0x1C, 0x05, 0x10, -0x38, 0xE7, 0x1A, 0x20, 0x39, 0xFB, 0xE7, 0x10, 0x3A, 0xC6, 0xFC, 0x20, 0x3B, 0xDB, 0xC9, 0x10, -0x3C, 0xB0, 0x18, 0xA0, 0x3D, 0xBB, 0xAB, 0x10, 0x3E, 0x8F, 0xFA, 0xA0, 0x3F, 0x9B, 0x8D, 0x10, -0x40, 0x6F, 0xDC, 0xA0, 0x41, 0x84, 0xA9, 0x90, 0x42, 0x4F, 0xBE, 0xA0, 0x43, 0x64, 0x8B, 0x90, -0x44, 0x2F, 0xA0, 0xA0, 0x45, 0x44, 0x6D, 0x90, 0x46, 0x0F, 0x82, 0xA0, 0x47, 0x24, 0x4F, 0x90, -0x47, 0xF8, 0x9F, 0x20, 0x49, 0x04, 0x31, 0x90, 0x49, 0xD8, 0x81, 0x20, 0x4A, 0xE4, 0x13, 0x90, -0x4B, 0xB8, 0x63, 0x20, 0x4C, 0xCD, 0x30, 0x10, 0x4D, 0x98, 0x45, 0x20, 0x4E, 0xAD, 0x12, 0x10, -0x4F, 0x78, 0x27, 0x20, 0x50, 0x8C, 0xF4, 0x10, 0x51, 0x61, 0x43, 0xA0, 0x52, 0x6C, 0xD6, 0x10, -0x53, 0x41, 0x25, 0xA0, 0x54, 0x4C, 0xB8, 0x10, 0x55, 0x21, 0x07, 0xA0, 0x56, 0x2C, 0x9A, 0x10, -0x57, 0x00, 0xE9, 0xA0, 0x58, 0x15, 0xB6, 0x90, 0x58, 0xE0, 0xCB, 0xA0, 0x59, 0xF5, 0x98, 0x90, -0x5A, 0xC0, 0xAD, 0xA0, 0x5B, 0xD5, 0x7A, 0x90, 0x5C, 0xA9, 0xCA, 0x20, 0x5D, 0xB5, 0x5C, 0x90, -0x5E, 0x89, 0xAC, 0x20, 0x5F, 0x95, 0x3E, 0x90, 0x60, 0x69, 0x8E, 0x20, 0x61, 0x7E, 0x5B, 0x10, -0x62, 0x49, 0x70, 0x20, 0x63, 0x5E, 0x3D, 0x10, 0x64, 0x29, 0x52, 0x20, 0x65, 0x3E, 0x1F, 0x10, -0x66, 0x12, 0x6E, 0xA0, 0x67, 0x1E, 0x01, 0x10, 0x67, 0xF2, 0x50, 0xA0, 0x68, 0xFD, 0xE3, 0x10, -0x69, 0xD2, 0x32, 0xA0, 0x6A, 0xDD, 0xC5, 0x10, 0x6B, 0xB2, 0x14, 0xA0, 0x6C, 0xC6, 0xE1, 0x90, -0x6D, 0x91, 0xF6, 0xA0, 0x6E, 0xA6, 0xC3, 0x90, 0x6F, 0x71, 0xD8, 0xA0, 0x70, 0x86, 0xA5, 0x90, -0x71, 0x5A, 0xF5, 0x20, 0x72, 0x66, 0x87, 0x90, 0x73, 0x3A, 0xD7, 0x20, 0x74, 0x46, 0x69, 0x90, -0x75, 0x1A, 0xB9, 0x20, 0x76, 0x2F, 0x86, 0x10, 0x76, 0xFA, 0x9B, 0x20, 0x78, 0x0F, 0x68, 0x10, -0x78, 0xDA, 0x7D, 0x20, 0x79, 0xEF, 0x4A, 0x10, 0x7A, 0xBA, 0x5F, 0x20, 0x7B, 0xCF, 0x2C, 0x10, -0x7C, 0xA3, 0x7B, 0xA0, 0x7D, 0xAF, 0x0E, 0x10, 0x7E, 0x83, 0x5D, 0xA0, 0x7F, 0x8E, 0xF0, 0x10, -0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x04, 0x05, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0xFF, 0xFF, 0x92, 0x4C, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, -0x04, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, 0x9D, -0x90, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, -0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - -/* America/Toronto */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xE8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xB8, 0x93, 0x70, -0x9F, 0xC0, 0x31, 0x60, 0xA0, 0x87, 0x2E, 0xC8, 0xA1, 0x9A, 0xB1, 0x40, 0xA2, 0x94, 0x06, 0xF0, -0xA3, 0x55, 0xA9, 0x40, 0xA4, 0x86, 0x5D, 0xF0, 0xA5, 0x28, 0x78, 0x60, 0xA6, 0x66, 0x3F, 0xF0, -0xA7, 0x0C, 0x4E, 0xE0, 0xA8, 0x46, 0x21, 0xF0, 0xA8, 0xEC, 0x30, 0xE0, 0xAA, 0x1C, 0xC9, 0x70, -0xAA, 0xD5, 0x4D, 0x60, 0xAB, 0xFC, 0xAB, 0x70, 0xAC, 0xB5, 0x2F, 0x60, 0xAD, 0xDC, 0x8D, 0x70, -0xAE, 0x95, 0x11, 0x60, 0xAF, 0xBC, 0x6F, 0x70, 0xB0, 0x7E, 0x2D, 0xE0, 0xB1, 0x9C, 0x51, 0x70, -0xB2, 0x67, 0x4A, 0x60, 0xB3, 0x7C, 0x33, 0x70, 0xB4, 0x47, 0x2C, 0x60, 0xB5, 0x5C, 0x15, 0x70, -0xB6, 0x27, 0x0E, 0x60, 0xB7, 0x3B, 0xF7, 0x70, 0xB8, 0x06, 0xF0, 0x60, 0xB9, 0x25, 0x13, 0xF0, -0xB9, 0xE6, 0xD2, 0x60, 0xBB, 0x04, 0xF5, 0xF0, 0xBB, 0xCF, 0xEE, 0xE0, 0xBC, 0xE4, 0xD7, 0xF0, -0xBD, 0xAF, 0xD0, 0xE0, 0xBE, 0xC4, 0xB9, 0xF0, 0xBF, 0x8F, 0xB2, 0xE0, 0xC0, 0xA4, 0x9B, 0xF0, -0xC1, 0x6F, 0x94, 0xE0, 0xC2, 0x84, 0x7D, 0xF0, 0xC3, 0x4F, 0x76, 0xE0, 0xC4, 0x64, 0x5F, 0xF0, -0xC5, 0x2F, 0x58, 0xE0, 0xC6, 0x4D, 0x7C, 0x70, 0xC7, 0x0F, 0x3A, 0xE0, 0xC8, 0x2D, 0x5E, 0x70, -0xCB, 0x88, 0xF0, 0x70, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xFB, 0xE0, 0xD3, 0x75, 0xE4, 0xF0, -0xD4, 0x40, 0xDD, 0xE0, 0xD5, 0x55, 0xAA, 0xD0, 0xD6, 0x20, 0xA3, 0xC0, 0xD7, 0x35, 0x8C, 0xD0, -0xD8, 0x00, 0x85, 0xC0, 0xD9, 0x15, 0x6E, 0xD0, 0xDA, 0x33, 0x76, 0x40, 0xDA, 0xFE, 0xA7, 0x70, -0xDC, 0x13, 0x74, 0x60, 0xDC, 0xDE, 0x89, 0x70, 0xDD, 0xA9, 0x82, 0x60, 0xDE, 0xBE, 0x6B, 0x70, -0xDF, 0x89, 0x64, 0x60, 0xE0, 0x9E, 0x4D, 0x70, 0xE1, 0x69, 0x46, 0x60, 0xE2, 0x7E, 0x2F, 0x70, -0xE3, 0x49, 0x28, 0x60, 0xE4, 0x5E, 0x11, 0x70, 0xE5, 0x29, 0x0A, 0x60, 0xE6, 0x47, 0x2D, 0xF0, -0xE7, 0x12, 0x26, 0xE0, 0xE8, 0x27, 0x0F, 0xF0, 0xE9, 0x16, 0xF2, 0xE0, 0xEA, 0x06, 0xF1, 0xF0, -0xEA, 0xF6, 0xD4, 0xE0, 0xEB, 0xE6, 0xD3, 0xF0, 0xEC, 0xD6, 0xB6, 0xE0, 0xED, 0xC6, 0xB5, 0xF0, -0xEE, 0xBF, 0xD3, 0x60, 0xEF, 0xAF, 0xD2, 0x70, 0xF0, 0x9F, 0xB5, 0x60, 0xF1, 0x8F, 0xB4, 0x70, -0xF2, 0x7F, 0x97, 0x60, 0xF3, 0x6F, 0x96, 0x70, 0xF4, 0x5F, 0x79, 0x60, 0xF5, 0x4F, 0x78, 0x70, -0xF6, 0x3F, 0x5B, 0x60, 0xF7, 0x2F, 0x5A, 0x70, 0xF8, 0x28, 0x77, 0xE0, 0xF9, 0x0F, 0x3C, 0x70, -0xFA, 0x08, 0x59, 0xE0, 0xFA, 0xF8, 0x58, 0xF0, 0xFB, 0xE8, 0x3B, 0xE0, 0xFC, 0xD8, 0x3A, 0xF0, -0xFD, 0xC8, 0x1D, 0xE0, 0xFE, 0xB8, 0x1C, 0xF0, 0xFF, 0xA7, 0xFF, 0xE0, 0x00, 0x97, 0xFE, 0xF0, -0x01, 0x87, 0xE1, 0xE0, 0x02, 0x77, 0xE0, 0xF0, 0x03, 0x70, 0xFE, 0x60, 0x04, 0x60, 0xFD, 0x70, -0x05, 0x50, 0xE0, 0x60, 0x06, 0x40, 0xDF, 0x70, 0x07, 0x30, 0xC2, 0x60, 0x08, 0x20, 0xC1, 0x70, -0x09, 0x10, 0xA4, 0x60, 0x0A, 0x00, 0xA3, 0x70, 0x0A, 0xF0, 0x86, 0x60, 0x0B, 0xE0, 0x85, 0x70, -0x0C, 0xD9, 0xA2, 0xE0, 0x0D, 0xC0, 0x67, 0x70, 0x0E, 0xB9, 0x84, 0xE0, 0x0F, 0xA9, 0x83, 0xF0, -0x10, 0x99, 0x66, 0xE0, 0x11, 0x89, 0x65, 0xF0, 0x12, 0x79, 0x48, 0xE0, 0x13, 0x69, 0x47, 0xF0, -0x14, 0x59, 0x2A, 0xE0, 0x15, 0x49, 0x29, 0xF0, 0x16, 0x39, 0x0C, 0xE0, 0x17, 0x29, 0x0B, 0xF0, -0x18, 0x22, 0x29, 0x60, 0x19, 0x08, 0xED, 0xF0, 0x1A, 0x02, 0x0B, 0x60, 0x1A, 0xF2, 0x0A, 0x70, -0x1B, 0xE1, 0xED, 0x60, 0x1C, 0xD1, 0xEC, 0x70, 0x1D, 0xC1, 0xCF, 0x60, 0x1E, 0xB1, 0xCE, 0x70, -0x1F, 0xA1, 0xB1, 0x60, 0x20, 0x76, 0x00, 0xF0, 0x21, 0x81, 0x93, 0x60, 0x22, 0x55, 0xE2, 0xF0, -0x23, 0x6A, 0xAF, 0xE0, 0x24, 0x35, 0xC4, 0xF0, 0x25, 0x4A, 0x91, 0xE0, 0x26, 0x15, 0xA6, 0xF0, -0x27, 0x2A, 0x73, 0xE0, 0x27, 0xFE, 0xC3, 0x70, 0x29, 0x0A, 0x55, 0xE0, 0x29, 0xDE, 0xA5, 0x70, -0x2A, 0xEA, 0x37, 0xE0, 0x2B, 0xBE, 0x87, 0x70, 0x2C, 0xD3, 0x54, 0x60, 0x2D, 0x9E, 0x69, 0x70, -0x2E, 0xB3, 0x36, 0x60, 0x2F, 0x7E, 0x4B, 0x70, 0x30, 0x93, 0x18, 0x60, 0x31, 0x67, 0x67, 0xF0, -0x32, 0x72, 0xFA, 0x60, 0x33, 0x47, 0x49, 0xF0, 0x34, 0x52, 0xDC, 0x60, 0x35, 0x27, 0x2B, 0xF0, -0x36, 0x32, 0xBE, 0x60, 0x37, 0x07, 0x0D, 0xF0, 0x38, 0x1B, 0xDA, 0xE0, 0x38, 0xE6, 0xEF, 0xF0, -0x39, 0xFB, 0xBC, 0xE0, 0x3A, 0xC6, 0xD1, 0xF0, 0x3B, 0xDB, 0x9E, 0xE0, 0x3C, 0xAF, 0xEE, 0x70, -0x3D, 0xBB, 0x80, 0xE0, 0x3E, 0x8F, 0xD0, 0x70, 0x3F, 0x9B, 0x62, 0xE0, 0x40, 0x6F, 0xB2, 0x70, -0x41, 0x84, 0x7F, 0x60, 0x42, 0x4F, 0x94, 0x70, 0x43, 0x64, 0x61, 0x60, 0x44, 0x2F, 0x76, 0x70, -0x45, 0x44, 0x43, 0x60, 0x45, 0xF3, 0xA8, 0xF0, 0x47, 0x2D, 0x5F, 0xE0, 0x47, 0xD3, 0x8A, 0xF0, -0x49, 0x0D, 0x41, 0xE0, 0x49, 0xB3, 0x6C, 0xF0, 0x4A, 0xED, 0x23, 0xE0, 0x4B, 0x9C, 0x89, 0x70, -0x4C, 0xD6, 0x40, 0x60, 0x4D, 0x7C, 0x6B, 0x70, 0x4E, 0xB6, 0x22, 0x60, 0x4F, 0x5C, 0x4D, 0x70, -0x50, 0x96, 0x04, 0x60, 0x51, 0x3C, 0x2F, 0x70, 0x52, 0x75, 0xE6, 0x60, 0x53, 0x1C, 0x11, 0x70, -0x54, 0x55, 0xC8, 0x60, 0x54, 0xFB, 0xF3, 0x70, 0x56, 0x35, 0xAA, 0x60, 0x56, 0xE5, 0x0F, 0xF0, -0x58, 0x1E, 0xC6, 0xE0, 0x58, 0xC4, 0xF1, 0xF0, 0x59, 0xFE, 0xA8, 0xE0, 0x5A, 0xA4, 0xD3, 0xF0, -0x5B, 0xDE, 0x8A, 0xE0, 0x5C, 0x84, 0xB5, 0xF0, 0x5D, 0xBE, 0x6C, 0xE0, 0x5E, 0x64, 0x97, 0xF0, -0x5F, 0x9E, 0x4E, 0xE0, 0x60, 0x4D, 0xB4, 0x70, 0x61, 0x87, 0x6B, 0x60, 0x62, 0x2D, 0x96, 0x70, -0x63, 0x67, 0x4D, 0x60, 0x64, 0x0D, 0x78, 0x70, 0x65, 0x47, 0x2F, 0x60, 0x65, 0xED, 0x5A, 0x70, -0x67, 0x27, 0x11, 0x60, 0x67, 0xCD, 0x3C, 0x70, 0x69, 0x06, 0xF3, 0x60, 0x69, 0xAD, 0x1E, 0x70, -0x6A, 0xE6, 0xD5, 0x60, 0x6B, 0x96, 0x3A, 0xF0, 0x6C, 0xCF, 0xF1, 0xE0, 0x6D, 0x76, 0x1C, 0xF0, -0x6E, 0xAF, 0xD3, 0xE0, 0x6F, 0x55, 0xFE, 0xF0, 0x70, 0x8F, 0xB5, 0xE0, 0x71, 0x35, 0xE0, 0xF0, -0x72, 0x6F, 0x97, 0xE0, 0x73, 0x15, 0xC2, 0xF0, 0x74, 0x4F, 0x79, 0xE0, 0x74, 0xFE, 0xDF, 0x70, -0x76, 0x38, 0x96, 0x60, 0x76, 0xDE, 0xC1, 0x70, 0x78, 0x18, 0x78, 0x60, 0x78, 0xBE, 0xA3, 0x70, -0x79, 0xF8, 0x5A, 0x60, 0x7A, 0x9E, 0x85, 0x70, 0x7B, 0xD8, 0x3C, 0x60, 0x7C, 0x7E, 0x67, 0x70, -0x7D, 0xB8, 0x1E, 0x60, 0x7E, 0x5E, 0x49, 0x70, 0x7F, 0x98, 0x00, 0x60, 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, 0x02, 0x03, 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, 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, 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, 0x00, 0x01, -0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, -0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0x45, 0x44, 0x54, 0x00, -0x45, 0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, -0x00, 0x00, 0x00, 0x01, - -/* America/Tortola */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF4, 0x37, 0x14, -0x01, 0xFF, 0xFF, 0xC3, 0x6C, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Vancouver */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xBD, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xB8, 0xBD, 0xA0, -0x9F, 0xC0, 0x5B, 0x90, 0xCB, 0x89, 0x1A, 0xA0, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x26, 0x10, -0xD3, 0x76, 0x0F, 0x20, 0xD4, 0x53, 0x7D, 0x10, 0xD5, 0x55, 0xF1, 0x20, 0xD6, 0x20, 0xEA, 0x10, -0xD7, 0x35, 0xD3, 0x20, 0xD8, 0x00, 0xCC, 0x10, 0xD9, 0x15, 0xB5, 0x20, 0xD9, 0xE0, 0xAE, 0x10, -0xDA, 0xFE, 0xD1, 0xA0, 0xDB, 0xC0, 0x90, 0x10, 0xDC, 0xDE, 0xB3, 0xA0, 0xDD, 0xA9, 0xAC, 0x90, -0xDE, 0xBE, 0x95, 0xA0, 0xDF, 0x89, 0x8E, 0x90, 0xE0, 0x9E, 0x77, 0xA0, 0xE1, 0x69, 0x70, 0x90, -0xE2, 0x7E, 0x59, 0xA0, 0xE3, 0x49, 0x52, 0x90, 0xE4, 0x5E, 0x3B, 0xA0, 0xE5, 0x29, 0x34, 0x90, -0xE6, 0x47, 0x58, 0x20, 0xE7, 0x12, 0x51, 0x10, 0xE8, 0x27, 0x3A, 0x20, 0xE8, 0xF2, 0x33, 0x10, -0xEA, 0x07, 0x1C, 0x20, 0xEA, 0xD2, 0x15, 0x10, 0xEB, 0xE6, 0xFE, 0x20, 0xEC, 0xB1, 0xF7, 0x10, -0xED, 0xC6, 0xE0, 0x20, 0xEE, 0x91, 0xD9, 0x10, 0xEF, 0xAF, 0xFC, 0xA0, 0xF0, 0x71, 0xBB, 0x10, -0xF1, 0x8F, 0xDE, 0xA0, 0xF2, 0x7F, 0xC1, 0x90, 0xF3, 0x6F, 0xC0, 0xA0, 0xF4, 0x5F, 0xA3, 0x90, -0xF5, 0x4F, 0xA2, 0xA0, 0xF6, 0x3F, 0x85, 0x90, 0xF7, 0x2F, 0x84, 0xA0, 0xF8, 0x28, 0xA2, 0x10, -0xF9, 0x0F, 0x66, 0xA0, 0xFA, 0x08, 0x84, 0x10, 0xFA, 0xF8, 0x83, 0x20, 0xFB, 0xE8, 0x66, 0x10, -0xFC, 0xD8, 0x65, 0x20, 0xFD, 0xC8, 0x48, 0x10, 0xFE, 0xB8, 0x47, 0x20, 0xFF, 0xA8, 0x2A, 0x10, -0x00, 0x98, 0x29, 0x20, 0x01, 0x88, 0x0C, 0x10, 0x02, 0x78, 0x0B, 0x20, 0x03, 0x71, 0x28, 0x90, -0x04, 0x61, 0x27, 0xA0, 0x05, 0x51, 0x0A, 0x90, 0x06, 0x41, 0x09, 0xA0, 0x07, 0x30, 0xEC, 0x90, -0x08, 0x20, 0xEB, 0xA0, 0x09, 0x10, 0xCE, 0x90, 0x0A, 0x00, 0xCD, 0xA0, 0x0A, 0xF0, 0xB0, 0x90, -0x0B, 0xE0, 0xAF, 0xA0, 0x0C, 0xD9, 0xCD, 0x10, 0x0D, 0xC0, 0x91, 0xA0, 0x0E, 0xB9, 0xAF, 0x10, -0x0F, 0xA9, 0xAE, 0x20, 0x10, 0x99, 0x91, 0x10, 0x11, 0x89, 0x90, 0x20, 0x12, 0x79, 0x73, 0x10, -0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, 0x15, 0x49, 0x54, 0x20, 0x16, 0x39, 0x37, 0x10, -0x17, 0x29, 0x36, 0x20, 0x18, 0x22, 0x53, 0x90, 0x19, 0x09, 0x18, 0x20, 0x1A, 0x02, 0x35, 0x90, -0x1A, 0xF2, 0x34, 0xA0, 0x1B, 0xE2, 0x17, 0x90, 0x1C, 0xD2, 0x16, 0xA0, 0x1D, 0xC1, 0xF9, 0x90, -0x1E, 0xB1, 0xF8, 0xA0, 0x1F, 0xA1, 0xDB, 0x90, 0x20, 0x76, 0x2B, 0x20, 0x21, 0x81, 0xBD, 0x90, -0x22, 0x56, 0x0D, 0x20, 0x23, 0x6A, 0xDA, 0x10, 0x24, 0x35, 0xEF, 0x20, 0x25, 0x4A, 0xBC, 0x10, -0x26, 0x15, 0xD1, 0x20, 0x27, 0x2A, 0x9E, 0x10, 0x27, 0xFE, 0xED, 0xA0, 0x29, 0x0A, 0x80, 0x10, -0x29, 0xDE, 0xCF, 0xA0, 0x2A, 0xEA, 0x62, 0x10, 0x2B, 0xBE, 0xB1, 0xA0, 0x2C, 0xD3, 0x7E, 0x90, -0x2D, 0x9E, 0x93, 0xA0, 0x2E, 0xB3, 0x60, 0x90, 0x2F, 0x7E, 0x75, 0xA0, 0x30, 0x93, 0x42, 0x90, -0x31, 0x67, 0x92, 0x20, 0x32, 0x73, 0x24, 0x90, 0x33, 0x47, 0x74, 0x20, 0x34, 0x53, 0x06, 0x90, -0x35, 0x27, 0x56, 0x20, 0x36, 0x32, 0xE8, 0x90, 0x37, 0x07, 0x38, 0x20, 0x38, 0x1C, 0x05, 0x10, -0x38, 0xE7, 0x1A, 0x20, 0x39, 0xFB, 0xE7, 0x10, 0x3A, 0xC6, 0xFC, 0x20, 0x3B, 0xDB, 0xC9, 0x10, -0x3C, 0xB0, 0x18, 0xA0, 0x3D, 0xBB, 0xAB, 0x10, 0x3E, 0x8F, 0xFA, 0xA0, 0x3F, 0x9B, 0x8D, 0x10, -0x40, 0x6F, 0xDC, 0xA0, 0x41, 0x84, 0xA9, 0x90, 0x42, 0x4F, 0xBE, 0xA0, 0x43, 0x64, 0x8B, 0x90, -0x44, 0x2F, 0xA0, 0xA0, 0x45, 0x44, 0x6D, 0x90, 0x45, 0xF3, 0xD3, 0x20, 0x47, 0x2D, 0x8A, 0x10, -0x47, 0xD3, 0xB5, 0x20, 0x49, 0x0D, 0x6C, 0x10, 0x49, 0xB3, 0x97, 0x20, 0x4A, 0xED, 0x4E, 0x10, -0x4B, 0x9C, 0xB3, 0xA0, 0x4C, 0xD6, 0x6A, 0x90, 0x4D, 0x7C, 0x95, 0xA0, 0x4E, 0xB6, 0x4C, 0x90, -0x4F, 0x5C, 0x77, 0xA0, 0x50, 0x96, 0x2E, 0x90, 0x51, 0x3C, 0x59, 0xA0, 0x52, 0x76, 0x10, 0x90, -0x53, 0x1C, 0x3B, 0xA0, 0x54, 0x55, 0xF2, 0x90, 0x54, 0xFC, 0x1D, 0xA0, 0x56, 0x35, 0xD4, 0x90, -0x56, 0xE5, 0x3A, 0x20, 0x58, 0x1E, 0xF1, 0x10, 0x58, 0xC5, 0x1C, 0x20, 0x59, 0xFE, 0xD3, 0x10, -0x5A, 0xA4, 0xFE, 0x20, 0x5B, 0xDE, 0xB5, 0x10, 0x5C, 0x84, 0xE0, 0x20, 0x5D, 0xBE, 0x97, 0x10, -0x5E, 0x64, 0xC2, 0x20, 0x5F, 0x9E, 0x79, 0x10, 0x60, 0x4D, 0xDE, 0xA0, 0x61, 0x87, 0x95, 0x90, -0x62, 0x2D, 0xC0, 0xA0, 0x63, 0x67, 0x77, 0x90, 0x64, 0x0D, 0xA2, 0xA0, 0x65, 0x47, 0x59, 0x90, -0x65, 0xED, 0x84, 0xA0, 0x67, 0x27, 0x3B, 0x90, 0x67, 0xCD, 0x66, 0xA0, 0x69, 0x07, 0x1D, 0x90, -0x69, 0xAD, 0x48, 0xA0, 0x6A, 0xE6, 0xFF, 0x90, 0x6B, 0x96, 0x65, 0x20, 0x6C, 0xD0, 0x1C, 0x10, -0x6D, 0x76, 0x47, 0x20, 0x6E, 0xAF, 0xFE, 0x10, 0x6F, 0x56, 0x29, 0x20, 0x70, 0x8F, 0xE0, 0x10, -0x71, 0x36, 0x0B, 0x20, 0x72, 0x6F, 0xC2, 0x10, 0x73, 0x15, 0xED, 0x20, 0x74, 0x4F, 0xA4, 0x10, -0x74, 0xFF, 0x09, 0xA0, 0x76, 0x38, 0xC0, 0x90, 0x76, 0xDE, 0xEB, 0xA0, 0x78, 0x18, 0xA2, 0x90, -0x78, 0xBE, 0xCD, 0xA0, 0x79, 0xF8, 0x84, 0x90, 0x7A, 0x9E, 0xAF, 0xA0, 0x7B, 0xD8, 0x66, 0x90, -0x7C, 0x7E, 0x91, 0xA0, 0x7D, 0xB8, 0x48, 0x90, 0x7E, 0x5E, 0x73, 0xA0, 0x7F, 0x98, 0x2A, 0x90, -0x00, 0x01, 0x02, 0x03, 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, 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, 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, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0x9D, -0x90, 0x01, 0x00, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x08, 0xFF, -0xFF, 0x9D, 0x90, 0x01, 0x0C, 0x50, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, -0x00, 0x50, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - -/* America/Virgin */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF4, 0x37, 0x60, -0x01, 0xFF, 0xFF, 0xC3, 0x20, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* America/Whitehorse */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1D, 0x9E, 0xB8, 0xCB, 0xB0, -0x9F, 0xBB, 0x23, 0xA0, 0xA0, 0xD0, 0x0C, 0xB0, 0xA1, 0xA2, 0xD2, 0x80, 0xCB, 0x89, 0x28, 0xB0, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x34, 0x20, 0xF7, 0x2F, 0x76, 0x90, 0xF8, 0x28, 0xA2, 0x10, -0xF9, 0x69, 0x1A, 0xB0, 0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, 0x15, 0x49, 0x54, 0x20, -0x16, 0x39, 0x37, 0x10, 0x17, 0x29, 0x36, 0x20, 0x18, 0x22, 0x53, 0x90, 0x19, 0x09, 0x18, 0x20, -0x1A, 0x02, 0x35, 0x90, 0x1A, 0xF2, 0x34, 0xA0, 0x1B, 0xE2, 0x17, 0x90, 0x1C, 0xD2, 0x16, 0xA0, -0x1D, 0xC1, 0xF9, 0x90, 0x1E, 0xB1, 0xF8, 0xA0, 0x1F, 0xA1, 0xDB, 0x90, 0x20, 0x76, 0x2B, 0x20, -0x21, 0x81, 0xBD, 0x90, 0x22, 0x56, 0x0D, 0x20, 0x23, 0x6A, 0xDA, 0x10, 0x24, 0x35, 0xEF, 0x20, -0x25, 0x4A, 0xBC, 0x10, 0x26, 0x15, 0xD1, 0x20, 0x27, 0x2A, 0x9E, 0x10, 0x27, 0xFE, 0xED, 0xA0, -0x29, 0x0A, 0x80, 0x10, 0x29, 0xDE, 0xCF, 0xA0, 0x2A, 0xEA, 0x62, 0x10, 0x2B, 0xBE, 0xB1, 0xA0, -0x2C, 0xD3, 0x7E, 0x90, 0x2D, 0x9E, 0x93, 0xA0, 0x2E, 0xB3, 0x60, 0x90, 0x2F, 0x7E, 0x75, 0xA0, -0x30, 0x93, 0x42, 0x90, 0x31, 0x67, 0x92, 0x20, 0x32, 0x73, 0x24, 0x90, 0x33, 0x47, 0x74, 0x20, -0x34, 0x53, 0x06, 0x90, 0x35, 0x27, 0x56, 0x20, 0x36, 0x32, 0xE8, 0x90, 0x37, 0x07, 0x38, 0x20, -0x38, 0x1C, 0x05, 0x10, 0x38, 0xE7, 0x1A, 0x20, 0x39, 0xFB, 0xE7, 0x10, 0x3A, 0xC6, 0xFC, 0x20, -0x3B, 0xDB, 0xC9, 0x10, 0x3C, 0xB0, 0x18, 0xA0, 0x3D, 0xBB, 0xAB, 0x10, 0x3E, 0x8F, 0xFA, 0xA0, -0x3F, 0x9B, 0x8D, 0x10, 0x40, 0x6F, 0xDC, 0xA0, 0x41, 0x84, 0xA9, 0x90, 0x42, 0x4F, 0xBE, 0xA0, -0x43, 0x64, 0x8B, 0x90, 0x44, 0x2F, 0xA0, 0xA0, 0x45, 0x44, 0x6D, 0x90, 0x45, 0xF3, 0xD3, 0x20, -0x47, 0x2D, 0x8A, 0x10, 0x47, 0xD3, 0xB5, 0x20, 0x49, 0x0D, 0x6C, 0x10, 0x49, 0xB3, 0x97, 0x20, -0x4A, 0xED, 0x4E, 0x10, 0x4B, 0x9C, 0xB3, 0xA0, 0x4C, 0xD6, 0x6A, 0x90, 0x4D, 0x7C, 0x95, 0xA0, -0x4E, 0xB6, 0x4C, 0x90, 0x4F, 0x5C, 0x77, 0xA0, 0x50, 0x96, 0x2E, 0x90, 0x51, 0x3C, 0x59, 0xA0, -0x52, 0x76, 0x10, 0x90, 0x53, 0x1C, 0x3B, 0xA0, 0x54, 0x55, 0xF2, 0x90, 0x54, 0xFC, 0x1D, 0xA0, -0x56, 0x35, 0xD4, 0x90, 0x56, 0xE5, 0x3A, 0x20, 0x58, 0x1E, 0xF1, 0x10, 0x58, 0xC5, 0x1C, 0x20, -0x59, 0xFE, 0xD3, 0x10, 0x5A, 0xA4, 0xFE, 0x20, 0x5B, 0xDE, 0xB5, 0x10, 0x5C, 0x84, 0xE0, 0x20, -0x5D, 0xBE, 0x97, 0x10, 0x5E, 0x64, 0xC2, 0x20, 0x5F, 0x9E, 0x79, 0x10, 0x60, 0x4D, 0xDE, 0xA0, -0x61, 0x87, 0x95, 0x90, 0x62, 0x2D, 0xC0, 0xA0, 0x63, 0x67, 0x77, 0x90, 0x64, 0x0D, 0xA2, 0xA0, -0x65, 0x47, 0x59, 0x90, 0x65, 0xED, 0x84, 0xA0, 0x67, 0x27, 0x3B, 0x90, 0x67, 0xCD, 0x66, 0xA0, -0x69, 0x07, 0x1D, 0x90, 0x69, 0xAD, 0x48, 0xA0, 0x6A, 0xE6, 0xFF, 0x90, 0x6B, 0x96, 0x65, 0x20, -0x6C, 0xD0, 0x1C, 0x10, 0x6D, 0x76, 0x47, 0x20, 0x6E, 0xAF, 0xFE, 0x10, 0x6F, 0x56, 0x29, 0x20, -0x70, 0x8F, 0xE0, 0x10, 0x71, 0x36, 0x0B, 0x20, 0x72, 0x6F, 0xC2, 0x10, 0x73, 0x15, 0xED, 0x20, -0x74, 0x4F, 0xA4, 0x10, 0x74, 0xFF, 0x09, 0xA0, 0x76, 0x38, 0xC0, 0x90, 0x76, 0xDE, 0xEB, 0xA0, -0x78, 0x18, 0xA2, 0x90, 0x78, 0xBE, 0xCD, 0xA0, 0x79, 0xF8, 0x84, 0x90, 0x7A, 0x9E, 0xAF, 0xA0, -0x7B, 0xD8, 0x66, 0x90, 0x7C, 0x7E, 0x91, 0xA0, 0x7D, 0xB8, 0x48, 0x90, 0x7E, 0x5E, 0x73, 0xA0, -0x7F, 0x98, 0x2A, 0x90, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x01, 0x04, 0x01, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x00, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x04, 0xFF, 0xFF, -0x8F, 0x80, 0x01, 0x08, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x0C, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x10, -0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x15, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x19, 0x59, 0x44, 0x54, 0x00, -0x59, 0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50, 0x54, 0x00, 0x59, 0x44, 0x44, 0x54, -0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - -/* America/Winnipeg */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x9B, 0x01, 0xFB, 0xE0, -0x9B, 0xC3, 0xBA, 0x50, 0x9E, 0xB8, 0xA1, 0x80, 0x9F, 0xC0, 0x3F, 0x70, 0xC2, 0xA0, 0x3B, 0x80, -0xC3, 0x4F, 0x84, 0xF0, 0xCB, 0x88, 0xFE, 0x80, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, -0xD3, 0x88, 0x68, 0x00, 0xD4, 0x53, 0x60, 0xF0, 0xD5, 0x55, 0xD5, 0x00, 0xD6, 0x20, 0xCD, 0xF0, -0xD7, 0x35, 0xB7, 0x00, 0xD8, 0x00, 0xAF, 0xF0, 0xD9, 0x15, 0x99, 0x00, 0xD9, 0xE0, 0x91, 0xF0, -0xDB, 0x00, 0x07, 0x00, 0xDB, 0xC8, 0x5C, 0xF0, 0xDC, 0xDE, 0x97, 0x80, 0xDD, 0xA9, 0x90, 0x70, -0xDE, 0xBE, 0x79, 0x80, 0xDF, 0x89, 0x72, 0x70, 0xE0, 0x9E, 0x5B, 0x80, 0xE1, 0x69, 0x54, 0x70, -0xE2, 0x7E, 0x3D, 0x80, 0xE3, 0x49, 0x36, 0x70, 0xE4, 0x5E, 0x1F, 0x80, 0xE5, 0x29, 0x18, 0x70, -0xE6, 0x47, 0x3C, 0x00, 0xE7, 0x12, 0x34, 0xF0, 0xE8, 0x27, 0x1E, 0x00, 0xE8, 0xF2, 0x16, 0xF0, -0xEA, 0x07, 0x00, 0x00, 0xEA, 0xD1, 0xF8, 0xF0, 0xEB, 0xE6, 0xE2, 0x00, 0xEC, 0xD6, 0xC4, 0xF0, -0xED, 0xC6, 0xC4, 0x00, 0xEE, 0x91, 0xBC, 0xF0, 0xF3, 0x6F, 0xA4, 0x80, 0xF4, 0x31, 0x62, 0xF0, -0xF9, 0x0F, 0x4A, 0x80, 0xFA, 0x08, 0x76, 0x00, 0xFA, 0xF8, 0x67, 0x00, 0xFB, 0xE8, 0x58, 0x00, -0xFC, 0xD8, 0x49, 0x00, 0xFD, 0xC8, 0x3A, 0x00, 0xFE, 0xB8, 0x2B, 0x00, 0xFF, 0xA8, 0x1C, 0x00, -0x00, 0x98, 0x0D, 0x00, 0x01, 0x87, 0xFE, 0x00, 0x02, 0x77, 0xEF, 0x00, 0x03, 0x71, 0x1A, 0x80, -0x04, 0x61, 0x0B, 0x80, 0x05, 0x50, 0xFC, 0x80, 0x06, 0x40, 0xED, 0x80, 0x07, 0x30, 0xDE, 0x80, -0x08, 0x20, 0xCF, 0x80, 0x09, 0x10, 0xC0, 0x80, 0x0A, 0x00, 0xB1, 0x80, 0x0A, 0xF0, 0xA2, 0x80, -0x0B, 0xE0, 0x93, 0x80, 0x0C, 0xD9, 0xBF, 0x00, 0x0D, 0xC0, 0x75, 0x80, 0x0E, 0xB9, 0xA1, 0x00, -0x0F, 0xA9, 0x92, 0x00, 0x10, 0x99, 0x83, 0x00, 0x11, 0x89, 0x74, 0x00, 0x12, 0x79, 0x65, 0x00, -0x13, 0x69, 0x56, 0x00, 0x14, 0x59, 0x47, 0x00, 0x15, 0x49, 0x38, 0x00, 0x16, 0x39, 0x29, 0x00, -0x17, 0x29, 0x1A, 0x00, 0x18, 0x22, 0x45, 0x80, 0x19, 0x08, 0xFC, 0x00, 0x1A, 0x02, 0x27, 0x80, -0x1A, 0xF2, 0x18, 0x80, 0x1B, 0xE2, 0x09, 0x80, 0x1C, 0xD1, 0xFA, 0x80, 0x1D, 0xC1, 0xEB, 0x80, -0x1E, 0xB1, 0xDC, 0x80, 0x1F, 0xA1, 0xCD, 0x80, 0x20, 0x76, 0x0F, 0x00, 0x21, 0x81, 0xAF, 0x80, -0x22, 0x55, 0xF1, 0x00, 0x23, 0x6A, 0xCC, 0x00, 0x24, 0x35, 0xD3, 0x00, 0x25, 0x4A, 0xAE, 0x00, -0x26, 0x15, 0xB5, 0x00, 0x27, 0x2A, 0x90, 0x00, 0x27, 0xFE, 0xD1, 0x80, 0x29, 0x0A, 0x72, 0x00, -0x29, 0xDE, 0xB3, 0x80, 0x2A, 0xEA, 0x54, 0x00, 0x2B, 0xBE, 0x95, 0x80, 0x2C, 0xD3, 0x70, 0x80, -0x2D, 0x9E, 0x77, 0x80, 0x2E, 0xB3, 0x52, 0x80, 0x2F, 0x7E, 0x59, 0x80, 0x30, 0x93, 0x34, 0x80, -0x31, 0x67, 0x76, 0x00, 0x32, 0x73, 0x16, 0x80, 0x33, 0x47, 0x58, 0x00, 0x34, 0x52, 0xF8, 0x80, -0x35, 0x27, 0x3A, 0x00, 0x36, 0x32, 0xDA, 0x80, 0x37, 0x07, 0x1C, 0x00, 0x38, 0x1B, 0xF7, 0x00, -0x38, 0xE6, 0xFE, 0x00, 0x39, 0xFB, 0xD9, 0x00, 0x3A, 0xC6, 0xE0, 0x00, 0x3B, 0xDB, 0xBB, 0x00, -0x3C, 0xAF, 0xFC, 0x80, 0x3D, 0xBB, 0x9D, 0x00, 0x3E, 0x8F, 0xDE, 0x80, 0x3F, 0x9B, 0x7F, 0x00, -0x40, 0x6F, 0xC0, 0x80, 0x41, 0x84, 0x9B, 0x80, 0x42, 0x4F, 0xA2, 0x80, 0x43, 0x64, 0x7D, 0x80, -0x43, 0xB7, 0x6F, 0xE0, 0x44, 0x2F, 0x84, 0x80, 0x45, 0x44, 0x51, 0x70, 0x45, 0xF3, 0xB7, 0x00, -0x47, 0x2D, 0x6D, 0xF0, 0x47, 0xD3, 0x99, 0x00, 0x49, 0x0D, 0x4F, 0xF0, 0x49, 0xB3, 0x7B, 0x00, -0x4A, 0xED, 0x31, 0xF0, 0x4B, 0x9C, 0x97, 0x80, 0x4C, 0xD6, 0x4E, 0x70, 0x4D, 0x7C, 0x79, 0x80, -0x4E, 0xB6, 0x30, 0x70, 0x4F, 0x5C, 0x5B, 0x80, 0x50, 0x96, 0x12, 0x70, 0x51, 0x3C, 0x3D, 0x80, -0x52, 0x75, 0xF4, 0x70, 0x53, 0x1C, 0x1F, 0x80, 0x54, 0x55, 0xD6, 0x70, 0x54, 0xFC, 0x01, 0x80, -0x56, 0x35, 0xB8, 0x70, 0x56, 0xE5, 0x1E, 0x00, 0x58, 0x1E, 0xD4, 0xF0, 0x58, 0xC5, 0x00, 0x00, -0x59, 0xFE, 0xB6, 0xF0, 0x5A, 0xA4, 0xE2, 0x00, 0x5B, 0xDE, 0x98, 0xF0, 0x5C, 0x84, 0xC4, 0x00, -0x5D, 0xBE, 0x7A, 0xF0, 0x5E, 0x64, 0xA6, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x60, 0x4D, 0xC2, 0x80, -0x61, 0x87, 0x79, 0x70, 0x62, 0x2D, 0xA4, 0x80, 0x63, 0x67, 0x5B, 0x70, 0x64, 0x0D, 0x86, 0x80, -0x65, 0x47, 0x3D, 0x70, 0x65, 0xED, 0x68, 0x80, 0x67, 0x27, 0x1F, 0x70, 0x67, 0xCD, 0x4A, 0x80, -0x69, 0x07, 0x01, 0x70, 0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, 0x6B, 0x96, 0x49, 0x00, -0x6C, 0xCF, 0xFF, 0xF0, 0x6D, 0x76, 0x2B, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, 0x6F, 0x56, 0x0D, 0x00, -0x70, 0x8F, 0xC3, 0xF0, 0x71, 0x35, 0xEF, 0x00, 0x72, 0x6F, 0xA5, 0xF0, 0x73, 0x15, 0xD1, 0x00, -0x74, 0x4F, 0x87, 0xF0, 0x74, 0xFE, 0xED, 0x80, 0x76, 0x38, 0xA4, 0x70, 0x76, 0xDE, 0xCF, 0x80, -0x78, 0x18, 0x86, 0x70, 0x78, 0xBE, 0xB1, 0x80, 0x79, 0xF8, 0x68, 0x70, 0x7A, 0x9E, 0x93, 0x80, -0x7B, 0xD8, 0x4A, 0x70, 0x7C, 0x7E, 0x75, 0x80, 0x7D, 0xB8, 0x2C, 0x70, 0x7E, 0x5E, 0x57, 0x80, -0x7F, 0x98, 0x0E, 0x70, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 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, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, -0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, -0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, -0x00, 0x04, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, -0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - -/* America/Yakutat */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1A, 0xCB, 0x89, 0x28, 0xB0, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x34, 0x20, 0xFE, 0xB8, 0x55, 0x30, 0xFF, 0xA8, 0x38, 0x20, -0x00, 0x98, 0x37, 0x30, 0x01, 0x88, 0x1A, 0x20, 0x02, 0x78, 0x19, 0x30, 0x03, 0x71, 0x36, 0xA0, -0x04, 0x61, 0x35, 0xB0, 0x05, 0x51, 0x18, 0xA0, 0x06, 0x41, 0x17, 0xB0, 0x07, 0x30, 0xFA, 0xA0, -0x07, 0x8D, 0x51, 0xB0, 0x09, 0x10, 0xDC, 0xA0, 0x09, 0xAD, 0xCD, 0x30, 0x0A, 0xF0, 0xBE, 0xA0, -0x0B, 0xE0, 0xBD, 0xB0, 0x0C, 0xD9, 0xDB, 0x20, 0x0D, 0xC0, 0x9F, 0xB0, 0x0E, 0xB9, 0xBD, 0x20, -0x0F, 0xA9, 0xBC, 0x30, 0x10, 0x99, 0x9F, 0x20, 0x11, 0x89, 0x9E, 0x30, 0x12, 0x79, 0x81, 0x20, -0x13, 0x69, 0x80, 0x30, 0x14, 0x59, 0x63, 0x20, 0x15, 0x49, 0x62, 0x30, 0x16, 0x39, 0x45, 0x20, -0x17, 0x29, 0x44, 0x30, 0x18, 0x22, 0x61, 0xA0, 0x19, 0x09, 0x26, 0x30, 0x1A, 0x02, 0x43, 0xA0, -0x1A, 0x2B, 0x14, 0x10, 0x1A, 0xF2, 0x42, 0xB0, 0x1B, 0xE2, 0x25, 0xA0, 0x1C, 0xD2, 0x24, 0xB0, -0x1D, 0xC2, 0x07, 0xA0, 0x1E, 0xB2, 0x06, 0xB0, 0x1F, 0xA1, 0xE9, 0xA0, 0x20, 0x76, 0x39, 0x30, -0x21, 0x81, 0xCB, 0xA0, 0x22, 0x56, 0x1B, 0x30, 0x23, 0x6A, 0xE8, 0x20, 0x24, 0x35, 0xFD, 0x30, -0x25, 0x4A, 0xCA, 0x20, 0x26, 0x15, 0xDF, 0x30, 0x27, 0x2A, 0xAC, 0x20, 0x27, 0xFE, 0xFB, 0xB0, -0x29, 0x0A, 0x8E, 0x20, 0x29, 0xDE, 0xDD, 0xB0, 0x2A, 0xEA, 0x70, 0x20, 0x2B, 0xBE, 0xBF, 0xB0, -0x2C, 0xD3, 0x8C, 0xA0, 0x2D, 0x9E, 0xA1, 0xB0, 0x2E, 0xB3, 0x6E, 0xA0, 0x2F, 0x7E, 0x83, 0xB0, -0x30, 0x93, 0x50, 0xA0, 0x31, 0x67, 0xA0, 0x30, 0x32, 0x73, 0x32, 0xA0, 0x33, 0x47, 0x82, 0x30, -0x34, 0x53, 0x14, 0xA0, 0x35, 0x27, 0x64, 0x30, 0x36, 0x32, 0xF6, 0xA0, 0x37, 0x07, 0x46, 0x30, -0x38, 0x1C, 0x13, 0x20, 0x38, 0xE7, 0x28, 0x30, 0x39, 0xFB, 0xF5, 0x20, 0x3A, 0xC7, 0x0A, 0x30, -0x3B, 0xDB, 0xD7, 0x20, 0x3C, 0xB0, 0x26, 0xB0, 0x3D, 0xBB, 0xB9, 0x20, 0x3E, 0x90, 0x08, 0xB0, -0x3F, 0x9B, 0x9B, 0x20, 0x40, 0x6F, 0xEA, 0xB0, 0x41, 0x84, 0xB7, 0xA0, 0x42, 0x4F, 0xCC, 0xB0, -0x43, 0x64, 0x99, 0xA0, 0x44, 0x2F, 0xAE, 0xB0, 0x45, 0x44, 0x7B, 0xA0, 0x45, 0xF3, 0xE1, 0x30, -0x47, 0x2D, 0x98, 0x20, 0x47, 0xD3, 0xC3, 0x30, 0x49, 0x0D, 0x7A, 0x20, 0x49, 0xB3, 0xA5, 0x30, -0x4A, 0xED, 0x5C, 0x20, 0x4B, 0x9C, 0xC1, 0xB0, 0x4C, 0xD6, 0x78, 0xA0, 0x4D, 0x7C, 0xA3, 0xB0, -0x4E, 0xB6, 0x5A, 0xA0, 0x4F, 0x5C, 0x85, 0xB0, 0x50, 0x96, 0x3C, 0xA0, 0x51, 0x3C, 0x67, 0xB0, -0x52, 0x76, 0x1E, 0xA0, 0x53, 0x1C, 0x49, 0xB0, 0x54, 0x56, 0x00, 0xA0, 0x54, 0xFC, 0x2B, 0xB0, -0x56, 0x35, 0xE2, 0xA0, 0x56, 0xE5, 0x48, 0x30, 0x58, 0x1E, 0xFF, 0x20, 0x58, 0xC5, 0x2A, 0x30, -0x59, 0xFE, 0xE1, 0x20, 0x5A, 0xA5, 0x0C, 0x30, 0x5B, 0xDE, 0xC3, 0x20, 0x5C, 0x84, 0xEE, 0x30, -0x5D, 0xBE, 0xA5, 0x20, 0x5E, 0x64, 0xD0, 0x30, 0x5F, 0x9E, 0x87, 0x20, 0x60, 0x4D, 0xEC, 0xB0, -0x61, 0x87, 0xA3, 0xA0, 0x62, 0x2D, 0xCE, 0xB0, 0x63, 0x67, 0x85, 0xA0, 0x64, 0x0D, 0xB0, 0xB0, -0x65, 0x47, 0x67, 0xA0, 0x65, 0xED, 0x92, 0xB0, 0x67, 0x27, 0x49, 0xA0, 0x67, 0xCD, 0x74, 0xB0, -0x69, 0x07, 0x2B, 0xA0, 0x69, 0xAD, 0x56, 0xB0, 0x6A, 0xE7, 0x0D, 0xA0, 0x6B, 0x96, 0x73, 0x30, -0x6C, 0xD0, 0x2A, 0x20, 0x6D, 0x76, 0x55, 0x30, 0x6E, 0xB0, 0x0C, 0x20, 0x6F, 0x56, 0x37, 0x30, -0x70, 0x8F, 0xEE, 0x20, 0x71, 0x36, 0x19, 0x30, 0x72, 0x6F, 0xD0, 0x20, 0x73, 0x15, 0xFB, 0x30, -0x74, 0x4F, 0xB2, 0x20, 0x74, 0xFF, 0x17, 0xB0, 0x76, 0x38, 0xCE, 0xA0, 0x76, 0xDE, 0xF9, 0xB0, -0x78, 0x18, 0xB0, 0xA0, 0x78, 0xBE, 0xDB, 0xB0, 0x79, 0xF8, 0x92, 0xA0, 0x7A, 0x9E, 0xBD, 0xB0, -0x7B, 0xD8, 0x74, 0xA0, 0x7C, 0x7E, 0x9F, 0xB0, 0x7D, 0xB8, 0x56, 0xA0, 0x7E, 0x5E, 0x81, 0xB0, -0x7F, 0x98, 0x38, 0xA0, 0x01, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, -0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, -0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x00, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x04, 0xFF, 0xFF, -0x8F, 0x80, 0x01, 0x08, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x0C, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x10, -0xFF, 0xFF, 0x81, 0x70, 0x00, 0x15, 0x59, 0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50, -0x54, 0x00, 0x59, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x53, 0x54, 0x00, -0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - -/* America/Yellowknife */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0x9E, 0xB8, 0xAF, 0x90, -0x9F, 0xBB, 0x07, 0x80, 0xA0, 0xCF, 0xF0, 0x90, 0xA1, 0xA2, 0xB6, 0x60, 0xCB, 0x89, 0x0C, 0x90, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x18, 0x00, 0xF7, 0x2F, 0x5A, 0x70, 0xF8, 0x28, 0x85, 0xF0, -0x13, 0x69, 0x64, 0x10, 0x14, 0x59, 0x47, 0x00, 0x15, 0x49, 0x46, 0x10, 0x16, 0x39, 0x29, 0x00, -0x17, 0x29, 0x28, 0x10, 0x18, 0x22, 0x45, 0x80, 0x19, 0x09, 0x0A, 0x10, 0x1A, 0x02, 0x27, 0x80, -0x1A, 0xF2, 0x26, 0x90, 0x1B, 0xE2, 0x09, 0x80, 0x1C, 0xD2, 0x08, 0x90, 0x1D, 0xC1, 0xEB, 0x80, -0x1E, 0xB1, 0xEA, 0x90, 0x1F, 0xA1, 0xCD, 0x80, 0x20, 0x76, 0x1D, 0x10, 0x21, 0x81, 0xAF, 0x80, -0x22, 0x55, 0xFF, 0x10, 0x23, 0x6A, 0xCC, 0x00, 0x24, 0x35, 0xE1, 0x10, 0x25, 0x4A, 0xAE, 0x00, -0x26, 0x15, 0xC3, 0x10, 0x27, 0x2A, 0x90, 0x00, 0x27, 0xFE, 0xDF, 0x90, 0x29, 0x0A, 0x72, 0x00, -0x29, 0xDE, 0xC1, 0x90, 0x2A, 0xEA, 0x54, 0x00, 0x2B, 0xBE, 0xA3, 0x90, 0x2C, 0xD3, 0x70, 0x80, -0x2D, 0x9E, 0x85, 0x90, 0x2E, 0xB3, 0x52, 0x80, 0x2F, 0x7E, 0x67, 0x90, 0x30, 0x93, 0x34, 0x80, -0x31, 0x67, 0x84, 0x10, 0x32, 0x73, 0x16, 0x80, 0x33, 0x47, 0x66, 0x10, 0x34, 0x52, 0xF8, 0x80, -0x35, 0x27, 0x48, 0x10, 0x36, 0x32, 0xDA, 0x80, 0x37, 0x07, 0x2A, 0x10, 0x38, 0x1B, 0xF7, 0x00, -0x38, 0xE7, 0x0C, 0x10, 0x39, 0xFB, 0xD9, 0x00, 0x3A, 0xC6, 0xEE, 0x10, 0x3B, 0xDB, 0xBB, 0x00, -0x3C, 0xB0, 0x0A, 0x90, 0x3D, 0xBB, 0x9D, 0x00, 0x3E, 0x8F, 0xEC, 0x90, 0x3F, 0x9B, 0x7F, 0x00, -0x40, 0x6F, 0xCE, 0x90, 0x41, 0x84, 0x9B, 0x80, 0x42, 0x4F, 0xB0, 0x90, 0x43, 0x64, 0x7D, 0x80, -0x44, 0x2F, 0x92, 0x90, 0x45, 0x44, 0x5F, 0x80, 0x45, 0xF3, 0xC5, 0x10, 0x47, 0x2D, 0x7C, 0x00, -0x47, 0xD3, 0xA7, 0x10, 0x49, 0x0D, 0x5E, 0x00, 0x49, 0xB3, 0x89, 0x10, 0x4A, 0xED, 0x40, 0x00, -0x4B, 0x9C, 0xA5, 0x90, 0x4C, 0xD6, 0x5C, 0x80, 0x4D, 0x7C, 0x87, 0x90, 0x4E, 0xB6, 0x3E, 0x80, -0x4F, 0x5C, 0x69, 0x90, 0x50, 0x96, 0x20, 0x80, 0x51, 0x3C, 0x4B, 0x90, 0x52, 0x76, 0x02, 0x80, -0x53, 0x1C, 0x2D, 0x90, 0x54, 0x55, 0xE4, 0x80, 0x54, 0xFC, 0x0F, 0x90, 0x56, 0x35, 0xC6, 0x80, -0x56, 0xE5, 0x2C, 0x10, 0x58, 0x1E, 0xE3, 0x00, 0x58, 0xC5, 0x0E, 0x10, 0x59, 0xFE, 0xC5, 0x00, -0x5A, 0xA4, 0xF0, 0x10, 0x5B, 0xDE, 0xA7, 0x00, 0x5C, 0x84, 0xD2, 0x10, 0x5D, 0xBE, 0x89, 0x00, -0x5E, 0x64, 0xB4, 0x10, 0x5F, 0x9E, 0x6B, 0x00, 0x60, 0x4D, 0xD0, 0x90, 0x61, 0x87, 0x87, 0x80, -0x62, 0x2D, 0xB2, 0x90, 0x63, 0x67, 0x69, 0x80, 0x64, 0x0D, 0x94, 0x90, 0x65, 0x47, 0x4B, 0x80, -0x65, 0xED, 0x76, 0x90, 0x67, 0x27, 0x2D, 0x80, 0x67, 0xCD, 0x58, 0x90, 0x69, 0x07, 0x0F, 0x80, -0x69, 0xAD, 0x3A, 0x90, 0x6A, 0xE6, 0xF1, 0x80, 0x6B, 0x96, 0x57, 0x10, 0x6C, 0xD0, 0x0E, 0x00, -0x6D, 0x76, 0x39, 0x10, 0x6E, 0xAF, 0xF0, 0x00, 0x6F, 0x56, 0x1B, 0x10, 0x70, 0x8F, 0xD2, 0x00, -0x71, 0x35, 0xFD, 0x10, 0x72, 0x6F, 0xB4, 0x00, 0x73, 0x15, 0xDF, 0x10, 0x74, 0x4F, 0x96, 0x00, -0x74, 0xFE, 0xFB, 0x90, 0x76, 0x38, 0xB2, 0x80, 0x76, 0xDE, 0xDD, 0x90, 0x78, 0x18, 0x94, 0x80, -0x78, 0xBE, 0xBF, 0x90, 0x79, 0xF8, 0x76, 0x80, 0x7A, 0x9E, 0xA1, 0x90, 0x7B, 0xD8, 0x58, 0x80, -0x7C, 0x7E, 0x83, 0x90, 0x7D, 0xB8, 0x3A, 0x80, 0x7E, 0x5E, 0x65, 0x90, 0x7F, 0x98, 0x1C, 0x80, -0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x01, 0x04, 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, 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, 0xFF, 0xFF, 0xAB, -0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF, -0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0x4D, 0x44, 0x54, 0x00, 0x4D, -0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x4D, 0x44, 0x44, 0x54, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - -/* Antarctica/Casey */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xFE, 0x1E, 0xCC, 0x80, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x7A, 0x7A, 0x7A, -0x00, 0x57, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Antarctica/Davis */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xE7, 0x9C, 0x40, 0x00, -0xF6, 0x47, 0xDF, 0x10, 0xFE, 0x47, 0xAB, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x7A, 0x7A, 0x7A, 0x00, 0x44, 0x41, 0x56, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, - -/* Antarctica/DumontDUrville */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0xD4, 0xBC, 0x76, 0x80, -0xDE, 0x34, 0x60, 0x60, 0xE7, 0x3C, 0x02, 0x80, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x08, 0x7A, 0x7A, 0x7A, -0x00, 0x50, 0x4D, 0x54, 0x00, 0x44, 0x44, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* Antarctica/Mawson */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xE2, 0x20, 0x32, 0x80, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x7A, 0x7A, 0x7A, -0x00, 0x4D, 0x41, 0x57, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Antarctica/McMurdo */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0xE5, 0xA9, 0xE9, 0x00, -0x09, 0x18, 0xFD, 0xE0, 0x09, 0xAC, 0xA5, 0xE0, 0x0A, 0xEF, 0xA5, 0x60, 0x0B, 0x9E, 0xFC, 0xE0, -0x0C, 0xD8, 0xC1, 0xE0, 0x0D, 0x7E, 0xDE, 0xE0, 0x0E, 0xB8, 0xA3, 0xE0, 0x0F, 0x5E, 0xC0, 0xE0, -0x10, 0x98, 0x85, 0xE0, 0x11, 0x3E, 0xA2, 0xE0, 0x12, 0x78, 0x67, 0xE0, 0x13, 0x1E, 0x84, 0xE0, -0x14, 0x58, 0x49, 0xE0, 0x14, 0xFE, 0x66, 0xE0, 0x16, 0x38, 0x2B, 0xE0, 0x16, 0xE7, 0x83, 0x60, -0x18, 0x21, 0x48, 0x60, 0x18, 0xC7, 0x65, 0x60, 0x1A, 0x01, 0x2A, 0x60, 0x1A, 0xA7, 0x47, 0x60, -0x1B, 0xE1, 0x0C, 0x60, 0x1C, 0x87, 0x29, 0x60, 0x1D, 0xC0, 0xEE, 0x60, 0x1E, 0x67, 0x0B, 0x60, -0x1F, 0xA0, 0xD0, 0x60, 0x20, 0x46, 0xED, 0x60, 0x21, 0x80, 0xB2, 0x60, 0x22, 0x30, 0x09, 0xE0, -0x23, 0x69, 0xCE, 0xE0, 0x24, 0x0F, 0xEB, 0xE0, 0x25, 0x2E, 0x01, 0x60, 0x26, 0x02, 0x42, 0xE0, -0x27, 0x0D, 0xE3, 0x60, 0x27, 0xE2, 0x24, 0xE0, 0x28, 0xED, 0xC5, 0x60, 0x29, 0xC2, 0x06, 0xE0, -0x2A, 0xCD, 0xA7, 0x60, 0x2B, 0xAB, 0x23, 0x60, 0x2C, 0xAD, 0x89, 0x60, 0x2D, 0x8B, 0x05, 0x60, -0x2E, 0x8D, 0x6B, 0x60, 0x2F, 0x6A, 0xE7, 0x60, 0x30, 0x6D, 0x4D, 0x60, 0x31, 0x4A, 0xC9, 0x60, -0x32, 0x56, 0x69, 0xE0, 0x33, 0x2A, 0xAB, 0x60, 0x34, 0x36, 0x4B, 0xE0, 0x35, 0x0A, 0x8D, 0x60, -0x36, 0x16, 0x2D, 0xE0, 0x36, 0xF3, 0xA9, 0xE0, 0x37, 0xF6, 0x0F, 0xE0, 0x38, 0xD3, 0x8B, 0xE0, -0x39, 0xD5, 0xF1, 0xE0, 0x3A, 0xB3, 0x6D, 0xE0, 0x3B, 0xBF, 0x0E, 0x60, 0x3C, 0x93, 0x4F, 0xE0, -0x3D, 0x9E, 0xF0, 0x60, 0x3E, 0x73, 0x31, 0xE0, 0x3F, 0x7E, 0xD2, 0x60, 0x40, 0x5C, 0x4E, 0x60, -0x41, 0x5E, 0xB4, 0x60, 0x42, 0x3C, 0x30, 0x60, 0x43, 0x3E, 0x96, 0x60, 0x44, 0x1C, 0x12, 0x60, -0x45, 0x1E, 0x78, 0x60, 0x45, 0xFB, 0xF4, 0x60, 0x47, 0x07, 0x94, 0xE0, 0x47, 0xDB, 0xD6, 0x60, -0x48, 0xE7, 0x76, 0xE0, 0x49, 0xBB, 0xB8, 0x60, 0x4A, 0xC7, 0x58, 0xE0, 0x4B, 0xA4, 0xD4, 0xE0, -0x4C, 0xA7, 0x3A, 0xE0, 0x4D, 0x84, 0xB6, 0xE0, 0x4E, 0x87, 0x1C, 0xE0, 0x4F, 0x64, 0x98, 0xE0, -0x50, 0x70, 0x39, 0x60, 0x51, 0x44, 0x7A, 0xE0, 0x52, 0x50, 0x1B, 0x60, 0x53, 0x24, 0x5C, 0xE0, -0x54, 0x2F, 0xFD, 0x60, 0x55, 0x04, 0x3E, 0xE0, 0x56, 0x0F, 0xDF, 0x60, 0x56, 0xED, 0x5B, 0x60, -0x57, 0xEF, 0xC1, 0x60, 0x58, 0xCD, 0x3D, 0x60, 0x59, 0xCF, 0xA3, 0x60, 0x5A, 0xAD, 0x1F, 0x60, -0x5B, 0xB8, 0xBF, 0xE0, 0x5C, 0x8D, 0x01, 0x60, 0x5D, 0x98, 0xA1, 0xE0, 0x5E, 0x6C, 0xE3, 0x60, -0x5F, 0x78, 0x83, 0xE0, 0x60, 0x55, 0xFF, 0xE0, 0x61, 0x58, 0x65, 0xE0, 0x62, 0x35, 0xE1, 0xE0, -0x63, 0x38, 0x47, 0xE0, 0x64, 0x15, 0xC3, 0xE0, 0x65, 0x18, 0x29, 0xE0, 0x65, 0xF5, 0xA5, 0xE0, -0x67, 0x01, 0x46, 0x60, 0x67, 0xD5, 0x87, 0xE0, 0x68, 0xE1, 0x28, 0x60, 0x69, 0xB5, 0x69, 0xE0, -0x6A, 0xC1, 0x0A, 0x60, 0x6B, 0x9E, 0x86, 0x60, 0x6C, 0xA0, 0xEC, 0x60, 0x6D, 0x7E, 0x68, 0x60, -0x6E, 0x80, 0xCE, 0x60, 0x6F, 0x5E, 0x4A, 0x60, 0x70, 0x69, 0xEA, 0xE0, 0x71, 0x3E, 0x2C, 0x60, -0x72, 0x49, 0xCC, 0xE0, 0x73, 0x1E, 0x0E, 0x60, 0x74, 0x29, 0xAE, 0xE0, 0x75, 0x07, 0x2A, 0xE0, -0x76, 0x09, 0x90, 0xE0, 0x76, 0xE7, 0x0C, 0xE0, 0x77, 0xE9, 0x72, 0xE0, 0x78, 0xC6, 0xEE, 0xE0, -0x79, 0xC9, 0x54, 0xE0, 0x7A, 0xA6, 0xD0, 0xE0, 0x7B, 0xB2, 0x71, 0x60, 0x7C, 0x86, 0xB2, 0xE0, -0x7D, 0x92, 0x53, 0x60, 0x7E, 0x66, 0x94, 0xE0, 0x7F, 0x72, 0x35, 0x60, 0x03, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x04, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x09, 0x00, 0x00, -0xA8, 0xC0, 0x00, 0x09, 0x7A, 0x7A, 0x7A, 0x00, 0x4E, 0x5A, 0x44, 0x54, 0x00, 0x4E, 0x5A, 0x53, -0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Antarctica/Palmer */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0xF6, 0x98, 0xAD, 0x00, -0xF6, 0xE6, 0x9F, 0xB0, 0xF8, 0x13, 0x43, 0xC0, 0xF8, 0xC7, 0xD3, 0x30, 0xF9, 0xF4, 0x77, 0x40, -0xFA, 0xD3, 0x36, 0xB0, 0xFB, 0xC3, 0x35, 0xC0, 0xFC, 0xBC, 0x53, 0x30, 0xFD, 0xAC, 0x52, 0x40, -0xFE, 0x9C, 0x35, 0x30, 0xFF, 0x8C, 0x34, 0x40, 0x07, 0xA3, 0x4A, 0xB0, 0x08, 0x24, 0x6F, 0xA0, -0x17, 0x30, 0xBC, 0xB0, 0x18, 0x06, 0x5D, 0xC0, 0x18, 0xD1, 0x56, 0xB0, 0x19, 0xE6, 0x3F, 0xC0, -0x1A, 0xB1, 0x38, 0xB0, 0x1B, 0xCF, 0x5C, 0x40, 0x1C, 0x91, 0x1A, 0xB0, 0x1D, 0xAF, 0x3E, 0x40, -0x1E, 0x70, 0xFC, 0xB0, 0x1F, 0x8F, 0x20, 0x40, 0x20, 0x7F, 0x03, 0x30, 0x21, 0x6F, 0x02, 0x40, -0x22, 0x39, 0xFB, 0x30, 0x23, 0x45, 0xA9, 0xC0, 0x24, 0x19, 0xDD, 0x30, 0x25, 0x38, 0x00, 0xC0, -0x26, 0x02, 0xF9, 0xB0, 0x26, 0xF2, 0xF8, 0xC0, 0x27, 0xD9, 0xA1, 0x30, 0x28, 0xF7, 0xC4, 0xC0, -0x29, 0xC2, 0xBD, 0xB0, 0x2A, 0xD7, 0xA6, 0xC0, 0x2B, 0xA2, 0x9F, 0xB0, 0x2C, 0xB7, 0x88, 0xC0, -0x2D, 0x82, 0x81, 0xB0, 0x2E, 0x97, 0x6A, 0xC0, 0x2F, 0x62, 0x63, 0xB0, 0x30, 0x80, 0x87, 0x40, -0x31, 0x42, 0x45, 0xB0, 0x32, 0x60, 0x69, 0x40, 0x33, 0x3D, 0xD7, 0x30, 0x34, 0x40, 0x4B, 0x40, -0x35, 0x0B, 0x44, 0x30, 0x36, 0x0D, 0xB8, 0x40, 0x37, 0x06, 0xD5, 0xB0, 0x38, 0x00, 0x0F, 0x40, -0x38, 0xCB, 0x08, 0x30, 0x39, 0xE9, 0x2B, 0xC0, 0x3A, 0xAA, 0xEA, 0x30, 0x3B, 0xC9, 0x0D, 0xC0, -0x3C, 0x8A, 0xCC, 0x30, 0x3D, 0xA8, 0xEF, 0xC0, 0x3E, 0x6A, 0xAE, 0x30, 0x3F, 0x88, 0xD1, 0xC0, -0x40, 0x53, 0xCA, 0xB0, 0x41, 0x68, 0xB3, 0xC0, 0x42, 0x33, 0xAC, 0xB0, 0x43, 0x48, 0x95, 0xC0, -0x44, 0x13, 0x8E, 0xB0, 0x45, 0x31, 0xB2, 0x40, 0x45, 0xF3, 0x70, 0xB0, 0x47, 0x11, 0x94, 0x40, -0x47, 0xD3, 0x52, 0xB0, 0x48, 0xF1, 0x76, 0x40, 0x49, 0xBC, 0x6F, 0x30, 0x4A, 0xD1, 0x58, 0x40, -0x4B, 0x9C, 0x51, 0x30, 0x4C, 0xB1, 0x3A, 0x40, 0x4D, 0x7C, 0x33, 0x30, 0x4E, 0x91, 0x1C, 0x40, -0x4F, 0x5C, 0x15, 0x30, 0x50, 0x7A, 0x38, 0xC0, 0x51, 0x3B, 0xF7, 0x30, 0x52, 0x5A, 0x1A, 0xC0, -0x53, 0x1B, 0xD9, 0x30, 0x54, 0x39, 0xFC, 0xC0, 0x55, 0x04, 0xF5, 0xB0, 0x56, 0x19, 0xDE, 0xC0, -0x56, 0xE4, 0xD7, 0xB0, 0x57, 0xF9, 0xC0, 0xC0, 0x58, 0xC4, 0xB9, 0xB0, 0x59, 0xE2, 0xDD, 0x40, -0x5A, 0xA4, 0x9B, 0xB0, 0x5B, 0xC2, 0xBF, 0x40, 0x5C, 0x84, 0x7D, 0xB0, 0x5D, 0xA2, 0xA1, 0x40, -0x5E, 0x6D, 0x9A, 0x30, 0x5F, 0x82, 0x83, 0x40, 0x60, 0x4D, 0x7C, 0x30, 0x61, 0x62, 0x65, 0x40, -0x62, 0x2D, 0x5E, 0x30, 0x63, 0x42, 0x47, 0x40, 0x64, 0x0D, 0x40, 0x30, 0x65, 0x2B, 0x63, 0xC0, -0x65, 0xED, 0x22, 0x30, 0x67, 0x0B, 0x45, 0xC0, 0x67, 0xCD, 0x04, 0x30, 0x68, 0xEB, 0x27, 0xC0, -0x69, 0xB6, 0x20, 0xB0, 0x6A, 0xCB, 0x09, 0xC0, 0x6B, 0x96, 0x02, 0xB0, 0x6C, 0xAA, 0xEB, 0xC0, -0x6D, 0x75, 0xE4, 0xB0, 0x6E, 0x94, 0x08, 0x40, 0x6F, 0x55, 0xC6, 0xB0, 0x70, 0x73, 0xEA, 0x40, -0x71, 0x35, 0xA8, 0xB0, 0x72, 0x53, 0xCC, 0x40, 0x73, 0x15, 0x8A, 0xB0, 0x74, 0x33, 0xAE, 0x40, -0x74, 0xFE, 0xA7, 0x30, 0x76, 0x13, 0x90, 0x40, 0x76, 0xDE, 0x89, 0x30, 0x77, 0xF3, 0x72, 0x40, -0x78, 0xBE, 0x6B, 0x30, 0x79, 0xDC, 0x8E, 0xC0, 0x7A, 0x9E, 0x4D, 0x30, 0x7B, 0xBC, 0x70, 0xC0, -0x7C, 0x7E, 0x2F, 0x30, 0x7D, 0x9C, 0x52, 0xC0, 0x7E, 0x67, 0x4B, 0xB0, 0x7F, 0x7C, 0x34, 0xC0, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x07, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, -0xFF, 0xE3, 0xE0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, -0x0D, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x12, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x12, 0x7A, 0x7A, 0x7A, -0x00, 0x41, 0x52, 0x54, 0x00, 0x41, 0x52, 0x53, 0x54, 0x00, 0x43, 0x4C, 0x53, 0x54, 0x00, 0x43, -0x4C, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x01, 0x00, - -/* Antarctica/Rothera */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x0D, 0x02, 0x2D, 0x00, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x04, 0x7A, 0x7A, 0x7A, -0x00, 0x52, 0x4F, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Antarctica/South_Pole */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0xE5, 0xA9, 0xE9, 0x00, -0x09, 0x18, 0xFD, 0xE0, 0x09, 0xAC, 0xA5, 0xE0, 0x0A, 0xEF, 0xA5, 0x60, 0x0B, 0x9E, 0xFC, 0xE0, -0x0C, 0xD8, 0xC1, 0xE0, 0x0D, 0x7E, 0xDE, 0xE0, 0x0E, 0xB8, 0xA3, 0xE0, 0x0F, 0x5E, 0xC0, 0xE0, -0x10, 0x98, 0x85, 0xE0, 0x11, 0x3E, 0xA2, 0xE0, 0x12, 0x78, 0x67, 0xE0, 0x13, 0x1E, 0x84, 0xE0, -0x14, 0x58, 0x49, 0xE0, 0x14, 0xFE, 0x66, 0xE0, 0x16, 0x38, 0x2B, 0xE0, 0x16, 0xE7, 0x83, 0x60, -0x18, 0x21, 0x48, 0x60, 0x18, 0xC7, 0x65, 0x60, 0x1A, 0x01, 0x2A, 0x60, 0x1A, 0xA7, 0x47, 0x60, -0x1B, 0xE1, 0x0C, 0x60, 0x1C, 0x87, 0x29, 0x60, 0x1D, 0xC0, 0xEE, 0x60, 0x1E, 0x67, 0x0B, 0x60, -0x1F, 0xA0, 0xD0, 0x60, 0x20, 0x46, 0xED, 0x60, 0x21, 0x80, 0xB2, 0x60, 0x22, 0x30, 0x09, 0xE0, -0x23, 0x69, 0xCE, 0xE0, 0x24, 0x0F, 0xEB, 0xE0, 0x25, 0x2E, 0x01, 0x60, 0x26, 0x02, 0x42, 0xE0, -0x27, 0x0D, 0xE3, 0x60, 0x27, 0xE2, 0x24, 0xE0, 0x28, 0xED, 0xC5, 0x60, 0x29, 0xC2, 0x06, 0xE0, -0x2A, 0xCD, 0xA7, 0x60, 0x2B, 0xAB, 0x23, 0x60, 0x2C, 0xAD, 0x89, 0x60, 0x2D, 0x8B, 0x05, 0x60, -0x2E, 0x8D, 0x6B, 0x60, 0x2F, 0x6A, 0xE7, 0x60, 0x30, 0x6D, 0x4D, 0x60, 0x31, 0x4A, 0xC9, 0x60, -0x32, 0x56, 0x69, 0xE0, 0x33, 0x2A, 0xAB, 0x60, 0x34, 0x36, 0x4B, 0xE0, 0x35, 0x0A, 0x8D, 0x60, -0x36, 0x16, 0x2D, 0xE0, 0x36, 0xF3, 0xA9, 0xE0, 0x37, 0xF6, 0x0F, 0xE0, 0x38, 0xD3, 0x8B, 0xE0, -0x39, 0xD5, 0xF1, 0xE0, 0x3A, 0xB3, 0x6D, 0xE0, 0x3B, 0xBF, 0x0E, 0x60, 0x3C, 0x93, 0x4F, 0xE0, -0x3D, 0x9E, 0xF0, 0x60, 0x3E, 0x73, 0x31, 0xE0, 0x3F, 0x7E, 0xD2, 0x60, 0x40, 0x5C, 0x4E, 0x60, -0x41, 0x5E, 0xB4, 0x60, 0x42, 0x3C, 0x30, 0x60, 0x43, 0x3E, 0x96, 0x60, 0x44, 0x1C, 0x12, 0x60, -0x45, 0x1E, 0x78, 0x60, 0x45, 0xFB, 0xF4, 0x60, 0x47, 0x07, 0x94, 0xE0, 0x47, 0xDB, 0xD6, 0x60, -0x48, 0xE7, 0x76, 0xE0, 0x49, 0xBB, 0xB8, 0x60, 0x4A, 0xC7, 0x58, 0xE0, 0x4B, 0xA4, 0xD4, 0xE0, -0x4C, 0xA7, 0x3A, 0xE0, 0x4D, 0x84, 0xB6, 0xE0, 0x4E, 0x87, 0x1C, 0xE0, 0x4F, 0x64, 0x98, 0xE0, -0x50, 0x70, 0x39, 0x60, 0x51, 0x44, 0x7A, 0xE0, 0x52, 0x50, 0x1B, 0x60, 0x53, 0x24, 0x5C, 0xE0, -0x54, 0x2F, 0xFD, 0x60, 0x55, 0x04, 0x3E, 0xE0, 0x56, 0x0F, 0xDF, 0x60, 0x56, 0xED, 0x5B, 0x60, -0x57, 0xEF, 0xC1, 0x60, 0x58, 0xCD, 0x3D, 0x60, 0x59, 0xCF, 0xA3, 0x60, 0x5A, 0xAD, 0x1F, 0x60, -0x5B, 0xB8, 0xBF, 0xE0, 0x5C, 0x8D, 0x01, 0x60, 0x5D, 0x98, 0xA1, 0xE0, 0x5E, 0x6C, 0xE3, 0x60, -0x5F, 0x78, 0x83, 0xE0, 0x60, 0x55, 0xFF, 0xE0, 0x61, 0x58, 0x65, 0xE0, 0x62, 0x35, 0xE1, 0xE0, -0x63, 0x38, 0x47, 0xE0, 0x64, 0x15, 0xC3, 0xE0, 0x65, 0x18, 0x29, 0xE0, 0x65, 0xF5, 0xA5, 0xE0, -0x67, 0x01, 0x46, 0x60, 0x67, 0xD5, 0x87, 0xE0, 0x68, 0xE1, 0x28, 0x60, 0x69, 0xB5, 0x69, 0xE0, -0x6A, 0xC1, 0x0A, 0x60, 0x6B, 0x9E, 0x86, 0x60, 0x6C, 0xA0, 0xEC, 0x60, 0x6D, 0x7E, 0x68, 0x60, -0x6E, 0x80, 0xCE, 0x60, 0x6F, 0x5E, 0x4A, 0x60, 0x70, 0x69, 0xEA, 0xE0, 0x71, 0x3E, 0x2C, 0x60, -0x72, 0x49, 0xCC, 0xE0, 0x73, 0x1E, 0x0E, 0x60, 0x74, 0x29, 0xAE, 0xE0, 0x75, 0x07, 0x2A, 0xE0, -0x76, 0x09, 0x90, 0xE0, 0x76, 0xE7, 0x0C, 0xE0, 0x77, 0xE9, 0x72, 0xE0, 0x78, 0xC6, 0xEE, 0xE0, -0x79, 0xC9, 0x54, 0xE0, 0x7A, 0xA6, 0xD0, 0xE0, 0x7B, 0xB2, 0x71, 0x60, 0x7C, 0x86, 0xB2, 0xE0, -0x7D, 0x92, 0x53, 0x60, 0x7E, 0x66, 0x94, 0xE0, 0x7F, 0x72, 0x35, 0x60, 0x03, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x04, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x09, 0x00, 0x00, -0xA8, 0xC0, 0x00, 0x09, 0x7A, 0x7A, 0x7A, 0x00, 0x4E, 0x5A, 0x44, 0x54, 0x00, 0x4E, 0x5A, 0x53, -0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Antarctica/Syowa */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xE7, 0xB1, 0x58, 0x00, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x7A, 0x7A, 0x7A, -0x00, 0x53, 0x59, 0x4F, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Antarctica/Vostok */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xE9, 0x58, 0x89, 0x80, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x7A, 0x7A, 0x7A, -0x00, 0x56, 0x4F, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Arctic/Longyearbyen */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x27, 0xE3, 0x00, -0x9B, 0xD4, 0x7B, 0x60, 0xC8, 0xB7, 0x4D, 0x60, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, 0xD1, 0x72, 0x16, 0x10, -0xD2, 0x62, 0x07, 0x10, 0xEB, 0xAF, 0x20, 0x90, 0xEC, 0xA8, 0x4C, 0x10, 0xED, 0x98, 0x3D, 0x10, -0xEE, 0x88, 0x2E, 0x10, 0xEF, 0x78, 0x1F, 0x10, 0xF0, 0x68, 0x10, 0x10, 0xF1, 0x58, 0x01, 0x10, -0xF2, 0x47, 0xF2, 0x10, 0xF3, 0x37, 0xE3, 0x10, 0xF4, 0x27, 0xD4, 0x10, 0xF5, 0x17, 0xC5, 0x10, -0xF6, 0x10, 0xF0, 0x90, 0xF7, 0x2F, 0x06, 0x10, 0xF7, 0xF0, 0xD2, 0x90, 0x12, 0xCE, 0x97, 0xF0, -0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x00, 0x01, 0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x1C, -0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, -0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, -0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, -0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Asia/Aden */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xDA, 0x61, 0x38, 0x20, -0x01, 0x00, 0x00, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Almaty */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0F, 0xAA, 0x19, 0x7B, 0xDC, -0xB5, 0xA3, 0xEF, 0x30, 0x15, 0x27, 0x7D, 0xA0, 0x16, 0x18, 0xB2, 0x10, 0x17, 0x08, 0xB1, 0x20, -0x17, 0xF9, 0xE5, 0x90, 0x18, 0xE9, 0xE4, 0xA0, 0x19, 0xDB, 0x19, 0x10, 0x1A, 0xCC, 0x69, 0xA0, -0x1B, 0xBC, 0x76, 0xC0, 0x1C, 0xAC, 0x67, 0xC0, 0x1D, 0x9C, 0x58, 0xC0, 0x1E, 0x8C, 0x49, 0xC0, -0x1F, 0x7C, 0x3A, 0xC0, 0x20, 0x6C, 0x2B, 0xC0, 0x21, 0x5C, 0x1C, 0xC0, 0x22, 0x4C, 0x0D, 0xC0, -0x23, 0x3B, 0xFE, 0xC0, 0x24, 0x2B, 0xEF, 0xC0, 0x25, 0x1B, 0xE0, 0xC0, 0x26, 0x0B, 0xD1, 0xC0, -0x27, 0x04, 0xFD, 0x40, 0x27, 0x7F, 0x7C, 0xA0, 0x29, 0xD4, 0xA6, 0x10, 0x2A, 0xC4, 0x89, 0x00, -0x2B, 0xB4, 0xB2, 0x40, 0x2C, 0xA4, 0xA3, 0x40, 0x2D, 0x94, 0x94, 0x40, 0x2E, 0x84, 0x85, 0x40, -0x2F, 0x74, 0x76, 0x40, 0x30, 0x64, 0x67, 0x40, 0x31, 0x5D, 0x92, 0xC0, 0x32, 0x72, 0x6D, 0xC0, -0x33, 0x3D, 0x74, 0xC0, 0x34, 0x52, 0x4F, 0xC0, 0x35, 0x1D, 0x56, 0xC0, 0x36, 0x32, 0x31, 0xC0, -0x36, 0xFD, 0x38, 0xC0, 0x38, 0x1B, 0x4E, 0x40, 0x38, 0xDD, 0x1A, 0xC0, 0x39, 0xFB, 0x30, 0x40, -0x3A, 0xBC, 0xFC, 0xC0, 0x3B, 0xDB, 0x12, 0x40, 0x3C, 0xA6, 0x19, 0x40, 0x3D, 0xBA, 0xF4, 0x40, -0x3E, 0x85, 0xFB, 0x40, 0x3F, 0x9A, 0xD6, 0x40, 0x40, 0x65, 0xDD, 0x40, 0x41, 0x83, 0xF2, 0xC0, -0x42, 0x35, 0xD1, 0x20, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x03, 0x02, 0x03, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x03, 0x00, 0x00, 0x48, 0x24, 0x00, 0x00, 0x00, 0x00, 0x46, 0x50, -0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, -0x54, 0x60, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4C, -0x4D, 0x54, 0x00, 0x41, 0x4C, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Amman */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0xB6, 0xA3, 0xD6, 0xD0, -0x06, 0x72, 0x79, 0xE0, 0x07, 0x0C, 0xAB, 0x50, 0x08, 0x24, 0x37, 0x60, 0x08, 0xED, 0xDE, 0xD0, -0x0A, 0x05, 0x6A, 0xE0, 0x0A, 0xCF, 0x12, 0x50, 0x0B, 0xE7, 0xEF, 0xE0, 0x0C, 0xDA, 0x75, 0xD0, -0x0D, 0xC9, 0x23, 0x60, 0x0E, 0x92, 0xCA, 0xD0, 0x0F, 0xA9, 0x05, 0x60, 0x10, 0x72, 0xAC, 0xD0, -0x1C, 0xAD, 0xD5, 0x60, 0x1D, 0x9F, 0x09, 0xD0, 0x1E, 0x92, 0xFD, 0x60, 0x1F, 0x82, 0xE0, 0x50, -0x20, 0x72, 0xDF, 0x60, 0x21, 0x62, 0xC2, 0x50, 0x22, 0x52, 0xC1, 0x60, 0x23, 0x4B, 0xDE, 0xD0, -0x24, 0x64, 0xBC, 0x60, 0x25, 0x2B, 0xC0, 0xD0, 0x26, 0x37, 0x6F, 0x60, 0x27, 0x0B, 0xA2, 0xD0, -0x28, 0x0B, 0x73, 0xE0, 0x28, 0xE2, 0x4A, 0x50, 0x29, 0xE4, 0xBE, 0x60, 0x2A, 0xCB, 0x66, 0xD0, -0x2B, 0xBB, 0x65, 0xE0, 0x2C, 0xAB, 0x48, 0xD0, 0x2D, 0x9B, 0x47, 0xE0, 0x2E, 0x78, 0xB5, 0xD0, -0x2F, 0x84, 0x64, 0x60, 0x30, 0x58, 0xA5, 0xE0, 0x31, 0x64, 0x46, 0x60, 0x32, 0x41, 0xC2, 0x60, -0x33, 0x44, 0x28, 0x60, 0x34, 0x21, 0xA4, 0x60, 0x35, 0x24, 0x0A, 0x60, 0x36, 0x01, 0x86, 0x60, -0x37, 0x7A, 0x93, 0x60, 0x37, 0xF2, 0x8B, 0xE0, 0x38, 0xE2, 0x7C, 0xE0, 0x39, 0xD2, 0x6D, 0xE0, -0x3A, 0xC2, 0x5E, 0xE0, 0x3B, 0xB2, 0x4F, 0xE0, 0x3C, 0xA2, 0x40, 0xE0, 0x3D, 0x92, 0x31, 0xE0, -0x3E, 0x82, 0x22, 0xE0, 0x3F, 0x98, 0x4F, 0x60, 0x40, 0x62, 0x04, 0xE0, 0x41, 0x6E, 0xF6, 0xE0, -0x42, 0x4B, 0x21, 0x60, 0x43, 0x3C, 0x63, 0xE0, 0x44, 0x2B, 0x03, 0x60, 0x45, 0x41, 0x2F, 0xE0, -0x46, 0x0A, 0xE5, 0x60, 0x47, 0x21, 0x11, 0xE0, 0x47, 0xEA, 0xC7, 0x60, 0x49, 0x0A, 0x2E, 0x60, -0x49, 0xCA, 0xA9, 0x60, 0x4A, 0xEA, 0x10, 0x60, 0x4B, 0xAA, 0x8B, 0x60, 0x4C, 0xC9, 0xF2, 0x60, -0x4D, 0x93, 0xA7, 0xE0, 0x4E, 0xA9, 0xD4, 0x60, 0x4F, 0x73, 0x89, 0xE0, 0x50, 0x89, 0xB6, 0x60, -0x51, 0x53, 0x6B, 0xE0, 0x52, 0x69, 0x98, 0x60, 0x53, 0x33, 0x4D, 0xE0, 0x54, 0x52, 0xB4, 0xE0, -0x55, 0x13, 0x2F, 0xE0, 0x56, 0x32, 0x96, 0xE0, 0x56, 0xFC, 0x4C, 0x60, 0x58, 0x12, 0x78, 0xE0, -0x58, 0xDC, 0x2E, 0x60, 0x59, 0xF2, 0x5A, 0xE0, 0x5A, 0xBC, 0x10, 0x60, 0x5B, 0xD2, 0x3C, 0xE0, -0x5C, 0x9B, 0xF2, 0x60, 0x5D, 0xB2, 0x1E, 0xE0, 0x5E, 0x7B, 0xD4, 0x60, 0x5F, 0x9B, 0x3B, 0x60, -0x60, 0x5B, 0xB6, 0x60, 0x61, 0x7B, 0x1D, 0x60, 0x62, 0x44, 0xD2, 0xE0, 0x63, 0x5A, 0xFF, 0x60, -0x64, 0x24, 0xB4, 0xE0, 0x65, 0x3A, 0xE1, 0x60, 0x66, 0x04, 0x96, 0xE0, 0x67, 0x1A, 0xC3, 0x60, -0x67, 0xE4, 0x78, 0xE0, 0x69, 0x03, 0xDF, 0xE0, 0x69, 0xC4, 0x5A, 0xE0, 0x6A, 0xE3, 0xC1, 0xE0, -0x6B, 0xA4, 0x3C, 0xE0, 0x6C, 0xC3, 0xA3, 0xE0, 0x6D, 0x8D, 0x59, 0x60, 0x6E, 0xA3, 0x85, 0xE0, -0x6F, 0x6D, 0x3B, 0x60, 0x70, 0x83, 0x67, 0xE0, 0x71, 0x4D, 0x1D, 0x60, 0x72, 0x63, 0x49, 0xE0, -0x73, 0x2C, 0xFF, 0x60, 0x74, 0x4C, 0x66, 0x60, 0x75, 0x0C, 0xE1, 0x60, 0x76, 0x2C, 0x48, 0x60, -0x76, 0xF5, 0xFD, 0xE0, 0x78, 0x0C, 0x2A, 0x60, 0x78, 0xD5, 0xDF, 0xE0, 0x79, 0xEC, 0x0C, 0x60, -0x7A, 0xB5, 0xC1, 0xE0, 0x7B, 0xCB, 0xEE, 0x60, 0x7C, 0x95, 0xA3, 0xE0, 0x7D, 0xB5, 0x0A, 0xE0, -0x7E, 0x75, 0x85, 0xE0, 0x7F, 0x94, 0xEC, 0xE0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x00, -0x00, 0x21, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, -0x09, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, -0x00, 0x00, 0x00, 0x00, - -/* Asia/Anadyr */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0F, 0xAA, 0x19, 0x1D, 0x9C, -0xB5, 0xA3, 0x8C, 0xC0, 0x15, 0x27, 0x1B, 0x30, 0x16, 0x18, 0x4F, 0xA0, 0x17, 0x08, 0x4E, 0xB0, -0x17, 0xF9, 0x91, 0x30, 0x18, 0xE9, 0x90, 0x40, 0x19, 0xDA, 0xC4, 0xB0, 0x1A, 0xCC, 0x15, 0x40, -0x1B, 0xBC, 0x22, 0x60, 0x1C, 0xAC, 0x13, 0x60, 0x1D, 0x9C, 0x04, 0x60, 0x1E, 0x8B, 0xF5, 0x60, -0x1F, 0x7B, 0xE6, 0x60, 0x20, 0x6B, 0xD7, 0x60, 0x21, 0x5B, 0xC8, 0x60, 0x22, 0x4B, 0xB9, 0x60, -0x23, 0x3B, 0xAA, 0x60, 0x24, 0x2B, 0x9B, 0x60, 0x25, 0x1B, 0x8C, 0x60, 0x26, 0x0B, 0x7D, 0x60, -0x27, 0x04, 0xA8, 0xE0, 0x27, 0xF4, 0x99, 0xE0, 0x28, 0xE4, 0x98, 0xF0, 0x29, 0x78, 0x40, 0xF0, -0x29, 0xD4, 0x51, 0xB0, 0x2A, 0xC4, 0x34, 0xA0, 0x2B, 0xB4, 0x5D, 0xE0, 0x2C, 0xA4, 0x4E, 0xE0, -0x2D, 0x94, 0x3F, 0xE0, 0x2E, 0x84, 0x30, 0xE0, 0x2F, 0x74, 0x21, 0xE0, 0x30, 0x64, 0x12, 0xE0, -0x31, 0x5D, 0x3E, 0x60, 0x32, 0x72, 0x19, 0x60, 0x33, 0x3D, 0x20, 0x60, 0x34, 0x51, 0xFB, 0x60, -0x35, 0x1D, 0x02, 0x60, 0x36, 0x31, 0xDD, 0x60, 0x36, 0xFC, 0xE4, 0x60, 0x38, 0x1A, 0xF9, 0xE0, -0x38, 0xDC, 0xC6, 0x60, 0x39, 0xFA, 0xDB, 0xE0, 0x3A, 0xBC, 0xA8, 0x60, 0x3B, 0xDA, 0xBD, 0xE0, -0x3C, 0xA5, 0xC4, 0xE0, 0x3D, 0xBA, 0x9F, 0xE0, 0x3E, 0x85, 0xA6, 0xE0, 0x3F, 0x9A, 0x81, 0xE0, -0x40, 0x65, 0x88, 0xE0, 0x41, 0x83, 0x9E, 0x60, 0x42, 0x45, 0x6A, 0xE0, 0x43, 0x63, 0x80, 0x60, -0x44, 0x25, 0x4C, 0xE0, 0x45, 0x43, 0x62, 0x60, 0x46, 0x05, 0x2E, 0xE0, 0x47, 0x23, 0x44, 0x60, -0x47, 0xEE, 0x4B, 0x60, 0x49, 0x03, 0x26, 0x60, 0x49, 0xCE, 0x2D, 0x60, 0x4A, 0xE3, 0x08, 0x60, -0x4B, 0xAE, 0x0F, 0x60, 0x4C, 0xCC, 0x24, 0xE0, 0x4D, 0x8D, 0xF1, 0x60, 0x4E, 0xAC, 0x06, 0xE0, -0x4F, 0x6D, 0xD3, 0x60, 0x50, 0x8B, 0xE8, 0xE0, 0x51, 0x56, 0xEF, 0xE0, 0x52, 0x6B, 0xCA, 0xE0, -0x53, 0x36, 0xD1, 0xE0, 0x54, 0x4B, 0xAC, 0xE0, 0x55, 0x16, 0xB3, 0xE0, 0x56, 0x2B, 0x8E, 0xE0, -0x56, 0xF6, 0x95, 0xE0, 0x58, 0x14, 0xAB, 0x60, 0x58, 0xD6, 0x77, 0xE0, 0x59, 0xF4, 0x8D, 0x60, -0x5A, 0xB6, 0x59, 0xE0, 0x5B, 0xD4, 0x6F, 0x60, 0x5C, 0x9F, 0x76, 0x60, 0x5D, 0xB4, 0x51, 0x60, -0x5E, 0x7F, 0x58, 0x60, 0x5F, 0x94, 0x33, 0x60, 0x60, 0x5F, 0x3A, 0x60, 0x61, 0x7D, 0x4F, 0xE0, -0x62, 0x3F, 0x1C, 0x60, 0x63, 0x5D, 0x31, 0xE0, 0x64, 0x1E, 0xFE, 0x60, 0x65, 0x3D, 0x13, 0xE0, -0x66, 0x08, 0x1A, 0xE0, 0x67, 0x1C, 0xF5, 0xE0, 0x67, 0xE7, 0xFC, 0xE0, 0x68, 0xFC, 0xD7, 0xE0, -0x69, 0xC7, 0xDE, 0xE0, 0x6A, 0xDC, 0xB9, 0xE0, 0x6B, 0xA7, 0xC0, 0xE0, 0x6C, 0xC5, 0xD6, 0x60, -0x6D, 0x87, 0xA2, 0xE0, 0x6E, 0xA5, 0xB8, 0x60, 0x6F, 0x67, 0x84, 0xE0, 0x70, 0x85, 0x9A, 0x60, -0x71, 0x50, 0xA1, 0x60, 0x72, 0x65, 0x7C, 0x60, 0x73, 0x30, 0x83, 0x60, 0x74, 0x45, 0x5E, 0x60, -0x75, 0x10, 0x65, 0x60, 0x76, 0x2E, 0x7A, 0xE0, 0x76, 0xF0, 0x47, 0x60, 0x78, 0x0E, 0x5C, 0xE0, -0x78, 0xD0, 0x29, 0x60, 0x79, 0xEE, 0x3E, 0xE0, 0x7A, 0xB0, 0x0B, 0x60, 0x7B, 0xCE, 0x20, 0xE0, -0x7C, 0x99, 0x27, 0xE0, 0x7D, 0xAE, 0x02, 0xE0, 0x7E, 0x79, 0x09, 0xE0, 0x7F, 0x8D, 0xE4, 0xE0, -0x01, 0x03, 0x02, 0x03, 0x04, 0x01, 0x04, 0x01, 0x04, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x07, 0x08, 0x05, 0x04, 0x01, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x00, 0x00, 0xA6, 0x64, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xC0, 0x00, -0x04, 0x00, 0x00, 0xC4, 0xE0, 0x01, 0x09, 0x00, 0x00, 0xB6, 0xD0, 0x00, 0x04, 0x00, 0x00, 0xB6, -0xD0, 0x01, 0x09, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x04, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x09, 0x00, -0x00, 0xA8, 0xC0, 0x01, 0x09, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x41, -0x4E, 0x41, 0x54, 0x00, 0x41, 0x4E, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, -0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Aqtau */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x1F, 0xAA, 0x19, 0x94, 0xE0, -0xB5, 0xA3, 0xFD, 0x40, 0xF2, 0xD4, 0xAE, 0x30, 0x16, 0x18, 0xCE, 0x30, 0x17, 0x08, 0xB1, 0x20, -0x17, 0xF9, 0xF3, 0xA0, 0x18, 0xE9, 0xF2, 0xB0, 0x19, 0xDB, 0x27, 0x20, 0x1A, 0xCC, 0x77, 0xB0, -0x1B, 0xBC, 0x84, 0xD0, 0x1C, 0xAC, 0x75, 0xD0, 0x1D, 0x9C, 0x66, 0xD0, 0x1E, 0x8C, 0x57, 0xD0, -0x1F, 0x7C, 0x48, 0xD0, 0x20, 0x6C, 0x39, 0xD0, 0x21, 0x5C, 0x2A, 0xD0, 0x22, 0x4C, 0x1B, 0xD0, -0x23, 0x3C, 0x0C, 0xD0, 0x24, 0x2B, 0xFD, 0xD0, 0x25, 0x1B, 0xEE, 0xD0, 0x26, 0x0B, 0xDF, 0xD0, -0x27, 0x05, 0x0B, 0x50, 0x27, 0x7F, 0x8A, 0xB0, 0x29, 0x4B, 0xA6, 0x30, 0x29, 0xD4, 0xB4, 0x20, -0x2A, 0xC4, 0x97, 0x10, 0x2B, 0xB4, 0xC0, 0x50, 0x2C, 0xA4, 0xB1, 0x50, 0x2D, 0x94, 0xA2, 0x50, -0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0x84, 0x50, 0x30, 0x64, 0x83, 0x60, 0x31, 0x5D, 0xAE, 0xE0, -0x32, 0x72, 0x89, 0xE0, 0x33, 0x3D, 0x90, 0xE0, 0x34, 0x52, 0x6B, 0xE0, 0x35, 0x1D, 0x72, 0xE0, -0x36, 0x32, 0x4D, 0xE0, 0x36, 0xFD, 0x54, 0xE0, 0x38, 0x1B, 0x6A, 0x60, 0x38, 0xDD, 0x36, 0xE0, -0x39, 0xFB, 0x4C, 0x60, 0x3A, 0xBD, 0x18, 0xE0, 0x3B, 0xDB, 0x2E, 0x60, 0x3C, 0xA6, 0x35, 0x60, -0x3D, 0xBB, 0x10, 0x60, 0x3E, 0x86, 0x17, 0x60, 0x3F, 0x9A, 0xF2, 0x60, 0x40, 0x65, 0xF9, 0x60, -0x41, 0x84, 0x0E, 0xE0, 0x42, 0x35, 0xED, 0x40, 0x01, 0x02, 0x03, 0x04, 0x05, 0x03, 0x05, 0x03, -0x05, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x03, 0x09, -0x08, 0x09, 0x0A, 0x0B, 0x0A, 0x0B, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, -0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x09, 0x00, 0x00, 0x2F, 0x20, 0x00, -0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x00, 0x00, 0x46, -0x50, 0x00, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x09, 0x00, 0x00, 0x54, 0x60, 0x01, 0x0E, 0x00, -0x00, 0x46, 0x50, 0x00, 0x09, 0x00, 0x00, 0x54, 0x60, 0x01, 0x0E, 0x00, 0x00, 0x54, 0x60, 0x01, -0x14, 0x00, 0x00, 0x46, 0x50, 0x00, 0x1A, 0x00, 0x00, 0x54, 0x60, 0x01, 0x14, 0x00, 0x00, 0x46, -0x50, 0x00, 0x1A, 0x00, 0x00, 0x46, 0x50, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x00, 0x1A, 0x00, -0x00, 0x38, 0x40, 0x00, 0x1A, 0x4C, 0x4D, 0x54, 0x00, 0x46, 0x4F, 0x52, 0x54, 0x00, 0x53, 0x48, -0x45, 0x54, 0x00, 0x53, 0x48, 0x45, 0x53, 0x54, 0x00, 0x41, 0x51, 0x54, 0x53, 0x54, 0x00, 0x41, -0x51, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, -0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, - -/* Asia/Aqtobe */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x1A, 0xAA, 0x19, 0x8E, 0x68, -0xB5, 0xA3, 0xFD, 0x40, 0x15, 0x27, 0x8B, 0xB0, 0x16, 0x18, 0xC0, 0x20, 0x17, 0x08, 0xB1, 0x20, -0x17, 0xF9, 0xF3, 0xA0, 0x18, 0xE9, 0xF2, 0xB0, 0x19, 0xDB, 0x27, 0x20, 0x1A, 0xCC, 0x77, 0xB0, -0x1B, 0xBC, 0x84, 0xD0, 0x1C, 0xAC, 0x75, 0xD0, 0x1D, 0x9C, 0x66, 0xD0, 0x1E, 0x8C, 0x57, 0xD0, -0x1F, 0x7C, 0x48, 0xD0, 0x20, 0x6C, 0x39, 0xD0, 0x21, 0x5C, 0x2A, 0xD0, 0x22, 0x4C, 0x1B, 0xD0, -0x23, 0x3C, 0x0C, 0xD0, 0x24, 0x2B, 0xFD, 0xD0, 0x25, 0x1B, 0xEE, 0xD0, 0x26, 0x0B, 0xDF, 0xD0, -0x27, 0x05, 0x0B, 0x50, 0x27, 0x7F, 0x8A, 0xB0, 0x29, 0x4B, 0xA6, 0x30, 0x29, 0xD4, 0xB4, 0x20, -0x2A, 0xC4, 0x97, 0x10, 0x2B, 0xB4, 0xC0, 0x50, 0x2C, 0xA4, 0xB1, 0x50, 0x2D, 0x94, 0xA2, 0x50, -0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0x84, 0x50, 0x30, 0x64, 0x75, 0x50, 0x31, 0x5D, 0xA0, 0xD0, -0x32, 0x72, 0x7B, 0xD0, 0x33, 0x3D, 0x82, 0xD0, 0x34, 0x52, 0x5D, 0xD0, 0x35, 0x1D, 0x64, 0xD0, -0x36, 0x32, 0x3F, 0xD0, 0x36, 0xFD, 0x46, 0xD0, 0x38, 0x1B, 0x5C, 0x50, 0x38, 0xDD, 0x28, 0xD0, -0x39, 0xFB, 0x3E, 0x50, 0x3A, 0xBD, 0x0A, 0xD0, 0x3B, 0xDB, 0x20, 0x50, 0x3C, 0xA6, 0x27, 0x50, -0x3D, 0xBB, 0x02, 0x50, 0x3E, 0x86, 0x09, 0x50, 0x3F, 0x9A, 0xE4, 0x50, 0x40, 0x65, 0xEB, 0x50, -0x41, 0x84, 0x00, 0xD0, 0x42, 0x35, 0xDF, 0x30, 0x01, 0x02, 0x03, 0x04, 0x03, 0x02, 0x03, 0x02, -0x03, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x02, 0x08, -0x07, 0x08, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, -0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x08, 0x00, 0x00, 0x35, 0x98, 0x00, -0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x00, 0x00, 0x54, -0x60, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x00, -0x00, 0x54, 0x60, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x01, 0x0F, 0x00, 0x00, 0x46, 0x50, 0x00, -0x15, 0x00, 0x00, 0x54, 0x60, 0x01, 0x0F, 0x00, 0x00, 0x46, 0x50, 0x00, 0x15, 0x4C, 0x4D, 0x54, -0x00, 0x41, 0x4B, 0x54, 0x54, 0x00, 0x41, 0x4B, 0x54, 0x53, 0x54, 0x00, 0x41, 0x51, 0x54, 0x53, -0x54, 0x00, 0x41, 0x51, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, -0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Ashgabat */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x13, 0xAA, 0x19, 0x8D, 0x44, -0xB5, 0xA3, 0xFD, 0x40, 0x15, 0x27, 0x8B, 0xB0, 0x16, 0x18, 0xC0, 0x20, 0x17, 0x08, 0xBF, 0x30, -0x17, 0xF9, 0xF3, 0xA0, 0x18, 0xE9, 0xF2, 0xB0, 0x19, 0xDB, 0x27, 0x20, 0x1A, 0xCC, 0x77, 0xB0, -0x1B, 0xBC, 0x84, 0xD0, 0x1C, 0xAC, 0x75, 0xD0, 0x1D, 0x9C, 0x66, 0xD0, 0x1E, 0x8C, 0x57, 0xD0, -0x1F, 0x7C, 0x48, 0xD0, 0x20, 0x6C, 0x39, 0xD0, 0x21, 0x5C, 0x2A, 0xD0, 0x22, 0x4C, 0x1B, 0xD0, -0x23, 0x3C, 0x0C, 0xD0, 0x24, 0x2B, 0xFD, 0xD0, 0x25, 0x1B, 0xEE, 0xD0, 0x26, 0x0B, 0xDF, 0xD0, -0x27, 0x05, 0x0B, 0x50, 0x27, 0xF4, 0xFC, 0x50, 0x28, 0xE4, 0xFB, 0x60, 0x29, 0x09, 0xC9, 0x40, -0x29, 0x78, 0xA3, 0x60, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x08, 0x09, 0x00, 0x00, -0x36, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x00, 0x00, 0x54, 0x60, 0x01, 0x09, -0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x00, 0x00, 0x54, 0x60, -0x01, 0x09, 0x00, 0x00, 0x46, 0x50, 0x01, 0x09, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x00, 0x00, -0x38, 0x40, 0x00, 0x0F, 0x00, 0x00, 0x46, 0x50, 0x00, 0x0F, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x53, -0x48, 0x54, 0x00, 0x41, 0x53, 0x48, 0x53, 0x54, 0x00, 0x54, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, -0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, - -/* Asia/Ashkhabad */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x13, 0xAA, 0x19, 0x8D, 0x44, -0xB5, 0xA3, 0xFD, 0x40, 0x15, 0x27, 0x8B, 0xB0, 0x16, 0x18, 0xC0, 0x20, 0x17, 0x08, 0xBF, 0x30, -0x17, 0xF9, 0xF3, 0xA0, 0x18, 0xE9, 0xF2, 0xB0, 0x19, 0xDB, 0x27, 0x20, 0x1A, 0xCC, 0x77, 0xB0, -0x1B, 0xBC, 0x84, 0xD0, 0x1C, 0xAC, 0x75, 0xD0, 0x1D, 0x9C, 0x66, 0xD0, 0x1E, 0x8C, 0x57, 0xD0, -0x1F, 0x7C, 0x48, 0xD0, 0x20, 0x6C, 0x39, 0xD0, 0x21, 0x5C, 0x2A, 0xD0, 0x22, 0x4C, 0x1B, 0xD0, -0x23, 0x3C, 0x0C, 0xD0, 0x24, 0x2B, 0xFD, 0xD0, 0x25, 0x1B, 0xEE, 0xD0, 0x26, 0x0B, 0xDF, 0xD0, -0x27, 0x05, 0x0B, 0x50, 0x27, 0xF4, 0xFC, 0x50, 0x28, 0xE4, 0xFB, 0x60, 0x29, 0x09, 0xC9, 0x40, -0x29, 0x78, 0xA3, 0x60, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x08, 0x09, 0x00, 0x00, -0x36, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x00, 0x00, 0x54, 0x60, 0x01, 0x09, -0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x00, 0x00, 0x54, 0x60, -0x01, 0x09, 0x00, 0x00, 0x46, 0x50, 0x01, 0x09, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x00, 0x00, -0x38, 0x40, 0x00, 0x0F, 0x00, 0x00, 0x46, 0x50, 0x00, 0x0F, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x53, -0x48, 0x54, 0x00, 0x41, 0x53, 0x48, 0x53, 0x54, 0x00, 0x54, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, -0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, - -/* Asia/Baghdad */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0C, 0x9E, 0x30, 0x3C, 0xE0, -0x17, 0x30, 0x68, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xE8, 0xBD, 0x50, 0x19, 0xDB, 0x43, 0x40, -0x1A, 0xCC, 0x93, 0xD0, 0x1B, 0xBD, 0xC8, 0x40, 0x1C, 0xAD, 0xC7, 0x50, 0x1D, 0x9C, 0x74, 0xE0, -0x1E, 0x8C, 0x65, 0xE0, 0x1F, 0x7C, 0x56, 0xE0, 0x20, 0x6C, 0x47, 0xE0, 0x21, 0x5C, 0x38, 0xE0, -0x22, 0x4C, 0x29, 0xE0, 0x23, 0x3C, 0x1A, 0xE0, 0x24, 0x2C, 0x0B, 0xE0, 0x25, 0x1B, 0xFC, 0xE0, -0x26, 0x0B, 0xED, 0xE0, 0x27, 0x05, 0x19, 0x60, 0x27, 0xF6, 0x78, 0x00, 0x28, 0xE7, 0xBA, 0x80, -0x29, 0xD8, 0xFD, 0x00, 0x2A, 0xCA, 0x3F, 0x80, 0x2B, 0xBA, 0x30, 0x80, 0x2C, 0xAB, 0x73, 0x00, -0x2D, 0x9B, 0x64, 0x00, 0x2E, 0x8C, 0xA6, 0x80, 0x2F, 0x7C, 0x97, 0x80, 0x30, 0x6D, 0xDA, 0x00, -0x31, 0x5F, 0x1C, 0x80, 0x32, 0x50, 0x5F, 0x00, 0x33, 0x40, 0x50, 0x00, 0x34, 0x31, 0x92, 0x80, -0x35, 0x21, 0x83, 0x80, 0x36, 0x12, 0xC6, 0x00, 0x37, 0x02, 0xB7, 0x00, 0x37, 0xF3, 0xF9, 0x80, -0x38, 0xE5, 0x3C, 0x00, 0x39, 0xD6, 0x7E, 0x80, 0x3A, 0xC6, 0x6F, 0x80, 0x3B, 0xB7, 0xB2, 0x00, -0x3C, 0xA7, 0xA3, 0x00, 0x3D, 0x98, 0xE5, 0x80, 0x3E, 0x88, 0xD6, 0x80, 0x3F, 0x7A, 0x19, 0x00, -0x40, 0x6B, 0x5B, 0x80, 0x41, 0x5C, 0x9E, 0x00, 0x42, 0x4C, 0x8F, 0x00, 0x43, 0x3D, 0xD1, 0x80, -0x44, 0x2D, 0xC2, 0x80, 0x45, 0x1F, 0x05, 0x00, 0x46, 0x0E, 0xF6, 0x00, 0x47, 0x00, 0x38, 0x80, -0x47, 0xF1, 0x7B, 0x00, 0x48, 0xE2, 0xBD, 0x80, 0x49, 0xD2, 0xAE, 0x80, 0x4A, 0xC3, 0xF1, 0x00, -0x4B, 0xB3, 0xE2, 0x00, 0x4C, 0xA5, 0x24, 0x80, 0x4D, 0x95, 0x15, 0x80, 0x4E, 0x86, 0x58, 0x00, -0x4F, 0x77, 0x9A, 0x80, 0x50, 0x68, 0xDD, 0x00, 0x51, 0x58, 0xCE, 0x00, 0x52, 0x4A, 0x10, 0x80, -0x53, 0x3A, 0x01, 0x80, 0x54, 0x2B, 0x44, 0x00, 0x55, 0x1B, 0x35, 0x00, 0x56, 0x0C, 0x77, 0x80, -0x56, 0xFD, 0xBA, 0x00, 0x57, 0xEE, 0xFC, 0x80, 0x58, 0xDE, 0xED, 0x80, 0x59, 0xD0, 0x30, 0x00, -0x5A, 0xC0, 0x21, 0x00, 0x5B, 0xB1, 0x63, 0x80, 0x5C, 0xA1, 0x54, 0x80, 0x5D, 0x92, 0x97, 0x00, -0x5E, 0x83, 0xD9, 0x80, 0x5F, 0x75, 0x1C, 0x00, 0x60, 0x65, 0x0D, 0x00, 0x61, 0x56, 0x4F, 0x80, -0x62, 0x46, 0x40, 0x80, 0x63, 0x37, 0x83, 0x00, 0x64, 0x27, 0x74, 0x00, 0x65, 0x18, 0xB6, 0x80, -0x66, 0x09, 0xF9, 0x00, 0x66, 0xFB, 0x3B, 0x80, 0x67, 0xEB, 0x2C, 0x80, 0x68, 0xDC, 0x6F, 0x00, -0x69, 0xCC, 0x60, 0x00, 0x6A, 0xBD, 0xA2, 0x80, 0x6B, 0xAD, 0x93, 0x80, 0x6C, 0x9E, 0xD6, 0x00, -0x6D, 0x90, 0x18, 0x80, 0x6E, 0x81, 0x5B, 0x00, 0x6F, 0x71, 0x4C, 0x00, 0x70, 0x62, 0x8E, 0x80, -0x71, 0x52, 0x7F, 0x80, 0x72, 0x43, 0xC2, 0x00, 0x73, 0x33, 0xB3, 0x00, 0x74, 0x24, 0xF5, 0x80, -0x75, 0x16, 0x38, 0x00, 0x76, 0x07, 0x7A, 0x80, 0x76, 0xF7, 0x6B, 0x80, 0x77, 0xE8, 0xAE, 0x00, -0x78, 0xD8, 0x9F, 0x00, 0x79, 0xC9, 0xE1, 0x80, 0x7A, 0xB9, 0xD2, 0x80, 0x7B, 0xAB, 0x15, 0x00, -0x7C, 0x9C, 0x57, 0x80, 0x7D, 0x8D, 0x9A, 0x00, 0x7E, 0x7D, 0x8B, 0x00, 0x7F, 0x6E, 0xCD, 0x80, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x00, 0x00, 0x29, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x00, 0x00, 0x38, -0x40, 0x01, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x00, 0x00, 0x38, 0x40, 0x01, 0x08, 0x42, -0x4D, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, -0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Bahrain */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xA1, 0xF2, 0x9E, 0x14, -0x04, 0x8A, 0x92, 0xC0, 0x01, 0x02, 0x00, 0x00, 0x2F, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, -0x00, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x47, 0x53, 0x54, 0x00, -0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Baku */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 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, 0x70, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x18, 0xAA, 0x19, 0x95, 0x44, -0xE7, 0xDA, 0x0C, 0x50, 0x15, 0x27, 0x99, 0xC0, 0x16, 0x18, 0xCE, 0x30, 0x17, 0x08, 0xCD, 0x40, -0x17, 0xFA, 0x01, 0xB0, 0x18, 0xEA, 0x00, 0xC0, 0x19, 0xDB, 0x35, 0x30, 0x1A, 0xCC, 0x85, 0xC0, -0x1B, 0xBC, 0x92, 0xE0, 0x1C, 0xAC, 0x83, 0xE0, 0x1D, 0x9C, 0x74, 0xE0, 0x1E, 0x8C, 0x65, 0xE0, -0x1F, 0x7C, 0x56, 0xE0, 0x20, 0x6C, 0x47, 0xE0, 0x21, 0x5C, 0x38, 0xE0, 0x22, 0x4C, 0x29, 0xE0, -0x23, 0x3C, 0x1A, 0xE0, 0x24, 0x2C, 0x0B, 0xE0, 0x25, 0x1B, 0xFC, 0xE0, 0x26, 0x0B, 0xED, 0xE0, -0x27, 0x05, 0x19, 0x60, 0x27, 0xF5, 0x0A, 0x60, 0x28, 0xBD, 0x52, 0x40, 0x28, 0xE5, 0x09, 0x70, -0x29, 0xD4, 0xD0, 0x40, 0x2A, 0xC4, 0xB3, 0x30, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, -0x32, 0xC9, 0x70, 0xC0, 0x33, 0x3D, 0xAD, 0x00, 0x34, 0x52, 0x88, 0x00, 0x35, 0x1D, 0x8F, 0x00, -0x36, 0x32, 0x6A, 0x00, 0x36, 0xFD, 0x71, 0x00, 0x38, 0x1B, 0x86, 0x80, 0x38, 0xDD, 0x53, 0x00, -0x39, 0xFB, 0x68, 0x80, 0x3A, 0xBD, 0x35, 0x00, 0x3B, 0xDB, 0x4A, 0x80, 0x3C, 0xA6, 0x51, 0x80, -0x3D, 0xBB, 0x2C, 0x80, 0x3E, 0x86, 0x33, 0x80, 0x3F, 0x9B, 0x0E, 0x80, 0x40, 0x66, 0x15, 0x80, -0x41, 0x84, 0x2B, 0x00, 0x42, 0x45, 0xF7, 0x80, 0x43, 0x64, 0x0D, 0x00, 0x44, 0x25, 0xD9, 0x80, -0x45, 0x43, 0xEF, 0x00, 0x46, 0x05, 0xBB, 0x80, 0x47, 0x23, 0xD1, 0x00, 0x47, 0xEE, 0xD8, 0x00, -0x49, 0x03, 0xB3, 0x00, 0x49, 0xCE, 0xBA, 0x00, 0x4A, 0xE3, 0x95, 0x00, 0x4B, 0xAE, 0x9C, 0x00, -0x4C, 0xCC, 0xB1, 0x80, 0x4D, 0x8E, 0x7E, 0x00, 0x4E, 0xAC, 0x93, 0x80, 0x4F, 0x6E, 0x60, 0x00, -0x50, 0x8C, 0x75, 0x80, 0x51, 0x57, 0x7C, 0x80, 0x52, 0x6C, 0x57, 0x80, 0x53, 0x37, 0x5E, 0x80, -0x54, 0x4C, 0x39, 0x80, 0x55, 0x17, 0x40, 0x80, 0x56, 0x2C, 0x1B, 0x80, 0x56, 0xF7, 0x22, 0x80, -0x58, 0x15, 0x38, 0x00, 0x58, 0xD7, 0x04, 0x80, 0x59, 0xF5, 0x1A, 0x00, 0x5A, 0xB6, 0xE6, 0x80, -0x5B, 0xD4, 0xFC, 0x00, 0x5C, 0xA0, 0x03, 0x00, 0x5D, 0xB4, 0xDE, 0x00, 0x5E, 0x7F, 0xE5, 0x00, -0x5F, 0x94, 0xC0, 0x00, 0x60, 0x5F, 0xC7, 0x00, 0x61, 0x7D, 0xDC, 0x80, 0x62, 0x3F, 0xA9, 0x00, -0x63, 0x5D, 0xBE, 0x80, 0x64, 0x1F, 0x8B, 0x00, 0x65, 0x3D, 0xA0, 0x80, 0x66, 0x08, 0xA7, 0x80, -0x67, 0x1D, 0x82, 0x80, 0x67, 0xE8, 0x89, 0x80, 0x68, 0xFD, 0x64, 0x80, 0x69, 0xC8, 0x6B, 0x80, -0x6A, 0xDD, 0x46, 0x80, 0x6B, 0xA8, 0x4D, 0x80, 0x6C, 0xC6, 0x63, 0x00, 0x6D, 0x88, 0x2F, 0x80, -0x6E, 0xA6, 0x45, 0x00, 0x6F, 0x68, 0x11, 0x80, 0x70, 0x86, 0x27, 0x00, 0x71, 0x51, 0x2E, 0x00, -0x72, 0x66, 0x09, 0x00, 0x73, 0x31, 0x10, 0x00, 0x74, 0x45, 0xEB, 0x00, 0x75, 0x10, 0xF2, 0x00, -0x76, 0x2F, 0x07, 0x80, 0x76, 0xF0, 0xD4, 0x00, 0x78, 0x0E, 0xE9, 0x80, 0x78, 0xD0, 0xB6, 0x00, -0x79, 0xEE, 0xCB, 0x80, 0x7A, 0xB0, 0x98, 0x00, 0x7B, 0xCE, 0xAD, 0x80, 0x7C, 0x99, 0xB4, 0x80, -0x7D, 0xAE, 0x8F, 0x80, 0x7E, 0x79, 0x96, 0x80, 0x7F, 0x8E, 0x71, 0x80, 0x01, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x06, 0x08, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, -0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, -0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, -0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, -0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, -0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x0C, 0x09, 0x00, 0x00, 0x2E, 0xBC, -0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x00, 0x00, 0x46, 0x50, 0x01, 0x09, 0x00, 0x00, -0x38, 0x40, 0x00, 0x04, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x00, 0x00, 0x46, 0x50, 0x01, 0x09, -0x00, 0x00, 0x38, 0x40, 0x01, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0F, 0x00, 0x00, 0x38, 0x40, -0x01, 0x13, 0x00, 0x00, 0x38, 0x40, 0x00, 0x0F, 0x00, 0x00, 0x46, 0x50, 0x01, 0x13, 0x00, 0x00, -0x38, 0x40, 0x00, 0x0F, 0x00, 0x00, 0x46, 0x50, 0x01, 0x13, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x41, -0x4B, 0x54, 0x00, 0x42, 0x41, 0x4B, 0x53, 0x54, 0x00, 0x41, 0x5A, 0x54, 0x00, 0x41, 0x5A, 0x53, -0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, - -/* Asia/Bangkok */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xA2, 0x6A, 0x67, 0xC4, -0x01, 0x00, 0x00, 0x5E, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x42, 0x4D, 0x54, -0x00, 0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Beirut */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xA2, 0x65, 0x63, 0xE0, -0xA3, 0x7B, 0x82, 0x50, 0xA4, 0x4E, 0x80, 0x60, 0xA5, 0x3F, 0xB4, 0xD0, 0xA6, 0x25, 0x27, 0xE0, -0xA7, 0x27, 0x7F, 0xD0, 0xA8, 0x29, 0xF3, 0xE0, 0xA8, 0xEB, 0xB2, 0x50, 0xE8, 0x2A, 0x85, 0xE0, -0xE8, 0xF4, 0x2D, 0x50, 0xEA, 0x0B, 0xB9, 0x60, 0xEA, 0xD5, 0x60, 0xD0, 0xEB, 0xEC, 0xEC, 0xE0, -0xEC, 0xB6, 0x94, 0x50, 0xED, 0xCF, 0x71, 0xE0, 0xEE, 0x99, 0x19, 0x50, 0xEF, 0xB0, 0xA5, 0x60, -0xF0, 0x7A, 0x4C, 0xD0, 0x04, 0xA6, 0x5E, 0x60, 0x05, 0x2B, 0x77, 0xD0, 0x06, 0x43, 0x03, 0xE0, -0x07, 0x0C, 0xAB, 0x50, 0x08, 0x24, 0x37, 0x60, 0x08, 0xED, 0xDE, 0xD0, 0x0A, 0x05, 0x6A, 0xE0, -0x0A, 0xCF, 0x12, 0x50, 0x0B, 0xE7, 0xEF, 0xE0, 0x0C, 0xB1, 0x97, 0x50, 0x0D, 0xC9, 0x23, 0x60, -0x0E, 0x92, 0xCA, 0xD0, 0x0F, 0xA9, 0x05, 0x60, 0x10, 0x72, 0xAC, 0xD0, 0x1A, 0xF4, 0x2E, 0xE0, -0x1B, 0xD1, 0x9C, 0xD0, 0x1C, 0xD5, 0x62, 0x60, 0x1D, 0xB2, 0xD0, 0x50, 0x1E, 0xB6, 0x95, 0xE0, -0x1F, 0x94, 0x03, 0xD0, 0x20, 0x97, 0xC9, 0x60, 0x21, 0x75, 0x37, 0x50, 0x22, 0xA3, 0x2C, 0xE0, -0x23, 0x57, 0xBC, 0x50, 0x24, 0x67, 0x5F, 0x60, 0x25, 0x38, 0xEF, 0xD0, 0x26, 0x3C, 0xB5, 0x60, -0x27, 0x1A, 0x23, 0x50, 0x28, 0x1D, 0xE8, 0xE0, 0x28, 0xFB, 0x56, 0xD0, 0x2A, 0x00, 0x6D, 0xE0, -0x2A, 0xCE, 0x09, 0xD0, 0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50, 0x2D, 0x94, 0xB0, 0x60, -0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0x92, 0x60, 0x30, 0x64, 0x75, 0x50, 0x31, 0x5D, 0xAE, 0xE0, -0x32, 0x4D, 0x91, 0xD0, 0x33, 0x3D, 0x90, 0xE0, 0x34, 0x2D, 0x73, 0xD0, 0x35, 0x1D, 0x72, 0xE0, -0x36, 0x0D, 0x55, 0xD0, 0x36, 0xFD, 0x54, 0xE0, 0x38, 0x1B, 0x5C, 0x50, 0x38, 0xDD, 0x36, 0xE0, -0x39, 0xFB, 0x3E, 0x50, 0x3A, 0xBD, 0x18, 0xE0, 0x3B, 0xDB, 0x20, 0x50, 0x3C, 0xA6, 0x35, 0x60, -0x3D, 0xBB, 0x02, 0x50, 0x3E, 0x86, 0x17, 0x60, 0x3F, 0x9A, 0xE4, 0x50, 0x40, 0x65, 0xF9, 0x60, -0x41, 0x84, 0x00, 0xD0, 0x42, 0x45, 0xDB, 0x60, 0x43, 0x63, 0xE2, 0xD0, 0x44, 0x25, 0xBD, 0x60, -0x45, 0x43, 0xC4, 0xD0, 0x46, 0x05, 0x9F, 0x60, 0x47, 0x23, 0xA6, 0xD0, 0x47, 0xEE, 0xBB, 0xE0, -0x49, 0x03, 0x88, 0xD0, 0x49, 0xCE, 0x9D, 0xE0, 0x4A, 0xE3, 0x6A, 0xD0, 0x4B, 0xAE, 0x7F, 0xE0, -0x4C, 0xCC, 0x87, 0x50, 0x4D, 0x8E, 0x61, 0xE0, 0x4E, 0xAC, 0x69, 0x50, 0x4F, 0x6E, 0x43, 0xE0, -0x50, 0x8C, 0x4B, 0x50, 0x51, 0x57, 0x60, 0x60, 0x52, 0x6C, 0x2D, 0x50, 0x53, 0x37, 0x42, 0x60, -0x54, 0x4C, 0x0F, 0x50, 0x55, 0x17, 0x24, 0x60, 0x56, 0x2B, 0xF1, 0x50, 0x56, 0xF7, 0x06, 0x60, -0x58, 0x15, 0x0D, 0xD0, 0x58, 0xD6, 0xE8, 0x60, 0x59, 0xF4, 0xEF, 0xD0, 0x5A, 0xB6, 0xCA, 0x60, -0x5B, 0xD4, 0xD1, 0xD0, 0x5C, 0x9F, 0xE6, 0xE0, 0x5D, 0xB4, 0xB3, 0xD0, 0x5E, 0x7F, 0xC8, 0xE0, -0x5F, 0x94, 0x95, 0xD0, 0x60, 0x5F, 0xAA, 0xE0, 0x61, 0x7D, 0xB2, 0x50, 0x62, 0x3F, 0x8C, 0xE0, -0x63, 0x5D, 0x94, 0x50, 0x64, 0x1F, 0x6E, 0xE0, 0x65, 0x3D, 0x76, 0x50, 0x66, 0x08, 0x8B, 0x60, -0x67, 0x1D, 0x58, 0x50, 0x67, 0xE8, 0x6D, 0x60, 0x68, 0xFD, 0x3A, 0x50, 0x69, 0xC8, 0x4F, 0x60, -0x6A, 0xDD, 0x1C, 0x50, 0x6B, 0xA8, 0x31, 0x60, 0x6C, 0xC6, 0x38, 0xD0, 0x6D, 0x88, 0x13, 0x60, -0x6E, 0xA6, 0x1A, 0xD0, 0x6F, 0x67, 0xF5, 0x60, 0x70, 0x85, 0xFC, 0xD0, 0x71, 0x51, 0x11, 0xE0, -0x72, 0x65, 0xDE, 0xD0, 0x73, 0x30, 0xF3, 0xE0, 0x74, 0x45, 0xC0, 0xD0, 0x75, 0x10, 0xD5, 0xE0, -0x76, 0x2E, 0xDD, 0x50, 0x76, 0xF0, 0xB7, 0xE0, 0x78, 0x0E, 0xBF, 0x50, 0x78, 0xD0, 0x99, 0xE0, -0x79, 0xEE, 0xA1, 0x50, 0x7A, 0xB0, 0x7B, 0xE0, 0x7B, 0xCE, 0x83, 0x50, 0x7C, 0x99, 0x98, 0x60, -0x7D, 0xAE, 0x65, 0x50, 0x7E, 0x79, 0x7A, 0x60, 0x7F, 0x8E, 0x47, 0x50, 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, 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, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, -0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, -0x1C, 0x20, 0x00, 0x05, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, -0x00, - -/* Asia/Bishkek */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x18, 0xAA, 0x19, 0x7E, 0x10, -0xB5, 0xA3, 0xEF, 0x30, 0x15, 0x27, 0x7D, 0xA0, 0x16, 0x18, 0xB2, 0x10, 0x17, 0x08, 0xB1, 0x20, -0x17, 0xF9, 0xE5, 0x90, 0x18, 0xE9, 0xE4, 0xA0, 0x19, 0xDB, 0x19, 0x10, 0x1A, 0xCC, 0x69, 0xA0, -0x1B, 0xBC, 0x76, 0xC0, 0x1C, 0xAC, 0x67, 0xC0, 0x1D, 0x9C, 0x58, 0xC0, 0x1E, 0x8C, 0x49, 0xC0, -0x1F, 0x7C, 0x3A, 0xC0, 0x20, 0x6C, 0x2B, 0xC0, 0x21, 0x5C, 0x1C, 0xC0, 0x22, 0x4C, 0x0D, 0xC0, -0x23, 0x3B, 0xFE, 0xC0, 0x24, 0x2B, 0xEF, 0xC0, 0x25, 0x1B, 0xE0, 0xC0, 0x26, 0x0B, 0xD1, 0xC0, -0x27, 0x04, 0xFD, 0x40, 0x27, 0xF4, 0xEE, 0x40, 0x28, 0xBE, 0xA3, 0xC0, 0x29, 0xE7, 0x37, 0x30, -0x2A, 0xC4, 0xA5, 0x20, 0x2B, 0xC7, 0x19, 0x30, 0x2C, 0xA4, 0x87, 0x20, 0x2D, 0xA6, 0xFB, 0x30, -0x2E, 0x84, 0x69, 0x20, 0x2F, 0x86, 0xDD, 0x30, 0x30, 0x64, 0x4B, 0x20, 0x31, 0x66, 0xBF, 0x30, -0x32, 0x4D, 0x67, 0xA0, 0x33, 0x3D, 0x89, 0xD8, 0x34, 0x52, 0x56, 0xC8, 0x35, 0x1D, 0x6B, 0xD8, -0x36, 0x32, 0x38, 0xC8, 0x36, 0xFD, 0x4D, 0xD8, 0x38, 0x1B, 0x55, 0x48, 0x38, 0xDD, 0x2F, 0xD8, -0x39, 0xFB, 0x37, 0x48, 0x3A, 0xBD, 0x11, 0xD8, 0x3B, 0xDB, 0x19, 0x48, 0x3C, 0xA6, 0x2E, 0x58, -0x3D, 0xBA, 0xFB, 0x48, 0x3E, 0x86, 0x10, 0x58, 0x3F, 0x9A, 0xDD, 0x48, 0x40, 0x65, 0xF2, 0x58, -0x41, 0x83, 0xF9, 0xC8, 0x42, 0x45, 0xD4, 0x58, 0x42, 0xFB, 0x92, 0x20, 0x01, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x06, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x0A, -0x00, 0x00, 0x45, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, -0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, -0x62, 0x70, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x01, 0x0F, -0x00, 0x00, 0x46, 0x50, 0x00, 0x14, 0x00, 0x00, 0x54, 0x60, 0x01, 0x0F, 0x00, 0x00, 0x54, 0x60, -0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x46, 0x52, 0x55, 0x54, 0x00, 0x46, 0x52, 0x55, 0x53, 0x54, -0x00, 0x4B, 0x47, 0x53, 0x54, 0x00, 0x4B, 0x47, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, -0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* Asia/Brunei */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0xAD, 0x8A, 0x02, 0x44, -0xBA, 0x67, 0x47, 0x88, 0x01, 0x02, 0x00, 0x00, 0x6B, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x69, 0x78, -0x00, 0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x42, 0x4E, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Calcutta */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0D, 0xCA, 0xDB, 0x86, 0xB0, -0xCC, 0x05, 0x71, 0x18, 0xCC, 0x95, 0x32, 0xA8, 0xD2, 0x74, 0x12, 0x98, 0x01, 0x02, 0x03, 0x02, -0x00, 0x00, 0x52, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x68, 0x00, 0x04, 0x00, 0x00, 0x4D, 0x58, -0x00, 0x09, 0x00, 0x00, 0x5B, 0x68, 0x01, 0x09, 0x48, 0x4D, 0x54, 0x00, 0x42, 0x55, 0x52, 0x54, -0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Choibalsan */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x86, 0xD3, 0xE7, 0x28, -0x0F, 0x0B, 0xDC, 0x90, 0x18, 0xE9, 0xC8, 0x80, 0x19, 0xDA, 0xEE, 0xE0, 0x1A, 0xCC, 0x3F, 0x70, -0x1B, 0xBC, 0x22, 0x60, 0x1C, 0xAC, 0x21, 0x70, 0x1D, 0x9C, 0x04, 0x60, 0x1E, 0x8C, 0x03, 0x70, -0x1F, 0x7B, 0xE6, 0x60, 0x20, 0x6B, 0xE5, 0x70, 0x21, 0x5B, 0xC8, 0x60, 0x22, 0x4B, 0xC7, 0x70, -0x23, 0x3B, 0xAA, 0x60, 0x24, 0x2B, 0xA9, 0x70, 0x25, 0x1B, 0x8C, 0x60, 0x26, 0x0B, 0x8B, 0x70, -0x27, 0x04, 0xA8, 0xE0, 0x27, 0xF4, 0xA7, 0xF0, 0x28, 0xE4, 0x8A, 0xE0, 0x29, 0xD4, 0x89, 0xF0, -0x2A, 0xC4, 0x6C, 0xE0, 0x2B, 0xB4, 0x6B, 0xF0, 0x2C, 0xA4, 0x4E, 0xE0, 0x2D, 0x94, 0x4D, 0xF0, -0x2E, 0x84, 0x30, 0xE0, 0x2F, 0x74, 0x2F, 0xF0, 0x30, 0x64, 0x12, 0xE0, 0x31, 0x5D, 0x4C, 0x70, -0x32, 0x4D, 0x2F, 0x60, 0x33, 0x3D, 0x2E, 0x70, 0x34, 0x2D, 0x11, 0x60, 0x35, 0x1D, 0x10, 0x70, -0x36, 0x0C, 0xF3, 0x60, 0x3A, 0xE9, 0xA5, 0x90, 0x3B, 0xB4, 0x9E, 0x80, 0x3C, 0xA4, 0x9D, 0x90, -0x3D, 0x94, 0x80, 0x80, 0x3E, 0x84, 0x7F, 0x90, 0x3F, 0x74, 0x62, 0x80, 0x40, 0x64, 0x61, 0x90, -0x41, 0x54, 0x44, 0x80, 0x42, 0x44, 0x43, 0x90, 0x43, 0x34, 0x26, 0x80, 0x44, 0x24, 0x25, 0x90, -0x45, 0x1D, 0x43, 0x00, 0x46, 0x0D, 0x42, 0x10, 0x46, 0xFD, 0x25, 0x00, 0x47, 0xED, 0x24, 0x10, -0x48, 0xDD, 0x07, 0x00, 0x49, 0xCD, 0x06, 0x10, 0x4A, 0xBC, 0xE9, 0x00, 0x4B, 0xAC, 0xE8, 0x10, -0x4C, 0x9C, 0xCB, 0x00, 0x4D, 0x8C, 0xCA, 0x10, 0x4E, 0x7C, 0xAD, 0x00, 0x4F, 0x75, 0xE6, 0x90, -0x50, 0x65, 0xC9, 0x80, 0x51, 0x55, 0xC8, 0x90, 0x52, 0x45, 0xAB, 0x80, 0x53, 0x35, 0xAA, 0x90, -0x54, 0x25, 0x8D, 0x80, 0x55, 0x15, 0x8C, 0x90, 0x56, 0x05, 0x6F, 0x80, 0x56, 0xF5, 0x6E, 0x90, -0x57, 0xE5, 0x51, 0x80, 0x58, 0xD5, 0x50, 0x90, 0x59, 0xCE, 0x6E, 0x00, 0x5A, 0xBE, 0x6D, 0x10, -0x5B, 0xAE, 0x50, 0x00, 0x5C, 0x9E, 0x4F, 0x10, 0x5D, 0x8E, 0x32, 0x00, 0x5E, 0x7E, 0x31, 0x10, -0x5F, 0x6E, 0x14, 0x00, 0x60, 0x5E, 0x13, 0x10, 0x61, 0x4D, 0xF6, 0x00, 0x62, 0x3D, 0xF5, 0x10, -0x63, 0x2D, 0xD8, 0x00, 0x64, 0x1D, 0xD7, 0x10, 0x65, 0x16, 0xF4, 0x80, 0x66, 0x06, 0xF3, 0x90, -0x66, 0xF6, 0xD6, 0x80, 0x67, 0xE6, 0xD5, 0x90, 0x68, 0xD6, 0xB8, 0x80, 0x69, 0xC6, 0xB7, 0x90, -0x6A, 0xB6, 0x9A, 0x80, 0x6B, 0xA6, 0x99, 0x90, 0x6C, 0x96, 0x7C, 0x80, 0x6D, 0x86, 0x7B, 0x90, -0x6E, 0x7F, 0x99, 0x00, 0x6F, 0x6F, 0x98, 0x10, 0x70, 0x5F, 0x7B, 0x00, 0x71, 0x4F, 0x7A, 0x10, -0x72, 0x3F, 0x5D, 0x00, 0x73, 0x2F, 0x5C, 0x10, 0x74, 0x1F, 0x3F, 0x00, 0x75, 0x0F, 0x3E, 0x10, -0x75, 0xFF, 0x21, 0x00, 0x76, 0xEF, 0x20, 0x10, 0x77, 0xDF, 0x03, 0x00, 0x78, 0xCF, 0x02, 0x10, -0x79, 0xC8, 0x1F, 0x80, 0x7A, 0xB8, 0x1E, 0x90, 0x7B, 0xA8, 0x01, 0x80, 0x7C, 0x98, 0x00, 0x90, -0x7D, 0x87, 0xE3, 0x80, 0x7E, 0x77, 0xE2, 0x90, 0x7F, 0x67, 0xC5, 0x80, 0x01, 0x02, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x00, 0x00, 0x6B, 0x58, 0x00, 0x00, 0x00, 0x00, -0x62, 0x70, 0x00, 0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x09, -0x00, 0x00, 0x8C, 0xA0, 0x01, 0x0E, 0x4C, 0x4D, 0x54, 0x00, 0x55, 0x4C, 0x41, 0x54, 0x00, 0x43, -0x48, 0x4F, 0x54, 0x00, 0x43, 0x48, 0x4F, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, - -/* Asia/Chongqing */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xB0, 0xFE, 0xA8, 0x94, -0x13, 0x6D, 0xC9, 0x10, 0x1E, 0xBA, 0x36, 0x00, 0x1F, 0x69, 0x7F, 0x70, 0x20, 0x7E, 0x68, 0x80, -0x21, 0x49, 0x61, 0x70, 0x22, 0x5E, 0x4A, 0x80, 0x23, 0x29, 0x43, 0x70, 0x24, 0x47, 0x67, 0x00, -0x25, 0x12, 0x5F, 0xF0, 0x26, 0x27, 0x49, 0x00, 0x26, 0xF2, 0x41, 0xF0, 0x28, 0x07, 0x2B, 0x00, -0x28, 0xD2, 0x23, 0xF0, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x00, 0x00, 0x63, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x00, 0x00, -0x7E, 0x90, 0x01, 0x09, 0x00, 0x00, 0x70, 0x80, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x4C, 0x4F, -0x4E, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, - -/* Asia/Chungking */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xB0, 0xFE, 0xA8, 0x94, -0x13, 0x6D, 0xC9, 0x10, 0x1E, 0xBA, 0x36, 0x00, 0x1F, 0x69, 0x7F, 0x70, 0x20, 0x7E, 0x68, 0x80, -0x21, 0x49, 0x61, 0x70, 0x22, 0x5E, 0x4A, 0x80, 0x23, 0x29, 0x43, 0x70, 0x24, 0x47, 0x67, 0x00, -0x25, 0x12, 0x5F, 0xF0, 0x26, 0x27, 0x49, 0x00, 0x26, 0xF2, 0x41, 0xF0, 0x28, 0x07, 0x2B, 0x00, -0x28, 0xD2, 0x23, 0xF0, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x00, 0x00, 0x63, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x00, 0x00, -0x7E, 0x90, 0x01, 0x09, 0x00, 0x00, 0x70, 0x80, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x4C, 0x4F, -0x4E, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, - -/* Asia/Colombo */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0x87, 0x9D, 0xBD, 0x1C, -0xCB, 0x5A, 0x1C, 0x28, 0xCC, 0x95, 0x2B, 0xA0, 0xD2, 0x75, 0x80, 0x38, 0x31, 0xA6, 0x00, 0x28, -0x32, 0x71, 0x00, 0x20, 0x44, 0x3F, 0xEA, 0x28, 0x01, 0x02, 0x03, 0x01, 0x04, 0x05, 0x01, 0x00, -0x00, 0x4A, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x04, 0x00, 0x00, 0x54, 0x60, 0x01, -0x08, 0x00, 0x00, 0x5B, 0x68, 0x01, 0x04, 0x00, 0x00, 0x5B, 0x68, 0x00, 0x0D, 0x00, 0x00, 0x54, -0x60, 0x00, 0x0D, 0x4D, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x49, 0x48, 0x53, 0x54, 0x00, -0x4C, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* Asia/Dacca */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x16, 0xCA, 0xDB, 0x86, 0xB0, -0xCC, 0x05, 0x71, 0x18, 0xCC, 0x95, 0x32, 0xA8, 0xDD, 0xA8, 0xD2, 0x98, 0x02, 0x4F, 0x9D, 0x20, -0x01, 0x02, 0x01, 0x03, 0x04, 0x00, 0x00, 0x52, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x68, 0x00, -0x04, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x0D, 0x00, 0x00, 0x54, -0x60, 0x00, 0x12, 0x48, 0x4D, 0x54, 0x00, 0x42, 0x55, 0x52, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, -0x44, 0x41, 0x43, 0x54, 0x00, 0x42, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, - -/* Asia/Damascus */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0xA1, 0xF2, 0xAB, 0x78, -0xA2, 0x81, 0x2F, 0x80, 0xA3, 0x5E, 0x9D, 0x70, 0xA4, 0x61, 0x11, 0x80, 0xA5, 0x3E, 0x7F, 0x70, -0xA6, 0x40, 0xF3, 0x80, 0xA7, 0x1E, 0x61, 0x70, 0xA8, 0x20, 0xD5, 0x80, 0xA9, 0x07, 0x7D, 0xF0, -0xF1, 0x8F, 0x52, 0x00, 0xF2, 0x5B, 0x9C, 0x70, 0xF3, 0x73, 0x28, 0x80, 0xF4, 0x3B, 0x7E, 0x70, -0xF5, 0x55, 0xAD, 0x80, 0xF6, 0x1F, 0x54, 0xF0, 0xF7, 0x36, 0xE1, 0x00, 0xF7, 0xFF, 0x36, 0xF0, -0xF9, 0x0E, 0xDA, 0x00, 0xF9, 0xE1, 0xBB, 0xF0, 0xFA, 0xF9, 0x48, 0x00, 0xFB, 0xC2, 0xEF, 0x70, -0xFC, 0xDB, 0xCD, 0x00, 0xFD, 0xA5, 0x74, 0x70, 0xFE, 0xBD, 0x00, 0x80, 0xFF, 0x86, 0xA7, 0xF0, -0x00, 0x9E, 0x34, 0x00, 0x01, 0x67, 0xDB, 0x70, 0x02, 0x7F, 0x67, 0x80, 0x03, 0x49, 0x0E, 0xF0, -0x04, 0x61, 0xEC, 0x80, 0x05, 0x2B, 0x93, 0xF0, 0x06, 0x43, 0x20, 0x00, 0x07, 0x0C, 0xC7, 0x70, -0x08, 0x24, 0x53, 0x80, 0x08, 0xED, 0xFA, 0xF0, 0x0A, 0x05, 0x87, 0x00, 0x0A, 0xCF, 0x2E, 0x70, -0x0B, 0xE8, 0x0C, 0x00, 0x0C, 0xB1, 0xB3, 0x70, 0x0D, 0xC9, 0x3F, 0x80, 0x0E, 0x6B, 0x59, 0xF0, -0x0F, 0xAA, 0x73, 0x00, 0x10, 0x4C, 0x8D, 0x70, 0x18, 0xF4, 0xC5, 0x00, 0x19, 0xDB, 0x6D, 0x70, -0x1A, 0xD7, 0x4A, 0x00, 0x1B, 0xBD, 0xF2, 0x70, 0x1E, 0x55, 0x23, 0x00, 0x1F, 0x8A, 0xE5, 0x70, -0x20, 0x47, 0x7A, 0x00, 0x21, 0x89, 0x19, 0xF0, 0x22, 0x3C, 0x74, 0x00, 0x23, 0x6B, 0x9E, 0xF0, -0x24, 0x32, 0xBF, 0x80, 0x25, 0x25, 0x45, 0x70, 0x26, 0x15, 0x44, 0x80, 0x27, 0x05, 0x27, 0x70, -0x27, 0xF6, 0x5B, 0xE0, 0x28, 0xE7, 0x90, 0x50, 0x29, 0xE2, 0x1B, 0x60, 0x2A, 0xCA, 0x15, 0x50, -0x2B, 0xB2, 0x2B, 0x60, 0x2C, 0xA3, 0x5F, 0xD0, 0x2D, 0x9B, 0x47, 0xE0, 0x2E, 0x8C, 0x7C, 0x50, -0x2F, 0x7C, 0x7B, 0x60, 0x30, 0x6D, 0xAF, 0xD0, 0x31, 0x5F, 0x00, 0x60, 0x32, 0x50, 0x34, 0xD0, -0x33, 0x3E, 0xE2, 0x60, 0x34, 0x31, 0x68, 0x50, 0x35, 0x1E, 0xC4, 0x60, 0x36, 0x12, 0x9B, 0xD0, -0x37, 0x02, 0x9A, 0xE0, 0x37, 0xF3, 0xCF, 0x50, 0x38, 0xE5, 0x1F, 0xE0, 0x39, 0xD6, 0x54, 0x50, -0x3A, 0xC6, 0x53, 0x60, 0x3B, 0xB7, 0x87, 0xD0, 0x3C, 0xA7, 0x86, 0xE0, 0x3D, 0x98, 0xBB, 0x50, -0x3E, 0x88, 0xBA, 0x60, 0x3F, 0x79, 0xEE, 0xD0, 0x40, 0x6B, 0x3F, 0x60, 0x41, 0x5C, 0x73, 0xD0, -0x42, 0x4C, 0x72, 0xE0, 0x43, 0x3D, 0xA7, 0x50, 0x44, 0x2D, 0xA6, 0x60, 0x45, 0x12, 0xFD, 0x50, -0x46, 0x0E, 0xD9, 0xE0, 0x47, 0x00, 0x0E, 0x50, 0x47, 0xF1, 0x5E, 0xE0, 0x48, 0xE2, 0x93, 0x50, -0x49, 0xD2, 0x92, 0x60, 0x4A, 0xC3, 0xC6, 0xD0, 0x4B, 0xB3, 0xC5, 0xE0, 0x4C, 0xA4, 0xFA, 0x50, -0x4D, 0x94, 0xF9, 0x60, 0x4E, 0x86, 0x2D, 0xD0, 0x4F, 0x77, 0x7E, 0x60, 0x50, 0x68, 0xB2, 0xD0, -0x51, 0x58, 0xB1, 0xE0, 0x52, 0x49, 0xE6, 0x50, 0x53, 0x39, 0xE5, 0x60, 0x54, 0x2B, 0x19, 0xD0, -0x55, 0x1B, 0x18, 0xE0, 0x56, 0x0C, 0x4D, 0x50, 0x56, 0xFD, 0x9D, 0xE0, 0x57, 0xEE, 0xD2, 0x50, -0x58, 0xDE, 0xD1, 0x60, 0x59, 0xD0, 0x05, 0xD0, 0x5A, 0xC0, 0x04, 0xE0, 0x5B, 0xB1, 0x39, 0x50, -0x5C, 0xA1, 0x38, 0x60, 0x5D, 0x92, 0x6C, 0xD0, 0x5E, 0x83, 0xBD, 0x60, 0x5F, 0x74, 0xF1, 0xD0, -0x60, 0x64, 0xF0, 0xE0, 0x61, 0x56, 0x25, 0x50, 0x62, 0x46, 0x24, 0x60, 0x63, 0x37, 0x58, 0xD0, -0x64, 0x27, 0x57, 0xE0, 0x65, 0x18, 0x8C, 0x50, 0x66, 0x09, 0xDC, 0xE0, 0x66, 0xFB, 0x11, 0x50, -0x67, 0xEB, 0x10, 0x60, 0x68, 0xDC, 0x44, 0xD0, 0x69, 0xCC, 0x43, 0xE0, 0x6A, 0xBD, 0x78, 0x50, -0x6B, 0xAD, 0x77, 0x60, 0x6C, 0x9E, 0xAB, 0xD0, 0x6D, 0x8F, 0xFC, 0x60, 0x6E, 0x81, 0x30, 0xD0, -0x6F, 0x71, 0x2F, 0xE0, 0x70, 0x62, 0x64, 0x50, 0x71, 0x52, 0x63, 0x60, 0x72, 0x43, 0x97, 0xD0, -0x73, 0x33, 0x96, 0xE0, 0x74, 0x24, 0xCB, 0x50, 0x75, 0x16, 0x1B, 0xE0, 0x76, 0x07, 0x50, 0x50, -0x76, 0xF7, 0x4F, 0x60, 0x77, 0xE8, 0x83, 0xD0, 0x78, 0xD8, 0x82, 0xE0, 0x79, 0xC9, 0xB7, 0x50, -0x7A, 0xB9, 0xB6, 0x60, 0x7B, 0xAA, 0xEA, 0xD0, 0x7C, 0x9C, 0x3B, 0x60, 0x7D, 0x8D, 0x6F, 0xD0, -0x7E, 0x7D, 0x6E, 0xE0, 0x7F, 0x6E, 0xA3, 0x50, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, -0x00, 0x22, 0x08, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, -0x09, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, - -/* Asia/Dhaka */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x16, 0xCA, 0xDB, 0x86, 0xB0, -0xCC, 0x05, 0x71, 0x18, 0xCC, 0x95, 0x32, 0xA8, 0xDD, 0xA8, 0xD2, 0x98, 0x02, 0x4F, 0x9D, 0x20, -0x01, 0x02, 0x01, 0x03, 0x04, 0x00, 0x00, 0x52, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x68, 0x00, -0x04, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x0D, 0x00, 0x00, 0x54, -0x60, 0x00, 0x12, 0x48, 0x4D, 0x54, 0x00, 0x42, 0x55, 0x52, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, -0x44, 0x41, 0x43, 0x54, 0x00, 0x42, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, - -/* Asia/Dili */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x10, 0x92, 0xE6, 0x18, 0xC4, -0xCB, 0x99, 0x32, 0xF0, 0xD2, 0x11, 0x0E, 0xF0, 0x0B, 0xEA, 0x30, 0x70, 0x39, 0xC3, 0x99, 0x00, -0x01, 0x02, 0x03, 0x04, 0x03, 0x00, 0x00, 0x75, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, -0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x08, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x04, 0x00, 0x00, 0x70, -0x80, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x54, 0x4C, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x43, -0x49, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Dubai */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xA1, 0xF2, 0x99, 0xA8, -0x01, 0x00, 0x00, 0x33, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x47, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Dushanbe */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x13, 0xAA, 0x19, 0x83, 0x80, -0xB5, 0xA3, 0xEF, 0x30, 0x15, 0x27, 0x7D, 0xA0, 0x16, 0x18, 0xB2, 0x10, 0x17, 0x08, 0xB1, 0x20, -0x17, 0xF9, 0xE5, 0x90, 0x18, 0xE9, 0xE4, 0xA0, 0x19, 0xDB, 0x19, 0x10, 0x1A, 0xCC, 0x69, 0xA0, -0x1B, 0xBC, 0x76, 0xC0, 0x1C, 0xAC, 0x67, 0xC0, 0x1D, 0x9C, 0x58, 0xC0, 0x1E, 0x8C, 0x49, 0xC0, -0x1F, 0x7C, 0x3A, 0xC0, 0x20, 0x6C, 0x2B, 0xC0, 0x21, 0x5C, 0x1C, 0xC0, 0x22, 0x4C, 0x0D, 0xC0, -0x23, 0x3B, 0xFE, 0xC0, 0x24, 0x2B, 0xEF, 0xC0, 0x25, 0x1B, 0xE0, 0xC0, 0x26, 0x0B, 0xD1, 0xC0, -0x27, 0x04, 0xFD, 0x40, 0x27, 0xF4, 0xEE, 0x40, 0x28, 0xCA, 0x8F, 0x50, 0x01, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x06, 0x07, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, -0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, 0x54, 0x60, -0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x01, 0x09, 0x00, 0x00, -0x46, 0x50, 0x00, 0x0F, 0x4C, 0x4D, 0x54, 0x00, 0x44, 0x55, 0x53, 0x54, 0x00, 0x44, 0x55, 0x53, -0x53, 0x54, 0x00, 0x54, 0x4A, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Gaza */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0xC8, 0x59, 0xB2, 0xE0, -0xCC, 0xE5, 0xC1, 0x50, 0xCD, 0xAC, 0xFE, 0x00, 0xCE, 0xC6, 0xF4, 0xD0, 0xCF, 0x8F, 0x66, 0xE0, -0xD0, 0xA9, 0x79, 0xD0, 0xD1, 0x84, 0x60, 0xE0, 0xD2, 0x8A, 0xC9, 0x70, 0xD3, 0x65, 0xB0, 0x80, -0xD4, 0x6B, 0xE0, 0xD0, 0xE8, 0x36, 0x63, 0x60, 0xE8, 0xF4, 0x2D, 0x50, 0xEA, 0x0B, 0xB9, 0x60, -0xEA, 0xD5, 0x60, 0xD0, 0xEB, 0xEC, 0xFA, 0xF0, 0xEC, 0xB5, 0x6D, 0x00, 0xED, 0xCF, 0x7F, 0xF0, -0xEE, 0x97, 0xF2, 0x00, 0xEF, 0xB0, 0xB3, 0x70, 0xF0, 0x79, 0x25, 0x80, 0xF1, 0x91, 0xE6, 0xF0, -0xF2, 0x5A, 0x59, 0x00, 0xF3, 0x73, 0x1A, 0x70, 0xF4, 0x3B, 0x8C, 0x80, 0xF5, 0x55, 0x9F, 0x70, -0xF6, 0x1E, 0x11, 0x80, 0xF7, 0x36, 0xD2, 0xF0, 0xF7, 0xFF, 0x45, 0x00, 0xF9, 0x18, 0x06, 0x70, -0xF9, 0xE1, 0xCA, 0x00, 0xFA, 0xF9, 0x39, 0xF0, 0xFB, 0x27, 0x42, 0x50, 0x08, 0x7C, 0x8B, 0xE0, -0x08, 0xFD, 0xB0, 0xD0, 0x09, 0xF6, 0xEA, 0x60, 0x0A, 0xA6, 0x33, 0xD0, 0x1C, 0xBE, 0xF8, 0xE0, -0x1D, 0x89, 0xF1, 0xD0, 0x1E, 0xCC, 0xFF, 0x60, 0x1F, 0x60, 0x99, 0x50, 0x20, 0x82, 0xB1, 0x60, -0x21, 0x49, 0xB5, 0xD0, 0x22, 0x5D, 0x4D, 0x60, 0x23, 0x1F, 0x0B, 0xD0, 0x24, 0x5A, 0x30, 0x60, -0x25, 0x00, 0x3F, 0x50, 0x26, 0x0B, 0xED, 0xE0, 0x26, 0xD6, 0xE6, 0xD0, 0x27, 0xEB, 0xCF, 0xE0, -0x28, 0xC0, 0x03, 0x50, 0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xA9, 0x1F, 0xD0, 0x2B, 0xBB, 0x65, 0xE0, -0x2C, 0x89, 0x01, 0xD0, 0x2D, 0x9B, 0x47, 0xE0, 0x2E, 0x5F, 0xA9, 0x50, 0x2F, 0x7B, 0x29, 0xE0, -0x30, 0x48, 0xC5, 0xD0, 0x30, 0xE7, 0x07, 0xE0, 0x31, 0x64, 0x46, 0x60, 0x32, 0x41, 0xC2, 0x60, -0x33, 0x44, 0x28, 0x60, 0x34, 0x21, 0xA4, 0x60, 0x35, 0x24, 0x0A, 0x60, 0x36, 0x01, 0x86, 0x60, -0x36, 0x8B, 0xF3, 0xE0, 0x37, 0x16, 0x61, 0x60, 0x38, 0x06, 0x44, 0x50, 0x38, 0xFF, 0x7D, 0xE0, -0x39, 0xEF, 0x60, 0xD0, 0x3A, 0xDF, 0x5F, 0xE0, 0x3B, 0xCF, 0x42, 0xD0, 0x3C, 0xBF, 0x41, 0xE0, -0x3D, 0xAF, 0x24, 0xD0, 0x3E, 0x9F, 0x23, 0xE0, 0x3F, 0x8F, 0x06, 0xD0, 0x40, 0x7F, 0x05, 0xE0, -0x41, 0x5C, 0x81, 0xE0, 0x42, 0x5E, 0xE7, 0xE0, 0x43, 0x41, 0xB7, 0xF0, 0x44, 0x2D, 0xA6, 0x60, -0x45, 0x12, 0xFD, 0x50, 0x46, 0x0E, 0xD9, 0xE0, 0x47, 0x17, 0xC9, 0x50, 0x47, 0xF1, 0x5E, 0xE0, -0x48, 0xF7, 0xAB, 0x50, 0x49, 0xD2, 0x92, 0x60, 0x4A, 0xD7, 0x8D, 0x50, 0x4B, 0xB3, 0xC5, 0xE0, -0x4C, 0xB7, 0x6F, 0x50, 0x4D, 0x94, 0xF9, 0x60, 0x4E, 0xA0, 0x8B, 0xD0, 0x4F, 0x77, 0x7E, 0x60, -0x50, 0x80, 0x6D, 0xD0, 0x51, 0x58, 0xB1, 0xE0, 0x52, 0x60, 0x4F, 0xD0, 0x53, 0x39, 0xE5, 0x60, -0x54, 0x40, 0x31, 0xD0, 0x55, 0x1B, 0x18, 0xE0, 0x56, 0x20, 0x13, 0xD0, 0x56, 0xFD, 0x9D, 0xE0, -0x58, 0x09, 0x30, 0x50, 0x58, 0xDE, 0xD1, 0x60, 0x59, 0xE9, 0x12, 0x50, 0x5A, 0xC0, 0x04, 0xE0, -0x5B, 0xC8, 0xF4, 0x50, 0x5C, 0xA1, 0x38, 0x60, 0x5D, 0xA8, 0xD6, 0x50, 0x5E, 0x83, 0xBD, 0x60, -0x5F, 0x88, 0xB8, 0x50, 0x60, 0x64, 0xF0, 0xE0, 0x61, 0x68, 0x9A, 0x50, 0x62, 0x46, 0x24, 0x60, -0x63, 0x51, 0xB6, 0xD0, 0x64, 0x27, 0x57, 0xE0, 0x65, 0x31, 0x98, 0xD0, 0x66, 0x09, 0xDC, 0xE0, -0x67, 0x11, 0x7A, 0xD0, 0x67, 0xEB, 0x10, 0x60, 0x68, 0xF1, 0x5C, 0xD0, 0x69, 0xCC, 0x43, 0xE0, -0x6A, 0xD1, 0x3E, 0xD0, 0x6B, 0xAD, 0x77, 0x60, 0x6C, 0xB1, 0x20, 0xD0, 0x6D, 0x8F, 0xFC, 0x60, -0x6E, 0x9A, 0x3D, 0x50, 0x6F, 0x71, 0x2F, 0xE0, 0x70, 0x7A, 0x1F, 0x50, 0x71, 0x52, 0x63, 0x60, -0x72, 0x5A, 0x01, 0x50, 0x73, 0x33, 0x96, 0xE0, 0x74, 0x39, 0xE3, 0x50, 0x75, 0x16, 0x1B, 0xE0, -0x76, 0x19, 0xC5, 0x50, 0x76, 0xF7, 0x4F, 0x60, 0x78, 0x02, 0xE1, 0xD0, 0x78, 0xD8, 0x82, 0xE0, -0x79, 0xE2, 0xC3, 0xD0, 0x7A, 0xB9, 0xB6, 0x60, 0x7B, 0xC2, 0xA5, 0xD0, 0x7C, 0x9C, 0x3B, 0x60, -0x7D, 0xA2, 0x87, 0xD0, 0x7E, 0x7D, 0x6E, 0xE0, 0x7F, 0x82, 0x69, 0xD0, 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, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x01, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 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, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, -0x2A, 0x30, 0x01, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, -0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Harbin */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x11, 0xB0, 0xFE, 0x95, 0xBC, -0xB8, 0xD3, 0xCE, 0x78, 0xC7, 0x90, 0xFA, 0x80, 0xF9, 0x17, 0x95, 0xF0, 0x13, 0x6D, 0xB3, 0xF8, -0x1E, 0xBA, 0x36, 0x00, 0x1F, 0x69, 0x7F, 0x70, 0x20, 0x7E, 0x68, 0x80, 0x21, 0x49, 0x61, 0x70, -0x22, 0x5E, 0x4A, 0x80, 0x23, 0x29, 0x43, 0x70, 0x24, 0x47, 0x67, 0x00, 0x25, 0x12, 0x5F, 0xF0, -0x26, 0x27, 0x49, 0x00, 0x26, 0xF2, 0x41, 0xF0, 0x28, 0x07, 0x2B, 0x00, 0x28, 0xD2, 0x23, 0xF0, -0x01, 0x02, 0x03, 0x01, 0x02, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, 0x04, -0x02, 0x00, 0x00, 0x76, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x77, 0x88, 0x00, 0x04, 0x00, 0x00, 0x70, -0x80, 0x00, 0x09, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x0D, 0x4C, -0x4D, 0x54, 0x00, 0x43, 0x48, 0x41, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Hong_Kong */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x85, 0x69, 0x5A, 0xFC, -0xD3, 0x6A, 0xB7, 0x38, 0xD4, 0x93, 0x4A, 0xA8, 0xD5, 0x42, 0xB0, 0x38, 0xD6, 0x9A, 0xB9, 0xA8, -0xD7, 0x3E, 0x41, 0xB8, 0xD8, 0x2E, 0x24, 0xA8, 0xD8, 0xF9, 0x39, 0xB8, 0xDA, 0x0E, 0x06, 0xA8, -0xDA, 0xD9, 0x1B, 0xB8, 0xDB, 0xED, 0xE8, 0xA8, 0xDC, 0xB8, 0xFD, 0xB8, 0xDD, 0xCD, 0xCA, 0xA8, -0xDE, 0xA2, 0x1A, 0x38, 0xDF, 0xAD, 0xAC, 0xA8, 0xE0, 0x81, 0xFC, 0x38, 0xE1, 0x96, 0xC9, 0x28, -0xE2, 0x4F, 0x69, 0x38, 0xE3, 0x76, 0xAB, 0x28, 0xE4, 0x2F, 0x4B, 0x38, 0xE5, 0x5F, 0xC7, 0xA8, -0xE6, 0x0F, 0x2D, 0x38, 0xE7, 0x3F, 0xA9, 0xA8, 0xE7, 0xF8, 0x49, 0xB8, 0xE9, 0x1F, 0x8B, 0xA8, -0xE9, 0xD8, 0x2B, 0xB8, 0xEA, 0xFF, 0x6D, 0xA8, 0xEB, 0xB8, 0x0D, 0xB8, 0xEC, 0xDF, 0x4F, 0xA8, -0xED, 0x97, 0xEF, 0xB8, 0xEE, 0xC8, 0x6C, 0x28, 0xEF, 0x77, 0xD1, 0xB8, 0xF0, 0xA8, 0x4E, 0x28, -0xF1, 0x57, 0xB3, 0xB8, 0xF2, 0x88, 0x30, 0x28, 0xF3, 0x40, 0xD0, 0x38, 0xF4, 0x68, 0x12, 0x28, -0xF5, 0x20, 0xB2, 0x38, 0xF6, 0x47, 0xF4, 0x28, 0xF7, 0x25, 0x7E, 0x38, 0xF8, 0x15, 0x61, 0x28, -0xF9, 0x05, 0x60, 0x38, 0xF9, 0xF5, 0x43, 0x28, 0xFA, 0xE5, 0x42, 0x38, 0xFB, 0xDE, 0x5F, 0xA8, -0xFC, 0xCE, 0x5E, 0xB8, 0xFD, 0xBE, 0x41, 0xA8, 0xFE, 0xAE, 0x40, 0xB8, 0xFF, 0x9E, 0x23, 0xA8, -0x00, 0x8E, 0x22, 0xB8, 0x01, 0x7E, 0x05, 0xA8, 0x02, 0x6E, 0x04, 0xB8, 0x03, 0x5D, 0xE7, 0xA8, -0x04, 0x4D, 0xE6, 0xB8, 0x05, 0x47, 0x04, 0x28, 0x06, 0x37, 0x03, 0x38, 0x07, 0x26, 0xE6, 0x28, -0x08, 0x16, 0xE5, 0x38, 0x09, 0x06, 0xC8, 0x28, 0x09, 0xF6, 0xC7, 0x38, 0x0A, 0xE6, 0xAA, 0x28, -0x0B, 0xD6, 0xA9, 0x38, 0x0C, 0xC6, 0x8C, 0x28, 0x0D, 0xB6, 0x8B, 0x38, 0x0E, 0xA6, 0x6E, 0x28, -0x11, 0x9B, 0x39, 0x38, 0x12, 0x6F, 0x6C, 0xA8, 0x13, 0x7B, 0x1B, 0x38, 0x14, 0x4F, 0x4E, 0xA8, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x6B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, -0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x48, 0x4B, 0x53, 0x54, 0x00, -0x48, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Hovd */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x86, 0xD3, 0xFC, 0x94, -0x0F, 0x0B, 0xEA, 0xA0, 0x18, 0xE9, 0xD6, 0x90, 0x19, 0xDB, 0x0B, 0x00, 0x1A, 0xCC, 0x5B, 0x90, -0x1B, 0xBC, 0x3E, 0x80, 0x1C, 0xAC, 0x3D, 0x90, 0x1D, 0x9C, 0x20, 0x80, 0x1E, 0x8C, 0x1F, 0x90, -0x1F, 0x7C, 0x02, 0x80, 0x20, 0x6C, 0x01, 0x90, 0x21, 0x5B, 0xE4, 0x80, 0x22, 0x4B, 0xE3, 0x90, -0x23, 0x3B, 0xC6, 0x80, 0x24, 0x2B, 0xC5, 0x90, 0x25, 0x1B, 0xA8, 0x80, 0x26, 0x0B, 0xA7, 0x90, -0x27, 0x04, 0xC5, 0x00, 0x27, 0xF4, 0xC4, 0x10, 0x28, 0xE4, 0xA7, 0x00, 0x29, 0xD4, 0xA6, 0x10, -0x2A, 0xC4, 0x89, 0x00, 0x2B, 0xB4, 0x88, 0x10, 0x2C, 0xA4, 0x6B, 0x00, 0x2D, 0x94, 0x6A, 0x10, -0x2E, 0x84, 0x4D, 0x00, 0x2F, 0x74, 0x4C, 0x10, 0x30, 0x64, 0x2F, 0x00, 0x31, 0x5D, 0x68, 0x90, -0x32, 0x4D, 0x4B, 0x80, 0x33, 0x3D, 0x4A, 0x90, 0x34, 0x2D, 0x2D, 0x80, 0x35, 0x1D, 0x2C, 0x90, -0x36, 0x0D, 0x0F, 0x80, 0x3A, 0xE9, 0xC1, 0xB0, 0x3B, 0xB4, 0xBA, 0xA0, 0x3C, 0xA4, 0xB9, 0xB0, -0x3D, 0x94, 0x9C, 0xA0, 0x3E, 0x84, 0x9B, 0xB0, 0x3F, 0x74, 0x7E, 0xA0, 0x40, 0x64, 0x7D, 0xB0, -0x41, 0x54, 0x60, 0xA0, 0x42, 0x44, 0x5F, 0xB0, 0x43, 0x34, 0x42, 0xA0, 0x44, 0x24, 0x41, 0xB0, -0x45, 0x1D, 0x5F, 0x20, 0x46, 0x0D, 0x5E, 0x30, 0x46, 0xFD, 0x41, 0x20, 0x47, 0xED, 0x40, 0x30, -0x48, 0xDD, 0x23, 0x20, 0x49, 0xCD, 0x22, 0x30, 0x4A, 0xBD, 0x05, 0x20, 0x4B, 0xAD, 0x04, 0x30, -0x4C, 0x9C, 0xE7, 0x20, 0x4D, 0x8C, 0xE6, 0x30, 0x4E, 0x7C, 0xC9, 0x20, 0x4F, 0x76, 0x02, 0xB0, -0x50, 0x65, 0xE5, 0xA0, 0x51, 0x55, 0xE4, 0xB0, 0x52, 0x45, 0xC7, 0xA0, 0x53, 0x35, 0xC6, 0xB0, -0x54, 0x25, 0xA9, 0xA0, 0x55, 0x15, 0xA8, 0xB0, 0x56, 0x05, 0x8B, 0xA0, 0x56, 0xF5, 0x8A, 0xB0, -0x57, 0xE5, 0x6D, 0xA0, 0x58, 0xD5, 0x6C, 0xB0, 0x59, 0xCE, 0x8A, 0x20, 0x5A, 0xBE, 0x89, 0x30, -0x5B, 0xAE, 0x6C, 0x20, 0x5C, 0x9E, 0x6B, 0x30, 0x5D, 0x8E, 0x4E, 0x20, 0x5E, 0x7E, 0x4D, 0x30, -0x5F, 0x6E, 0x30, 0x20, 0x60, 0x5E, 0x2F, 0x30, 0x61, 0x4E, 0x12, 0x20, 0x62, 0x3E, 0x11, 0x30, -0x63, 0x2D, 0xF4, 0x20, 0x64, 0x1D, 0xF3, 0x30, 0x65, 0x17, 0x10, 0xA0, 0x66, 0x07, 0x0F, 0xB0, -0x66, 0xF6, 0xF2, 0xA0, 0x67, 0xE6, 0xF1, 0xB0, 0x68, 0xD6, 0xD4, 0xA0, 0x69, 0xC6, 0xD3, 0xB0, -0x6A, 0xB6, 0xB6, 0xA0, 0x6B, 0xA6, 0xB5, 0xB0, 0x6C, 0x96, 0x98, 0xA0, 0x6D, 0x86, 0x97, 0xB0, -0x6E, 0x7F, 0xB5, 0x20, 0x6F, 0x6F, 0xB4, 0x30, 0x70, 0x5F, 0x97, 0x20, 0x71, 0x4F, 0x96, 0x30, -0x72, 0x3F, 0x79, 0x20, 0x73, 0x2F, 0x78, 0x30, 0x74, 0x1F, 0x5B, 0x20, 0x75, 0x0F, 0x5A, 0x30, -0x75, 0xFF, 0x3D, 0x20, 0x76, 0xEF, 0x3C, 0x30, 0x77, 0xDF, 0x1F, 0x20, 0x78, 0xCF, 0x1E, 0x30, -0x79, 0xC8, 0x3B, 0xA0, 0x7A, 0xB8, 0x3A, 0xB0, 0x7B, 0xA8, 0x1D, 0xA0, 0x7C, 0x98, 0x1C, 0xB0, -0x7D, 0x87, 0xFF, 0xA0, 0x7E, 0x77, 0xFE, 0xB0, 0x7F, 0x67, 0xE1, 0xA0, 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, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -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, 0x55, 0xEC, 0x00, 0x00, 0x00, 0x00, -0x54, 0x60, 0x00, 0x04, 0x00, 0x00, 0x70, 0x80, 0x01, 0x09, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, -0x4C, 0x4D, 0x54, 0x00, 0x48, 0x4F, 0x56, 0x54, 0x00, 0x48, 0x4F, 0x56, 0x53, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Irkutsk */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0F, 0xA2, 0x12, 0x0F, 0xB0, -0xB5, 0xA3, 0xD3, 0x10, 0x15, 0x27, 0x61, 0x80, 0x16, 0x18, 0x95, 0xF0, 0x17, 0x08, 0x95, 0x00, -0x17, 0xF9, 0xC9, 0x70, 0x18, 0xE9, 0xC8, 0x80, 0x19, 0xDA, 0xFC, 0xF0, 0x1A, 0xCC, 0x4D, 0x80, -0x1B, 0xBC, 0x5A, 0xA0, 0x1C, 0xAC, 0x4B, 0xA0, 0x1D, 0x9C, 0x3C, 0xA0, 0x1E, 0x8C, 0x2D, 0xA0, -0x1F, 0x7C, 0x1E, 0xA0, 0x20, 0x6C, 0x0F, 0xA0, 0x21, 0x5C, 0x00, 0xA0, 0x22, 0x4B, 0xF1, 0xA0, -0x23, 0x3B, 0xE2, 0xA0, 0x24, 0x2B, 0xD3, 0xA0, 0x25, 0x1B, 0xC4, 0xA0, 0x26, 0x0B, 0xB5, 0xA0, -0x27, 0x04, 0xE1, 0x20, 0x27, 0xF4, 0xD2, 0x20, 0x28, 0xE4, 0xD1, 0x30, 0x29, 0x78, 0x79, 0x30, -0x29, 0xD4, 0x89, 0xF0, 0x2A, 0xC4, 0x6C, 0xE0, 0x2B, 0xB4, 0x96, 0x20, 0x2C, 0xA4, 0x87, 0x20, -0x2D, 0x94, 0x78, 0x20, 0x2E, 0x84, 0x69, 0x20, 0x2F, 0x74, 0x5A, 0x20, 0x30, 0x64, 0x4B, 0x20, -0x31, 0x5D, 0x76, 0xA0, 0x32, 0x72, 0x51, 0xA0, 0x33, 0x3D, 0x58, 0xA0, 0x34, 0x52, 0x33, 0xA0, -0x35, 0x1D, 0x3A, 0xA0, 0x36, 0x32, 0x15, 0xA0, 0x36, 0xFD, 0x1C, 0xA0, 0x38, 0x1B, 0x32, 0x20, -0x38, 0xDC, 0xFE, 0xA0, 0x39, 0xFB, 0x14, 0x20, 0x3A, 0xBC, 0xE0, 0xA0, 0x3B, 0xDA, 0xF6, 0x20, -0x3C, 0xA5, 0xFD, 0x20, 0x3D, 0xBA, 0xD8, 0x20, 0x3E, 0x85, 0xDF, 0x20, 0x3F, 0x9A, 0xBA, 0x20, -0x40, 0x65, 0xC1, 0x20, 0x41, 0x83, 0xD6, 0xA0, 0x42, 0x45, 0xA3, 0x20, 0x43, 0x63, 0xB8, 0xA0, -0x44, 0x25, 0x85, 0x20, 0x45, 0x43, 0x9A, 0xA0, 0x46, 0x05, 0x67, 0x20, 0x47, 0x23, 0x7C, 0xA0, -0x47, 0xEE, 0x83, 0xA0, 0x49, 0x03, 0x5E, 0xA0, 0x49, 0xCE, 0x65, 0xA0, 0x4A, 0xE3, 0x40, 0xA0, -0x4B, 0xAE, 0x47, 0xA0, 0x4C, 0xCC, 0x5D, 0x20, 0x4D, 0x8E, 0x29, 0xA0, 0x4E, 0xAC, 0x3F, 0x20, -0x4F, 0x6E, 0x0B, 0xA0, 0x50, 0x8C, 0x21, 0x20, 0x51, 0x57, 0x28, 0x20, 0x52, 0x6C, 0x03, 0x20, -0x53, 0x37, 0x0A, 0x20, 0x54, 0x4B, 0xE5, 0x20, 0x55, 0x16, 0xEC, 0x20, 0x56, 0x2B, 0xC7, 0x20, -0x56, 0xF6, 0xCE, 0x20, 0x58, 0x14, 0xE3, 0xA0, 0x58, 0xD6, 0xB0, 0x20, 0x59, 0xF4, 0xC5, 0xA0, -0x5A, 0xB6, 0x92, 0x20, 0x5B, 0xD4, 0xA7, 0xA0, 0x5C, 0x9F, 0xAE, 0xA0, 0x5D, 0xB4, 0x89, 0xA0, -0x5E, 0x7F, 0x90, 0xA0, 0x5F, 0x94, 0x6B, 0xA0, 0x60, 0x5F, 0x72, 0xA0, 0x61, 0x7D, 0x88, 0x20, -0x62, 0x3F, 0x54, 0xA0, 0x63, 0x5D, 0x6A, 0x20, 0x64, 0x1F, 0x36, 0xA0, 0x65, 0x3D, 0x4C, 0x20, -0x66, 0x08, 0x53, 0x20, 0x67, 0x1D, 0x2E, 0x20, 0x67, 0xE8, 0x35, 0x20, 0x68, 0xFD, 0x10, 0x20, -0x69, 0xC8, 0x17, 0x20, 0x6A, 0xDC, 0xF2, 0x20, 0x6B, 0xA7, 0xF9, 0x20, 0x6C, 0xC6, 0x0E, 0xA0, -0x6D, 0x87, 0xDB, 0x20, 0x6E, 0xA5, 0xF0, 0xA0, 0x6F, 0x67, 0xBD, 0x20, 0x70, 0x85, 0xD2, 0xA0, -0x71, 0x50, 0xD9, 0xA0, 0x72, 0x65, 0xB4, 0xA0, 0x73, 0x30, 0xBB, 0xA0, 0x74, 0x45, 0x96, 0xA0, -0x75, 0x10, 0x9D, 0xA0, 0x76, 0x2E, 0xB3, 0x20, 0x76, 0xF0, 0x7F, 0xA0, 0x78, 0x0E, 0x95, 0x20, -0x78, 0xD0, 0x61, 0xA0, 0x79, 0xEE, 0x77, 0x20, 0x7A, 0xB0, 0x43, 0xA0, 0x7B, 0xCE, 0x59, 0x20, -0x7C, 0x99, 0x60, 0x20, 0x7D, 0xAE, 0x3B, 0x20, 0x7E, 0x79, 0x42, 0x20, 0x7F, 0x8E, 0x1D, 0x20, -0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x04, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x00, 0x00, 0x61, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, -0x04, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x09, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, 0x00, 0x00, 0x70, -0x80, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x09, 0x00, 0x00, 0x70, 0x80, 0x01, 0x09, 0x00, -0x00, 0x62, 0x70, 0x00, 0x04, 0x49, 0x4D, 0x54, 0x00, 0x49, 0x52, 0x4B, 0x54, 0x00, 0x49, 0x52, -0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, - -/* Asia/Istanbul */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x16, 0x90, 0x8B, 0xF5, 0x98, -0x9B, 0x0C, 0x17, 0x60, 0x9B, 0xD5, 0xBE, 0xD0, 0xA2, 0x65, 0x63, 0xE0, 0xA3, 0x7B, 0x82, 0x50, -0xA4, 0x4E, 0x80, 0x60, 0xA5, 0x3F, 0xB4, 0xD0, 0xA6, 0x25, 0x27, 0xE0, 0xA7, 0x27, 0x7F, 0xD0, -0xAA, 0x28, 0x28, 0x60, 0xAA, 0xE1, 0xFD, 0xD0, 0xAB, 0xF9, 0x89, 0xE0, 0xAC, 0xC3, 0x31, 0x50, -0xC8, 0x7F, 0xEE, 0x60, 0xC8, 0xFF, 0xC1, 0xD0, 0xC9, 0x4A, 0xF5, 0x60, 0xCA, 0xCE, 0x80, 0x50, -0xCB, 0xCB, 0xAE, 0x60, 0xCC, 0xE5, 0xC1, 0x50, 0xD1, 0x71, 0xEB, 0xE0, 0xD2, 0x6B, 0x09, 0x50, -0xD3, 0xA2, 0x39, 0x60, 0xD4, 0x43, 0x02, 0x50, 0xD5, 0x4C, 0x0D, 0xE0, 0xD6, 0x29, 0x7B, 0xD0, -0xD7, 0x2B, 0xEF, 0xE0, 0xD8, 0x09, 0x5D, 0xD0, 0xD9, 0x02, 0x97, 0x60, 0xD9, 0xE9, 0x3F, 0xD0, -0xDA, 0xEF, 0xA8, 0x60, 0xDB, 0xD2, 0x5C, 0x50, 0xDC, 0xD4, 0xD0, 0x60, 0xDD, 0xB3, 0x8F, 0xD0, -0xF1, 0xF4, 0xB9, 0x60, 0xF2, 0x64, 0xBA, 0xD0, 0xF5, 0x68, 0x06, 0x60, 0xF6, 0x1F, 0x38, 0xD0, -0x00, 0xA0, 0xBA, 0xE0, 0x01, 0x6B, 0xB3, 0xD0, 0x02, 0x80, 0x9C, 0xE0, 0x03, 0x4B, 0x95, 0xD0, -0x04, 0x69, 0xB9, 0x60, 0x05, 0x34, 0xB2, 0x50, 0x06, 0x6E, 0x93, 0x70, 0x07, 0x39, 0xA8, 0x80, -0x07, 0xFB, 0x75, 0x00, 0x09, 0x19, 0xA6, 0xA0, 0x09, 0xDB, 0x3A, 0xE0, 0x0A, 0xF0, 0x07, 0xD0, -0x0C, 0x10, 0xCE, 0x60, 0x0C, 0xD9, 0x24, 0x50, 0x0D, 0xA4, 0x39, 0x60, 0x0E, 0xA6, 0x91, 0x50, -0x0F, 0x84, 0x1B, 0x60, 0x10, 0x86, 0x73, 0x50, 0x12, 0x67, 0x98, 0xC0, 0x13, 0x4D, 0x36, 0x00, -0x14, 0x47, 0x7A, 0xC0, 0x15, 0x23, 0xDD, 0x80, 0x16, 0x27, 0x5C, 0xC0, 0x17, 0x03, 0xBF, 0x80, -0x18, 0x07, 0x3E, 0xC0, 0x19, 0x89, 0x94, 0x50, 0x19, 0xDC, 0x94, 0xC0, 0x1C, 0xC6, 0xD3, 0xD0, -0x1D, 0x9B, 0x15, 0x50, 0x1E, 0x8C, 0x82, 0x00, 0x1F, 0x7C, 0x73, 0x00, 0x20, 0x6C, 0x64, 0x00, -0x21, 0x5C, 0x55, 0x00, 0x22, 0x4C, 0x46, 0x00, 0x23, 0x3C, 0x37, 0x00, 0x24, 0x2C, 0x28, 0x00, -0x25, 0x1C, 0x19, 0x00, 0x26, 0x0C, 0x0A, 0x00, 0x27, 0x05, 0x35, 0x80, 0x27, 0xF5, 0x18, 0x70, -0x28, 0xE5, 0x09, 0x70, 0x29, 0xD4, 0xFA, 0x70, 0x2A, 0xC4, 0xEB, 0x70, 0x2B, 0xB4, 0xDC, 0x70, -0x2C, 0xA4, 0xCD, 0x70, 0x2D, 0x94, 0xBE, 0x70, 0x2E, 0x84, 0xAF, 0x70, 0x2F, 0x74, 0xA0, 0x70, -0x30, 0x64, 0x91, 0x70, 0x31, 0x5D, 0xBC, 0xF0, 0x32, 0x72, 0x97, 0xF0, 0x33, 0x3D, 0x9E, 0xF0, -0x34, 0x52, 0x79, 0xF0, 0x35, 0x1D, 0x80, 0xF0, 0x36, 0x32, 0x5B, 0xF0, 0x36, 0xFD, 0x62, 0xF0, -0x38, 0x1B, 0x78, 0x70, 0x38, 0xDD, 0x44, 0xF0, 0x39, 0xFB, 0x5A, 0x70, 0x3A, 0xBD, 0x26, 0xF0, -0x3B, 0xDB, 0x3C, 0x70, 0x3C, 0xA6, 0x43, 0x70, 0x3D, 0xBB, 0x1E, 0x70, 0x3E, 0x86, 0x25, 0x70, -0x3F, 0x9B, 0x00, 0x70, 0x40, 0x66, 0x07, 0x70, 0x41, 0x84, 0x1C, 0xF0, 0x42, 0x45, 0xE9, 0x70, -0x43, 0x63, 0xFE, 0xF0, 0x44, 0x25, 0xCB, 0x70, 0x45, 0x43, 0xE0, 0xF0, 0x46, 0x05, 0xAD, 0x70, -0x47, 0x23, 0xC2, 0xF0, 0x47, 0xEE, 0xC9, 0xF0, 0x49, 0x03, 0xA4, 0xF0, 0x49, 0xCE, 0xAB, 0xF0, -0x4A, 0xE3, 0x86, 0xF0, 0x4B, 0xAE, 0x8D, 0xF0, 0x4C, 0xCC, 0xA3, 0x70, 0x4D, 0x8E, 0x6F, 0xF0, -0x4E, 0xAC, 0x85, 0x70, 0x4F, 0x6E, 0x51, 0xF0, 0x50, 0x8C, 0x67, 0x70, 0x51, 0x57, 0x6E, 0x70, -0x52, 0x6C, 0x49, 0x70, 0x53, 0x37, 0x50, 0x70, 0x54, 0x4C, 0x2B, 0x70, 0x55, 0x17, 0x32, 0x70, -0x56, 0x2C, 0x0D, 0x70, 0x56, 0xF7, 0x14, 0x70, 0x58, 0x15, 0x29, 0xF0, 0x58, 0xD6, 0xF6, 0x70, -0x59, 0xF5, 0x0B, 0xF0, 0x5A, 0xB6, 0xD8, 0x70, 0x5B, 0xD4, 0xED, 0xF0, 0x5C, 0x9F, 0xF4, 0xF0, -0x5D, 0xB4, 0xCF, 0xF0, 0x5E, 0x7F, 0xD6, 0xF0, 0x5F, 0x94, 0xB1, 0xF0, 0x60, 0x5F, 0xB8, 0xF0, -0x61, 0x7D, 0xCE, 0x70, 0x62, 0x3F, 0x9A, 0xF0, 0x63, 0x5D, 0xB0, 0x70, 0x64, 0x1F, 0x7C, 0xF0, -0x65, 0x3D, 0x92, 0x70, 0x66, 0x08, 0x99, 0x70, 0x67, 0x1D, 0x74, 0x70, 0x67, 0xE8, 0x7B, 0x70, -0x68, 0xFD, 0x56, 0x70, 0x69, 0xC8, 0x5D, 0x70, 0x6A, 0xDD, 0x38, 0x70, 0x6B, 0xA8, 0x3F, 0x70, -0x6C, 0xC6, 0x54, 0xF0, 0x6D, 0x88, 0x21, 0x70, 0x6E, 0xA6, 0x36, 0xF0, 0x6F, 0x68, 0x03, 0x70, -0x70, 0x86, 0x18, 0xF0, 0x71, 0x51, 0x1F, 0xF0, 0x72, 0x65, 0xFA, 0xF0, 0x73, 0x31, 0x01, 0xF0, -0x74, 0x45, 0xDC, 0xF0, 0x75, 0x10, 0xE3, 0xF0, 0x76, 0x2E, 0xF9, 0x70, 0x76, 0xF0, 0xC5, 0xF0, -0x78, 0x0E, 0xDB, 0x70, 0x78, 0xD0, 0xA7, 0xF0, 0x79, 0xEE, 0xBD, 0x70, 0x7A, 0xB0, 0x89, 0xF0, -0x7B, 0xCE, 0x9F, 0x70, 0x7C, 0x99, 0xA6, 0x70, 0x7D, 0xAE, 0x81, 0x70, 0x7E, 0x79, 0x88, 0x70, -0x7F, 0x8E, 0x63, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x01, 0x02, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x00, 0x00, -0x1B, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, -0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x12, 0x00, 0x00, 0x2A, 0x30, -0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x49, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, -0x00, 0x45, 0x45, 0x54, 0x00, 0x54, 0x52, 0x53, 0x54, 0x00, 0x54, 0x52, 0x54, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Jakarta */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0xA9, 0x78, 0x85, 0xE0, -0xBA, 0x16, 0xDE, 0x60, 0xCB, 0xBF, 0x83, 0x88, 0xD2, 0x11, 0x0E, 0xF0, 0xD7, 0x3C, 0xC6, 0x08, -0xDA, 0xFF, 0x26, 0x00, 0xF4, 0xB5, 0xBE, 0x88, 0x01, 0x02, 0x03, 0x02, 0x04, 0x02, 0x05, 0x00, -0x00, 0x64, 0x20, 0x00, 0x00, 0x00, 0x00, 0x67, 0x20, 0x00, 0x04, 0x00, 0x00, 0x69, 0x78, 0x00, -0x09, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x0D, 0x00, 0x00, 0x70, 0x80, 0x00, 0x09, 0x00, 0x00, 0x62, -0x70, 0x00, 0x09, 0x4A, 0x4D, 0x54, 0x00, 0x4A, 0x41, 0x56, 0x54, 0x00, 0x57, 0x49, 0x54, 0x00, -0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* Asia/Jayapura */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xBA, 0x16, 0xC1, 0x98, -0xCF, 0x17, 0x0B, 0xF0, 0xF4, 0xB5, 0xA2, 0x68, 0x01, 0x02, 0x01, 0x00, 0x00, 0x83, 0xE8, 0x00, -0x00, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x04, 0x00, 0x00, 0x85, 0x98, 0x00, 0x08, 0x4C, 0x4D, 0x54, -0x00, 0x45, 0x49, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Jerusalem */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x9E, 0x30, 0x45, 0x88, -0xC8, 0x59, 0xB2, 0xE0, 0xCC, 0xE5, 0xC1, 0x50, 0xCD, 0xAC, 0xFE, 0x00, 0xCE, 0xC6, 0xF4, 0xD0, -0xCF, 0x8F, 0x66, 0xE0, 0xD0, 0xA9, 0x79, 0xD0, 0xD1, 0x84, 0x60, 0xE0, 0xD2, 0x8A, 0xC9, 0x70, -0xD3, 0x65, 0xB0, 0x80, 0xD4, 0x6B, 0xE0, 0xD0, 0xD7, 0x5A, 0x14, 0x60, 0xD7, 0xDF, 0x1F, 0xC0, -0xD8, 0x2F, 0xB5, 0x70, 0xD9, 0x1E, 0x46, 0xE0, 0xDA, 0x10, 0xE8, 0xF0, 0xDA, 0xEB, 0xB3, 0xE0, -0xDB, 0xB4, 0x34, 0x00, 0xDC, 0xB9, 0x20, 0xE0, 0xDD, 0xE0, 0x8D, 0x00, 0xDE, 0xB4, 0xCE, 0x80, -0xDF, 0xA4, 0xBF, 0x80, 0xE0, 0x8B, 0x76, 0x00, 0xE1, 0x56, 0x7D, 0x00, 0xE2, 0xBE, 0x4A, 0x60, -0xE3, 0x36, 0x34, 0xD0, 0xE4, 0x9C, 0xF7, 0x00, 0xE5, 0x16, 0x16, 0xD0, 0xE6, 0x74, 0xD3, 0xE0, -0xE7, 0x11, 0xD2, 0x80, 0xE8, 0x27, 0xFF, 0x00, 0xE8, 0xE8, 0x4F, 0xD0, 0x08, 0x7C, 0x8B, 0xE0, -0x08, 0xFD, 0xB0, 0xD0, 0x09, 0xF6, 0xEA, 0x60, 0x0A, 0xA6, 0x33, 0xD0, 0x1C, 0xBE, 0xF8, 0xE0, -0x1D, 0x89, 0xF1, 0xD0, 0x1E, 0xCC, 0xFF, 0x60, 0x1F, 0x60, 0x99, 0x50, 0x20, 0x82, 0xB1, 0x60, -0x21, 0x49, 0xB5, 0xD0, 0x22, 0x5D, 0x4D, 0x60, 0x23, 0x1F, 0x0B, 0xD0, 0x24, 0x5A, 0x30, 0x60, -0x25, 0x00, 0x3F, 0x50, 0x26, 0x0B, 0xED, 0xE0, 0x26, 0xD6, 0xE6, 0xD0, 0x27, 0xEB, 0xCF, 0xE0, -0x28, 0xC0, 0x03, 0x50, 0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xA9, 0x1F, 0xD0, 0x2B, 0xBB, 0x65, 0xE0, -0x2C, 0x89, 0x01, 0xD0, 0x2D, 0x9B, 0x47, 0xE0, 0x2E, 0x5F, 0xA9, 0x50, 0x2F, 0x7B, 0x29, 0xE0, -0x30, 0x48, 0xC5, 0xD0, 0x31, 0x48, 0x96, 0xE0, 0x32, 0x3C, 0x6E, 0x50, 0x33, 0x31, 0xB3, 0x60, -0x34, 0x1A, 0xFE, 0xD0, 0x35, 0x11, 0x95, 0x60, 0x35, 0xF1, 0xA6, 0x50, 0x37, 0x04, 0x08, 0x80, -0x37, 0xCF, 0x01, 0x70, 0x38, 0xF6, 0x5F, 0x80, 0x39, 0xDC, 0xF9, 0xE0, 0x3A, 0xD0, 0xED, 0x70, -0x3B, 0xAE, 0x5B, 0x60, 0x3C, 0xA3, 0xA0, 0x70, 0x3D, 0xA0, 0xB2, 0x60, 0x3E, 0x83, 0x82, 0x70, -0x3F, 0x7C, 0x9F, 0xE0, 0x40, 0x73, 0x36, 0x70, 0x41, 0x50, 0xA4, 0x60, 0x42, 0x4C, 0x8F, 0x00, -0x43, 0x48, 0x4F, 0x70, 0x44, 0x2C, 0x71, 0x00, 0x45, 0x1E, 0xF6, 0xF0, 0x46, 0x0C, 0x53, 0x00, -0x46, 0xEC, 0x63, 0xF0, 0x47, 0xEC, 0x35, 0x00, 0x48, 0xE7, 0xF5, 0x70, 0x49, 0xCC, 0x17, 0x00, -0x4A, 0xBE, 0x9C, 0xF0, 0x4B, 0xAB, 0xF9, 0x00, 0x4C, 0x8C, 0x09, 0xF0, 0x4D, 0x95, 0x15, 0x80, -0x4E, 0x87, 0x9B, 0x70, 0x4F, 0x74, 0xF7, 0x80, 0x50, 0x5E, 0x42, 0xF0, 0x51, 0x54, 0xD9, 0x80, -0x52, 0x2B, 0xAF, 0xF0, 0x53, 0x34, 0xBB, 0x80, 0x54, 0x27, 0x41, 0x70, 0x55, 0x14, 0x9D, 0x80, -0x55, 0xFD, 0xE8, 0xF0, 0x56, 0xFD, 0xBA, 0x00, 0x57, 0xF9, 0x7A, 0x70, 0x58, 0xDD, 0x9C, 0x00, -0x59, 0xC6, 0xE7, 0x70, 0x5A, 0xBD, 0x7E, 0x00, 0x5B, 0x9D, 0x8E, 0xF0, 0x5C, 0x9D, 0x60, 0x00, -0x5D, 0x99, 0x20, 0x70, 0x5E, 0x7D, 0x42, 0x00, 0x5F, 0x6F, 0xC7, 0xF0, 0x60, 0x5D, 0x24, 0x00, -0x61, 0x3D, 0x34, 0xF0, 0x62, 0x46, 0x40, 0x80, 0x63, 0x38, 0xC6, 0x70, 0x64, 0x26, 0x22, 0x80, -0x65, 0x0F, 0x6D, 0xF0, 0x66, 0x06, 0x04, 0x80, 0x67, 0x01, 0xC4, 0xF0, 0x67, 0xE5, 0xE6, 0x80, -0x68, 0xD8, 0x6C, 0x70, 0x69, 0xC5, 0xC8, 0x80, 0x6A, 0xAF, 0x13, 0xF0, 0x6B, 0xA5, 0xAA, 0x80, -0x6C, 0xAA, 0xA5, 0x70, 0x6D, 0x8E, 0xC7, 0x00, 0x6E, 0x78, 0x12, 0x70, 0x6F, 0x6E, 0xA9, 0x00, -0x70, 0x4E, 0xB9, 0xF0, 0x71, 0x4E, 0x8B, 0x00, 0x72, 0x4A, 0x4B, 0x70, 0x73, 0x2E, 0x6D, 0x00, -0x74, 0x17, 0xB8, 0x70, 0x75, 0x0E, 0x4F, 0x00, 0x75, 0xEE, 0x5F, 0xF0, 0x76, 0xF7, 0x6B, 0x80, -0x77, 0xE9, 0xF1, 0x70, 0x78, 0xD7, 0x4D, 0x80, 0x79, 0xB7, 0x5E, 0x70, 0x7A, 0xB7, 0x2F, 0x80, -0x7B, 0xB2, 0xEF, 0xF0, 0x7C, 0x97, 0x11, 0x80, 0x7D, 0x89, 0x97, 0x70, 0x7E, 0x76, 0xF3, 0x80, -0x7F, 0x57, 0x04, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x00, 0x00, 0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, -0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0C, 0x4A, 0x4D, 0x54, 0x00, 0x49, 0x44, -0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x49, 0x44, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, - -/* Asia/Kabul */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0xD0, 0xF9, 0xD7, 0x40, -0x01, 0x00, 0x00, 0x38, 0x40, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x48, 0x00, 0x00, 0x41, 0x46, 0x54, -0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Kamchatka */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0F, 0xA7, 0x52, 0x96, 0xC4, -0xB5, 0xA3, 0x9A, 0xD0, 0x15, 0x27, 0x29, 0x40, 0x16, 0x18, 0x5D, 0xB0, 0x17, 0x08, 0x5C, 0xC0, -0x17, 0xF9, 0x91, 0x30, 0x18, 0xE9, 0x90, 0x40, 0x19, 0xDA, 0xC4, 0xB0, 0x1A, 0xCC, 0x15, 0x40, -0x1B, 0xBC, 0x22, 0x60, 0x1C, 0xAC, 0x13, 0x60, 0x1D, 0x9C, 0x04, 0x60, 0x1E, 0x8B, 0xF5, 0x60, -0x1F, 0x7B, 0xE6, 0x60, 0x20, 0x6B, 0xD7, 0x60, 0x21, 0x5B, 0xC8, 0x60, 0x22, 0x4B, 0xB9, 0x60, -0x23, 0x3B, 0xAA, 0x60, 0x24, 0x2B, 0x9B, 0x60, 0x25, 0x1B, 0x8C, 0x60, 0x26, 0x0B, 0x7D, 0x60, -0x27, 0x04, 0xA8, 0xE0, 0x27, 0xF4, 0x99, 0xE0, 0x28, 0xE4, 0x98, 0xF0, 0x29, 0x78, 0x40, 0xF0, -0x29, 0xD4, 0x51, 0xB0, 0x2A, 0xC4, 0x34, 0xA0, 0x2B, 0xB4, 0x5D, 0xE0, 0x2C, 0xA4, 0x4E, 0xE0, -0x2D, 0x94, 0x3F, 0xE0, 0x2E, 0x84, 0x30, 0xE0, 0x2F, 0x74, 0x21, 0xE0, 0x30, 0x64, 0x12, 0xE0, -0x31, 0x5D, 0x3E, 0x60, 0x32, 0x72, 0x19, 0x60, 0x33, 0x3D, 0x20, 0x60, 0x34, 0x51, 0xFB, 0x60, -0x35, 0x1D, 0x02, 0x60, 0x36, 0x31, 0xDD, 0x60, 0x36, 0xFC, 0xE4, 0x60, 0x38, 0x1A, 0xF9, 0xE0, -0x38, 0xDC, 0xC6, 0x60, 0x39, 0xFA, 0xDB, 0xE0, 0x3A, 0xBC, 0xA8, 0x60, 0x3B, 0xDA, 0xBD, 0xE0, -0x3C, 0xA5, 0xC4, 0xE0, 0x3D, 0xBA, 0x9F, 0xE0, 0x3E, 0x85, 0xA6, 0xE0, 0x3F, 0x9A, 0x81, 0xE0, -0x40, 0x65, 0x88, 0xE0, 0x41, 0x83, 0x9E, 0x60, 0x42, 0x45, 0x6A, 0xE0, 0x43, 0x63, 0x80, 0x60, -0x44, 0x25, 0x4C, 0xE0, 0x45, 0x43, 0x62, 0x60, 0x46, 0x05, 0x2E, 0xE0, 0x47, 0x23, 0x44, 0x60, -0x47, 0xEE, 0x4B, 0x60, 0x49, 0x03, 0x26, 0x60, 0x49, 0xCE, 0x2D, 0x60, 0x4A, 0xE3, 0x08, 0x60, -0x4B, 0xAE, 0x0F, 0x60, 0x4C, 0xCC, 0x24, 0xE0, 0x4D, 0x8D, 0xF1, 0x60, 0x4E, 0xAC, 0x06, 0xE0, -0x4F, 0x6D, 0xD3, 0x60, 0x50, 0x8B, 0xE8, 0xE0, 0x51, 0x56, 0xEF, 0xE0, 0x52, 0x6B, 0xCA, 0xE0, -0x53, 0x36, 0xD1, 0xE0, 0x54, 0x4B, 0xAC, 0xE0, 0x55, 0x16, 0xB3, 0xE0, 0x56, 0x2B, 0x8E, 0xE0, -0x56, 0xF6, 0x95, 0xE0, 0x58, 0x14, 0xAB, 0x60, 0x58, 0xD6, 0x77, 0xE0, 0x59, 0xF4, 0x8D, 0x60, -0x5A, 0xB6, 0x59, 0xE0, 0x5B, 0xD4, 0x6F, 0x60, 0x5C, 0x9F, 0x76, 0x60, 0x5D, 0xB4, 0x51, 0x60, -0x5E, 0x7F, 0x58, 0x60, 0x5F, 0x94, 0x33, 0x60, 0x60, 0x5F, 0x3A, 0x60, 0x61, 0x7D, 0x4F, 0xE0, -0x62, 0x3F, 0x1C, 0x60, 0x63, 0x5D, 0x31, 0xE0, 0x64, 0x1E, 0xFE, 0x60, 0x65, 0x3D, 0x13, 0xE0, -0x66, 0x08, 0x1A, 0xE0, 0x67, 0x1C, 0xF5, 0xE0, 0x67, 0xE7, 0xFC, 0xE0, 0x68, 0xFC, 0xD7, 0xE0, -0x69, 0xC7, 0xDE, 0xE0, 0x6A, 0xDC, 0xB9, 0xE0, 0x6B, 0xA7, 0xC0, 0xE0, 0x6C, 0xC5, 0xD6, 0x60, -0x6D, 0x87, 0xA2, 0xE0, 0x6E, 0xA5, 0xB8, 0x60, 0x6F, 0x67, 0x84, 0xE0, 0x70, 0x85, 0x9A, 0x60, -0x71, 0x50, 0xA1, 0x60, 0x72, 0x65, 0x7C, 0x60, 0x73, 0x30, 0x83, 0x60, 0x74, 0x45, 0x5E, 0x60, -0x75, 0x10, 0x65, 0x60, 0x76, 0x2E, 0x7A, 0xE0, 0x76, 0xF0, 0x47, 0x60, 0x78, 0x0E, 0x5C, 0xE0, -0x78, 0xD0, 0x29, 0x60, 0x79, 0xEE, 0x3E, 0xE0, 0x7A, 0xB0, 0x0B, 0x60, 0x7B, 0xCE, 0x20, 0xE0, -0x7C, 0x99, 0x27, 0xE0, 0x7D, 0xAE, 0x02, 0xE0, 0x7E, 0x79, 0x09, 0xE0, 0x7F, 0x8D, 0xE4, 0xE0, -0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x04, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x00, 0x00, 0x94, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x00, -0x04, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x09, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x04, 0x00, 0x00, 0xA8, -0xC0, 0x00, 0x04, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x09, 0x00, 0x00, 0xA8, 0xC0, 0x01, 0x09, 0x00, -0x00, 0x9A, 0xB0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x50, 0x45, 0x54, 0x54, 0x00, 0x50, 0x45, -0x54, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, - -/* Asia/Karachi */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x16, 0x89, 0x7E, 0xFC, 0xA4, -0xCC, 0x95, 0x32, 0xA8, 0xD2, 0x74, 0x12, 0x98, 0xDD, 0xA8, 0xE0, 0xA8, 0x02, 0x4F, 0xAB, 0x30, -0x3C, 0xAF, 0x45, 0xEC, 0x3D, 0x9F, 0x28, 0xDC, 0x01, 0x02, 0x01, 0x03, 0x05, 0x04, 0x05, 0x00, -0x00, 0x3E, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x58, 0x00, 0x04, 0x00, 0x00, 0x5B, 0x68, 0x01, -0x04, 0x00, 0x00, 0x46, 0x50, 0x00, 0x08, 0x00, 0x00, 0x54, 0x60, 0x01, 0x0D, 0x00, 0x00, 0x46, -0x50, 0x00, 0x12, 0x4C, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x4B, 0x41, 0x52, 0x54, 0x00, -0x50, 0x4B, 0x53, 0x54, 0x00, 0x50, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Kashgar */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x11, 0xB0, 0xFE, 0xC5, 0x44, -0xC7, 0x91, 0x1D, 0xA8, 0x13, 0x6D, 0xE5, 0x30, 0x1E, 0xBA, 0x36, 0x00, 0x1F, 0x69, 0x7F, 0x70, -0x20, 0x7E, 0x68, 0x80, 0x21, 0x49, 0x61, 0x70, 0x22, 0x5E, 0x4A, 0x80, 0x23, 0x29, 0x43, 0x70, -0x24, 0x47, 0x67, 0x00, 0x25, 0x12, 0x5F, 0xF0, 0x26, 0x27, 0x49, 0x00, 0x26, 0xF2, 0x41, 0xF0, -0x28, 0x07, 0x2B, 0x00, 0x28, 0xD2, 0x23, 0xF0, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x00, 0x00, 0x47, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x4D, -0x58, 0x00, 0x04, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x09, 0x00, -0x00, 0x70, 0x80, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x41, 0x53, 0x54, 0x00, 0x43, 0x44, -0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* Asia/Katmandu */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xA1, 0xF2, 0x7D, 0x84, -0x1E, 0x18, 0x30, 0xA8, 0x01, 0x02, 0x00, 0x00, 0x4F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x58, -0x00, 0x04, 0x00, 0x00, 0x50, 0xDC, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, -0x4E, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Krasnoyarsk */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0F, 0xA1, 0xF9, 0x0D, 0xF8, -0xB5, 0xA3, 0xE1, 0x20, 0x15, 0x27, 0x6F, 0x90, 0x16, 0x18, 0xA4, 0x00, 0x17, 0x08, 0xA3, 0x10, -0x17, 0xF9, 0xD7, 0x80, 0x18, 0xE9, 0xD6, 0x90, 0x19, 0xDB, 0x0B, 0x00, 0x1A, 0xCC, 0x5B, 0x90, -0x1B, 0xBC, 0x68, 0xB0, 0x1C, 0xAC, 0x59, 0xB0, 0x1D, 0x9C, 0x4A, 0xB0, 0x1E, 0x8C, 0x3B, 0xB0, -0x1F, 0x7C, 0x2C, 0xB0, 0x20, 0x6C, 0x1D, 0xB0, 0x21, 0x5C, 0x0E, 0xB0, 0x22, 0x4B, 0xFF, 0xB0, -0x23, 0x3B, 0xF0, 0xB0, 0x24, 0x2B, 0xE1, 0xB0, 0x25, 0x1B, 0xD2, 0xB0, 0x26, 0x0B, 0xC3, 0xB0, -0x27, 0x04, 0xEF, 0x30, 0x27, 0xF4, 0xE0, 0x30, 0x28, 0xE4, 0xDF, 0x40, 0x29, 0x78, 0x87, 0x40, -0x29, 0xD4, 0x98, 0x00, 0x2A, 0xC4, 0x7A, 0xF0, 0x2B, 0xB4, 0xA4, 0x30, 0x2C, 0xA4, 0x95, 0x30, -0x2D, 0x94, 0x86, 0x30, 0x2E, 0x84, 0x77, 0x30, 0x2F, 0x74, 0x68, 0x30, 0x30, 0x64, 0x59, 0x30, -0x31, 0x5D, 0x84, 0xB0, 0x32, 0x72, 0x5F, 0xB0, 0x33, 0x3D, 0x66, 0xB0, 0x34, 0x52, 0x41, 0xB0, -0x35, 0x1D, 0x48, 0xB0, 0x36, 0x32, 0x23, 0xB0, 0x36, 0xFD, 0x2A, 0xB0, 0x38, 0x1B, 0x40, 0x30, -0x38, 0xDD, 0x0C, 0xB0, 0x39, 0xFB, 0x22, 0x30, 0x3A, 0xBC, 0xEE, 0xB0, 0x3B, 0xDB, 0x04, 0x30, -0x3C, 0xA6, 0x0B, 0x30, 0x3D, 0xBA, 0xE6, 0x30, 0x3E, 0x85, 0xED, 0x30, 0x3F, 0x9A, 0xC8, 0x30, -0x40, 0x65, 0xCF, 0x30, 0x41, 0x83, 0xE4, 0xB0, 0x42, 0x45, 0xB1, 0x30, 0x43, 0x63, 0xC6, 0xB0, -0x44, 0x25, 0x93, 0x30, 0x45, 0x43, 0xA8, 0xB0, 0x46, 0x05, 0x75, 0x30, 0x47, 0x23, 0x8A, 0xB0, -0x47, 0xEE, 0x91, 0xB0, 0x49, 0x03, 0x6C, 0xB0, 0x49, 0xCE, 0x73, 0xB0, 0x4A, 0xE3, 0x4E, 0xB0, -0x4B, 0xAE, 0x55, 0xB0, 0x4C, 0xCC, 0x6B, 0x30, 0x4D, 0x8E, 0x37, 0xB0, 0x4E, 0xAC, 0x4D, 0x30, -0x4F, 0x6E, 0x19, 0xB0, 0x50, 0x8C, 0x2F, 0x30, 0x51, 0x57, 0x36, 0x30, 0x52, 0x6C, 0x11, 0x30, -0x53, 0x37, 0x18, 0x30, 0x54, 0x4B, 0xF3, 0x30, 0x55, 0x16, 0xFA, 0x30, 0x56, 0x2B, 0xD5, 0x30, -0x56, 0xF6, 0xDC, 0x30, 0x58, 0x14, 0xF1, 0xB0, 0x58, 0xD6, 0xBE, 0x30, 0x59, 0xF4, 0xD3, 0xB0, -0x5A, 0xB6, 0xA0, 0x30, 0x5B, 0xD4, 0xB5, 0xB0, 0x5C, 0x9F, 0xBC, 0xB0, 0x5D, 0xB4, 0x97, 0xB0, -0x5E, 0x7F, 0x9E, 0xB0, 0x5F, 0x94, 0x79, 0xB0, 0x60, 0x5F, 0x80, 0xB0, 0x61, 0x7D, 0x96, 0x30, -0x62, 0x3F, 0x62, 0xB0, 0x63, 0x5D, 0x78, 0x30, 0x64, 0x1F, 0x44, 0xB0, 0x65, 0x3D, 0x5A, 0x30, -0x66, 0x08, 0x61, 0x30, 0x67, 0x1D, 0x3C, 0x30, 0x67, 0xE8, 0x43, 0x30, 0x68, 0xFD, 0x1E, 0x30, -0x69, 0xC8, 0x25, 0x30, 0x6A, 0xDD, 0x00, 0x30, 0x6B, 0xA8, 0x07, 0x30, 0x6C, 0xC6, 0x1C, 0xB0, -0x6D, 0x87, 0xE9, 0x30, 0x6E, 0xA5, 0xFE, 0xB0, 0x6F, 0x67, 0xCB, 0x30, 0x70, 0x85, 0xE0, 0xB0, -0x71, 0x50, 0xE7, 0xB0, 0x72, 0x65, 0xC2, 0xB0, 0x73, 0x30, 0xC9, 0xB0, 0x74, 0x45, 0xA4, 0xB0, -0x75, 0x10, 0xAB, 0xB0, 0x76, 0x2E, 0xC1, 0x30, 0x76, 0xF0, 0x8D, 0xB0, 0x78, 0x0E, 0xA3, 0x30, -0x78, 0xD0, 0x6F, 0xB0, 0x79, 0xEE, 0x85, 0x30, 0x7A, 0xB0, 0x51, 0xB0, 0x7B, 0xCE, 0x67, 0x30, -0x7C, 0x99, 0x6E, 0x30, 0x7D, 0xAE, 0x49, 0x30, 0x7E, 0x79, 0x50, 0x30, 0x7F, 0x8E, 0x2B, 0x30, -0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x04, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x00, 0x00, 0x57, 0x08, 0x00, 0x00, 0x00, 0x00, 0x54, 0x60, 0x00, -0x04, 0x00, 0x00, 0x70, 0x80, 0x01, 0x09, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x00, 0x00, 0x62, -0x70, 0x00, 0x04, 0x00, 0x00, 0x70, 0x80, 0x01, 0x09, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 0x00, -0x00, 0x54, 0x60, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x52, 0x41, 0x54, 0x00, 0x4B, 0x52, -0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, - -/* Asia/Kuala_Lumpur */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x17, 0x86, 0x83, 0x85, 0xA3, -0xBA, 0x67, 0x4E, 0x90, 0xC0, 0x0A, 0xE4, 0x60, 0xCA, 0xB3, 0xE5, 0x60, 0xCB, 0x91, 0x5F, 0x08, -0xD2, 0x48, 0x6D, 0xF0, 0x16, 0x91, 0xF5, 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x04, 0x06, 0x00, -0x00, 0x61, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x00, 0x00, 0x67, 0x20, 0x01, -0x09, 0x00, 0x00, 0x67, 0x20, 0x00, 0x04, 0x00, 0x00, 0x69, 0x78, 0x00, 0x04, 0x00, 0x00, 0x7E, -0x90, 0x00, 0x0F, 0x00, 0x00, 0x70, 0x80, 0x00, 0x13, 0x53, 0x4D, 0x54, 0x00, 0x4D, 0x41, 0x4C, -0x54, 0x00, 0x4D, 0x41, 0x4C, 0x53, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x4D, 0x59, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Kuching */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0xAD, 0x8A, 0x06, 0x90, -0xBA, 0x67, 0x47, 0x88, 0xBF, 0x7B, 0x27, 0x80, 0xBF, 0xF3, 0x1B, 0x50, 0xC1, 0x5D, 0xAC, 0x80, -0xC1, 0xD5, 0xA0, 0x50, 0xC3, 0x3E, 0xE0, 0x00, 0xC3, 0xB6, 0xD3, 0xD0, 0xC5, 0x20, 0x13, 0x80, -0xC5, 0x98, 0x07, 0x50, 0xC7, 0x01, 0x47, 0x00, 0xC7, 0x79, 0x3A, 0xD0, 0xC8, 0xE3, 0xCC, 0x00, -0xC9, 0x5B, 0xBF, 0xD0, 0xCA, 0xC4, 0xFF, 0x80, 0xCB, 0x3C, 0xF3, 0x50, 0xCB, 0x91, 0x58, 0x00, -0xD2, 0x48, 0x6D, 0xF0, 0x16, 0x91, 0xEE, 0x00, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x04, 0x03, 0x05, 0x00, 0x00, 0x67, 0x70, 0x00, -0x00, 0x00, 0x00, 0x69, 0x78, 0x00, 0x04, 0x00, 0x00, 0x75, 0x30, 0x01, 0x09, 0x00, 0x00, 0x70, -0x80, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x10, 0x00, 0x00, 0x70, 0x80, 0x00, 0x14, 0x4C, -0x4D, 0x54, 0x00, 0x42, 0x4F, 0x52, 0x54, 0x00, 0x42, 0x4F, 0x52, 0x54, 0x53, 0x54, 0x00, 0x4A, -0x53, 0x54, 0x00, 0x4D, 0x59, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, - -/* Asia/Kuwait */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xDA, 0x61, 0x35, 0x84, -0x01, 0x00, 0x00, 0x2C, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Macao */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x92, 0xE6, 0x24, 0x04, -0xEF, 0x77, 0xD1, 0xB8, 0xF0, 0xA8, 0x4E, 0x28, 0xF1, 0x57, 0xB3, 0xB8, 0xF2, 0x88, 0x30, 0x28, -0xF3, 0x37, 0x64, 0x80, 0xF4, 0x68, 0x12, 0x28, 0xF5, 0x20, 0xB2, 0x38, 0xF6, 0x47, 0xF4, 0x28, -0xF7, 0x00, 0x63, 0x00, 0xF8, 0x27, 0xA4, 0xF0, 0xF9, 0x05, 0x60, 0x38, 0xF9, 0xF5, 0x43, 0x28, -0xFA, 0xE5, 0x42, 0x38, 0xFB, 0xDE, 0x5F, 0xA8, 0xFC, 0xCE, 0x5E, 0xB8, 0xFD, 0xBE, 0x41, 0xA8, -0xFE, 0xAE, 0x40, 0xB8, 0xFF, 0x9E, 0x23, 0xA8, 0x00, 0x8E, 0x22, 0xB8, 0x01, 0x7E, 0x05, 0xA8, -0x02, 0x6E, 0x04, 0xB8, 0x03, 0x5D, 0xE7, 0xA8, 0x04, 0x4D, 0xB5, 0x80, 0x05, 0x3D, 0x98, 0x70, -0x06, 0x2D, 0x97, 0x80, 0x07, 0x26, 0xB4, 0xF0, 0x08, 0x16, 0xB4, 0x00, 0x09, 0x06, 0xC8, 0x28, -0x09, 0xF6, 0xC7, 0x38, 0x0A, 0xE6, 0xAA, 0x28, 0x0B, 0xD6, 0xA9, 0x38, 0x0C, 0xC6, 0x8C, 0x28, -0x0D, 0xB6, 0x8B, 0x38, 0x0E, 0xA6, 0x6E, 0x28, 0x0F, 0x96, 0x3C, 0x00, 0x10, 0x86, 0x1E, 0xF0, -0x11, 0x76, 0x1E, 0x00, 0x12, 0x6F, 0x3B, 0x70, 0x13, 0x5F, 0x3A, 0x80, 0x14, 0x4F, 0x1D, 0x70, -0x38, 0x5D, 0x01, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x00, 0x00, -0x6A, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x09, -0x00, 0x00, 0x70, 0x80, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x4F, 0x53, 0x54, 0x00, 0x4D, -0x4F, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Macau */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x92, 0xE6, 0x24, 0x04, -0xEF, 0x77, 0xD1, 0xB8, 0xF0, 0xA8, 0x4E, 0x28, 0xF1, 0x57, 0xB3, 0xB8, 0xF2, 0x88, 0x30, 0x28, -0xF3, 0x37, 0x64, 0x80, 0xF4, 0x68, 0x12, 0x28, 0xF5, 0x20, 0xB2, 0x38, 0xF6, 0x47, 0xF4, 0x28, -0xF7, 0x00, 0x63, 0x00, 0xF8, 0x27, 0xA4, 0xF0, 0xF9, 0x05, 0x60, 0x38, 0xF9, 0xF5, 0x43, 0x28, -0xFA, 0xE5, 0x42, 0x38, 0xFB, 0xDE, 0x5F, 0xA8, 0xFC, 0xCE, 0x5E, 0xB8, 0xFD, 0xBE, 0x41, 0xA8, -0xFE, 0xAE, 0x40, 0xB8, 0xFF, 0x9E, 0x23, 0xA8, 0x00, 0x8E, 0x22, 0xB8, 0x01, 0x7E, 0x05, 0xA8, -0x02, 0x6E, 0x04, 0xB8, 0x03, 0x5D, 0xE7, 0xA8, 0x04, 0x4D, 0xB5, 0x80, 0x05, 0x3D, 0x98, 0x70, -0x06, 0x2D, 0x97, 0x80, 0x07, 0x26, 0xB4, 0xF0, 0x08, 0x16, 0xB4, 0x00, 0x09, 0x06, 0xC8, 0x28, -0x09, 0xF6, 0xC7, 0x38, 0x0A, 0xE6, 0xAA, 0x28, 0x0B, 0xD6, 0xA9, 0x38, 0x0C, 0xC6, 0x8C, 0x28, -0x0D, 0xB6, 0x8B, 0x38, 0x0E, 0xA6, 0x6E, 0x28, 0x0F, 0x96, 0x3C, 0x00, 0x10, 0x86, 0x1E, 0xF0, -0x11, 0x76, 0x1E, 0x00, 0x12, 0x6F, 0x3B, 0x70, 0x13, 0x5F, 0x3A, 0x80, 0x14, 0x4F, 0x1D, 0x70, -0x38, 0x5D, 0x01, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x00, 0x00, -0x6A, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x09, -0x00, 0x00, 0x70, 0x80, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x4F, 0x53, 0x54, 0x00, 0x4D, -0x4F, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Magadan */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0F, 0xAA, 0x19, 0x36, 0xA0, -0xB5, 0xA3, 0xA8, 0xE0, 0x15, 0x27, 0x37, 0x50, 0x16, 0x18, 0x6B, 0xC0, 0x17, 0x08, 0x6A, 0xD0, -0x17, 0xF9, 0x9F, 0x40, 0x18, 0xE9, 0x9E, 0x50, 0x19, 0xDA, 0xD2, 0xC0, 0x1A, 0xCC, 0x23, 0x50, -0x1B, 0xBC, 0x30, 0x70, 0x1C, 0xAC, 0x21, 0x70, 0x1D, 0x9C, 0x12, 0x70, 0x1E, 0x8C, 0x03, 0x70, -0x1F, 0x7B, 0xF4, 0x70, 0x20, 0x6B, 0xE5, 0x70, 0x21, 0x5B, 0xD6, 0x70, 0x22, 0x4B, 0xC7, 0x70, -0x23, 0x3B, 0xB8, 0x70, 0x24, 0x2B, 0xA9, 0x70, 0x25, 0x1B, 0x9A, 0x70, 0x26, 0x0B, 0x8B, 0x70, -0x27, 0x04, 0xB6, 0xF0, 0x27, 0xF4, 0xA7, 0xF0, 0x28, 0xE4, 0xA7, 0x00, 0x29, 0x78, 0x4F, 0x00, -0x29, 0xD4, 0x5F, 0xC0, 0x2A, 0xC4, 0x42, 0xB0, 0x2B, 0xB4, 0x6B, 0xF0, 0x2C, 0xA4, 0x5C, 0xF0, -0x2D, 0x94, 0x4D, 0xF0, 0x2E, 0x84, 0x3E, 0xF0, 0x2F, 0x74, 0x2F, 0xF0, 0x30, 0x64, 0x20, 0xF0, -0x31, 0x5D, 0x4C, 0x70, 0x32, 0x72, 0x27, 0x70, 0x33, 0x3D, 0x2E, 0x70, 0x34, 0x52, 0x09, 0x70, -0x35, 0x1D, 0x10, 0x70, 0x36, 0x31, 0xEB, 0x70, 0x36, 0xFC, 0xF2, 0x70, 0x38, 0x1B, 0x07, 0xF0, -0x38, 0xDC, 0xD4, 0x70, 0x39, 0xFA, 0xE9, 0xF0, 0x3A, 0xBC, 0xB6, 0x70, 0x3B, 0xDA, 0xCB, 0xF0, -0x3C, 0xA5, 0xD2, 0xF0, 0x3D, 0xBA, 0xAD, 0xF0, 0x3E, 0x85, 0xB4, 0xF0, 0x3F, 0x9A, 0x8F, 0xF0, -0x40, 0x65, 0x96, 0xF0, 0x41, 0x83, 0xAC, 0x70, 0x42, 0x45, 0x78, 0xF0, 0x43, 0x63, 0x8E, 0x70, -0x44, 0x25, 0x5A, 0xF0, 0x45, 0x43, 0x70, 0x70, 0x46, 0x05, 0x3C, 0xF0, 0x47, 0x23, 0x52, 0x70, -0x47, 0xEE, 0x59, 0x70, 0x49, 0x03, 0x34, 0x70, 0x49, 0xCE, 0x3B, 0x70, 0x4A, 0xE3, 0x16, 0x70, -0x4B, 0xAE, 0x1D, 0x70, 0x4C, 0xCC, 0x32, 0xF0, 0x4D, 0x8D, 0xFF, 0x70, 0x4E, 0xAC, 0x14, 0xF0, -0x4F, 0x6D, 0xE1, 0x70, 0x50, 0x8B, 0xF6, 0xF0, 0x51, 0x56, 0xFD, 0xF0, 0x52, 0x6B, 0xD8, 0xF0, -0x53, 0x36, 0xDF, 0xF0, 0x54, 0x4B, 0xBA, 0xF0, 0x55, 0x16, 0xC1, 0xF0, 0x56, 0x2B, 0x9C, 0xF0, -0x56, 0xF6, 0xA3, 0xF0, 0x58, 0x14, 0xB9, 0x70, 0x58, 0xD6, 0x85, 0xF0, 0x59, 0xF4, 0x9B, 0x70, -0x5A, 0xB6, 0x67, 0xF0, 0x5B, 0xD4, 0x7D, 0x70, 0x5C, 0x9F, 0x84, 0x70, 0x5D, 0xB4, 0x5F, 0x70, -0x5E, 0x7F, 0x66, 0x70, 0x5F, 0x94, 0x41, 0x70, 0x60, 0x5F, 0x48, 0x70, 0x61, 0x7D, 0x5D, 0xF0, -0x62, 0x3F, 0x2A, 0x70, 0x63, 0x5D, 0x3F, 0xF0, 0x64, 0x1F, 0x0C, 0x70, 0x65, 0x3D, 0x21, 0xF0, -0x66, 0x08, 0x28, 0xF0, 0x67, 0x1D, 0x03, 0xF0, 0x67, 0xE8, 0x0A, 0xF0, 0x68, 0xFC, 0xE5, 0xF0, -0x69, 0xC7, 0xEC, 0xF0, 0x6A, 0xDC, 0xC7, 0xF0, 0x6B, 0xA7, 0xCE, 0xF0, 0x6C, 0xC5, 0xE4, 0x70, -0x6D, 0x87, 0xB0, 0xF0, 0x6E, 0xA5, 0xC6, 0x70, 0x6F, 0x67, 0x92, 0xF0, 0x70, 0x85, 0xA8, 0x70, -0x71, 0x50, 0xAF, 0x70, 0x72, 0x65, 0x8A, 0x70, 0x73, 0x30, 0x91, 0x70, 0x74, 0x45, 0x6C, 0x70, -0x75, 0x10, 0x73, 0x70, 0x76, 0x2E, 0x88, 0xF0, 0x76, 0xF0, 0x55, 0x70, 0x78, 0x0E, 0x6A, 0xF0, -0x78, 0xD0, 0x37, 0x70, 0x79, 0xEE, 0x4C, 0xF0, 0x7A, 0xB0, 0x19, 0x70, 0x7B, 0xCE, 0x2E, 0xF0, -0x7C, 0x99, 0x35, 0xF0, 0x7D, 0xAE, 0x10, 0xF0, 0x7E, 0x79, 0x17, 0xF0, 0x7F, 0x8D, 0xF2, 0xF0, -0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x04, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x00, 0x00, 0x8D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, -0x04, 0x00, 0x00, 0xA8, 0xC0, 0x01, 0x09, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x04, 0x00, 0x00, 0x9A, -0xB0, 0x00, 0x04, 0x00, 0x00, 0xA8, 0xC0, 0x01, 0x09, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x09, 0x00, -0x00, 0x8C, 0xA0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x41, 0x47, 0x54, 0x00, 0x4D, 0x41, -0x47, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, - -/* Asia/Makassar */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0xA1, 0xF2, 0x5D, 0x90, -0xBA, 0x16, 0xD5, 0x90, 0xCB, 0x88, 0x1D, 0x80, 0xD2, 0x11, 0x0E, 0xF0, 0x01, 0x02, 0x03, 0x02, -0x00, 0x00, 0x6F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6F, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x70, 0x80, -0x00, 0x08, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x4D, 0x54, 0x00, -0x43, 0x49, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* Asia/Manila */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0xC1, 0x9C, 0xF4, 0x80, -0xC2, 0x16, 0x30, 0x70, 0xCB, 0xF2, 0xE7, 0x00, 0xD0, 0xA9, 0x25, 0x70, 0xE2, 0x6C, 0x39, 0x00, -0xE2, 0xD5, 0xA2, 0xF0, 0x0F, 0x75, 0x46, 0x80, 0x10, 0x66, 0x7A, 0xF0, 0x00, 0x01, 0x02, 0x01, -0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x05, -0x00, 0x00, 0x7E, 0x90, 0x00, 0x09, 0x50, 0x48, 0x53, 0x54, 0x00, 0x50, 0x48, 0x54, 0x00, 0x4A, -0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Muscat */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xA1, 0xF2, 0x96, 0x94, -0x01, 0x00, 0x00, 0x36, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x47, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Nicosia */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0xA5, 0x77, 0x1E, 0xB8, -0x09, 0xED, 0xAF, 0xE0, 0x0A, 0xDD, 0x92, 0xD0, 0x0B, 0xFA, 0x64, 0xE0, 0x0C, 0xBE, 0xC6, 0x50, -0x0D, 0xA4, 0x39, 0x60, 0x0E, 0x8A, 0xE1, 0xD0, 0x0F, 0x84, 0x1B, 0x60, 0x10, 0x75, 0x4F, 0xD0, -0x11, 0x63, 0xFD, 0x60, 0x12, 0x53, 0xE0, 0x50, 0x13, 0x4D, 0x19, 0xE0, 0x14, 0x33, 0xC2, 0x50, -0x15, 0x23, 0xC1, 0x60, 0x16, 0x13, 0xA4, 0x50, 0x17, 0x03, 0xA3, 0x60, 0x17, 0xF3, 0x86, 0x50, -0x18, 0xE3, 0x85, 0x60, 0x19, 0xD3, 0x68, 0x50, 0x1A, 0xC3, 0x67, 0x60, 0x1B, 0xBC, 0x84, 0xD0, -0x1C, 0xAC, 0x83, 0xE0, 0x1D, 0x9C, 0x66, 0xD0, 0x1E, 0x8C, 0x65, 0xE0, 0x1F, 0x7C, 0x48, 0xD0, -0x20, 0x6C, 0x47, 0xE0, 0x21, 0x5C, 0x2A, 0xD0, 0x22, 0x4C, 0x29, 0xE0, 0x23, 0x3C, 0x0C, 0xD0, -0x24, 0x2C, 0x0B, 0xE0, 0x25, 0x1B, 0xEE, 0xD0, 0x26, 0x0B, 0xED, 0xE0, 0x27, 0x05, 0x0B, 0x50, -0x27, 0xF5, 0x0A, 0x60, 0x28, 0xE4, 0xED, 0x50, 0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xC4, 0xCF, 0x50, -0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50, 0x2D, 0x94, 0xB0, 0x60, 0x2E, 0x84, 0x93, 0x50, -0x2F, 0x74, 0x92, 0x60, 0x30, 0x64, 0x75, 0x50, 0x31, 0x5D, 0xAE, 0xE0, 0x32, 0x4D, 0x91, 0xD0, -0x33, 0x3D, 0x90, 0xE0, 0x34, 0x2D, 0x73, 0xD0, 0x35, 0x1D, 0x72, 0xE0, 0x36, 0x32, 0x78, 0x10, -0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, -0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, -0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, -0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x00, 0x00, 0x1F, 0x48, 0x00, 0x00, 0x00, 0x00, 0x2A, -0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, -0x00, 0x2A, 0x30, 0x01, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, -0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Asia/Novosibirsk */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0F, 0xA1, 0xDB, 0x19, 0x24, -0xB5, 0xA3, 0xE1, 0x20, 0x15, 0x27, 0x6F, 0x90, 0x16, 0x18, 0xA4, 0x00, 0x17, 0x08, 0xA3, 0x10, -0x17, 0xF9, 0xD7, 0x80, 0x18, 0xE9, 0xD6, 0x90, 0x19, 0xDB, 0x0B, 0x00, 0x1A, 0xCC, 0x5B, 0x90, -0x1B, 0xBC, 0x68, 0xB0, 0x1C, 0xAC, 0x59, 0xB0, 0x1D, 0x9C, 0x4A, 0xB0, 0x1E, 0x8C, 0x3B, 0xB0, -0x1F, 0x7C, 0x2C, 0xB0, 0x20, 0x6C, 0x1D, 0xB0, 0x21, 0x5C, 0x0E, 0xB0, 0x22, 0x4B, 0xFF, 0xB0, -0x23, 0x3B, 0xF0, 0xB0, 0x24, 0x2B, 0xE1, 0xB0, 0x25, 0x1B, 0xD2, 0xB0, 0x26, 0x0B, 0xC3, 0xB0, -0x27, 0x04, 0xEF, 0x30, 0x27, 0xF4, 0xE0, 0x30, 0x28, 0xE4, 0xDF, 0x40, 0x29, 0x78, 0x87, 0x40, -0x29, 0xD4, 0x98, 0x00, 0x2A, 0xC4, 0x7A, 0xF0, 0x2B, 0xB4, 0xA4, 0x30, 0x2B, 0xFE, 0x4E, 0x00, -0x2C, 0xA4, 0xA3, 0x40, 0x2D, 0x94, 0x94, 0x40, 0x2E, 0x84, 0x85, 0x40, 0x2F, 0x74, 0x76, 0x40, -0x30, 0x64, 0x67, 0x40, 0x31, 0x5D, 0x92, 0xC0, 0x32, 0x72, 0x6D, 0xC0, 0x33, 0x3D, 0x74, 0xC0, -0x34, 0x52, 0x4F, 0xC0, 0x35, 0x1D, 0x56, 0xC0, 0x36, 0x32, 0x31, 0xC0, 0x36, 0xFD, 0x38, 0xC0, -0x38, 0x1B, 0x4E, 0x40, 0x38, 0xDD, 0x1A, 0xC0, 0x39, 0xFB, 0x30, 0x40, 0x3A, 0xBC, 0xFC, 0xC0, -0x3B, 0xDB, 0x12, 0x40, 0x3C, 0xA6, 0x19, 0x40, 0x3D, 0xBA, 0xF4, 0x40, 0x3E, 0x85, 0xFB, 0x40, -0x3F, 0x9A, 0xD6, 0x40, 0x40, 0x65, 0xDD, 0x40, 0x41, 0x83, 0xF2, 0xC0, 0x42, 0x45, 0xBF, 0x40, -0x43, 0x63, 0xD4, 0xC0, 0x44, 0x25, 0xA1, 0x40, 0x45, 0x43, 0xB6, 0xC0, 0x46, 0x05, 0x83, 0x40, -0x47, 0x23, 0x98, 0xC0, 0x47, 0xEE, 0x9F, 0xC0, 0x49, 0x03, 0x7A, 0xC0, 0x49, 0xCE, 0x81, 0xC0, -0x4A, 0xE3, 0x5C, 0xC0, 0x4B, 0xAE, 0x63, 0xC0, 0x4C, 0xCC, 0x79, 0x40, 0x4D, 0x8E, 0x45, 0xC0, -0x4E, 0xAC, 0x5B, 0x40, 0x4F, 0x6E, 0x27, 0xC0, 0x50, 0x8C, 0x3D, 0x40, 0x51, 0x57, 0x44, 0x40, -0x52, 0x6C, 0x1F, 0x40, 0x53, 0x37, 0x26, 0x40, 0x54, 0x4C, 0x01, 0x40, 0x55, 0x17, 0x08, 0x40, -0x56, 0x2B, 0xE3, 0x40, 0x56, 0xF6, 0xEA, 0x40, 0x58, 0x14, 0xFF, 0xC0, 0x58, 0xD6, 0xCC, 0x40, -0x59, 0xF4, 0xE1, 0xC0, 0x5A, 0xB6, 0xAE, 0x40, 0x5B, 0xD4, 0xC3, 0xC0, 0x5C, 0x9F, 0xCA, 0xC0, -0x5D, 0xB4, 0xA5, 0xC0, 0x5E, 0x7F, 0xAC, 0xC0, 0x5F, 0x94, 0x87, 0xC0, 0x60, 0x5F, 0x8E, 0xC0, -0x61, 0x7D, 0xA4, 0x40, 0x62, 0x3F, 0x70, 0xC0, 0x63, 0x5D, 0x86, 0x40, 0x64, 0x1F, 0x52, 0xC0, -0x65, 0x3D, 0x68, 0x40, 0x66, 0x08, 0x6F, 0x40, 0x67, 0x1D, 0x4A, 0x40, 0x67, 0xE8, 0x51, 0x40, -0x68, 0xFD, 0x2C, 0x40, 0x69, 0xC8, 0x33, 0x40, 0x6A, 0xDD, 0x0E, 0x40, 0x6B, 0xA8, 0x15, 0x40, -0x6C, 0xC6, 0x2A, 0xC0, 0x6D, 0x87, 0xF7, 0x40, 0x6E, 0xA6, 0x0C, 0xC0, 0x6F, 0x67, 0xD9, 0x40, -0x70, 0x85, 0xEE, 0xC0, 0x71, 0x50, 0xF5, 0xC0, 0x72, 0x65, 0xD0, 0xC0, 0x73, 0x30, 0xD7, 0xC0, -0x74, 0x45, 0xB2, 0xC0, 0x75, 0x10, 0xB9, 0xC0, 0x76, 0x2E, 0xCF, 0x40, 0x76, 0xF0, 0x9B, 0xC0, -0x78, 0x0E, 0xB1, 0x40, 0x78, 0xD0, 0x7D, 0xC0, 0x79, 0xEE, 0x93, 0x40, 0x7A, 0xB0, 0x5F, 0xC0, -0x7B, 0xCE, 0x75, 0x40, 0x7C, 0x99, 0x7C, 0x40, 0x7D, 0xAE, 0x57, 0x40, 0x7E, 0x79, 0x5E, 0x40, -0x7F, 0x8E, 0x39, 0x40, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x04, 0x02, 0x03, 0x05, -0x08, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x00, 0x00, 0x4D, 0xBC, 0x00, 0x00, -0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, 0x70, 0x80, 0x01, 0x09, 0x00, 0x00, 0x62, 0x70, -0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, 0x00, 0x00, 0x70, 0x80, 0x01, 0x09, 0x00, 0x00, -0x62, 0x70, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, -0x4C, 0x4D, 0x54, 0x00, 0x4E, 0x4F, 0x56, 0x54, 0x00, 0x4E, 0x4F, 0x56, 0x53, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, - -/* Asia/Omsk */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0F, 0xA1, 0xB3, 0x40, 0xB0, -0xB5, 0xA3, 0xEF, 0x30, 0x15, 0x27, 0x7D, 0xA0, 0x16, 0x18, 0xB2, 0x10, 0x17, 0x08, 0xB1, 0x20, -0x17, 0xF9, 0xE5, 0x90, 0x18, 0xE9, 0xE4, 0xA0, 0x19, 0xDB, 0x19, 0x10, 0x1A, 0xCC, 0x69, 0xA0, -0x1B, 0xBC, 0x76, 0xC0, 0x1C, 0xAC, 0x67, 0xC0, 0x1D, 0x9C, 0x58, 0xC0, 0x1E, 0x8C, 0x49, 0xC0, -0x1F, 0x7C, 0x3A, 0xC0, 0x20, 0x6C, 0x2B, 0xC0, 0x21, 0x5C, 0x1C, 0xC0, 0x22, 0x4C, 0x0D, 0xC0, -0x23, 0x3B, 0xFE, 0xC0, 0x24, 0x2B, 0xEF, 0xC0, 0x25, 0x1B, 0xE0, 0xC0, 0x26, 0x0B, 0xD1, 0xC0, -0x27, 0x04, 0xFD, 0x40, 0x27, 0xF4, 0xEE, 0x40, 0x28, 0xE4, 0xED, 0x50, 0x29, 0x78, 0x95, 0x50, -0x29, 0xD4, 0xA6, 0x10, 0x2A, 0xC4, 0x89, 0x00, 0x2B, 0xB4, 0xB2, 0x40, 0x2C, 0xA4, 0xA3, 0x40, -0x2D, 0x94, 0x94, 0x40, 0x2E, 0x84, 0x85, 0x40, 0x2F, 0x74, 0x76, 0x40, 0x30, 0x64, 0x67, 0x40, -0x31, 0x5D, 0x92, 0xC0, 0x32, 0x72, 0x6D, 0xC0, 0x33, 0x3D, 0x74, 0xC0, 0x34, 0x52, 0x4F, 0xC0, -0x35, 0x1D, 0x56, 0xC0, 0x36, 0x32, 0x31, 0xC0, 0x36, 0xFD, 0x38, 0xC0, 0x38, 0x1B, 0x4E, 0x40, -0x38, 0xDD, 0x1A, 0xC0, 0x39, 0xFB, 0x30, 0x40, 0x3A, 0xBC, 0xFC, 0xC0, 0x3B, 0xDB, 0x12, 0x40, -0x3C, 0xA6, 0x19, 0x40, 0x3D, 0xBA, 0xF4, 0x40, 0x3E, 0x85, 0xFB, 0x40, 0x3F, 0x9A, 0xD6, 0x40, -0x40, 0x65, 0xDD, 0x40, 0x41, 0x83, 0xF2, 0xC0, 0x42, 0x45, 0xBF, 0x40, 0x43, 0x63, 0xD4, 0xC0, -0x44, 0x25, 0xA1, 0x40, 0x45, 0x43, 0xB6, 0xC0, 0x46, 0x05, 0x83, 0x40, 0x47, 0x23, 0x98, 0xC0, -0x47, 0xEE, 0x9F, 0xC0, 0x49, 0x03, 0x7A, 0xC0, 0x49, 0xCE, 0x81, 0xC0, 0x4A, 0xE3, 0x5C, 0xC0, -0x4B, 0xAE, 0x63, 0xC0, 0x4C, 0xCC, 0x79, 0x40, 0x4D, 0x8E, 0x45, 0xC0, 0x4E, 0xAC, 0x5B, 0x40, -0x4F, 0x6E, 0x27, 0xC0, 0x50, 0x8C, 0x3D, 0x40, 0x51, 0x57, 0x44, 0x40, 0x52, 0x6C, 0x1F, 0x40, -0x53, 0x37, 0x26, 0x40, 0x54, 0x4C, 0x01, 0x40, 0x55, 0x17, 0x08, 0x40, 0x56, 0x2B, 0xE3, 0x40, -0x56, 0xF6, 0xEA, 0x40, 0x58, 0x14, 0xFF, 0xC0, 0x58, 0xD6, 0xCC, 0x40, 0x59, 0xF4, 0xE1, 0xC0, -0x5A, 0xB6, 0xAE, 0x40, 0x5B, 0xD4, 0xC3, 0xC0, 0x5C, 0x9F, 0xCA, 0xC0, 0x5D, 0xB4, 0xA5, 0xC0, -0x5E, 0x7F, 0xAC, 0xC0, 0x5F, 0x94, 0x87, 0xC0, 0x60, 0x5F, 0x8E, 0xC0, 0x61, 0x7D, 0xA4, 0x40, -0x62, 0x3F, 0x70, 0xC0, 0x63, 0x5D, 0x86, 0x40, 0x64, 0x1F, 0x52, 0xC0, 0x65, 0x3D, 0x68, 0x40, -0x66, 0x08, 0x6F, 0x40, 0x67, 0x1D, 0x4A, 0x40, 0x67, 0xE8, 0x51, 0x40, 0x68, 0xFD, 0x2C, 0x40, -0x69, 0xC8, 0x33, 0x40, 0x6A, 0xDD, 0x0E, 0x40, 0x6B, 0xA8, 0x15, 0x40, 0x6C, 0xC6, 0x2A, 0xC0, -0x6D, 0x87, 0xF7, 0x40, 0x6E, 0xA6, 0x0C, 0xC0, 0x6F, 0x67, 0xD9, 0x40, 0x70, 0x85, 0xEE, 0xC0, -0x71, 0x50, 0xF5, 0xC0, 0x72, 0x65, 0xD0, 0xC0, 0x73, 0x30, 0xD7, 0xC0, 0x74, 0x45, 0xB2, 0xC0, -0x75, 0x10, 0xB9, 0xC0, 0x76, 0x2E, 0xCF, 0x40, 0x76, 0xF0, 0x9B, 0xC0, 0x78, 0x0E, 0xB1, 0x40, -0x78, 0xD0, 0x7D, 0xC0, 0x79, 0xEE, 0x93, 0x40, 0x7A, 0xB0, 0x5F, 0xC0, 0x7B, 0xCE, 0x75, 0x40, -0x7C, 0x99, 0x7C, 0x40, 0x7D, 0xAE, 0x57, 0x40, 0x7E, 0x79, 0x5E, 0x40, 0x7F, 0x8E, 0x39, 0x40, -0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x04, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x00, 0x00, 0x44, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x46, 0x50, 0x00, -0x04, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, 0x54, -0x60, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x01, 0x09, 0x00, -0x00, 0x46, 0x50, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x4F, 0x4D, 0x53, 0x54, 0x00, 0x4F, 0x4D, -0x53, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, - -/* Asia/Oral */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x1A, 0xAA, 0x19, 0x93, 0xDC, -0xB5, 0xA3, 0xFD, 0x40, 0x15, 0x27, 0x8B, 0xB0, 0x16, 0x18, 0xC0, 0x20, 0x17, 0x08, 0xB1, 0x20, -0x17, 0xF9, 0xF3, 0xA0, 0x18, 0xE9, 0xF2, 0xB0, 0x19, 0xDB, 0x27, 0x20, 0x1A, 0xCC, 0x77, 0xB0, -0x1B, 0xBC, 0x84, 0xD0, 0x1C, 0xAC, 0x75, 0xD0, 0x1D, 0x9C, 0x66, 0xD0, 0x1E, 0x8C, 0x57, 0xD0, -0x1F, 0x7C, 0x48, 0xD0, 0x20, 0x6C, 0x39, 0xD0, 0x21, 0x5C, 0x2A, 0xD0, 0x22, 0x4C, 0x1B, 0xD0, -0x23, 0x3C, 0x0C, 0xD0, 0x24, 0x2B, 0xFD, 0xD0, 0x25, 0x1B, 0xFC, 0xE0, 0x26, 0x0B, 0xED, 0xE0, -0x27, 0x05, 0x19, 0x60, 0x27, 0x7F, 0x98, 0xC0, 0x29, 0x4B, 0xB4, 0x40, 0x29, 0xD4, 0xC2, 0x30, -0x2A, 0xC4, 0xA5, 0x20, 0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xBF, 0x60, 0x2D, 0x94, 0xB0, 0x60, -0x2E, 0x84, 0xA1, 0x60, 0x2F, 0x74, 0x92, 0x60, 0x30, 0x64, 0x83, 0x60, 0x31, 0x5D, 0xAE, 0xE0, -0x32, 0x72, 0x89, 0xE0, 0x33, 0x3D, 0x90, 0xE0, 0x34, 0x52, 0x6B, 0xE0, 0x35, 0x1D, 0x72, 0xE0, -0x36, 0x32, 0x4D, 0xE0, 0x36, 0xFD, 0x54, 0xE0, 0x38, 0x1B, 0x6A, 0x60, 0x38, 0xDD, 0x36, 0xE0, -0x39, 0xFB, 0x4C, 0x60, 0x3A, 0xBD, 0x18, 0xE0, 0x3B, 0xDB, 0x2E, 0x60, 0x3C, 0xA6, 0x35, 0x60, -0x3D, 0xBB, 0x10, 0x60, 0x3E, 0x86, 0x17, 0x60, 0x3F, 0x9A, 0xF2, 0x60, 0x40, 0x65, 0xF9, 0x60, -0x41, 0x84, 0x0E, 0xE0, 0x42, 0x35, 0xED, 0x40, 0x01, 0x02, 0x03, 0x04, 0x03, 0x02, 0x03, 0x02, -0x03, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x07, 0x08, 0x07, 0x08, 0x01, 0x0A, -0x09, 0x0A, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0D, 0x00, 0x00, 0x30, 0x24, 0x00, -0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x00, 0x00, 0x54, -0x60, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x00, -0x00, 0x54, 0x60, 0x01, 0x09, 0x00, 0x00, 0x46, 0x50, 0x01, 0x09, 0x00, 0x00, 0x38, 0x40, 0x00, -0x04, 0x00, 0x00, 0x46, 0x50, 0x01, 0x0F, 0x00, 0x00, 0x38, 0x40, 0x00, 0x15, 0x00, 0x00, 0x46, -0x50, 0x01, 0x0F, 0x00, 0x00, 0x38, 0x40, 0x00, 0x15, 0x00, 0x00, 0x46, 0x50, 0x00, 0x15, 0x4C, -0x4D, 0x54, 0x00, 0x55, 0x52, 0x41, 0x54, 0x00, 0x55, 0x52, 0x41, 0x53, 0x54, 0x00, 0x4F, 0x52, -0x41, 0x53, 0x54, 0x00, 0x4F, 0x52, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, -0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Phnom_Penh */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0C, 0x88, 0x6F, 0x44, 0x24, -0x91, 0x5F, 0xEE, 0xD0, 0x93, 0x85, 0xB1, 0x90, 0xB7, 0x41, 0xBC, 0x00, 0x01, 0x02, 0x03, 0x02, -0x00, 0x00, 0x62, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x63, 0xEC, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, -0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, -0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Pontianak */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x14, 0x8B, 0xFF, 0x8E, 0x00, -0xBA, 0x16, 0xDF, 0x00, 0xCB, 0x79, 0xA4, 0x08, 0xD2, 0x11, 0x0E, 0xF0, 0xD7, 0x3C, 0xC6, 0x08, -0xDA, 0xFF, 0x26, 0x00, 0xF4, 0xB5, 0xBE, 0x88, 0x21, 0xDA, 0x74, 0x80, 0x01, 0x02, 0x03, 0x02, -0x04, 0x02, 0x05, 0x06, 0x00, 0x00, 0x66, 0x80, 0x00, 0x00, 0x00, 0x00, 0x66, 0x80, 0x00, 0x04, -0x00, 0x00, 0x69, 0x78, 0x00, 0x08, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x0C, 0x00, 0x00, 0x70, 0x80, -0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x10, 0x00, 0x00, 0x62, 0x70, 0x00, 0x08, 0x4C, 0x4D, -0x54, 0x00, 0x50, 0x4D, 0x54, 0x00, 0x57, 0x49, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x43, 0x49, -0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* Asia/Pyongyang */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x85, 0x93, 0x7E, 0x78, -0xB0, 0xFE, 0x8D, 0xF0, 0xB8, 0x84, 0xB4, 0x78, 0xE2, 0x4F, 0x29, 0xF0, 0xF0, 0x35, 0x78, 0x80, -0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x00, 0x77, 0x88, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x00, -0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x00, 0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, - -/* Asia/Qatar */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xA1, 0xF2, 0x9D, 0x30, -0x04, 0x8A, 0x92, 0xC0, 0x01, 0x02, 0x00, 0x00, 0x30, 0x50, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, -0x00, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x47, 0x53, 0x54, 0x00, -0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Qyzylorda */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1A, 0xAA, 0x19, 0x86, 0xA0, -0xB5, 0xA3, 0xFD, 0x40, 0x15, 0x27, 0x8B, 0xB0, 0x16, 0x18, 0xC0, 0x20, 0x17, 0x08, 0xB1, 0x20, -0x17, 0xF9, 0xF3, 0xA0, 0x18, 0xE9, 0xF2, 0xB0, 0x19, 0xDB, 0x27, 0x20, 0x1A, 0xCC, 0x77, 0xB0, -0x1B, 0xBC, 0x84, 0xD0, 0x1C, 0xAC, 0x75, 0xD0, 0x1D, 0x9C, 0x66, 0xD0, 0x1E, 0x8C, 0x57, 0xD0, -0x1F, 0x7C, 0x48, 0xD0, 0x20, 0x6C, 0x39, 0xD0, 0x21, 0x5C, 0x2A, 0xD0, 0x22, 0x4C, 0x1B, 0xD0, -0x23, 0x3C, 0x0C, 0xD0, 0x24, 0x2B, 0xFD, 0xD0, 0x25, 0x1B, 0xEE, 0xD0, 0x26, 0x0B, 0xDF, 0xD0, -0x27, 0x05, 0x0B, 0x50, 0x27, 0x7F, 0x8A, 0xB0, 0x29, 0x4B, 0xA6, 0x30, 0x29, 0x78, 0x95, 0x50, -0x29, 0xD4, 0xA6, 0x10, 0x2A, 0xC4, 0x89, 0x00, 0x2B, 0xB4, 0xB2, 0x40, 0x2C, 0xA4, 0xA3, 0x40, -0x2D, 0x94, 0x94, 0x40, 0x2E, 0x84, 0x85, 0x40, 0x2F, 0x74, 0x76, 0x40, 0x30, 0x64, 0x67, 0x40, -0x31, 0x5D, 0x92, 0xC0, 0x32, 0x72, 0x6D, 0xC0, 0x33, 0x3D, 0x74, 0xC0, 0x34, 0x52, 0x4F, 0xC0, -0x35, 0x1D, 0x56, 0xC0, 0x36, 0x32, 0x31, 0xC0, 0x36, 0xFD, 0x38, 0xC0, 0x38, 0x1B, 0x4E, 0x40, -0x38, 0xDD, 0x1A, 0xC0, 0x39, 0xFB, 0x30, 0x40, 0x3A, 0xBC, 0xFC, 0xC0, 0x3B, 0xDB, 0x12, 0x40, -0x3C, 0xA6, 0x19, 0x40, 0x3D, 0xBA, 0xF4, 0x40, 0x3E, 0x85, 0xFB, 0x40, 0x3F, 0x9A, 0xD6, 0x40, -0x40, 0x65, 0xDD, 0x40, 0x41, 0x83, 0xF2, 0xC0, 0x42, 0x35, 0xD1, 0x20, 0x01, 0x02, 0x03, 0x04, -0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x02, 0x07, 0x09, 0x08, 0x09, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x09, -0x00, 0x00, 0x3D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x00, 0x00, 0x46, 0x50, -0x00, 0x04, 0x00, 0x00, 0x54, 0x60, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, -0x46, 0x50, 0x00, 0x04, 0x00, 0x00, 0x54, 0x60, 0x01, 0x09, 0x00, 0x00, 0x46, 0x50, 0x00, 0x0F, -0x00, 0x00, 0x62, 0x70, 0x01, 0x14, 0x00, 0x00, 0x54, 0x60, 0x00, 0x0F, 0x00, 0x00, 0x62, 0x70, -0x01, 0x14, 0x00, 0x00, 0x54, 0x60, 0x00, 0x0F, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x49, 0x5A, 0x54, -0x00, 0x4B, 0x49, 0x5A, 0x53, 0x54, 0x00, 0x51, 0x59, 0x5A, 0x54, 0x00, 0x51, 0x59, 0x5A, 0x53, -0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Rangoon */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xA1, 0xF2, 0x73, 0x5C, -0xCB, 0xF2, 0xFC, 0x18, 0xD1, 0x9A, 0x67, 0xF0, 0x01, 0x02, 0x03, 0x00, 0x00, 0x5A, 0x24, 0x00, -0x00, 0x00, 0x00, 0x5B, 0x68, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x09, 0x00, 0x00, 0x5B, -0x68, 0x00, 0x0D, 0x52, 0x4D, 0x54, 0x00, 0x42, 0x55, 0x52, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, -0x4D, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Riyadh */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xDA, 0x61, 0x36, 0xB4, -0x01, 0x00, 0x00, 0x2B, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Saigon */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0C, 0x88, 0x6F, 0x42, 0x80, -0x91, 0x5F, 0xEE, 0xD0, 0x93, 0x85, 0xB1, 0x90, 0xB7, 0x41, 0xBC, 0x00, 0x01, 0x02, 0x03, 0x02, -0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0xEC, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, -0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, -0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Sakhalin */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x17, 0x86, 0xF0, 0xCD, 0xB8, -0xC3, 0xCE, 0x85, 0x70, 0xD2, 0x30, 0xB2, 0xF0, 0x15, 0x27, 0x37, 0x50, 0x16, 0x18, 0x6B, 0xC0, -0x17, 0x08, 0x6A, 0xD0, 0x17, 0xF9, 0x9F, 0x40, 0x18, 0xE9, 0x9E, 0x50, 0x19, 0xDA, 0xD2, 0xC0, -0x1A, 0xCC, 0x23, 0x50, 0x1B, 0xBC, 0x30, 0x70, 0x1C, 0xAC, 0x21, 0x70, 0x1D, 0x9C, 0x12, 0x70, -0x1E, 0x8C, 0x03, 0x70, 0x1F, 0x7B, 0xF4, 0x70, 0x20, 0x6B, 0xE5, 0x70, 0x21, 0x5B, 0xD6, 0x70, -0x22, 0x4B, 0xC7, 0x70, 0x23, 0x3B, 0xB8, 0x70, 0x24, 0x2B, 0xA9, 0x70, 0x25, 0x1B, 0x9A, 0x70, -0x26, 0x0B, 0x8B, 0x70, 0x27, 0x04, 0xB6, 0xF0, 0x27, 0xF4, 0xA7, 0xF0, 0x28, 0xE4, 0xA7, 0x00, -0x29, 0x78, 0x4F, 0x00, 0x29, 0xD4, 0x5F, 0xC0, 0x2A, 0xC4, 0x42, 0xB0, 0x2B, 0xB4, 0x6B, 0xF0, -0x2C, 0xA4, 0x5C, 0xF0, 0x2D, 0x94, 0x4D, 0xF0, 0x2E, 0x84, 0x3E, 0xF0, 0x2F, 0x74, 0x2F, 0xF0, -0x30, 0x64, 0x20, 0xF0, 0x31, 0x5D, 0x4C, 0x70, 0x32, 0x72, 0x27, 0x70, 0x33, 0x3D, 0x2E, 0x70, -0x34, 0x52, 0x17, 0x80, 0x35, 0x1D, 0x1E, 0x80, 0x36, 0x31, 0xF9, 0x80, 0x36, 0xFD, 0x00, 0x80, -0x38, 0x1B, 0x16, 0x00, 0x38, 0xDC, 0xE2, 0x80, 0x39, 0xFA, 0xF8, 0x00, 0x3A, 0xBC, 0xC4, 0x80, -0x3B, 0xDA, 0xDA, 0x00, 0x3C, 0xA5, 0xE1, 0x00, 0x3D, 0xBA, 0xBC, 0x00, 0x3E, 0x85, 0xC3, 0x00, -0x3F, 0x9A, 0x9E, 0x00, 0x40, 0x65, 0xA5, 0x00, 0x41, 0x83, 0xBA, 0x80, 0x42, 0x45, 0x87, 0x00, -0x43, 0x63, 0x9C, 0x80, 0x44, 0x25, 0x69, 0x00, 0x45, 0x43, 0x7E, 0x80, 0x46, 0x05, 0x4B, 0x00, -0x47, 0x23, 0x60, 0x80, 0x47, 0xEE, 0x67, 0x80, 0x49, 0x03, 0x42, 0x80, 0x49, 0xCE, 0x49, 0x80, -0x4A, 0xE3, 0x24, 0x80, 0x4B, 0xAE, 0x2B, 0x80, 0x4C, 0xCC, 0x41, 0x00, 0x4D, 0x8E, 0x0D, 0x80, -0x4E, 0xAC, 0x23, 0x00, 0x4F, 0x6D, 0xEF, 0x80, 0x50, 0x8C, 0x05, 0x00, 0x51, 0x57, 0x0C, 0x00, -0x52, 0x6B, 0xE7, 0x00, 0x53, 0x36, 0xEE, 0x00, 0x54, 0x4B, 0xC9, 0x00, 0x55, 0x16, 0xD0, 0x00, -0x56, 0x2B, 0xAB, 0x00, 0x56, 0xF6, 0xB2, 0x00, 0x58, 0x14, 0xC7, 0x80, 0x58, 0xD6, 0x94, 0x00, -0x59, 0xF4, 0xA9, 0x80, 0x5A, 0xB6, 0x76, 0x00, 0x5B, 0xD4, 0x8B, 0x80, 0x5C, 0x9F, 0x92, 0x80, -0x5D, 0xB4, 0x6D, 0x80, 0x5E, 0x7F, 0x74, 0x80, 0x5F, 0x94, 0x4F, 0x80, 0x60, 0x5F, 0x56, 0x80, -0x61, 0x7D, 0x6C, 0x00, 0x62, 0x3F, 0x38, 0x80, 0x63, 0x5D, 0x4E, 0x00, 0x64, 0x1F, 0x1A, 0x80, -0x65, 0x3D, 0x30, 0x00, 0x66, 0x08, 0x37, 0x00, 0x67, 0x1D, 0x12, 0x00, 0x67, 0xE8, 0x19, 0x00, -0x68, 0xFC, 0xF4, 0x00, 0x69, 0xC7, 0xFB, 0x00, 0x6A, 0xDC, 0xD6, 0x00, 0x6B, 0xA7, 0xDD, 0x00, -0x6C, 0xC5, 0xF2, 0x80, 0x6D, 0x87, 0xBF, 0x00, 0x6E, 0xA5, 0xD4, 0x80, 0x6F, 0x67, 0xA1, 0x00, -0x70, 0x85, 0xB6, 0x80, 0x71, 0x50, 0xBD, 0x80, 0x72, 0x65, 0x98, 0x80, 0x73, 0x30, 0x9F, 0x80, -0x74, 0x45, 0x7A, 0x80, 0x75, 0x10, 0x81, 0x80, 0x76, 0x2E, 0x97, 0x00, 0x76, 0xF0, 0x63, 0x80, -0x78, 0x0E, 0x79, 0x00, 0x78, 0xD0, 0x45, 0x80, 0x79, 0xEE, 0x5B, 0x00, 0x7A, 0xB0, 0x27, 0x80, -0x7B, 0xCE, 0x3D, 0x00, 0x7C, 0x99, 0x44, 0x00, 0x7D, 0xAE, 0x1F, 0x00, 0x7E, 0x79, 0x26, 0x00, -0x7F, 0x8E, 0x01, 0x00, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x07, 0x08, 0x05, 0x03, 0x04, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, -0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, -0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, -0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, -0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, -0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x00, 0x00, 0x85, 0xC8, 0x00, 0x00, -0x00, 0x00, 0x7E, 0x90, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x08, 0x00, 0x00, 0xA8, 0xC0, -0x01, 0x0C, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x12, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x12, 0x00, 0x00, -0xA8, 0xC0, 0x01, 0x0C, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x0C, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x12, -0x4C, 0x4D, 0x54, 0x00, 0x43, 0x4A, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x53, 0x41, 0x4B, 0x53, -0x54, 0x00, 0x53, 0x41, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Samarkand */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x1D, 0xAA, 0x19, 0x85, 0x60, -0xB5, 0xA3, 0xFD, 0x40, 0x15, 0x27, 0x8B, 0xB0, 0x16, 0x18, 0xC0, 0x20, 0x17, 0x08, 0xB1, 0x20, -0x17, 0xF9, 0xF3, 0xA0, 0x18, 0xE9, 0xF2, 0xB0, 0x19, 0xDB, 0x27, 0x20, 0x1A, 0xCC, 0x77, 0xB0, -0x1B, 0xBC, 0x84, 0xD0, 0x1C, 0xAC, 0x75, 0xD0, 0x1D, 0x9C, 0x66, 0xD0, 0x1E, 0x8C, 0x57, 0xD0, -0x1F, 0x7C, 0x48, 0xD0, 0x20, 0x6C, 0x39, 0xD0, 0x21, 0x5C, 0x2A, 0xD0, 0x22, 0x4C, 0x1B, 0xD0, -0x23, 0x3C, 0x0C, 0xD0, 0x24, 0x2B, 0xFD, 0xD0, 0x25, 0x1B, 0xEE, 0xD0, 0x26, 0x0B, 0xDF, 0xD0, -0x27, 0x05, 0x0B, 0x50, 0x27, 0xF4, 0xFC, 0x50, 0x28, 0xBF, 0xD9, 0x20, 0x28, 0xE4, 0xED, 0x50, -0x29, 0x60, 0xBE, 0x30, 0x01, 0x02, 0x03, 0x04, 0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x08, 0x07, 0x09, 0x00, 0x00, -0x3E, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, -0x00, 0x00, 0x54, 0x60, 0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x00, 0x0F, 0x00, 0x00, 0x46, 0x50, -0x00, 0x04, 0x00, 0x00, 0x54, 0x60, 0x01, 0x09, 0x00, 0x00, 0x46, 0x50, 0x00, 0x14, 0x00, 0x00, -0x54, 0x60, 0x01, 0x18, 0x00, 0x00, 0x46, 0x50, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x41, -0x4D, 0x54, 0x00, 0x53, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x54, 0x41, 0x53, 0x54, 0x00, 0x55, 0x5A, -0x54, 0x00, 0x55, 0x5A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Seoul */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x08, 0x85, 0x93, 0x7E, 0x78, -0xB0, 0xFE, 0x8D, 0xF0, 0xB8, 0x84, 0xB4, 0x78, 0xE2, 0x4F, 0x29, 0xF0, 0xED, 0xE1, 0x92, 0x80, -0xEE, 0x81, 0x09, 0xF0, 0xF0, 0x35, 0x78, 0x80, 0xFD, 0xA5, 0x0A, 0xF8, 0x20, 0xA3, 0x44, 0x70, -0x21, 0x6E, 0x3D, 0x60, 0x22, 0x83, 0x26, 0x70, 0x23, 0x4E, 0x1F, 0x60, 0x01, 0x00, 0x01, 0x03, -0x02, 0x03, 0x00, 0x01, 0x04, 0x01, 0x04, 0x01, 0x00, 0x00, 0x77, 0x88, 0x00, 0x00, 0x00, 0x00, -0x7E, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x00, -0x00, 0x00, 0x8C, 0xA0, 0x01, 0x04, 0x4B, 0x53, 0x54, 0x00, 0x4B, 0x44, 0x54, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Shanghai */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xB0, 0xFE, 0x9A, 0xA0, -0xC8, 0x5C, 0x01, 0x80, 0xC8, 0xFA, 0x27, 0x70, 0xC9, 0xD5, 0x0E, 0x80, 0xCA, 0xDB, 0x5A, 0xF0, -0x1E, 0xBA, 0x36, 0x00, 0x1F, 0x69, 0x7F, 0x70, 0x20, 0x7E, 0x68, 0x80, 0x21, 0x49, 0x61, 0x70, -0x22, 0x5E, 0x4A, 0x80, 0x23, 0x29, 0x43, 0x70, 0x24, 0x47, 0x67, 0x00, 0x25, 0x12, 0x5F, 0xF0, -0x26, 0x27, 0x49, 0x00, 0x26, 0xF2, 0x41, 0xF0, 0x28, 0x07, 0x2B, 0x00, 0x28, 0xD2, 0x23, 0xF0, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x00, 0x00, 0x71, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x04, 0x00, 0x00, 0x70, -0x80, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Singapore */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x17, 0x86, 0x83, 0x85, 0xA3, -0xBA, 0x67, 0x4E, 0x90, 0xC0, 0x0A, 0xE4, 0x60, 0xCA, 0xB3, 0xE5, 0x60, 0xCB, 0x91, 0x5F, 0x08, -0xD2, 0x48, 0x6D, 0xF0, 0xF7, 0xBA, 0x4D, 0x88, 0x16, 0x91, 0xF5, 0x08, 0x01, 0x02, 0x03, 0x04, -0x05, 0x04, 0x06, 0x07, 0x00, 0x00, 0x61, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, -0x00, 0x00, 0x67, 0x20, 0x01, 0x09, 0x00, 0x00, 0x67, 0x20, 0x00, 0x04, 0x00, 0x00, 0x69, 0x78, -0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x0F, 0x00, 0x00, 0x69, 0x78, 0x00, 0x13, 0x00, 0x00, -0x70, 0x80, 0x00, 0x13, 0x53, 0x4D, 0x54, 0x00, 0x4D, 0x41, 0x4C, 0x54, 0x00, 0x4D, 0x41, 0x4C, -0x53, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x53, 0x47, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Taipei */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xD1, 0x97, 0xD3, 0x00, -0xD2, 0x61, 0x7A, 0x70, 0xD3, 0x79, 0x06, 0x80, 0xD4, 0x42, 0xAD, 0xF0, 0xD5, 0x5A, 0x3A, 0x00, -0xD6, 0x23, 0xE1, 0x70, 0xD7, 0x3C, 0xBF, 0x00, 0xD8, 0x06, 0x66, 0x70, 0xD9, 0x1D, 0xF2, 0x80, -0xD9, 0xE7, 0x99, 0xF0, 0xDA, 0xFF, 0x26, 0x00, 0xDB, 0xC8, 0xCD, 0x70, 0xDC, 0xE0, 0x59, 0x80, -0xDD, 0xAA, 0x00, 0xF0, 0xDE, 0x72, 0x73, 0x00, 0xDF, 0xB5, 0x64, 0x70, 0xE0, 0x7C, 0x85, 0x00, -0xE1, 0x96, 0x97, 0xF0, 0xE2, 0x5D, 0xB8, 0x80, 0xE3, 0x77, 0xCB, 0x70, 0xE4, 0x3E, 0xEC, 0x00, -0xE5, 0x30, 0x20, 0x70, 0xE6, 0x21, 0x71, 0x00, 0xE7, 0x12, 0xA5, 0x70, 0xE8, 0x02, 0xA4, 0x80, -0xE8, 0xF3, 0xD8, 0xF0, 0xE9, 0xE3, 0xD8, 0x00, 0xEA, 0xD5, 0x0C, 0x70, 0xEB, 0xC5, 0x0B, 0x80, -0xEC, 0xB6, 0x3F, 0xF0, 0xED, 0xF7, 0xFC, 0x00, 0xEE, 0x98, 0xC4, 0xF0, 0xEF, 0xD9, 0x2F, 0x80, -0xF0, 0x79, 0xF8, 0x70, 0x07, 0xFC, 0x56, 0x00, 0x08, 0xED, 0x8A, 0x70, 0x09, 0xDD, 0x89, 0x80, -0x0A, 0xCE, 0xBD, 0xF0, 0x13, 0xBC, 0xD5, 0x00, 0x14, 0x36, 0x10, 0xF0, 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, 0x00, 0x7E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, -0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Tashkent */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x18, 0xAA, 0x19, 0x83, 0x08, -0xB5, 0xA3, 0xEF, 0x30, 0x15, 0x27, 0x7D, 0xA0, 0x16, 0x18, 0xB2, 0x10, 0x17, 0x08, 0xB1, 0x20, -0x17, 0xF9, 0xE5, 0x90, 0x18, 0xE9, 0xE4, 0xA0, 0x19, 0xDB, 0x19, 0x10, 0x1A, 0xCC, 0x69, 0xA0, -0x1B, 0xBC, 0x76, 0xC0, 0x1C, 0xAC, 0x67, 0xC0, 0x1D, 0x9C, 0x58, 0xC0, 0x1E, 0x8C, 0x49, 0xC0, -0x1F, 0x7C, 0x3A, 0xC0, 0x20, 0x6C, 0x2B, 0xC0, 0x21, 0x5C, 0x1C, 0xC0, 0x22, 0x4C, 0x0D, 0xC0, -0x23, 0x3B, 0xFE, 0xC0, 0x24, 0x2B, 0xEF, 0xC0, 0x25, 0x1B, 0xE0, 0xC0, 0x26, 0x0B, 0xD1, 0xC0, -0x27, 0x04, 0xFD, 0x40, 0x27, 0xF4, 0xEE, 0x40, 0x28, 0xBF, 0xD9, 0x20, 0x28, 0xE4, 0xED, 0x50, -0x29, 0x60, 0xBE, 0x30, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x08, 0x07, 0x09, 0x00, 0x00, -0x40, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, 0x01, 0x09, -0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, -0x01, 0x09, 0x00, 0x00, 0x54, 0x60, 0x01, 0x09, 0x00, 0x00, 0x46, 0x50, 0x00, 0x0F, 0x00, 0x00, -0x54, 0x60, 0x01, 0x13, 0x00, 0x00, 0x46, 0x50, 0x00, 0x0F, 0x4C, 0x4D, 0x54, 0x00, 0x54, 0x41, -0x53, 0x54, 0x00, 0x54, 0x41, 0x53, 0x53, 0x54, 0x00, 0x55, 0x5A, 0x54, 0x00, 0x55, 0x5A, 0x53, -0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Tbilisi */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x19, 0xAA, 0x19, 0x99, 0xFC, -0xE7, 0xDA, 0x0C, 0x50, 0x15, 0x27, 0x99, 0xC0, 0x16, 0x18, 0xCE, 0x30, 0x17, 0x08, 0xCD, 0x40, -0x17, 0xFA, 0x01, 0xB0, 0x18, 0xEA, 0x00, 0xC0, 0x19, 0xDB, 0x35, 0x30, 0x1A, 0xCC, 0x85, 0xC0, -0x1B, 0xBC, 0x92, 0xE0, 0x1C, 0xAC, 0x83, 0xE0, 0x1D, 0x9C, 0x74, 0xE0, 0x1E, 0x8C, 0x65, 0xE0, -0x1F, 0x7C, 0x56, 0xE0, 0x20, 0x6C, 0x47, 0xE0, 0x21, 0x5C, 0x38, 0xE0, 0x22, 0x4C, 0x29, 0xE0, -0x23, 0x3C, 0x1A, 0xE0, 0x24, 0x2C, 0x0B, 0xE0, 0x25, 0x1B, 0xFC, 0xE0, 0x26, 0x0B, 0xED, 0xE0, -0x27, 0x05, 0x19, 0x60, 0x27, 0xF5, 0x0A, 0x60, 0x28, 0x00, 0xCB, 0xC0, 0x28, 0xE5, 0x09, 0x70, -0x29, 0x60, 0xDA, 0x50, 0x29, 0xD4, 0xDE, 0x50, 0x2A, 0xC4, 0xC1, 0x40, 0x2B, 0xB4, 0xC0, 0x50, -0x2C, 0xA4, 0xA3, 0x40, 0x2D, 0x94, 0xA2, 0x50, 0x2E, 0x84, 0x85, 0x40, 0x2F, 0x74, 0x76, 0x40, -0x30, 0x64, 0x59, 0x30, 0x31, 0x5D, 0x92, 0xC0, 0x33, 0x3D, 0x66, 0xB0, 0x34, 0x52, 0x41, 0xB0, -0x35, 0x1D, 0x56, 0xC0, 0x36, 0x32, 0x23, 0xB0, 0x36, 0xFD, 0x38, 0xC0, 0x38, 0x1B, 0x40, 0x30, -0x38, 0xDD, 0x1A, 0xC0, 0x39, 0xFB, 0x22, 0x30, 0x3A, 0xBC, 0xFC, 0xC0, 0x3B, 0xDB, 0x04, 0x30, -0x3C, 0xA6, 0x19, 0x40, 0x3D, 0xBA, 0xE6, 0x30, 0x3E, 0x85, 0xFB, 0x40, 0x3F, 0x9A, 0xC8, 0x30, -0x40, 0x65, 0xDD, 0x40, 0x40, 0xDD, 0xC7, 0xB0, 0x41, 0x84, 0x1C, 0xF0, 0x42, 0x45, 0xE9, 0x70, -0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x08, 0x07, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x0B, -0x0A, 0x0B, 0x0A, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x08, 0x07, 0x0B, 0x00, 0x00, 0x2A, 0x04, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, -0x05, 0x00, 0x00, 0x46, 0x50, 0x01, 0x0A, 0x00, 0x00, 0x38, 0x40, 0x00, 0x05, 0x00, 0x00, 0x38, -0x40, 0x00, 0x05, 0x00, 0x00, 0x46, 0x50, 0x01, 0x0A, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0A, 0x00, -0x00, 0x2A, 0x30, 0x00, 0x10, 0x00, 0x00, 0x38, 0x40, 0x01, 0x14, 0x00, 0x00, 0x2A, 0x30, 0x00, -0x10, 0x00, 0x00, 0x46, 0x50, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x00, 0x10, 0x54, 0x42, 0x4D, -0x54, 0x00, 0x54, 0x42, 0x49, 0x54, 0x00, 0x54, 0x42, 0x49, 0x53, 0x54, 0x00, 0x47, 0x45, 0x54, -0x00, 0x47, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Tehran */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0x9A, 0x6C, 0x7D, 0xC8, -0xD2, 0xDB, 0x12, 0xC8, 0x0E, 0xBB, 0xA2, 0x48, 0x0F, 0x74, 0x2D, 0x40, 0x10, 0x8E, 0x40, 0x30, -0x10, 0xED, 0x3A, 0x40, 0x11, 0x55, 0x67, 0xC8, 0x12, 0x45, 0x4A, 0xB8, 0x13, 0x37, 0xEC, 0xC8, -0x14, 0x2D, 0x15, 0xB8, 0x28, 0x20, 0x76, 0xC8, 0x28, 0xDB, 0x9D, 0xB8, 0x29, 0xCB, 0x9C, 0xC8, -0x2A, 0xBE, 0x22, 0xB8, 0x2B, 0xAC, 0xD0, 0x48, 0x2C, 0x9F, 0x56, 0x38, 0x2D, 0x8E, 0x03, 0xC8, -0x2E, 0x80, 0x89, 0xB8, 0x2F, 0x6F, 0x37, 0x48, 0x30, 0x61, 0xBD, 0x38, 0x31, 0x50, 0x6A, 0xC8, -0x32, 0x42, 0xF0, 0xB8, 0x33, 0x32, 0xEF, 0xC8, 0x34, 0x25, 0x75, 0xB8, 0x35, 0x14, 0x23, 0x48, -0x36, 0x06, 0xA9, 0x38, 0x36, 0xF5, 0x56, 0xC8, 0x37, 0xE7, 0xDC, 0xB8, 0x38, 0xD6, 0x8A, 0x48, -0x39, 0xC9, 0x10, 0x38, 0x3A, 0xB9, 0x0F, 0x48, 0x3B, 0xAB, 0x95, 0x38, 0x3C, 0x9A, 0x42, 0xC8, -0x3D, 0x8C, 0xC8, 0xB8, 0x3E, 0x7B, 0x76, 0x48, 0x3F, 0x6D, 0xFC, 0x38, 0x40, 0x5C, 0xA9, 0xC8, -0x41, 0x4F, 0x2F, 0xB8, 0x42, 0x3F, 0x2E, 0xC8, 0x43, 0x31, 0xB4, 0xB8, 0x01, 0x02, 0x04, 0x03, -0x04, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, -0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, -0x05, 0x02, 0x05, 0x02, 0x00, 0x00, 0x30, 0x38, 0x00, 0x00, 0x00, 0x00, 0x30, 0x38, 0x00, 0x04, -0x00, 0x00, 0x31, 0x38, 0x00, 0x08, 0x00, 0x00, 0x46, 0x50, 0x01, 0x0D, 0x00, 0x00, 0x38, 0x40, -0x00, 0x08, 0x00, 0x00, 0x3F, 0x48, 0x01, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x54, 0x4D, 0x54, 0x00, -0x49, 0x52, 0x53, 0x54, 0x00, 0x49, 0x52, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Tel_Aviv */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x9E, 0x30, 0x45, 0x88, -0xC8, 0x59, 0xB2, 0xE0, 0xCC, 0xE5, 0xC1, 0x50, 0xCD, 0xAC, 0xFE, 0x00, 0xCE, 0xC6, 0xF4, 0xD0, -0xCF, 0x8F, 0x66, 0xE0, 0xD0, 0xA9, 0x79, 0xD0, 0xD1, 0x84, 0x60, 0xE0, 0xD2, 0x8A, 0xC9, 0x70, -0xD3, 0x65, 0xB0, 0x80, 0xD4, 0x6B, 0xE0, 0xD0, 0xD7, 0x5A, 0x14, 0x60, 0xD7, 0xDF, 0x1F, 0xC0, -0xD8, 0x2F, 0xB5, 0x70, 0xD9, 0x1E, 0x46, 0xE0, 0xDA, 0x10, 0xE8, 0xF0, 0xDA, 0xEB, 0xB3, 0xE0, -0xDB, 0xB4, 0x34, 0x00, 0xDC, 0xB9, 0x20, 0xE0, 0xDD, 0xE0, 0x8D, 0x00, 0xDE, 0xB4, 0xCE, 0x80, -0xDF, 0xA4, 0xBF, 0x80, 0xE0, 0x8B, 0x76, 0x00, 0xE1, 0x56, 0x7D, 0x00, 0xE2, 0xBE, 0x4A, 0x60, -0xE3, 0x36, 0x34, 0xD0, 0xE4, 0x9C, 0xF7, 0x00, 0xE5, 0x16, 0x16, 0xD0, 0xE6, 0x74, 0xD3, 0xE0, -0xE7, 0x11, 0xD2, 0x80, 0xE8, 0x27, 0xFF, 0x00, 0xE8, 0xE8, 0x4F, 0xD0, 0x08, 0x7C, 0x8B, 0xE0, -0x08, 0xFD, 0xB0, 0xD0, 0x09, 0xF6, 0xEA, 0x60, 0x0A, 0xA6, 0x33, 0xD0, 0x1C, 0xBE, 0xF8, 0xE0, -0x1D, 0x89, 0xF1, 0xD0, 0x1E, 0xCC, 0xFF, 0x60, 0x1F, 0x60, 0x99, 0x50, 0x20, 0x82, 0xB1, 0x60, -0x21, 0x49, 0xB5, 0xD0, 0x22, 0x5D, 0x4D, 0x60, 0x23, 0x1F, 0x0B, 0xD0, 0x24, 0x5A, 0x30, 0x60, -0x25, 0x00, 0x3F, 0x50, 0x26, 0x0B, 0xED, 0xE0, 0x26, 0xD6, 0xE6, 0xD0, 0x27, 0xEB, 0xCF, 0xE0, -0x28, 0xC0, 0x03, 0x50, 0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xA9, 0x1F, 0xD0, 0x2B, 0xBB, 0x65, 0xE0, -0x2C, 0x89, 0x01, 0xD0, 0x2D, 0x9B, 0x47, 0xE0, 0x2E, 0x5F, 0xA9, 0x50, 0x2F, 0x7B, 0x29, 0xE0, -0x30, 0x48, 0xC5, 0xD0, 0x31, 0x48, 0x96, 0xE0, 0x32, 0x3C, 0x6E, 0x50, 0x33, 0x31, 0xB3, 0x60, -0x34, 0x1A, 0xFE, 0xD0, 0x35, 0x11, 0x95, 0x60, 0x35, 0xF1, 0xA6, 0x50, 0x37, 0x04, 0x08, 0x80, -0x37, 0xCF, 0x01, 0x70, 0x38, 0xF6, 0x5F, 0x80, 0x39, 0xDC, 0xF9, 0xE0, 0x3A, 0xD0, 0xED, 0x70, -0x3B, 0xAE, 0x5B, 0x60, 0x3C, 0xA3, 0xA0, 0x70, 0x3D, 0xA0, 0xB2, 0x60, 0x3E, 0x83, 0x82, 0x70, -0x3F, 0x7C, 0x9F, 0xE0, 0x40, 0x73, 0x36, 0x70, 0x41, 0x50, 0xA4, 0x60, 0x42, 0x4C, 0x8F, 0x00, -0x43, 0x48, 0x4F, 0x70, 0x44, 0x2C, 0x71, 0x00, 0x45, 0x1E, 0xF6, 0xF0, 0x46, 0x0C, 0x53, 0x00, -0x46, 0xEC, 0x63, 0xF0, 0x47, 0xEC, 0x35, 0x00, 0x48, 0xE7, 0xF5, 0x70, 0x49, 0xCC, 0x17, 0x00, -0x4A, 0xBE, 0x9C, 0xF0, 0x4B, 0xAB, 0xF9, 0x00, 0x4C, 0x8C, 0x09, 0xF0, 0x4D, 0x95, 0x15, 0x80, -0x4E, 0x87, 0x9B, 0x70, 0x4F, 0x74, 0xF7, 0x80, 0x50, 0x5E, 0x42, 0xF0, 0x51, 0x54, 0xD9, 0x80, -0x52, 0x2B, 0xAF, 0xF0, 0x53, 0x34, 0xBB, 0x80, 0x54, 0x27, 0x41, 0x70, 0x55, 0x14, 0x9D, 0x80, -0x55, 0xFD, 0xE8, 0xF0, 0x56, 0xFD, 0xBA, 0x00, 0x57, 0xF9, 0x7A, 0x70, 0x58, 0xDD, 0x9C, 0x00, -0x59, 0xC6, 0xE7, 0x70, 0x5A, 0xBD, 0x7E, 0x00, 0x5B, 0x9D, 0x8E, 0xF0, 0x5C, 0x9D, 0x60, 0x00, -0x5D, 0x99, 0x20, 0x70, 0x5E, 0x7D, 0x42, 0x00, 0x5F, 0x6F, 0xC7, 0xF0, 0x60, 0x5D, 0x24, 0x00, -0x61, 0x3D, 0x34, 0xF0, 0x62, 0x46, 0x40, 0x80, 0x63, 0x38, 0xC6, 0x70, 0x64, 0x26, 0x22, 0x80, -0x65, 0x0F, 0x6D, 0xF0, 0x66, 0x06, 0x04, 0x80, 0x67, 0x01, 0xC4, 0xF0, 0x67, 0xE5, 0xE6, 0x80, -0x68, 0xD8, 0x6C, 0x70, 0x69, 0xC5, 0xC8, 0x80, 0x6A, 0xAF, 0x13, 0xF0, 0x6B, 0xA5, 0xAA, 0x80, -0x6C, 0xAA, 0xA5, 0x70, 0x6D, 0x8E, 0xC7, 0x00, 0x6E, 0x78, 0x12, 0x70, 0x6F, 0x6E, 0xA9, 0x00, -0x70, 0x4E, 0xB9, 0xF0, 0x71, 0x4E, 0x8B, 0x00, 0x72, 0x4A, 0x4B, 0x70, 0x73, 0x2E, 0x6D, 0x00, -0x74, 0x17, 0xB8, 0x70, 0x75, 0x0E, 0x4F, 0x00, 0x75, 0xEE, 0x5F, 0xF0, 0x76, 0xF7, 0x6B, 0x80, -0x77, 0xE9, 0xF1, 0x70, 0x78, 0xD7, 0x4D, 0x80, 0x79, 0xB7, 0x5E, 0x70, 0x7A, 0xB7, 0x2F, 0x80, -0x7B, 0xB2, 0xEF, 0xF0, 0x7C, 0x97, 0x11, 0x80, 0x7D, 0x89, 0x97, 0x70, 0x7E, 0x76, 0xF3, 0x80, -0x7F, 0x57, 0x04, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x00, 0x00, 0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, -0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0C, 0x4A, 0x4D, 0x54, 0x00, 0x49, 0x44, -0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x49, 0x44, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, - -/* Asia/Thimbu */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xD5, 0xE6, 0x15, 0x74, -0x21, 0x61, 0x4D, 0xA8, 0x01, 0x02, 0x00, 0x00, 0x54, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x58, -0x00, 0x04, 0x00, 0x00, 0x54, 0x60, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, -0x42, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Thimphu */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xD5, 0xE6, 0x15, 0x74, -0x21, 0x61, 0x4D, 0xA8, 0x01, 0x02, 0x00, 0x00, 0x54, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x58, -0x00, 0x04, 0x00, 0x00, 0x54, 0x60, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, -0x42, 0x54, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Tokyo */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xC3, 0xCE, 0x85, 0x70, -0xD7, 0x3E, 0x1E, 0x90, 0xD7, 0xEC, 0x16, 0x80, 0xD8, 0xF9, 0x16, 0x90, 0xD9, 0xCB, 0xF8, 0x80, -0xDB, 0x07, 0x1D, 0x10, 0xDB, 0xAB, 0xDA, 0x80, 0xDC, 0xE6, 0xFF, 0x10, 0xDD, 0x8B, 0xBC, 0x80, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x00, 0x00, -0x00, 0x8C, 0xA0, 0x01, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x08, 0x43, 0x4A, 0x54, 0x00, 0x4A, -0x44, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Ujung_Pandang */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0xA1, 0xF2, 0x5D, 0x90, -0xBA, 0x16, 0xD5, 0x90, 0xCB, 0x88, 0x1D, 0x80, 0xD2, 0x11, 0x0E, 0xF0, 0x01, 0x02, 0x03, 0x02, -0x00, 0x00, 0x6F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6F, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x70, 0x80, -0x00, 0x08, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x4D, 0x54, 0x00, -0x43, 0x49, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* Asia/Ulaanbaatar */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x86, 0xD3, 0xEE, 0x4C, -0x0F, 0x0B, 0xDC, 0x90, 0x18, 0xE9, 0xC8, 0x80, 0x19, 0xDA, 0xFC, 0xF0, 0x1A, 0xCC, 0x4D, 0x80, -0x1B, 0xBC, 0x30, 0x70, 0x1C, 0xAC, 0x2F, 0x80, 0x1D, 0x9C, 0x12, 0x70, 0x1E, 0x8C, 0x11, 0x80, -0x1F, 0x7B, 0xF4, 0x70, 0x20, 0x6B, 0xF3, 0x80, 0x21, 0x5B, 0xD6, 0x70, 0x22, 0x4B, 0xD5, 0x80, -0x23, 0x3B, 0xB8, 0x70, 0x24, 0x2B, 0xB7, 0x80, 0x25, 0x1B, 0x9A, 0x70, 0x26, 0x0B, 0x99, 0x80, -0x27, 0x04, 0xB6, 0xF0, 0x27, 0xF4, 0xB6, 0x00, 0x28, 0xE4, 0x98, 0xF0, 0x29, 0xD4, 0x98, 0x00, -0x2A, 0xC4, 0x7A, 0xF0, 0x2B, 0xB4, 0x7A, 0x00, 0x2C, 0xA4, 0x5C, 0xF0, 0x2D, 0x94, 0x5C, 0x00, -0x2E, 0x84, 0x3E, 0xF0, 0x2F, 0x74, 0x3E, 0x00, 0x30, 0x64, 0x20, 0xF0, 0x31, 0x5D, 0x5A, 0x80, -0x32, 0x4D, 0x3D, 0x70, 0x33, 0x3D, 0x3C, 0x80, 0x34, 0x2D, 0x1F, 0x70, 0x35, 0x1D, 0x1E, 0x80, -0x36, 0x0D, 0x01, 0x70, 0x3A, 0xE9, 0xB3, 0xA0, 0x3B, 0xB4, 0xAC, 0x90, 0x3C, 0xA4, 0xAB, 0xA0, -0x3D, 0x94, 0x8E, 0x90, 0x3E, 0x84, 0x8D, 0xA0, 0x3F, 0x74, 0x70, 0x90, 0x40, 0x64, 0x6F, 0xA0, -0x41, 0x54, 0x52, 0x90, 0x42, 0x44, 0x51, 0xA0, 0x43, 0x34, 0x34, 0x90, 0x44, 0x24, 0x33, 0xA0, -0x45, 0x1D, 0x51, 0x10, 0x46, 0x0D, 0x50, 0x20, 0x46, 0xFD, 0x33, 0x10, 0x47, 0xED, 0x32, 0x20, -0x48, 0xDD, 0x15, 0x10, 0x49, 0xCD, 0x14, 0x20, 0x4A, 0xBC, 0xF7, 0x10, 0x4B, 0xAC, 0xF6, 0x20, -0x4C, 0x9C, 0xD9, 0x10, 0x4D, 0x8C, 0xD8, 0x20, 0x4E, 0x7C, 0xBB, 0x10, 0x4F, 0x75, 0xF4, 0xA0, -0x50, 0x65, 0xD7, 0x90, 0x51, 0x55, 0xD6, 0xA0, 0x52, 0x45, 0xB9, 0x90, 0x53, 0x35, 0xB8, 0xA0, -0x54, 0x25, 0x9B, 0x90, 0x55, 0x15, 0x9A, 0xA0, 0x56, 0x05, 0x7D, 0x90, 0x56, 0xF5, 0x7C, 0xA0, -0x57, 0xE5, 0x5F, 0x90, 0x58, 0xD5, 0x5E, 0xA0, 0x59, 0xCE, 0x7C, 0x10, 0x5A, 0xBE, 0x7B, 0x20, -0x5B, 0xAE, 0x5E, 0x10, 0x5C, 0x9E, 0x5D, 0x20, 0x5D, 0x8E, 0x40, 0x10, 0x5E, 0x7E, 0x3F, 0x20, -0x5F, 0x6E, 0x22, 0x10, 0x60, 0x5E, 0x21, 0x20, 0x61, 0x4E, 0x04, 0x10, 0x62, 0x3E, 0x03, 0x20, -0x63, 0x2D, 0xE6, 0x10, 0x64, 0x1D, 0xE5, 0x20, 0x65, 0x17, 0x02, 0x90, 0x66, 0x07, 0x01, 0xA0, -0x66, 0xF6, 0xE4, 0x90, 0x67, 0xE6, 0xE3, 0xA0, 0x68, 0xD6, 0xC6, 0x90, 0x69, 0xC6, 0xC5, 0xA0, -0x6A, 0xB6, 0xA8, 0x90, 0x6B, 0xA6, 0xA7, 0xA0, 0x6C, 0x96, 0x8A, 0x90, 0x6D, 0x86, 0x89, 0xA0, -0x6E, 0x7F, 0xA7, 0x10, 0x6F, 0x6F, 0xA6, 0x20, 0x70, 0x5F, 0x89, 0x10, 0x71, 0x4F, 0x88, 0x20, -0x72, 0x3F, 0x6B, 0x10, 0x73, 0x2F, 0x6A, 0x20, 0x74, 0x1F, 0x4D, 0x10, 0x75, 0x0F, 0x4C, 0x20, -0x75, 0xFF, 0x2F, 0x10, 0x76, 0xEF, 0x2E, 0x20, 0x77, 0xDF, 0x11, 0x10, 0x78, 0xCF, 0x10, 0x20, -0x79, 0xC8, 0x2D, 0x90, 0x7A, 0xB8, 0x2C, 0xA0, 0x7B, 0xA8, 0x0F, 0x90, 0x7C, 0x98, 0x0E, 0xA0, -0x7D, 0x87, 0xF1, 0x90, 0x7E, 0x77, 0xF0, 0xA0, 0x7F, 0x67, 0xD3, 0x90, 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, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -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, 0x64, 0x34, 0x00, 0x00, 0x00, 0x00, -0x62, 0x70, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x09, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, -0x4C, 0x4D, 0x54, 0x00, 0x55, 0x4C, 0x41, 0x54, 0x00, 0x55, 0x4C, 0x41, 0x53, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Ulan_Bator */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x86, 0xD3, 0xEE, 0x4C, -0x0F, 0x0B, 0xDC, 0x90, 0x18, 0xE9, 0xC8, 0x80, 0x19, 0xDA, 0xFC, 0xF0, 0x1A, 0xCC, 0x4D, 0x80, -0x1B, 0xBC, 0x30, 0x70, 0x1C, 0xAC, 0x2F, 0x80, 0x1D, 0x9C, 0x12, 0x70, 0x1E, 0x8C, 0x11, 0x80, -0x1F, 0x7B, 0xF4, 0x70, 0x20, 0x6B, 0xF3, 0x80, 0x21, 0x5B, 0xD6, 0x70, 0x22, 0x4B, 0xD5, 0x80, -0x23, 0x3B, 0xB8, 0x70, 0x24, 0x2B, 0xB7, 0x80, 0x25, 0x1B, 0x9A, 0x70, 0x26, 0x0B, 0x99, 0x80, -0x27, 0x04, 0xB6, 0xF0, 0x27, 0xF4, 0xB6, 0x00, 0x28, 0xE4, 0x98, 0xF0, 0x29, 0xD4, 0x98, 0x00, -0x2A, 0xC4, 0x7A, 0xF0, 0x2B, 0xB4, 0x7A, 0x00, 0x2C, 0xA4, 0x5C, 0xF0, 0x2D, 0x94, 0x5C, 0x00, -0x2E, 0x84, 0x3E, 0xF0, 0x2F, 0x74, 0x3E, 0x00, 0x30, 0x64, 0x20, 0xF0, 0x31, 0x5D, 0x5A, 0x80, -0x32, 0x4D, 0x3D, 0x70, 0x33, 0x3D, 0x3C, 0x80, 0x34, 0x2D, 0x1F, 0x70, 0x35, 0x1D, 0x1E, 0x80, -0x36, 0x0D, 0x01, 0x70, 0x3A, 0xE9, 0xB3, 0xA0, 0x3B, 0xB4, 0xAC, 0x90, 0x3C, 0xA4, 0xAB, 0xA0, -0x3D, 0x94, 0x8E, 0x90, 0x3E, 0x84, 0x8D, 0xA0, 0x3F, 0x74, 0x70, 0x90, 0x40, 0x64, 0x6F, 0xA0, -0x41, 0x54, 0x52, 0x90, 0x42, 0x44, 0x51, 0xA0, 0x43, 0x34, 0x34, 0x90, 0x44, 0x24, 0x33, 0xA0, -0x45, 0x1D, 0x51, 0x10, 0x46, 0x0D, 0x50, 0x20, 0x46, 0xFD, 0x33, 0x10, 0x47, 0xED, 0x32, 0x20, -0x48, 0xDD, 0x15, 0x10, 0x49, 0xCD, 0x14, 0x20, 0x4A, 0xBC, 0xF7, 0x10, 0x4B, 0xAC, 0xF6, 0x20, -0x4C, 0x9C, 0xD9, 0x10, 0x4D, 0x8C, 0xD8, 0x20, 0x4E, 0x7C, 0xBB, 0x10, 0x4F, 0x75, 0xF4, 0xA0, -0x50, 0x65, 0xD7, 0x90, 0x51, 0x55, 0xD6, 0xA0, 0x52, 0x45, 0xB9, 0x90, 0x53, 0x35, 0xB8, 0xA0, -0x54, 0x25, 0x9B, 0x90, 0x55, 0x15, 0x9A, 0xA0, 0x56, 0x05, 0x7D, 0x90, 0x56, 0xF5, 0x7C, 0xA0, -0x57, 0xE5, 0x5F, 0x90, 0x58, 0xD5, 0x5E, 0xA0, 0x59, 0xCE, 0x7C, 0x10, 0x5A, 0xBE, 0x7B, 0x20, -0x5B, 0xAE, 0x5E, 0x10, 0x5C, 0x9E, 0x5D, 0x20, 0x5D, 0x8E, 0x40, 0x10, 0x5E, 0x7E, 0x3F, 0x20, -0x5F, 0x6E, 0x22, 0x10, 0x60, 0x5E, 0x21, 0x20, 0x61, 0x4E, 0x04, 0x10, 0x62, 0x3E, 0x03, 0x20, -0x63, 0x2D, 0xE6, 0x10, 0x64, 0x1D, 0xE5, 0x20, 0x65, 0x17, 0x02, 0x90, 0x66, 0x07, 0x01, 0xA0, -0x66, 0xF6, 0xE4, 0x90, 0x67, 0xE6, 0xE3, 0xA0, 0x68, 0xD6, 0xC6, 0x90, 0x69, 0xC6, 0xC5, 0xA0, -0x6A, 0xB6, 0xA8, 0x90, 0x6B, 0xA6, 0xA7, 0xA0, 0x6C, 0x96, 0x8A, 0x90, 0x6D, 0x86, 0x89, 0xA0, -0x6E, 0x7F, 0xA7, 0x10, 0x6F, 0x6F, 0xA6, 0x20, 0x70, 0x5F, 0x89, 0x10, 0x71, 0x4F, 0x88, 0x20, -0x72, 0x3F, 0x6B, 0x10, 0x73, 0x2F, 0x6A, 0x20, 0x74, 0x1F, 0x4D, 0x10, 0x75, 0x0F, 0x4C, 0x20, -0x75, 0xFF, 0x2F, 0x10, 0x76, 0xEF, 0x2E, 0x20, 0x77, 0xDF, 0x11, 0x10, 0x78, 0xCF, 0x10, 0x20, -0x79, 0xC8, 0x2D, 0x90, 0x7A, 0xB8, 0x2C, 0xA0, 0x7B, 0xA8, 0x0F, 0x90, 0x7C, 0x98, 0x0E, 0xA0, -0x7D, 0x87, 0xF1, 0x90, 0x7E, 0x77, 0xF0, 0xA0, 0x7F, 0x67, 0xD3, 0x90, 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, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -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, 0x64, 0x34, 0x00, 0x00, 0x00, 0x00, -0x62, 0x70, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x09, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, -0x4C, 0x4D, 0x54, 0x00, 0x55, 0x4C, 0x41, 0x54, 0x00, 0x55, 0x4C, 0x41, 0x53, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Urumqi */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xB0, 0xFE, 0xBA, 0x64, -0x13, 0x6D, 0xD7, 0x20, 0x1E, 0xBA, 0x36, 0x00, 0x1F, 0x69, 0x7F, 0x70, 0x20, 0x7E, 0x68, 0x80, -0x21, 0x49, 0x61, 0x70, 0x22, 0x5E, 0x4A, 0x80, 0x23, 0x29, 0x43, 0x70, 0x24, 0x47, 0x67, 0x00, -0x25, 0x12, 0x5F, 0xF0, 0x26, 0x27, 0x49, 0x00, 0x26, 0xF2, 0x41, 0xF0, 0x28, 0x07, 0x2B, 0x00, -0x28, 0xD2, 0x23, 0xF0, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x00, 0x00, 0x52, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x00, 0x00, -0x7E, 0x90, 0x01, 0x09, 0x00, 0x00, 0x70, 0x80, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x55, 0x52, -0x55, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, - -/* Asia/Vientiane */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0C, 0x88, 0x6F, 0x46, 0x50, -0x91, 0x5F, 0xEE, 0xD0, 0x93, 0x85, 0xB1, 0x90, 0xB7, 0x41, 0xBC, 0x00, 0x01, 0x02, 0x03, 0x02, -0x00, 0x00, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x63, 0xEC, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, -0x00, 0x08, 0x00, 0x00, 0x70, 0x80, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, -0x49, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Vladivostok */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 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, -0x1F, 0x7C, 0x02, 0x80, 0x20, 0x6B, 0xF3, 0x80, 0x21, 0x5B, 0xE4, 0x80, 0x22, 0x4B, 0xD5, 0x80, -0x23, 0x3B, 0xC6, 0x80, 0x24, 0x2B, 0xB7, 0x80, 0x25, 0x1B, 0xA8, 0x80, 0x26, 0x0B, 0x99, 0x80, -0x27, 0x04, 0xC5, 0x00, 0x27, 0xF4, 0xB6, 0x00, 0x28, 0xE4, 0xB5, 0x10, 0x29, 0x78, 0x5D, 0x10, -0x29, 0xD4, 0x6D, 0xD0, 0x2A, 0xC4, 0x50, 0xC0, 0x2B, 0xB4, 0x7A, 0x00, 0x2C, 0xA4, 0x6B, 0x00, -0x2D, 0x94, 0x5C, 0x00, 0x2E, 0x84, 0x4D, 0x00, 0x2F, 0x74, 0x3E, 0x00, 0x30, 0x64, 0x2F, 0x00, -0x31, 0x5D, 0x5A, 0x80, 0x32, 0x72, 0x35, 0x80, 0x33, 0x3D, 0x3C, 0x80, 0x34, 0x52, 0x17, 0x80, -0x35, 0x1D, 0x1E, 0x80, 0x36, 0x31, 0xF9, 0x80, 0x36, 0xFD, 0x00, 0x80, 0x38, 0x1B, 0x16, 0x00, -0x38, 0xDC, 0xE2, 0x80, 0x39, 0xFA, 0xF8, 0x00, 0x3A, 0xBC, 0xC4, 0x80, 0x3B, 0xDA, 0xDA, 0x00, -0x3C, 0xA5, 0xE1, 0x00, 0x3D, 0xBA, 0xBC, 0x00, 0x3E, 0x85, 0xC3, 0x00, 0x3F, 0x9A, 0x9E, 0x00, -0x40, 0x65, 0xA5, 0x00, 0x41, 0x83, 0xBA, 0x80, 0x42, 0x45, 0x87, 0x00, 0x43, 0x63, 0x9C, 0x80, -0x44, 0x25, 0x69, 0x00, 0x45, 0x43, 0x7E, 0x80, 0x46, 0x05, 0x4B, 0x00, 0x47, 0x23, 0x60, 0x80, -0x47, 0xEE, 0x67, 0x80, 0x49, 0x03, 0x42, 0x80, 0x49, 0xCE, 0x49, 0x80, 0x4A, 0xE3, 0x24, 0x80, -0x4B, 0xAE, 0x2B, 0x80, 0x4C, 0xCC, 0x41, 0x00, 0x4D, 0x8E, 0x0D, 0x80, 0x4E, 0xAC, 0x23, 0x00, -0x4F, 0x6D, 0xEF, 0x80, 0x50, 0x8C, 0x05, 0x00, 0x51, 0x57, 0x0C, 0x00, 0x52, 0x6B, 0xE7, 0x00, -0x53, 0x36, 0xEE, 0x00, 0x54, 0x4B, 0xC9, 0x00, 0x55, 0x16, 0xD0, 0x00, 0x56, 0x2B, 0xAB, 0x00, -0x56, 0xF6, 0xB2, 0x00, 0x58, 0x14, 0xC7, 0x80, 0x58, 0xD6, 0x94, 0x00, 0x59, 0xF4, 0xA9, 0x80, -0x5A, 0xB6, 0x76, 0x00, 0x5B, 0xD4, 0x8B, 0x80, 0x5C, 0x9F, 0x92, 0x80, 0x5D, 0xB4, 0x6D, 0x80, -0x5E, 0x7F, 0x74, 0x80, 0x5F, 0x94, 0x4F, 0x80, 0x60, 0x5F, 0x56, 0x80, 0x61, 0x7D, 0x6C, 0x00, -0x62, 0x3F, 0x38, 0x80, 0x63, 0x5D, 0x4E, 0x00, 0x64, 0x1F, 0x1A, 0x80, 0x65, 0x3D, 0x30, 0x00, -0x66, 0x08, 0x37, 0x00, 0x67, 0x1D, 0x12, 0x00, 0x67, 0xE8, 0x19, 0x00, 0x68, 0xFC, 0xF4, 0x00, -0x69, 0xC7, 0xFB, 0x00, 0x6A, 0xDC, 0xD6, 0x00, 0x6B, 0xA7, 0xDD, 0x00, 0x6C, 0xC5, 0xF2, 0x80, -0x6D, 0x87, 0xBF, 0x00, 0x6E, 0xA5, 0xD4, 0x80, 0x6F, 0x67, 0xA1, 0x00, 0x70, 0x85, 0xB6, 0x80, -0x71, 0x50, 0xBD, 0x80, 0x72, 0x65, 0x98, 0x80, 0x73, 0x30, 0x9F, 0x80, 0x74, 0x45, 0x7A, 0x80, -0x75, 0x10, 0x81, 0x80, 0x76, 0x2E, 0x97, 0x00, 0x76, 0xF0, 0x63, 0x80, 0x78, 0x0E, 0x79, 0x00, -0x78, 0xD0, 0x45, 0x80, 0x79, 0xEE, 0x5B, 0x00, 0x7A, 0xB0, 0x27, 0x80, 0x7B, 0xCE, 0x3D, 0x00, -0x7C, 0x99, 0x44, 0x00, 0x7D, 0xAE, 0x1F, 0x00, 0x7E, 0x79, 0x26, 0x00, 0x7F, 0x8E, 0x01, 0x00, -0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x04, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Yakutsk */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0F, 0xA1, 0xDB, 0xEA, 0x70, -0xB5, 0xA3, 0xC5, 0x00, 0x15, 0x27, 0x53, 0x70, 0x16, 0x18, 0x87, 0xE0, 0x17, 0x08, 0x86, 0xF0, -0x17, 0xF9, 0xBB, 0x60, 0x18, 0xE9, 0xBA, 0x70, 0x19, 0xDA, 0xEE, 0xE0, 0x1A, 0xCC, 0x3F, 0x70, -0x1B, 0xBC, 0x4C, 0x90, 0x1C, 0xAC, 0x3D, 0x90, 0x1D, 0x9C, 0x2E, 0x90, 0x1E, 0x8C, 0x1F, 0x90, -0x1F, 0x7C, 0x10, 0x90, 0x20, 0x6C, 0x01, 0x90, 0x21, 0x5B, 0xF2, 0x90, 0x22, 0x4B, 0xE3, 0x90, -0x23, 0x3B, 0xD4, 0x90, 0x24, 0x2B, 0xC5, 0x90, 0x25, 0x1B, 0xB6, 0x90, 0x26, 0x0B, 0xA7, 0x90, -0x27, 0x04, 0xD3, 0x10, 0x27, 0xF4, 0xC4, 0x10, 0x28, 0xE4, 0xC3, 0x20, 0x29, 0x78, 0x6B, 0x20, -0x29, 0xD4, 0x7B, 0xE0, 0x2A, 0xC4, 0x5E, 0xD0, 0x2B, 0xB4, 0x88, 0x10, 0x2C, 0xA4, 0x79, 0x10, -0x2D, 0x94, 0x6A, 0x10, 0x2E, 0x84, 0x5B, 0x10, 0x2F, 0x74, 0x4C, 0x10, 0x30, 0x64, 0x3D, 0x10, -0x31, 0x5D, 0x68, 0x90, 0x32, 0x72, 0x43, 0x90, 0x33, 0x3D, 0x4A, 0x90, 0x34, 0x52, 0x25, 0x90, -0x35, 0x1D, 0x2C, 0x90, 0x36, 0x32, 0x07, 0x90, 0x36, 0xFD, 0x0E, 0x90, 0x38, 0x1B, 0x24, 0x10, -0x38, 0xDC, 0xF0, 0x90, 0x39, 0xFB, 0x06, 0x10, 0x3A, 0xBC, 0xD2, 0x90, 0x3B, 0xDA, 0xE8, 0x10, -0x3C, 0xA5, 0xEF, 0x10, 0x3D, 0xBA, 0xCA, 0x10, 0x3E, 0x85, 0xD1, 0x10, 0x3F, 0x9A, 0xAC, 0x10, -0x40, 0x65, 0xB3, 0x10, 0x41, 0x83, 0xC8, 0x90, 0x42, 0x45, 0x95, 0x10, 0x43, 0x63, 0xAA, 0x90, -0x44, 0x25, 0x77, 0x10, 0x45, 0x43, 0x8C, 0x90, 0x46, 0x05, 0x59, 0x10, 0x47, 0x23, 0x6E, 0x90, -0x47, 0xEE, 0x75, 0x90, 0x49, 0x03, 0x50, 0x90, 0x49, 0xCE, 0x57, 0x90, 0x4A, 0xE3, 0x32, 0x90, -0x4B, 0xAE, 0x39, 0x90, 0x4C, 0xCC, 0x4F, 0x10, 0x4D, 0x8E, 0x1B, 0x90, 0x4E, 0xAC, 0x31, 0x10, -0x4F, 0x6D, 0xFD, 0x90, 0x50, 0x8C, 0x13, 0x10, 0x51, 0x57, 0x1A, 0x10, 0x52, 0x6B, 0xF5, 0x10, -0x53, 0x36, 0xFC, 0x10, 0x54, 0x4B, 0xD7, 0x10, 0x55, 0x16, 0xDE, 0x10, 0x56, 0x2B, 0xB9, 0x10, -0x56, 0xF6, 0xC0, 0x10, 0x58, 0x14, 0xD5, 0x90, 0x58, 0xD6, 0xA2, 0x10, 0x59, 0xF4, 0xB7, 0x90, -0x5A, 0xB6, 0x84, 0x10, 0x5B, 0xD4, 0x99, 0x90, 0x5C, 0x9F, 0xA0, 0x90, 0x5D, 0xB4, 0x7B, 0x90, -0x5E, 0x7F, 0x82, 0x90, 0x5F, 0x94, 0x5D, 0x90, 0x60, 0x5F, 0x64, 0x90, 0x61, 0x7D, 0x7A, 0x10, -0x62, 0x3F, 0x46, 0x90, 0x63, 0x5D, 0x5C, 0x10, 0x64, 0x1F, 0x28, 0x90, 0x65, 0x3D, 0x3E, 0x10, -0x66, 0x08, 0x45, 0x10, 0x67, 0x1D, 0x20, 0x10, 0x67, 0xE8, 0x27, 0x10, 0x68, 0xFD, 0x02, 0x10, -0x69, 0xC8, 0x09, 0x10, 0x6A, 0xDC, 0xE4, 0x10, 0x6B, 0xA7, 0xEB, 0x10, 0x6C, 0xC6, 0x00, 0x90, -0x6D, 0x87, 0xCD, 0x10, 0x6E, 0xA5, 0xE2, 0x90, 0x6F, 0x67, 0xAF, 0x10, 0x70, 0x85, 0xC4, 0x90, -0x71, 0x50, 0xCB, 0x90, 0x72, 0x65, 0xA6, 0x90, 0x73, 0x30, 0xAD, 0x90, 0x74, 0x45, 0x88, 0x90, -0x75, 0x10, 0x8F, 0x90, 0x76, 0x2E, 0xA5, 0x10, 0x76, 0xF0, 0x71, 0x90, 0x78, 0x0E, 0x87, 0x10, -0x78, 0xD0, 0x53, 0x90, 0x79, 0xEE, 0x69, 0x10, 0x7A, 0xB0, 0x35, 0x90, 0x7B, 0xCE, 0x4B, 0x10, -0x7C, 0x99, 0x52, 0x10, 0x7D, 0xAE, 0x2D, 0x10, 0x7E, 0x79, 0x34, 0x10, 0x7F, 0x8E, 0x0F, 0x10, -0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x04, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x00, 0x00, 0x79, 0x90, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, -0x04, 0x00, 0x00, 0x8C, 0xA0, 0x01, 0x09, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x04, 0x00, 0x00, 0x7E, -0x90, 0x00, 0x04, 0x00, 0x00, 0x8C, 0xA0, 0x01, 0x09, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x09, 0x00, -0x00, 0x70, 0x80, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x59, 0x41, 0x4B, 0x54, 0x00, 0x59, 0x41, -0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, - -/* Asia/Yekaterinburg */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1A, 0xA1, 0x12, 0xAD, 0xF0, -0xB5, 0xA3, 0xFD, 0x40, 0x15, 0x27, 0x8B, 0xB0, 0x16, 0x18, 0xC0, 0x20, 0x17, 0x08, 0xBF, 0x30, -0x17, 0xF9, 0xF3, 0xA0, 0x18, 0xE9, 0xF2, 0xB0, 0x19, 0xDB, 0x27, 0x20, 0x1A, 0xCC, 0x77, 0xB0, -0x1B, 0xBC, 0x84, 0xD0, 0x1C, 0xAC, 0x75, 0xD0, 0x1D, 0x9C, 0x66, 0xD0, 0x1E, 0x8C, 0x57, 0xD0, -0x1F, 0x7C, 0x48, 0xD0, 0x20, 0x6C, 0x39, 0xD0, 0x21, 0x5C, 0x2A, 0xD0, 0x22, 0x4C, 0x1B, 0xD0, -0x23, 0x3C, 0x0C, 0xD0, 0x24, 0x2B, 0xFD, 0xD0, 0x25, 0x1B, 0xEE, 0xD0, 0x26, 0x0B, 0xDF, 0xD0, -0x27, 0x05, 0x0B, 0x50, 0x27, 0xF4, 0xFC, 0x50, 0x28, 0xE4, 0xFB, 0x60, 0x29, 0x78, 0xA3, 0x60, -0x29, 0xD4, 0xB4, 0x20, 0x2A, 0xC4, 0x97, 0x10, 0x2B, 0xB4, 0xC0, 0x50, 0x2C, 0xA4, 0xB1, 0x50, -0x2D, 0x94, 0xA2, 0x50, 0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0x84, 0x50, 0x30, 0x64, 0x75, 0x50, -0x31, 0x5D, 0xA0, 0xD0, 0x32, 0x72, 0x7B, 0xD0, 0x33, 0x3D, 0x82, 0xD0, 0x34, 0x52, 0x5D, 0xD0, -0x35, 0x1D, 0x64, 0xD0, 0x36, 0x32, 0x3F, 0xD0, 0x36, 0xFD, 0x46, 0xD0, 0x38, 0x1B, 0x5C, 0x50, -0x38, 0xDD, 0x28, 0xD0, 0x39, 0xFB, 0x3E, 0x50, 0x3A, 0xBD, 0x0A, 0xD0, 0x3B, 0xDB, 0x20, 0x50, -0x3C, 0xA6, 0x27, 0x50, 0x3D, 0xBB, 0x02, 0x50, 0x3E, 0x86, 0x09, 0x50, 0x3F, 0x9A, 0xE4, 0x50, -0x40, 0x65, 0xEB, 0x50, 0x41, 0x84, 0x00, 0xD0, 0x42, 0x45, 0xCD, 0x50, 0x43, 0x63, 0xE2, 0xD0, -0x44, 0x25, 0xAF, 0x50, 0x45, 0x43, 0xC4, 0xD0, 0x46, 0x05, 0x91, 0x50, 0x47, 0x23, 0xA6, 0xD0, -0x47, 0xEE, 0xAD, 0xD0, 0x49, 0x03, 0x88, 0xD0, 0x49, 0xCE, 0x8F, 0xD0, 0x4A, 0xE3, 0x6A, 0xD0, -0x4B, 0xAE, 0x71, 0xD0, 0x4C, 0xCC, 0x87, 0x50, 0x4D, 0x8E, 0x53, 0xD0, 0x4E, 0xAC, 0x69, 0x50, -0x4F, 0x6E, 0x35, 0xD0, 0x50, 0x8C, 0x4B, 0x50, 0x51, 0x57, 0x52, 0x50, 0x52, 0x6C, 0x2D, 0x50, -0x53, 0x37, 0x34, 0x50, 0x54, 0x4C, 0x0F, 0x50, 0x55, 0x17, 0x16, 0x50, 0x56, 0x2B, 0xF1, 0x50, -0x56, 0xF6, 0xF8, 0x50, 0x58, 0x15, 0x0D, 0xD0, 0x58, 0xD6, 0xDA, 0x50, 0x59, 0xF4, 0xEF, 0xD0, -0x5A, 0xB6, 0xBC, 0x50, 0x5B, 0xD4, 0xD1, 0xD0, 0x5C, 0x9F, 0xD8, 0xD0, 0x5D, 0xB4, 0xB3, 0xD0, -0x5E, 0x7F, 0xBA, 0xD0, 0x5F, 0x94, 0x95, 0xD0, 0x60, 0x5F, 0x9C, 0xD0, 0x61, 0x7D, 0xB2, 0x50, -0x62, 0x3F, 0x7E, 0xD0, 0x63, 0x5D, 0x94, 0x50, 0x64, 0x1F, 0x60, 0xD0, 0x65, 0x3D, 0x76, 0x50, -0x66, 0x08, 0x7D, 0x50, 0x67, 0x1D, 0x58, 0x50, 0x67, 0xE8, 0x5F, 0x50, 0x68, 0xFD, 0x3A, 0x50, -0x69, 0xC8, 0x41, 0x50, 0x6A, 0xDD, 0x1C, 0x50, 0x6B, 0xA8, 0x23, 0x50, 0x6C, 0xC6, 0x38, 0xD0, -0x6D, 0x88, 0x05, 0x50, 0x6E, 0xA6, 0x1A, 0xD0, 0x6F, 0x67, 0xE7, 0x50, 0x70, 0x85, 0xFC, 0xD0, -0x71, 0x51, 0x03, 0xD0, 0x72, 0x65, 0xDE, 0xD0, 0x73, 0x30, 0xE5, 0xD0, 0x74, 0x45, 0xC0, 0xD0, -0x75, 0x10, 0xC7, 0xD0, 0x76, 0x2E, 0xDD, 0x50, 0x76, 0xF0, 0xA9, 0xD0, 0x78, 0x0E, 0xBF, 0x50, -0x78, 0xD0, 0x8B, 0xD0, 0x79, 0xEE, 0xA1, 0x50, 0x7A, 0xB0, 0x6D, 0xD0, 0x7B, 0xCE, 0x83, 0x50, -0x7C, 0x99, 0x8A, 0x50, 0x7D, 0xAE, 0x65, 0x50, 0x7E, 0x79, 0x6C, 0x50, 0x7F, 0x8E, 0x47, 0x50, -0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x0B, 0x08, 0x09, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x00, 0x00, 0x38, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, -0x04, 0x00, 0x00, 0x54, 0x60, 0x01, 0x09, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x00, 0x00, 0x46, -0x50, 0x00, 0x04, 0x00, 0x00, 0x54, 0x60, 0x01, 0x09, 0x00, 0x00, 0x46, 0x50, 0x01, 0x09, 0x00, -0x00, 0x38, 0x40, 0x00, 0x04, 0x00, 0x00, 0x54, 0x60, 0x01, 0x0F, 0x00, 0x00, 0x46, 0x50, 0x00, -0x15, 0x00, 0x00, 0x54, 0x60, 0x01, 0x0F, 0x00, 0x00, 0x46, 0x50, 0x00, 0x15, 0x4C, 0x4D, 0x54, -0x00, 0x53, 0x56, 0x45, 0x54, 0x00, 0x53, 0x56, 0x45, 0x53, 0x54, 0x00, 0x59, 0x45, 0x4B, 0x53, -0x54, 0x00, 0x59, 0x45, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, -0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Asia/Yerevan */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x18, 0xAA, 0x19, 0x9A, 0x48, -0xE7, 0xDA, 0x0C, 0x50, 0x15, 0x27, 0x99, 0xC0, 0x16, 0x18, 0xCE, 0x30, 0x17, 0x08, 0xCD, 0x40, -0x17, 0xFA, 0x01, 0xB0, 0x18, 0xEA, 0x00, 0xC0, 0x19, 0xDB, 0x35, 0x30, 0x1A, 0xCC, 0x85, 0xC0, -0x1B, 0xBC, 0x92, 0xE0, 0x1C, 0xAC, 0x83, 0xE0, 0x1D, 0x9C, 0x74, 0xE0, 0x1E, 0x8C, 0x65, 0xE0, -0x1F, 0x7C, 0x56, 0xE0, 0x20, 0x6C, 0x47, 0xE0, 0x21, 0x5C, 0x38, 0xE0, 0x22, 0x4C, 0x29, 0xE0, -0x23, 0x3C, 0x1A, 0xE0, 0x24, 0x2C, 0x0B, 0xE0, 0x25, 0x1B, 0xFC, 0xE0, 0x26, 0x0B, 0xED, 0xE0, -0x27, 0x05, 0x19, 0x60, 0x27, 0xF5, 0x0A, 0x60, 0x28, 0xDC, 0xF6, 0x40, 0x28, 0xE5, 0x09, 0x70, -0x29, 0xD4, 0xD0, 0x40, 0x2A, 0xC4, 0xB3, 0x30, 0x2B, 0xB4, 0xDC, 0x70, 0x2C, 0xA4, 0xCD, 0x70, -0x2D, 0x94, 0xBE, 0x70, 0x2E, 0x84, 0xAF, 0x70, 0x2F, 0x74, 0xA0, 0x70, 0x30, 0x64, 0x91, 0x70, -0x32, 0xC9, 0x70, 0xC0, 0x33, 0x3D, 0x90, 0xE0, 0x34, 0x52, 0x6B, 0xE0, 0x35, 0x1D, 0x72, 0xE0, -0x36, 0x32, 0x4D, 0xE0, 0x36, 0xFD, 0x54, 0xE0, 0x38, 0x1B, 0x6A, 0x60, 0x38, 0xDD, 0x36, 0xE0, -0x39, 0xFB, 0x4C, 0x60, 0x3A, 0xBD, 0x18, 0xE0, 0x3B, 0xDB, 0x2E, 0x60, 0x3C, 0xA6, 0x35, 0x60, -0x3D, 0xBB, 0x10, 0x60, 0x3E, 0x86, 0x17, 0x60, 0x3F, 0x9A, 0xF2, 0x60, 0x40, 0x65, 0xF9, 0x60, -0x41, 0x84, 0x0E, 0xE0, 0x42, 0x45, 0xDB, 0x60, 0x43, 0x63, 0xF0, 0xE0, 0x44, 0x25, 0xBD, 0x60, -0x45, 0x43, 0xD2, 0xE0, 0x46, 0x05, 0x9F, 0x60, 0x47, 0x23, 0xB4, 0xE0, 0x47, 0xEE, 0xBB, 0xE0, -0x49, 0x03, 0x96, 0xE0, 0x49, 0xCE, 0x9D, 0xE0, 0x4A, 0xE3, 0x78, 0xE0, 0x4B, 0xAE, 0x7F, 0xE0, -0x4C, 0xCC, 0x95, 0x60, 0x4D, 0x8E, 0x61, 0xE0, 0x4E, 0xAC, 0x77, 0x60, 0x4F, 0x6E, 0x43, 0xE0, -0x50, 0x8C, 0x59, 0x60, 0x51, 0x57, 0x60, 0x60, 0x52, 0x6C, 0x3B, 0x60, 0x53, 0x37, 0x42, 0x60, -0x54, 0x4C, 0x1D, 0x60, 0x55, 0x17, 0x24, 0x60, 0x56, 0x2B, 0xFF, 0x60, 0x56, 0xF7, 0x06, 0x60, -0x58, 0x15, 0x1B, 0xE0, 0x58, 0xD6, 0xE8, 0x60, 0x59, 0xF4, 0xFD, 0xE0, 0x5A, 0xB6, 0xCA, 0x60, -0x5B, 0xD4, 0xDF, 0xE0, 0x5C, 0x9F, 0xE6, 0xE0, 0x5D, 0xB4, 0xC1, 0xE0, 0x5E, 0x7F, 0xC8, 0xE0, -0x5F, 0x94, 0xA3, 0xE0, 0x60, 0x5F, 0xAA, 0xE0, 0x61, 0x7D, 0xC0, 0x60, 0x62, 0x3F, 0x8C, 0xE0, -0x63, 0x5D, 0xA2, 0x60, 0x64, 0x1F, 0x6E, 0xE0, 0x65, 0x3D, 0x84, 0x60, 0x66, 0x08, 0x8B, 0x60, -0x67, 0x1D, 0x66, 0x60, 0x67, 0xE8, 0x6D, 0x60, 0x68, 0xFD, 0x48, 0x60, 0x69, 0xC8, 0x4F, 0x60, -0x6A, 0xDD, 0x2A, 0x60, 0x6B, 0xA8, 0x31, 0x60, 0x6C, 0xC6, 0x46, 0xE0, 0x6D, 0x88, 0x13, 0x60, -0x6E, 0xA6, 0x28, 0xE0, 0x6F, 0x67, 0xF5, 0x60, 0x70, 0x86, 0x0A, 0xE0, 0x71, 0x51, 0x11, 0xE0, -0x72, 0x65, 0xEC, 0xE0, 0x73, 0x30, 0xF3, 0xE0, 0x74, 0x45, 0xCE, 0xE0, 0x75, 0x10, 0xD5, 0xE0, -0x76, 0x2E, 0xEB, 0x60, 0x76, 0xF0, 0xB7, 0xE0, 0x78, 0x0E, 0xCD, 0x60, 0x78, 0xD0, 0x99, 0xE0, -0x79, 0xEE, 0xAF, 0x60, 0x7A, 0xB0, 0x7B, 0xE0, 0x7B, 0xCE, 0x91, 0x60, 0x7C, 0x99, 0x98, 0x60, -0x7D, 0xAE, 0x73, 0x60, 0x7E, 0x79, 0x7A, 0x60, 0x7F, 0x8E, 0x55, 0x60, 0x01, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x06, 0x08, 0x07, 0x08, 0x09, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x0B, 0x0D, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x00, 0x00, 0x29, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x00, 0x00, 0x46, 0x50, -0x01, 0x09, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x00, 0x00, -0x46, 0x50, 0x01, 0x09, 0x00, 0x00, 0x38, 0x40, 0x01, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0F, -0x00, 0x00, 0x38, 0x40, 0x01, 0x13, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0F, 0x00, 0x00, 0x38, 0x40, -0x01, 0x13, 0x00, 0x00, 0x38, 0x40, 0x00, 0x0F, 0x00, 0x00, 0x46, 0x50, 0x01, 0x13, 0x00, 0x00, -0x38, 0x40, 0x00, 0x0F, 0x4C, 0x4D, 0x54, 0x00, 0x59, 0x45, 0x52, 0x54, 0x00, 0x59, 0x45, 0x52, -0x53, 0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Atlantic/Azores */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xDC, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x19, 0x91, 0xC1, 0xFC, 0x58, -0x9B, 0x4B, 0x89, 0x90, 0x9B, 0xFE, 0xE3, 0xA0, 0x9C, 0x9D, 0x09, 0x90, 0x9D, 0xC9, 0x9F, 0x90, -0x9E, 0x7F, 0x8E, 0x90, 0x9F, 0xAA, 0xD3, 0x10, 0xA0, 0x5F, 0x70, 0x90, 0xA1, 0x8C, 0x06, 0x90, -0xA2, 0x41, 0xF5, 0x90, 0xA3, 0x6E, 0x8B, 0x90, 0xA4, 0x23, 0x29, 0x10, 0xA5, 0x4F, 0xBF, 0x10, -0xAA, 0x06, 0x0B, 0x90, 0xAA, 0xF4, 0xAB, 0x10, 0xAD, 0xC9, 0xC4, 0x10, 0xAE, 0xA7, 0x40, 0x10, -0xAF, 0xA0, 0x6B, 0x90, 0xB0, 0x87, 0x22, 0x10, 0xB1, 0x89, 0x88, 0x10, 0xB2, 0x70, 0x3E, 0x90, -0xB3, 0x72, 0xA4, 0x90, 0xB4, 0x50, 0x20, 0x90, 0xB7, 0x32, 0x68, 0x90, 0xB8, 0x0F, 0xE4, 0x90, -0xB8, 0xFF, 0xD5, 0x90, 0xB9, 0xEF, 0xC6, 0x90, 0xBC, 0xC8, 0xD4, 0x10, 0xBD, 0xB8, 0xC5, 0x10, -0xBE, 0x9F, 0x7B, 0x90, 0xBF, 0x98, 0xA7, 0x10, 0xC0, 0x9B, 0x0D, 0x10, 0xC1, 0x78, 0x89, 0x10, -0xC2, 0x68, 0x7A, 0x10, 0xC3, 0x58, 0x6B, 0x10, 0xC4, 0x3F, 0x21, 0x90, 0xC5, 0x38, 0x4D, 0x10, -0xC6, 0x3A, 0xB3, 0x10, 0xC7, 0x58, 0xC8, 0x90, 0xC7, 0xD9, 0xFB, 0x90, 0xC9, 0x01, 0x4B, 0x90, -0xC9, 0xF1, 0x3C, 0x90, 0xCA, 0xE2, 0x7F, 0x10, 0xCB, 0xB5, 0x6F, 0x10, 0xCB, 0xEC, 0xC0, 0x00, -0xCC, 0x80, 0x68, 0x00, 0xCC, 0xDC, 0xBF, 0x10, 0xCD, 0x95, 0x51, 0x10, 0xCD, 0xC3, 0x67, 0x80, -0xCE, 0x72, 0xBF, 0x00, 0xCE, 0xC5, 0xDB, 0x90, 0xCF, 0x75, 0x33, 0x10, 0xCF, 0xAC, 0x84, 0x00, -0xD0, 0x52, 0xA1, 0x00, 0xD0, 0xA5, 0xBD, 0x90, 0xD1, 0x55, 0x15, 0x10, 0xD1, 0x8C, 0x66, 0x00, -0xD2, 0x32, 0x83, 0x00, 0xD2, 0x85, 0x9F, 0x90, 0xD3, 0x59, 0xE1, 0x10, 0xD4, 0x49, 0xD2, 0x10, -0xD5, 0x39, 0xED, 0x40, 0xD6, 0x29, 0xDE, 0x40, 0xD7, 0x19, 0xCF, 0x40, 0xD8, 0x09, 0xC0, 0x40, -0xD8, 0xF9, 0xB1, 0x40, 0xD9, 0xE9, 0xA2, 0x40, 0xDC, 0xB9, 0x75, 0x40, 0xDD, 0xB2, 0xA0, 0xC0, -0xDE, 0xA2, 0x91, 0xC0, 0xDF, 0x92, 0x82, 0xC0, 0xE0, 0x82, 0x73, 0xC0, 0xE1, 0x72, 0x64, 0xC0, -0xE2, 0x62, 0x55, 0xC0, 0xE3, 0x52, 0x46, 0xC0, 0xE4, 0x42, 0x37, 0xC0, 0xE5, 0x32, 0x28, 0xC0, -0xE6, 0x22, 0x19, 0xC0, 0xE7, 0x1B, 0x45, 0x40, 0xE8, 0x0B, 0x36, 0x40, 0xE8, 0xFB, 0x27, 0x40, -0xE9, 0xEB, 0x18, 0x40, 0xEA, 0xDB, 0x09, 0x40, 0xEB, 0xCA, 0xFA, 0x40, 0xEC, 0xBA, 0xEB, 0x40, -0xED, 0xAA, 0xDC, 0x40, 0xEE, 0x9A, 0xCD, 0x40, 0xEF, 0x8A, 0xBE, 0x40, 0xF0, 0x7A, 0xAF, 0x40, -0xF1, 0x6A, 0xA0, 0x40, 0xF2, 0x63, 0xCB, 0xC0, 0xF3, 0x53, 0xBC, 0xC0, 0xF4, 0x43, 0xAD, 0xC0, -0xF5, 0x33, 0x9E, 0xC0, 0xF6, 0x23, 0x8F, 0xC0, 0xF7, 0x13, 0x80, 0xC0, 0xF8, 0x03, 0x71, 0xC0, -0xF8, 0xF3, 0x62, 0xC0, 0x0D, 0x9B, 0x29, 0x10, 0x0E, 0x8B, 0x1A, 0x10, 0x0F, 0x84, 0x45, 0x90, -0x10, 0x74, 0x36, 0x90, 0x11, 0x64, 0x27, 0x90, 0x12, 0x54, 0x26, 0xA0, 0x13, 0x44, 0x09, 0x90, -0x14, 0x34, 0x08, 0xA0, 0x15, 0x23, 0xF9, 0xA0, 0x16, 0x13, 0xEA, 0xA0, 0x17, 0x03, 0xDB, 0xA0, -0x17, 0xF3, 0xCC, 0xA0, 0x18, 0xE3, 0xCB, 0xB0, 0x19, 0xD3, 0xAE, 0xA0, 0x1A, 0xC3, 0x9F, 0xA0, -0x1B, 0xBC, 0xCB, 0x20, 0x1C, 0xAC, 0xBC, 0x20, 0x1D, 0x9C, 0xAD, 0x20, 0x1E, 0x8C, 0x9E, 0x20, -0x1F, 0x7C, 0x8F, 0x20, 0x20, 0x6C, 0x80, 0x20, 0x21, 0x5C, 0x71, 0x20, 0x22, 0x4C, 0x62, 0x20, -0x23, 0x3C, 0x53, 0x20, 0x24, 0x2C, 0x44, 0x20, 0x25, 0x1C, 0x35, 0x20, 0x26, 0x0C, 0x26, 0x20, -0x27, 0x05, 0x51, 0xA0, 0x27, 0xF5, 0x42, 0xA0, 0x28, 0xE5, 0x33, 0xA0, 0x29, 0xD5, 0x24, 0xA0, -0x2A, 0xC5, 0x15, 0xA0, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, -0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, -0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, -0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, -0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, -0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, -0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, -0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, -0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, -0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, -0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, -0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, -0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, -0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, -0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, -0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, -0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, -0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, -0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, -0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, -0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, -0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, -0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x02, 0x01, 0x02, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, -0x05, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x08, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x09, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0xFF, 0xFF, 0xE5, 0x28, 0x00, 0x00, 0xFF, 0xFF, -0xF1, 0xF0, 0x01, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x0A, 0xFF, 0xFF, 0xF1, 0xF0, 0x01, 0x04, -0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x00, 0x00, 0x00, 0x00, -0x01, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x0A, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x0A, 0x00, 0x00, -0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x0A, -0x48, 0x4D, 0x54, 0x00, 0x41, 0x5A, 0x4F, 0x53, 0x54, 0x00, 0x41, 0x5A, 0x4F, 0x54, 0x00, 0x41, -0x5A, 0x4F, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, -0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, -0x01, - -/* Atlantic/Bermuda */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xB4, 0xC3, 0x1D, 0xD8, -0x08, 0x20, 0xB3, 0x60, 0x09, 0x10, 0x96, 0x50, 0x0A, 0x00, 0x95, 0x60, 0x0A, 0xF0, 0x78, 0x50, -0x0B, 0xE0, 0x77, 0x60, 0x0C, 0xD9, 0x94, 0xD0, 0x0D, 0xC0, 0x59, 0x60, 0x0E, 0xB9, 0x76, 0xD0, -0x0F, 0xA9, 0x75, 0xE0, 0x10, 0x99, 0x58, 0xD0, 0x11, 0x89, 0x57, 0xE0, 0x12, 0x79, 0x3A, 0xD0, -0x13, 0x69, 0x39, 0xE0, 0x14, 0x59, 0x1C, 0xD0, 0x15, 0x49, 0x1B, 0xE0, 0x16, 0x38, 0xFE, 0xD0, -0x17, 0x28, 0xFD, 0xE0, 0x18, 0x22, 0x1B, 0x50, 0x19, 0x08, 0xDF, 0xE0, 0x1A, 0x01, 0xFD, 0x50, -0x1A, 0xF1, 0xFC, 0x60, 0x1B, 0xE1, 0xDF, 0x50, 0x1C, 0xD1, 0xDE, 0x60, 0x1D, 0xC1, 0xC1, 0x50, -0x1E, 0xB1, 0xC0, 0x60, 0x1F, 0xA1, 0xA3, 0x50, 0x20, 0x75, 0xF2, 0xE0, 0x21, 0x81, 0x85, 0x50, -0x22, 0x55, 0xD4, 0xE0, 0x23, 0x6A, 0xA1, 0xD0, 0x24, 0x35, 0xB6, 0xE0, 0x25, 0x4A, 0x83, 0xD0, -0x26, 0x15, 0x98, 0xE0, 0x27, 0x2A, 0x65, 0xD0, 0x27, 0xFE, 0xB5, 0x60, 0x29, 0x0A, 0x47, 0xD0, -0x29, 0xDE, 0x97, 0x60, 0x2A, 0xEA, 0x29, 0xD0, 0x2B, 0xBE, 0x79, 0x60, 0x2C, 0xD3, 0x46, 0x50, -0x2D, 0x9E, 0x5B, 0x60, 0x2E, 0xB3, 0x28, 0x50, 0x2F, 0x7E, 0x3D, 0x60, 0x30, 0x93, 0x0A, 0x50, -0x31, 0x67, 0x59, 0xE0, 0x32, 0x72, 0xEC, 0x50, 0x33, 0x47, 0x3B, 0xE0, 0x34, 0x52, 0xCE, 0x50, -0x35, 0x27, 0x1D, 0xE0, 0x36, 0x32, 0xB0, 0x50, 0x37, 0x06, 0xFF, 0xE0, 0x38, 0x1B, 0xCC, 0xD0, -0x38, 0xE6, 0xE1, 0xE0, 0x39, 0xFB, 0xAE, 0xD0, 0x3A, 0xC6, 0xC3, 0xE0, 0x3B, 0xDB, 0x90, 0xD0, -0x3C, 0xAF, 0xE0, 0x60, 0x3D, 0xBB, 0x72, 0xD0, 0x3E, 0x8F, 0xC2, 0x60, 0x3F, 0x9B, 0x54, 0xD0, -0x40, 0x6F, 0xA4, 0x60, 0x41, 0x84, 0x71, 0x50, 0x42, 0x4F, 0x86, 0x60, 0x43, 0x64, 0x53, 0x50, -0x44, 0x2F, 0x68, 0x60, 0x45, 0x44, 0x35, 0x50, 0x45, 0xF3, 0x9A, 0xE0, 0x47, 0x2D, 0x51, 0xD0, -0x47, 0xD3, 0x7C, 0xE0, 0x49, 0x0D, 0x33, 0xD0, 0x49, 0xB3, 0x5E, 0xE0, 0x4A, 0xED, 0x15, 0xD0, -0x4B, 0x9C, 0x7B, 0x60, 0x4C, 0xD6, 0x32, 0x50, 0x4D, 0x7C, 0x5D, 0x60, 0x4E, 0xB6, 0x14, 0x50, -0x4F, 0x5C, 0x3F, 0x60, 0x50, 0x95, 0xF6, 0x50, 0x51, 0x3C, 0x21, 0x60, 0x52, 0x75, 0xD8, 0x50, -0x53, 0x1C, 0x03, 0x60, 0x54, 0x55, 0xBA, 0x50, 0x54, 0xFB, 0xE5, 0x60, 0x56, 0x35, 0x9C, 0x50, -0x56, 0xE5, 0x01, 0xE0, 0x58, 0x1E, 0xB8, 0xD0, 0x58, 0xC4, 0xE3, 0xE0, 0x59, 0xFE, 0x9A, 0xD0, -0x5A, 0xA4, 0xC5, 0xE0, 0x5B, 0xDE, 0x7C, 0xD0, 0x5C, 0x84, 0xA7, 0xE0, 0x5D, 0xBE, 0x5E, 0xD0, -0x5E, 0x64, 0x89, 0xE0, 0x5F, 0x9E, 0x40, 0xD0, 0x60, 0x4D, 0xA6, 0x60, 0x61, 0x87, 0x5D, 0x50, -0x62, 0x2D, 0x88, 0x60, 0x63, 0x67, 0x3F, 0x50, 0x64, 0x0D, 0x6A, 0x60, 0x65, 0x47, 0x21, 0x50, -0x65, 0xED, 0x4C, 0x60, 0x67, 0x27, 0x03, 0x50, 0x67, 0xCD, 0x2E, 0x60, 0x69, 0x06, 0xE5, 0x50, -0x69, 0xAD, 0x10, 0x60, 0x6A, 0xE6, 0xC7, 0x50, 0x6B, 0x96, 0x2C, 0xE0, 0x6C, 0xCF, 0xE3, 0xD0, -0x6D, 0x76, 0x0E, 0xE0, 0x6E, 0xAF, 0xC5, 0xD0, 0x6F, 0x55, 0xF0, 0xE0, 0x70, 0x8F, 0xA7, 0xD0, -0x71, 0x35, 0xD2, 0xE0, 0x72, 0x6F, 0x89, 0xD0, 0x73, 0x15, 0xB4, 0xE0, 0x74, 0x4F, 0x6B, 0xD0, -0x74, 0xFE, 0xD1, 0x60, 0x76, 0x38, 0x88, 0x50, 0x76, 0xDE, 0xB3, 0x60, 0x78, 0x18, 0x6A, 0x50, -0x78, 0xBE, 0x95, 0x60, 0x79, 0xF8, 0x4C, 0x50, 0x7A, 0x9E, 0x77, 0x60, 0x7B, 0xD8, 0x2E, 0x50, -0x7C, 0x7E, 0x59, 0x60, 0x7D, 0xB8, 0x10, 0x50, 0x7E, 0x5E, 0x3B, 0x60, 0x7F, 0x97, 0xF2, 0x50, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0xFF, 0xFF, 0xC3, 0x48, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xD5, -0xD0, 0x01, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, - -/* Atlantic/Canary */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0xA6, 0x04, 0x5C, 0xF0, -0xD4, 0x41, 0xF7, 0x20, 0x13, 0x4D, 0x36, 0x00, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, -0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, -0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, -0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, -0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, -0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, -0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, -0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, -0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, -0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, -0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, -0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, -0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, -0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, -0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, -0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, -0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, -0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, -0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, -0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, -0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, -0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, -0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, -0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, -0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, -0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, -0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, -0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, -0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, -0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0xFF, 0xFF, 0xF1, 0x90, 0x00, 0x00, -0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, -0x01, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x0D, 0x4C, 0x4D, -0x54, 0x00, 0x43, 0x41, 0x4E, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Atlantic/Cape_Verde */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0D, 0x89, 0x7F, 0x51, 0x8C, -0xCC, 0x95, 0x9C, 0x20, 0xD2, 0x74, 0x7C, 0x10, 0x0B, 0x17, 0xF7, 0x40, 0x01, 0x02, 0x01, 0x03, -0xFF, 0xFF, 0xE9, 0xF4, 0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, -0x01, 0x08, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x56, 0x54, 0x00, -0x43, 0x56, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Atlantic/Faeroe */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0D, 0x8B, 0x6D, 0xA4, 0x58, -0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, -0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, -0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, -0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, -0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, -0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, -0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, -0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, -0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, -0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, -0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, -0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, -0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0xFF, 0xFF, 0xF9, 0xA8, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x08, 0x00, 0x00, 0x00, -0x00, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, -0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, - -/* Atlantic/Faroe */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0D, 0x8B, 0x6D, 0xA4, 0x58, -0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, -0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, -0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, -0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, -0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, -0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, -0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, -0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, -0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, -0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, -0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, -0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, -0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0xFF, 0xFF, 0xF9, 0xA8, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x08, 0x00, 0x00, 0x00, -0x00, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, -0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, - -/* Atlantic/Jan_Mayen */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x27, 0xE3, 0x00, -0x9B, 0xD4, 0x7B, 0x60, 0xC8, 0xB7, 0x4D, 0x60, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, 0xD1, 0x72, 0x16, 0x10, -0xD2, 0x62, 0x07, 0x10, 0xEB, 0xAF, 0x20, 0x90, 0xEC, 0xA8, 0x4C, 0x10, 0xED, 0x98, 0x3D, 0x10, -0xEE, 0x88, 0x2E, 0x10, 0xEF, 0x78, 0x1F, 0x10, 0xF0, 0x68, 0x10, 0x10, 0xF1, 0x58, 0x01, 0x10, -0xF2, 0x47, 0xF2, 0x10, 0xF3, 0x37, 0xE3, 0x10, 0xF4, 0x27, 0xD4, 0x10, 0xF5, 0x17, 0xC5, 0x10, -0xF6, 0x10, 0xF0, 0x90, 0xF7, 0x2F, 0x06, 0x10, 0xF7, 0xF0, 0xD2, 0x90, 0x12, 0xCE, 0x97, 0xF0, -0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x00, 0x01, 0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x1C, -0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, -0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, -0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, -0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Atlantic/Madeira */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xDC, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x1E, 0x91, 0xC1, 0xF1, 0x58, -0x9B, 0x4B, 0x7B, 0x80, 0x9B, 0xFE, 0xD5, 0x90, 0x9C, 0x9C, 0xFB, 0x80, 0x9D, 0xC9, 0x91, 0x80, -0x9E, 0x7F, 0x80, 0x80, 0x9F, 0xAA, 0xC5, 0x00, 0xA0, 0x5F, 0x62, 0x80, 0xA1, 0x8B, 0xF8, 0x80, -0xA2, 0x41, 0xE7, 0x80, 0xA3, 0x6E, 0x7D, 0x80, 0xA4, 0x23, 0x1B, 0x00, 0xA5, 0x4F, 0xB1, 0x00, -0xAA, 0x05, 0xFD, 0x80, 0xAA, 0xF4, 0x9D, 0x00, 0xAD, 0xC9, 0xB6, 0x00, 0xAE, 0xA7, 0x32, 0x00, -0xAF, 0xA0, 0x5D, 0x80, 0xB0, 0x87, 0x14, 0x00, 0xB1, 0x89, 0x7A, 0x00, 0xB2, 0x70, 0x30, 0x80, -0xB3, 0x72, 0x96, 0x80, 0xB4, 0x50, 0x12, 0x80, 0xB7, 0x32, 0x5A, 0x80, 0xB8, 0x0F, 0xD6, 0x80, -0xB8, 0xFF, 0xC7, 0x80, 0xB9, 0xEF, 0xB8, 0x80, 0xBC, 0xC8, 0xC6, 0x00, 0xBD, 0xB8, 0xB7, 0x00, -0xBE, 0x9F, 0x6D, 0x80, 0xBF, 0x98, 0x99, 0x00, 0xC0, 0x9A, 0xFF, 0x00, 0xC1, 0x78, 0x7B, 0x00, -0xC2, 0x68, 0x6C, 0x00, 0xC3, 0x58, 0x5D, 0x00, 0xC4, 0x3F, 0x13, 0x80, 0xC5, 0x38, 0x3F, 0x00, -0xC6, 0x3A, 0xA5, 0x00, 0xC7, 0x58, 0xBA, 0x80, 0xC7, 0xD9, 0xED, 0x80, 0xC9, 0x01, 0x3D, 0x80, -0xC9, 0xF1, 0x2E, 0x80, 0xCA, 0xE2, 0x71, 0x00, 0xCB, 0xB5, 0x61, 0x00, 0xCB, 0xEC, 0xB1, 0xF0, -0xCC, 0x80, 0x59, 0xF0, 0xCC, 0xDC, 0xB1, 0x00, 0xCD, 0x95, 0x43, 0x00, 0xCD, 0xC3, 0x59, 0x70, -0xCE, 0x72, 0xB0, 0xF0, 0xCE, 0xC5, 0xCD, 0x80, 0xCF, 0x75, 0x25, 0x00, 0xCF, 0xAC, 0x75, 0xF0, -0xD0, 0x52, 0x92, 0xF0, 0xD0, 0xA5, 0xAF, 0x80, 0xD1, 0x55, 0x07, 0x00, 0xD1, 0x8C, 0x57, 0xF0, -0xD2, 0x32, 0x74, 0xF0, 0xD2, 0x85, 0x91, 0x80, 0xD3, 0x59, 0xD3, 0x00, 0xD4, 0x49, 0xC4, 0x00, -0xD5, 0x39, 0xDF, 0x30, 0xD6, 0x29, 0xD0, 0x30, 0xD7, 0x19, 0xC1, 0x30, 0xD8, 0x09, 0xB2, 0x30, -0xD8, 0xF9, 0xA3, 0x30, 0xD9, 0xE9, 0x94, 0x30, 0xDC, 0xB9, 0x67, 0x30, 0xDD, 0xB2, 0x92, 0xB0, -0xDE, 0xA2, 0x83, 0xB0, 0xDF, 0x92, 0x74, 0xB0, 0xE0, 0x82, 0x65, 0xB0, 0xE1, 0x72, 0x56, 0xB0, -0xE2, 0x62, 0x47, 0xB0, 0xE3, 0x52, 0x38, 0xB0, 0xE4, 0x42, 0x29, 0xB0, 0xE5, 0x32, 0x1A, 0xB0, -0xE6, 0x22, 0x0B, 0xB0, 0xE7, 0x1B, 0x37, 0x30, 0xE8, 0x0B, 0x28, 0x30, 0xE8, 0xFB, 0x19, 0x30, -0xE9, 0xEB, 0x0A, 0x30, 0xEA, 0xDA, 0xFB, 0x30, 0xEB, 0xCA, 0xEC, 0x30, 0xEC, 0xBA, 0xDD, 0x30, -0xED, 0xAA, 0xCE, 0x30, 0xEE, 0x9A, 0xBF, 0x30, 0xEF, 0x8A, 0xB0, 0x30, 0xF0, 0x7A, 0xA1, 0x30, -0xF1, 0x6A, 0x92, 0x30, 0xF2, 0x63, 0xBD, 0xB0, 0xF3, 0x53, 0xAE, 0xB0, 0xF4, 0x43, 0x9F, 0xB0, -0xF5, 0x33, 0x90, 0xB0, 0xF6, 0x23, 0x81, 0xB0, 0xF7, 0x13, 0x72, 0xB0, 0xF8, 0x03, 0x63, 0xB0, -0xF8, 0xF3, 0x54, 0xB0, 0x0D, 0x9B, 0x1B, 0x00, 0x0E, 0x8B, 0x0C, 0x00, 0x0F, 0x84, 0x37, 0x80, -0x10, 0x74, 0x28, 0x80, 0x11, 0x64, 0x19, 0x80, 0x12, 0x54, 0x18, 0x90, 0x13, 0x43, 0xFB, 0x80, -0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, -0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xBD, 0xA0, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, -0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, -0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, -0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, -0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, -0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, -0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, -0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, -0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, -0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, -0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, -0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, -0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, -0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, -0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, -0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, -0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, -0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, -0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, -0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, -0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, -0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, -0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, -0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, -0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, -0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, -0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, -0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x02, 0x01, 0x02, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, -0x05, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x08, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0xFF, 0xFF, 0xF0, 0x28, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x01, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, -0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x0A, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x0F, 0x00, 0x00, 0x0E, 0x10, -0x01, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x15, 0x46, 0x4D, 0x54, 0x00, 0x4D, 0x41, -0x44, 0x53, 0x54, 0x00, 0x4D, 0x41, 0x44, 0x54, 0x00, 0x4D, 0x41, 0x44, 0x4D, 0x54, 0x00, 0x57, -0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, -0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Atlantic/Reykjavik */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0x8B, 0x60, 0x83, 0x94, -0x9C, 0x91, 0x1E, 0x00, 0x9D, 0xD1, 0x88, 0x90, 0x9E, 0x72, 0x51, 0x80, 0x9F, 0xD5, 0x03, 0x10, -0xC6, 0x4D, 0x1A, 0x00, 0xC7, 0x66, 0x05, 0xA0, 0xC7, 0xDA, 0x17, 0xB0, 0xC9, 0x26, 0x43, 0xA0, -0xC9, 0xC3, 0x26, 0x20, 0xCB, 0x06, 0x25, 0xA0, 0xCB, 0xAC, 0x42, 0xA0, 0xCC, 0xDC, 0xCD, 0x20, -0xCD, 0x8C, 0x24, 0xA0, 0xCE, 0xBC, 0xAF, 0x20, 0xCF, 0x6C, 0x06, 0xA0, 0xD0, 0x9C, 0x91, 0x20, -0xD1, 0x4B, 0xE8, 0xA0, 0xD2, 0x85, 0xAD, 0xA0, 0xD3, 0x2B, 0xCA, 0xA0, 0xD4, 0x65, 0x8F, 0xA0, -0xD5, 0x39, 0xD1, 0x20, 0xD6, 0x45, 0x71, 0xA0, 0xD7, 0x19, 0xB3, 0x20, 0xD8, 0x25, 0x53, 0xA0, -0xD8, 0xF9, 0x95, 0x20, 0xDA, 0x0E, 0x70, 0x20, 0xDA, 0xD9, 0x77, 0x20, 0xDB, 0xE5, 0x17, 0xA0, -0xDC, 0xB9, 0x59, 0x20, 0xDD, 0xCE, 0x34, 0x20, 0xDE, 0xA2, 0x75, 0xA0, 0xDF, 0xAE, 0x16, 0x20, -0xE0, 0x82, 0x57, 0xA0, 0xE1, 0x8D, 0xF8, 0x20, 0xE2, 0x62, 0x39, 0xA0, 0xE3, 0x6D, 0xDA, 0x20, -0xE4, 0x42, 0x1B, 0xA0, 0xE5, 0x4D, 0xBC, 0x20, 0xE6, 0x21, 0xFD, 0xA0, 0xE7, 0x36, 0xD8, 0xA0, -0xE8, 0x0B, 0x1A, 0x20, 0xE9, 0x16, 0xBA, 0xA0, 0xE9, 0xEA, 0xFC, 0x20, 0xEA, 0xF6, 0x9C, 0xA0, -0xEB, 0xCA, 0xDE, 0x20, 0xEC, 0xD6, 0x7E, 0xA0, 0xED, 0xAA, 0xC0, 0x20, 0xEE, 0xB6, 0x60, 0xA0, -0xEF, 0x8A, 0xA2, 0x20, 0xF0, 0x96, 0x42, 0xA0, 0xF1, 0x6A, 0x84, 0x20, 0xF2, 0x7F, 0x5F, 0x20, -0xF3, 0x53, 0xA0, 0xA0, 0xF4, 0x5F, 0x41, 0x20, 0xF5, 0x33, 0x82, 0xA0, 0xF6, 0x3F, 0x23, 0x20, -0xF7, 0x13, 0x64, 0xA0, 0xF8, 0x1F, 0x05, 0x20, 0xF8, 0xF3, 0x46, 0xA0, 0xF9, 0xFE, 0xE7, 0x20, -0xFA, 0xD3, 0x28, 0xA0, 0xFB, 0xE8, 0x03, 0xA0, 0xFC, 0xBC, 0x45, 0x20, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x05, 0xFF, 0xFF, 0xEB, 0x6C, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x09, 0x00, 0x00, -0x00, 0x00, 0x01, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, -0x52, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x53, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, -0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Atlantic/South_Georgia */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, -0x00, 0x00, 0x47, 0x53, 0x54, 0x00, 0x00, 0x00, - -/* Atlantic/Stanley */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x93, 0x44, 0x5F, 0x3C, -0xC3, 0x4F, 0x5A, 0xC0, 0xC4, 0x36, 0x03, 0x30, 0xC5, 0x2F, 0x3C, 0xC0, 0xC6, 0x15, 0xE5, 0x30, -0xC7, 0x18, 0x59, 0x40, 0xC7, 0xFF, 0x01, 0xB0, 0xC8, 0xF8, 0x3B, 0x40, 0xC9, 0xDE, 0xE3, 0xB0, -0xCA, 0xD8, 0x1D, 0x40, 0xCB, 0xBE, 0xC5, 0xB0, 0xCC, 0xB7, 0xFF, 0x40, 0xCD, 0x36, 0x81, 0x30, -0x19, 0x11, 0xFE, 0x40, 0x19, 0xD3, 0xBC, 0xB0, 0x1A, 0xF1, 0xC4, 0x20, 0x1B, 0xAA, 0x64, 0x30, -0x1C, 0xD1, 0xA6, 0x20, 0x1D, 0x8A, 0x46, 0x30, 0x1E, 0xA8, 0x5B, 0xB0, 0x1F, 0x6A, 0x36, 0x40, -0x20, 0x88, 0x3D, 0xB0, 0x21, 0x4A, 0x18, 0x40, 0x22, 0x68, 0x1F, 0xB0, 0x23, 0x29, 0xFA, 0x40, -0x24, 0x48, 0x01, 0xB0, 0x25, 0x09, 0xDC, 0x40, 0x26, 0x31, 0x1E, 0x30, 0x26, 0xE9, 0xBE, 0x40, -0x28, 0x11, 0x00, 0x30, 0x28, 0xD2, 0xDA, 0xC0, 0x29, 0xF0, 0xE2, 0x30, 0x2A, 0xB2, 0xBC, 0xC0, -0x2B, 0xD0, 0xC4, 0x30, 0x2C, 0x92, 0x9E, 0xC0, 0x2D, 0xB0, 0xA6, 0x30, 0x2E, 0x72, 0x80, 0xC0, -0x2F, 0x90, 0x88, 0x30, 0x30, 0x52, 0x62, 0xC0, 0x31, 0x79, 0xA4, 0xB0, 0x32, 0x3B, 0x7F, 0x40, -0x33, 0x59, 0x86, 0xB0, 0x34, 0x1B, 0x61, 0x40, 0x35, 0x39, 0x68, 0xB0, 0x35, 0xFB, 0x43, 0x40, -0x37, 0x19, 0x4A, 0xB0, 0x37, 0xDB, 0x25, 0x40, 0x38, 0xF9, 0x2C, 0xB0, 0x39, 0xBB, 0x07, 0x40, -0x3A, 0xD9, 0x2A, 0xD0, 0x3B, 0x91, 0xCA, 0xE0, 0x3C, 0xC2, 0x47, 0x50, 0x3D, 0x71, 0xAC, 0xE0, -0x3E, 0xA2, 0x29, 0x50, 0x3F, 0x5A, 0xC9, 0x60, 0x40, 0x82, 0x0B, 0x50, 0x41, 0x3A, 0xAB, 0x60, -0x42, 0x61, 0xED, 0x50, 0x43, 0x1A, 0x8D, 0x60, 0x44, 0x41, 0xCF, 0x50, 0x44, 0xFA, 0x6F, 0x60, -0x46, 0x21, 0xB1, 0x50, 0x46, 0xDA, 0x51, 0x60, 0x48, 0x0A, 0xCD, 0xD0, 0x48, 0xC3, 0x6D, 0xE0, -0x49, 0xEA, 0xAF, 0xD0, 0x4A, 0xA3, 0x4F, 0xE0, 0x4B, 0xCA, 0x91, 0xD0, 0x4C, 0x83, 0x31, 0xE0, -0x4D, 0xAA, 0x73, 0xD0, 0x4E, 0x63, 0x13, 0xE0, 0x4F, 0x8A, 0x55, 0xD0, 0x50, 0x42, 0xF5, 0xE0, -0x51, 0x73, 0x72, 0x50, 0x52, 0x22, 0xD7, 0xE0, 0x53, 0x53, 0x54, 0x50, 0x54, 0x0B, 0xF4, 0x60, -0x55, 0x33, 0x36, 0x50, 0x55, 0xEB, 0xD6, 0x60, 0x57, 0x13, 0x18, 0x50, 0x57, 0xCB, 0xB8, 0x60, -0x58, 0xF2, 0xFA, 0x50, 0x59, 0xAB, 0x9A, 0x60, 0x5A, 0xD2, 0xDC, 0x50, 0x5B, 0x8B, 0x7C, 0x60, -0x5C, 0xBB, 0xF8, 0xD0, 0x5D, 0x6B, 0x5E, 0x60, 0x5E, 0x9B, 0xDA, 0xD0, 0x5F, 0x54, 0x7A, 0xE0, -0x60, 0x7B, 0xBC, 0xD0, 0x61, 0x34, 0x5C, 0xE0, 0x62, 0x5B, 0x9E, 0xD0, 0x63, 0x14, 0x3E, 0xE0, -0x64, 0x3B, 0x80, 0xD0, 0x64, 0xF4, 0x20, 0xE0, 0x66, 0x24, 0x9D, 0x50, 0x66, 0xD4, 0x02, 0xE0, -0x68, 0x04, 0x7F, 0x50, 0x68, 0xBD, 0x1F, 0x60, 0x69, 0xE4, 0x61, 0x50, 0x6A, 0x9D, 0x01, 0x60, -0x6B, 0xC4, 0x43, 0x50, 0x6C, 0x7C, 0xE3, 0x60, 0x6D, 0xA4, 0x25, 0x50, 0x6E, 0x5C, 0xC5, 0x60, -0x6F, 0x84, 0x07, 0x50, 0x70, 0x3C, 0xA7, 0x60, 0x71, 0x6D, 0x23, 0xD0, 0x72, 0x1C, 0x89, 0x60, -0x73, 0x4D, 0x05, 0xD0, 0x74, 0x05, 0xA5, 0xE0, 0x75, 0x2C, 0xE7, 0xD0, 0x75, 0xE5, 0x87, 0xE0, -0x77, 0x0C, 0xC9, 0xD0, 0x77, 0xC5, 0x69, 0xE0, 0x78, 0xEC, 0xAB, 0xD0, 0x79, 0xA5, 0x4B, 0xE0, -0x7A, 0xCC, 0x8D, 0xD0, 0x7B, 0x85, 0x2D, 0xE0, 0x7C, 0xB5, 0xAA, 0x50, 0x7D, 0x6E, 0x4A, 0x60, -0x7E, 0x95, 0x8C, 0x50, 0x7F, 0x4E, 0x2C, 0x60, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0xFF, 0xFF, 0xC9, 0xC4, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, -0xFF, 0xC7, 0xC0, 0x00, 0x09, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, -0x09, 0x53, 0x4D, 0x54, 0x00, 0x46, 0x4B, 0x53, 0x54, 0x00, 0x46, 0x4B, 0x54, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Atlantic/St_Helena */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xDC, 0x42, 0x9B, 0x58, -0x01, 0xFF, 0xFF, 0xFA, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x4A, 0x4D, 0x54, -0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Australia/ACT */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xA6, 0x9C, -0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80, -0xCD, 0xA7, 0x39, 0x70, 0xCE, 0xA0, 0x73, 0x00, 0xCF, 0x87, 0x1B, 0x70, 0x03, 0x70, 0x39, 0x80, -0x04, 0x0D, 0x1C, 0x00, 0x05, 0x50, 0x1B, 0x80, 0x05, 0xF6, 0x38, 0x80, 0x07, 0x2F, 0xFD, 0x80, -0x07, 0xD6, 0x1A, 0x80, 0x09, 0x0F, 0xDF, 0x80, 0x09, 0xB5, 0xFC, 0x80, 0x0A, 0xEF, 0xC1, 0x80, -0x0B, 0x9F, 0x19, 0x00, 0x0C, 0xD8, 0xDE, 0x00, 0x0D, 0x7E, 0xFB, 0x00, 0x0E, 0xB8, 0xC0, 0x00, -0x0F, 0x5E, 0xDD, 0x00, 0x10, 0x98, 0xA2, 0x00, 0x11, 0x3E, 0xBF, 0x00, 0x12, 0x78, 0x84, 0x00, -0x13, 0x1E, 0xA1, 0x00, 0x14, 0x58, 0x66, 0x00, 0x14, 0xFE, 0x83, 0x00, 0x16, 0x38, 0x48, 0x00, -0x17, 0x0C, 0x89, 0x80, 0x18, 0x21, 0x64, 0x80, 0x18, 0xC7, 0x81, 0x80, 0x1A, 0x01, 0x46, 0x80, -0x1A, 0xA7, 0x63, 0x80, 0x1B, 0xE1, 0x28, 0x80, 0x1C, 0x87, 0x45, 0x80, 0x1D, 0xC1, 0x0A, 0x80, -0x1E, 0x79, 0x9C, 0x80, 0x1F, 0x97, 0xB2, 0x00, 0x20, 0x59, 0x7E, 0x80, 0x21, 0x80, 0xCE, 0x80, -0x22, 0x42, 0x9B, 0x00, 0x23, 0x69, 0xEB, 0x00, 0x24, 0x22, 0x7D, 0x00, 0x25, 0x49, 0xCD, 0x00, -0x25, 0xEF, 0xEA, 0x00, 0x27, 0x29, 0xAF, 0x00, 0x27, 0xCF, 0xCC, 0x00, 0x29, 0x09, 0x91, 0x00, -0x29, 0xAF, 0xAE, 0x00, 0x2A, 0xE9, 0x73, 0x00, 0x2B, 0x98, 0xCA, 0x80, 0x2C, 0xD2, 0x8F, 0x80, -0x2D, 0x78, 0xAC, 0x80, 0x2E, 0xB2, 0x71, 0x80, 0x2F, 0x58, 0x8E, 0x80, 0x30, 0x92, 0x53, 0x80, -0x31, 0x5D, 0x5A, 0x80, 0x32, 0x72, 0x35, 0x80, 0x33, 0x3D, 0x3C, 0x80, 0x34, 0x52, 0x17, 0x80, -0x35, 0x1D, 0x1E, 0x80, 0x36, 0x31, 0xF9, 0x80, 0x36, 0xFD, 0x00, 0x80, 0x38, 0x1B, 0x16, 0x00, -0x38, 0xDC, 0xE2, 0x80, 0x39, 0xA7, 0xE9, 0x80, 0x3A, 0xBC, 0xC4, 0x80, 0x3B, 0xDA, 0xDA, 0x00, -0x3C, 0xA5, 0xE1, 0x00, 0x3D, 0xBA, 0xBC, 0x00, 0x3E, 0x85, 0xC3, 0x00, 0x3F, 0x9A, 0x9E, 0x00, -0x40, 0x65, 0xA5, 0x00, 0x41, 0x83, 0xBA, 0x80, 0x42, 0x45, 0x87, 0x00, 0x43, 0x63, 0x9C, 0x80, -0x44, 0x2E, 0xA3, 0x80, 0x45, 0x43, 0x7E, 0x80, 0x46, 0x05, 0x4B, 0x00, 0x47, 0x23, 0x60, 0x80, -0x47, 0xEE, 0x67, 0x80, 0x49, 0x03, 0x42, 0x80, 0x49, 0xCE, 0x49, 0x80, 0x4A, 0xE3, 0x24, 0x80, -0x4B, 0xAE, 0x2B, 0x80, 0x4C, 0xCC, 0x41, 0x00, 0x4D, 0x8E, 0x0D, 0x80, 0x4E, 0xAC, 0x23, 0x00, -0x4F, 0x6D, 0xEF, 0x80, 0x50, 0x8C, 0x05, 0x00, 0x51, 0x57, 0x0C, 0x00, 0x52, 0x6B, 0xE7, 0x00, -0x53, 0x36, 0xEE, 0x00, 0x54, 0x4B, 0xC9, 0x00, 0x55, 0x16, 0xD0, 0x00, 0x56, 0x2B, 0xAB, 0x00, -0x56, 0xF6, 0xB2, 0x00, 0x58, 0x14, 0xC7, 0x80, 0x58, 0xD6, 0x94, 0x00, 0x59, 0xF4, 0xA9, 0x80, -0x5A, 0xB6, 0x76, 0x00, 0x5B, 0xD4, 0x8B, 0x80, 0x5C, 0x9F, 0x92, 0x80, 0x5D, 0xB4, 0x6D, 0x80, -0x5E, 0x7F, 0x74, 0x80, 0x5F, 0x94, 0x4F, 0x80, 0x60, 0x5F, 0x56, 0x80, 0x61, 0x7D, 0x6C, 0x00, -0x62, 0x3F, 0x38, 0x80, 0x63, 0x5D, 0x4E, 0x00, 0x64, 0x1F, 0x1A, 0x80, 0x65, 0x3D, 0x30, 0x00, -0x66, 0x08, 0x37, 0x00, 0x67, 0x1D, 0x12, 0x00, 0x67, 0xE8, 0x19, 0x00, 0x68, 0xFC, 0xF4, 0x00, -0x69, 0xC7, 0xFB, 0x00, 0x6A, 0xDC, 0xD6, 0x00, 0x6B, 0xA7, 0xDD, 0x00, 0x6C, 0xC5, 0xF2, 0x80, -0x6D, 0x87, 0xBF, 0x00, 0x6E, 0xA5, 0xD4, 0x80, 0x6F, 0x67, 0xA1, 0x00, 0x70, 0x85, 0xB6, 0x80, -0x71, 0x50, 0xBD, 0x80, 0x72, 0x65, 0x98, 0x80, 0x73, 0x30, 0x9F, 0x80, 0x74, 0x45, 0x7A, 0x80, -0x75, 0x10, 0x81, 0x80, 0x76, 0x2E, 0x97, 0x00, 0x76, 0xF0, 0x63, 0x80, 0x78, 0x0E, 0x79, 0x00, -0x78, 0xD0, 0x45, 0x80, 0x79, 0xEE, 0x5B, 0x00, 0x7A, 0xB0, 0x27, 0x80, 0x7B, 0xCE, 0x3D, 0x00, -0x7C, 0x99, 0x44, 0x00, 0x7D, 0xAE, 0x1F, 0x00, 0x7E, 0x79, 0x26, 0x00, 0x7F, 0x8E, 0x01, 0x00, -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, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x9A, -0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, -0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, -0x00, - -/* Australia/Adelaide */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xAD, 0xA4, -0x9C, 0xBC, 0x27, 0xF8, 0xCB, 0x54, 0xBA, 0x08, 0xCB, 0xC7, 0x5E, 0x78, 0xCC, 0xB7, 0x5D, 0x88, -0xCD, 0xA7, 0x40, 0x78, 0xCE, 0xA0, 0x7A, 0x08, 0xCF, 0x87, 0x22, 0x78, 0x03, 0x70, 0x40, 0x88, -0x04, 0x0D, 0x23, 0x08, 0x05, 0x50, 0x22, 0x88, 0x05, 0xF6, 0x3F, 0x88, 0x07, 0x30, 0x04, 0x88, -0x07, 0xD6, 0x21, 0x88, 0x09, 0x0F, 0xE6, 0x88, 0x09, 0xB6, 0x03, 0x88, 0x0A, 0xEF, 0xC8, 0x88, -0x0B, 0x9F, 0x20, 0x08, 0x0C, 0xD8, 0xE5, 0x08, 0x0D, 0x7F, 0x02, 0x08, 0x0E, 0xB8, 0xC7, 0x08, -0x0F, 0x5E, 0xE4, 0x08, 0x10, 0x98, 0xA9, 0x08, 0x11, 0x3E, 0xC6, 0x08, 0x12, 0x78, 0x8B, 0x08, -0x13, 0x1E, 0xA8, 0x08, 0x14, 0x58, 0x6D, 0x08, 0x14, 0xFE, 0x8A, 0x08, 0x16, 0x38, 0x4F, 0x08, -0x16, 0xE7, 0xA6, 0x88, 0x18, 0x21, 0x6B, 0x88, 0x18, 0xC7, 0x88, 0x88, 0x1A, 0x01, 0x4D, 0x88, -0x1A, 0xA7, 0x6A, 0x88, 0x1B, 0xE1, 0x2F, 0x88, 0x1C, 0x87, 0x4C, 0x88, 0x1D, 0xC1, 0x11, 0x88, -0x1E, 0x79, 0xA3, 0x88, 0x1F, 0x97, 0xB9, 0x08, 0x20, 0x59, 0x85, 0x88, 0x21, 0x80, 0xD5, 0x88, -0x22, 0x42, 0xA2, 0x08, 0x23, 0x69, 0xF2, 0x08, 0x24, 0x22, 0x84, 0x08, 0x25, 0x49, 0xD4, 0x08, -0x26, 0x02, 0x66, 0x08, 0x27, 0x29, 0xB6, 0x08, 0x27, 0xCF, 0xD3, 0x08, 0x29, 0x09, 0x98, 0x08, -0x29, 0xCB, 0x64, 0x88, 0x2A, 0xE9, 0x7A, 0x08, 0x2B, 0x98, 0xD1, 0x88, 0x2C, 0xD2, 0x96, 0x88, -0x2D, 0x8B, 0x28, 0x88, 0x2E, 0xB2, 0x78, 0x88, 0x2F, 0x74, 0x45, 0x08, 0x30, 0x92, 0x5A, 0x88, -0x31, 0x5D, 0x61, 0x88, 0x32, 0x72, 0x3C, 0x88, 0x33, 0x3D, 0x43, 0x88, 0x34, 0x52, 0x1E, 0x88, -0x35, 0x1D, 0x25, 0x88, 0x36, 0x32, 0x00, 0x88, 0x36, 0xFD, 0x07, 0x88, 0x38, 0x1B, 0x1D, 0x08, -0x38, 0xDC, 0xE9, 0x88, 0x39, 0xFA, 0xFF, 0x08, 0x3A, 0xBC, 0xCB, 0x88, 0x3B, 0xDA, 0xE1, 0x08, -0x3C, 0xA5, 0xE8, 0x08, 0x3D, 0xBA, 0xC3, 0x08, 0x3E, 0x85, 0xCA, 0x08, 0x3F, 0x9A, 0xA5, 0x08, -0x40, 0x65, 0xAC, 0x08, 0x41, 0x83, 0xC1, 0x88, 0x42, 0x45, 0x8E, 0x08, 0x43, 0x63, 0xA3, 0x88, -0x44, 0x2E, 0xAA, 0x88, 0x45, 0x43, 0x85, 0x88, 0x46, 0x05, 0x52, 0x08, 0x47, 0x23, 0x67, 0x88, -0x47, 0xEE, 0x6E, 0x88, 0x49, 0x03, 0x49, 0x88, 0x49, 0xCE, 0x50, 0x88, 0x4A, 0xE3, 0x2B, 0x88, -0x4B, 0xAE, 0x32, 0x88, 0x4C, 0xCC, 0x48, 0x08, 0x4D, 0x8E, 0x14, 0x88, 0x4E, 0xAC, 0x2A, 0x08, -0x4F, 0x6D, 0xF6, 0x88, 0x50, 0x8C, 0x0C, 0x08, 0x51, 0x57, 0x13, 0x08, 0x52, 0x6B, 0xEE, 0x08, -0x53, 0x36, 0xF5, 0x08, 0x54, 0x4B, 0xD0, 0x08, 0x55, 0x16, 0xD7, 0x08, 0x56, 0x2B, 0xB2, 0x08, -0x56, 0xF6, 0xB9, 0x08, 0x58, 0x14, 0xCE, 0x88, 0x58, 0xD6, 0x9B, 0x08, 0x59, 0xF4, 0xB0, 0x88, -0x5A, 0xB6, 0x7D, 0x08, 0x5B, 0xD4, 0x92, 0x88, 0x5C, 0x9F, 0x99, 0x88, 0x5D, 0xB4, 0x74, 0x88, -0x5E, 0x7F, 0x7B, 0x88, 0x5F, 0x94, 0x56, 0x88, 0x60, 0x5F, 0x5D, 0x88, 0x61, 0x7D, 0x73, 0x08, -0x62, 0x3F, 0x3F, 0x88, 0x63, 0x5D, 0x55, 0x08, 0x64, 0x1F, 0x21, 0x88, 0x65, 0x3D, 0x37, 0x08, -0x66, 0x08, 0x3E, 0x08, 0x67, 0x1D, 0x19, 0x08, 0x67, 0xE8, 0x20, 0x08, 0x68, 0xFC, 0xFB, 0x08, -0x69, 0xC8, 0x02, 0x08, 0x6A, 0xDC, 0xDD, 0x08, 0x6B, 0xA7, 0xE4, 0x08, 0x6C, 0xC5, 0xF9, 0x88, -0x6D, 0x87, 0xC6, 0x08, 0x6E, 0xA5, 0xDB, 0x88, 0x6F, 0x67, 0xA8, 0x08, 0x70, 0x85, 0xBD, 0x88, -0x71, 0x50, 0xC4, 0x88, 0x72, 0x65, 0x9F, 0x88, 0x73, 0x30, 0xA6, 0x88, 0x74, 0x45, 0x81, 0x88, -0x75, 0x10, 0x88, 0x88, 0x76, 0x2E, 0x9E, 0x08, 0x76, 0xF0, 0x6A, 0x88, 0x78, 0x0E, 0x80, 0x08, -0x78, 0xD0, 0x4C, 0x88, 0x79, 0xEE, 0x62, 0x08, 0x7A, 0xB0, 0x2E, 0x88, 0x7B, 0xCE, 0x44, 0x08, -0x7C, 0x99, 0x4B, 0x08, 0x7D, 0xAE, 0x26, 0x08, 0x7E, 0x79, 0x2D, 0x08, 0x7F, 0x8E, 0x08, 0x08, -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, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x93, -0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00, 0x00, 0x00, 0x93, 0xA8, 0x01, 0x00, 0x00, -0x00, 0x85, 0x98, 0x00, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, -0x00, - -/* Australia/Brisbane */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xA6, 0x9C, -0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80, -0xCD, 0xA7, 0x39, 0x70, 0xCE, 0xA0, 0x73, 0x00, 0xCF, 0x87, 0x1B, 0x70, 0x03, 0x70, 0x39, 0x80, -0x04, 0x0D, 0x1C, 0x00, 0x25, 0x49, 0xCD, 0x00, 0x25, 0xEF, 0xEA, 0x00, 0x27, 0x29, 0xAF, 0x00, -0x27, 0xCF, 0xCC, 0x00, 0x29, 0x09, 0x91, 0x00, 0x29, 0xAF, 0xAE, 0x00, 0x00, 0x01, 0x00, 0x01, -0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x9A, 0xB0, -0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00, -0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - - -/* Australia/Broken_Hill */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xAD, 0xA4, -0x9C, 0xBC, 0x27, 0xF8, 0xCB, 0x54, 0xBA, 0x08, 0xCB, 0xC7, 0x5E, 0x78, 0xCC, 0xB7, 0x5D, 0x88, -0xCD, 0xA7, 0x40, 0x78, 0xCE, 0xA0, 0x7A, 0x08, 0xCF, 0x87, 0x22, 0x78, 0x03, 0x70, 0x40, 0x88, -0x04, 0x0D, 0x23, 0x08, 0x05, 0x50, 0x22, 0x88, 0x05, 0xF6, 0x3F, 0x88, 0x07, 0x30, 0x04, 0x88, -0x07, 0xD6, 0x21, 0x88, 0x09, 0x0F, 0xE6, 0x88, 0x09, 0xB6, 0x03, 0x88, 0x0A, 0xEF, 0xC8, 0x88, -0x0B, 0x9F, 0x20, 0x08, 0x0C, 0xD8, 0xE5, 0x08, 0x0D, 0x7F, 0x02, 0x08, 0x0E, 0xB8, 0xC7, 0x08, -0x0F, 0x5E, 0xE4, 0x08, 0x10, 0x98, 0xA9, 0x08, 0x11, 0x3E, 0xC6, 0x08, 0x12, 0x78, 0x8B, 0x08, -0x13, 0x1E, 0xA8, 0x08, 0x14, 0x58, 0x6D, 0x08, 0x14, 0xFE, 0x8A, 0x08, 0x16, 0x38, 0x4F, 0x08, -0x17, 0x0C, 0x90, 0x88, 0x18, 0x21, 0x6B, 0x88, 0x18, 0xC7, 0x88, 0x88, 0x1A, 0x01, 0x4D, 0x88, -0x1A, 0xA7, 0x6A, 0x88, 0x1B, 0xE1, 0x2F, 0x88, 0x1C, 0x87, 0x4C, 0x88, 0x1D, 0xC1, 0x11, 0x88, -0x1E, 0x79, 0xA3, 0x88, 0x1F, 0x97, 0xB9, 0x08, 0x20, 0x59, 0x85, 0x88, 0x21, 0x80, 0xD5, 0x88, -0x22, 0x42, 0xA2, 0x08, 0x23, 0x69, 0xF2, 0x08, 0x24, 0x22, 0x84, 0x08, 0x25, 0x49, 0xD4, 0x08, -0x25, 0xEF, 0xF1, 0x08, 0x27, 0x29, 0xB6, 0x08, 0x27, 0xCF, 0xD3, 0x08, 0x29, 0x09, 0x98, 0x08, -0x29, 0xAF, 0xB5, 0x08, 0x2A, 0xE9, 0x7A, 0x08, 0x2B, 0x98, 0xD1, 0x88, 0x2C, 0xD2, 0x96, 0x88, -0x2D, 0x78, 0xB3, 0x88, 0x2E, 0xB2, 0x78, 0x88, 0x2F, 0x58, 0x95, 0x88, 0x30, 0x92, 0x5A, 0x88, -0x31, 0x5D, 0x61, 0x88, 0x32, 0x72, 0x3C, 0x88, 0x33, 0x3D, 0x43, 0x88, 0x34, 0x52, 0x1E, 0x88, -0x35, 0x1D, 0x25, 0x88, 0x36, 0x32, 0x00, 0x88, 0x36, 0xFD, 0x07, 0x88, 0x38, 0x1B, 0x1D, 0x08, -0x38, 0x6C, 0xAF, 0xD8, 0x38, 0xDC, 0xE9, 0x88, 0x39, 0xFA, 0xFF, 0x08, 0x3A, 0xBC, 0xCB, 0x88, -0x3B, 0xDA, 0xE1, 0x08, 0x3C, 0xA5, 0xE8, 0x08, 0x3D, 0xBA, 0xC3, 0x08, 0x3E, 0x85, 0xCA, 0x08, -0x3F, 0x9A, 0xA5, 0x08, 0x40, 0x65, 0xAC, 0x08, 0x41, 0x83, 0xC1, 0x88, 0x42, 0x45, 0x8E, 0x08, -0x43, 0x63, 0xA3, 0x88, 0x44, 0x2E, 0xAA, 0x88, 0x45, 0x43, 0x85, 0x88, 0x46, 0x05, 0x52, 0x08, -0x47, 0x23, 0x67, 0x88, 0x47, 0xEE, 0x6E, 0x88, 0x49, 0x03, 0x49, 0x88, 0x49, 0xCE, 0x50, 0x88, -0x4A, 0xE3, 0x2B, 0x88, 0x4B, 0xAE, 0x32, 0x88, 0x4C, 0xCC, 0x48, 0x08, 0x4D, 0x8E, 0x14, 0x88, -0x4E, 0xAC, 0x2A, 0x08, 0x4F, 0x6D, 0xF6, 0x88, 0x50, 0x8C, 0x0C, 0x08, 0x51, 0x57, 0x13, 0x08, -0x52, 0x6B, 0xEE, 0x08, 0x53, 0x36, 0xF5, 0x08, 0x54, 0x4B, 0xD0, 0x08, 0x55, 0x16, 0xD7, 0x08, -0x56, 0x2B, 0xB2, 0x08, 0x56, 0xF6, 0xB9, 0x08, 0x58, 0x14, 0xCE, 0x88, 0x58, 0xD6, 0x9B, 0x08, -0x59, 0xF4, 0xB0, 0x88, 0x5A, 0xB6, 0x7D, 0x08, 0x5B, 0xD4, 0x92, 0x88, 0x5C, 0x9F, 0x99, 0x88, -0x5D, 0xB4, 0x74, 0x88, 0x5E, 0x7F, 0x7B, 0x88, 0x5F, 0x94, 0x56, 0x88, 0x60, 0x5F, 0x5D, 0x88, -0x61, 0x7D, 0x73, 0x08, 0x62, 0x3F, 0x3F, 0x88, 0x63, 0x5D, 0x55, 0x08, 0x64, 0x1F, 0x21, 0x88, -0x65, 0x3D, 0x37, 0x08, 0x66, 0x08, 0x3E, 0x08, 0x67, 0x1D, 0x19, 0x08, 0x67, 0xE8, 0x20, 0x08, -0x68, 0xFC, 0xFB, 0x08, 0x69, 0xC8, 0x02, 0x08, 0x6A, 0xDC, 0xDD, 0x08, 0x6B, 0xA7, 0xE4, 0x08, -0x6C, 0xC5, 0xF9, 0x88, 0x6D, 0x87, 0xC6, 0x08, 0x6E, 0xA5, 0xDB, 0x88, 0x6F, 0x67, 0xA8, 0x08, -0x70, 0x85, 0xBD, 0x88, 0x71, 0x50, 0xC4, 0x88, 0x72, 0x65, 0x9F, 0x88, 0x73, 0x30, 0xA6, 0x88, -0x74, 0x45, 0x81, 0x88, 0x75, 0x10, 0x88, 0x88, 0x76, 0x2E, 0x9E, 0x08, 0x76, 0xF0, 0x6A, 0x88, -0x78, 0x0E, 0x80, 0x08, 0x78, 0xD0, 0x4C, 0x88, 0x79, 0xEE, 0x62, 0x08, 0x7A, 0xB0, 0x2E, 0x88, -0x7B, 0xCE, 0x44, 0x08, 0x7C, 0x99, 0x4B, 0x08, 0x7D, 0xAE, 0x26, 0x08, 0x7E, 0x79, 0x2D, 0x08, -0x7F, 0x8E, 0x08, 0x08, 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, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x00, 0x00, 0x93, 0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00, 0x00, 0x00, -0x93, 0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, -0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - -/* Australia/Canberra */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xA6, 0x9C, -0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80, -0xCD, 0xA7, 0x39, 0x70, 0xCE, 0xA0, 0x73, 0x00, 0xCF, 0x87, 0x1B, 0x70, 0x03, 0x70, 0x39, 0x80, -0x04, 0x0D, 0x1C, 0x00, 0x05, 0x50, 0x1B, 0x80, 0x05, 0xF6, 0x38, 0x80, 0x07, 0x2F, 0xFD, 0x80, -0x07, 0xD6, 0x1A, 0x80, 0x09, 0x0F, 0xDF, 0x80, 0x09, 0xB5, 0xFC, 0x80, 0x0A, 0xEF, 0xC1, 0x80, -0x0B, 0x9F, 0x19, 0x00, 0x0C, 0xD8, 0xDE, 0x00, 0x0D, 0x7E, 0xFB, 0x00, 0x0E, 0xB8, 0xC0, 0x00, -0x0F, 0x5E, 0xDD, 0x00, 0x10, 0x98, 0xA2, 0x00, 0x11, 0x3E, 0xBF, 0x00, 0x12, 0x78, 0x84, 0x00, -0x13, 0x1E, 0xA1, 0x00, 0x14, 0x58, 0x66, 0x00, 0x14, 0xFE, 0x83, 0x00, 0x16, 0x38, 0x48, 0x00, -0x17, 0x0C, 0x89, 0x80, 0x18, 0x21, 0x64, 0x80, 0x18, 0xC7, 0x81, 0x80, 0x1A, 0x01, 0x46, 0x80, -0x1A, 0xA7, 0x63, 0x80, 0x1B, 0xE1, 0x28, 0x80, 0x1C, 0x87, 0x45, 0x80, 0x1D, 0xC1, 0x0A, 0x80, -0x1E, 0x79, 0x9C, 0x80, 0x1F, 0x97, 0xB2, 0x00, 0x20, 0x59, 0x7E, 0x80, 0x21, 0x80, 0xCE, 0x80, -0x22, 0x42, 0x9B, 0x00, 0x23, 0x69, 0xEB, 0x00, 0x24, 0x22, 0x7D, 0x00, 0x25, 0x49, 0xCD, 0x00, -0x25, 0xEF, 0xEA, 0x00, 0x27, 0x29, 0xAF, 0x00, 0x27, 0xCF, 0xCC, 0x00, 0x29, 0x09, 0x91, 0x00, -0x29, 0xAF, 0xAE, 0x00, 0x2A, 0xE9, 0x73, 0x00, 0x2B, 0x98, 0xCA, 0x80, 0x2C, 0xD2, 0x8F, 0x80, -0x2D, 0x78, 0xAC, 0x80, 0x2E, 0xB2, 0x71, 0x80, 0x2F, 0x58, 0x8E, 0x80, 0x30, 0x92, 0x53, 0x80, -0x31, 0x5D, 0x5A, 0x80, 0x32, 0x72, 0x35, 0x80, 0x33, 0x3D, 0x3C, 0x80, 0x34, 0x52, 0x17, 0x80, -0x35, 0x1D, 0x1E, 0x80, 0x36, 0x31, 0xF9, 0x80, 0x36, 0xFD, 0x00, 0x80, 0x38, 0x1B, 0x16, 0x00, -0x38, 0xDC, 0xE2, 0x80, 0x39, 0xA7, 0xE9, 0x80, 0x3A, 0xBC, 0xC4, 0x80, 0x3B, 0xDA, 0xDA, 0x00, -0x3C, 0xA5, 0xE1, 0x00, 0x3D, 0xBA, 0xBC, 0x00, 0x3E, 0x85, 0xC3, 0x00, 0x3F, 0x9A, 0x9E, 0x00, -0x40, 0x65, 0xA5, 0x00, 0x41, 0x83, 0xBA, 0x80, 0x42, 0x45, 0x87, 0x00, 0x43, 0x63, 0x9C, 0x80, -0x44, 0x2E, 0xA3, 0x80, 0x45, 0x43, 0x7E, 0x80, 0x46, 0x05, 0x4B, 0x00, 0x47, 0x23, 0x60, 0x80, -0x47, 0xEE, 0x67, 0x80, 0x49, 0x03, 0x42, 0x80, 0x49, 0xCE, 0x49, 0x80, 0x4A, 0xE3, 0x24, 0x80, -0x4B, 0xAE, 0x2B, 0x80, 0x4C, 0xCC, 0x41, 0x00, 0x4D, 0x8E, 0x0D, 0x80, 0x4E, 0xAC, 0x23, 0x00, -0x4F, 0x6D, 0xEF, 0x80, 0x50, 0x8C, 0x05, 0x00, 0x51, 0x57, 0x0C, 0x00, 0x52, 0x6B, 0xE7, 0x00, -0x53, 0x36, 0xEE, 0x00, 0x54, 0x4B, 0xC9, 0x00, 0x55, 0x16, 0xD0, 0x00, 0x56, 0x2B, 0xAB, 0x00, -0x56, 0xF6, 0xB2, 0x00, 0x58, 0x14, 0xC7, 0x80, 0x58, 0xD6, 0x94, 0x00, 0x59, 0xF4, 0xA9, 0x80, -0x5A, 0xB6, 0x76, 0x00, 0x5B, 0xD4, 0x8B, 0x80, 0x5C, 0x9F, 0x92, 0x80, 0x5D, 0xB4, 0x6D, 0x80, -0x5E, 0x7F, 0x74, 0x80, 0x5F, 0x94, 0x4F, 0x80, 0x60, 0x5F, 0x56, 0x80, 0x61, 0x7D, 0x6C, 0x00, -0x62, 0x3F, 0x38, 0x80, 0x63, 0x5D, 0x4E, 0x00, 0x64, 0x1F, 0x1A, 0x80, 0x65, 0x3D, 0x30, 0x00, -0x66, 0x08, 0x37, 0x00, 0x67, 0x1D, 0x12, 0x00, 0x67, 0xE8, 0x19, 0x00, 0x68, 0xFC, 0xF4, 0x00, -0x69, 0xC7, 0xFB, 0x00, 0x6A, 0xDC, 0xD6, 0x00, 0x6B, 0xA7, 0xDD, 0x00, 0x6C, 0xC5, 0xF2, 0x80, -0x6D, 0x87, 0xBF, 0x00, 0x6E, 0xA5, 0xD4, 0x80, 0x6F, 0x67, 0xA1, 0x00, 0x70, 0x85, 0xB6, 0x80, -0x71, 0x50, 0xBD, 0x80, 0x72, 0x65, 0x98, 0x80, 0x73, 0x30, 0x9F, 0x80, 0x74, 0x45, 0x7A, 0x80, -0x75, 0x10, 0x81, 0x80, 0x76, 0x2E, 0x97, 0x00, 0x76, 0xF0, 0x63, 0x80, 0x78, 0x0E, 0x79, 0x00, -0x78, 0xD0, 0x45, 0x80, 0x79, 0xEE, 0x5B, 0x00, 0x7A, 0xB0, 0x27, 0x80, 0x7B, 0xCE, 0x3D, 0x00, -0x7C, 0x99, 0x44, 0x00, 0x7D, 0xAE, 0x1F, 0x00, 0x7E, 0x79, 0x26, 0x00, 0x7F, 0x8E, 0x01, 0x00, -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, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x9A, -0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, -0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, -0x00, - -/* Australia/Currie */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9B, 0xD5, 0x78, 0x80, -0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80, -0xCD, 0xA7, 0x39, 0x70, 0xCE, 0xA0, 0x73, 0x00, 0xCF, 0x87, 0x1B, 0x70, 0x03, 0x70, 0x39, 0x80, -0x04, 0x0D, 0x1C, 0x00, 0x05, 0x50, 0x1B, 0x80, 0x05, 0xF6, 0x38, 0x80, 0x07, 0x2F, 0xFD, 0x80, -0x07, 0xD6, 0x1A, 0x80, 0x09, 0x0F, 0xDF, 0x80, 0x09, 0xB5, 0xFC, 0x80, 0x0A, 0xEF, 0xC1, 0x80, -0x0B, 0x9F, 0x19, 0x00, 0x0C, 0xD8, 0xDE, 0x00, 0x0D, 0x7E, 0xFB, 0x00, 0x0E, 0xB8, 0xC0, 0x00, -0x0F, 0x5E, 0xDD, 0x00, 0x10, 0x98, 0xA2, 0x00, 0x11, 0x3E, 0xBF, 0x00, 0x12, 0x78, 0x84, 0x00, -0x13, 0x1E, 0xA1, 0x00, 0x14, 0x58, 0x66, 0x00, 0x14, 0xFE, 0x83, 0x00, 0x16, 0x38, 0x48, 0x00, -0x17, 0x03, 0x4F, 0x00, 0x18, 0x21, 0x64, 0x80, 0x18, 0xE3, 0x31, 0x00, 0x1A, 0x01, 0x46, 0x80, -0x1A, 0xA7, 0x63, 0x80, 0x1B, 0xE1, 0x28, 0x80, 0x1C, 0x87, 0x45, 0x80, 0x1D, 0xC1, 0x0A, 0x80, -0x1E, 0x67, 0x27, 0x80, 0x1F, 0x97, 0xB2, 0x00, 0x20, 0x59, 0x7E, 0x80, 0x21, 0x80, 0xCE, 0x80, -0x22, 0x42, 0x9B, 0x00, 0x23, 0x69, 0xEB, 0x00, 0x24, 0x22, 0x7D, 0x00, 0x25, 0x49, 0xCD, 0x00, -0x26, 0x02, 0x5F, 0x00, 0x27, 0x29, 0xAF, 0x00, 0x27, 0xF4, 0xB6, 0x00, 0x28, 0xED, 0xE1, 0x80, -0x29, 0xD4, 0x98, 0x00, 0x2A, 0xCD, 0xC3, 0x80, 0x2B, 0xB4, 0x7A, 0x00, 0x2C, 0xAD, 0xA5, 0x80, -0x2D, 0x94, 0x5C, 0x00, 0x2E, 0x8D, 0x87, 0x80, 0x2F, 0x74, 0x3E, 0x00, 0x30, 0x6D, 0x69, 0x80, -0x31, 0x5D, 0x5A, 0x80, 0x32, 0x56, 0x86, 0x00, 0x33, 0x3D, 0x3C, 0x80, 0x34, 0x36, 0x68, 0x00, -0x35, 0x1D, 0x1E, 0x80, 0x36, 0x16, 0x4A, 0x00, 0x36, 0xFD, 0x00, 0x80, 0x37, 0xF6, 0x2C, 0x00, -0x38, 0xDC, 0xE2, 0x80, 0x39, 0xA7, 0xE9, 0x80, 0x3A, 0xBC, 0xC4, 0x80, 0x3B, 0xBF, 0x2A, 0x80, -0x3C, 0xA5, 0xE1, 0x00, 0x3D, 0x9F, 0x0C, 0x80, 0x3E, 0x85, 0xC3, 0x00, 0x3F, 0x7E, 0xEE, 0x80, -0x40, 0x65, 0xA5, 0x00, 0x41, 0x5E, 0xD0, 0x80, 0x42, 0x45, 0x87, 0x00, 0x43, 0x3E, 0xB2, 0x80, -0x44, 0x2E, 0xA3, 0x80, 0x45, 0x1E, 0x94, 0x80, 0x46, 0x05, 0x4B, 0x00, 0x47, 0x07, 0xB1, 0x00, -0x47, 0xEE, 0x67, 0x80, 0x48, 0xE7, 0x93, 0x00, 0x49, 0xCE, 0x49, 0x80, 0x4A, 0xC7, 0x75, 0x00, -0x4B, 0xAE, 0x2B, 0x80, 0x4C, 0xA7, 0x57, 0x00, 0x4D, 0x8E, 0x0D, 0x80, 0x4E, 0x87, 0x39, 0x00, -0x4F, 0x6D, 0xEF, 0x80, 0x50, 0x70, 0x55, 0x80, 0x51, 0x57, 0x0C, 0x00, 0x52, 0x50, 0x37, 0x80, -0x53, 0x36, 0xEE, 0x00, 0x54, 0x30, 0x19, 0x80, 0x55, 0x16, 0xD0, 0x00, 0x56, 0x0F, 0xFB, 0x80, -0x56, 0xF6, 0xB2, 0x00, 0x57, 0xEF, 0xDD, 0x80, 0x58, 0xD6, 0x94, 0x00, 0x59, 0xCF, 0xBF, 0x80, -0x5A, 0xB6, 0x76, 0x00, 0x5B, 0xB8, 0xDC, 0x00, 0x5C, 0x9F, 0x92, 0x80, 0x5D, 0x98, 0xBE, 0x00, -0x5E, 0x7F, 0x74, 0x80, 0x5F, 0x78, 0xA0, 0x00, 0x60, 0x5F, 0x56, 0x80, 0x61, 0x58, 0x82, 0x00, -0x62, 0x3F, 0x38, 0x80, 0x63, 0x38, 0x64, 0x00, 0x64, 0x1F, 0x1A, 0x80, 0x65, 0x18, 0x46, 0x00, -0x66, 0x08, 0x37, 0x00, 0x67, 0x01, 0x62, 0x80, 0x67, 0xE8, 0x19, 0x00, 0x68, 0xE1, 0x44, 0x80, -0x69, 0xC7, 0xFB, 0x00, 0x6A, 0xC1, 0x26, 0x80, 0x6B, 0xA7, 0xDD, 0x00, 0x6C, 0xA1, 0x08, 0x80, -0x6D, 0x87, 0xBF, 0x00, 0x6E, 0x80, 0xEA, 0x80, 0x6F, 0x67, 0xA1, 0x00, 0x70, 0x6A, 0x07, 0x00, -0x71, 0x50, 0xBD, 0x80, 0x72, 0x49, 0xE9, 0x00, 0x73, 0x30, 0x9F, 0x80, 0x74, 0x29, 0xCB, 0x00, -0x75, 0x10, 0x81, 0x80, 0x76, 0x09, 0xAD, 0x00, 0x76, 0xF0, 0x63, 0x80, 0x77, 0xE9, 0x8F, 0x00, -0x78, 0xD0, 0x45, 0x80, 0x79, 0xC9, 0x71, 0x00, 0x7A, 0xB0, 0x27, 0x80, 0x7B, 0xB2, 0x8D, 0x80, -0x7C, 0x99, 0x44, 0x00, 0x7D, 0x92, 0x6F, 0x80, 0x7E, 0x79, 0x26, 0x00, 0x7F, 0x72, 0x51, 0x80, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x8C, -0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, -0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, -0x00, - -/* Australia/Darwin */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xAD, 0xA4, -0x9C, 0xBC, 0x27, 0xF8, 0xCB, 0x54, 0xBA, 0x08, 0xCB, 0xC7, 0x5E, 0x78, 0xCC, 0xB7, 0x5D, 0x88, -0xCD, 0xA7, 0x40, 0x78, 0xCE, 0xA0, 0x7A, 0x08, 0xCF, 0x87, 0x22, 0x78, 0x00, 0x01, 0x00, 0x01, -0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x93, 0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00, -0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Australia/Eucla */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x9C, 0x4E, 0xB8, 0x30, -0x9C, 0xBC, 0x32, 0x84, 0xCB, 0x54, 0xC4, 0x94, 0xCB, 0xC7, 0x69, 0x04, 0xCC, 0xB7, 0x68, 0x14, -0xCD, 0xA7, 0x4B, 0x04, 0x09, 0x0F, 0xF1, 0x14, 0x09, 0xB6, 0x0E, 0x14, 0x1A, 0x01, 0x58, 0x14, -0x1A, 0xA7, 0x75, 0x14, 0x29, 0x25, 0x52, 0x14, 0x29, 0xAF, 0xBF, 0x94, 0x45, 0x71, 0xB4, 0x94, -0x46, 0x05, 0x5C, 0x94, 0x47, 0x23, 0x72, 0x14, 0x47, 0xEE, 0x79, 0x14, 0x49, 0x03, 0x54, 0x14, -0x49, 0xCE, 0x5B, 0x14, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x89, 0x1C, 0x01, 0x00, 0x00, 0x00, 0x7B, 0x0C, -0x00, 0x00, 0x00, 0x00, 0x89, 0x1C, 0x01, 0x00, 0x00, 0x00, 0x7B, 0x0C, 0x00, 0x00, 0x43, 0x57, -0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - -/* Australia/Hobart */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9B, 0xD5, 0x78, 0x80, -0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80, -0xCD, 0xA7, 0x39, 0x70, 0xCE, 0xA0, 0x73, 0x00, 0xCF, 0x87, 0x1B, 0x70, 0xFB, 0xC2, 0x8D, 0x00, -0xFC, 0xB2, 0x7E, 0x00, 0xFD, 0xC7, 0x59, 0x00, 0xFE, 0x76, 0xB0, 0x80, 0xFF, 0xA7, 0x3B, 0x00, -0x00, 0x56, 0x92, 0x80, 0x01, 0x87, 0x1D, 0x00, 0x02, 0x3F, 0xAF, 0x00, 0x03, 0x70, 0x39, 0x80, -0x04, 0x0D, 0x1C, 0x00, 0x05, 0x50, 0x1B, 0x80, 0x05, 0xF6, 0x38, 0x80, 0x07, 0x2F, 0xFD, 0x80, -0x07, 0xD6, 0x1A, 0x80, 0x09, 0x0F, 0xDF, 0x80, 0x09, 0xB5, 0xFC, 0x80, 0x0A, 0xEF, 0xC1, 0x80, -0x0B, 0x9F, 0x19, 0x00, 0x0C, 0xD8, 0xDE, 0x00, 0x0D, 0x7E, 0xFB, 0x00, 0x0E, 0xB8, 0xC0, 0x00, -0x0F, 0x5E, 0xDD, 0x00, 0x10, 0x98, 0xA2, 0x00, 0x11, 0x3E, 0xBF, 0x00, 0x12, 0x78, 0x84, 0x00, -0x13, 0x1E, 0xA1, 0x00, 0x14, 0x58, 0x66, 0x00, 0x14, 0xFE, 0x83, 0x00, 0x16, 0x38, 0x48, 0x00, -0x17, 0x03, 0x4F, 0x00, 0x18, 0x21, 0x64, 0x80, 0x18, 0xE3, 0x31, 0x00, 0x1A, 0x01, 0x46, 0x80, -0x1A, 0xA7, 0x63, 0x80, 0x1B, 0xE1, 0x28, 0x80, 0x1C, 0x87, 0x45, 0x80, 0x1D, 0xC1, 0x0A, 0x80, -0x1E, 0x67, 0x27, 0x80, 0x1F, 0x97, 0xB2, 0x00, 0x20, 0x59, 0x7E, 0x80, 0x21, 0x80, 0xCE, 0x80, -0x22, 0x42, 0x9B, 0x00, 0x23, 0x69, 0xEB, 0x00, 0x24, 0x22, 0x7D, 0x00, 0x25, 0x49, 0xCD, 0x00, -0x26, 0x02, 0x5F, 0x00, 0x27, 0x29, 0xAF, 0x00, 0x27, 0xF4, 0xB6, 0x00, 0x28, 0xED, 0xE1, 0x80, -0x29, 0xD4, 0x98, 0x00, 0x2A, 0xCD, 0xC3, 0x80, 0x2B, 0xB4, 0x7A, 0x00, 0x2C, 0xAD, 0xA5, 0x80, -0x2D, 0x94, 0x5C, 0x00, 0x2E, 0x8D, 0x87, 0x80, 0x2F, 0x74, 0x3E, 0x00, 0x30, 0x6D, 0x69, 0x80, -0x31, 0x5D, 0x5A, 0x80, 0x32, 0x56, 0x86, 0x00, 0x33, 0x3D, 0x3C, 0x80, 0x34, 0x36, 0x68, 0x00, -0x35, 0x1D, 0x1E, 0x80, 0x36, 0x16, 0x4A, 0x00, 0x36, 0xFD, 0x00, 0x80, 0x37, 0xF6, 0x2C, 0x00, -0x38, 0xDC, 0xE2, 0x80, 0x39, 0xA7, 0xE9, 0x80, 0x3A, 0xBC, 0xC4, 0x80, 0x3B, 0xBF, 0x2A, 0x80, -0x3C, 0xA5, 0xE1, 0x00, 0x3D, 0x9F, 0x0C, 0x80, 0x3E, 0x85, 0xC3, 0x00, 0x3F, 0x7E, 0xEE, 0x80, -0x40, 0x65, 0xA5, 0x00, 0x41, 0x5E, 0xD0, 0x80, 0x42, 0x45, 0x87, 0x00, 0x43, 0x3E, 0xB2, 0x80, -0x44, 0x2E, 0xA3, 0x80, 0x45, 0x1E, 0x94, 0x80, 0x46, 0x05, 0x4B, 0x00, 0x47, 0x07, 0xB1, 0x00, -0x47, 0xEE, 0x67, 0x80, 0x48, 0xE7, 0x93, 0x00, 0x49, 0xCE, 0x49, 0x80, 0x4A, 0xC7, 0x75, 0x00, -0x4B, 0xAE, 0x2B, 0x80, 0x4C, 0xA7, 0x57, 0x00, 0x4D, 0x8E, 0x0D, 0x80, 0x4E, 0x87, 0x39, 0x00, -0x4F, 0x6D, 0xEF, 0x80, 0x50, 0x70, 0x55, 0x80, 0x51, 0x57, 0x0C, 0x00, 0x52, 0x50, 0x37, 0x80, -0x53, 0x36, 0xEE, 0x00, 0x54, 0x30, 0x19, 0x80, 0x55, 0x16, 0xD0, 0x00, 0x56, 0x0F, 0xFB, 0x80, -0x56, 0xF6, 0xB2, 0x00, 0x57, 0xEF, 0xDD, 0x80, 0x58, 0xD6, 0x94, 0x00, 0x59, 0xCF, 0xBF, 0x80, -0x5A, 0xB6, 0x76, 0x00, 0x5B, 0xB8, 0xDC, 0x00, 0x5C, 0x9F, 0x92, 0x80, 0x5D, 0x98, 0xBE, 0x00, -0x5E, 0x7F, 0x74, 0x80, 0x5F, 0x78, 0xA0, 0x00, 0x60, 0x5F, 0x56, 0x80, 0x61, 0x58, 0x82, 0x00, -0x62, 0x3F, 0x38, 0x80, 0x63, 0x38, 0x64, 0x00, 0x64, 0x1F, 0x1A, 0x80, 0x65, 0x18, 0x46, 0x00, -0x66, 0x08, 0x37, 0x00, 0x67, 0x01, 0x62, 0x80, 0x67, 0xE8, 0x19, 0x00, 0x68, 0xE1, 0x44, 0x80, -0x69, 0xC7, 0xFB, 0x00, 0x6A, 0xC1, 0x26, 0x80, 0x6B, 0xA7, 0xDD, 0x00, 0x6C, 0xA1, 0x08, 0x80, -0x6D, 0x87, 0xBF, 0x00, 0x6E, 0x80, 0xEA, 0x80, 0x6F, 0x67, 0xA1, 0x00, 0x70, 0x6A, 0x07, 0x00, -0x71, 0x50, 0xBD, 0x80, 0x72, 0x49, 0xE9, 0x00, 0x73, 0x30, 0x9F, 0x80, 0x74, 0x29, 0xCB, 0x00, -0x75, 0x10, 0x81, 0x80, 0x76, 0x09, 0xAD, 0x00, 0x76, 0xF0, 0x63, 0x80, 0x77, 0xE9, 0x8F, 0x00, -0x78, 0xD0, 0x45, 0x80, 0x79, 0xC9, 0x71, 0x00, 0x7A, 0xB0, 0x27, 0x80, 0x7B, 0xB2, 0x8D, 0x80, -0x7C, 0x99, 0x44, 0x00, 0x7D, 0x92, 0x6F, 0x80, 0x7E, 0x79, 0x26, 0x00, 0x7F, 0x72, 0x51, 0x80, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, -0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, -0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - -/* Australia/LHI */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x14, 0xFE, 0x66, 0xE0, -0x16, 0x38, 0x40, 0xF8, 0x16, 0xE7, 0x8A, 0x68, 0x18, 0x21, 0x5D, 0x78, 0x18, 0xC7, 0x6C, 0x68, -0x1A, 0x01, 0x3F, 0x78, 0x1A, 0xA7, 0x4E, 0x68, 0x1B, 0xE1, 0x21, 0x78, 0x1C, 0x87, 0x30, 0x68, -0x1D, 0xC1, 0x03, 0x78, 0x1E, 0x79, 0x8E, 0x70, 0x1F, 0x97, 0xAA, 0xF8, 0x20, 0x59, 0x70, 0x70, -0x21, 0x80, 0xC7, 0x78, 0x22, 0x42, 0x8C, 0xF0, 0x23, 0x69, 0xE3, 0xF8, 0x24, 0x22, 0x6E, 0xF0, -0x25, 0x49, 0xC5, 0xF8, 0x25, 0xEF, 0xDB, 0xF0, 0x27, 0x29, 0xA7, 0xF8, 0x27, 0xCF, 0xBD, 0xF0, -0x29, 0x09, 0x89, 0xF8, 0x29, 0xAF, 0x9F, 0xF0, 0x2A, 0xE9, 0x6B, 0xF8, 0x2B, 0x98, 0xBC, 0x70, -0x2C, 0xD2, 0x88, 0x78, 0x2D, 0x78, 0x9E, 0x70, 0x2E, 0xB2, 0x6A, 0x78, 0x2F, 0x58, 0x80, 0x70, -0x30, 0x92, 0x4C, 0x78, 0x31, 0x5D, 0x4C, 0x70, 0x32, 0x72, 0x2E, 0x78, 0x33, 0x3D, 0x2E, 0x70, -0x34, 0x52, 0x10, 0x78, 0x35, 0x1D, 0x10, 0x70, 0x36, 0x31, 0xF2, 0x78, 0x36, 0xFC, 0xF2, 0x70, -0x38, 0x1B, 0x0E, 0xF8, 0x38, 0xDC, 0xD4, 0x70, 0x39, 0xA7, 0xE2, 0x78, 0x3A, 0xBC, 0xB6, 0x70, -0x3B, 0xDA, 0xD2, 0xF8, 0x3C, 0xA5, 0xD2, 0xF0, 0x3D, 0xBA, 0xB4, 0xF8, 0x3E, 0x85, 0xB4, 0xF0, -0x3F, 0x9A, 0x96, 0xF8, 0x40, 0x65, 0x96, 0xF0, 0x41, 0x83, 0xB3, 0x78, 0x42, 0x45, 0x78, 0xF0, -0x43, 0x63, 0x95, 0x78, 0x44, 0x2E, 0x95, 0x70, 0x45, 0x43, 0x77, 0x78, 0x46, 0x05, 0x3C, 0xF0, -0x47, 0x23, 0x59, 0x78, 0x47, 0xEE, 0x59, 0x70, 0x49, 0x03, 0x3B, 0x78, 0x49, 0xCE, 0x3B, 0x70, -0x4A, 0xE3, 0x1D, 0x78, 0x4B, 0xAE, 0x1D, 0x70, 0x4C, 0xCC, 0x39, 0xF8, 0x4D, 0x8D, 0xFF, 0x70, -0x4E, 0xAC, 0x1B, 0xF8, 0x4F, 0x6D, 0xE1, 0x70, 0x50, 0x8B, 0xFD, 0xF8, 0x51, 0x56, 0xFD, 0xF0, -0x52, 0x6B, 0xDF, 0xF8, 0x53, 0x36, 0xDF, 0xF0, 0x54, 0x4B, 0xC1, 0xF8, 0x55, 0x16, 0xC1, 0xF0, -0x56, 0x2B, 0xA3, 0xF8, 0x56, 0xF6, 0xA3, 0xF0, 0x58, 0x14, 0xC0, 0x78, 0x58, 0xD6, 0x85, 0xF0, -0x59, 0xF4, 0xA2, 0x78, 0x5A, 0xB6, 0x67, 0xF0, 0x5B, 0xD4, 0x84, 0x78, 0x5C, 0x9F, 0x84, 0x70, -0x5D, 0xB4, 0x66, 0x78, 0x5E, 0x7F, 0x66, 0x70, 0x5F, 0x94, 0x48, 0x78, 0x60, 0x5F, 0x48, 0x70, -0x61, 0x7D, 0x64, 0xF8, 0x62, 0x3F, 0x2A, 0x70, 0x63, 0x5D, 0x46, 0xF8, 0x64, 0x1F, 0x0C, 0x70, -0x65, 0x3D, 0x28, 0xF8, 0x66, 0x08, 0x28, 0xF0, 0x67, 0x1D, 0x0A, 0xF8, 0x67, 0xE8, 0x0A, 0xF0, -0x68, 0xFC, 0xEC, 0xF8, 0x69, 0xC7, 0xEC, 0xF0, 0x6A, 0xDC, 0xCE, 0xF8, 0x6B, 0xA7, 0xCE, 0xF0, -0x6C, 0xC5, 0xEB, 0x78, 0x6D, 0x87, 0xB0, 0xF0, 0x6E, 0xA5, 0xCD, 0x78, 0x6F, 0x67, 0x92, 0xF0, -0x70, 0x85, 0xAF, 0x78, 0x71, 0x50, 0xAF, 0x70, 0x72, 0x65, 0x91, 0x78, 0x73, 0x30, 0x91, 0x70, -0x74, 0x45, 0x73, 0x78, 0x75, 0x10, 0x73, 0x70, 0x76, 0x2E, 0x8F, 0xF8, 0x76, 0xF0, 0x55, 0x70, -0x78, 0x0E, 0x71, 0xF8, 0x78, 0xD0, 0x37, 0x70, 0x79, 0xEE, 0x53, 0xF8, 0x7A, 0xB0, 0x19, 0x70, -0x7B, 0xCE, 0x35, 0xF8, 0x7C, 0x99, 0x35, 0xF0, 0x7D, 0xAE, 0x17, 0xF8, 0x7E, 0x79, 0x17, 0xF0, -0x7F, 0x8D, 0xF9, 0xF8, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 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, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 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, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xB8, -0x01, 0x04, 0x00, 0x00, 0x93, 0xA8, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x04, 0x45, 0x53, -0x54, 0x00, 0x4C, 0x48, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Australia/Lindeman */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xA6, 0x9C, -0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80, -0xCD, 0xA7, 0x39, 0x70, 0xCE, 0xA0, 0x73, 0x00, 0xCF, 0x87, 0x1B, 0x70, 0x03, 0x70, 0x39, 0x80, -0x04, 0x0D, 0x1C, 0x00, 0x25, 0x49, 0xCD, 0x00, 0x25, 0xEF, 0xEA, 0x00, 0x27, 0x29, 0xAF, 0x00, -0x27, 0xCF, 0xCC, 0x00, 0x29, 0x09, 0x91, 0x00, 0x29, 0xAF, 0xAE, 0x00, 0x2A, 0x50, 0x68, 0xE0, -0x2A, 0xE9, 0x73, 0x00, 0x2B, 0x98, 0xCA, 0x80, 0x2C, 0xD2, 0x8F, 0x80, 0x2D, 0x78, 0xAC, 0x80, -0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x01, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, -0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - -/* Australia/Lord_Howe */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x14, 0xFE, 0x66, 0xE0, -0x16, 0x38, 0x40, 0xF8, 0x16, 0xE7, 0x8A, 0x68, 0x18, 0x21, 0x5D, 0x78, 0x18, 0xC7, 0x6C, 0x68, -0x1A, 0x01, 0x3F, 0x78, 0x1A, 0xA7, 0x4E, 0x68, 0x1B, 0xE1, 0x21, 0x78, 0x1C, 0x87, 0x30, 0x68, -0x1D, 0xC1, 0x03, 0x78, 0x1E, 0x79, 0x8E, 0x70, 0x1F, 0x97, 0xAA, 0xF8, 0x20, 0x59, 0x70, 0x70, -0x21, 0x80, 0xC7, 0x78, 0x22, 0x42, 0x8C, 0xF0, 0x23, 0x69, 0xE3, 0xF8, 0x24, 0x22, 0x6E, 0xF0, -0x25, 0x49, 0xC5, 0xF8, 0x25, 0xEF, 0xDB, 0xF0, 0x27, 0x29, 0xA7, 0xF8, 0x27, 0xCF, 0xBD, 0xF0, -0x29, 0x09, 0x89, 0xF8, 0x29, 0xAF, 0x9F, 0xF0, 0x2A, 0xE9, 0x6B, 0xF8, 0x2B, 0x98, 0xBC, 0x70, -0x2C, 0xD2, 0x88, 0x78, 0x2D, 0x78, 0x9E, 0x70, 0x2E, 0xB2, 0x6A, 0x78, 0x2F, 0x58, 0x80, 0x70, -0x30, 0x92, 0x4C, 0x78, 0x31, 0x5D, 0x4C, 0x70, 0x32, 0x72, 0x2E, 0x78, 0x33, 0x3D, 0x2E, 0x70, -0x34, 0x52, 0x10, 0x78, 0x35, 0x1D, 0x10, 0x70, 0x36, 0x31, 0xF2, 0x78, 0x36, 0xFC, 0xF2, 0x70, -0x38, 0x1B, 0x0E, 0xF8, 0x38, 0xDC, 0xD4, 0x70, 0x39, 0xA7, 0xE2, 0x78, 0x3A, 0xBC, 0xB6, 0x70, -0x3B, 0xDA, 0xD2, 0xF8, 0x3C, 0xA5, 0xD2, 0xF0, 0x3D, 0xBA, 0xB4, 0xF8, 0x3E, 0x85, 0xB4, 0xF0, -0x3F, 0x9A, 0x96, 0xF8, 0x40, 0x65, 0x96, 0xF0, 0x41, 0x83, 0xB3, 0x78, 0x42, 0x45, 0x78, 0xF0, -0x43, 0x63, 0x95, 0x78, 0x44, 0x2E, 0x95, 0x70, 0x45, 0x43, 0x77, 0x78, 0x46, 0x05, 0x3C, 0xF0, -0x47, 0x23, 0x59, 0x78, 0x47, 0xEE, 0x59, 0x70, 0x49, 0x03, 0x3B, 0x78, 0x49, 0xCE, 0x3B, 0x70, -0x4A, 0xE3, 0x1D, 0x78, 0x4B, 0xAE, 0x1D, 0x70, 0x4C, 0xCC, 0x39, 0xF8, 0x4D, 0x8D, 0xFF, 0x70, -0x4E, 0xAC, 0x1B, 0xF8, 0x4F, 0x6D, 0xE1, 0x70, 0x50, 0x8B, 0xFD, 0xF8, 0x51, 0x56, 0xFD, 0xF0, -0x52, 0x6B, 0xDF, 0xF8, 0x53, 0x36, 0xDF, 0xF0, 0x54, 0x4B, 0xC1, 0xF8, 0x55, 0x16, 0xC1, 0xF0, -0x56, 0x2B, 0xA3, 0xF8, 0x56, 0xF6, 0xA3, 0xF0, 0x58, 0x14, 0xC0, 0x78, 0x58, 0xD6, 0x85, 0xF0, -0x59, 0xF4, 0xA2, 0x78, 0x5A, 0xB6, 0x67, 0xF0, 0x5B, 0xD4, 0x84, 0x78, 0x5C, 0x9F, 0x84, 0x70, -0x5D, 0xB4, 0x66, 0x78, 0x5E, 0x7F, 0x66, 0x70, 0x5F, 0x94, 0x48, 0x78, 0x60, 0x5F, 0x48, 0x70, -0x61, 0x7D, 0x64, 0xF8, 0x62, 0x3F, 0x2A, 0x70, 0x63, 0x5D, 0x46, 0xF8, 0x64, 0x1F, 0x0C, 0x70, -0x65, 0x3D, 0x28, 0xF8, 0x66, 0x08, 0x28, 0xF0, 0x67, 0x1D, 0x0A, 0xF8, 0x67, 0xE8, 0x0A, 0xF0, -0x68, 0xFC, 0xEC, 0xF8, 0x69, 0xC7, 0xEC, 0xF0, 0x6A, 0xDC, 0xCE, 0xF8, 0x6B, 0xA7, 0xCE, 0xF0, -0x6C, 0xC5, 0xEB, 0x78, 0x6D, 0x87, 0xB0, 0xF0, 0x6E, 0xA5, 0xCD, 0x78, 0x6F, 0x67, 0x92, 0xF0, -0x70, 0x85, 0xAF, 0x78, 0x71, 0x50, 0xAF, 0x70, 0x72, 0x65, 0x91, 0x78, 0x73, 0x30, 0x91, 0x70, -0x74, 0x45, 0x73, 0x78, 0x75, 0x10, 0x73, 0x70, 0x76, 0x2E, 0x8F, 0xF8, 0x76, 0xF0, 0x55, 0x70, -0x78, 0x0E, 0x71, 0xF8, 0x78, 0xD0, 0x37, 0x70, 0x79, 0xEE, 0x53, 0xF8, 0x7A, 0xB0, 0x19, 0x70, -0x7B, 0xCE, 0x35, 0xF8, 0x7C, 0x99, 0x35, 0xF0, 0x7D, 0xAE, 0x17, 0xF8, 0x7E, 0x79, 0x17, 0xF0, -0x7F, 0x8D, 0xF9, 0xF8, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 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, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 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, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xB8, -0x01, 0x04, 0x00, 0x00, 0x93, 0xA8, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x04, 0x45, 0x53, -0x54, 0x00, 0x4C, 0x48, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Australia/Melbourne */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xA6, 0x9C, -0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80, -0xCD, 0xA7, 0x39, 0x70, 0xCE, 0xA0, 0x73, 0x00, 0xCF, 0x87, 0x1B, 0x70, 0x03, 0x70, 0x39, 0x80, -0x04, 0x0D, 0x1C, 0x00, 0x05, 0x50, 0x1B, 0x80, 0x05, 0xF6, 0x38, 0x80, 0x07, 0x2F, 0xFD, 0x80, -0x07, 0xD6, 0x1A, 0x80, 0x09, 0x0F, 0xDF, 0x80, 0x09, 0xB5, 0xFC, 0x80, 0x0A, 0xEF, 0xC1, 0x80, -0x0B, 0x9F, 0x19, 0x00, 0x0C, 0xD8, 0xDE, 0x00, 0x0D, 0x7E, 0xFB, 0x00, 0x0E, 0xB8, 0xC0, 0x00, -0x0F, 0x5E, 0xDD, 0x00, 0x10, 0x98, 0xA2, 0x00, 0x11, 0x3E, 0xBF, 0x00, 0x12, 0x78, 0x84, 0x00, -0x13, 0x1E, 0xA1, 0x00, 0x14, 0x58, 0x66, 0x00, 0x14, 0xFE, 0x83, 0x00, 0x16, 0x38, 0x48, 0x00, -0x16, 0xE7, 0x9F, 0x80, 0x18, 0x21, 0x64, 0x80, 0x18, 0xC7, 0x81, 0x80, 0x1A, 0x01, 0x46, 0x80, -0x1A, 0xA7, 0x63, 0x80, 0x1B, 0xE1, 0x28, 0x80, 0x1C, 0x87, 0x45, 0x80, 0x1D, 0xC1, 0x0A, 0x80, -0x1E, 0x79, 0x9C, 0x80, 0x1F, 0x97, 0xB2, 0x00, 0x20, 0x59, 0x7E, 0x80, 0x21, 0x77, 0x94, 0x00, -0x22, 0x42, 0x9B, 0x00, 0x23, 0x69, 0xEB, 0x00, 0x24, 0x22, 0x7D, 0x00, 0x25, 0x49, 0xCD, 0x00, -0x26, 0x02, 0x5F, 0x00, 0x27, 0x29, 0xAF, 0x00, 0x27, 0xCF, 0xCC, 0x00, 0x29, 0x09, 0x91, 0x00, -0x29, 0xAF, 0xAE, 0x00, 0x2A, 0xE9, 0x73, 0x00, 0x2B, 0x98, 0xCA, 0x80, 0x2C, 0xD2, 0x8F, 0x80, -0x2D, 0x78, 0xAC, 0x80, 0x2E, 0xB2, 0x71, 0x80, 0x2F, 0x74, 0x3E, 0x00, 0x30, 0x92, 0x53, 0x80, -0x31, 0x5D, 0x5A, 0x80, 0x32, 0x72, 0x35, 0x80, 0x33, 0x3D, 0x3C, 0x80, 0x34, 0x52, 0x17, 0x80, -0x35, 0x1D, 0x1E, 0x80, 0x36, 0x31, 0xF9, 0x80, 0x36, 0xFD, 0x00, 0x80, 0x38, 0x1B, 0x16, 0x00, -0x38, 0xDC, 0xE2, 0x80, 0x39, 0xA7, 0xE9, 0x80, 0x3A, 0xBC, 0xC4, 0x80, 0x3B, 0xDA, 0xDA, 0x00, -0x3C, 0xA5, 0xE1, 0x00, 0x3D, 0xBA, 0xBC, 0x00, 0x3E, 0x85, 0xC3, 0x00, 0x3F, 0x9A, 0x9E, 0x00, -0x40, 0x65, 0xA5, 0x00, 0x41, 0x83, 0xBA, 0x80, 0x42, 0x45, 0x87, 0x00, 0x43, 0x63, 0x9C, 0x80, -0x44, 0x2E, 0xA3, 0x80, 0x45, 0x43, 0x7E, 0x80, 0x46, 0x05, 0x4B, 0x00, 0x47, 0x23, 0x60, 0x80, -0x47, 0xEE, 0x67, 0x80, 0x49, 0x03, 0x42, 0x80, 0x49, 0xCE, 0x49, 0x80, 0x4A, 0xE3, 0x24, 0x80, -0x4B, 0xAE, 0x2B, 0x80, 0x4C, 0xCC, 0x41, 0x00, 0x4D, 0x8E, 0x0D, 0x80, 0x4E, 0xAC, 0x23, 0x00, -0x4F, 0x6D, 0xEF, 0x80, 0x50, 0x8C, 0x05, 0x00, 0x51, 0x57, 0x0C, 0x00, 0x52, 0x6B, 0xE7, 0x00, -0x53, 0x36, 0xEE, 0x00, 0x54, 0x4B, 0xC9, 0x00, 0x55, 0x16, 0xD0, 0x00, 0x56, 0x2B, 0xAB, 0x00, -0x56, 0xF6, 0xB2, 0x00, 0x58, 0x14, 0xC7, 0x80, 0x58, 0xD6, 0x94, 0x00, 0x59, 0xF4, 0xA9, 0x80, -0x5A, 0xB6, 0x76, 0x00, 0x5B, 0xD4, 0x8B, 0x80, 0x5C, 0x9F, 0x92, 0x80, 0x5D, 0xB4, 0x6D, 0x80, -0x5E, 0x7F, 0x74, 0x80, 0x5F, 0x94, 0x4F, 0x80, 0x60, 0x5F, 0x56, 0x80, 0x61, 0x7D, 0x6C, 0x00, -0x62, 0x3F, 0x38, 0x80, 0x63, 0x5D, 0x4E, 0x00, 0x64, 0x1F, 0x1A, 0x80, 0x65, 0x3D, 0x30, 0x00, -0x66, 0x08, 0x37, 0x00, 0x67, 0x1D, 0x12, 0x00, 0x67, 0xE8, 0x19, 0x00, 0x68, 0xFC, 0xF4, 0x00, -0x69, 0xC7, 0xFB, 0x00, 0x6A, 0xDC, 0xD6, 0x00, 0x6B, 0xA7, 0xDD, 0x00, 0x6C, 0xC5, 0xF2, 0x80, -0x6D, 0x87, 0xBF, 0x00, 0x6E, 0xA5, 0xD4, 0x80, 0x6F, 0x67, 0xA1, 0x00, 0x70, 0x85, 0xB6, 0x80, -0x71, 0x50, 0xBD, 0x80, 0x72, 0x65, 0x98, 0x80, 0x73, 0x30, 0x9F, 0x80, 0x74, 0x45, 0x7A, 0x80, -0x75, 0x10, 0x81, 0x80, 0x76, 0x2E, 0x97, 0x00, 0x76, 0xF0, 0x63, 0x80, 0x78, 0x0E, 0x79, 0x00, -0x78, 0xD0, 0x45, 0x80, 0x79, 0xEE, 0x5B, 0x00, 0x7A, 0xB0, 0x27, 0x80, 0x7B, 0xCE, 0x3D, 0x00, -0x7C, 0x99, 0x44, 0x00, 0x7D, 0xAE, 0x1F, 0x00, 0x7E, 0x79, 0x26, 0x00, 0x7F, 0x8E, 0x01, 0x00, -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, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x9A, -0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, -0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, -0x00, - -/* Australia/North */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xAD, 0xA4, -0x9C, 0xBC, 0x27, 0xF8, 0xCB, 0x54, 0xBA, 0x08, 0xCB, 0xC7, 0x5E, 0x78, 0xCC, 0xB7, 0x5D, 0x88, -0xCD, 0xA7, 0x40, 0x78, 0xCE, 0xA0, 0x7A, 0x08, 0xCF, 0x87, 0x22, 0x78, 0x00, 0x01, 0x00, 0x01, -0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x93, 0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00, -0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Australia/NSW */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xA6, 0x9C, -0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80, -0xCD, 0xA7, 0x39, 0x70, 0xCE, 0xA0, 0x73, 0x00, 0xCF, 0x87, 0x1B, 0x70, 0x03, 0x70, 0x39, 0x80, -0x04, 0x0D, 0x1C, 0x00, 0x05, 0x50, 0x1B, 0x80, 0x05, 0xF6, 0x38, 0x80, 0x07, 0x2F, 0xFD, 0x80, -0x07, 0xD6, 0x1A, 0x80, 0x09, 0x0F, 0xDF, 0x80, 0x09, 0xB5, 0xFC, 0x80, 0x0A, 0xEF, 0xC1, 0x80, -0x0B, 0x9F, 0x19, 0x00, 0x0C, 0xD8, 0xDE, 0x00, 0x0D, 0x7E, 0xFB, 0x00, 0x0E, 0xB8, 0xC0, 0x00, -0x0F, 0x5E, 0xDD, 0x00, 0x10, 0x98, 0xA2, 0x00, 0x11, 0x3E, 0xBF, 0x00, 0x12, 0x78, 0x84, 0x00, -0x13, 0x1E, 0xA1, 0x00, 0x14, 0x58, 0x66, 0x00, 0x14, 0xFE, 0x83, 0x00, 0x16, 0x38, 0x48, 0x00, -0x17, 0x0C, 0x89, 0x80, 0x18, 0x21, 0x64, 0x80, 0x18, 0xC7, 0x81, 0x80, 0x1A, 0x01, 0x46, 0x80, -0x1A, 0xA7, 0x63, 0x80, 0x1B, 0xE1, 0x28, 0x80, 0x1C, 0x87, 0x45, 0x80, 0x1D, 0xC1, 0x0A, 0x80, -0x1E, 0x79, 0x9C, 0x80, 0x1F, 0x97, 0xB2, 0x00, 0x20, 0x59, 0x7E, 0x80, 0x21, 0x80, 0xCE, 0x80, -0x22, 0x42, 0x9B, 0x00, 0x23, 0x69, 0xEB, 0x00, 0x24, 0x22, 0x7D, 0x00, 0x25, 0x49, 0xCD, 0x00, -0x25, 0xEF, 0xEA, 0x00, 0x27, 0x29, 0xAF, 0x00, 0x27, 0xCF, 0xCC, 0x00, 0x29, 0x09, 0x91, 0x00, -0x29, 0xAF, 0xAE, 0x00, 0x2A, 0xE9, 0x73, 0x00, 0x2B, 0x98, 0xCA, 0x80, 0x2C, 0xD2, 0x8F, 0x80, -0x2D, 0x78, 0xAC, 0x80, 0x2E, 0xB2, 0x71, 0x80, 0x2F, 0x58, 0x8E, 0x80, 0x30, 0x92, 0x53, 0x80, -0x31, 0x5D, 0x5A, 0x80, 0x32, 0x72, 0x35, 0x80, 0x33, 0x3D, 0x3C, 0x80, 0x34, 0x52, 0x17, 0x80, -0x35, 0x1D, 0x1E, 0x80, 0x36, 0x31, 0xF9, 0x80, 0x36, 0xFD, 0x00, 0x80, 0x38, 0x1B, 0x16, 0x00, -0x38, 0xDC, 0xE2, 0x80, 0x39, 0xA7, 0xE9, 0x80, 0x3A, 0xBC, 0xC4, 0x80, 0x3B, 0xDA, 0xDA, 0x00, -0x3C, 0xA5, 0xE1, 0x00, 0x3D, 0xBA, 0xBC, 0x00, 0x3E, 0x85, 0xC3, 0x00, 0x3F, 0x9A, 0x9E, 0x00, -0x40, 0x65, 0xA5, 0x00, 0x41, 0x83, 0xBA, 0x80, 0x42, 0x45, 0x87, 0x00, 0x43, 0x63, 0x9C, 0x80, -0x44, 0x2E, 0xA3, 0x80, 0x45, 0x43, 0x7E, 0x80, 0x46, 0x05, 0x4B, 0x00, 0x47, 0x23, 0x60, 0x80, -0x47, 0xEE, 0x67, 0x80, 0x49, 0x03, 0x42, 0x80, 0x49, 0xCE, 0x49, 0x80, 0x4A, 0xE3, 0x24, 0x80, -0x4B, 0xAE, 0x2B, 0x80, 0x4C, 0xCC, 0x41, 0x00, 0x4D, 0x8E, 0x0D, 0x80, 0x4E, 0xAC, 0x23, 0x00, -0x4F, 0x6D, 0xEF, 0x80, 0x50, 0x8C, 0x05, 0x00, 0x51, 0x57, 0x0C, 0x00, 0x52, 0x6B, 0xE7, 0x00, -0x53, 0x36, 0xEE, 0x00, 0x54, 0x4B, 0xC9, 0x00, 0x55, 0x16, 0xD0, 0x00, 0x56, 0x2B, 0xAB, 0x00, -0x56, 0xF6, 0xB2, 0x00, 0x58, 0x14, 0xC7, 0x80, 0x58, 0xD6, 0x94, 0x00, 0x59, 0xF4, 0xA9, 0x80, -0x5A, 0xB6, 0x76, 0x00, 0x5B, 0xD4, 0x8B, 0x80, 0x5C, 0x9F, 0x92, 0x80, 0x5D, 0xB4, 0x6D, 0x80, -0x5E, 0x7F, 0x74, 0x80, 0x5F, 0x94, 0x4F, 0x80, 0x60, 0x5F, 0x56, 0x80, 0x61, 0x7D, 0x6C, 0x00, -0x62, 0x3F, 0x38, 0x80, 0x63, 0x5D, 0x4E, 0x00, 0x64, 0x1F, 0x1A, 0x80, 0x65, 0x3D, 0x30, 0x00, -0x66, 0x08, 0x37, 0x00, 0x67, 0x1D, 0x12, 0x00, 0x67, 0xE8, 0x19, 0x00, 0x68, 0xFC, 0xF4, 0x00, -0x69, 0xC7, 0xFB, 0x00, 0x6A, 0xDC, 0xD6, 0x00, 0x6B, 0xA7, 0xDD, 0x00, 0x6C, 0xC5, 0xF2, 0x80, -0x6D, 0x87, 0xBF, 0x00, 0x6E, 0xA5, 0xD4, 0x80, 0x6F, 0x67, 0xA1, 0x00, 0x70, 0x85, 0xB6, 0x80, -0x71, 0x50, 0xBD, 0x80, 0x72, 0x65, 0x98, 0x80, 0x73, 0x30, 0x9F, 0x80, 0x74, 0x45, 0x7A, 0x80, -0x75, 0x10, 0x81, 0x80, 0x76, 0x2E, 0x97, 0x00, 0x76, 0xF0, 0x63, 0x80, 0x78, 0x0E, 0x79, 0x00, -0x78, 0xD0, 0x45, 0x80, 0x79, 0xEE, 0x5B, 0x00, 0x7A, 0xB0, 0x27, 0x80, 0x7B, 0xCE, 0x3D, 0x00, -0x7C, 0x99, 0x44, 0x00, 0x7D, 0xAE, 0x1F, 0x00, 0x7E, 0x79, 0x26, 0x00, 0x7F, 0x8E, 0x01, 0x00, -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, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x9A, -0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, -0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, -0x00, - -/* Australia/Perth */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xC2, 0xBC, -0x9C, 0xBC, 0x3D, 0x10, 0xCB, 0x54, 0xCF, 0x20, 0xCB, 0xC7, 0x73, 0x90, 0xCC, 0xB7, 0x72, 0xA0, -0xCD, 0xA7, 0x55, 0x90, 0x09, 0x0F, 0xFB, 0xA0, 0x09, 0xB6, 0x18, 0xA0, 0x1A, 0x01, 0x62, 0xA0, -0x1A, 0xA7, 0x7F, 0xA0, 0x29, 0x25, 0x5C, 0xA0, 0x29, 0xAF, 0xCA, 0x20, 0x45, 0x71, 0xBF, 0x20, -0x46, 0x05, 0x67, 0x20, 0x47, 0x23, 0x7C, 0xA0, 0x47, 0xEE, 0x83, 0xA0, 0x49, 0x03, 0x5E, 0xA0, -0x49, 0xCE, 0x65, 0xA0, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x70, 0x80, -0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x00, 0x57, 0x53, -0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - -/* Australia/Queensland */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xA6, 0x9C, -0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80, -0xCD, 0xA7, 0x39, 0x70, 0xCE, 0xA0, 0x73, 0x00, 0xCF, 0x87, 0x1B, 0x70, 0x03, 0x70, 0x39, 0x80, -0x04, 0x0D, 0x1C, 0x00, 0x25, 0x49, 0xCD, 0x00, 0x25, 0xEF, 0xEA, 0x00, 0x27, 0x29, 0xAF, 0x00, -0x27, 0xCF, 0xCC, 0x00, 0x29, 0x09, 0x91, 0x00, 0x29, 0xAF, 0xAE, 0x00, 0x00, 0x01, 0x00, 0x01, -0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x9A, 0xB0, -0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00, -0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - - -/* Australia/South */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xAD, 0xA4, -0x9C, 0xBC, 0x27, 0xF8, 0xCB, 0x54, 0xBA, 0x08, 0xCB, 0xC7, 0x5E, 0x78, 0xCC, 0xB7, 0x5D, 0x88, -0xCD, 0xA7, 0x40, 0x78, 0xCE, 0xA0, 0x7A, 0x08, 0xCF, 0x87, 0x22, 0x78, 0x03, 0x70, 0x40, 0x88, -0x04, 0x0D, 0x23, 0x08, 0x05, 0x50, 0x22, 0x88, 0x05, 0xF6, 0x3F, 0x88, 0x07, 0x30, 0x04, 0x88, -0x07, 0xD6, 0x21, 0x88, 0x09, 0x0F, 0xE6, 0x88, 0x09, 0xB6, 0x03, 0x88, 0x0A, 0xEF, 0xC8, 0x88, -0x0B, 0x9F, 0x20, 0x08, 0x0C, 0xD8, 0xE5, 0x08, 0x0D, 0x7F, 0x02, 0x08, 0x0E, 0xB8, 0xC7, 0x08, -0x0F, 0x5E, 0xE4, 0x08, 0x10, 0x98, 0xA9, 0x08, 0x11, 0x3E, 0xC6, 0x08, 0x12, 0x78, 0x8B, 0x08, -0x13, 0x1E, 0xA8, 0x08, 0x14, 0x58, 0x6D, 0x08, 0x14, 0xFE, 0x8A, 0x08, 0x16, 0x38, 0x4F, 0x08, -0x16, 0xE7, 0xA6, 0x88, 0x18, 0x21, 0x6B, 0x88, 0x18, 0xC7, 0x88, 0x88, 0x1A, 0x01, 0x4D, 0x88, -0x1A, 0xA7, 0x6A, 0x88, 0x1B, 0xE1, 0x2F, 0x88, 0x1C, 0x87, 0x4C, 0x88, 0x1D, 0xC1, 0x11, 0x88, -0x1E, 0x79, 0xA3, 0x88, 0x1F, 0x97, 0xB9, 0x08, 0x20, 0x59, 0x85, 0x88, 0x21, 0x80, 0xD5, 0x88, -0x22, 0x42, 0xA2, 0x08, 0x23, 0x69, 0xF2, 0x08, 0x24, 0x22, 0x84, 0x08, 0x25, 0x49, 0xD4, 0x08, -0x26, 0x02, 0x66, 0x08, 0x27, 0x29, 0xB6, 0x08, 0x27, 0xCF, 0xD3, 0x08, 0x29, 0x09, 0x98, 0x08, -0x29, 0xCB, 0x64, 0x88, 0x2A, 0xE9, 0x7A, 0x08, 0x2B, 0x98, 0xD1, 0x88, 0x2C, 0xD2, 0x96, 0x88, -0x2D, 0x8B, 0x28, 0x88, 0x2E, 0xB2, 0x78, 0x88, 0x2F, 0x74, 0x45, 0x08, 0x30, 0x92, 0x5A, 0x88, -0x31, 0x5D, 0x61, 0x88, 0x32, 0x72, 0x3C, 0x88, 0x33, 0x3D, 0x43, 0x88, 0x34, 0x52, 0x1E, 0x88, -0x35, 0x1D, 0x25, 0x88, 0x36, 0x32, 0x00, 0x88, 0x36, 0xFD, 0x07, 0x88, 0x38, 0x1B, 0x1D, 0x08, -0x38, 0xDC, 0xE9, 0x88, 0x39, 0xFA, 0xFF, 0x08, 0x3A, 0xBC, 0xCB, 0x88, 0x3B, 0xDA, 0xE1, 0x08, -0x3C, 0xA5, 0xE8, 0x08, 0x3D, 0xBA, 0xC3, 0x08, 0x3E, 0x85, 0xCA, 0x08, 0x3F, 0x9A, 0xA5, 0x08, -0x40, 0x65, 0xAC, 0x08, 0x41, 0x83, 0xC1, 0x88, 0x42, 0x45, 0x8E, 0x08, 0x43, 0x63, 0xA3, 0x88, -0x44, 0x2E, 0xAA, 0x88, 0x45, 0x43, 0x85, 0x88, 0x46, 0x05, 0x52, 0x08, 0x47, 0x23, 0x67, 0x88, -0x47, 0xEE, 0x6E, 0x88, 0x49, 0x03, 0x49, 0x88, 0x49, 0xCE, 0x50, 0x88, 0x4A, 0xE3, 0x2B, 0x88, -0x4B, 0xAE, 0x32, 0x88, 0x4C, 0xCC, 0x48, 0x08, 0x4D, 0x8E, 0x14, 0x88, 0x4E, 0xAC, 0x2A, 0x08, -0x4F, 0x6D, 0xF6, 0x88, 0x50, 0x8C, 0x0C, 0x08, 0x51, 0x57, 0x13, 0x08, 0x52, 0x6B, 0xEE, 0x08, -0x53, 0x36, 0xF5, 0x08, 0x54, 0x4B, 0xD0, 0x08, 0x55, 0x16, 0xD7, 0x08, 0x56, 0x2B, 0xB2, 0x08, -0x56, 0xF6, 0xB9, 0x08, 0x58, 0x14, 0xCE, 0x88, 0x58, 0xD6, 0x9B, 0x08, 0x59, 0xF4, 0xB0, 0x88, -0x5A, 0xB6, 0x7D, 0x08, 0x5B, 0xD4, 0x92, 0x88, 0x5C, 0x9F, 0x99, 0x88, 0x5D, 0xB4, 0x74, 0x88, -0x5E, 0x7F, 0x7B, 0x88, 0x5F, 0x94, 0x56, 0x88, 0x60, 0x5F, 0x5D, 0x88, 0x61, 0x7D, 0x73, 0x08, -0x62, 0x3F, 0x3F, 0x88, 0x63, 0x5D, 0x55, 0x08, 0x64, 0x1F, 0x21, 0x88, 0x65, 0x3D, 0x37, 0x08, -0x66, 0x08, 0x3E, 0x08, 0x67, 0x1D, 0x19, 0x08, 0x67, 0xE8, 0x20, 0x08, 0x68, 0xFC, 0xFB, 0x08, -0x69, 0xC8, 0x02, 0x08, 0x6A, 0xDC, 0xDD, 0x08, 0x6B, 0xA7, 0xE4, 0x08, 0x6C, 0xC5, 0xF9, 0x88, -0x6D, 0x87, 0xC6, 0x08, 0x6E, 0xA5, 0xDB, 0x88, 0x6F, 0x67, 0xA8, 0x08, 0x70, 0x85, 0xBD, 0x88, -0x71, 0x50, 0xC4, 0x88, 0x72, 0x65, 0x9F, 0x88, 0x73, 0x30, 0xA6, 0x88, 0x74, 0x45, 0x81, 0x88, -0x75, 0x10, 0x88, 0x88, 0x76, 0x2E, 0x9E, 0x08, 0x76, 0xF0, 0x6A, 0x88, 0x78, 0x0E, 0x80, 0x08, -0x78, 0xD0, 0x4C, 0x88, 0x79, 0xEE, 0x62, 0x08, 0x7A, 0xB0, 0x2E, 0x88, 0x7B, 0xCE, 0x44, 0x08, -0x7C, 0x99, 0x4B, 0x08, 0x7D, 0xAE, 0x26, 0x08, 0x7E, 0x79, 0x2D, 0x08, 0x7F, 0x8E, 0x08, 0x08, -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, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x93, -0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00, 0x00, 0x00, 0x93, 0xA8, 0x01, 0x00, 0x00, -0x00, 0x85, 0x98, 0x00, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, -0x00, - -/* Australia/Sydney */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xA6, 0x9C, -0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80, -0xCD, 0xA7, 0x39, 0x70, 0xCE, 0xA0, 0x73, 0x00, 0xCF, 0x87, 0x1B, 0x70, 0x03, 0x70, 0x39, 0x80, -0x04, 0x0D, 0x1C, 0x00, 0x05, 0x50, 0x1B, 0x80, 0x05, 0xF6, 0x38, 0x80, 0x07, 0x2F, 0xFD, 0x80, -0x07, 0xD6, 0x1A, 0x80, 0x09, 0x0F, 0xDF, 0x80, 0x09, 0xB5, 0xFC, 0x80, 0x0A, 0xEF, 0xC1, 0x80, -0x0B, 0x9F, 0x19, 0x00, 0x0C, 0xD8, 0xDE, 0x00, 0x0D, 0x7E, 0xFB, 0x00, 0x0E, 0xB8, 0xC0, 0x00, -0x0F, 0x5E, 0xDD, 0x00, 0x10, 0x98, 0xA2, 0x00, 0x11, 0x3E, 0xBF, 0x00, 0x12, 0x78, 0x84, 0x00, -0x13, 0x1E, 0xA1, 0x00, 0x14, 0x58, 0x66, 0x00, 0x14, 0xFE, 0x83, 0x00, 0x16, 0x38, 0x48, 0x00, -0x17, 0x0C, 0x89, 0x80, 0x18, 0x21, 0x64, 0x80, 0x18, 0xC7, 0x81, 0x80, 0x1A, 0x01, 0x46, 0x80, -0x1A, 0xA7, 0x63, 0x80, 0x1B, 0xE1, 0x28, 0x80, 0x1C, 0x87, 0x45, 0x80, 0x1D, 0xC1, 0x0A, 0x80, -0x1E, 0x79, 0x9C, 0x80, 0x1F, 0x97, 0xB2, 0x00, 0x20, 0x59, 0x7E, 0x80, 0x21, 0x80, 0xCE, 0x80, -0x22, 0x42, 0x9B, 0x00, 0x23, 0x69, 0xEB, 0x00, 0x24, 0x22, 0x7D, 0x00, 0x25, 0x49, 0xCD, 0x00, -0x25, 0xEF, 0xEA, 0x00, 0x27, 0x29, 0xAF, 0x00, 0x27, 0xCF, 0xCC, 0x00, 0x29, 0x09, 0x91, 0x00, -0x29, 0xAF, 0xAE, 0x00, 0x2A, 0xE9, 0x73, 0x00, 0x2B, 0x98, 0xCA, 0x80, 0x2C, 0xD2, 0x8F, 0x80, -0x2D, 0x78, 0xAC, 0x80, 0x2E, 0xB2, 0x71, 0x80, 0x2F, 0x58, 0x8E, 0x80, 0x30, 0x92, 0x53, 0x80, -0x31, 0x5D, 0x5A, 0x80, 0x32, 0x72, 0x35, 0x80, 0x33, 0x3D, 0x3C, 0x80, 0x34, 0x52, 0x17, 0x80, -0x35, 0x1D, 0x1E, 0x80, 0x36, 0x31, 0xF9, 0x80, 0x36, 0xFD, 0x00, 0x80, 0x38, 0x1B, 0x16, 0x00, -0x38, 0xDC, 0xE2, 0x80, 0x39, 0xA7, 0xE9, 0x80, 0x3A, 0xBC, 0xC4, 0x80, 0x3B, 0xDA, 0xDA, 0x00, -0x3C, 0xA5, 0xE1, 0x00, 0x3D, 0xBA, 0xBC, 0x00, 0x3E, 0x85, 0xC3, 0x00, 0x3F, 0x9A, 0x9E, 0x00, -0x40, 0x65, 0xA5, 0x00, 0x41, 0x83, 0xBA, 0x80, 0x42, 0x45, 0x87, 0x00, 0x43, 0x63, 0x9C, 0x80, -0x44, 0x2E, 0xA3, 0x80, 0x45, 0x43, 0x7E, 0x80, 0x46, 0x05, 0x4B, 0x00, 0x47, 0x23, 0x60, 0x80, -0x47, 0xEE, 0x67, 0x80, 0x49, 0x03, 0x42, 0x80, 0x49, 0xCE, 0x49, 0x80, 0x4A, 0xE3, 0x24, 0x80, -0x4B, 0xAE, 0x2B, 0x80, 0x4C, 0xCC, 0x41, 0x00, 0x4D, 0x8E, 0x0D, 0x80, 0x4E, 0xAC, 0x23, 0x00, -0x4F, 0x6D, 0xEF, 0x80, 0x50, 0x8C, 0x05, 0x00, 0x51, 0x57, 0x0C, 0x00, 0x52, 0x6B, 0xE7, 0x00, -0x53, 0x36, 0xEE, 0x00, 0x54, 0x4B, 0xC9, 0x00, 0x55, 0x16, 0xD0, 0x00, 0x56, 0x2B, 0xAB, 0x00, -0x56, 0xF6, 0xB2, 0x00, 0x58, 0x14, 0xC7, 0x80, 0x58, 0xD6, 0x94, 0x00, 0x59, 0xF4, 0xA9, 0x80, -0x5A, 0xB6, 0x76, 0x00, 0x5B, 0xD4, 0x8B, 0x80, 0x5C, 0x9F, 0x92, 0x80, 0x5D, 0xB4, 0x6D, 0x80, -0x5E, 0x7F, 0x74, 0x80, 0x5F, 0x94, 0x4F, 0x80, 0x60, 0x5F, 0x56, 0x80, 0x61, 0x7D, 0x6C, 0x00, -0x62, 0x3F, 0x38, 0x80, 0x63, 0x5D, 0x4E, 0x00, 0x64, 0x1F, 0x1A, 0x80, 0x65, 0x3D, 0x30, 0x00, -0x66, 0x08, 0x37, 0x00, 0x67, 0x1D, 0x12, 0x00, 0x67, 0xE8, 0x19, 0x00, 0x68, 0xFC, 0xF4, 0x00, -0x69, 0xC7, 0xFB, 0x00, 0x6A, 0xDC, 0xD6, 0x00, 0x6B, 0xA7, 0xDD, 0x00, 0x6C, 0xC5, 0xF2, 0x80, -0x6D, 0x87, 0xBF, 0x00, 0x6E, 0xA5, 0xD4, 0x80, 0x6F, 0x67, 0xA1, 0x00, 0x70, 0x85, 0xB6, 0x80, -0x71, 0x50, 0xBD, 0x80, 0x72, 0x65, 0x98, 0x80, 0x73, 0x30, 0x9F, 0x80, 0x74, 0x45, 0x7A, 0x80, -0x75, 0x10, 0x81, 0x80, 0x76, 0x2E, 0x97, 0x00, 0x76, 0xF0, 0x63, 0x80, 0x78, 0x0E, 0x79, 0x00, -0x78, 0xD0, 0x45, 0x80, 0x79, 0xEE, 0x5B, 0x00, 0x7A, 0xB0, 0x27, 0x80, 0x7B, 0xCE, 0x3D, 0x00, -0x7C, 0x99, 0x44, 0x00, 0x7D, 0xAE, 0x1F, 0x00, 0x7E, 0x79, 0x26, 0x00, 0x7F, 0x8E, 0x01, 0x00, -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, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x9A, -0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, -0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, -0x00, - -/* Australia/Tasmania */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9B, 0xD5, 0x78, 0x80, -0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80, -0xCD, 0xA7, 0x39, 0x70, 0xCE, 0xA0, 0x73, 0x00, 0xCF, 0x87, 0x1B, 0x70, 0xFB, 0xC2, 0x8D, 0x00, -0xFC, 0xB2, 0x7E, 0x00, 0xFD, 0xC7, 0x59, 0x00, 0xFE, 0x76, 0xB0, 0x80, 0xFF, 0xA7, 0x3B, 0x00, -0x00, 0x56, 0x92, 0x80, 0x01, 0x87, 0x1D, 0x00, 0x02, 0x3F, 0xAF, 0x00, 0x03, 0x70, 0x39, 0x80, -0x04, 0x0D, 0x1C, 0x00, 0x05, 0x50, 0x1B, 0x80, 0x05, 0xF6, 0x38, 0x80, 0x07, 0x2F, 0xFD, 0x80, -0x07, 0xD6, 0x1A, 0x80, 0x09, 0x0F, 0xDF, 0x80, 0x09, 0xB5, 0xFC, 0x80, 0x0A, 0xEF, 0xC1, 0x80, -0x0B, 0x9F, 0x19, 0x00, 0x0C, 0xD8, 0xDE, 0x00, 0x0D, 0x7E, 0xFB, 0x00, 0x0E, 0xB8, 0xC0, 0x00, -0x0F, 0x5E, 0xDD, 0x00, 0x10, 0x98, 0xA2, 0x00, 0x11, 0x3E, 0xBF, 0x00, 0x12, 0x78, 0x84, 0x00, -0x13, 0x1E, 0xA1, 0x00, 0x14, 0x58, 0x66, 0x00, 0x14, 0xFE, 0x83, 0x00, 0x16, 0x38, 0x48, 0x00, -0x17, 0x03, 0x4F, 0x00, 0x18, 0x21, 0x64, 0x80, 0x18, 0xE3, 0x31, 0x00, 0x1A, 0x01, 0x46, 0x80, -0x1A, 0xA7, 0x63, 0x80, 0x1B, 0xE1, 0x28, 0x80, 0x1C, 0x87, 0x45, 0x80, 0x1D, 0xC1, 0x0A, 0x80, -0x1E, 0x67, 0x27, 0x80, 0x1F, 0x97, 0xB2, 0x00, 0x20, 0x59, 0x7E, 0x80, 0x21, 0x80, 0xCE, 0x80, -0x22, 0x42, 0x9B, 0x00, 0x23, 0x69, 0xEB, 0x00, 0x24, 0x22, 0x7D, 0x00, 0x25, 0x49, 0xCD, 0x00, -0x26, 0x02, 0x5F, 0x00, 0x27, 0x29, 0xAF, 0x00, 0x27, 0xF4, 0xB6, 0x00, 0x28, 0xED, 0xE1, 0x80, -0x29, 0xD4, 0x98, 0x00, 0x2A, 0xCD, 0xC3, 0x80, 0x2B, 0xB4, 0x7A, 0x00, 0x2C, 0xAD, 0xA5, 0x80, -0x2D, 0x94, 0x5C, 0x00, 0x2E, 0x8D, 0x87, 0x80, 0x2F, 0x74, 0x3E, 0x00, 0x30, 0x6D, 0x69, 0x80, -0x31, 0x5D, 0x5A, 0x80, 0x32, 0x56, 0x86, 0x00, 0x33, 0x3D, 0x3C, 0x80, 0x34, 0x36, 0x68, 0x00, -0x35, 0x1D, 0x1E, 0x80, 0x36, 0x16, 0x4A, 0x00, 0x36, 0xFD, 0x00, 0x80, 0x37, 0xF6, 0x2C, 0x00, -0x38, 0xDC, 0xE2, 0x80, 0x39, 0xA7, 0xE9, 0x80, 0x3A, 0xBC, 0xC4, 0x80, 0x3B, 0xBF, 0x2A, 0x80, -0x3C, 0xA5, 0xE1, 0x00, 0x3D, 0x9F, 0x0C, 0x80, 0x3E, 0x85, 0xC3, 0x00, 0x3F, 0x7E, 0xEE, 0x80, -0x40, 0x65, 0xA5, 0x00, 0x41, 0x5E, 0xD0, 0x80, 0x42, 0x45, 0x87, 0x00, 0x43, 0x3E, 0xB2, 0x80, -0x44, 0x2E, 0xA3, 0x80, 0x45, 0x1E, 0x94, 0x80, 0x46, 0x05, 0x4B, 0x00, 0x47, 0x07, 0xB1, 0x00, -0x47, 0xEE, 0x67, 0x80, 0x48, 0xE7, 0x93, 0x00, 0x49, 0xCE, 0x49, 0x80, 0x4A, 0xC7, 0x75, 0x00, -0x4B, 0xAE, 0x2B, 0x80, 0x4C, 0xA7, 0x57, 0x00, 0x4D, 0x8E, 0x0D, 0x80, 0x4E, 0x87, 0x39, 0x00, -0x4F, 0x6D, 0xEF, 0x80, 0x50, 0x70, 0x55, 0x80, 0x51, 0x57, 0x0C, 0x00, 0x52, 0x50, 0x37, 0x80, -0x53, 0x36, 0xEE, 0x00, 0x54, 0x30, 0x19, 0x80, 0x55, 0x16, 0xD0, 0x00, 0x56, 0x0F, 0xFB, 0x80, -0x56, 0xF6, 0xB2, 0x00, 0x57, 0xEF, 0xDD, 0x80, 0x58, 0xD6, 0x94, 0x00, 0x59, 0xCF, 0xBF, 0x80, -0x5A, 0xB6, 0x76, 0x00, 0x5B, 0xB8, 0xDC, 0x00, 0x5C, 0x9F, 0x92, 0x80, 0x5D, 0x98, 0xBE, 0x00, -0x5E, 0x7F, 0x74, 0x80, 0x5F, 0x78, 0xA0, 0x00, 0x60, 0x5F, 0x56, 0x80, 0x61, 0x58, 0x82, 0x00, -0x62, 0x3F, 0x38, 0x80, 0x63, 0x38, 0x64, 0x00, 0x64, 0x1F, 0x1A, 0x80, 0x65, 0x18, 0x46, 0x00, -0x66, 0x08, 0x37, 0x00, 0x67, 0x01, 0x62, 0x80, 0x67, 0xE8, 0x19, 0x00, 0x68, 0xE1, 0x44, 0x80, -0x69, 0xC7, 0xFB, 0x00, 0x6A, 0xC1, 0x26, 0x80, 0x6B, 0xA7, 0xDD, 0x00, 0x6C, 0xA1, 0x08, 0x80, -0x6D, 0x87, 0xBF, 0x00, 0x6E, 0x80, 0xEA, 0x80, 0x6F, 0x67, 0xA1, 0x00, 0x70, 0x6A, 0x07, 0x00, -0x71, 0x50, 0xBD, 0x80, 0x72, 0x49, 0xE9, 0x00, 0x73, 0x30, 0x9F, 0x80, 0x74, 0x29, 0xCB, 0x00, -0x75, 0x10, 0x81, 0x80, 0x76, 0x09, 0xAD, 0x00, 0x76, 0xF0, 0x63, 0x80, 0x77, 0xE9, 0x8F, 0x00, -0x78, 0xD0, 0x45, 0x80, 0x79, 0xC9, 0x71, 0x00, 0x7A, 0xB0, 0x27, 0x80, 0x7B, 0xB2, 0x8D, 0x80, -0x7C, 0x99, 0x44, 0x00, 0x7D, 0x92, 0x6F, 0x80, 0x7E, 0x79, 0x26, 0x00, 0x7F, 0x72, 0x51, 0x80, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, -0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, -0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - -/* Australia/Victoria */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xA6, 0x9C, -0x9C, 0xBC, 0x20, 0xF0, 0xCB, 0x54, 0xB3, 0x00, 0xCB, 0xC7, 0x57, 0x70, 0xCC, 0xB7, 0x56, 0x80, -0xCD, 0xA7, 0x39, 0x70, 0xCE, 0xA0, 0x73, 0x00, 0xCF, 0x87, 0x1B, 0x70, 0x03, 0x70, 0x39, 0x80, -0x04, 0x0D, 0x1C, 0x00, 0x05, 0x50, 0x1B, 0x80, 0x05, 0xF6, 0x38, 0x80, 0x07, 0x2F, 0xFD, 0x80, -0x07, 0xD6, 0x1A, 0x80, 0x09, 0x0F, 0xDF, 0x80, 0x09, 0xB5, 0xFC, 0x80, 0x0A, 0xEF, 0xC1, 0x80, -0x0B, 0x9F, 0x19, 0x00, 0x0C, 0xD8, 0xDE, 0x00, 0x0D, 0x7E, 0xFB, 0x00, 0x0E, 0xB8, 0xC0, 0x00, -0x0F, 0x5E, 0xDD, 0x00, 0x10, 0x98, 0xA2, 0x00, 0x11, 0x3E, 0xBF, 0x00, 0x12, 0x78, 0x84, 0x00, -0x13, 0x1E, 0xA1, 0x00, 0x14, 0x58, 0x66, 0x00, 0x14, 0xFE, 0x83, 0x00, 0x16, 0x38, 0x48, 0x00, -0x16, 0xE7, 0x9F, 0x80, 0x18, 0x21, 0x64, 0x80, 0x18, 0xC7, 0x81, 0x80, 0x1A, 0x01, 0x46, 0x80, -0x1A, 0xA7, 0x63, 0x80, 0x1B, 0xE1, 0x28, 0x80, 0x1C, 0x87, 0x45, 0x80, 0x1D, 0xC1, 0x0A, 0x80, -0x1E, 0x79, 0x9C, 0x80, 0x1F, 0x97, 0xB2, 0x00, 0x20, 0x59, 0x7E, 0x80, 0x21, 0x77, 0x94, 0x00, -0x22, 0x42, 0x9B, 0x00, 0x23, 0x69, 0xEB, 0x00, 0x24, 0x22, 0x7D, 0x00, 0x25, 0x49, 0xCD, 0x00, -0x26, 0x02, 0x5F, 0x00, 0x27, 0x29, 0xAF, 0x00, 0x27, 0xCF, 0xCC, 0x00, 0x29, 0x09, 0x91, 0x00, -0x29, 0xAF, 0xAE, 0x00, 0x2A, 0xE9, 0x73, 0x00, 0x2B, 0x98, 0xCA, 0x80, 0x2C, 0xD2, 0x8F, 0x80, -0x2D, 0x78, 0xAC, 0x80, 0x2E, 0xB2, 0x71, 0x80, 0x2F, 0x74, 0x3E, 0x00, 0x30, 0x92, 0x53, 0x80, -0x31, 0x5D, 0x5A, 0x80, 0x32, 0x72, 0x35, 0x80, 0x33, 0x3D, 0x3C, 0x80, 0x34, 0x52, 0x17, 0x80, -0x35, 0x1D, 0x1E, 0x80, 0x36, 0x31, 0xF9, 0x80, 0x36, 0xFD, 0x00, 0x80, 0x38, 0x1B, 0x16, 0x00, -0x38, 0xDC, 0xE2, 0x80, 0x39, 0xA7, 0xE9, 0x80, 0x3A, 0xBC, 0xC4, 0x80, 0x3B, 0xDA, 0xDA, 0x00, -0x3C, 0xA5, 0xE1, 0x00, 0x3D, 0xBA, 0xBC, 0x00, 0x3E, 0x85, 0xC3, 0x00, 0x3F, 0x9A, 0x9E, 0x00, -0x40, 0x65, 0xA5, 0x00, 0x41, 0x83, 0xBA, 0x80, 0x42, 0x45, 0x87, 0x00, 0x43, 0x63, 0x9C, 0x80, -0x44, 0x2E, 0xA3, 0x80, 0x45, 0x43, 0x7E, 0x80, 0x46, 0x05, 0x4B, 0x00, 0x47, 0x23, 0x60, 0x80, -0x47, 0xEE, 0x67, 0x80, 0x49, 0x03, 0x42, 0x80, 0x49, 0xCE, 0x49, 0x80, 0x4A, 0xE3, 0x24, 0x80, -0x4B, 0xAE, 0x2B, 0x80, 0x4C, 0xCC, 0x41, 0x00, 0x4D, 0x8E, 0x0D, 0x80, 0x4E, 0xAC, 0x23, 0x00, -0x4F, 0x6D, 0xEF, 0x80, 0x50, 0x8C, 0x05, 0x00, 0x51, 0x57, 0x0C, 0x00, 0x52, 0x6B, 0xE7, 0x00, -0x53, 0x36, 0xEE, 0x00, 0x54, 0x4B, 0xC9, 0x00, 0x55, 0x16, 0xD0, 0x00, 0x56, 0x2B, 0xAB, 0x00, -0x56, 0xF6, 0xB2, 0x00, 0x58, 0x14, 0xC7, 0x80, 0x58, 0xD6, 0x94, 0x00, 0x59, 0xF4, 0xA9, 0x80, -0x5A, 0xB6, 0x76, 0x00, 0x5B, 0xD4, 0x8B, 0x80, 0x5C, 0x9F, 0x92, 0x80, 0x5D, 0xB4, 0x6D, 0x80, -0x5E, 0x7F, 0x74, 0x80, 0x5F, 0x94, 0x4F, 0x80, 0x60, 0x5F, 0x56, 0x80, 0x61, 0x7D, 0x6C, 0x00, -0x62, 0x3F, 0x38, 0x80, 0x63, 0x5D, 0x4E, 0x00, 0x64, 0x1F, 0x1A, 0x80, 0x65, 0x3D, 0x30, 0x00, -0x66, 0x08, 0x37, 0x00, 0x67, 0x1D, 0x12, 0x00, 0x67, 0xE8, 0x19, 0x00, 0x68, 0xFC, 0xF4, 0x00, -0x69, 0xC7, 0xFB, 0x00, 0x6A, 0xDC, 0xD6, 0x00, 0x6B, 0xA7, 0xDD, 0x00, 0x6C, 0xC5, 0xF2, 0x80, -0x6D, 0x87, 0xBF, 0x00, 0x6E, 0xA5, 0xD4, 0x80, 0x6F, 0x67, 0xA1, 0x00, 0x70, 0x85, 0xB6, 0x80, -0x71, 0x50, 0xBD, 0x80, 0x72, 0x65, 0x98, 0x80, 0x73, 0x30, 0x9F, 0x80, 0x74, 0x45, 0x7A, 0x80, -0x75, 0x10, 0x81, 0x80, 0x76, 0x2E, 0x97, 0x00, 0x76, 0xF0, 0x63, 0x80, 0x78, 0x0E, 0x79, 0x00, -0x78, 0xD0, 0x45, 0x80, 0x79, 0xEE, 0x5B, 0x00, 0x7A, 0xB0, 0x27, 0x80, 0x7B, 0xCE, 0x3D, 0x00, -0x7C, 0x99, 0x44, 0x00, 0x7D, 0xAE, 0x1F, 0x00, 0x7E, 0x79, 0x26, 0x00, 0x7F, 0x8E, 0x01, 0x00, -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, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x00, 0x9A, -0xB0, 0x01, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x00, 0x00, -0x00, 0x8C, 0xA0, 0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, -0x00, - -/* Australia/West */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xC2, 0xBC, -0x9C, 0xBC, 0x3D, 0x10, 0xCB, 0x54, 0xCF, 0x20, 0xCB, 0xC7, 0x73, 0x90, 0xCC, 0xB7, 0x72, 0xA0, -0xCD, 0xA7, 0x55, 0x90, 0x09, 0x0F, 0xFB, 0xA0, 0x09, 0xB6, 0x18, 0xA0, 0x1A, 0x01, 0x62, 0xA0, -0x1A, 0xA7, 0x7F, 0xA0, 0x29, 0x25, 0x5C, 0xA0, 0x29, 0xAF, 0xCA, 0x20, 0x45, 0x71, 0xBF, 0x20, -0x46, 0x05, 0x67, 0x20, 0x47, 0x23, 0x7C, 0xA0, 0x47, 0xEE, 0x83, 0xA0, 0x49, 0x03, 0x5E, 0xA0, -0x49, 0xCE, 0x65, 0xA0, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x70, 0x80, -0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x00, 0x57, 0x53, -0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - -/* Australia/Yancowinna */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x9C, 0x4E, 0xAD, 0xA4, -0x9C, 0xBC, 0x27, 0xF8, 0xCB, 0x54, 0xBA, 0x08, 0xCB, 0xC7, 0x5E, 0x78, 0xCC, 0xB7, 0x5D, 0x88, -0xCD, 0xA7, 0x40, 0x78, 0xCE, 0xA0, 0x7A, 0x08, 0xCF, 0x87, 0x22, 0x78, 0x03, 0x70, 0x40, 0x88, -0x04, 0x0D, 0x23, 0x08, 0x05, 0x50, 0x22, 0x88, 0x05, 0xF6, 0x3F, 0x88, 0x07, 0x30, 0x04, 0x88, -0x07, 0xD6, 0x21, 0x88, 0x09, 0x0F, 0xE6, 0x88, 0x09, 0xB6, 0x03, 0x88, 0x0A, 0xEF, 0xC8, 0x88, -0x0B, 0x9F, 0x20, 0x08, 0x0C, 0xD8, 0xE5, 0x08, 0x0D, 0x7F, 0x02, 0x08, 0x0E, 0xB8, 0xC7, 0x08, -0x0F, 0x5E, 0xE4, 0x08, 0x10, 0x98, 0xA9, 0x08, 0x11, 0x3E, 0xC6, 0x08, 0x12, 0x78, 0x8B, 0x08, -0x13, 0x1E, 0xA8, 0x08, 0x14, 0x58, 0x6D, 0x08, 0x14, 0xFE, 0x8A, 0x08, 0x16, 0x38, 0x4F, 0x08, -0x17, 0x0C, 0x90, 0x88, 0x18, 0x21, 0x6B, 0x88, 0x18, 0xC7, 0x88, 0x88, 0x1A, 0x01, 0x4D, 0x88, -0x1A, 0xA7, 0x6A, 0x88, 0x1B, 0xE1, 0x2F, 0x88, 0x1C, 0x87, 0x4C, 0x88, 0x1D, 0xC1, 0x11, 0x88, -0x1E, 0x79, 0xA3, 0x88, 0x1F, 0x97, 0xB9, 0x08, 0x20, 0x59, 0x85, 0x88, 0x21, 0x80, 0xD5, 0x88, -0x22, 0x42, 0xA2, 0x08, 0x23, 0x69, 0xF2, 0x08, 0x24, 0x22, 0x84, 0x08, 0x25, 0x49, 0xD4, 0x08, -0x25, 0xEF, 0xF1, 0x08, 0x27, 0x29, 0xB6, 0x08, 0x27, 0xCF, 0xD3, 0x08, 0x29, 0x09, 0x98, 0x08, -0x29, 0xAF, 0xB5, 0x08, 0x2A, 0xE9, 0x7A, 0x08, 0x2B, 0x98, 0xD1, 0x88, 0x2C, 0xD2, 0x96, 0x88, -0x2D, 0x78, 0xB3, 0x88, 0x2E, 0xB2, 0x78, 0x88, 0x2F, 0x58, 0x95, 0x88, 0x30, 0x92, 0x5A, 0x88, -0x31, 0x5D, 0x61, 0x88, 0x32, 0x72, 0x3C, 0x88, 0x33, 0x3D, 0x43, 0x88, 0x34, 0x52, 0x1E, 0x88, -0x35, 0x1D, 0x25, 0x88, 0x36, 0x32, 0x00, 0x88, 0x36, 0xFD, 0x07, 0x88, 0x38, 0x1B, 0x1D, 0x08, -0x38, 0x6C, 0xAF, 0xD8, 0x38, 0xDC, 0xE9, 0x88, 0x39, 0xFA, 0xFF, 0x08, 0x3A, 0xBC, 0xCB, 0x88, -0x3B, 0xDA, 0xE1, 0x08, 0x3C, 0xA5, 0xE8, 0x08, 0x3D, 0xBA, 0xC3, 0x08, 0x3E, 0x85, 0xCA, 0x08, -0x3F, 0x9A, 0xA5, 0x08, 0x40, 0x65, 0xAC, 0x08, 0x41, 0x83, 0xC1, 0x88, 0x42, 0x45, 0x8E, 0x08, -0x43, 0x63, 0xA3, 0x88, 0x44, 0x2E, 0xAA, 0x88, 0x45, 0x43, 0x85, 0x88, 0x46, 0x05, 0x52, 0x08, -0x47, 0x23, 0x67, 0x88, 0x47, 0xEE, 0x6E, 0x88, 0x49, 0x03, 0x49, 0x88, 0x49, 0xCE, 0x50, 0x88, -0x4A, 0xE3, 0x2B, 0x88, 0x4B, 0xAE, 0x32, 0x88, 0x4C, 0xCC, 0x48, 0x08, 0x4D, 0x8E, 0x14, 0x88, -0x4E, 0xAC, 0x2A, 0x08, 0x4F, 0x6D, 0xF6, 0x88, 0x50, 0x8C, 0x0C, 0x08, 0x51, 0x57, 0x13, 0x08, -0x52, 0x6B, 0xEE, 0x08, 0x53, 0x36, 0xF5, 0x08, 0x54, 0x4B, 0xD0, 0x08, 0x55, 0x16, 0xD7, 0x08, -0x56, 0x2B, 0xB2, 0x08, 0x56, 0xF6, 0xB9, 0x08, 0x58, 0x14, 0xCE, 0x88, 0x58, 0xD6, 0x9B, 0x08, -0x59, 0xF4, 0xB0, 0x88, 0x5A, 0xB6, 0x7D, 0x08, 0x5B, 0xD4, 0x92, 0x88, 0x5C, 0x9F, 0x99, 0x88, -0x5D, 0xB4, 0x74, 0x88, 0x5E, 0x7F, 0x7B, 0x88, 0x5F, 0x94, 0x56, 0x88, 0x60, 0x5F, 0x5D, 0x88, -0x61, 0x7D, 0x73, 0x08, 0x62, 0x3F, 0x3F, 0x88, 0x63, 0x5D, 0x55, 0x08, 0x64, 0x1F, 0x21, 0x88, -0x65, 0x3D, 0x37, 0x08, 0x66, 0x08, 0x3E, 0x08, 0x67, 0x1D, 0x19, 0x08, 0x67, 0xE8, 0x20, 0x08, -0x68, 0xFC, 0xFB, 0x08, 0x69, 0xC8, 0x02, 0x08, 0x6A, 0xDC, 0xDD, 0x08, 0x6B, 0xA7, 0xE4, 0x08, -0x6C, 0xC5, 0xF9, 0x88, 0x6D, 0x87, 0xC6, 0x08, 0x6E, 0xA5, 0xDB, 0x88, 0x6F, 0x67, 0xA8, 0x08, -0x70, 0x85, 0xBD, 0x88, 0x71, 0x50, 0xC4, 0x88, 0x72, 0x65, 0x9F, 0x88, 0x73, 0x30, 0xA6, 0x88, -0x74, 0x45, 0x81, 0x88, 0x75, 0x10, 0x88, 0x88, 0x76, 0x2E, 0x9E, 0x08, 0x76, 0xF0, 0x6A, 0x88, -0x78, 0x0E, 0x80, 0x08, 0x78, 0xD0, 0x4C, 0x88, 0x79, 0xEE, 0x62, 0x08, 0x7A, 0xB0, 0x2E, 0x88, -0x7B, 0xCE, 0x44, 0x08, 0x7C, 0x99, 0x4B, 0x08, 0x7D, 0xAE, 0x26, 0x08, 0x7E, 0x79, 0x2D, 0x08, -0x7F, 0x8E, 0x08, 0x08, 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, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x00, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x00, 0x00, 0x93, 0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00, 0x00, 0x00, -0x93, 0xA8, 0x01, 0x00, 0x00, 0x00, 0x85, 0x98, 0x00, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, -0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - -/* Brazil/Acre */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x86, 0x90, -0xB8, 0x0F, 0x66, 0x00, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xF1, 0x50, 0x50, 0xBA, 0xDE, 0x90, 0x40, -0xDA, 0x38, 0xCA, 0x50, 0xDA, 0xEC, 0x16, 0x50, 0xDC, 0x19, 0xFD, 0xD0, 0xDC, 0xB9, 0x75, 0x40, -0xDD, 0xFB, 0x31, 0x50, 0xDE, 0x9B, 0xFA, 0x40, 0xDF, 0xDD, 0xB6, 0x50, 0xE0, 0x54, 0x4F, 0x40, -0xF4, 0x98, 0x1B, 0xD0, 0xF5, 0x05, 0x7A, 0x40, 0xF6, 0xC0, 0x80, 0x50, 0xF7, 0x0E, 0x3A, 0xC0, -0xF8, 0x51, 0x48, 0x50, 0xF8, 0xC7, 0xE1, 0x40, 0xFA, 0x0A, 0xEE, 0xD0, 0xFA, 0xA9, 0x14, 0xC0, -0xFB, 0xEC, 0x22, 0x50, 0xFC, 0x8B, 0x99, 0xC0, 0x1D, 0xC9, 0xAA, 0x50, 0x1E, 0x78, 0xF3, 0xC0, -0x1F, 0xA0, 0x51, 0xD0, 0x20, 0x33, 0xEB, 0xC0, 0x21, 0x81, 0x85, 0x50, 0x22, 0x0B, 0xE4, 0xC0, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xC0, -0x70, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x09, 0x4C, -0x4D, 0x54, 0x00, 0x41, 0x43, 0x53, 0x54, 0x00, 0x41, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, - -/* Brazil/DeNoronha */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x65, 0x64, -0xB8, 0x0F, 0x3B, 0xD0, 0xB8, 0xFD, 0x32, 0x90, 0xB9, 0xF1, 0x26, 0x20, 0xBA, 0xDE, 0x66, 0x10, -0xDA, 0x38, 0xA0, 0x20, 0xDA, 0xEB, 0xEC, 0x20, 0xDC, 0x19, 0xD3, 0xA0, 0xDC, 0xB9, 0x4B, 0x10, -0xDD, 0xFB, 0x07, 0x20, 0xDE, 0x9B, 0xD0, 0x10, 0xDF, 0xDD, 0x8C, 0x20, 0xE0, 0x54, 0x25, 0x10, -0xF4, 0x97, 0xF1, 0xA0, 0xF5, 0x05, 0x50, 0x10, 0xF6, 0xC0, 0x56, 0x20, 0xF7, 0x0E, 0x10, 0x90, -0xF8, 0x51, 0x1E, 0x20, 0xF8, 0xC7, 0xB7, 0x10, 0xFA, 0x0A, 0xC4, 0xA0, 0xFA, 0xA8, 0xEA, 0x90, -0xFB, 0xEB, 0xF8, 0x20, 0xFC, 0x8B, 0x6F, 0x90, 0x1D, 0xC9, 0x80, 0x20, 0x1E, 0x78, 0xC9, 0x90, -0x1F, 0xA0, 0x27, 0xA0, 0x20, 0x33, 0xC1, 0x90, 0x21, 0x81, 0x5B, 0x20, 0x22, 0x0B, 0xBA, 0x90, -0x23, 0x58, 0x02, 0xA0, 0x23, 0xE2, 0x62, 0x10, 0x25, 0x37, 0xE4, 0xA0, 0x25, 0xD4, 0xB9, 0x10, -0x37, 0xF6, 0xB8, 0xA0, 0x38, 0xB8, 0x77, 0x10, 0x39, 0xDF, 0xD5, 0x20, 0x39, 0xE9, 0x01, 0x90, -0x3B, 0xC8, 0xF1, 0xA0, 0x3C, 0x6F, 0x00, 0x90, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, -0xFF, 0xE1, 0x9C, 0x00, 0x00, 0xFF, 0xFF, 0xF1, 0xF0, 0x01, 0x04, 0xFF, 0xFF, 0xE3, 0xE0, 0x00, -0x09, 0x4C, 0x4D, 0x54, 0x00, 0x46, 0x4E, 0x53, 0x54, 0x00, 0x46, 0x4E, 0x54, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, - -/* Brazil/East */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x72, 0xB4, -0xB8, 0x0F, 0x49, 0xE0, 0xB8, 0xFD, 0x40, 0xA0, 0xB9, 0xF1, 0x34, 0x30, 0xBA, 0xDE, 0x74, 0x20, -0xDA, 0x38, 0xAE, 0x30, 0xDA, 0xEB, 0xFA, 0x30, 0xDC, 0x19, 0xE1, 0xB0, 0xDC, 0xB9, 0x59, 0x20, -0xDD, 0xFB, 0x15, 0x30, 0xDE, 0x9B, 0xDE, 0x20, 0xDF, 0xDD, 0x9A, 0x30, 0xE0, 0x54, 0x33, 0x20, -0xF4, 0x5A, 0x09, 0x30, 0xF5, 0x05, 0x5E, 0x20, 0xF6, 0xC0, 0x64, 0x30, 0xF7, 0x0E, 0x1E, 0xA0, -0xF8, 0x51, 0x2C, 0x30, 0xF8, 0xC7, 0xC5, 0x20, 0xFA, 0x0A, 0xD2, 0xB0, 0xFA, 0xA8, 0xF8, 0xA0, -0xFB, 0xEC, 0x06, 0x30, 0xFC, 0x8B, 0x7D, 0xA0, 0x1D, 0xC9, 0x8E, 0x30, 0x1E, 0x78, 0xD7, 0xA0, -0x1F, 0xA0, 0x35, 0xB0, 0x20, 0x33, 0xCF, 0xA0, 0x21, 0x81, 0x69, 0x30, 0x22, 0x0B, 0xC8, 0xA0, -0x23, 0x58, 0x10, 0xB0, 0x23, 0xE2, 0x70, 0x20, 0x25, 0x37, 0xF2, 0xB0, 0x25, 0xD4, 0xC7, 0x20, -0x27, 0x21, 0x0F, 0x30, 0x27, 0xBD, 0xE3, 0xA0, 0x29, 0x00, 0xF1, 0x30, 0x29, 0x94, 0x8B, 0x20, -0x2A, 0xEA, 0x0D, 0xB0, 0x2B, 0x6B, 0x32, 0xA0, 0x2C, 0xC0, 0xB5, 0x30, 0x2D, 0x66, 0xC4, 0x20, -0x2E, 0xA0, 0x97, 0x30, 0x2F, 0x46, 0xA6, 0x20, 0x30, 0x80, 0x79, 0x30, 0x31, 0x1D, 0x4D, 0xA0, -0x32, 0x57, 0x20, 0xB0, 0x33, 0x06, 0x6A, 0x20, 0x34, 0x38, 0x54, 0x30, 0x34, 0xF8, 0xC1, 0x20, -0x36, 0x20, 0x1F, 0x30, 0x36, 0xCF, 0x68, 0xA0, 0x37, 0xF6, 0xC6, 0xB0, 0x38, 0xB8, 0x85, 0x20, -0x39, 0xDF, 0xE3, 0x30, 0x3A, 0x8F, 0x2C, 0xA0, 0x3B, 0xC8, 0xFF, 0xB0, 0x3C, 0x6F, 0x0E, 0xA0, -0x3D, 0xC4, 0x91, 0x30, 0x3E, 0x4E, 0xF0, 0xA0, 0x3F, 0x91, 0xFE, 0x30, 0x40, 0x2E, 0xD2, 0xA0, -0x41, 0x86, 0xF8, 0x30, 0x42, 0x17, 0xEF, 0x20, 0x43, 0x51, 0xC2, 0x30, 0x43, 0xF7, 0xD1, 0x20, -0x45, 0x4D, 0x53, 0xB0, 0x45, 0xE0, 0xED, 0xA0, 0x47, 0x2D, 0x35, 0xB0, 0x47, 0xC0, 0xCF, 0xA0, -0x49, 0x0D, 0x17, 0xB0, 0x49, 0xA0, 0xB1, 0xA0, 0x4A, 0xEC, 0xF9, 0xB0, 0x4B, 0x89, 0xCE, 0x20, -0x4C, 0xD6, 0x16, 0x30, 0x4D, 0x69, 0xB0, 0x20, 0x4E, 0xB5, 0xF8, 0x30, 0x4F, 0x49, 0x92, 0x20, -0x50, 0x95, 0xDA, 0x30, 0x51, 0x29, 0x74, 0x20, 0x52, 0x75, 0xBC, 0x30, 0x53, 0x09, 0x56, 0x20, -0x54, 0x55, 0x9E, 0x30, 0x54, 0xE9, 0x38, 0x20, 0x56, 0x35, 0x80, 0x30, 0x56, 0xD2, 0x54, 0xA0, -0x58, 0x1E, 0x9C, 0xB0, 0x58, 0xB2, 0x36, 0xA0, 0x59, 0xFE, 0x7E, 0xB0, 0x5A, 0x92, 0x18, 0xA0, -0x5B, 0xDE, 0x60, 0xB0, 0x5C, 0x71, 0xFA, 0xA0, 0x5D, 0xBE, 0x42, 0xB0, 0x5E, 0x51, 0xDC, 0xA0, -0x5F, 0x9E, 0x24, 0xB0, 0x60, 0x3A, 0xF9, 0x20, 0x61, 0x87, 0x41, 0x30, 0x62, 0x1A, 0xDB, 0x20, -0x63, 0x67, 0x23, 0x30, 0x63, 0xFA, 0xBD, 0x20, 0x65, 0x47, 0x05, 0x30, 0x65, 0xDA, 0x9F, 0x20, -0x67, 0x26, 0xE7, 0x30, 0x67, 0xBA, 0x81, 0x20, 0x69, 0x06, 0xC9, 0x30, 0x69, 0x9A, 0x63, 0x20, -0x6A, 0xE6, 0xAB, 0x30, 0x6B, 0x83, 0x7F, 0xA0, 0x6C, 0xCF, 0xC7, 0xB0, 0x6D, 0x63, 0x61, 0xA0, -0x6E, 0xAF, 0xA9, 0xB0, 0x6F, 0x43, 0x43, 0xA0, 0x70, 0x8F, 0x8B, 0xB0, 0x71, 0x23, 0x25, 0xA0, -0x72, 0x6F, 0x6D, 0xB0, 0x73, 0x03, 0x07, 0xA0, 0x74, 0x4F, 0x4F, 0xB0, 0x74, 0xEC, 0x24, 0x20, -0x76, 0x38, 0x6C, 0x30, 0x76, 0xCC, 0x06, 0x20, 0x78, 0x18, 0x4E, 0x30, 0x78, 0xAB, 0xE8, 0x20, -0x79, 0xF8, 0x30, 0x30, 0x7A, 0x8B, 0xCA, 0x20, 0x7B, 0xD8, 0x12, 0x30, 0x7C, 0x6B, 0xAC, 0x20, -0x7D, 0xB7, 0xF4, 0x30, 0x7E, 0x4B, 0x8E, 0x20, 0x7F, 0x97, 0xD6, 0x30, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xD4, 0x4C, -0x00, 0x00, 0xFF, 0xFF, 0xE3, 0xE0, 0x01, 0x04, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x09, 0x4C, 0x4D, -0x54, 0x00, 0x42, 0x52, 0x53, 0x54, 0x00, 0x42, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, - -/* Brazil/West */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x7F, 0x44, -0xB8, 0x0F, 0x57, 0xF0, 0xB8, 0xFD, 0x4E, 0xB0, 0xB9, 0xF1, 0x42, 0x40, 0xBA, 0xDE, 0x82, 0x30, -0xDA, 0x38, 0xBC, 0x40, 0xDA, 0xEC, 0x08, 0x40, 0xDC, 0x19, 0xEF, 0xC0, 0xDC, 0xB9, 0x67, 0x30, -0xDD, 0xFB, 0x23, 0x40, 0xDE, 0x9B, 0xEC, 0x30, 0xDF, 0xDD, 0xA8, 0x40, 0xE0, 0x54, 0x41, 0x30, -0xF4, 0x98, 0x0D, 0xC0, 0xF5, 0x05, 0x6C, 0x30, 0xF6, 0xC0, 0x72, 0x40, 0xF7, 0x0E, 0x2C, 0xB0, -0xF8, 0x51, 0x3A, 0x40, 0xF8, 0xC7, 0xD3, 0x30, 0xFA, 0x0A, 0xE0, 0xC0, 0xFA, 0xA9, 0x06, 0xB0, -0xFB, 0xEC, 0x14, 0x40, 0xFC, 0x8B, 0x8B, 0xB0, 0x1D, 0xC9, 0x9C, 0x40, 0x1E, 0x78, 0xE5, 0xB0, -0x1F, 0xA0, 0x43, 0xC0, 0x20, 0x33, 0xDD, 0xB0, 0x21, 0x81, 0x77, 0x40, 0x22, 0x0B, 0xD6, 0xB0, -0x2C, 0xC0, 0xC3, 0x40, 0x2D, 0x66, 0xD2, 0x30, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, 0xC7, 0xBC, 0x00, 0x00, 0xFF, 0xFF, 0xD5, -0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x41, 0x4D, 0x53, -0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Canada/Atlantic */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xE4, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x80, 0xF1, 0xAB, 0xA0, -0x9A, 0xE4, 0xDE, 0xC0, 0x9B, 0xD6, 0x13, 0x30, 0x9E, 0xB8, 0x85, 0x60, 0x9F, 0xC0, 0x23, 0x50, -0xA2, 0x9D, 0x17, 0x40, 0xA3, 0x30, 0xB1, 0x30, 0xA4, 0x7A, 0x56, 0x40, 0xA5, 0x1B, 0x1F, 0x30, -0xA6, 0x53, 0xA0, 0xC0, 0xA6, 0xFC, 0x52, 0xB0, 0xA8, 0x3C, 0xBD, 0x40, 0xA8, 0xDC, 0x34, 0xB0, -0xAA, 0x1C, 0x9F, 0x40, 0xAA, 0xCD, 0x3A, 0x30, 0xAB, 0xFC, 0x81, 0x40, 0xAC, 0xBF, 0x91, 0x30, -0xAD, 0xEE, 0xD8, 0x40, 0xAE, 0x8C, 0xFE, 0x30, 0xAF, 0xBC, 0x45, 0x40, 0xB0, 0x7F, 0x55, 0x30, -0xB1, 0xAE, 0x9C, 0x40, 0xB2, 0x4B, 0x70, 0xB0, 0xB3, 0x8E, 0x7E, 0x40, 0xB4, 0x24, 0xBB, 0x30, -0xB5, 0x6E, 0x60, 0x40, 0xB6, 0x15, 0xC0, 0xB0, 0xB7, 0x4E, 0x42, 0x40, 0xB8, 0x08, 0x17, 0xB0, -0xB9, 0x24, 0xE9, 0xC0, 0xB9, 0xE7, 0xF9, 0xB0, 0xBB, 0x04, 0xCB, 0xC0, 0xBB, 0xD1, 0x16, 0x30, -0xBD, 0x00, 0x5D, 0x40, 0xBD, 0x9D, 0x31, 0xB0, 0xBE, 0xF2, 0xB4, 0x40, 0xBF, 0x90, 0xDA, 0x30, -0xC0, 0xD3, 0xE7, 0xC0, 0xC1, 0x5E, 0x47, 0x30, 0xC2, 0x8D, 0x8E, 0x40, 0xC3, 0x50, 0x9E, 0x30, -0xC4, 0x6D, 0x70, 0x40, 0xC5, 0x30, 0x80, 0x30, 0xC6, 0x72, 0x3C, 0x40, 0xC7, 0x10, 0x62, 0x30, -0xC8, 0x36, 0x6E, 0xC0, 0xC8, 0xF9, 0x7E, 0xB0, 0xCA, 0x16, 0x50, 0xC0, 0xCA, 0xD9, 0x60, 0xB0, -0xCB, 0x88, 0xE2, 0x60, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xED, 0xD0, 0xD3, 0x75, 0xD6, 0xE0, -0xD4, 0x40, 0xCF, 0xD0, 0xD5, 0x55, 0xB8, 0xE0, 0xD6, 0x20, 0xB1, 0xD0, 0xD7, 0x35, 0x9A, 0xE0, -0xD8, 0x00, 0x93, 0xD0, 0xD9, 0x15, 0x7C, 0xE0, 0xD9, 0xE0, 0x75, 0xD0, 0xDC, 0xDE, 0x7B, 0x60, -0xDD, 0xA9, 0x74, 0x50, 0xDE, 0xBE, 0x5D, 0x60, 0xDF, 0x89, 0x56, 0x50, 0xE0, 0x9E, 0x3F, 0x60, -0xE1, 0x69, 0x38, 0x50, 0xE2, 0x7E, 0x21, 0x60, 0xE3, 0x49, 0x1A, 0x50, 0xE6, 0x47, 0x1F, 0xE0, -0xE7, 0x12, 0x18, 0xD0, 0xE8, 0x27, 0x01, 0xE0, 0xE8, 0xF1, 0xFA, 0xD0, 0xEA, 0x06, 0xE3, 0xE0, -0xEA, 0xD1, 0xDC, 0xD0, 0xEB, 0xE6, 0xC5, 0xE0, 0xEC, 0xB1, 0xBE, 0xD0, 0xF1, 0x8F, 0xA6, 0x60, -0xF2, 0x7F, 0x89, 0x50, 0xF3, 0x6F, 0x88, 0x60, 0xF4, 0x5F, 0x6B, 0x50, 0xF5, 0x4F, 0x6A, 0x60, -0xF6, 0x3F, 0x4D, 0x50, 0xF7, 0x2F, 0x4C, 0x60, 0xF8, 0x28, 0x69, 0xD0, 0xF9, 0x0F, 0x2E, 0x60, -0xFA, 0x08, 0x4B, 0xD0, 0xFA, 0xF8, 0x4A, 0xE0, 0xFB, 0xE8, 0x2D, 0xD0, 0xFC, 0xD8, 0x2C, 0xE0, -0xFD, 0xC8, 0x0F, 0xD0, 0xFE, 0xB8, 0x0E, 0xE0, 0xFF, 0xA7, 0xF1, 0xD0, 0x00, 0x97, 0xF0, 0xE0, -0x01, 0x87, 0xD3, 0xD0, 0x02, 0x77, 0xD2, 0xE0, 0x03, 0x70, 0xF0, 0x50, 0x04, 0x60, 0xEF, 0x60, -0x05, 0x50, 0xD2, 0x50, 0x06, 0x40, 0xD1, 0x60, 0x07, 0x30, 0xB4, 0x50, 0x08, 0x20, 0xB3, 0x60, -0x09, 0x10, 0x96, 0x50, 0x0A, 0x00, 0x95, 0x60, 0x0A, 0xF0, 0x78, 0x50, 0x0B, 0xE0, 0x77, 0x60, -0x0C, 0xD9, 0x94, 0xD0, 0x0D, 0xC0, 0x59, 0x60, 0x0E, 0xB9, 0x76, 0xD0, 0x0F, 0xA9, 0x75, 0xE0, -0x10, 0x99, 0x58, 0xD0, 0x11, 0x89, 0x57, 0xE0, 0x12, 0x79, 0x3A, 0xD0, 0x13, 0x69, 0x39, 0xE0, -0x14, 0x59, 0x1C, 0xD0, 0x15, 0x49, 0x1B, 0xE0, 0x16, 0x38, 0xFE, 0xD0, 0x17, 0x28, 0xFD, 0xE0, -0x18, 0x22, 0x1B, 0x50, 0x19, 0x08, 0xDF, 0xE0, 0x1A, 0x01, 0xFD, 0x50, 0x1A, 0xF1, 0xFC, 0x60, -0x1B, 0xE1, 0xDF, 0x50, 0x1C, 0xD1, 0xDE, 0x60, 0x1D, 0xC1, 0xC1, 0x50, 0x1E, 0xB1, 0xC0, 0x60, -0x1F, 0xA1, 0xA3, 0x50, 0x20, 0x75, 0xF2, 0xE0, 0x21, 0x81, 0x85, 0x50, 0x22, 0x55, 0xD4, 0xE0, -0x23, 0x6A, 0xA1, 0xD0, 0x24, 0x35, 0xB6, 0xE0, 0x25, 0x4A, 0x83, 0xD0, 0x26, 0x15, 0x98, 0xE0, -0x27, 0x2A, 0x65, 0xD0, 0x27, 0xFE, 0xB5, 0x60, 0x29, 0x0A, 0x47, 0xD0, 0x29, 0xDE, 0x97, 0x60, -0x2A, 0xEA, 0x29, 0xD0, 0x2B, 0xBE, 0x79, 0x60, 0x2C, 0xD3, 0x46, 0x50, 0x2D, 0x9E, 0x5B, 0x60, -0x2E, 0xB3, 0x28, 0x50, 0x2F, 0x7E, 0x3D, 0x60, 0x30, 0x93, 0x0A, 0x50, 0x31, 0x67, 0x59, 0xE0, -0x32, 0x72, 0xEC, 0x50, 0x33, 0x47, 0x3B, 0xE0, 0x34, 0x52, 0xCE, 0x50, 0x35, 0x27, 0x1D, 0xE0, -0x36, 0x32, 0xB0, 0x50, 0x37, 0x06, 0xFF, 0xE0, 0x38, 0x1B, 0xCC, 0xD0, 0x38, 0xE6, 0xE1, 0xE0, -0x39, 0xFB, 0xAE, 0xD0, 0x3A, 0xC6, 0xC3, 0xE0, 0x3B, 0xDB, 0x90, 0xD0, 0x3C, 0xAF, 0xE0, 0x60, -0x3D, 0xBB, 0x72, 0xD0, 0x3E, 0x8F, 0xC2, 0x60, 0x3F, 0x9B, 0x54, 0xD0, 0x40, 0x6F, 0xA4, 0x60, -0x41, 0x84, 0x71, 0x50, 0x42, 0x4F, 0x86, 0x60, 0x43, 0x64, 0x53, 0x50, 0x44, 0x2F, 0x68, 0x60, -0x45, 0x44, 0x35, 0x50, 0x45, 0xF3, 0x9A, 0xE0, 0x47, 0x2D, 0x51, 0xD0, 0x47, 0xD3, 0x7C, 0xE0, -0x49, 0x0D, 0x33, 0xD0, 0x49, 0xB3, 0x5E, 0xE0, 0x4A, 0xED, 0x15, 0xD0, 0x4B, 0x9C, 0x7B, 0x60, -0x4C, 0xD6, 0x32, 0x50, 0x4D, 0x7C, 0x5D, 0x60, 0x4E, 0xB6, 0x14, 0x50, 0x4F, 0x5C, 0x3F, 0x60, -0x50, 0x95, 0xF6, 0x50, 0x51, 0x3C, 0x21, 0x60, 0x52, 0x75, 0xD8, 0x50, 0x53, 0x1C, 0x03, 0x60, -0x54, 0x55, 0xBA, 0x50, 0x54, 0xFB, 0xE5, 0x60, 0x56, 0x35, 0x9C, 0x50, 0x56, 0xE5, 0x01, 0xE0, -0x58, 0x1E, 0xB8, 0xD0, 0x58, 0xC4, 0xE3, 0xE0, 0x59, 0xFE, 0x9A, 0xD0, 0x5A, 0xA4, 0xC5, 0xE0, -0x5B, 0xDE, 0x7C, 0xD0, 0x5C, 0x84, 0xA7, 0xE0, 0x5D, 0xBE, 0x5E, 0xD0, 0x5E, 0x64, 0x89, 0xE0, -0x5F, 0x9E, 0x40, 0xD0, 0x60, 0x4D, 0xA6, 0x60, 0x61, 0x87, 0x5D, 0x50, 0x62, 0x2D, 0x88, 0x60, -0x63, 0x67, 0x3F, 0x50, 0x64, 0x0D, 0x6A, 0x60, 0x65, 0x47, 0x21, 0x50, 0x65, 0xED, 0x4C, 0x60, -0x67, 0x27, 0x03, 0x50, 0x67, 0xCD, 0x2E, 0x60, 0x69, 0x06, 0xE5, 0x50, 0x69, 0xAD, 0x10, 0x60, -0x6A, 0xE6, 0xC7, 0x50, 0x6B, 0x96, 0x2C, 0xE0, 0x6C, 0xCF, 0xE3, 0xD0, 0x6D, 0x76, 0x0E, 0xE0, -0x6E, 0xAF, 0xC5, 0xD0, 0x6F, 0x55, 0xF0, 0xE0, 0x70, 0x8F, 0xA7, 0xD0, 0x71, 0x35, 0xD2, 0xE0, -0x72, 0x6F, 0x89, 0xD0, 0x73, 0x15, 0xB4, 0xE0, 0x74, 0x4F, 0x6B, 0xD0, 0x74, 0xFE, 0xD1, 0x60, -0x76, 0x38, 0x88, 0x50, 0x76, 0xDE, 0xB3, 0x60, 0x78, 0x18, 0x6A, 0x50, 0x78, 0xBE, 0x95, 0x60, -0x79, 0xF8, 0x4C, 0x50, 0x7A, 0x9E, 0x77, 0x60, 0x7B, 0xD8, 0x2E, 0x50, 0x7C, 0x7E, 0x59, 0x60, -0x7D, 0xB8, 0x10, 0x50, 0x7E, 0x5E, 0x3B, 0x60, 0x7F, 0x97, 0xF2, 0x50, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0xFF, 0xFF, 0xC4, 0x60, 0x00, 0x00, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, -0x00, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0x4C, 0x4D, -0x54, 0x00, 0x41, 0x44, 0x54, 0x00, 0x41, 0x53, 0x54, 0x00, 0x41, 0x57, 0x54, 0x00, 0x41, 0x50, -0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, - -/* Canada/Central */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x9B, 0x01, 0xFB, 0xE0, -0x9B, 0xC3, 0xBA, 0x50, 0x9E, 0xB8, 0xA1, 0x80, 0x9F, 0xC0, 0x3F, 0x70, 0xC2, 0xA0, 0x3B, 0x80, -0xC3, 0x4F, 0x84, 0xF0, 0xCB, 0x88, 0xFE, 0x80, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, -0xD3, 0x88, 0x68, 0x00, 0xD4, 0x53, 0x60, 0xF0, 0xD5, 0x55, 0xD5, 0x00, 0xD6, 0x20, 0xCD, 0xF0, -0xD7, 0x35, 0xB7, 0x00, 0xD8, 0x00, 0xAF, 0xF0, 0xD9, 0x15, 0x99, 0x00, 0xD9, 0xE0, 0x91, 0xF0, -0xDB, 0x00, 0x07, 0x00, 0xDB, 0xC8, 0x5C, 0xF0, 0xDC, 0xDE, 0x97, 0x80, 0xDD, 0xA9, 0x90, 0x70, -0xDE, 0xBE, 0x79, 0x80, 0xDF, 0x89, 0x72, 0x70, 0xE0, 0x9E, 0x5B, 0x80, 0xE1, 0x69, 0x54, 0x70, -0xE2, 0x7E, 0x3D, 0x80, 0xE3, 0x49, 0x36, 0x70, 0xE4, 0x5E, 0x1F, 0x80, 0xE5, 0x29, 0x18, 0x70, -0xE6, 0x47, 0x3C, 0x00, 0xE7, 0x12, 0x34, 0xF0, 0xE8, 0x27, 0x1E, 0x00, 0xE8, 0xF2, 0x16, 0xF0, -0xEA, 0x07, 0x00, 0x00, 0xEA, 0xD1, 0xF8, 0xF0, 0xEB, 0xE6, 0xE2, 0x00, 0xEC, 0xD6, 0xC4, 0xF0, -0xED, 0xC6, 0xC4, 0x00, 0xEE, 0x91, 0xBC, 0xF0, 0xF3, 0x6F, 0xA4, 0x80, 0xF4, 0x31, 0x62, 0xF0, -0xF9, 0x0F, 0x4A, 0x80, 0xFA, 0x08, 0x76, 0x00, 0xFA, 0xF8, 0x67, 0x00, 0xFB, 0xE8, 0x58, 0x00, -0xFC, 0xD8, 0x49, 0x00, 0xFD, 0xC8, 0x3A, 0x00, 0xFE, 0xB8, 0x2B, 0x00, 0xFF, 0xA8, 0x1C, 0x00, -0x00, 0x98, 0x0D, 0x00, 0x01, 0x87, 0xFE, 0x00, 0x02, 0x77, 0xEF, 0x00, 0x03, 0x71, 0x1A, 0x80, -0x04, 0x61, 0x0B, 0x80, 0x05, 0x50, 0xFC, 0x80, 0x06, 0x40, 0xED, 0x80, 0x07, 0x30, 0xDE, 0x80, -0x08, 0x20, 0xCF, 0x80, 0x09, 0x10, 0xC0, 0x80, 0x0A, 0x00, 0xB1, 0x80, 0x0A, 0xF0, 0xA2, 0x80, -0x0B, 0xE0, 0x93, 0x80, 0x0C, 0xD9, 0xBF, 0x00, 0x0D, 0xC0, 0x75, 0x80, 0x0E, 0xB9, 0xA1, 0x00, -0x0F, 0xA9, 0x92, 0x00, 0x10, 0x99, 0x83, 0x00, 0x11, 0x89, 0x74, 0x00, 0x12, 0x79, 0x65, 0x00, -0x13, 0x69, 0x56, 0x00, 0x14, 0x59, 0x47, 0x00, 0x15, 0x49, 0x38, 0x00, 0x16, 0x39, 0x29, 0x00, -0x17, 0x29, 0x1A, 0x00, 0x18, 0x22, 0x45, 0x80, 0x19, 0x08, 0xFC, 0x00, 0x1A, 0x02, 0x27, 0x80, -0x1A, 0xF2, 0x18, 0x80, 0x1B, 0xE2, 0x09, 0x80, 0x1C, 0xD1, 0xFA, 0x80, 0x1D, 0xC1, 0xEB, 0x80, -0x1E, 0xB1, 0xDC, 0x80, 0x1F, 0xA1, 0xCD, 0x80, 0x20, 0x76, 0x0F, 0x00, 0x21, 0x81, 0xAF, 0x80, -0x22, 0x55, 0xF1, 0x00, 0x23, 0x6A, 0xCC, 0x00, 0x24, 0x35, 0xD3, 0x00, 0x25, 0x4A, 0xAE, 0x00, -0x26, 0x15, 0xB5, 0x00, 0x27, 0x2A, 0x90, 0x00, 0x27, 0xFE, 0xD1, 0x80, 0x29, 0x0A, 0x72, 0x00, -0x29, 0xDE, 0xB3, 0x80, 0x2A, 0xEA, 0x54, 0x00, 0x2B, 0xBE, 0x95, 0x80, 0x2C, 0xD3, 0x70, 0x80, -0x2D, 0x9E, 0x77, 0x80, 0x2E, 0xB3, 0x52, 0x80, 0x2F, 0x7E, 0x59, 0x80, 0x30, 0x93, 0x34, 0x80, -0x31, 0x67, 0x76, 0x00, 0x32, 0x73, 0x16, 0x80, 0x33, 0x47, 0x58, 0x00, 0x34, 0x52, 0xF8, 0x80, -0x35, 0x27, 0x3A, 0x00, 0x36, 0x32, 0xDA, 0x80, 0x37, 0x07, 0x1C, 0x00, 0x38, 0x1B, 0xF7, 0x00, -0x38, 0xE6, 0xFE, 0x00, 0x39, 0xFB, 0xD9, 0x00, 0x3A, 0xC6, 0xE0, 0x00, 0x3B, 0xDB, 0xBB, 0x00, -0x3C, 0xAF, 0xFC, 0x80, 0x3D, 0xBB, 0x9D, 0x00, 0x3E, 0x8F, 0xDE, 0x80, 0x3F, 0x9B, 0x7F, 0x00, -0x40, 0x6F, 0xC0, 0x80, 0x41, 0x84, 0x9B, 0x80, 0x42, 0x4F, 0xA2, 0x80, 0x43, 0x64, 0x7D, 0x80, -0x43, 0xB7, 0x6F, 0xE0, 0x44, 0x2F, 0x84, 0x80, 0x45, 0x44, 0x51, 0x70, 0x45, 0xF3, 0xB7, 0x00, -0x47, 0x2D, 0x6D, 0xF0, 0x47, 0xD3, 0x99, 0x00, 0x49, 0x0D, 0x4F, 0xF0, 0x49, 0xB3, 0x7B, 0x00, -0x4A, 0xED, 0x31, 0xF0, 0x4B, 0x9C, 0x97, 0x80, 0x4C, 0xD6, 0x4E, 0x70, 0x4D, 0x7C, 0x79, 0x80, -0x4E, 0xB6, 0x30, 0x70, 0x4F, 0x5C, 0x5B, 0x80, 0x50, 0x96, 0x12, 0x70, 0x51, 0x3C, 0x3D, 0x80, -0x52, 0x75, 0xF4, 0x70, 0x53, 0x1C, 0x1F, 0x80, 0x54, 0x55, 0xD6, 0x70, 0x54, 0xFC, 0x01, 0x80, -0x56, 0x35, 0xB8, 0x70, 0x56, 0xE5, 0x1E, 0x00, 0x58, 0x1E, 0xD4, 0xF0, 0x58, 0xC5, 0x00, 0x00, -0x59, 0xFE, 0xB6, 0xF0, 0x5A, 0xA4, 0xE2, 0x00, 0x5B, 0xDE, 0x98, 0xF0, 0x5C, 0x84, 0xC4, 0x00, -0x5D, 0xBE, 0x7A, 0xF0, 0x5E, 0x64, 0xA6, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x60, 0x4D, 0xC2, 0x80, -0x61, 0x87, 0x79, 0x70, 0x62, 0x2D, 0xA4, 0x80, 0x63, 0x67, 0x5B, 0x70, 0x64, 0x0D, 0x86, 0x80, -0x65, 0x47, 0x3D, 0x70, 0x65, 0xED, 0x68, 0x80, 0x67, 0x27, 0x1F, 0x70, 0x67, 0xCD, 0x4A, 0x80, -0x69, 0x07, 0x01, 0x70, 0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, 0x6B, 0x96, 0x49, 0x00, -0x6C, 0xCF, 0xFF, 0xF0, 0x6D, 0x76, 0x2B, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, 0x6F, 0x56, 0x0D, 0x00, -0x70, 0x8F, 0xC3, 0xF0, 0x71, 0x35, 0xEF, 0x00, 0x72, 0x6F, 0xA5, 0xF0, 0x73, 0x15, 0xD1, 0x00, -0x74, 0x4F, 0x87, 0xF0, 0x74, 0xFE, 0xED, 0x80, 0x76, 0x38, 0xA4, 0x70, 0x76, 0xDE, 0xCF, 0x80, -0x78, 0x18, 0x86, 0x70, 0x78, 0xBE, 0xB1, 0x80, 0x79, 0xF8, 0x68, 0x70, 0x7A, 0x9E, 0x93, 0x80, -0x7B, 0xD8, 0x4A, 0x70, 0x7C, 0x7E, 0x75, 0x80, 0x7D, 0xB8, 0x2C, 0x70, 0x7E, 0x5E, 0x57, 0x80, -0x7F, 0x98, 0x0E, 0x70, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 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, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, -0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, -0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, -0x00, 0x04, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, -0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - -/* Canada/Eastern */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xE8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xB8, 0x93, 0x70, -0x9F, 0xC0, 0x31, 0x60, 0xA0, 0x87, 0x2E, 0xC8, 0xA1, 0x9A, 0xB1, 0x40, 0xA2, 0x94, 0x06, 0xF0, -0xA3, 0x55, 0xA9, 0x40, 0xA4, 0x86, 0x5D, 0xF0, 0xA5, 0x28, 0x78, 0x60, 0xA6, 0x66, 0x3F, 0xF0, -0xA7, 0x0C, 0x4E, 0xE0, 0xA8, 0x46, 0x21, 0xF0, 0xA8, 0xEC, 0x30, 0xE0, 0xAA, 0x1C, 0xC9, 0x70, -0xAA, 0xD5, 0x4D, 0x60, 0xAB, 0xFC, 0xAB, 0x70, 0xAC, 0xB5, 0x2F, 0x60, 0xAD, 0xDC, 0x8D, 0x70, -0xAE, 0x95, 0x11, 0x60, 0xAF, 0xBC, 0x6F, 0x70, 0xB0, 0x7E, 0x2D, 0xE0, 0xB1, 0x9C, 0x51, 0x70, -0xB2, 0x67, 0x4A, 0x60, 0xB3, 0x7C, 0x33, 0x70, 0xB4, 0x47, 0x2C, 0x60, 0xB5, 0x5C, 0x15, 0x70, -0xB6, 0x27, 0x0E, 0x60, 0xB7, 0x3B, 0xF7, 0x70, 0xB8, 0x06, 0xF0, 0x60, 0xB9, 0x25, 0x13, 0xF0, -0xB9, 0xE6, 0xD2, 0x60, 0xBB, 0x04, 0xF5, 0xF0, 0xBB, 0xCF, 0xEE, 0xE0, 0xBC, 0xE4, 0xD7, 0xF0, -0xBD, 0xAF, 0xD0, 0xE0, 0xBE, 0xC4, 0xB9, 0xF0, 0xBF, 0x8F, 0xB2, 0xE0, 0xC0, 0xA4, 0x9B, 0xF0, -0xC1, 0x6F, 0x94, 0xE0, 0xC2, 0x84, 0x7D, 0xF0, 0xC3, 0x4F, 0x76, 0xE0, 0xC4, 0x64, 0x5F, 0xF0, -0xC5, 0x2F, 0x58, 0xE0, 0xC6, 0x4D, 0x7C, 0x70, 0xC7, 0x0F, 0x3A, 0xE0, 0xC8, 0x2D, 0x5E, 0x70, -0xCB, 0x88, 0xF0, 0x70, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xFB, 0xE0, 0xD3, 0x75, 0xE4, 0xF0, -0xD4, 0x40, 0xDD, 0xE0, 0xD5, 0x55, 0xAA, 0xD0, 0xD6, 0x20, 0xA3, 0xC0, 0xD7, 0x35, 0x8C, 0xD0, -0xD8, 0x00, 0x85, 0xC0, 0xD9, 0x15, 0x6E, 0xD0, 0xDA, 0x33, 0x76, 0x40, 0xDA, 0xFE, 0xA7, 0x70, -0xDC, 0x13, 0x74, 0x60, 0xDC, 0xDE, 0x89, 0x70, 0xDD, 0xA9, 0x82, 0x60, 0xDE, 0xBE, 0x6B, 0x70, -0xDF, 0x89, 0x64, 0x60, 0xE0, 0x9E, 0x4D, 0x70, 0xE1, 0x69, 0x46, 0x60, 0xE2, 0x7E, 0x2F, 0x70, -0xE3, 0x49, 0x28, 0x60, 0xE4, 0x5E, 0x11, 0x70, 0xE5, 0x29, 0x0A, 0x60, 0xE6, 0x47, 0x2D, 0xF0, -0xE7, 0x12, 0x26, 0xE0, 0xE8, 0x27, 0x0F, 0xF0, 0xE9, 0x16, 0xF2, 0xE0, 0xEA, 0x06, 0xF1, 0xF0, -0xEA, 0xF6, 0xD4, 0xE0, 0xEB, 0xE6, 0xD3, 0xF0, 0xEC, 0xD6, 0xB6, 0xE0, 0xED, 0xC6, 0xB5, 0xF0, -0xEE, 0xBF, 0xD3, 0x60, 0xEF, 0xAF, 0xD2, 0x70, 0xF0, 0x9F, 0xB5, 0x60, 0xF1, 0x8F, 0xB4, 0x70, -0xF2, 0x7F, 0x97, 0x60, 0xF3, 0x6F, 0x96, 0x70, 0xF4, 0x5F, 0x79, 0x60, 0xF5, 0x4F, 0x78, 0x70, -0xF6, 0x3F, 0x5B, 0x60, 0xF7, 0x2F, 0x5A, 0x70, 0xF8, 0x28, 0x77, 0xE0, 0xF9, 0x0F, 0x3C, 0x70, -0xFA, 0x08, 0x59, 0xE0, 0xFA, 0xF8, 0x58, 0xF0, 0xFB, 0xE8, 0x3B, 0xE0, 0xFC, 0xD8, 0x3A, 0xF0, -0xFD, 0xC8, 0x1D, 0xE0, 0xFE, 0xB8, 0x1C, 0xF0, 0xFF, 0xA7, 0xFF, 0xE0, 0x00, 0x97, 0xFE, 0xF0, -0x01, 0x87, 0xE1, 0xE0, 0x02, 0x77, 0xE0, 0xF0, 0x03, 0x70, 0xFE, 0x60, 0x04, 0x60, 0xFD, 0x70, -0x05, 0x50, 0xE0, 0x60, 0x06, 0x40, 0xDF, 0x70, 0x07, 0x30, 0xC2, 0x60, 0x08, 0x20, 0xC1, 0x70, -0x09, 0x10, 0xA4, 0x60, 0x0A, 0x00, 0xA3, 0x70, 0x0A, 0xF0, 0x86, 0x60, 0x0B, 0xE0, 0x85, 0x70, -0x0C, 0xD9, 0xA2, 0xE0, 0x0D, 0xC0, 0x67, 0x70, 0x0E, 0xB9, 0x84, 0xE0, 0x0F, 0xA9, 0x83, 0xF0, -0x10, 0x99, 0x66, 0xE0, 0x11, 0x89, 0x65, 0xF0, 0x12, 0x79, 0x48, 0xE0, 0x13, 0x69, 0x47, 0xF0, -0x14, 0x59, 0x2A, 0xE0, 0x15, 0x49, 0x29, 0xF0, 0x16, 0x39, 0x0C, 0xE0, 0x17, 0x29, 0x0B, 0xF0, -0x18, 0x22, 0x29, 0x60, 0x19, 0x08, 0xED, 0xF0, 0x1A, 0x02, 0x0B, 0x60, 0x1A, 0xF2, 0x0A, 0x70, -0x1B, 0xE1, 0xED, 0x60, 0x1C, 0xD1, 0xEC, 0x70, 0x1D, 0xC1, 0xCF, 0x60, 0x1E, 0xB1, 0xCE, 0x70, -0x1F, 0xA1, 0xB1, 0x60, 0x20, 0x76, 0x00, 0xF0, 0x21, 0x81, 0x93, 0x60, 0x22, 0x55, 0xE2, 0xF0, -0x23, 0x6A, 0xAF, 0xE0, 0x24, 0x35, 0xC4, 0xF0, 0x25, 0x4A, 0x91, 0xE0, 0x26, 0x15, 0xA6, 0xF0, -0x27, 0x2A, 0x73, 0xE0, 0x27, 0xFE, 0xC3, 0x70, 0x29, 0x0A, 0x55, 0xE0, 0x29, 0xDE, 0xA5, 0x70, -0x2A, 0xEA, 0x37, 0xE0, 0x2B, 0xBE, 0x87, 0x70, 0x2C, 0xD3, 0x54, 0x60, 0x2D, 0x9E, 0x69, 0x70, -0x2E, 0xB3, 0x36, 0x60, 0x2F, 0x7E, 0x4B, 0x70, 0x30, 0x93, 0x18, 0x60, 0x31, 0x67, 0x67, 0xF0, -0x32, 0x72, 0xFA, 0x60, 0x33, 0x47, 0x49, 0xF0, 0x34, 0x52, 0xDC, 0x60, 0x35, 0x27, 0x2B, 0xF0, -0x36, 0x32, 0xBE, 0x60, 0x37, 0x07, 0x0D, 0xF0, 0x38, 0x1B, 0xDA, 0xE0, 0x38, 0xE6, 0xEF, 0xF0, -0x39, 0xFB, 0xBC, 0xE0, 0x3A, 0xC6, 0xD1, 0xF0, 0x3B, 0xDB, 0x9E, 0xE0, 0x3C, 0xAF, 0xEE, 0x70, -0x3D, 0xBB, 0x80, 0xE0, 0x3E, 0x8F, 0xD0, 0x70, 0x3F, 0x9B, 0x62, 0xE0, 0x40, 0x6F, 0xB2, 0x70, -0x41, 0x84, 0x7F, 0x60, 0x42, 0x4F, 0x94, 0x70, 0x43, 0x64, 0x61, 0x60, 0x44, 0x2F, 0x76, 0x70, -0x45, 0x44, 0x43, 0x60, 0x45, 0xF3, 0xA8, 0xF0, 0x47, 0x2D, 0x5F, 0xE0, 0x47, 0xD3, 0x8A, 0xF0, -0x49, 0x0D, 0x41, 0xE0, 0x49, 0xB3, 0x6C, 0xF0, 0x4A, 0xED, 0x23, 0xE0, 0x4B, 0x9C, 0x89, 0x70, -0x4C, 0xD6, 0x40, 0x60, 0x4D, 0x7C, 0x6B, 0x70, 0x4E, 0xB6, 0x22, 0x60, 0x4F, 0x5C, 0x4D, 0x70, -0x50, 0x96, 0x04, 0x60, 0x51, 0x3C, 0x2F, 0x70, 0x52, 0x75, 0xE6, 0x60, 0x53, 0x1C, 0x11, 0x70, -0x54, 0x55, 0xC8, 0x60, 0x54, 0xFB, 0xF3, 0x70, 0x56, 0x35, 0xAA, 0x60, 0x56, 0xE5, 0x0F, 0xF0, -0x58, 0x1E, 0xC6, 0xE0, 0x58, 0xC4, 0xF1, 0xF0, 0x59, 0xFE, 0xA8, 0xE0, 0x5A, 0xA4, 0xD3, 0xF0, -0x5B, 0xDE, 0x8A, 0xE0, 0x5C, 0x84, 0xB5, 0xF0, 0x5D, 0xBE, 0x6C, 0xE0, 0x5E, 0x64, 0x97, 0xF0, -0x5F, 0x9E, 0x4E, 0xE0, 0x60, 0x4D, 0xB4, 0x70, 0x61, 0x87, 0x6B, 0x60, 0x62, 0x2D, 0x96, 0x70, -0x63, 0x67, 0x4D, 0x60, 0x64, 0x0D, 0x78, 0x70, 0x65, 0x47, 0x2F, 0x60, 0x65, 0xED, 0x5A, 0x70, -0x67, 0x27, 0x11, 0x60, 0x67, 0xCD, 0x3C, 0x70, 0x69, 0x06, 0xF3, 0x60, 0x69, 0xAD, 0x1E, 0x70, -0x6A, 0xE6, 0xD5, 0x60, 0x6B, 0x96, 0x3A, 0xF0, 0x6C, 0xCF, 0xF1, 0xE0, 0x6D, 0x76, 0x1C, 0xF0, -0x6E, 0xAF, 0xD3, 0xE0, 0x6F, 0x55, 0xFE, 0xF0, 0x70, 0x8F, 0xB5, 0xE0, 0x71, 0x35, 0xE0, 0xF0, -0x72, 0x6F, 0x97, 0xE0, 0x73, 0x15, 0xC2, 0xF0, 0x74, 0x4F, 0x79, 0xE0, 0x74, 0xFE, 0xDF, 0x70, -0x76, 0x38, 0x96, 0x60, 0x76, 0xDE, 0xC1, 0x70, 0x78, 0x18, 0x78, 0x60, 0x78, 0xBE, 0xA3, 0x70, -0x79, 0xF8, 0x5A, 0x60, 0x7A, 0x9E, 0x85, 0x70, 0x7B, 0xD8, 0x3C, 0x60, 0x7C, 0x7E, 0x67, 0x70, -0x7D, 0xB8, 0x1E, 0x60, 0x7E, 0x5E, 0x49, 0x70, 0x7F, 0x98, 0x00, 0x60, 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, 0x02, 0x03, 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, 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, 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, 0x00, 0x01, -0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, -0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0x45, 0x44, 0x54, 0x00, -0x45, 0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, -0x00, 0x00, 0x00, 0x01, - -/* Canada/East-Saskatchewan */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x86, 0xFD, 0x93, 0x1C, -0x9E, 0xB8, 0xAF, 0x90, 0x9F, 0xC0, 0x4D, 0x80, 0xB5, 0x65, 0x4F, 0xF0, 0xB6, 0x30, 0x48, 0xE0, -0xB7, 0x45, 0x31, 0xF0, 0xB8, 0x10, 0x2A, 0xE0, 0xB9, 0x25, 0x13, 0xF0, 0xB9, 0xF0, 0x0C, 0xE0, -0xBB, 0x0E, 0x30, 0x70, 0xBB, 0xCF, 0xEE, 0xE0, 0xBC, 0xEE, 0x12, 0x70, 0xBD, 0xB9, 0x0B, 0x60, -0xC2, 0x72, 0x08, 0xF0, 0xC3, 0x61, 0xEB, 0xE0, 0xC4, 0x51, 0xEA, 0xF0, 0xC5, 0x38, 0x93, 0x60, -0xC6, 0x31, 0xCC, 0xF0, 0xC7, 0x21, 0xAF, 0xE0, 0xC8, 0x1A, 0xE9, 0x70, 0xC9, 0x0A, 0xCC, 0x60, -0xC9, 0xFA, 0xCB, 0x70, 0xCA, 0xEA, 0xAE, 0x60, 0xCB, 0x89, 0x0C, 0x90, 0xD2, 0x23, 0xF4, 0x70, -0xD2, 0x61, 0x18, 0x00, 0xD3, 0x63, 0x8C, 0x10, 0xD4, 0x53, 0x6F, 0x00, 0xD5, 0x55, 0xE3, 0x10, -0xD6, 0x20, 0xDC, 0x00, 0xD7, 0x35, 0xC5, 0x10, 0xD8, 0x00, 0xBE, 0x00, 0xD9, 0x15, 0xA7, 0x10, -0xD9, 0xE0, 0xA0, 0x00, 0xDA, 0xFE, 0xC3, 0x90, 0xDB, 0xC0, 0x82, 0x00, 0xDC, 0xDE, 0xA5, 0x90, -0xDD, 0xA9, 0x9E, 0x80, 0xDE, 0xBE, 0x87, 0x90, 0xDF, 0x89, 0x80, 0x80, 0xE0, 0x9E, 0x69, 0x90, -0xE1, 0x69, 0x62, 0x80, 0xE2, 0x7E, 0x4B, 0x90, 0xE3, 0x49, 0x44, 0x80, 0xE4, 0x5E, 0x2D, 0x90, -0xE5, 0x29, 0x26, 0x80, 0xE6, 0x47, 0x4A, 0x10, 0xE7, 0x12, 0x43, 0x00, 0xE8, 0x27, 0x2C, 0x10, -0xE8, 0xF2, 0x25, 0x00, 0xEB, 0xE6, 0xF0, 0x10, 0xEC, 0xD6, 0xD3, 0x00, 0xED, 0xC6, 0xD2, 0x10, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x05, 0xFF, 0xFF, 0x9D, 0xE4, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, -0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xAB, -0xA0, 0x01, 0x10, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x44, 0x54, -0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x53, 0x54, -0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - -/* Canada/Mountain */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x9A, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x88, 0xDE, 0xCE, 0xE0, -0x9E, 0xB8, 0xAF, 0x90, 0x9F, 0xC0, 0x4D, 0x80, 0xA0, 0x98, 0x91, 0x90, 0xA0, 0xD2, 0x85, 0x80, -0xA2, 0x8A, 0xE8, 0x90, 0xA3, 0x84, 0x06, 0x00, 0xA4, 0x6A, 0xCA, 0x90, 0xA5, 0x35, 0xC3, 0x80, -0xA6, 0x53, 0xE7, 0x10, 0xA7, 0x15, 0xA5, 0x80, 0xA8, 0x33, 0xC9, 0x10, 0xA8, 0xFE, 0xC2, 0x00, -0xCB, 0x89, 0x0C, 0x90, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x18, 0x00, 0xD5, 0x55, 0xE3, 0x10, -0xD6, 0x20, 0xDC, 0x00, 0xFA, 0xF8, 0x75, 0x10, 0xFB, 0xE8, 0x58, 0x00, 0xFE, 0xB8, 0x39, 0x10, -0xFF, 0xA8, 0x1C, 0x00, 0x04, 0x61, 0x19, 0x90, 0x05, 0x50, 0xFC, 0x80, 0x06, 0x40, 0xFB, 0x90, -0x07, 0x30, 0xDE, 0x80, 0x08, 0x20, 0xDD, 0x90, 0x09, 0x10, 0xC0, 0x80, 0x0A, 0x00, 0xBF, 0x90, -0x0A, 0xF0, 0xA2, 0x80, 0x0B, 0xE0, 0xA1, 0x90, 0x0C, 0xD9, 0xBF, 0x00, 0x0D, 0xC0, 0x83, 0x90, -0x0E, 0xB9, 0xA1, 0x00, 0x0F, 0xA9, 0xA0, 0x10, 0x10, 0x99, 0x83, 0x00, 0x11, 0x89, 0x82, 0x10, -0x12, 0x79, 0x65, 0x00, 0x13, 0x69, 0x64, 0x10, 0x14, 0x59, 0x47, 0x00, 0x15, 0x49, 0x46, 0x10, -0x16, 0x39, 0x29, 0x00, 0x17, 0x29, 0x28, 0x10, 0x18, 0x22, 0x45, 0x80, 0x19, 0x09, 0x0A, 0x10, -0x1A, 0x02, 0x27, 0x80, 0x1A, 0xF2, 0x26, 0x90, 0x1B, 0xE2, 0x09, 0x80, 0x1C, 0xD2, 0x08, 0x90, -0x1D, 0xC1, 0xEB, 0x80, 0x1E, 0xB1, 0xEA, 0x90, 0x1F, 0xA1, 0xCD, 0x80, 0x20, 0x76, 0x1D, 0x10, -0x21, 0x81, 0xAF, 0x80, 0x22, 0x55, 0xFF, 0x10, 0x23, 0x6A, 0xCC, 0x00, 0x24, 0x35, 0xE1, 0x10, -0x25, 0x4A, 0xAE, 0x00, 0x26, 0x15, 0xC3, 0x10, 0x27, 0x2A, 0x90, 0x00, 0x27, 0xFE, 0xDF, 0x90, -0x29, 0x0A, 0x72, 0x00, 0x29, 0xDE, 0xC1, 0x90, 0x2A, 0xEA, 0x54, 0x00, 0x2B, 0xBE, 0xA3, 0x90, -0x2C, 0xD3, 0x70, 0x80, 0x2D, 0x9E, 0x85, 0x90, 0x2E, 0xB3, 0x52, 0x80, 0x2F, 0x7E, 0x67, 0x90, -0x30, 0x93, 0x34, 0x80, 0x31, 0x67, 0x84, 0x10, 0x32, 0x73, 0x16, 0x80, 0x33, 0x47, 0x66, 0x10, -0x34, 0x52, 0xF8, 0x80, 0x35, 0x27, 0x48, 0x10, 0x36, 0x32, 0xDA, 0x80, 0x37, 0x07, 0x2A, 0x10, -0x38, 0x1B, 0xF7, 0x00, 0x38, 0xE7, 0x0C, 0x10, 0x39, 0xFB, 0xD9, 0x00, 0x3A, 0xC6, 0xEE, 0x10, -0x3B, 0xDB, 0xBB, 0x00, 0x3C, 0xB0, 0x0A, 0x90, 0x3D, 0xBB, 0x9D, 0x00, 0x3E, 0x8F, 0xEC, 0x90, -0x3F, 0x9B, 0x7F, 0x00, 0x40, 0x6F, 0xCE, 0x90, 0x41, 0x84, 0x9B, 0x80, 0x42, 0x4F, 0xB0, 0x90, -0x43, 0x64, 0x7D, 0x80, 0x44, 0x2F, 0x92, 0x90, 0x45, 0x44, 0x5F, 0x80, 0x45, 0xF3, 0xC5, 0x10, -0x47, 0x2D, 0x7C, 0x00, 0x47, 0xD3, 0xA7, 0x10, 0x49, 0x0D, 0x5E, 0x00, 0x49, 0xB3, 0x89, 0x10, -0x4A, 0xED, 0x40, 0x00, 0x4B, 0x9C, 0xA5, 0x90, 0x4C, 0xD6, 0x5C, 0x80, 0x4D, 0x7C, 0x87, 0x90, -0x4E, 0xB6, 0x3E, 0x80, 0x4F, 0x5C, 0x69, 0x90, 0x50, 0x96, 0x20, 0x80, 0x51, 0x3C, 0x4B, 0x90, -0x52, 0x76, 0x02, 0x80, 0x53, 0x1C, 0x2D, 0x90, 0x54, 0x55, 0xE4, 0x80, 0x54, 0xFC, 0x0F, 0x90, -0x56, 0x35, 0xC6, 0x80, 0x56, 0xE5, 0x2C, 0x10, 0x58, 0x1E, 0xE3, 0x00, 0x58, 0xC5, 0x0E, 0x10, -0x59, 0xFE, 0xC5, 0x00, 0x5A, 0xA4, 0xF0, 0x10, 0x5B, 0xDE, 0xA7, 0x00, 0x5C, 0x84, 0xD2, 0x10, -0x5D, 0xBE, 0x89, 0x00, 0x5E, 0x64, 0xB4, 0x10, 0x5F, 0x9E, 0x6B, 0x00, 0x60, 0x4D, 0xD0, 0x90, -0x61, 0x87, 0x87, 0x80, 0x62, 0x2D, 0xB2, 0x90, 0x63, 0x67, 0x69, 0x80, 0x64, 0x0D, 0x94, 0x90, -0x65, 0x47, 0x4B, 0x80, 0x65, 0xED, 0x76, 0x90, 0x67, 0x27, 0x2D, 0x80, 0x67, 0xCD, 0x58, 0x90, -0x69, 0x07, 0x0F, 0x80, 0x69, 0xAD, 0x3A, 0x90, 0x6A, 0xE6, 0xF1, 0x80, 0x6B, 0x96, 0x57, 0x10, -0x6C, 0xD0, 0x0E, 0x00, 0x6D, 0x76, 0x39, 0x10, 0x6E, 0xAF, 0xF0, 0x00, 0x6F, 0x56, 0x1B, 0x10, -0x70, 0x8F, 0xD2, 0x00, 0x71, 0x35, 0xFD, 0x10, 0x72, 0x6F, 0xB4, 0x00, 0x73, 0x15, 0xDF, 0x10, -0x74, 0x4F, 0x96, 0x00, 0x74, 0xFE, 0xFB, 0x90, 0x76, 0x38, 0xB2, 0x80, 0x76, 0xDE, 0xDD, 0x90, -0x78, 0x18, 0x94, 0x80, 0x78, 0xBE, 0xBF, 0x90, 0x79, 0xF8, 0x76, 0x80, 0x7A, 0x9E, 0xA1, 0x90, -0x7B, 0xD8, 0x58, 0x80, 0x7C, 0x7E, 0x83, 0x90, 0x7D, 0xB8, 0x3A, 0x80, 0x7E, 0x5E, 0x65, 0x90, -0x7F, 0x98, 0x1C, 0x80, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, -0x95, 0xA0, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x08, -0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, -0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, - -/* Canada/Newfoundland */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xEE, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x15, 0x9C, 0xCF, 0x62, 0x0C, -0x9D, 0xA4, 0xE6, 0xFC, 0x9E, 0xB8, 0x7E, 0x8C, 0x9F, 0xC0, 0x1C, 0x7C, 0xA0, 0xB6, 0x88, 0xDC, -0xA1, 0x38, 0xFF, 0x4C, 0xA2, 0x95, 0x19, 0x5C, 0xA3, 0x84, 0xFC, 0x4C, 0xA4, 0x74, 0xFB, 0x5C, -0xA5, 0x64, 0xDE, 0x4C, 0xA6, 0x5E, 0x17, 0xDC, 0xA7, 0x44, 0xC0, 0x4C, 0xA8, 0x3D, 0xF9, 0xDC, -0xA9, 0x24, 0xA2, 0x4C, 0xAA, 0x1D, 0xDB, 0xDC, 0xAB, 0x04, 0x84, 0x4C, 0xAB, 0xFD, 0xBD, 0xDC, -0xAC, 0xE4, 0x66, 0x4C, 0xAD, 0xDD, 0x9F, 0xDC, 0xAE, 0xCD, 0x82, 0xCC, 0xAF, 0xBD, 0x81, 0xDC, -0xB0, 0xAD, 0x64, 0xCC, 0xB1, 0xA6, 0x9E, 0x5C, 0xB2, 0x8D, 0x46, 0xCC, 0xB3, 0x86, 0x80, 0x5C, -0xB4, 0x6D, 0x28, 0xCC, 0xB5, 0x66, 0x62, 0x5C, 0xB6, 0x4D, 0x0A, 0xCC, 0xB7, 0x46, 0x44, 0x5C, -0xB8, 0x2C, 0xEC, 0xCC, 0xB9, 0x26, 0x26, 0x5C, 0xBA, 0x16, 0x09, 0x4C, 0xBB, 0x0F, 0x42, 0xDC, -0xBB, 0xF5, 0xEB, 0x4C, 0xBC, 0xEF, 0x24, 0xDC, 0xBD, 0xD5, 0xCD, 0x4C, 0xBE, 0x9E, 0x4D, 0x6C, -0xBE, 0xCF, 0x06, 0xA8, 0xBF, 0xB5, 0xAF, 0x18, 0xC0, 0xB8, 0x31, 0x38, 0xC1, 0x79, 0xEF, 0xA8, -0xC2, 0x98, 0x13, 0x38, 0xC3, 0x59, 0xD1, 0xA8, 0xC4, 0x77, 0xF5, 0x38, 0xC5, 0x39, 0xB3, 0xA8, -0xC6, 0x61, 0x11, 0xB8, 0xC7, 0x19, 0x95, 0xA8, 0xC8, 0x40, 0xF3, 0xB8, 0xC9, 0x02, 0xB2, 0x28, -0xCA, 0x20, 0xD5, 0xB8, 0xCA, 0xE2, 0x94, 0x28, 0xCC, 0x00, 0xB7, 0xB8, 0xD2, 0x23, 0xF4, 0x70, -0xD2, 0x60, 0xE6, 0xC8, 0xD3, 0x88, 0x44, 0xD8, 0xD4, 0x4A, 0x03, 0x48, 0xD5, 0x68, 0x26, 0xD8, -0xD6, 0x29, 0xE5, 0x48, 0xD7, 0x48, 0x08, 0xD8, 0xD8, 0x09, 0xC7, 0x48, 0xD9, 0x27, 0xEA, 0xD8, -0xD9, 0xE9, 0xA9, 0x48, 0xDB, 0x11, 0x07, 0x58, 0xDB, 0xD2, 0xC5, 0xC8, 0xDC, 0xDE, 0x74, 0x58, -0xDD, 0xA9, 0x6D, 0x48, 0xDE, 0xBE, 0x56, 0x58, 0xDF, 0x89, 0x4F, 0x48, 0xE0, 0x9E, 0x38, 0x58, -0xE1, 0x69, 0x31, 0x48, 0xE2, 0x7E, 0x1A, 0x58, 0xE3, 0x49, 0x13, 0x48, 0xE4, 0x5D, 0xFC, 0x58, -0xE5, 0x28, 0xF5, 0x48, 0xE6, 0x47, 0x18, 0xD8, 0xE7, 0x12, 0x11, 0xC8, 0xE8, 0x26, 0xFA, 0xD8, -0xE8, 0xF1, 0xF3, 0xC8, 0xEA, 0x06, 0xDC, 0xD8, 0xEA, 0xD1, 0xD5, 0xC8, 0xEB, 0xE6, 0xBE, 0xD8, -0xEC, 0xB1, 0xB7, 0xC8, 0xED, 0xC6, 0xA0, 0xD8, 0xEE, 0xBF, 0xBE, 0x48, 0xEF, 0xAF, 0xBD, 0x58, -0xF0, 0x9F, 0xA0, 0x48, 0xF1, 0x8F, 0x9F, 0x58, 0xF2, 0x7F, 0x82, 0x48, 0xF3, 0x6F, 0x81, 0x58, -0xF4, 0x5F, 0x64, 0x48, 0xF5, 0x4F, 0x63, 0x58, 0xF6, 0x3F, 0x46, 0x48, 0xF7, 0x2F, 0x45, 0x58, -0xF8, 0x28, 0x62, 0xC8, 0xF9, 0x0F, 0x27, 0x58, 0xFA, 0x08, 0x44, 0xC8, 0xFA, 0xF8, 0x43, 0xD8, -0xFB, 0xE8, 0x26, 0xC8, 0xFC, 0xD8, 0x25, 0xD8, 0xFD, 0xC8, 0x08, 0xC8, 0xFE, 0xB8, 0x07, 0xD8, -0xFF, 0xA7, 0xEA, 0xC8, 0x00, 0x97, 0xE9, 0xD8, 0x01, 0x87, 0xCC, 0xC8, 0x02, 0x77, 0xCB, 0xD8, -0x03, 0x70, 0xE9, 0x48, 0x04, 0x60, 0xE8, 0x58, 0x05, 0x50, 0xCB, 0x48, 0x06, 0x40, 0xCA, 0x58, -0x07, 0x30, 0xAD, 0x48, 0x08, 0x20, 0xAC, 0x58, 0x09, 0x10, 0x8F, 0x48, 0x0A, 0x00, 0x8E, 0x58, -0x0A, 0xF0, 0x71, 0x48, 0x0B, 0xE0, 0x70, 0x58, 0x0C, 0xD9, 0x8D, 0xC8, 0x0D, 0xC0, 0x52, 0x58, -0x0E, 0xB9, 0x6F, 0xC8, 0x0F, 0xA9, 0x6E, 0xD8, 0x10, 0x99, 0x51, 0xC8, 0x11, 0x89, 0x50, 0xD8, -0x12, 0x79, 0x33, 0xC8, 0x13, 0x69, 0x32, 0xD8, 0x14, 0x59, 0x15, 0xC8, 0x15, 0x49, 0x14, 0xD8, -0x16, 0x38, 0xF7, 0xC8, 0x17, 0x28, 0xF6, 0xD8, 0x18, 0x22, 0x14, 0x48, 0x19, 0x08, 0xD8, 0xD8, -0x1A, 0x01, 0xF6, 0x48, 0x1A, 0xF1, 0xF5, 0x58, 0x1B, 0xE1, 0xD8, 0x48, 0x1C, 0xD1, 0xD7, 0x58, -0x1D, 0xC1, 0xBA, 0x48, 0x1E, 0xB1, 0xB9, 0x58, 0x1F, 0xA1, 0x9C, 0x48, 0x20, 0x75, 0xCF, 0xF4, -0x21, 0x81, 0x62, 0x64, 0x22, 0x55, 0xB1, 0xF4, 0x23, 0x6A, 0x70, 0xD4, 0x24, 0x35, 0x93, 0xF4, -0x25, 0x4A, 0x60, 0xE4, 0x26, 0x15, 0x75, 0xF4, 0x27, 0x2A, 0x42, 0xE4, 0x27, 0xFE, 0x92, 0x74, -0x29, 0x0A, 0x24, 0xE4, 0x29, 0xDE, 0x74, 0x74, 0x2A, 0xEA, 0x06, 0xE4, 0x2B, 0xBE, 0x56, 0x74, -0x2C, 0xD3, 0x23, 0x64, 0x2D, 0x9E, 0x38, 0x74, 0x2E, 0xB3, 0x05, 0x64, 0x2F, 0x7E, 0x1A, 0x74, -0x30, 0x92, 0xE7, 0x64, 0x31, 0x67, 0x36, 0xF4, 0x32, 0x72, 0xC9, 0x64, 0x33, 0x47, 0x18, 0xF4, -0x34, 0x52, 0xAB, 0x64, 0x35, 0x26, 0xFA, 0xF4, 0x36, 0x32, 0x8D, 0x64, 0x37, 0x06, 0xDC, 0xF4, -0x38, 0x1B, 0xA9, 0xE4, 0x38, 0xE6, 0xBE, 0xF4, 0x39, 0xFB, 0x8B, 0xE4, 0x3A, 0xC6, 0xA0, 0xF4, -0x3B, 0xDB, 0x6D, 0xE4, 0x3C, 0xAF, 0xBD, 0x74, 0x3D, 0xBB, 0x4F, 0xE4, 0x3E, 0x8F, 0x9F, 0x74, -0x3F, 0x9B, 0x31, 0xE4, 0x40, 0x6F, 0x81, 0x74, 0x41, 0x84, 0x4E, 0x64, 0x42, 0x4F, 0x63, 0x74, -0x43, 0x64, 0x30, 0x64, 0x44, 0x2F, 0x45, 0x74, 0x45, 0x44, 0x12, 0x64, 0x45, 0xF3, 0x77, 0xF4, -0x47, 0x2D, 0x2E, 0xE4, 0x47, 0xD3, 0x59, 0xF4, 0x49, 0x0D, 0x10, 0xE4, 0x49, 0xB3, 0x3B, 0xF4, -0x4A, 0xEC, 0xF2, 0xE4, 0x4B, 0x9C, 0x58, 0x74, 0x4C, 0xD6, 0x0F, 0x64, 0x4D, 0x7C, 0x3A, 0x74, -0x4E, 0xB5, 0xF1, 0x64, 0x4F, 0x5C, 0x1C, 0x74, 0x50, 0x95, 0xD3, 0x64, 0x51, 0x3B, 0xFE, 0x74, -0x52, 0x75, 0xB5, 0x64, 0x53, 0x1B, 0xE0, 0x74, 0x54, 0x55, 0x97, 0x64, 0x54, 0xFB, 0xC2, 0x74, -0x56, 0x35, 0x79, 0x64, 0x56, 0xE4, 0xDE, 0xF4, 0x58, 0x1E, 0x95, 0xE4, 0x58, 0xC4, 0xC0, 0xF4, -0x59, 0xFE, 0x77, 0xE4, 0x5A, 0xA4, 0xA2, 0xF4, 0x5B, 0xDE, 0x59, 0xE4, 0x5C, 0x84, 0x84, 0xF4, -0x5D, 0xBE, 0x3B, 0xE4, 0x5E, 0x64, 0x66, 0xF4, 0x5F, 0x9E, 0x1D, 0xE4, 0x60, 0x4D, 0x83, 0x74, -0x61, 0x87, 0x3A, 0x64, 0x62, 0x2D, 0x65, 0x74, 0x63, 0x67, 0x1C, 0x64, 0x64, 0x0D, 0x47, 0x74, -0x65, 0x46, 0xFE, 0x64, 0x65, 0xED, 0x29, 0x74, 0x67, 0x26, 0xE0, 0x64, 0x67, 0xCD, 0x0B, 0x74, -0x69, 0x06, 0xC2, 0x64, 0x69, 0xAC, 0xED, 0x74, 0x6A, 0xE6, 0xA4, 0x64, 0x6B, 0x96, 0x09, 0xF4, -0x6C, 0xCF, 0xC0, 0xE4, 0x6D, 0x75, 0xEB, 0xF4, 0x6E, 0xAF, 0xA2, 0xE4, 0x6F, 0x55, 0xCD, 0xF4, -0x70, 0x8F, 0x84, 0xE4, 0x71, 0x35, 0xAF, 0xF4, 0x72, 0x6F, 0x66, 0xE4, 0x73, 0x15, 0x91, 0xF4, -0x74, 0x4F, 0x48, 0xE4, 0x74, 0xFE, 0xAE, 0x74, 0x76, 0x38, 0x65, 0x64, 0x76, 0xDE, 0x90, 0x74, -0x78, 0x18, 0x47, 0x64, 0x78, 0xBE, 0x72, 0x74, 0x79, 0xF8, 0x29, 0x64, 0x7A, 0x9E, 0x54, 0x74, -0x7B, 0xD8, 0x0B, 0x64, 0x7C, 0x7E, 0x36, 0x74, 0x7D, 0xB7, 0xED, 0x64, 0x7E, 0x5E, 0x18, 0x74, -0x7F, 0x97, 0xCF, 0x64, 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, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x04, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x06, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0xFF, 0xFF, 0xDC, 0xA4, 0x01, 0x00, 0xFF, 0xFF, 0xCE, 0x94, 0x00, 0x04, 0xFF, 0xFF, -0xDC, 0xD8, 0x01, 0x00, 0xFF, 0xFF, 0xCE, 0xC8, 0x00, 0x04, 0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x08, -0xFF, 0xFF, 0xDC, 0xD8, 0x01, 0x0C, 0xFF, 0xFF, 0xEA, 0xE8, 0x01, 0x10, 0x4E, 0x44, 0x54, 0x00, -0x4E, 0x53, 0x54, 0x00, 0x4E, 0x50, 0x54, 0x00, 0x4E, 0x57, 0x54, 0x00, 0x4E, 0x44, 0x44, 0x54, -0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - -/* Canada/Pacific */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xBD, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xB8, 0xBD, 0xA0, -0x9F, 0xC0, 0x5B, 0x90, 0xCB, 0x89, 0x1A, 0xA0, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x26, 0x10, -0xD3, 0x76, 0x0F, 0x20, 0xD4, 0x53, 0x7D, 0x10, 0xD5, 0x55, 0xF1, 0x20, 0xD6, 0x20, 0xEA, 0x10, -0xD7, 0x35, 0xD3, 0x20, 0xD8, 0x00, 0xCC, 0x10, 0xD9, 0x15, 0xB5, 0x20, 0xD9, 0xE0, 0xAE, 0x10, -0xDA, 0xFE, 0xD1, 0xA0, 0xDB, 0xC0, 0x90, 0x10, 0xDC, 0xDE, 0xB3, 0xA0, 0xDD, 0xA9, 0xAC, 0x90, -0xDE, 0xBE, 0x95, 0xA0, 0xDF, 0x89, 0x8E, 0x90, 0xE0, 0x9E, 0x77, 0xA0, 0xE1, 0x69, 0x70, 0x90, -0xE2, 0x7E, 0x59, 0xA0, 0xE3, 0x49, 0x52, 0x90, 0xE4, 0x5E, 0x3B, 0xA0, 0xE5, 0x29, 0x34, 0x90, -0xE6, 0x47, 0x58, 0x20, 0xE7, 0x12, 0x51, 0x10, 0xE8, 0x27, 0x3A, 0x20, 0xE8, 0xF2, 0x33, 0x10, -0xEA, 0x07, 0x1C, 0x20, 0xEA, 0xD2, 0x15, 0x10, 0xEB, 0xE6, 0xFE, 0x20, 0xEC, 0xB1, 0xF7, 0x10, -0xED, 0xC6, 0xE0, 0x20, 0xEE, 0x91, 0xD9, 0x10, 0xEF, 0xAF, 0xFC, 0xA0, 0xF0, 0x71, 0xBB, 0x10, -0xF1, 0x8F, 0xDE, 0xA0, 0xF2, 0x7F, 0xC1, 0x90, 0xF3, 0x6F, 0xC0, 0xA0, 0xF4, 0x5F, 0xA3, 0x90, -0xF5, 0x4F, 0xA2, 0xA0, 0xF6, 0x3F, 0x85, 0x90, 0xF7, 0x2F, 0x84, 0xA0, 0xF8, 0x28, 0xA2, 0x10, -0xF9, 0x0F, 0x66, 0xA0, 0xFA, 0x08, 0x84, 0x10, 0xFA, 0xF8, 0x83, 0x20, 0xFB, 0xE8, 0x66, 0x10, -0xFC, 0xD8, 0x65, 0x20, 0xFD, 0xC8, 0x48, 0x10, 0xFE, 0xB8, 0x47, 0x20, 0xFF, 0xA8, 0x2A, 0x10, -0x00, 0x98, 0x29, 0x20, 0x01, 0x88, 0x0C, 0x10, 0x02, 0x78, 0x0B, 0x20, 0x03, 0x71, 0x28, 0x90, -0x04, 0x61, 0x27, 0xA0, 0x05, 0x51, 0x0A, 0x90, 0x06, 0x41, 0x09, 0xA0, 0x07, 0x30, 0xEC, 0x90, -0x08, 0x20, 0xEB, 0xA0, 0x09, 0x10, 0xCE, 0x90, 0x0A, 0x00, 0xCD, 0xA0, 0x0A, 0xF0, 0xB0, 0x90, -0x0B, 0xE0, 0xAF, 0xA0, 0x0C, 0xD9, 0xCD, 0x10, 0x0D, 0xC0, 0x91, 0xA0, 0x0E, 0xB9, 0xAF, 0x10, -0x0F, 0xA9, 0xAE, 0x20, 0x10, 0x99, 0x91, 0x10, 0x11, 0x89, 0x90, 0x20, 0x12, 0x79, 0x73, 0x10, -0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, 0x15, 0x49, 0x54, 0x20, 0x16, 0x39, 0x37, 0x10, -0x17, 0x29, 0x36, 0x20, 0x18, 0x22, 0x53, 0x90, 0x19, 0x09, 0x18, 0x20, 0x1A, 0x02, 0x35, 0x90, -0x1A, 0xF2, 0x34, 0xA0, 0x1B, 0xE2, 0x17, 0x90, 0x1C, 0xD2, 0x16, 0xA0, 0x1D, 0xC1, 0xF9, 0x90, -0x1E, 0xB1, 0xF8, 0xA0, 0x1F, 0xA1, 0xDB, 0x90, 0x20, 0x76, 0x2B, 0x20, 0x21, 0x81, 0xBD, 0x90, -0x22, 0x56, 0x0D, 0x20, 0x23, 0x6A, 0xDA, 0x10, 0x24, 0x35, 0xEF, 0x20, 0x25, 0x4A, 0xBC, 0x10, -0x26, 0x15, 0xD1, 0x20, 0x27, 0x2A, 0x9E, 0x10, 0x27, 0xFE, 0xED, 0xA0, 0x29, 0x0A, 0x80, 0x10, -0x29, 0xDE, 0xCF, 0xA0, 0x2A, 0xEA, 0x62, 0x10, 0x2B, 0xBE, 0xB1, 0xA0, 0x2C, 0xD3, 0x7E, 0x90, -0x2D, 0x9E, 0x93, 0xA0, 0x2E, 0xB3, 0x60, 0x90, 0x2F, 0x7E, 0x75, 0xA0, 0x30, 0x93, 0x42, 0x90, -0x31, 0x67, 0x92, 0x20, 0x32, 0x73, 0x24, 0x90, 0x33, 0x47, 0x74, 0x20, 0x34, 0x53, 0x06, 0x90, -0x35, 0x27, 0x56, 0x20, 0x36, 0x32, 0xE8, 0x90, 0x37, 0x07, 0x38, 0x20, 0x38, 0x1C, 0x05, 0x10, -0x38, 0xE7, 0x1A, 0x20, 0x39, 0xFB, 0xE7, 0x10, 0x3A, 0xC6, 0xFC, 0x20, 0x3B, 0xDB, 0xC9, 0x10, -0x3C, 0xB0, 0x18, 0xA0, 0x3D, 0xBB, 0xAB, 0x10, 0x3E, 0x8F, 0xFA, 0xA0, 0x3F, 0x9B, 0x8D, 0x10, -0x40, 0x6F, 0xDC, 0xA0, 0x41, 0x84, 0xA9, 0x90, 0x42, 0x4F, 0xBE, 0xA0, 0x43, 0x64, 0x8B, 0x90, -0x44, 0x2F, 0xA0, 0xA0, 0x45, 0x44, 0x6D, 0x90, 0x45, 0xF3, 0xD3, 0x20, 0x47, 0x2D, 0x8A, 0x10, -0x47, 0xD3, 0xB5, 0x20, 0x49, 0x0D, 0x6C, 0x10, 0x49, 0xB3, 0x97, 0x20, 0x4A, 0xED, 0x4E, 0x10, -0x4B, 0x9C, 0xB3, 0xA0, 0x4C, 0xD6, 0x6A, 0x90, 0x4D, 0x7C, 0x95, 0xA0, 0x4E, 0xB6, 0x4C, 0x90, -0x4F, 0x5C, 0x77, 0xA0, 0x50, 0x96, 0x2E, 0x90, 0x51, 0x3C, 0x59, 0xA0, 0x52, 0x76, 0x10, 0x90, -0x53, 0x1C, 0x3B, 0xA0, 0x54, 0x55, 0xF2, 0x90, 0x54, 0xFC, 0x1D, 0xA0, 0x56, 0x35, 0xD4, 0x90, -0x56, 0xE5, 0x3A, 0x20, 0x58, 0x1E, 0xF1, 0x10, 0x58, 0xC5, 0x1C, 0x20, 0x59, 0xFE, 0xD3, 0x10, -0x5A, 0xA4, 0xFE, 0x20, 0x5B, 0xDE, 0xB5, 0x10, 0x5C, 0x84, 0xE0, 0x20, 0x5D, 0xBE, 0x97, 0x10, -0x5E, 0x64, 0xC2, 0x20, 0x5F, 0x9E, 0x79, 0x10, 0x60, 0x4D, 0xDE, 0xA0, 0x61, 0x87, 0x95, 0x90, -0x62, 0x2D, 0xC0, 0xA0, 0x63, 0x67, 0x77, 0x90, 0x64, 0x0D, 0xA2, 0xA0, 0x65, 0x47, 0x59, 0x90, -0x65, 0xED, 0x84, 0xA0, 0x67, 0x27, 0x3B, 0x90, 0x67, 0xCD, 0x66, 0xA0, 0x69, 0x07, 0x1D, 0x90, -0x69, 0xAD, 0x48, 0xA0, 0x6A, 0xE6, 0xFF, 0x90, 0x6B, 0x96, 0x65, 0x20, 0x6C, 0xD0, 0x1C, 0x10, -0x6D, 0x76, 0x47, 0x20, 0x6E, 0xAF, 0xFE, 0x10, 0x6F, 0x56, 0x29, 0x20, 0x70, 0x8F, 0xE0, 0x10, -0x71, 0x36, 0x0B, 0x20, 0x72, 0x6F, 0xC2, 0x10, 0x73, 0x15, 0xED, 0x20, 0x74, 0x4F, 0xA4, 0x10, -0x74, 0xFF, 0x09, 0xA0, 0x76, 0x38, 0xC0, 0x90, 0x76, 0xDE, 0xEB, 0xA0, 0x78, 0x18, 0xA2, 0x90, -0x78, 0xBE, 0xCD, 0xA0, 0x79, 0xF8, 0x84, 0x90, 0x7A, 0x9E, 0xAF, 0xA0, 0x7B, 0xD8, 0x66, 0x90, -0x7C, 0x7E, 0x91, 0xA0, 0x7D, 0xB8, 0x48, 0x90, 0x7E, 0x5E, 0x73, 0xA0, 0x7F, 0x98, 0x2A, 0x90, -0x00, 0x01, 0x02, 0x03, 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, 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, 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, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0x9D, -0x90, 0x01, 0x00, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x08, 0xFF, -0xFF, 0x9D, 0x90, 0x01, 0x0C, 0x50, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, -0x00, 0x50, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - -/* Canada/Saskatchewan */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x86, 0xFD, 0x93, 0x1C, -0x9E, 0xB8, 0xAF, 0x90, 0x9F, 0xC0, 0x4D, 0x80, 0xB5, 0x65, 0x4F, 0xF0, 0xB6, 0x30, 0x48, 0xE0, -0xB7, 0x45, 0x31, 0xF0, 0xB8, 0x10, 0x2A, 0xE0, 0xB9, 0x25, 0x13, 0xF0, 0xB9, 0xF0, 0x0C, 0xE0, -0xBB, 0x0E, 0x30, 0x70, 0xBB, 0xCF, 0xEE, 0xE0, 0xBC, 0xEE, 0x12, 0x70, 0xBD, 0xB9, 0x0B, 0x60, -0xC2, 0x72, 0x08, 0xF0, 0xC3, 0x61, 0xEB, 0xE0, 0xC4, 0x51, 0xEA, 0xF0, 0xC5, 0x38, 0x93, 0x60, -0xC6, 0x31, 0xCC, 0xF0, 0xC7, 0x21, 0xAF, 0xE0, 0xC8, 0x1A, 0xE9, 0x70, 0xC9, 0x0A, 0xCC, 0x60, -0xC9, 0xFA, 0xCB, 0x70, 0xCA, 0xEA, 0xAE, 0x60, 0xCB, 0x89, 0x0C, 0x90, 0xD2, 0x23, 0xF4, 0x70, -0xD2, 0x61, 0x18, 0x00, 0xD3, 0x63, 0x8C, 0x10, 0xD4, 0x53, 0x6F, 0x00, 0xD5, 0x55, 0xE3, 0x10, -0xD6, 0x20, 0xDC, 0x00, 0xD7, 0x35, 0xC5, 0x10, 0xD8, 0x00, 0xBE, 0x00, 0xD9, 0x15, 0xA7, 0x10, -0xD9, 0xE0, 0xA0, 0x00, 0xDA, 0xFE, 0xC3, 0x90, 0xDB, 0xC0, 0x82, 0x00, 0xDC, 0xDE, 0xA5, 0x90, -0xDD, 0xA9, 0x9E, 0x80, 0xDE, 0xBE, 0x87, 0x90, 0xDF, 0x89, 0x80, 0x80, 0xE0, 0x9E, 0x69, 0x90, -0xE1, 0x69, 0x62, 0x80, 0xE2, 0x7E, 0x4B, 0x90, 0xE3, 0x49, 0x44, 0x80, 0xE4, 0x5E, 0x2D, 0x90, -0xE5, 0x29, 0x26, 0x80, 0xE6, 0x47, 0x4A, 0x10, 0xE7, 0x12, 0x43, 0x00, 0xE8, 0x27, 0x2C, 0x10, -0xE8, 0xF2, 0x25, 0x00, 0xEB, 0xE6, 0xF0, 0x10, 0xEC, 0xD6, 0xD3, 0x00, 0xED, 0xC6, 0xD2, 0x10, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x05, 0xFF, 0xFF, 0x9D, 0xE4, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, -0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0xFF, 0xFF, 0xAB, -0xA0, 0x01, 0x10, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x44, 0x54, -0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x53, 0x54, -0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - -/* Canada/Yukon */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1D, 0x9E, 0xB8, 0xCB, 0xB0, -0x9F, 0xBB, 0x23, 0xA0, 0xA0, 0xD0, 0x0C, 0xB0, 0xA1, 0xA2, 0xD2, 0x80, 0xCB, 0x89, 0x28, 0xB0, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x34, 0x20, 0xF7, 0x2F, 0x76, 0x90, 0xF8, 0x28, 0xA2, 0x10, -0xF9, 0x69, 0x1A, 0xB0, 0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, 0x15, 0x49, 0x54, 0x20, -0x16, 0x39, 0x37, 0x10, 0x17, 0x29, 0x36, 0x20, 0x18, 0x22, 0x53, 0x90, 0x19, 0x09, 0x18, 0x20, -0x1A, 0x02, 0x35, 0x90, 0x1A, 0xF2, 0x34, 0xA0, 0x1B, 0xE2, 0x17, 0x90, 0x1C, 0xD2, 0x16, 0xA0, -0x1D, 0xC1, 0xF9, 0x90, 0x1E, 0xB1, 0xF8, 0xA0, 0x1F, 0xA1, 0xDB, 0x90, 0x20, 0x76, 0x2B, 0x20, -0x21, 0x81, 0xBD, 0x90, 0x22, 0x56, 0x0D, 0x20, 0x23, 0x6A, 0xDA, 0x10, 0x24, 0x35, 0xEF, 0x20, -0x25, 0x4A, 0xBC, 0x10, 0x26, 0x15, 0xD1, 0x20, 0x27, 0x2A, 0x9E, 0x10, 0x27, 0xFE, 0xED, 0xA0, -0x29, 0x0A, 0x80, 0x10, 0x29, 0xDE, 0xCF, 0xA0, 0x2A, 0xEA, 0x62, 0x10, 0x2B, 0xBE, 0xB1, 0xA0, -0x2C, 0xD3, 0x7E, 0x90, 0x2D, 0x9E, 0x93, 0xA0, 0x2E, 0xB3, 0x60, 0x90, 0x2F, 0x7E, 0x75, 0xA0, -0x30, 0x93, 0x42, 0x90, 0x31, 0x67, 0x92, 0x20, 0x32, 0x73, 0x24, 0x90, 0x33, 0x47, 0x74, 0x20, -0x34, 0x53, 0x06, 0x90, 0x35, 0x27, 0x56, 0x20, 0x36, 0x32, 0xE8, 0x90, 0x37, 0x07, 0x38, 0x20, -0x38, 0x1C, 0x05, 0x10, 0x38, 0xE7, 0x1A, 0x20, 0x39, 0xFB, 0xE7, 0x10, 0x3A, 0xC6, 0xFC, 0x20, -0x3B, 0xDB, 0xC9, 0x10, 0x3C, 0xB0, 0x18, 0xA0, 0x3D, 0xBB, 0xAB, 0x10, 0x3E, 0x8F, 0xFA, 0xA0, -0x3F, 0x9B, 0x8D, 0x10, 0x40, 0x6F, 0xDC, 0xA0, 0x41, 0x84, 0xA9, 0x90, 0x42, 0x4F, 0xBE, 0xA0, -0x43, 0x64, 0x8B, 0x90, 0x44, 0x2F, 0xA0, 0xA0, 0x45, 0x44, 0x6D, 0x90, 0x45, 0xF3, 0xD3, 0x20, -0x47, 0x2D, 0x8A, 0x10, 0x47, 0xD3, 0xB5, 0x20, 0x49, 0x0D, 0x6C, 0x10, 0x49, 0xB3, 0x97, 0x20, -0x4A, 0xED, 0x4E, 0x10, 0x4B, 0x9C, 0xB3, 0xA0, 0x4C, 0xD6, 0x6A, 0x90, 0x4D, 0x7C, 0x95, 0xA0, -0x4E, 0xB6, 0x4C, 0x90, 0x4F, 0x5C, 0x77, 0xA0, 0x50, 0x96, 0x2E, 0x90, 0x51, 0x3C, 0x59, 0xA0, -0x52, 0x76, 0x10, 0x90, 0x53, 0x1C, 0x3B, 0xA0, 0x54, 0x55, 0xF2, 0x90, 0x54, 0xFC, 0x1D, 0xA0, -0x56, 0x35, 0xD4, 0x90, 0x56, 0xE5, 0x3A, 0x20, 0x58, 0x1E, 0xF1, 0x10, 0x58, 0xC5, 0x1C, 0x20, -0x59, 0xFE, 0xD3, 0x10, 0x5A, 0xA4, 0xFE, 0x20, 0x5B, 0xDE, 0xB5, 0x10, 0x5C, 0x84, 0xE0, 0x20, -0x5D, 0xBE, 0x97, 0x10, 0x5E, 0x64, 0xC2, 0x20, 0x5F, 0x9E, 0x79, 0x10, 0x60, 0x4D, 0xDE, 0xA0, -0x61, 0x87, 0x95, 0x90, 0x62, 0x2D, 0xC0, 0xA0, 0x63, 0x67, 0x77, 0x90, 0x64, 0x0D, 0xA2, 0xA0, -0x65, 0x47, 0x59, 0x90, 0x65, 0xED, 0x84, 0xA0, 0x67, 0x27, 0x3B, 0x90, 0x67, 0xCD, 0x66, 0xA0, -0x69, 0x07, 0x1D, 0x90, 0x69, 0xAD, 0x48, 0xA0, 0x6A, 0xE6, 0xFF, 0x90, 0x6B, 0x96, 0x65, 0x20, -0x6C, 0xD0, 0x1C, 0x10, 0x6D, 0x76, 0x47, 0x20, 0x6E, 0xAF, 0xFE, 0x10, 0x6F, 0x56, 0x29, 0x20, -0x70, 0x8F, 0xE0, 0x10, 0x71, 0x36, 0x0B, 0x20, 0x72, 0x6F, 0xC2, 0x10, 0x73, 0x15, 0xED, 0x20, -0x74, 0x4F, 0xA4, 0x10, 0x74, 0xFF, 0x09, 0xA0, 0x76, 0x38, 0xC0, 0x90, 0x76, 0xDE, 0xEB, 0xA0, -0x78, 0x18, 0xA2, 0x90, 0x78, 0xBE, 0xCD, 0xA0, 0x79, 0xF8, 0x84, 0x90, 0x7A, 0x9E, 0xAF, 0xA0, -0x7B, 0xD8, 0x66, 0x90, 0x7C, 0x7E, 0x91, 0xA0, 0x7D, 0xB8, 0x48, 0x90, 0x7E, 0x5E, 0x73, 0xA0, -0x7F, 0x98, 0x2A, 0x90, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x01, 0x04, 0x01, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x00, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x04, 0xFF, 0xFF, -0x8F, 0x80, 0x01, 0x08, 0xFF, 0xFF, 0x8F, 0x80, 0x01, 0x0C, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x10, -0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x15, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x19, 0x59, 0x44, 0x54, 0x00, -0x59, 0x53, 0x54, 0x00, 0x59, 0x57, 0x54, 0x00, 0x59, 0x50, 0x54, 0x00, 0x59, 0x44, 0x44, 0x54, -0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - -/* CET */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x0C, 0x17, 0x60, -0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, 0x9E, 0xB9, 0x90, 0x90, -0x9F, 0x84, 0x97, 0x90, 0xC8, 0x09, 0x71, 0x90, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, 0x0D, 0xA4, 0x63, 0x90, -0x0E, 0x8B, 0x1A, 0x10, 0x0F, 0x84, 0x45, 0x90, 0x10, 0x74, 0x36, 0x90, 0x11, 0x64, 0x27, 0x90, -0x12, 0x54, 0x18, 0x90, 0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, -0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, -0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, -0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, -0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, -0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, -0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, -0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, -0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, -0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, -0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, -0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, -0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, -0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, -0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, -0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, -0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, -0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, -0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, -0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, -0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, -0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, -0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, -0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, -0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, -0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, -0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, -0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, -0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, -0x7F, 0x8E, 0x7F, 0x90, 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, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 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, 0x1C, 0x20, 0x01, 0x00, -0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, -0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, -0x00, 0x00, 0x00, - -/* Chile/Continental */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x9E, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0D, 0x8F, 0x24, 0x69, 0xC6, -0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x71, 0x05, 0x46, 0xA1, 0x00, 0x71, 0xC0, 0xB0, 0x5E, 0x77, 0xC6, -0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, 0xB4, 0x22, 0x34, 0x50, -0xB5, 0x39, 0xA4, 0x40, 0xB6, 0x03, 0x67, 0xD0, 0xB7, 0x1A, 0xD7, 0xC0, 0xB7, 0xE4, 0x9B, 0x50, -0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xC7, 0x20, 0x50, 0xCC, 0x1C, 0x6E, 0x40, 0xCC, 0x6C, 0xE7, 0xD0, -0xD4, 0x1B, 0xC9, 0xB0, 0xD5, 0x76, 0xA0, 0x50, 0xFD, 0xD1, 0x3C, 0x40, 0xFE, 0x92, 0xFA, 0xB0, -0xFF, 0xCC, 0xCD, 0xC0, 0x00, 0x72, 0xDC, 0xB0, 0x01, 0x75, 0x50, 0xC0, 0x02, 0x40, 0x49, 0xB0, -0x03, 0x55, 0x32, 0xC0, 0x04, 0x20, 0x2B, 0xB0, 0x05, 0x3E, 0x4F, 0x40, 0x06, 0x00, 0x0D, 0xB0, -0x07, 0x0B, 0xBC, 0x40, 0x07, 0xDF, 0xEF, 0xB0, 0x08, 0xFE, 0x13, 0x40, 0x09, 0xBF, 0xD1, 0xB0, -0x0A, 0xDD, 0xF5, 0x40, 0x0B, 0xA8, 0xEE, 0x30, 0x0C, 0xBD, 0xD7, 0x40, 0x0D, 0x88, 0xD0, 0x30, -0x0E, 0x9D, 0xB9, 0x40, 0x0F, 0x68, 0xB2, 0x30, 0x10, 0x86, 0xD5, 0xC0, 0x11, 0x48, 0x94, 0x30, -0x12, 0x66, 0xB7, 0xC0, 0x13, 0x28, 0x76, 0x30, 0x14, 0x46, 0x99, 0xC0, 0x15, 0x11, 0x92, 0xB0, -0x16, 0x26, 0x7B, 0xC0, 0x16, 0xF1, 0x74, 0xB0, 0x18, 0x06, 0x5D, 0xC0, 0x18, 0xD1, 0x56, 0xB0, -0x19, 0xE6, 0x3F, 0xC0, 0x1A, 0xB1, 0x38, 0xB0, 0x1B, 0xCF, 0x5C, 0x40, 0x1C, 0x91, 0x1A, 0xB0, -0x1D, 0xAF, 0x3E, 0x40, 0x1E, 0x70, 0xFC, 0xB0, 0x1F, 0x8F, 0x20, 0x40, 0x20, 0x7F, 0x03, 0x30, -0x21, 0x6F, 0x02, 0x40, 0x22, 0x39, 0xFB, 0x30, 0x23, 0x45, 0xA9, 0xC0, 0x24, 0x19, 0xDD, 0x30, -0x25, 0x38, 0x00, 0xC0, 0x26, 0x02, 0xF9, 0xB0, 0x26, 0xF2, 0xF8, 0xC0, 0x27, 0xD9, 0xA1, 0x30, -0x28, 0xF7, 0xC4, 0xC0, 0x29, 0xC2, 0xBD, 0xB0, 0x2A, 0xD7, 0xA6, 0xC0, 0x2B, 0xA2, 0x9F, 0xB0, -0x2C, 0xB7, 0x88, 0xC0, 0x2D, 0x82, 0x81, 0xB0, 0x2E, 0x97, 0x6A, 0xC0, 0x2F, 0x62, 0x63, 0xB0, -0x30, 0x80, 0x87, 0x40, 0x31, 0x42, 0x45, 0xB0, 0x32, 0x60, 0x69, 0x40, 0x33, 0x3D, 0xD7, 0x30, -0x34, 0x40, 0x4B, 0x40, 0x35, 0x0B, 0x44, 0x30, 0x36, 0x0D, 0xB8, 0x40, 0x37, 0x06, 0xD5, 0xB0, -0x38, 0x00, 0x0F, 0x40, 0x38, 0xCB, 0x08, 0x30, 0x39, 0xE9, 0x2B, 0xC0, 0x3A, 0xAA, 0xEA, 0x30, -0x3B, 0xC9, 0x0D, 0xC0, 0x3C, 0x8A, 0xCC, 0x30, 0x3D, 0xA8, 0xEF, 0xC0, 0x3E, 0x6A, 0xAE, 0x30, -0x3F, 0x88, 0xD1, 0xC0, 0x40, 0x53, 0xCA, 0xB0, 0x41, 0x68, 0xB3, 0xC0, 0x42, 0x33, 0xAC, 0xB0, -0x43, 0x48, 0x95, 0xC0, 0x44, 0x13, 0x8E, 0xB0, 0x45, 0x31, 0xB2, 0x40, 0x45, 0xF3, 0x70, 0xB0, -0x47, 0x11, 0x94, 0x40, 0x47, 0xD3, 0x52, 0xB0, 0x48, 0xF1, 0x76, 0x40, 0x49, 0xBC, 0x6F, 0x30, -0x4A, 0xD1, 0x58, 0x40, 0x4B, 0x9C, 0x51, 0x30, 0x4C, 0xB1, 0x3A, 0x40, 0x4D, 0x7C, 0x33, 0x30, -0x4E, 0x91, 0x1C, 0x40, 0x4F, 0x5C, 0x15, 0x30, 0x50, 0x7A, 0x38, 0xC0, 0x51, 0x3B, 0xF7, 0x30, -0x52, 0x5A, 0x1A, 0xC0, 0x53, 0x1B, 0xD9, 0x30, 0x54, 0x39, 0xFC, 0xC0, 0x55, 0x04, 0xF5, 0xB0, -0x56, 0x19, 0xDE, 0xC0, 0x56, 0xE4, 0xD7, 0xB0, 0x57, 0xF9, 0xC0, 0xC0, 0x58, 0xC4, 0xB9, 0xB0, -0x59, 0xE2, 0xDD, 0x40, 0x5A, 0xA4, 0x9B, 0xB0, 0x5B, 0xC2, 0xBF, 0x40, 0x5C, 0x84, 0x7D, 0xB0, -0x5D, 0xA2, 0xA1, 0x40, 0x5E, 0x6D, 0x9A, 0x30, 0x5F, 0x82, 0x83, 0x40, 0x60, 0x4D, 0x7C, 0x30, -0x61, 0x62, 0x65, 0x40, 0x62, 0x2D, 0x5E, 0x30, 0x63, 0x42, 0x47, 0x40, 0x64, 0x0D, 0x40, 0x30, -0x65, 0x2B, 0x63, 0xC0, 0x65, 0xED, 0x22, 0x30, 0x67, 0x0B, 0x45, 0xC0, 0x67, 0xCD, 0x04, 0x30, -0x68, 0xEB, 0x27, 0xC0, 0x69, 0xB6, 0x20, 0xB0, 0x6A, 0xCB, 0x09, 0xC0, 0x6B, 0x96, 0x02, 0xB0, -0x6C, 0xAA, 0xEB, 0xC0, 0x6D, 0x75, 0xE4, 0xB0, 0x6E, 0x94, 0x08, 0x40, 0x6F, 0x55, 0xC6, 0xB0, -0x70, 0x73, 0xEA, 0x40, 0x71, 0x35, 0xA8, 0xB0, 0x72, 0x53, 0xCC, 0x40, 0x73, 0x15, 0x8A, 0xB0, -0x74, 0x33, 0xAE, 0x40, 0x74, 0xFE, 0xA7, 0x30, 0x76, 0x13, 0x90, 0x40, 0x76, 0xDE, 0x89, 0x30, -0x77, 0xF3, 0x72, 0x40, 0x78, 0xBE, 0x6B, 0x30, 0x79, 0xDC, 0x8E, 0xC0, 0x7A, 0x9E, 0x4D, 0x30, -0x7B, 0xBC, 0x70, 0xC0, 0x7C, 0x7E, 0x2F, 0x30, 0x7D, 0x9C, 0x52, 0xC0, 0x7E, 0x67, 0x4B, 0xB0, -0x7F, 0x7C, 0x34, 0xC0, 0x01, 0x00, 0x02, 0x00, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, -0x03, 0x01, 0x03, 0x04, 0x05, 0x04, 0x02, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, 0xFF, -0xC7, 0xC0, 0x00, 0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, -0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, -0x00, 0x04, 0x53, 0x4D, 0x54, 0x00, 0x43, 0x4C, 0x54, 0x00, 0x43, 0x4C, 0x53, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, - -/* Chile/EasterIsland */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0F, 0xB9, 0xC7, 0x40, 0x88, -0xCC, 0x1C, 0x6E, 0x40, 0xCC, 0x6C, 0xE7, 0xD0, 0xD4, 0x1B, 0xC9, 0xB0, 0xFD, 0xD1, 0x3C, 0x40, -0xFE, 0x92, 0xFA, 0xB0, 0xFF, 0xCC, 0xCD, 0xC0, 0x00, 0x72, 0xDC, 0xB0, 0x01, 0x75, 0x50, 0xC0, -0x02, 0x40, 0x49, 0xB0, 0x03, 0x55, 0x32, 0xC0, 0x04, 0x20, 0x2B, 0xB0, 0x05, 0x3E, 0x4F, 0x40, -0x06, 0x00, 0x0D, 0xB0, 0x07, 0x0B, 0xBC, 0x40, 0x07, 0xDF, 0xEF, 0xB0, 0x08, 0xFE, 0x13, 0x40, -0x09, 0xBF, 0xD1, 0xB0, 0x0A, 0xDD, 0xF5, 0x40, 0x0B, 0xA8, 0xEE, 0x30, 0x0C, 0xBD, 0xD7, 0x40, -0x0D, 0x88, 0xD0, 0x30, 0x0E, 0x9D, 0xB9, 0x40, 0x0F, 0x68, 0xB2, 0x30, 0x10, 0x86, 0xD5, 0xC0, -0x11, 0x48, 0x94, 0x30, 0x12, 0x66, 0xB7, 0xC0, 0x13, 0x28, 0x76, 0x30, 0x14, 0x46, 0x99, 0xC0, -0x15, 0x11, 0x92, 0xB0, 0x16, 0x26, 0x7B, 0xC0, 0x16, 0xF1, 0x74, 0xB0, 0x18, 0x06, 0x5D, 0xC0, -0x18, 0xD1, 0x56, 0xB0, 0x19, 0xE6, 0x3F, 0xC0, 0x1A, 0xB1, 0x38, 0xB0, 0x1B, 0xCF, 0x5C, 0x40, -0x1C, 0x91, 0x1A, 0xB0, 0x1D, 0xAF, 0x3E, 0x40, 0x1E, 0x70, 0xFC, 0xB0, 0x1F, 0x8F, 0x20, 0x40, -0x20, 0x7F, 0x03, 0x30, 0x21, 0x6F, 0x02, 0x40, 0x22, 0x39, 0xFB, 0x30, 0x23, 0x45, 0xA9, 0xC0, -0x24, 0x19, 0xDD, 0x30, 0x25, 0x38, 0x00, 0xC0, 0x26, 0x02, 0xF9, 0xB0, 0x26, 0xF2, 0xF8, 0xC0, -0x27, 0xD9, 0xA1, 0x30, 0x28, 0xF7, 0xC4, 0xC0, 0x29, 0xC2, 0xBD, 0xB0, 0x2A, 0xD7, 0xA6, 0xC0, -0x2B, 0xA2, 0x9F, 0xB0, 0x2C, 0xB7, 0x88, 0xC0, 0x2D, 0x82, 0x81, 0xB0, 0x2E, 0x97, 0x6A, 0xC0, -0x2F, 0x62, 0x63, 0xB0, 0x30, 0x80, 0x87, 0x40, 0x31, 0x42, 0x45, 0xB0, 0x32, 0x60, 0x69, 0x40, -0x33, 0x3D, 0xD7, 0x30, 0x34, 0x40, 0x4B, 0x40, 0x35, 0x0B, 0x44, 0x30, 0x36, 0x0D, 0xB8, 0x40, -0x37, 0x06, 0xD5, 0xB0, 0x38, 0x00, 0x0F, 0x40, 0x38, 0xCB, 0x08, 0x30, 0x39, 0xE9, 0x2B, 0xC0, -0x3A, 0xAA, 0xEA, 0x30, 0x3B, 0xC9, 0x0D, 0xC0, 0x3C, 0x8A, 0xCC, 0x30, 0x3D, 0xA8, 0xEF, 0xC0, -0x3E, 0x6A, 0xAE, 0x30, 0x3F, 0x88, 0xD1, 0xC0, 0x40, 0x53, 0xCA, 0xB0, 0x41, 0x68, 0xB3, 0xC0, -0x42, 0x33, 0xAC, 0xB0, 0x43, 0x48, 0x95, 0xC0, 0x44, 0x13, 0x8E, 0xB0, 0x45, 0x31, 0xB2, 0x40, -0x45, 0xF3, 0x70, 0xB0, 0x47, 0x11, 0x94, 0x40, 0x47, 0xD3, 0x52, 0xB0, 0x48, 0xF1, 0x76, 0x40, -0x49, 0xBC, 0x6F, 0x30, 0x4A, 0xD1, 0x58, 0x40, 0x4B, 0x9C, 0x51, 0x30, 0x4C, 0xB1, 0x3A, 0x40, -0x4D, 0x7C, 0x33, 0x30, 0x4E, 0x91, 0x1C, 0x40, 0x4F, 0x5C, 0x15, 0x30, 0x50, 0x7A, 0x38, 0xC0, -0x51, 0x3B, 0xF7, 0x30, 0x52, 0x5A, 0x1A, 0xC0, 0x53, 0x1B, 0xD9, 0x30, 0x54, 0x39, 0xFC, 0xC0, -0x55, 0x04, 0xF5, 0xB0, 0x56, 0x19, 0xDE, 0xC0, 0x56, 0xE4, 0xD7, 0xB0, 0x57, 0xF9, 0xC0, 0xC0, -0x58, 0xC4, 0xB9, 0xB0, 0x59, 0xE2, 0xDD, 0x40, 0x5A, 0xA4, 0x9B, 0xB0, 0x5B, 0xC2, 0xBF, 0x40, -0x5C, 0x84, 0x7D, 0xB0, 0x5D, 0xA2, 0xA1, 0x40, 0x5E, 0x6D, 0x9A, 0x30, 0x5F, 0x82, 0x83, 0x40, -0x60, 0x4D, 0x7C, 0x30, 0x61, 0x62, 0x65, 0x40, 0x62, 0x2D, 0x5E, 0x30, 0x63, 0x42, 0x47, 0x40, -0x64, 0x0D, 0x40, 0x30, 0x65, 0x2B, 0x63, 0xC0, 0x65, 0xED, 0x22, 0x30, 0x67, 0x0B, 0x45, 0xC0, -0x67, 0xCD, 0x04, 0x30, 0x68, 0xEB, 0x27, 0xC0, 0x69, 0xB6, 0x20, 0xB0, 0x6A, 0xCB, 0x09, 0xC0, -0x6B, 0x96, 0x02, 0xB0, 0x6C, 0xAA, 0xEB, 0xC0, 0x6D, 0x75, 0xE4, 0xB0, 0x6E, 0x94, 0x08, 0x40, -0x6F, 0x55, 0xC6, 0xB0, 0x70, 0x73, 0xEA, 0x40, 0x71, 0x35, 0xA8, 0xB0, 0x72, 0x53, 0xCC, 0x40, -0x73, 0x15, 0x8A, 0xB0, 0x74, 0x33, 0xAE, 0x40, 0x74, 0xFE, 0xA7, 0x30, 0x76, 0x13, 0x90, 0x40, -0x76, 0xDE, 0x89, 0x30, 0x77, 0xF3, 0x72, 0x40, 0x78, 0xBE, 0x6B, 0x30, 0x79, 0xDC, 0x8E, 0xC0, -0x7A, 0x9E, 0x4D, 0x30, 0x7B, 0xBC, 0x70, 0xC0, 0x7C, 0x7E, 0x2F, 0x30, 0x7D, 0x9C, 0x52, 0xC0, -0x7E, 0x67, 0x4B, 0xB0, 0x7F, 0x7C, 0x34, 0xC0, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0xFF, 0xFF, 0x99, 0x78, 0x00, 0x00, 0xFF, 0xFF, 0x9D, -0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x09, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x09, 0xFF, -0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x09, 0x45, 0x4D, 0x54, 0x00, 0x45, -0x41, 0x53, 0x54, 0x00, 0x45, 0x41, 0x53, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, -0x00, 0x01, 0x01, 0x00, 0x01, 0x01, - -/* CST6CDT */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x2C, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, 0xFA, 0xF8, 0x67, 0x00, 0xFB, 0xE8, 0x49, 0xF0, -0xFC, 0xD8, 0x49, 0x00, 0xFD, 0xC8, 0x2B, 0xF0, 0xFE, 0xB8, 0x2B, 0x00, 0xFF, 0xA8, 0x0D, 0xF0, -0x00, 0x98, 0x0D, 0x00, 0x01, 0x87, 0xEF, 0xF0, 0x02, 0x77, 0xEF, 0x00, 0x03, 0x71, 0x0C, 0x70, -0x04, 0x61, 0x0B, 0x80, 0x05, 0x50, 0xEE, 0x70, 0x06, 0x40, 0xED, 0x80, 0x07, 0x30, 0xD0, 0x70, -0x07, 0x8D, 0x27, 0x80, 0x09, 0x10, 0xB2, 0x70, 0x09, 0xAD, 0xA3, 0x00, 0x0A, 0xF0, 0x94, 0x70, -0x0B, 0xE0, 0x93, 0x80, 0x0C, 0xD9, 0xB0, 0xF0, 0x0D, 0xC0, 0x75, 0x80, 0x0E, 0xB9, 0x92, 0xF0, -0x0F, 0xA9, 0x92, 0x00, 0x10, 0x99, 0x74, 0xF0, 0x11, 0x89, 0x74, 0x00, 0x12, 0x79, 0x56, 0xF0, -0x13, 0x69, 0x56, 0x00, 0x14, 0x59, 0x38, 0xF0, 0x15, 0x49, 0x38, 0x00, 0x16, 0x39, 0x1A, 0xF0, -0x17, 0x29, 0x1A, 0x00, 0x18, 0x22, 0x37, 0x70, 0x19, 0x08, 0xFC, 0x00, 0x1A, 0x02, 0x19, 0x70, -0x1A, 0xF2, 0x18, 0x80, 0x1B, 0xE1, 0xFB, 0x70, 0x1C, 0xD1, 0xFA, 0x80, 0x1D, 0xC1, 0xDD, 0x70, -0x1E, 0xB1, 0xDC, 0x80, 0x1F, 0xA1, 0xBF, 0x70, 0x20, 0x76, 0x0F, 0x00, 0x21, 0x81, 0xA1, 0x70, -0x22, 0x55, 0xF1, 0x00, 0x23, 0x6A, 0xBD, 0xF0, 0x24, 0x35, 0xD3, 0x00, 0x25, 0x4A, 0x9F, 0xF0, -0x26, 0x15, 0xB5, 0x00, 0x27, 0x2A, 0x81, 0xF0, 0x27, 0xFE, 0xD1, 0x80, 0x29, 0x0A, 0x63, 0xF0, -0x29, 0xDE, 0xB3, 0x80, 0x2A, 0xEA, 0x45, 0xF0, 0x2B, 0xBE, 0x95, 0x80, 0x2C, 0xD3, 0x62, 0x70, -0x2D, 0x9E, 0x77, 0x80, 0x2E, 0xB3, 0x44, 0x70, 0x2F, 0x7E, 0x59, 0x80, 0x30, 0x93, 0x26, 0x70, -0x31, 0x67, 0x76, 0x00, 0x32, 0x73, 0x08, 0x70, 0x33, 0x47, 0x58, 0x00, 0x34, 0x52, 0xEA, 0x70, -0x35, 0x27, 0x3A, 0x00, 0x36, 0x32, 0xCC, 0x70, 0x37, 0x07, 0x1C, 0x00, 0x38, 0x1B, 0xE8, 0xF0, -0x38, 0xE6, 0xFE, 0x00, 0x39, 0xFB, 0xCA, 0xF0, 0x3A, 0xC6, 0xE0, 0x00, 0x3B, 0xDB, 0xAC, 0xF0, -0x3C, 0xAF, 0xFC, 0x80, 0x3D, 0xBB, 0x8E, 0xF0, 0x3E, 0x8F, 0xDE, 0x80, 0x3F, 0x9B, 0x70, 0xF0, -0x40, 0x6F, 0xC0, 0x80, 0x41, 0x84, 0x8D, 0x70, 0x42, 0x4F, 0xA2, 0x80, 0x43, 0x64, 0x6F, 0x70, -0x44, 0x2F, 0x84, 0x80, 0x45, 0x44, 0x51, 0x70, 0x45, 0xF3, 0xB7, 0x00, 0x47, 0x2D, 0x6D, 0xF0, -0x47, 0xD3, 0x99, 0x00, 0x49, 0x0D, 0x4F, 0xF0, 0x49, 0xB3, 0x7B, 0x00, 0x4A, 0xED, 0x31, 0xF0, -0x4B, 0x9C, 0x97, 0x80, 0x4C, 0xD6, 0x4E, 0x70, 0x4D, 0x7C, 0x79, 0x80, 0x4E, 0xB6, 0x30, 0x70, -0x4F, 0x5C, 0x5B, 0x80, 0x50, 0x96, 0x12, 0x70, 0x51, 0x3C, 0x3D, 0x80, 0x52, 0x75, 0xF4, 0x70, -0x53, 0x1C, 0x1F, 0x80, 0x54, 0x55, 0xD6, 0x70, 0x54, 0xFC, 0x01, 0x80, 0x56, 0x35, 0xB8, 0x70, -0x56, 0xE5, 0x1E, 0x00, 0x58, 0x1E, 0xD4, 0xF0, 0x58, 0xC5, 0x00, 0x00, 0x59, 0xFE, 0xB6, 0xF0, -0x5A, 0xA4, 0xE2, 0x00, 0x5B, 0xDE, 0x98, 0xF0, 0x5C, 0x84, 0xC4, 0x00, 0x5D, 0xBE, 0x7A, 0xF0, -0x5E, 0x64, 0xA6, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x60, 0x4D, 0xC2, 0x80, 0x61, 0x87, 0x79, 0x70, -0x62, 0x2D, 0xA4, 0x80, 0x63, 0x67, 0x5B, 0x70, 0x64, 0x0D, 0x86, 0x80, 0x65, 0x47, 0x3D, 0x70, -0x65, 0xED, 0x68, 0x80, 0x67, 0x27, 0x1F, 0x70, 0x67, 0xCD, 0x4A, 0x80, 0x69, 0x07, 0x01, 0x70, -0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, 0x6B, 0x96, 0x49, 0x00, 0x6C, 0xCF, 0xFF, 0xF0, -0x6D, 0x76, 0x2B, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, 0x6F, 0x56, 0x0D, 0x00, 0x70, 0x8F, 0xC3, 0xF0, -0x71, 0x35, 0xEF, 0x00, 0x72, 0x6F, 0xA5, 0xF0, 0x73, 0x15, 0xD1, 0x00, 0x74, 0x4F, 0x87, 0xF0, -0x74, 0xFE, 0xED, 0x80, 0x76, 0x38, 0xA4, 0x70, 0x76, 0xDE, 0xCF, 0x80, 0x78, 0x18, 0x86, 0x70, -0x78, 0xBE, 0xB1, 0x80, 0x79, 0xF8, 0x68, 0x70, 0x7A, 0x9E, 0x93, 0x80, 0x7B, 0xD8, 0x4A, 0x70, -0x7C, 0x7E, 0x75, 0x80, 0x7D, 0xB8, 0x2C, 0x70, 0x7E, 0x5E, 0x57, 0x80, 0x7F, 0x98, 0x0E, 0x70, -0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 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, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, -0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0x43, 0x44, 0x54, -0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, 0x00, 0x00, 0x01, - -/* Cuba */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0C, 0xAC, 0x62, 0xC2, 0x80, -0xB1, 0xD3, 0x94, 0x50, 0xB2, 0x74, 0x5D, 0x40, 0xC8, 0x5B, 0x66, 0xD0, 0xC8, 0xD3, 0x51, 0x40, -0xCA, 0x3B, 0x48, 0xD0, 0xCA, 0xBC, 0x6D, 0xC0, 0xCC, 0x24, 0x65, 0x50, 0xCC, 0x9C, 0x4F, 0xC0, -0xD1, 0xC4, 0x0B, 0x50, 0xD2, 0x3B, 0xF5, 0xC0, 0xD3, 0xA3, 0xED, 0x50, 0xD4, 0x1B, 0xD7, 0xC0, -0xF7, 0x60, 0x05, 0xD0, 0xF7, 0xFF, 0x7D, 0x40, 0xF9, 0x3D, 0x44, 0xD0, 0xF9, 0xE3, 0x53, 0xC0, -0xFA, 0xDB, 0x3B, 0xD0, 0xFB, 0xA7, 0x86, 0x40, 0xFC, 0xC5, 0xA9, 0xD0, 0xFD, 0x87, 0x68, 0x40, -0xFE, 0xB8, 0x00, 0xD0, 0xFF, 0xA7, 0xE3, 0xC0, 0x00, 0x97, 0xE2, 0xD0, 0x01, 0x87, 0xC5, 0xC0, -0x02, 0x77, 0xC4, 0xD0, 0x03, 0x70, 0xE2, 0x40, 0x04, 0x60, 0xE1, 0x50, 0x05, 0x35, 0x14, 0xC0, -0x06, 0x40, 0xC3, 0x50, 0x07, 0x16, 0x48, 0x40, 0x08, 0x20, 0xA5, 0x50, 0x08, 0xF7, 0x7B, 0xC0, -0x0A, 0x00, 0x87, 0x50, 0x0A, 0xF0, 0x6A, 0x40, 0x0B, 0xE0, 0x69, 0x50, 0x0C, 0xD9, 0x86, 0xC0, -0x0D, 0xC0, 0x4B, 0x50, 0x0E, 0xB9, 0x68, 0xC0, 0x0F, 0xB2, 0xA2, 0x50, 0x10, 0x7D, 0x9B, 0x40, -0x11, 0x51, 0xEA, 0xD0, 0x12, 0x66, 0xB7, 0xC0, 0x13, 0x31, 0xCC, 0xD0, 0x14, 0x46, 0x99, 0xC0, -0x15, 0x5B, 0x82, 0xD0, 0x16, 0x26, 0x7B, 0xC0, 0x17, 0x3B, 0x64, 0xD0, 0x18, 0x06, 0x5D, 0xC0, -0x19, 0x1B, 0x46, 0xD0, 0x19, 0xE6, 0x3F, 0xC0, 0x1A, 0xFB, 0x28, 0xD0, 0x1B, 0xCF, 0x5C, 0x40, -0x1C, 0xDB, 0x0A, 0xD0, 0x1D, 0xAF, 0x3E, 0x40, 0x1E, 0x7A, 0x53, 0x50, 0x1F, 0x8F, 0x20, 0x40, -0x20, 0x5A, 0x35, 0x50, 0x21, 0x6F, 0x02, 0x40, 0x22, 0x43, 0x51, 0xD0, 0x23, 0x4E, 0xE4, 0x40, -0x24, 0x23, 0x33, 0xD0, 0x25, 0x2E, 0xC6, 0x40, 0x26, 0x15, 0x8A, 0xD0, 0x27, 0x17, 0xE2, 0xC0, -0x27, 0xFE, 0xA7, 0x50, 0x28, 0xF7, 0xD2, 0xD0, 0x29, 0xDE, 0x89, 0x50, 0x2A, 0xD7, 0xB4, 0xD0, -0x2B, 0xBE, 0x6B, 0x50, 0x2C, 0xB7, 0x96, 0xD0, 0x2D, 0x9E, 0x4D, 0x50, 0x2E, 0x97, 0x78, 0xD0, -0x2F, 0x7E, 0x2F, 0x50, 0x30, 0x77, 0x5A, 0xD0, 0x31, 0x67, 0x4B, 0xD0, 0x32, 0x57, 0x3C, 0xD0, -0x33, 0x47, 0x2D, 0xD0, 0x34, 0x40, 0x59, 0x50, 0x35, 0x1D, 0xD5, 0x50, 0x36, 0x32, 0xB0, 0x50, -0x36, 0xFD, 0xB7, 0x50, 0x38, 0x1B, 0xCC, 0xD0, 0x38, 0xE6, 0xD3, 0xD0, 0x39, 0xFB, 0xAE, 0xD0, -0x3A, 0xC6, 0xB5, 0xD0, 0x3B, 0xDB, 0x90, 0xD0, 0x3C, 0xAF, 0xD2, 0x50, 0x3D, 0xBB, 0x72, 0xD0, -0x3E, 0x8F, 0xB4, 0x50, 0x3F, 0x9B, 0x54, 0xD0, 0x40, 0x6F, 0x96, 0x50, 0x45, 0x44, 0x35, 0x50, -0x46, 0x0F, 0x3C, 0x50, 0x47, 0x24, 0x17, 0x50, 0x47, 0xF8, 0x58, 0xD0, 0x49, 0x03, 0xF9, 0x50, -0x49, 0xD8, 0x3A, 0xD0, 0x4A, 0xE3, 0xDB, 0x50, 0x4B, 0xB8, 0x1C, 0xD0, 0x4C, 0xCC, 0xF7, 0xD0, -0x4D, 0x97, 0xFE, 0xD0, 0x4E, 0xAC, 0xD9, 0xD0, 0x4F, 0x77, 0xE0, 0xD0, 0x50, 0x8C, 0xBB, 0xD0, -0x51, 0x60, 0xFD, 0x50, 0x52, 0x6C, 0x9D, 0xD0, 0x53, 0x40, 0xDF, 0x50, 0x54, 0x4C, 0x7F, 0xD0, -0x55, 0x20, 0xC1, 0x50, 0x56, 0x2C, 0x61, 0xD0, 0x57, 0x00, 0xA3, 0x50, 0x58, 0x15, 0x7E, 0x50, -0x58, 0xE0, 0x85, 0x50, 0x59, 0xF5, 0x60, 0x50, 0x5A, 0xC0, 0x67, 0x50, 0x5B, 0xD5, 0x42, 0x50, -0x5C, 0xA9, 0x83, 0xD0, 0x5D, 0xB5, 0x24, 0x50, 0x5E, 0x89, 0x65, 0xD0, 0x5F, 0x95, 0x06, 0x50, -0x60, 0x69, 0x47, 0xD0, 0x61, 0x7E, 0x22, 0xD0, 0x62, 0x49, 0x29, 0xD0, 0x63, 0x5E, 0x04, 0xD0, -0x64, 0x29, 0x0B, 0xD0, 0x65, 0x3D, 0xE6, 0xD0, 0x66, 0x12, 0x28, 0x50, 0x67, 0x1D, 0xC8, 0xD0, -0x67, 0xF2, 0x0A, 0x50, 0x68, 0xFD, 0xAA, 0xD0, 0x69, 0xD1, 0xEC, 0x50, 0x6A, 0xDD, 0x8C, 0xD0, -0x6B, 0xB1, 0xCE, 0x50, 0x6C, 0xC6, 0xA9, 0x50, 0x6D, 0x91, 0xB0, 0x50, 0x6E, 0xA6, 0x8B, 0x50, -0x6F, 0x71, 0x92, 0x50, 0x70, 0x86, 0x6D, 0x50, 0x71, 0x5A, 0xAE, 0xD0, 0x72, 0x66, 0x4F, 0x50, -0x73, 0x3A, 0x90, 0xD0, 0x74, 0x46, 0x31, 0x50, 0x75, 0x1A, 0x72, 0xD0, 0x76, 0x2F, 0x4D, 0xD0, -0x76, 0xFA, 0x54, 0xD0, 0x78, 0x0F, 0x2F, 0xD0, 0x78, 0xDA, 0x36, 0xD0, 0x79, 0xEF, 0x11, 0xD0, -0x7A, 0xBA, 0x18, 0xD0, 0x7B, 0xCE, 0xF3, 0xD0, 0x7C, 0xA3, 0x35, 0x50, 0x7D, 0xAE, 0xD5, 0xD0, -0x7E, 0x83, 0x17, 0x50, 0x7F, 0x8E, 0xB7, 0xD0, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x01, -0x03, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0xFF, 0xFF, 0xB2, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x04, 0xFF, -0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, -0x04, 0x48, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, -0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* EET */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x0D, 0xA4, 0x63, 0x90, -0x0E, 0x8B, 0x1A, 0x10, 0x0F, 0x84, 0x45, 0x90, 0x10, 0x74, 0x36, 0x90, 0x11, 0x64, 0x27, 0x90, -0x12, 0x54, 0x18, 0x90, 0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, -0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, -0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, -0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, -0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, -0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, -0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, -0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, -0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, -0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, -0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, -0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, -0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, -0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, -0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, -0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, -0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, -0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, -0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, -0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, -0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, -0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, -0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, -0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, -0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, -0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, -0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, -0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, -0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, -0x7F, 0x8E, 0x7F, 0x90, 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, -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, 0x00, 0x01, 0x00, 0x00, -0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, -0x45, 0x54, 0x00, 0x01, 0x01, 0x01, 0x01, - -/* Egypt */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xAE, 0x00, 0x00, 0x00, 0x04, 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, -0xE8, 0xF4, 0x2D, 0x50, 0xEA, 0x0B, 0xB9, 0x60, 0xEA, 0xD5, 0x60, 0xD0, 0xEB, 0xEC, 0xFA, 0xF0, -0xEC, 0xB5, 0x6D, 0x00, 0xED, 0xCF, 0x7F, 0xF0, 0xEE, 0x97, 0xF2, 0x00, 0xEF, 0xB0, 0xB3, 0x70, -0xF0, 0x79, 0x25, 0x80, 0xF1, 0x91, 0xE6, 0xF0, 0xF2, 0x5A, 0x59, 0x00, 0xF3, 0x73, 0x1A, 0x70, -0xF4, 0x3B, 0x8C, 0x80, 0xF5, 0x55, 0x9F, 0x70, 0xF6, 0x1E, 0x11, 0x80, 0xF7, 0x36, 0xD2, 0xF0, -0xF7, 0xFF, 0x45, 0x00, 0xF9, 0x18, 0x06, 0x70, 0xF9, 0xE1, 0xCA, 0x00, 0xFA, 0xF9, 0x39, 0xF0, -0xFB, 0xC2, 0xFD, 0x80, 0xFC, 0xDB, 0xBE, 0xF0, 0xFD, 0xA5, 0x82, 0x80, 0xFE, 0xBC, 0xF2, 0x70, -0xFF, 0x86, 0xB6, 0x00, 0x00, 0x9E, 0x25, 0xF0, 0x01, 0x67, 0xE9, 0x80, 0x02, 0x7F, 0x59, 0x70, -0x03, 0x49, 0x1D, 0x00, 0x04, 0x61, 0xDE, 0x70, 0x05, 0x2B, 0xA2, 0x00, 0x06, 0x43, 0x11, 0xF0, -0x07, 0x0C, 0xD5, 0x80, 0x08, 0x24, 0x45, 0x70, 0x08, 0xEE, 0x09, 0x00, 0x0A, 0x05, 0x78, 0xF0, -0x0A, 0xCF, 0x3C, 0x80, 0x0B, 0xE7, 0xFD, 0xF0, 0x0C, 0xB1, 0xC1, 0x80, 0x0D, 0xC9, 0x31, 0x70, -0x0E, 0x92, 0xF5, 0x00, 0x0F, 0xAA, 0x64, 0xF0, 0x10, 0x74, 0x28, 0x80, 0x11, 0x8B, 0x98, 0x70, -0x12, 0x55, 0x5C, 0x00, 0x13, 0x6E, 0x1D, 0x70, 0x14, 0x37, 0xE1, 0x00, 0x15, 0x4F, 0x50, 0xF0, -0x16, 0x19, 0x14, 0x80, 0x17, 0xA0, 0x93, 0xF0, 0x17, 0xFA, 0x48, 0x00, 0x19, 0x70, 0xA3, 0xF0, -0x19, 0xDB, 0x7B, 0x80, 0x1A, 0xF4, 0x3C, 0xF0, 0x1B, 0xBE, 0x00, 0x80, 0x1C, 0xD5, 0x70, 0x70, -0x1D, 0x9F, 0x34, 0x00, 0x1E, 0xB6, 0xA3, 0xF0, 0x1F, 0x80, 0x67, 0x80, 0x20, 0x97, 0xD7, 0x70, -0x21, 0x61, 0x9B, 0x00, 0x22, 0x7A, 0x5C, 0x70, 0x23, 0x44, 0x20, 0x00, 0x24, 0x62, 0x27, 0x70, -0x25, 0x25, 0x53, 0x80, 0x26, 0x3C, 0xC3, 0x70, 0x27, 0x06, 0x87, 0x00, 0x28, 0x1D, 0xF6, 0xF0, -0x28, 0xE7, 0xBA, 0x80, 0x2A, 0x00, 0x7B, 0xF0, 0x2A, 0xCA, 0x3F, 0x80, 0x2B, 0xE1, 0xAF, 0x70, -0x2C, 0xAB, 0x73, 0x00, 0x2D, 0xC2, 0xE2, 0xF0, 0x2E, 0x8C, 0xA6, 0x80, 0x2F, 0xA0, 0x13, 0xE0, -0x30, 0x6B, 0x0C, 0xD0, 0x31, 0x7F, 0xF5, 0xE0, 0x32, 0x4A, 0xEE, 0xD0, 0x33, 0x5F, 0xD7, 0xE0, -0x34, 0x2A, 0xD0, 0xD0, 0x35, 0x3F, 0xB9, 0xE0, 0x36, 0x0A, 0xB2, 0xD0, 0x37, 0x28, 0xD6, 0x60, -0x37, 0xF3, 0xCF, 0x50, 0x39, 0x08, 0xB8, 0x60, 0x39, 0xD3, 0xB1, 0x50, 0x3A, 0xE8, 0x9A, 0x60, -0x3B, 0xB3, 0x93, 0x50, 0x3C, 0xC8, 0x7C, 0x60, 0x3D, 0x93, 0x75, 0x50, 0x3E, 0xA8, 0x5E, 0x60, -0x3F, 0x73, 0x57, 0x50, 0x40, 0x91, 0x7A, 0xE0, 0x41, 0x5C, 0x73, 0xD0, 0x42, 0x71, 0x5C, 0xE0, -0x43, 0x3C, 0x55, 0xD0, 0x44, 0x51, 0x3E, 0xE0, 0x45, 0x12, 0xFD, 0x50, 0x46, 0x31, 0x20, 0xE0, -0x46, 0xFC, 0x19, 0xD0, 0x48, 0x11, 0x02, 0xE0, 0x48, 0xDB, 0xFB, 0xD0, 0x49, 0xF0, 0xE4, 0xE0, -0x4A, 0xBB, 0xDD, 0xD0, 0x4B, 0xDA, 0x01, 0x60, 0x4C, 0xA4, 0xFA, 0x50, 0x4D, 0xB9, 0xE3, 0x60, -0x4E, 0x84, 0xDC, 0x50, 0x4F, 0x99, 0xC5, 0x60, 0x50, 0x64, 0xBE, 0x50, 0x51, 0x79, 0xA7, 0x60, -0x52, 0x44, 0xA0, 0x50, 0x53, 0x59, 0x89, 0x60, 0x54, 0x24, 0x82, 0x50, 0x55, 0x39, 0x6B, 0x60, -0x56, 0x04, 0x64, 0x50, 0x57, 0x22, 0x87, 0xE0, 0x57, 0xED, 0x80, 0xD0, 0x59, 0x02, 0x69, 0xE0, -0x59, 0xCD, 0x62, 0xD0, 0x5A, 0xE2, 0x4B, 0xE0, 0x5B, 0xAD, 0x44, 0xD0, 0x5C, 0xC2, 0x2D, 0xE0, -0x5D, 0x8D, 0x26, 0xD0, 0x5E, 0xA2, 0x0F, 0xE0, 0x5F, 0x6D, 0x08, 0xD0, 0x60, 0x8B, 0x2C, 0x60, -0x61, 0x56, 0x25, 0x50, 0x62, 0x6B, 0x0E, 0x60, 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, -0x70, 0x5E, 0x6F, 0xD0, 0x71, 0x73, 0x58, 0xE0, 0x72, 0x3E, 0x51, 0xD0, 0x73, 0x53, 0x3A, 0xE0, -0x74, 0x1E, 0x33, 0xD0, 0x75, 0x3C, 0x57, 0x60, 0x76, 0x07, 0x50, 0x50, 0x77, 0x1C, 0x39, 0x60, -0x77, 0xE7, 0x32, 0x50, 0x78, 0xFC, 0x1B, 0x60, 0x79, 0xC7, 0x14, 0x50, 0x7A, 0xDB, 0xFD, 0x60, -0x7B, 0xA6, 0xF6, 0x50, 0x7C, 0xBB, 0xDF, 0x60, 0x7D, 0x86, 0xD8, 0x50, 0x7E, 0x9B, 0xC1, 0x60, -0x7F, 0x66, 0xBA, 0x50, 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, -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, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 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, - -/* Eire */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xE5, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x10, 0x9B, 0x26, 0xB3, 0x91, -0x9B, 0xD6, 0x0B, 0x11, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0, -0x9F, 0x97, 0x1A, 0xA0, 0xA0, 0x85, 0xBA, 0x20, 0xA1, 0x76, 0xFC, 0xA0, 0xA2, 0x65, 0x9C, 0x20, -0xA3, 0x7B, 0xC8, 0xA0, 0xA4, 0x4E, 0xB8, 0xA0, 0xA5, 0x3F, 0xFB, 0x20, 0xA5, 0x94, 0x3F, 0x00, -0xA6, 0x25, 0x60, 0x20, 0xA7, 0x27, 0xC6, 0x20, 0xA8, 0x2A, 0x2C, 0x20, 0xA8, 0xEB, 0xF8, 0xA0, -0xAA, 0x00, 0xD3, 0xA0, 0xAA, 0xD5, 0x15, 0x20, 0xAB, 0xE9, 0xF0, 0x20, 0xAC, 0xC7, 0x6C, 0x20, -0xAD, 0xC9, 0xD2, 0x20, 0xAE, 0xA7, 0x4E, 0x20, 0xAF, 0xA0, 0x79, 0xA0, 0xB0, 0x87, 0x30, 0x20, -0xB1, 0x92, 0xD0, 0xA0, 0xB2, 0x70, 0x4C, 0xA0, 0xB3, 0x72, 0xB2, 0xA0, 0xB4, 0x50, 0x2E, 0xA0, -0xB5, 0x49, 0x5A, 0x20, 0xB6, 0x30, 0x10, 0xA0, 0xB7, 0x32, 0x76, 0xA0, 0xB8, 0x0F, 0xF2, 0xA0, -0xB9, 0x12, 0x58, 0xA0, 0xB9, 0xEF, 0xD4, 0xA0, 0xBA, 0xE9, 0x00, 0x20, 0xBB, 0xD8, 0xF1, 0x20, -0xBC, 0xDB, 0x57, 0x20, 0xBD, 0xB8, 0xD3, 0x20, 0xBE, 0xB1, 0xFE, 0xA0, 0xBF, 0x98, 0xB5, 0x20, -0xC0, 0x9B, 0x1B, 0x20, 0xC1, 0x78, 0x97, 0x20, 0xC2, 0x7A, 0xFD, 0x20, 0xC3, 0x58, 0x79, 0x20, -0xC4, 0x51, 0xA4, 0xA0, 0xC5, 0x38, 0x5B, 0x20, 0xC6, 0x3A, 0xC1, 0x20, 0xC7, 0x58, 0xD6, 0xA0, -0xC7, 0xDA, 0x09, 0xA0, 0xD4, 0x49, 0xD2, 0x10, 0xD5, 0x1E, 0x21, 0xA0, 0xD6, 0x4E, 0x9E, 0x10, -0xD7, 0x2C, 0x28, 0x20, 0xD8, 0x2E, 0x8E, 0x20, 0xD8, 0xF9, 0x95, 0x20, 0xDA, 0x0E, 0x70, 0x20, -0xDA, 0xEB, 0xEC, 0x20, 0xDB, 0xE5, 0x17, 0xA0, 0xDC, 0xCB, 0xCE, 0x20, 0xDD, 0xC4, 0xF9, 0xA0, -0xDE, 0xB4, 0xEA, 0xA0, 0xDF, 0xAE, 0x16, 0x20, 0xE0, 0x94, 0xCC, 0xA0, 0xE1, 0x72, 0x48, 0xA0, -0xE2, 0x6B, 0x74, 0x20, 0xE3, 0x52, 0x2A, 0xA0, 0xE4, 0x54, 0x90, 0xA0, 0xE5, 0x32, 0x0C, 0xA0, -0xE6, 0x3D, 0xAD, 0x20, 0xE7, 0x1B, 0x29, 0x20, 0xE8, 0x14, 0x54, 0xA0, 0xE8, 0xFB, 0x0B, 0x20, -0xE9, 0xFD, 0x71, 0x20, 0xEA, 0xDA, 0xED, 0x20, 0xEB, 0xDD, 0x53, 0x20, 0xEC, 0xBA, 0xCF, 0x20, -0xED, 0xB3, 0xFA, 0xA0, 0xEE, 0x9A, 0xB1, 0x20, 0xEF, 0x81, 0x67, 0xA0, 0xF0, 0x9F, 0x7D, 0x20, -0xF1, 0x61, 0x49, 0xA0, 0xF2, 0x7F, 0x5F, 0x20, 0xF3, 0x4A, 0x66, 0x20, 0xF4, 0x5F, 0x41, 0x20, -0xF5, 0x21, 0x0D, 0xA0, 0xF6, 0x3F, 0x23, 0x20, 0xF7, 0x00, 0xEF, 0xA0, 0xF8, 0x1F, 0x05, 0x20, -0xF8, 0xE0, 0xD1, 0xA0, 0xF9, 0xFE, 0xE7, 0x20, 0xFA, 0xC0, 0xB3, 0xA0, 0xFB, 0xE8, 0x03, 0xA0, -0xFC, 0x7B, 0xAB, 0xA0, 0xFD, 0xC7, 0xBB, 0x70, 0x03, 0x70, 0xC6, 0x20, 0x04, 0x29, 0x58, 0x20, -0x05, 0x50, 0xA8, 0x20, 0x06, 0x09, 0x3A, 0x20, 0x07, 0x30, 0x8A, 0x20, 0x07, 0xE9, 0x1C, 0x20, -0x09, 0x10, 0x6C, 0x20, 0x09, 0xC8, 0xFE, 0x20, 0x0A, 0xF0, 0x4E, 0x20, 0x0B, 0xB2, 0x1A, 0xA0, -0x0C, 0xD0, 0x30, 0x20, 0x0D, 0x91, 0xFC, 0xA0, 0x0E, 0xB0, 0x12, 0x20, 0x0F, 0x71, 0xDE, 0xA0, -0x10, 0x99, 0x2E, 0xA0, 0x11, 0x51, 0xC0, 0xA0, 0x12, 0x79, 0x10, 0xA0, 0x13, 0x31, 0xA2, 0xA0, -0x14, 0x58, 0xF2, 0xA0, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x38, 0xC6, 0x90, 0x17, 0x03, 0xCD, 0x90, -0x18, 0x18, 0xA8, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xF8, 0x8A, 0x90, 0x1A, 0xC3, 0x91, 0x90, -0x1B, 0xE1, 0xA7, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0xC1, 0x89, 0x10, 0x1E, 0x8C, 0x90, 0x10, -0x1F, 0xA1, 0x6B, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x81, 0x4D, 0x10, 0x22, 0x4C, 0x54, 0x10, -0x23, 0x61, 0x2F, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x4A, 0x4B, 0x90, 0x26, 0x0C, 0x18, 0x10, -0x27, 0x2A, 0x2D, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x29, 0x0A, 0x0F, 0x90, 0x29, 0xD5, 0x16, 0x90, -0x2A, 0xE9, 0xF1, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xC9, 0xD3, 0x90, 0x2D, 0x94, 0xDA, 0x90, -0x2E, 0xA9, 0xB5, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x89, 0x97, 0x90, 0x30, 0xE7, 0x24, 0x00, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x06, 0x05, 0x06, 0x05, 0x06, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x07, 0x09, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x05, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0xFF, 0xFF, 0xFA, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1F, 0x01, -0x04, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0E, -0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, -0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -0x0C, 0x44, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, -0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, - -/* EST */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, -0x00, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, - -/* EST5EDT */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x1E, 0x70, -0x9F, 0xBA, 0xEB, 0x60, 0xA0, 0x86, 0x00, 0x70, 0xA1, 0x9A, 0xCD, 0x60, 0xCB, 0x88, 0xF0, 0x70, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xFB, 0xE0, 0xFA, 0xF8, 0x58, 0xF0, 0xFB, 0xE8, 0x3B, 0xE0, -0xFC, 0xD8, 0x3A, 0xF0, 0xFD, 0xC8, 0x1D, 0xE0, 0xFE, 0xB8, 0x1C, 0xF0, 0xFF, 0xA7, 0xFF, 0xE0, -0x00, 0x97, 0xFE, 0xF0, 0x01, 0x87, 0xE1, 0xE0, 0x02, 0x77, 0xE0, 0xF0, 0x03, 0x70, 0xFE, 0x60, -0x04, 0x60, 0xFD, 0x70, 0x05, 0x50, 0xE0, 0x60, 0x06, 0x40, 0xDF, 0x70, 0x07, 0x30, 0xC2, 0x60, -0x07, 0x8D, 0x19, 0x70, 0x09, 0x10, 0xA4, 0x60, 0x09, 0xAD, 0x94, 0xF0, 0x0A, 0xF0, 0x86, 0x60, -0x0B, 0xE0, 0x85, 0x70, 0x0C, 0xD9, 0xA2, 0xE0, 0x0D, 0xC0, 0x67, 0x70, 0x0E, 0xB9, 0x84, 0xE0, -0x0F, 0xA9, 0x83, 0xF0, 0x10, 0x99, 0x66, 0xE0, 0x11, 0x89, 0x65, 0xF0, 0x12, 0x79, 0x48, 0xE0, -0x13, 0x69, 0x47, 0xF0, 0x14, 0x59, 0x2A, 0xE0, 0x15, 0x49, 0x29, 0xF0, 0x16, 0x39, 0x0C, 0xE0, -0x17, 0x29, 0x0B, 0xF0, 0x18, 0x22, 0x29, 0x60, 0x19, 0x08, 0xED, 0xF0, 0x1A, 0x02, 0x0B, 0x60, -0x1A, 0xF2, 0x0A, 0x70, 0x1B, 0xE1, 0xED, 0x60, 0x1C, 0xD1, 0xEC, 0x70, 0x1D, 0xC1, 0xCF, 0x60, -0x1E, 0xB1, 0xCE, 0x70, 0x1F, 0xA1, 0xB1, 0x60, 0x20, 0x76, 0x00, 0xF0, 0x21, 0x81, 0x93, 0x60, -0x22, 0x55, 0xE2, 0xF0, 0x23, 0x6A, 0xAF, 0xE0, 0x24, 0x35, 0xC4, 0xF0, 0x25, 0x4A, 0x91, 0xE0, -0x26, 0x15, 0xA6, 0xF0, 0x27, 0x2A, 0x73, 0xE0, 0x27, 0xFE, 0xC3, 0x70, 0x29, 0x0A, 0x55, 0xE0, -0x29, 0xDE, 0xA5, 0x70, 0x2A, 0xEA, 0x37, 0xE0, 0x2B, 0xBE, 0x87, 0x70, 0x2C, 0xD3, 0x54, 0x60, -0x2D, 0x9E, 0x69, 0x70, 0x2E, 0xB3, 0x36, 0x60, 0x2F, 0x7E, 0x4B, 0x70, 0x30, 0x93, 0x18, 0x60, -0x31, 0x67, 0x67, 0xF0, 0x32, 0x72, 0xFA, 0x60, 0x33, 0x47, 0x49, 0xF0, 0x34, 0x52, 0xDC, 0x60, -0x35, 0x27, 0x2B, 0xF0, 0x36, 0x32, 0xBE, 0x60, 0x37, 0x07, 0x0D, 0xF0, 0x38, 0x1B, 0xDA, 0xE0, -0x38, 0xE6, 0xEF, 0xF0, 0x39, 0xFB, 0xBC, 0xE0, 0x3A, 0xC6, 0xD1, 0xF0, 0x3B, 0xDB, 0x9E, 0xE0, -0x3C, 0xAF, 0xEE, 0x70, 0x3D, 0xBB, 0x80, 0xE0, 0x3E, 0x8F, 0xD0, 0x70, 0x3F, 0x9B, 0x62, 0xE0, -0x40, 0x6F, 0xB2, 0x70, 0x41, 0x84, 0x7F, 0x60, 0x42, 0x4F, 0x94, 0x70, 0x43, 0x64, 0x61, 0x60, -0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x43, 0x60, 0x45, 0xF3, 0xA8, 0xF0, 0x47, 0x2D, 0x5F, 0xE0, -0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x41, 0xE0, 0x49, 0xB3, 0x6C, 0xF0, 0x4A, 0xED, 0x23, 0xE0, -0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x40, 0x60, 0x4D, 0x7C, 0x6B, 0x70, 0x4E, 0xB6, 0x22, 0x60, -0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x04, 0x60, 0x51, 0x3C, 0x2F, 0x70, 0x52, 0x75, 0xE6, 0x60, -0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xC8, 0x60, 0x54, 0xFB, 0xF3, 0x70, 0x56, 0x35, 0xAA, 0x60, -0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, 0x58, 0xC4, 0xF1, 0xF0, 0x59, 0xFE, 0xA8, 0xE0, -0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, 0x5C, 0x84, 0xB5, 0xF0, 0x5D, 0xBE, 0x6C, 0xE0, -0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, 0x60, 0x4D, 0xB4, 0x70, 0x61, 0x87, 0x6B, 0x60, -0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, 0x64, 0x0D, 0x78, 0x70, 0x65, 0x47, 0x2F, 0x60, -0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, 0x67, 0xCD, 0x3C, 0x70, 0x69, 0x06, 0xF3, 0x60, -0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, 0x6B, 0x96, 0x3A, 0xF0, 0x6C, 0xCF, 0xF1, 0xE0, -0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, 0x6F, 0x55, 0xFE, 0xF0, 0x70, 0x8F, 0xB5, 0xE0, -0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, 0x73, 0x15, 0xC2, 0xF0, 0x74, 0x4F, 0x79, 0xE0, -0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, 0x76, 0xDE, 0xC1, 0x70, 0x78, 0x18, 0x78, 0x60, -0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, 0x7A, 0x9E, 0x85, 0x70, 0x7B, 0xD8, 0x3C, 0x60, -0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, 0x7E, 0x5E, 0x49, 0x70, 0x7F, 0x98, 0x00, 0x60, -0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 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, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, -0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0x45, 0x44, 0x54, -0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, 0x00, 0x00, 0x01, - -/* Etc/GMT */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, - -/* Etc/GMT0 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, - -/* Etc/GMT-0 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, - -/* Etc/GMT+0 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, - -/* Etc/GMT-1 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0E, 0x10, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x31, 0x00, 0x00, 0x00, - -/* Etc/GMT+1 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0xF1, 0xF0, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x31, 0x00, 0x00, 0x00, - -/* Etc/GMT-10 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x8C, 0xA0, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x31, 0x30, 0x00, 0x00, 0x00, - -/* Etc/GMT+10 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0x73, 0x60, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x31, 0x30, 0x00, 0x00, 0x00, - -/* Etc/GMT-11 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x9A, 0xB0, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x31, 0x31, 0x00, 0x00, 0x00, - -/* Etc/GMT+11 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0x65, 0x50, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x31, 0x31, 0x00, 0x00, 0x00, - -/* Etc/GMT-12 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0xA8, 0xC0, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x31, 0x32, 0x00, 0x00, 0x00, - -/* Etc/GMT+12 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0x57, 0x40, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x31, 0x32, 0x00, 0x00, 0x00, - -/* Etc/GMT-13 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0xB6, 0xD0, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x31, 0x33, 0x00, 0x00, 0x00, - -/* Etc/GMT-14 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0xC4, 0xE0, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x31, 0x34, 0x00, 0x00, 0x00, - -/* Etc/GMT-2 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x1C, 0x20, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x32, 0x00, 0x00, 0x00, - -/* Etc/GMT+2 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0xE3, 0xE0, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x32, 0x00, 0x00, 0x00, - -/* Etc/GMT-3 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x2A, 0x30, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x33, 0x00, 0x00, 0x00, - -/* Etc/GMT+3 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0xD5, 0xD0, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x33, 0x00, 0x00, 0x00, - -/* Etc/GMT-4 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x38, 0x40, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x34, 0x00, 0x00, 0x00, - -/* Etc/GMT+4 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0xC7, 0xC0, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x34, 0x00, 0x00, 0x00, - -/* Etc/GMT-5 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x46, 0x50, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x35, 0x00, 0x00, 0x00, - -/* Etc/GMT+5 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0xB9, 0xB0, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x35, 0x00, 0x00, 0x00, - -/* Etc/GMT-6 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x54, 0x60, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x36, 0x00, 0x00, 0x00, - -/* Etc/GMT+6 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0xAB, 0xA0, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x36, 0x00, 0x00, 0x00, - -/* Etc/GMT-7 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x62, 0x70, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x37, 0x00, 0x00, 0x00, - -/* Etc/GMT+7 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0x9D, 0x90, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x37, 0x00, 0x00, 0x00, - -/* Etc/GMT-8 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x70, 0x80, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x38, 0x00, 0x00, 0x00, - -/* Etc/GMT+8 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0x8F, 0x80, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x38, 0x00, 0x00, 0x00, - -/* Etc/GMT-9 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x7E, 0x90, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2D, 0x39, 0x00, 0x00, 0x00, - -/* Etc/GMT+9 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0x81, 0x70, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x2B, 0x39, 0x00, 0x00, 0x00, - -/* Etc/Greenwich */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, - -/* Etc/UCT */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x55, 0x43, 0x54, 0x00, 0x00, 0x00, - -/* Etc/Universal */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, - -/* Etc/UTC */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, - -/* Etc/Zulu */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, - -/* Europe/Amsterdam */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 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, 0xB4, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x1A, 0x9B, 0x0C, 0x2E, 0xEC, -0x9B, 0xD5, 0xD6, 0x5C, 0x9C, 0xD9, 0xB8, 0x0C, 0x9D, 0xA4, 0xBF, 0x0C, 0x9E, 0xA7, 0x25, 0x0C, -0x9F, 0x97, 0x16, 0x0C, 0xA0, 0x90, 0x41, 0x8C, 0xA1, 0x76, 0xF8, 0x0C, 0xA2, 0x70, 0x23, 0x8C, -0xA3, 0x56, 0xDA, 0x0C, 0xA4, 0x50, 0x05, 0x8C, 0xA5, 0x36, 0xBC, 0x0C, 0xA6, 0x25, 0x5B, 0x8C, -0xA7, 0x27, 0xC1, 0x8C, 0xA8, 0x5E, 0xE3, 0x8C, 0xA9, 0x07, 0xA3, 0x8C, 0xA9, 0xEE, 0x5A, 0x0C, -0xAA, 0xE7, 0x85, 0x8C, 0xAC, 0x27, 0xE2, 0x0C, 0xAC, 0xC7, 0x67, 0x8C, 0xAD, 0xED, 0x66, 0x0C, -0xAE, 0xA7, 0x49, 0x8C, 0xAF, 0xCE, 0x99, 0x8C, 0xB0, 0x87, 0x2B, 0x8C, 0xB1, 0xB1, 0x1E, 0x8C, -0xB2, 0x70, 0x48, 0x0C, 0xB3, 0x92, 0x52, 0x0C, 0xB4, 0x50, 0x2A, 0x0C, 0xB5, 0x73, 0x85, 0x8C, -0xB6, 0x30, 0x0C, 0x0C, 0xB7, 0x54, 0xB9, 0x0C, 0xB8, 0x0F, 0xEE, 0x0C, 0xB9, 0x40, 0x78, 0x8C, -0xB9, 0xEF, 0xD0, 0x0C, 0xBB, 0x18, 0x71, 0x8C, 0xBB, 0xD8, 0xEC, 0x8C, 0xBC, 0xF9, 0xA5, 0x0C, -0xBD, 0xB8, 0xCE, 0x8C, 0xBE, 0xDA, 0xD8, 0x8C, 0xBF, 0x98, 0xB0, 0x8C, 0xC0, 0xBD, 0x5D, 0x8C, -0xC1, 0x78, 0x92, 0x8C, 0xC2, 0xA7, 0xCB, 0x8C, 0xC2, 0xDC, 0x5D, 0x5C, 0xC3, 0x58, 0x74, 0x70, -0xC4, 0x7F, 0xC4, 0x70, 0xC5, 0x38, 0x56, 0x70, 0xC6, 0x60, 0xF7, 0xF0, 0xC7, 0x21, 0x72, 0xF0, -0xC8, 0x44, 0xB2, 0x50, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, -0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, 0xD1, 0x72, 0x16, 0x10, 0xD2, 0x4E, 0x40, 0x90, -0x0D, 0x2A, 0xFD, 0x70, 0x0D, 0xA4, 0x63, 0x90, 0x0E, 0x8B, 0x1A, 0x10, 0x0F, 0x84, 0x45, 0x90, -0x10, 0x74, 0x36, 0x90, 0x11, 0x64, 0x27, 0x90, 0x12, 0x54, 0x18, 0x90, 0x13, 0x4D, 0x44, 0x10, -0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, -0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, -0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, -0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, -0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, -0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, -0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, -0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, -0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, -0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, -0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, -0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, -0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, -0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, -0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, -0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, -0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, -0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, -0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, -0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, -0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, -0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, -0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, -0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, -0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, -0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, -0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, -0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, -0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 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, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x06, 0x04, 0x05, 0x04, 0x05, 0x04, 0x09, 0x07, 0x08, -0x07, 0x08, 0x07, 0x08, 0x07, 0x0C, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x00, 0x00, 0x12, 0xA4, 0x01, 0x00, 0x00, 0x00, 0x04, 0x94, 0x00, 0x04, 0x00, 0x00, 0x12, 0xA4, -0x01, 0x00, 0x00, 0x00, 0x04, 0x94, 0x00, 0x04, 0x00, 0x00, 0x04, 0xB0, 0x00, 0x08, 0x00, 0x00, -0x12, 0xC0, 0x01, 0x0C, 0x00, 0x00, 0x12, 0xC0, 0x01, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x11, -0x00, 0x00, 0x1C, 0x20, 0x01, 0x15, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x15, 0x00, 0x00, 0x1C, 0x20, -0x01, 0x15, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x11, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x11, 0x4E, 0x53, -0x54, 0x00, 0x41, 0x4D, 0x54, 0x00, 0x4E, 0x45, 0x54, 0x00, 0x4E, 0x45, 0x53, 0x54, 0x00, 0x43, -0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, -0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, -0x01, 0x00, - -/* Europe/Andorra */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0D, 0xD4, 0x41, 0xDB, 0x00, -0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, -0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, -0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, -0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, -0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, -0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, -0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, -0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, -0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, -0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, -0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, -0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x57, 0x45, 0x54, 0x00, 0x43, -0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, - - -/* Europe/Athens */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x16, 0x9B, 0x80, 0x21, 0x80, -0xB9, 0x7C, 0xE9, 0xE0, 0xB9, 0xC6, 0xAF, 0xD0, 0xC9, 0xF2, 0x63, 0xE0, 0xCA, 0x10, 0xA8, 0x50, -0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xAA, 0x4C, 0xF0, 0xCE, 0xA2, 0x18, 0xE0, 0xCF, 0x93, 0x69, 0x70, -0xDF, 0x13, 0x9E, 0x60, 0xDF, 0xB7, 0x0A, 0x50, 0x09, 0xEC, 0x5E, 0x60, 0x0B, 0x18, 0xF4, 0x60, -0x0B, 0xCD, 0xAE, 0x00, 0x0C, 0xBD, 0x9F, 0x00, 0x0D, 0xA4, 0x55, 0x80, 0x0E, 0x8C, 0x5D, 0x80, -0x0F, 0x84, 0x37, 0x80, 0x10, 0x6A, 0xFC, 0x10, 0x11, 0x64, 0x7B, 0xF0, 0x12, 0x52, 0xAA, 0xF0, -0x13, 0x46, 0x82, 0x60, 0x14, 0x33, 0xC2, 0x50, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x02, 0x01, 0x02, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x02, 0x01, 0x02, 0x01, 0x02, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, -0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, -0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, -0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, -0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, -0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, -0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, -0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x00, 0x00, 0x16, 0x3C, 0x00, 0x00, 0x00, -0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x00, -0x0D, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, -0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x41, -0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, -0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Belfast */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xF2, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0D, 0x9B, 0x26, 0xAD, 0xA0, -0x9B, 0xD6, 0x05, 0x20, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0, -0x9F, 0x97, 0x1A, 0xA0, 0xA0, 0x85, 0xBA, 0x20, 0xA1, 0x76, 0xFC, 0xA0, 0xA2, 0x65, 0x9C, 0x20, -0xA3, 0x7B, 0xC8, 0xA0, 0xA4, 0x4E, 0xB8, 0xA0, 0xA5, 0x3F, 0xFB, 0x20, 0xA6, 0x25, 0x60, 0x20, -0xA7, 0x27, 0xC6, 0x20, 0xA8, 0x2A, 0x2C, 0x20, 0xA8, 0xEB, 0xF8, 0xA0, 0xAA, 0x00, 0xD3, 0xA0, -0xAA, 0xD5, 0x15, 0x20, 0xAB, 0xE9, 0xF0, 0x20, 0xAC, 0xC7, 0x6C, 0x20, 0xAD, 0xC9, 0xD2, 0x20, -0xAE, 0xA7, 0x4E, 0x20, 0xAF, 0xA0, 0x79, 0xA0, 0xB0, 0x87, 0x30, 0x20, 0xB1, 0x92, 0xD0, 0xA0, -0xB2, 0x70, 0x4C, 0xA0, 0xB3, 0x72, 0xB2, 0xA0, 0xB4, 0x50, 0x2E, 0xA0, 0xB5, 0x49, 0x5A, 0x20, -0xB6, 0x30, 0x10, 0xA0, 0xB7, 0x32, 0x76, 0xA0, 0xB8, 0x0F, 0xF2, 0xA0, 0xB9, 0x12, 0x58, 0xA0, -0xB9, 0xEF, 0xD4, 0xA0, 0xBA, 0xE9, 0x00, 0x20, 0xBB, 0xD8, 0xF1, 0x20, 0xBC, 0xDB, 0x57, 0x20, -0xBD, 0xB8, 0xD3, 0x20, 0xBE, 0xB1, 0xFE, 0xA0, 0xBF, 0x98, 0xB5, 0x20, 0xC0, 0x9B, 0x1B, 0x20, -0xC1, 0x78, 0x97, 0x20, 0xC2, 0x7A, 0xFD, 0x20, 0xC3, 0x58, 0x79, 0x20, 0xC4, 0x51, 0xA4, 0xA0, -0xC5, 0x38, 0x5B, 0x20, 0xC6, 0x3A, 0xC1, 0x20, 0xC7, 0x58, 0xD6, 0xA0, 0xC7, 0xDA, 0x09, 0xA0, -0xCA, 0x16, 0x26, 0x90, 0xCA, 0x97, 0x59, 0x90, 0xCB, 0xD1, 0x1E, 0x90, 0xCC, 0x77, 0x3B, 0x90, -0xCD, 0xB1, 0x00, 0x90, 0xCE, 0x60, 0x58, 0x10, 0xCF, 0x90, 0xE2, 0x90, 0xD0, 0x6E, 0x5E, 0x90, -0xD1, 0x72, 0x16, 0x10, 0xD1, 0xFB, 0x32, 0x10, 0xD2, 0x69, 0xFE, 0x20, 0xD3, 0x63, 0x29, 0xA0, -0xD4, 0x49, 0xE0, 0x20, 0xD5, 0x1E, 0x21, 0xA0, 0xD5, 0x42, 0xFD, 0x90, 0xD5, 0xDF, 0xE0, 0x10, -0xD6, 0x4E, 0xAC, 0x20, 0xD6, 0xFE, 0x03, 0xA0, 0xD8, 0x2E, 0x8E, 0x20, 0xD8, 0xF9, 0x95, 0x20, -0xDA, 0x0E, 0x70, 0x20, 0xDA, 0xEB, 0xEC, 0x20, 0xDB, 0xE5, 0x17, 0xA0, 0xDC, 0xCB, 0xCE, 0x20, -0xDD, 0xC4, 0xF9, 0xA0, 0xDE, 0xB4, 0xEA, 0xA0, 0xDF, 0xAE, 0x16, 0x20, 0xE0, 0x94, 0xCC, 0xA0, -0xE1, 0x72, 0x48, 0xA0, 0xE2, 0x6B, 0x74, 0x20, 0xE3, 0x52, 0x2A, 0xA0, 0xE4, 0x54, 0x90, 0xA0, -0xE5, 0x32, 0x0C, 0xA0, 0xE6, 0x3D, 0xAD, 0x20, 0xE7, 0x1B, 0x29, 0x20, 0xE8, 0x14, 0x54, 0xA0, -0xE8, 0xFB, 0x0B, 0x20, 0xE9, 0xFD, 0x71, 0x20, 0xEA, 0xDA, 0xED, 0x20, 0xEB, 0xDD, 0x53, 0x20, -0xEC, 0xBA, 0xCF, 0x20, 0xED, 0xB3, 0xFA, 0xA0, 0xEE, 0x9A, 0xB1, 0x20, 0xEF, 0x81, 0x67, 0xA0, -0xF0, 0x9F, 0x7D, 0x20, 0xF1, 0x61, 0x49, 0xA0, 0xF2, 0x7F, 0x5F, 0x20, 0xF3, 0x4A, 0x66, 0x20, -0xF4, 0x5F, 0x41, 0x20, 0xF5, 0x21, 0x0D, 0xA0, 0xF6, 0x3F, 0x23, 0x20, 0xF7, 0x00, 0xEF, 0xA0, -0xF8, 0x1F, 0x05, 0x20, 0xF8, 0xE0, 0xD1, 0xA0, 0xF9, 0xFE, 0xE7, 0x20, 0xFA, 0xC0, 0xB3, 0xA0, -0xFB, 0xE8, 0x03, 0xA0, 0xFC, 0x7B, 0xAB, 0xA0, 0xFD, 0xC7, 0xBB, 0x70, 0x03, 0x70, 0xC6, 0x20, -0x04, 0x29, 0x58, 0x20, 0x05, 0x50, 0xA8, 0x20, 0x06, 0x09, 0x3A, 0x20, 0x07, 0x30, 0x8A, 0x20, -0x07, 0xE9, 0x1C, 0x20, 0x09, 0x10, 0x6C, 0x20, 0x09, 0xC8, 0xFE, 0x20, 0x0A, 0xF0, 0x4E, 0x20, -0x0B, 0xB2, 0x1A, 0xA0, 0x0C, 0xD0, 0x30, 0x20, 0x0D, 0x91, 0xFC, 0xA0, 0x0E, 0xB0, 0x12, 0x20, -0x0F, 0x71, 0xDE, 0xA0, 0x10, 0x99, 0x2E, 0xA0, 0x11, 0x51, 0xC0, 0xA0, 0x12, 0x79, 0x10, 0xA0, -0x13, 0x31, 0xA2, 0xA0, 0x14, 0x58, 0xF2, 0xA0, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x38, 0xC6, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x18, 0x18, 0xA8, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xF8, 0x8A, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xE1, 0xA7, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0xC1, 0x89, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0xA1, 0x6B, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x81, 0x4D, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x61, 0x2F, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x4A, 0x4B, 0x90, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x2A, 0x2D, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x29, 0x0A, 0x0F, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xE9, 0xF1, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xC9, 0xD3, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0xA9, 0xB5, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x89, 0x97, 0x90, -0x30, 0xE7, 0x24, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, -0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, -0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, -0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, -0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, -0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, -0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, -0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, -0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, -0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, -0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, -0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, -0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, -0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, -0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, -0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, -0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, -0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, -0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, -0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, -0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, -0x7F, 0x8E, 0x7F, 0x90, 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, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, -0x00, 0x01, 0x00, 0x02, 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, 0x03, -0x05, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x06, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, -0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, -0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x01, 0x01, 0x01, -0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, - -/* Europe/Belgrade */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x02, 0x35, 0xE0, -0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, -0xD0, 0x82, 0x25, 0x10, 0xD1, 0xA1, 0x8C, 0x10, 0xD2, 0x4E, 0x40, 0x90, 0x18, 0x45, 0x5F, 0x70, -0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, -0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, -0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, -0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, -0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, -0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, -0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, -0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, -0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, -0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, -0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, -0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, -0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, -0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, -0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, -0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Berlin */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0E, 0x9B, 0x0C, 0x17, 0x60, -0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, 0x9E, 0xB9, 0x90, 0x90, -0x9F, 0x84, 0x97, 0x90, 0xC8, 0x09, 0x71, 0x90, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, 0xD1, 0x72, 0x16, 0x10, -0xD1, 0xB6, 0x96, 0x00, 0xD2, 0x58, 0xBE, 0x80, 0xD2, 0xA1, 0x4F, 0x10, 0xD3, 0x63, 0x1B, 0x90, -0xD4, 0x4B, 0x23, 0x90, 0xD5, 0x39, 0xC3, 0x10, 0xD5, 0x67, 0xE7, 0x90, 0xD5, 0xA8, 0x73, 0x00, -0xD6, 0x29, 0xB4, 0x10, 0xD7, 0x2C, 0x1A, 0x10, 0xD8, 0x09, 0x96, 0x10, 0xD9, 0x02, 0xC1, 0x90, -0xD9, 0xE9, 0x78, 0x10, 0x12, 0xCE, 0x97, 0xF0, 0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, -0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, -0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, -0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, -0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, -0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, -0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, -0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, -0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, -0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, -0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, -0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, -0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, -0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x00, 0x03, 0x02, 0x03, 0x02, 0x05, 0x00, 0x03, 0x02, 0x03, -0x02, 0x03, 0x01, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, -0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, -0x00, 0x2A, 0x30, 0x01, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x01, -0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, -0x43, 0x45, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Bratislava */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x0C, 0x17, 0x60, -0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, 0x9E, 0xB9, 0x90, 0x90, -0x9F, 0x84, 0x97, 0x90, 0xC8, 0x09, 0x71, 0x90, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x6E, 0x5E, 0x90, 0xD1, 0x79, 0xFF, 0x10, -0xD2, 0xA1, 0x4F, 0x10, 0xD3, 0x80, 0x1C, 0x90, 0xD4, 0x49, 0xD2, 0x10, 0xD5, 0x4C, 0x38, 0x10, -0xD6, 0x29, 0xB4, 0x10, 0xD7, 0x2C, 0x1A, 0x10, 0xD8, 0x09, 0x96, 0x10, 0xD9, 0x01, 0x70, 0x10, -0xD9, 0xE9, 0x78, 0x10, 0x10, 0xED, 0x64, 0x70, 0x11, 0x64, 0x27, 0x90, 0x12, 0x54, 0x18, 0x90, -0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x1C, -0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, -0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, -0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, -0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Brussels */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xB9, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x12, 0x98, 0x44, 0x49, 0x80, -0x9B, 0x0C, 0x25, 0x70, 0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, -0x9E, 0xB9, 0x90, 0x90, 0x9F, 0x84, 0x97, 0x90, 0x9F, 0xCE, 0xF8, 0x30, 0xA0, 0x60, 0xA5, 0xF0, -0xA1, 0x7E, 0xBB, 0x70, 0xA2, 0x2E, 0x12, 0xF0, 0xA3, 0x7A, 0x4C, 0xF0, 0xA4, 0x35, 0x81, 0xF0, -0xA5, 0x5E, 0x23, 0x70, 0xA6, 0x25, 0x35, 0xF0, 0xA7, 0x27, 0x9B, 0xF0, 0xA8, 0x2A, 0x01, 0xF0, -0xA9, 0x07, 0x7D, 0xF0, 0xA9, 0xEE, 0x34, 0x70, 0xAA, 0xE7, 0x5F, 0xF0, 0xAB, 0xD7, 0x50, 0xF0, -0xAC, 0xC7, 0x41, 0xF0, 0xAD, 0xC9, 0xA7, 0xF0, 0xAE, 0xA7, 0x23, 0xF0, 0xAF, 0xA0, 0x4F, 0x70, -0xB0, 0x87, 0x05, 0xF0, 0xB1, 0x89, 0x6B, 0xF0, 0xB2, 0x70, 0x4C, 0xA0, 0xB3, 0x72, 0xB2, 0xA0, -0xB4, 0x50, 0x2E, 0xA0, 0xB5, 0x49, 0x5A, 0x20, 0xB6, 0x30, 0x10, 0xA0, 0xB7, 0x32, 0x76, 0xA0, -0xB8, 0x0F, 0xF2, 0xA0, 0xB8, 0xFF, 0xE3, 0xA0, 0xB9, 0xEF, 0xD4, 0xA0, 0xBA, 0xD6, 0x8B, 0x20, -0xBB, 0xD8, 0xF1, 0x20, 0xBC, 0xC8, 0xE2, 0x20, 0xBD, 0xB8, 0xD3, 0x20, 0xBE, 0x9F, 0x89, 0xA0, -0xBF, 0x98, 0xB5, 0x20, 0xC0, 0x9B, 0x1B, 0x20, 0xC1, 0x78, 0x97, 0x20, 0xC2, 0x68, 0x88, 0x20, -0xC3, 0x58, 0x79, 0x20, 0xC4, 0x3F, 0x2F, 0xA0, 0xC5, 0x38, 0x5B, 0x20, 0xC6, 0x3A, 0xC1, 0x20, -0xC7, 0x58, 0xD6, 0xA0, 0xC7, 0xDA, 0x09, 0xA0, 0xC8, 0x4A, 0x19, 0x20, 0xCC, 0xE7, 0x4B, 0x10, -0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x5B, 0xBF, 0x60, -0xD0, 0x6E, 0x5E, 0x90, 0xD1, 0x72, 0x16, 0x10, 0xD2, 0x4E, 0x40, 0x90, 0xD3, 0x91, 0x40, 0x10, -0xD4, 0x4B, 0x23, 0x90, 0x0D, 0x2A, 0xFD, 0x70, 0x0D, 0xA4, 0x63, 0x90, 0x0E, 0x8B, 0x1A, 0x10, -0x0F, 0x84, 0x45, 0x90, 0x10, 0x74, 0x36, 0x90, 0x11, 0x64, 0x27, 0x90, 0x12, 0x54, 0x18, 0x90, -0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x01, 0x04, 0x01, 0x02, 0x03, 0x02, 0x03, 0x07, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x03, 0x02, 0x03, 0x02, 0x03, 0x01, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, -0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x0D, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, -0x00, 0x0E, 0x10, 0x00, 0x04, 0x57, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, -0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, - -/* Europe/Bucharest */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0D, 0xB7, 0xB0, 0xD2, 0x08, -0xB9, 0x3E, 0xF3, 0x60, 0xB9, 0xEF, 0x9C, 0x60, 0xBA, 0xDF, 0x8D, 0x60, 0xBB, 0xCF, 0x7E, 0x60, -0xBC, 0xC8, 0xA9, 0xE0, 0xBD, 0xB8, 0x9A, 0xE0, 0xBE, 0xA8, 0x8B, 0xE0, 0xBF, 0x98, 0x7C, 0xE0, -0xC0, 0x88, 0x6D, 0xE0, 0xC1, 0x78, 0x5E, 0xE0, 0xC2, 0x68, 0x4F, 0xE0, 0xC3, 0x58, 0x40, 0xE0, -0xC4, 0x48, 0x31, 0xE0, 0xC5, 0x38, 0x22, 0xE0, 0xC6, 0x28, 0x13, 0xE0, 0xC7, 0x18, 0x04, 0xE0, -0x11, 0xAD, 0xD1, 0x60, 0x12, 0x53, 0xE0, 0x50, 0x13, 0x4D, 0x0B, 0xD0, 0x14, 0x33, 0xD0, 0x60, -0x15, 0x23, 0xDD, 0x80, 0x16, 0x13, 0xCE, 0x80, 0x17, 0x03, 0xBF, 0x80, 0x17, 0xF3, 0xB0, 0x80, -0x18, 0xE3, 0xA1, 0x80, 0x19, 0xD3, 0x92, 0x80, 0x1A, 0xC3, 0x83, 0x80, 0x1B, 0xBC, 0xAF, 0x00, -0x1C, 0xAC, 0xA0, 0x00, 0x1D, 0x9C, 0x91, 0x00, 0x1E, 0x8C, 0x82, 0x00, 0x1F, 0x7C, 0x73, 0x00, -0x20, 0x6C, 0x64, 0x00, 0x21, 0x5C, 0x55, 0x00, 0x22, 0x4C, 0x46, 0x00, 0x23, 0x3C, 0x37, 0x00, -0x24, 0x2C, 0x28, 0x00, 0x25, 0x1C, 0x19, 0x00, 0x26, 0x0C, 0x0A, 0x00, 0x27, 0x05, 0x35, 0x80, -0x27, 0x7F, 0xB4, 0xE0, 0x27, 0xF5, 0x0A, 0x60, 0x28, 0xE4, 0xFB, 0x60, 0x29, 0xD4, 0xEC, 0x60, -0x2A, 0xC4, 0xDD, 0x60, 0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xBF, 0x60, 0x2D, 0x24, 0xA0, 0xE0, -0x2D, 0x94, 0xB0, 0x60, 0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0x92, 0x60, 0x30, 0x64, 0x75, 0x50, -0x31, 0x5D, 0xAE, 0xE0, 0x32, 0x72, 0x7B, 0xD0, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x04, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x03, 0x04, 0x03, 0x04, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x00, 0x00, 0x18, 0x78, 0x00, 0x00, 0x00, -0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, -0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, -0x20, 0x00, 0x09, 0x42, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, -0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Budapest */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x0C, 0x17, 0x60, -0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, 0x9E, 0x30, 0x58, 0x70, -0x9E, 0xA7, 0x29, 0xA0, 0x9F, 0x95, 0xBB, 0x10, 0xA0, 0x9A, 0xD2, 0x20, 0xA1, 0x64, 0x79, 0x90, -0xA2, 0x70, 0x28, 0x20, 0xA3, 0x5A, 0xC5, 0x10, 0xC9, 0xF1, 0x3C, 0x90, 0xCC, 0xE7, 0x4B, 0x10, -0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, -0xD1, 0x99, 0x78, 0xE0, 0xD2, 0x8D, 0x5E, 0x60, 0xD3, 0x50, 0xA6, 0x90, 0xD4, 0x49, 0xD2, 0x10, -0xD5, 0x39, 0xC3, 0x10, 0xD6, 0x29, 0xB4, 0x10, 0xD7, 0x19, 0xA5, 0x10, 0xD8, 0x09, 0x96, 0x10, -0xD9, 0x02, 0xC1, 0x90, 0xD9, 0xE9, 0x78, 0x10, 0xDA, 0xED, 0x2F, 0x90, 0xDB, 0xE6, 0x5B, 0x10, -0xE2, 0xA2, 0xA8, 0xF0, 0xE3, 0x51, 0xF2, 0x60, 0xE4, 0x83, 0xDC, 0x70, 0xE5, 0x33, 0x25, 0xE0, -0xE6, 0x74, 0xE1, 0xF0, 0xE7, 0x11, 0xB6, 0x60, 0xE8, 0x54, 0xD2, 0x00, 0xE8, 0xF1, 0xC2, 0x90, -0x13, 0x4D, 0x36, 0x00, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x00, 0x01, 0x02, 0x03, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x03, 0x02, 0x03, 0x02, -0x03, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, -0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, -0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x43, 0x45, 0x53, -0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, -0x01, 0x01, - -/* Europe/Chisinau */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x22, 0x9E, 0x6B, 0x9F, 0x0C, -0xB7, 0xB0, 0xD2, 0x08, 0xB9, 0x3E, 0xF3, 0x60, 0xB9, 0xEF, 0x9C, 0x60, 0xBA, 0xDF, 0x8D, 0x60, -0xBB, 0xCF, 0x7E, 0x60, 0xBC, 0xC8, 0xA9, 0xE0, 0xBD, 0xB8, 0x9A, 0xE0, 0xBE, 0xA8, 0x8B, 0xE0, -0xBF, 0x98, 0x7C, 0xE0, 0xC0, 0x88, 0x6D, 0xE0, 0xC1, 0x78, 0x5E, 0xE0, 0xC2, 0x68, 0x4F, 0xE0, -0xC3, 0x58, 0x40, 0xE0, 0xC4, 0x48, 0x31, 0xE0, 0xC5, 0x38, 0x22, 0xE0, 0xC6, 0x28, 0x13, 0xE0, -0xC7, 0x18, 0x04, 0xE0, 0xC8, 0xBC, 0x93, 0x60, 0xCA, 0x77, 0x7D, 0x50, 0xCC, 0xE7, 0x4B, 0x10, -0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x4E, 0x90, 0x60, -0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, -0x18, 0xEA, 0x0E, 0xD0, 0x19, 0xDB, 0x43, 0x40, 0x1A, 0xCC, 0x93, 0xD0, 0x1B, 0xBC, 0xA0, 0xF0, -0x1C, 0xAC, 0x91, 0xF0, 0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, -0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, -0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x25, 0x9E, 0x73, 0x50, 0x26, 0x43, 0x3E, 0xD0, -0x27, 0xF5, 0x26, 0x80, 0x28, 0xE5, 0x17, 0x80, 0x29, 0x60, 0xE8, 0x60, 0x29, 0xD4, 0xEC, 0x60, -0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50, 0x2D, 0x94, 0xB0, 0x60, -0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0x92, 0x60, 0x30, 0x64, 0x75, 0x50, 0x31, 0x5D, 0xAE, 0xE0, -0x32, 0x72, 0x7B, 0xD0, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, -0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, -0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, -0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, -0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, -0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, -0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, -0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, -0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, -0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, -0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, -0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, -0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, -0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, -0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, -0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, -0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, -0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, -0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, -0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, -0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x04, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x08, -0x06, 0x07, 0x06, 0x07, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0A, 0x04, 0x02, 0x03, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, -0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, -0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, -0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, -0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, -0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x00, 0x00, 0x1A, 0xF4, 0x00, 0x00, 0x00, 0x00, -0x18, 0x78, 0x00, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x08, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0D, -0x00, 0x00, 0x1C, 0x20, 0x00, 0x0D, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, -0x00, 0x11, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x15, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x15, 0x00, 0x00, -0x38, 0x40, 0x01, 0x1A, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x1E, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x1E, -0x00, 0x00, 0x38, 0x40, 0x01, 0x1A, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x08, 0x00, 0x00, 0x1C, 0x20, -0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x42, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, -0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, -0x4D, 0x53, 0x4B, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, -0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x01, - -/* Europe/Copenhagen */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x1E, 0x8C, 0x60, -0x9B, 0xD5, 0xBE, 0xD0, 0xC8, 0x43, 0x57, 0x70, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, 0xD1, 0x72, 0x16, 0x10, -0xD2, 0x24, 0x10, 0x90, 0xD3, 0x79, 0x85, 0x10, 0xD4, 0x1B, 0xAD, 0x90, 0xD5, 0x5E, 0xAD, 0x10, -0xD5, 0xDF, 0xE0, 0x10, 0xD7, 0x47, 0xC9, 0x90, 0xD7, 0xBF, 0xC2, 0x10, 0x12, 0xCE, 0x97, 0xF0, -0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x00, 0x01, 0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, -0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x1C, -0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, -0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Dublin */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xE5, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x10, 0x9B, 0x26, 0xB3, 0x91, -0x9B, 0xD6, 0x0B, 0x11, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0, -0x9F, 0x97, 0x1A, 0xA0, 0xA0, 0x85, 0xBA, 0x20, 0xA1, 0x76, 0xFC, 0xA0, 0xA2, 0x65, 0x9C, 0x20, -0xA3, 0x7B, 0xC8, 0xA0, 0xA4, 0x4E, 0xB8, 0xA0, 0xA5, 0x3F, 0xFB, 0x20, 0xA5, 0x94, 0x3F, 0x00, -0xA6, 0x25, 0x60, 0x20, 0xA7, 0x27, 0xC6, 0x20, 0xA8, 0x2A, 0x2C, 0x20, 0xA8, 0xEB, 0xF8, 0xA0, -0xAA, 0x00, 0xD3, 0xA0, 0xAA, 0xD5, 0x15, 0x20, 0xAB, 0xE9, 0xF0, 0x20, 0xAC, 0xC7, 0x6C, 0x20, -0xAD, 0xC9, 0xD2, 0x20, 0xAE, 0xA7, 0x4E, 0x20, 0xAF, 0xA0, 0x79, 0xA0, 0xB0, 0x87, 0x30, 0x20, -0xB1, 0x92, 0xD0, 0xA0, 0xB2, 0x70, 0x4C, 0xA0, 0xB3, 0x72, 0xB2, 0xA0, 0xB4, 0x50, 0x2E, 0xA0, -0xB5, 0x49, 0x5A, 0x20, 0xB6, 0x30, 0x10, 0xA0, 0xB7, 0x32, 0x76, 0xA0, 0xB8, 0x0F, 0xF2, 0xA0, -0xB9, 0x12, 0x58, 0xA0, 0xB9, 0xEF, 0xD4, 0xA0, 0xBA, 0xE9, 0x00, 0x20, 0xBB, 0xD8, 0xF1, 0x20, -0xBC, 0xDB, 0x57, 0x20, 0xBD, 0xB8, 0xD3, 0x20, 0xBE, 0xB1, 0xFE, 0xA0, 0xBF, 0x98, 0xB5, 0x20, -0xC0, 0x9B, 0x1B, 0x20, 0xC1, 0x78, 0x97, 0x20, 0xC2, 0x7A, 0xFD, 0x20, 0xC3, 0x58, 0x79, 0x20, -0xC4, 0x51, 0xA4, 0xA0, 0xC5, 0x38, 0x5B, 0x20, 0xC6, 0x3A, 0xC1, 0x20, 0xC7, 0x58, 0xD6, 0xA0, -0xC7, 0xDA, 0x09, 0xA0, 0xD4, 0x49, 0xD2, 0x10, 0xD5, 0x1E, 0x21, 0xA0, 0xD6, 0x4E, 0x9E, 0x10, -0xD7, 0x2C, 0x28, 0x20, 0xD8, 0x2E, 0x8E, 0x20, 0xD8, 0xF9, 0x95, 0x20, 0xDA, 0x0E, 0x70, 0x20, -0xDA, 0xEB, 0xEC, 0x20, 0xDB, 0xE5, 0x17, 0xA0, 0xDC, 0xCB, 0xCE, 0x20, 0xDD, 0xC4, 0xF9, 0xA0, -0xDE, 0xB4, 0xEA, 0xA0, 0xDF, 0xAE, 0x16, 0x20, 0xE0, 0x94, 0xCC, 0xA0, 0xE1, 0x72, 0x48, 0xA0, -0xE2, 0x6B, 0x74, 0x20, 0xE3, 0x52, 0x2A, 0xA0, 0xE4, 0x54, 0x90, 0xA0, 0xE5, 0x32, 0x0C, 0xA0, -0xE6, 0x3D, 0xAD, 0x20, 0xE7, 0x1B, 0x29, 0x20, 0xE8, 0x14, 0x54, 0xA0, 0xE8, 0xFB, 0x0B, 0x20, -0xE9, 0xFD, 0x71, 0x20, 0xEA, 0xDA, 0xED, 0x20, 0xEB, 0xDD, 0x53, 0x20, 0xEC, 0xBA, 0xCF, 0x20, -0xED, 0xB3, 0xFA, 0xA0, 0xEE, 0x9A, 0xB1, 0x20, 0xEF, 0x81, 0x67, 0xA0, 0xF0, 0x9F, 0x7D, 0x20, -0xF1, 0x61, 0x49, 0xA0, 0xF2, 0x7F, 0x5F, 0x20, 0xF3, 0x4A, 0x66, 0x20, 0xF4, 0x5F, 0x41, 0x20, -0xF5, 0x21, 0x0D, 0xA0, 0xF6, 0x3F, 0x23, 0x20, 0xF7, 0x00, 0xEF, 0xA0, 0xF8, 0x1F, 0x05, 0x20, -0xF8, 0xE0, 0xD1, 0xA0, 0xF9, 0xFE, 0xE7, 0x20, 0xFA, 0xC0, 0xB3, 0xA0, 0xFB, 0xE8, 0x03, 0xA0, -0xFC, 0x7B, 0xAB, 0xA0, 0xFD, 0xC7, 0xBB, 0x70, 0x03, 0x70, 0xC6, 0x20, 0x04, 0x29, 0x58, 0x20, -0x05, 0x50, 0xA8, 0x20, 0x06, 0x09, 0x3A, 0x20, 0x07, 0x30, 0x8A, 0x20, 0x07, 0xE9, 0x1C, 0x20, -0x09, 0x10, 0x6C, 0x20, 0x09, 0xC8, 0xFE, 0x20, 0x0A, 0xF0, 0x4E, 0x20, 0x0B, 0xB2, 0x1A, 0xA0, -0x0C, 0xD0, 0x30, 0x20, 0x0D, 0x91, 0xFC, 0xA0, 0x0E, 0xB0, 0x12, 0x20, 0x0F, 0x71, 0xDE, 0xA0, -0x10, 0x99, 0x2E, 0xA0, 0x11, 0x51, 0xC0, 0xA0, 0x12, 0x79, 0x10, 0xA0, 0x13, 0x31, 0xA2, 0xA0, -0x14, 0x58, 0xF2, 0xA0, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x38, 0xC6, 0x90, 0x17, 0x03, 0xCD, 0x90, -0x18, 0x18, 0xA8, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xF8, 0x8A, 0x90, 0x1A, 0xC3, 0x91, 0x90, -0x1B, 0xE1, 0xA7, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0xC1, 0x89, 0x10, 0x1E, 0x8C, 0x90, 0x10, -0x1F, 0xA1, 0x6B, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x81, 0x4D, 0x10, 0x22, 0x4C, 0x54, 0x10, -0x23, 0x61, 0x2F, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x4A, 0x4B, 0x90, 0x26, 0x0C, 0x18, 0x10, -0x27, 0x2A, 0x2D, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x29, 0x0A, 0x0F, 0x90, 0x29, 0xD5, 0x16, 0x90, -0x2A, 0xE9, 0xF1, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xC9, 0xD3, 0x90, 0x2D, 0x94, 0xDA, 0x90, -0x2E, 0xA9, 0xB5, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x89, 0x97, 0x90, 0x30, 0xE7, 0x24, 0x00, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x06, 0x05, 0x06, 0x05, 0x06, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x07, 0x09, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x05, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0xFF, 0xFF, 0xFA, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1F, 0x01, -0x04, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0E, -0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, -0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -0x0C, 0x44, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, -0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Gibraltar */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xC5, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x16, 0x9B, 0x26, 0xAD, 0xA0, -0x9B, 0xD6, 0x05, 0x20, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0, -0x9F, 0x97, 0x1A, 0xA0, 0xA0, 0x85, 0xBA, 0x20, 0xA1, 0x76, 0xFC, 0xA0, 0xA2, 0x65, 0x9C, 0x20, -0xA3, 0x7B, 0xC8, 0xA0, 0xA4, 0x4E, 0xB8, 0xA0, 0xA5, 0x3F, 0xFB, 0x20, 0xA6, 0x25, 0x60, 0x20, -0xA7, 0x27, 0xC6, 0x20, 0xA8, 0x2A, 0x2C, 0x20, 0xA8, 0xEB, 0xF8, 0xA0, 0xAA, 0x00, 0xD3, 0xA0, -0xAA, 0xD5, 0x15, 0x20, 0xAB, 0xE9, 0xF0, 0x20, 0xAC, 0xC7, 0x6C, 0x20, 0xAD, 0xC9, 0xD2, 0x20, -0xAE, 0xA7, 0x4E, 0x20, 0xAF, 0xA0, 0x79, 0xA0, 0xB0, 0x87, 0x30, 0x20, 0xB1, 0x92, 0xD0, 0xA0, -0xB2, 0x70, 0x4C, 0xA0, 0xB3, 0x72, 0xB2, 0xA0, 0xB4, 0x50, 0x2E, 0xA0, 0xB5, 0x49, 0x5A, 0x20, -0xB6, 0x30, 0x10, 0xA0, 0xB7, 0x32, 0x76, 0xA0, 0xB8, 0x0F, 0xF2, 0xA0, 0xB9, 0x12, 0x58, 0xA0, -0xB9, 0xEF, 0xD4, 0xA0, 0xBA, 0xE9, 0x00, 0x20, 0xBB, 0xD8, 0xF1, 0x20, 0xBC, 0xDB, 0x57, 0x20, -0xBD, 0xB8, 0xD3, 0x20, 0xBE, 0xB1, 0xFE, 0xA0, 0xBF, 0x98, 0xB5, 0x20, 0xC0, 0x9B, 0x1B, 0x20, -0xC1, 0x78, 0x97, 0x20, 0xC2, 0x7A, 0xFD, 0x20, 0xC3, 0x58, 0x79, 0x20, 0xC4, 0x51, 0xA4, 0xA0, -0xC5, 0x38, 0x5B, 0x20, 0xC6, 0x3A, 0xC1, 0x20, 0xC7, 0x58, 0xD6, 0xA0, 0xC7, 0xDA, 0x09, 0xA0, -0xCA, 0x16, 0x26, 0x90, 0xCA, 0x97, 0x59, 0x90, 0xCB, 0xD1, 0x1E, 0x90, 0xCC, 0x77, 0x3B, 0x90, -0xCD, 0xB1, 0x00, 0x90, 0xCE, 0x60, 0x58, 0x10, 0xCF, 0x90, 0xE2, 0x90, 0xD0, 0x6E, 0x5E, 0x90, -0xD1, 0x72, 0x16, 0x10, 0xD1, 0xFB, 0x32, 0x10, 0xD2, 0x69, 0xFE, 0x20, 0xD3, 0x63, 0x29, 0xA0, -0xD4, 0x49, 0xE0, 0x20, 0xD5, 0x1E, 0x21, 0xA0, 0xD5, 0x42, 0xFD, 0x90, 0xD5, 0xDF, 0xE0, 0x10, -0xD6, 0x4E, 0xAC, 0x20, 0xD6, 0xFE, 0x03, 0xA0, 0xD8, 0x2E, 0x8E, 0x20, 0xD8, 0xF9, 0x95, 0x20, -0xDA, 0x0E, 0x70, 0x20, 0xDA, 0xEB, 0xEC, 0x20, 0xDB, 0xE5, 0x17, 0xA0, 0xDC, 0xCB, 0xCE, 0x20, -0xDD, 0xC4, 0xF9, 0xA0, 0xDE, 0xB4, 0xEA, 0xA0, 0xDF, 0xAE, 0x16, 0x20, 0xE0, 0x94, 0xCC, 0xA0, -0xE1, 0x72, 0x48, 0xA0, 0xE2, 0x6B, 0x74, 0x20, 0xE3, 0x52, 0x2A, 0xA0, 0xE4, 0x54, 0x90, 0xA0, -0xE5, 0x32, 0x0C, 0xA0, 0xE6, 0x3D, 0xAD, 0x20, 0xE7, 0x1B, 0x29, 0x20, 0xE8, 0x14, 0x54, 0xA0, -0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -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, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, -0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, -0x00, 0x01, 0x00, 0x01, 0x03, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0D, 0x00, 0x00, 0x1C, -0x20, 0x01, 0x11, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0D, 0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, -0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x01, -0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Guernsey */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xF2, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0D, 0x9B, 0x26, 0xAD, 0xA0, -0x9B, 0xD6, 0x05, 0x20, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0, -0x9F, 0x97, 0x1A, 0xA0, 0xA0, 0x85, 0xBA, 0x20, 0xA1, 0x76, 0xFC, 0xA0, 0xA2, 0x65, 0x9C, 0x20, -0xA3, 0x7B, 0xC8, 0xA0, 0xA4, 0x4E, 0xB8, 0xA0, 0xA5, 0x3F, 0xFB, 0x20, 0xA6, 0x25, 0x60, 0x20, -0xA7, 0x27, 0xC6, 0x20, 0xA8, 0x2A, 0x2C, 0x20, 0xA8, 0xEB, 0xF8, 0xA0, 0xAA, 0x00, 0xD3, 0xA0, -0xAA, 0xD5, 0x15, 0x20, 0xAB, 0xE9, 0xF0, 0x20, 0xAC, 0xC7, 0x6C, 0x20, 0xAD, 0xC9, 0xD2, 0x20, -0xAE, 0xA7, 0x4E, 0x20, 0xAF, 0xA0, 0x79, 0xA0, 0xB0, 0x87, 0x30, 0x20, 0xB1, 0x92, 0xD0, 0xA0, -0xB2, 0x70, 0x4C, 0xA0, 0xB3, 0x72, 0xB2, 0xA0, 0xB4, 0x50, 0x2E, 0xA0, 0xB5, 0x49, 0x5A, 0x20, -0xB6, 0x30, 0x10, 0xA0, 0xB7, 0x32, 0x76, 0xA0, 0xB8, 0x0F, 0xF2, 0xA0, 0xB9, 0x12, 0x58, 0xA0, -0xB9, 0xEF, 0xD4, 0xA0, 0xBA, 0xE9, 0x00, 0x20, 0xBB, 0xD8, 0xF1, 0x20, 0xBC, 0xDB, 0x57, 0x20, -0xBD, 0xB8, 0xD3, 0x20, 0xBE, 0xB1, 0xFE, 0xA0, 0xBF, 0x98, 0xB5, 0x20, 0xC0, 0x9B, 0x1B, 0x20, -0xC1, 0x78, 0x97, 0x20, 0xC2, 0x7A, 0xFD, 0x20, 0xC3, 0x58, 0x79, 0x20, 0xC4, 0x51, 0xA4, 0xA0, -0xC5, 0x38, 0x5B, 0x20, 0xC6, 0x3A, 0xC1, 0x20, 0xC7, 0x58, 0xD6, 0xA0, 0xC7, 0xDA, 0x09, 0xA0, -0xCA, 0x16, 0x26, 0x90, 0xCA, 0x97, 0x59, 0x90, 0xCB, 0xD1, 0x1E, 0x90, 0xCC, 0x77, 0x3B, 0x90, -0xCD, 0xB1, 0x00, 0x90, 0xCE, 0x60, 0x58, 0x10, 0xCF, 0x90, 0xE2, 0x90, 0xD0, 0x6E, 0x5E, 0x90, -0xD1, 0x72, 0x16, 0x10, 0xD1, 0xFB, 0x32, 0x10, 0xD2, 0x69, 0xFE, 0x20, 0xD3, 0x63, 0x29, 0xA0, -0xD4, 0x49, 0xE0, 0x20, 0xD5, 0x1E, 0x21, 0xA0, 0xD5, 0x42, 0xFD, 0x90, 0xD5, 0xDF, 0xE0, 0x10, -0xD6, 0x4E, 0xAC, 0x20, 0xD6, 0xFE, 0x03, 0xA0, 0xD8, 0x2E, 0x8E, 0x20, 0xD8, 0xF9, 0x95, 0x20, -0xDA, 0x0E, 0x70, 0x20, 0xDA, 0xEB, 0xEC, 0x20, 0xDB, 0xE5, 0x17, 0xA0, 0xDC, 0xCB, 0xCE, 0x20, -0xDD, 0xC4, 0xF9, 0xA0, 0xDE, 0xB4, 0xEA, 0xA0, 0xDF, 0xAE, 0x16, 0x20, 0xE0, 0x94, 0xCC, 0xA0, -0xE1, 0x72, 0x48, 0xA0, 0xE2, 0x6B, 0x74, 0x20, 0xE3, 0x52, 0x2A, 0xA0, 0xE4, 0x54, 0x90, 0xA0, -0xE5, 0x32, 0x0C, 0xA0, 0xE6, 0x3D, 0xAD, 0x20, 0xE7, 0x1B, 0x29, 0x20, 0xE8, 0x14, 0x54, 0xA0, -0xE8, 0xFB, 0x0B, 0x20, 0xE9, 0xFD, 0x71, 0x20, 0xEA, 0xDA, 0xED, 0x20, 0xEB, 0xDD, 0x53, 0x20, -0xEC, 0xBA, 0xCF, 0x20, 0xED, 0xB3, 0xFA, 0xA0, 0xEE, 0x9A, 0xB1, 0x20, 0xEF, 0x81, 0x67, 0xA0, -0xF0, 0x9F, 0x7D, 0x20, 0xF1, 0x61, 0x49, 0xA0, 0xF2, 0x7F, 0x5F, 0x20, 0xF3, 0x4A, 0x66, 0x20, -0xF4, 0x5F, 0x41, 0x20, 0xF5, 0x21, 0x0D, 0xA0, 0xF6, 0x3F, 0x23, 0x20, 0xF7, 0x00, 0xEF, 0xA0, -0xF8, 0x1F, 0x05, 0x20, 0xF8, 0xE0, 0xD1, 0xA0, 0xF9, 0xFE, 0xE7, 0x20, 0xFA, 0xC0, 0xB3, 0xA0, -0xFB, 0xE8, 0x03, 0xA0, 0xFC, 0x7B, 0xAB, 0xA0, 0xFD, 0xC7, 0xBB, 0x70, 0x03, 0x70, 0xC6, 0x20, -0x04, 0x29, 0x58, 0x20, 0x05, 0x50, 0xA8, 0x20, 0x06, 0x09, 0x3A, 0x20, 0x07, 0x30, 0x8A, 0x20, -0x07, 0xE9, 0x1C, 0x20, 0x09, 0x10, 0x6C, 0x20, 0x09, 0xC8, 0xFE, 0x20, 0x0A, 0xF0, 0x4E, 0x20, -0x0B, 0xB2, 0x1A, 0xA0, 0x0C, 0xD0, 0x30, 0x20, 0x0D, 0x91, 0xFC, 0xA0, 0x0E, 0xB0, 0x12, 0x20, -0x0F, 0x71, 0xDE, 0xA0, 0x10, 0x99, 0x2E, 0xA0, 0x11, 0x51, 0xC0, 0xA0, 0x12, 0x79, 0x10, 0xA0, -0x13, 0x31, 0xA2, 0xA0, 0x14, 0x58, 0xF2, 0xA0, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x38, 0xC6, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x18, 0x18, 0xA8, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xF8, 0x8A, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xE1, 0xA7, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0xC1, 0x89, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0xA1, 0x6B, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x81, 0x4D, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x61, 0x2F, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x4A, 0x4B, 0x90, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x2A, 0x2D, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x29, 0x0A, 0x0F, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xE9, 0xF1, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xC9, 0xD3, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0xA9, 0xB5, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x89, 0x97, 0x90, -0x30, 0xE7, 0x24, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, -0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, -0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, -0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, -0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, -0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, -0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, -0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, -0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, -0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, -0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, -0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, -0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, -0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, -0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, -0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, -0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, -0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, -0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, -0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, -0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, -0x7F, 0x8E, 0x7F, 0x90, 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, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, -0x00, 0x01, 0x00, 0x02, 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, 0x03, -0x05, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x06, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, -0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, -0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x01, 0x01, 0x01, -0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, - -/* Europe/Helsinki */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0xA4, 0x73, 0x6F, 0x18, -0xCB, 0xCE, 0x51, 0x60, 0xCC, 0xBF, 0x85, 0xD0, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x02, 0x01, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x00, 0x00, 0x17, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, -0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, -0x20, 0x00, 0x09, 0x48, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Isle_of_Man */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xF2, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0D, 0x9B, 0x26, 0xAD, 0xA0, -0x9B, 0xD6, 0x05, 0x20, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0, -0x9F, 0x97, 0x1A, 0xA0, 0xA0, 0x85, 0xBA, 0x20, 0xA1, 0x76, 0xFC, 0xA0, 0xA2, 0x65, 0x9C, 0x20, -0xA3, 0x7B, 0xC8, 0xA0, 0xA4, 0x4E, 0xB8, 0xA0, 0xA5, 0x3F, 0xFB, 0x20, 0xA6, 0x25, 0x60, 0x20, -0xA7, 0x27, 0xC6, 0x20, 0xA8, 0x2A, 0x2C, 0x20, 0xA8, 0xEB, 0xF8, 0xA0, 0xAA, 0x00, 0xD3, 0xA0, -0xAA, 0xD5, 0x15, 0x20, 0xAB, 0xE9, 0xF0, 0x20, 0xAC, 0xC7, 0x6C, 0x20, 0xAD, 0xC9, 0xD2, 0x20, -0xAE, 0xA7, 0x4E, 0x20, 0xAF, 0xA0, 0x79, 0xA0, 0xB0, 0x87, 0x30, 0x20, 0xB1, 0x92, 0xD0, 0xA0, -0xB2, 0x70, 0x4C, 0xA0, 0xB3, 0x72, 0xB2, 0xA0, 0xB4, 0x50, 0x2E, 0xA0, 0xB5, 0x49, 0x5A, 0x20, -0xB6, 0x30, 0x10, 0xA0, 0xB7, 0x32, 0x76, 0xA0, 0xB8, 0x0F, 0xF2, 0xA0, 0xB9, 0x12, 0x58, 0xA0, -0xB9, 0xEF, 0xD4, 0xA0, 0xBA, 0xE9, 0x00, 0x20, 0xBB, 0xD8, 0xF1, 0x20, 0xBC, 0xDB, 0x57, 0x20, -0xBD, 0xB8, 0xD3, 0x20, 0xBE, 0xB1, 0xFE, 0xA0, 0xBF, 0x98, 0xB5, 0x20, 0xC0, 0x9B, 0x1B, 0x20, -0xC1, 0x78, 0x97, 0x20, 0xC2, 0x7A, 0xFD, 0x20, 0xC3, 0x58, 0x79, 0x20, 0xC4, 0x51, 0xA4, 0xA0, -0xC5, 0x38, 0x5B, 0x20, 0xC6, 0x3A, 0xC1, 0x20, 0xC7, 0x58, 0xD6, 0xA0, 0xC7, 0xDA, 0x09, 0xA0, -0xCA, 0x16, 0x26, 0x90, 0xCA, 0x97, 0x59, 0x90, 0xCB, 0xD1, 0x1E, 0x90, 0xCC, 0x77, 0x3B, 0x90, -0xCD, 0xB1, 0x00, 0x90, 0xCE, 0x60, 0x58, 0x10, 0xCF, 0x90, 0xE2, 0x90, 0xD0, 0x6E, 0x5E, 0x90, -0xD1, 0x72, 0x16, 0x10, 0xD1, 0xFB, 0x32, 0x10, 0xD2, 0x69, 0xFE, 0x20, 0xD3, 0x63, 0x29, 0xA0, -0xD4, 0x49, 0xE0, 0x20, 0xD5, 0x1E, 0x21, 0xA0, 0xD5, 0x42, 0xFD, 0x90, 0xD5, 0xDF, 0xE0, 0x10, -0xD6, 0x4E, 0xAC, 0x20, 0xD6, 0xFE, 0x03, 0xA0, 0xD8, 0x2E, 0x8E, 0x20, 0xD8, 0xF9, 0x95, 0x20, -0xDA, 0x0E, 0x70, 0x20, 0xDA, 0xEB, 0xEC, 0x20, 0xDB, 0xE5, 0x17, 0xA0, 0xDC, 0xCB, 0xCE, 0x20, -0xDD, 0xC4, 0xF9, 0xA0, 0xDE, 0xB4, 0xEA, 0xA0, 0xDF, 0xAE, 0x16, 0x20, 0xE0, 0x94, 0xCC, 0xA0, -0xE1, 0x72, 0x48, 0xA0, 0xE2, 0x6B, 0x74, 0x20, 0xE3, 0x52, 0x2A, 0xA0, 0xE4, 0x54, 0x90, 0xA0, -0xE5, 0x32, 0x0C, 0xA0, 0xE6, 0x3D, 0xAD, 0x20, 0xE7, 0x1B, 0x29, 0x20, 0xE8, 0x14, 0x54, 0xA0, -0xE8, 0xFB, 0x0B, 0x20, 0xE9, 0xFD, 0x71, 0x20, 0xEA, 0xDA, 0xED, 0x20, 0xEB, 0xDD, 0x53, 0x20, -0xEC, 0xBA, 0xCF, 0x20, 0xED, 0xB3, 0xFA, 0xA0, 0xEE, 0x9A, 0xB1, 0x20, 0xEF, 0x81, 0x67, 0xA0, -0xF0, 0x9F, 0x7D, 0x20, 0xF1, 0x61, 0x49, 0xA0, 0xF2, 0x7F, 0x5F, 0x20, 0xF3, 0x4A, 0x66, 0x20, -0xF4, 0x5F, 0x41, 0x20, 0xF5, 0x21, 0x0D, 0xA0, 0xF6, 0x3F, 0x23, 0x20, 0xF7, 0x00, 0xEF, 0xA0, -0xF8, 0x1F, 0x05, 0x20, 0xF8, 0xE0, 0xD1, 0xA0, 0xF9, 0xFE, 0xE7, 0x20, 0xFA, 0xC0, 0xB3, 0xA0, -0xFB, 0xE8, 0x03, 0xA0, 0xFC, 0x7B, 0xAB, 0xA0, 0xFD, 0xC7, 0xBB, 0x70, 0x03, 0x70, 0xC6, 0x20, -0x04, 0x29, 0x58, 0x20, 0x05, 0x50, 0xA8, 0x20, 0x06, 0x09, 0x3A, 0x20, 0x07, 0x30, 0x8A, 0x20, -0x07, 0xE9, 0x1C, 0x20, 0x09, 0x10, 0x6C, 0x20, 0x09, 0xC8, 0xFE, 0x20, 0x0A, 0xF0, 0x4E, 0x20, -0x0B, 0xB2, 0x1A, 0xA0, 0x0C, 0xD0, 0x30, 0x20, 0x0D, 0x91, 0xFC, 0xA0, 0x0E, 0xB0, 0x12, 0x20, -0x0F, 0x71, 0xDE, 0xA0, 0x10, 0x99, 0x2E, 0xA0, 0x11, 0x51, 0xC0, 0xA0, 0x12, 0x79, 0x10, 0xA0, -0x13, 0x31, 0xA2, 0xA0, 0x14, 0x58, 0xF2, 0xA0, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x38, 0xC6, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x18, 0x18, 0xA8, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xF8, 0x8A, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xE1, 0xA7, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0xC1, 0x89, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0xA1, 0x6B, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x81, 0x4D, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x61, 0x2F, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x4A, 0x4B, 0x90, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x2A, 0x2D, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x29, 0x0A, 0x0F, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xE9, 0xF1, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xC9, 0xD3, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0xA9, 0xB5, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x89, 0x97, 0x90, -0x30, 0xE7, 0x24, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, -0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, -0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, -0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, -0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, -0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, -0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, -0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, -0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, -0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, -0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, -0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, -0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, -0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, -0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, -0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, -0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, -0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, -0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, -0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, -0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, -0x7F, 0x8E, 0x7F, 0x90, 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, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, -0x00, 0x01, 0x00, 0x02, 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, 0x03, -0x05, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x06, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, -0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, -0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x01, 0x01, 0x01, -0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, - -/* Europe/Istanbul */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x16, 0x90, 0x8B, 0xF5, 0x98, -0x9B, 0x0C, 0x17, 0x60, 0x9B, 0xD5, 0xBE, 0xD0, 0xA2, 0x65, 0x63, 0xE0, 0xA3, 0x7B, 0x82, 0x50, -0xA4, 0x4E, 0x80, 0x60, 0xA5, 0x3F, 0xB4, 0xD0, 0xA6, 0x25, 0x27, 0xE0, 0xA7, 0x27, 0x7F, 0xD0, -0xAA, 0x28, 0x28, 0x60, 0xAA, 0xE1, 0xFD, 0xD0, 0xAB, 0xF9, 0x89, 0xE0, 0xAC, 0xC3, 0x31, 0x50, -0xC8, 0x7F, 0xEE, 0x60, 0xC8, 0xFF, 0xC1, 0xD0, 0xC9, 0x4A, 0xF5, 0x60, 0xCA, 0xCE, 0x80, 0x50, -0xCB, 0xCB, 0xAE, 0x60, 0xCC, 0xE5, 0xC1, 0x50, 0xD1, 0x71, 0xEB, 0xE0, 0xD2, 0x6B, 0x09, 0x50, -0xD3, 0xA2, 0x39, 0x60, 0xD4, 0x43, 0x02, 0x50, 0xD5, 0x4C, 0x0D, 0xE0, 0xD6, 0x29, 0x7B, 0xD0, -0xD7, 0x2B, 0xEF, 0xE0, 0xD8, 0x09, 0x5D, 0xD0, 0xD9, 0x02, 0x97, 0x60, 0xD9, 0xE9, 0x3F, 0xD0, -0xDA, 0xEF, 0xA8, 0x60, 0xDB, 0xD2, 0x5C, 0x50, 0xDC, 0xD4, 0xD0, 0x60, 0xDD, 0xB3, 0x8F, 0xD0, -0xF1, 0xF4, 0xB9, 0x60, 0xF2, 0x64, 0xBA, 0xD0, 0xF5, 0x68, 0x06, 0x60, 0xF6, 0x1F, 0x38, 0xD0, -0x00, 0xA0, 0xBA, 0xE0, 0x01, 0x6B, 0xB3, 0xD0, 0x02, 0x80, 0x9C, 0xE0, 0x03, 0x4B, 0x95, 0xD0, -0x04, 0x69, 0xB9, 0x60, 0x05, 0x34, 0xB2, 0x50, 0x06, 0x6E, 0x93, 0x70, 0x07, 0x39, 0xA8, 0x80, -0x07, 0xFB, 0x75, 0x00, 0x09, 0x19, 0xA6, 0xA0, 0x09, 0xDB, 0x3A, 0xE0, 0x0A, 0xF0, 0x07, 0xD0, -0x0C, 0x10, 0xCE, 0x60, 0x0C, 0xD9, 0x24, 0x50, 0x0D, 0xA4, 0x39, 0x60, 0x0E, 0xA6, 0x91, 0x50, -0x0F, 0x84, 0x1B, 0x60, 0x10, 0x86, 0x73, 0x50, 0x12, 0x67, 0x98, 0xC0, 0x13, 0x4D, 0x36, 0x00, -0x14, 0x47, 0x7A, 0xC0, 0x15, 0x23, 0xDD, 0x80, 0x16, 0x27, 0x5C, 0xC0, 0x17, 0x03, 0xBF, 0x80, -0x18, 0x07, 0x3E, 0xC0, 0x19, 0x89, 0x94, 0x50, 0x19, 0xDC, 0x94, 0xC0, 0x1C, 0xC6, 0xD3, 0xD0, -0x1D, 0x9B, 0x15, 0x50, 0x1E, 0x8C, 0x82, 0x00, 0x1F, 0x7C, 0x73, 0x00, 0x20, 0x6C, 0x64, 0x00, -0x21, 0x5C, 0x55, 0x00, 0x22, 0x4C, 0x46, 0x00, 0x23, 0x3C, 0x37, 0x00, 0x24, 0x2C, 0x28, 0x00, -0x25, 0x1C, 0x19, 0x00, 0x26, 0x0C, 0x0A, 0x00, 0x27, 0x05, 0x35, 0x80, 0x27, 0xF5, 0x18, 0x70, -0x28, 0xE5, 0x09, 0x70, 0x29, 0xD4, 0xFA, 0x70, 0x2A, 0xC4, 0xEB, 0x70, 0x2B, 0xB4, 0xDC, 0x70, -0x2C, 0xA4, 0xCD, 0x70, 0x2D, 0x94, 0xBE, 0x70, 0x2E, 0x84, 0xAF, 0x70, 0x2F, 0x74, 0xA0, 0x70, -0x30, 0x64, 0x91, 0x70, 0x31, 0x5D, 0xBC, 0xF0, 0x32, 0x72, 0x97, 0xF0, 0x33, 0x3D, 0x9E, 0xF0, -0x34, 0x52, 0x79, 0xF0, 0x35, 0x1D, 0x80, 0xF0, 0x36, 0x32, 0x5B, 0xF0, 0x36, 0xFD, 0x62, 0xF0, -0x38, 0x1B, 0x78, 0x70, 0x38, 0xDD, 0x44, 0xF0, 0x39, 0xFB, 0x5A, 0x70, 0x3A, 0xBD, 0x26, 0xF0, -0x3B, 0xDB, 0x3C, 0x70, 0x3C, 0xA6, 0x43, 0x70, 0x3D, 0xBB, 0x1E, 0x70, 0x3E, 0x86, 0x25, 0x70, -0x3F, 0x9B, 0x00, 0x70, 0x40, 0x66, 0x07, 0x70, 0x41, 0x84, 0x1C, 0xF0, 0x42, 0x45, 0xE9, 0x70, -0x43, 0x63, 0xFE, 0xF0, 0x44, 0x25, 0xCB, 0x70, 0x45, 0x43, 0xE0, 0xF0, 0x46, 0x05, 0xAD, 0x70, -0x47, 0x23, 0xC2, 0xF0, 0x47, 0xEE, 0xC9, 0xF0, 0x49, 0x03, 0xA4, 0xF0, 0x49, 0xCE, 0xAB, 0xF0, -0x4A, 0xE3, 0x86, 0xF0, 0x4B, 0xAE, 0x8D, 0xF0, 0x4C, 0xCC, 0xA3, 0x70, 0x4D, 0x8E, 0x6F, 0xF0, -0x4E, 0xAC, 0x85, 0x70, 0x4F, 0x6E, 0x51, 0xF0, 0x50, 0x8C, 0x67, 0x70, 0x51, 0x57, 0x6E, 0x70, -0x52, 0x6C, 0x49, 0x70, 0x53, 0x37, 0x50, 0x70, 0x54, 0x4C, 0x2B, 0x70, 0x55, 0x17, 0x32, 0x70, -0x56, 0x2C, 0x0D, 0x70, 0x56, 0xF7, 0x14, 0x70, 0x58, 0x15, 0x29, 0xF0, 0x58, 0xD6, 0xF6, 0x70, -0x59, 0xF5, 0x0B, 0xF0, 0x5A, 0xB6, 0xD8, 0x70, 0x5B, 0xD4, 0xED, 0xF0, 0x5C, 0x9F, 0xF4, 0xF0, -0x5D, 0xB4, 0xCF, 0xF0, 0x5E, 0x7F, 0xD6, 0xF0, 0x5F, 0x94, 0xB1, 0xF0, 0x60, 0x5F, 0xB8, 0xF0, -0x61, 0x7D, 0xCE, 0x70, 0x62, 0x3F, 0x9A, 0xF0, 0x63, 0x5D, 0xB0, 0x70, 0x64, 0x1F, 0x7C, 0xF0, -0x65, 0x3D, 0x92, 0x70, 0x66, 0x08, 0x99, 0x70, 0x67, 0x1D, 0x74, 0x70, 0x67, 0xE8, 0x7B, 0x70, -0x68, 0xFD, 0x56, 0x70, 0x69, 0xC8, 0x5D, 0x70, 0x6A, 0xDD, 0x38, 0x70, 0x6B, 0xA8, 0x3F, 0x70, -0x6C, 0xC6, 0x54, 0xF0, 0x6D, 0x88, 0x21, 0x70, 0x6E, 0xA6, 0x36, 0xF0, 0x6F, 0x68, 0x03, 0x70, -0x70, 0x86, 0x18, 0xF0, 0x71, 0x51, 0x1F, 0xF0, 0x72, 0x65, 0xFA, 0xF0, 0x73, 0x31, 0x01, 0xF0, -0x74, 0x45, 0xDC, 0xF0, 0x75, 0x10, 0xE3, 0xF0, 0x76, 0x2E, 0xF9, 0x70, 0x76, 0xF0, 0xC5, 0xF0, -0x78, 0x0E, 0xDB, 0x70, 0x78, 0xD0, 0xA7, 0xF0, 0x79, 0xEE, 0xBD, 0x70, 0x7A, 0xB0, 0x89, 0xF0, -0x7B, 0xCE, 0x9F, 0x70, 0x7C, 0x99, 0xA6, 0x70, 0x7D, 0xAE, 0x81, 0x70, 0x7E, 0x79, 0x88, 0x70, -0x7F, 0x8E, 0x63, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x01, 0x02, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x00, 0x00, -0x1B, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, -0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x12, 0x00, 0x00, 0x2A, 0x30, -0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x49, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, -0x00, 0x45, 0x45, 0x54, 0x00, 0x54, 0x52, 0x53, 0x54, 0x00, 0x54, 0x52, 0x54, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Europe/Jersey */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xF2, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0D, 0x9B, 0x26, 0xAD, 0xA0, -0x9B, 0xD6, 0x05, 0x20, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0, -0x9F, 0x97, 0x1A, 0xA0, 0xA0, 0x85, 0xBA, 0x20, 0xA1, 0x76, 0xFC, 0xA0, 0xA2, 0x65, 0x9C, 0x20, -0xA3, 0x7B, 0xC8, 0xA0, 0xA4, 0x4E, 0xB8, 0xA0, 0xA5, 0x3F, 0xFB, 0x20, 0xA6, 0x25, 0x60, 0x20, -0xA7, 0x27, 0xC6, 0x20, 0xA8, 0x2A, 0x2C, 0x20, 0xA8, 0xEB, 0xF8, 0xA0, 0xAA, 0x00, 0xD3, 0xA0, -0xAA, 0xD5, 0x15, 0x20, 0xAB, 0xE9, 0xF0, 0x20, 0xAC, 0xC7, 0x6C, 0x20, 0xAD, 0xC9, 0xD2, 0x20, -0xAE, 0xA7, 0x4E, 0x20, 0xAF, 0xA0, 0x79, 0xA0, 0xB0, 0x87, 0x30, 0x20, 0xB1, 0x92, 0xD0, 0xA0, -0xB2, 0x70, 0x4C, 0xA0, 0xB3, 0x72, 0xB2, 0xA0, 0xB4, 0x50, 0x2E, 0xA0, 0xB5, 0x49, 0x5A, 0x20, -0xB6, 0x30, 0x10, 0xA0, 0xB7, 0x32, 0x76, 0xA0, 0xB8, 0x0F, 0xF2, 0xA0, 0xB9, 0x12, 0x58, 0xA0, -0xB9, 0xEF, 0xD4, 0xA0, 0xBA, 0xE9, 0x00, 0x20, 0xBB, 0xD8, 0xF1, 0x20, 0xBC, 0xDB, 0x57, 0x20, -0xBD, 0xB8, 0xD3, 0x20, 0xBE, 0xB1, 0xFE, 0xA0, 0xBF, 0x98, 0xB5, 0x20, 0xC0, 0x9B, 0x1B, 0x20, -0xC1, 0x78, 0x97, 0x20, 0xC2, 0x7A, 0xFD, 0x20, 0xC3, 0x58, 0x79, 0x20, 0xC4, 0x51, 0xA4, 0xA0, -0xC5, 0x38, 0x5B, 0x20, 0xC6, 0x3A, 0xC1, 0x20, 0xC7, 0x58, 0xD6, 0xA0, 0xC7, 0xDA, 0x09, 0xA0, -0xCA, 0x16, 0x26, 0x90, 0xCA, 0x97, 0x59, 0x90, 0xCB, 0xD1, 0x1E, 0x90, 0xCC, 0x77, 0x3B, 0x90, -0xCD, 0xB1, 0x00, 0x90, 0xCE, 0x60, 0x58, 0x10, 0xCF, 0x90, 0xE2, 0x90, 0xD0, 0x6E, 0x5E, 0x90, -0xD1, 0x72, 0x16, 0x10, 0xD1, 0xFB, 0x32, 0x10, 0xD2, 0x69, 0xFE, 0x20, 0xD3, 0x63, 0x29, 0xA0, -0xD4, 0x49, 0xE0, 0x20, 0xD5, 0x1E, 0x21, 0xA0, 0xD5, 0x42, 0xFD, 0x90, 0xD5, 0xDF, 0xE0, 0x10, -0xD6, 0x4E, 0xAC, 0x20, 0xD6, 0xFE, 0x03, 0xA0, 0xD8, 0x2E, 0x8E, 0x20, 0xD8, 0xF9, 0x95, 0x20, -0xDA, 0x0E, 0x70, 0x20, 0xDA, 0xEB, 0xEC, 0x20, 0xDB, 0xE5, 0x17, 0xA0, 0xDC, 0xCB, 0xCE, 0x20, -0xDD, 0xC4, 0xF9, 0xA0, 0xDE, 0xB4, 0xEA, 0xA0, 0xDF, 0xAE, 0x16, 0x20, 0xE0, 0x94, 0xCC, 0xA0, -0xE1, 0x72, 0x48, 0xA0, 0xE2, 0x6B, 0x74, 0x20, 0xE3, 0x52, 0x2A, 0xA0, 0xE4, 0x54, 0x90, 0xA0, -0xE5, 0x32, 0x0C, 0xA0, 0xE6, 0x3D, 0xAD, 0x20, 0xE7, 0x1B, 0x29, 0x20, 0xE8, 0x14, 0x54, 0xA0, -0xE8, 0xFB, 0x0B, 0x20, 0xE9, 0xFD, 0x71, 0x20, 0xEA, 0xDA, 0xED, 0x20, 0xEB, 0xDD, 0x53, 0x20, -0xEC, 0xBA, 0xCF, 0x20, 0xED, 0xB3, 0xFA, 0xA0, 0xEE, 0x9A, 0xB1, 0x20, 0xEF, 0x81, 0x67, 0xA0, -0xF0, 0x9F, 0x7D, 0x20, 0xF1, 0x61, 0x49, 0xA0, 0xF2, 0x7F, 0x5F, 0x20, 0xF3, 0x4A, 0x66, 0x20, -0xF4, 0x5F, 0x41, 0x20, 0xF5, 0x21, 0x0D, 0xA0, 0xF6, 0x3F, 0x23, 0x20, 0xF7, 0x00, 0xEF, 0xA0, -0xF8, 0x1F, 0x05, 0x20, 0xF8, 0xE0, 0xD1, 0xA0, 0xF9, 0xFE, 0xE7, 0x20, 0xFA, 0xC0, 0xB3, 0xA0, -0xFB, 0xE8, 0x03, 0xA0, 0xFC, 0x7B, 0xAB, 0xA0, 0xFD, 0xC7, 0xBB, 0x70, 0x03, 0x70, 0xC6, 0x20, -0x04, 0x29, 0x58, 0x20, 0x05, 0x50, 0xA8, 0x20, 0x06, 0x09, 0x3A, 0x20, 0x07, 0x30, 0x8A, 0x20, -0x07, 0xE9, 0x1C, 0x20, 0x09, 0x10, 0x6C, 0x20, 0x09, 0xC8, 0xFE, 0x20, 0x0A, 0xF0, 0x4E, 0x20, -0x0B, 0xB2, 0x1A, 0xA0, 0x0C, 0xD0, 0x30, 0x20, 0x0D, 0x91, 0xFC, 0xA0, 0x0E, 0xB0, 0x12, 0x20, -0x0F, 0x71, 0xDE, 0xA0, 0x10, 0x99, 0x2E, 0xA0, 0x11, 0x51, 0xC0, 0xA0, 0x12, 0x79, 0x10, 0xA0, -0x13, 0x31, 0xA2, 0xA0, 0x14, 0x58, 0xF2, 0xA0, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x38, 0xC6, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x18, 0x18, 0xA8, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xF8, 0x8A, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xE1, 0xA7, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0xC1, 0x89, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0xA1, 0x6B, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x81, 0x4D, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x61, 0x2F, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x4A, 0x4B, 0x90, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x2A, 0x2D, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x29, 0x0A, 0x0F, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xE9, 0xF1, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xC9, 0xD3, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0xA9, 0xB5, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x89, 0x97, 0x90, -0x30, 0xE7, 0x24, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, -0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, -0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, -0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, -0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, -0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, -0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, -0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, -0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, -0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, -0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, -0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, -0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, -0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, -0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, -0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, -0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, -0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, -0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, -0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, -0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, -0x7F, 0x8E, 0x7F, 0x90, 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, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, -0x00, 0x01, 0x00, 0x02, 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, 0x03, -0x05, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x06, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, -0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, -0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x01, 0x01, 0x01, -0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, - -/* Europe/Kaliningrad */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x1A, 0x9B, 0x0C, 0x17, 0x60, -0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, 0x9E, 0xB9, 0x90, 0x90, -0x9F, 0x84, 0x97, 0x90, 0xC8, 0x09, 0x71, 0x90, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, 0xD0, 0xFA, 0x01, 0x70, -0xD1, 0x95, 0x84, 0x60, 0xD2, 0x8A, 0xAD, 0x50, 0xD2, 0xDB, 0x26, 0xE0, 0x15, 0x27, 0xA7, 0xD0, -0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, -0x19, 0xDB, 0x43, 0x40, 0x1A, 0xCC, 0x93, 0xD0, 0x1B, 0xBC, 0xA0, 0xF0, 0x1C, 0xAC, 0x91, 0xF0, -0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, -0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, 0x24, 0x2C, 0x19, 0xF0, -0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x0B, 0xFB, 0xF0, 0x27, 0x05, 0x27, 0x70, 0x27, 0xF5, 0x18, 0x70, -0x28, 0xE5, 0x17, 0x80, 0x29, 0xD4, 0xDE, 0x50, 0x2A, 0xC4, 0xC1, 0x40, 0x2B, 0xB4, 0xEA, 0x80, -0x2C, 0xA4, 0xDB, 0x80, 0x2D, 0x94, 0xCC, 0x80, 0x2E, 0x84, 0xBD, 0x80, 0x2F, 0x74, 0xAE, 0x80, -0x30, 0x64, 0x9F, 0x80, 0x31, 0x5D, 0xCB, 0x00, 0x32, 0x72, 0xA6, 0x00, 0x33, 0x3D, 0xAD, 0x00, -0x34, 0x52, 0x88, 0x00, 0x35, 0x1D, 0x8F, 0x00, 0x36, 0x32, 0x6A, 0x00, 0x36, 0xFD, 0x71, 0x00, -0x38, 0x1B, 0x86, 0x80, 0x38, 0xDD, 0x53, 0x00, 0x39, 0xFB, 0x68, 0x80, 0x3A, 0xBD, 0x35, 0x00, -0x3B, 0xDB, 0x4A, 0x80, 0x3C, 0xA6, 0x51, 0x80, 0x3D, 0xBB, 0x2C, 0x80, 0x3E, 0x86, 0x33, 0x80, -0x3F, 0x9B, 0x0E, 0x80, 0x40, 0x66, 0x15, 0x80, 0x41, 0x84, 0x2B, 0x00, 0x42, 0x45, 0xF7, 0x80, -0x43, 0x64, 0x0D, 0x00, 0x44, 0x25, 0xD9, 0x80, 0x45, 0x43, 0xEF, 0x00, 0x46, 0x05, 0xBB, 0x80, -0x47, 0x23, 0xD1, 0x00, 0x47, 0xEE, 0xD8, 0x00, 0x49, 0x03, 0xB3, 0x00, 0x49, 0xCE, 0xBA, 0x00, -0x4A, 0xE3, 0x95, 0x00, 0x4B, 0xAE, 0x9C, 0x00, 0x4C, 0xCC, 0xB1, 0x80, 0x4D, 0x8E, 0x7E, 0x00, -0x4E, 0xAC, 0x93, 0x80, 0x4F, 0x6E, 0x60, 0x00, 0x50, 0x8C, 0x75, 0x80, 0x51, 0x57, 0x7C, 0x80, -0x52, 0x6C, 0x57, 0x80, 0x53, 0x37, 0x5E, 0x80, 0x54, 0x4C, 0x39, 0x80, 0x55, 0x17, 0x40, 0x80, -0x56, 0x2C, 0x1B, 0x80, 0x56, 0xF7, 0x22, 0x80, 0x58, 0x15, 0x38, 0x00, 0x58, 0xD7, 0x04, 0x80, -0x59, 0xF5, 0x1A, 0x00, 0x5A, 0xB6, 0xE6, 0x80, 0x5B, 0xD4, 0xFC, 0x00, 0x5C, 0xA0, 0x03, 0x00, -0x5D, 0xB4, 0xDE, 0x00, 0x5E, 0x7F, 0xE5, 0x00, 0x5F, 0x94, 0xC0, 0x00, 0x60, 0x5F, 0xC7, 0x00, -0x61, 0x7D, 0xDC, 0x80, 0x62, 0x3F, 0xA9, 0x00, 0x63, 0x5D, 0xBE, 0x80, 0x64, 0x1F, 0x8B, 0x00, -0x65, 0x3D, 0xA0, 0x80, 0x66, 0x08, 0xA7, 0x80, 0x67, 0x1D, 0x82, 0x80, 0x67, 0xE8, 0x89, 0x80, -0x68, 0xFD, 0x64, 0x80, 0x69, 0xC8, 0x6B, 0x80, 0x6A, 0xDD, 0x46, 0x80, 0x6B, 0xA8, 0x4D, 0x80, -0x6C, 0xC6, 0x63, 0x00, 0x6D, 0x88, 0x2F, 0x80, 0x6E, 0xA6, 0x45, 0x00, 0x6F, 0x68, 0x11, 0x80, -0x70, 0x86, 0x27, 0x00, 0x71, 0x51, 0x2E, 0x00, 0x72, 0x66, 0x09, 0x00, 0x73, 0x31, 0x10, 0x00, -0x74, 0x45, 0xEB, 0x00, 0x75, 0x10, 0xF2, 0x00, 0x76, 0x2F, 0x07, 0x80, 0x76, 0xF0, 0xD4, 0x00, -0x78, 0x0E, 0xE9, 0x80, 0x78, 0xD0, 0xB6, 0x00, 0x79, 0xEE, 0xCB, 0x80, 0x7A, 0xB0, 0x98, 0x00, -0x7B, 0xCE, 0xAD, 0x80, 0x7C, 0x99, 0xB4, 0x80, 0x7D, 0xAE, 0x8F, 0x80, 0x7E, 0x79, 0x96, 0x80, -0x7F, 0x8E, 0x71, 0x80, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x05, 0x04, 0x05, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x0A, 0x0B, 0x0C, 0x0D, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, -0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, -0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x38, 0x40, 0x01, 0x09, -0x00, 0x00, 0x2A, 0x30, 0x00, 0x0D, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0D, 0x00, 0x00, 0x38, 0x40, -0x01, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x11, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x16, 0x00, 0x00, -0x2A, 0x30, 0x01, 0x11, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x16, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, -0x45, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, -0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* Europe/Kiev */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1E, 0xAA, 0x19, 0xA7, 0x64, -0xB5, 0xA4, 0x19, 0x60, 0xCA, 0xCD, 0x2E, 0xD0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCE, 0xCD, 0xA8, 0x70, 0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, -0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, 0x19, 0xDB, 0x43, 0x40, -0x1A, 0xCC, 0x93, 0xD0, 0x1B, 0xBC, 0xA0, 0xF0, 0x1C, 0xAC, 0x91, 0xF0, 0x1D, 0x9C, 0x82, 0xF0, -0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, -0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, 0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, -0x25, 0x9E, 0x73, 0x50, 0x26, 0x8D, 0x2E, 0xF0, 0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xC4, 0xCF, 0x50, -0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50, 0x2D, 0x94, 0xB0, 0x60, 0x2E, 0x84, 0x93, 0x50, -0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, -0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, -0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, -0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, -0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, -0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x05, 0x03, 0x04, 0x03, 0x02, 0x06, -0x02, 0x06, 0x02, 0x06, 0x02, 0x06, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, -0x07, 0x02, 0x01, 0x09, 0x01, 0x09, 0x01, 0x09, 0x01, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x00, -0x00, 0x1C, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x00, -0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x10, 0x00, 0x00, 0x1C, -0x20, 0x01, 0x10, 0x00, 0x00, 0x38, 0x40, 0x01, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x08, 0x00, -0x00, 0x38, 0x40, 0x01, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, -0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, -0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, -0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Lisbon */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xDD, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x1B, 0x92, 0xE6, 0x97, 0x10, -0x9B, 0x4B, 0x6D, 0x70, 0x9B, 0xFE, 0xC7, 0x80, 0x9C, 0x9C, 0xED, 0x70, 0x9D, 0xC9, 0x83, 0x70, -0x9E, 0x7F, 0x72, 0x70, 0x9F, 0xAA, 0xB6, 0xF0, 0xA0, 0x5F, 0x54, 0x70, 0xA1, 0x8B, 0xEA, 0x70, -0xA2, 0x41, 0xD9, 0x70, 0xA3, 0x6E, 0x6F, 0x70, 0xA4, 0x23, 0x0C, 0xF0, 0xA5, 0x4F, 0xA2, 0xF0, -0xAA, 0x05, 0xEF, 0x70, 0xAA, 0xF4, 0x8E, 0xF0, 0xAD, 0xC9, 0xA7, 0xF0, 0xAE, 0xA7, 0x23, 0xF0, -0xAF, 0xA0, 0x4F, 0x70, 0xB0, 0x87, 0x05, 0xF0, 0xB1, 0x89, 0x6B, 0xF0, 0xB2, 0x70, 0x22, 0x70, -0xB3, 0x72, 0x88, 0x70, 0xB4, 0x50, 0x04, 0x70, 0xB7, 0x32, 0x4C, 0x70, 0xB8, 0x0F, 0xC8, 0x70, -0xB8, 0xFF, 0xB9, 0x70, 0xB9, 0xEF, 0xAA, 0x70, 0xBC, 0xC8, 0xB7, 0xF0, 0xBD, 0xB8, 0xA8, 0xF0, -0xBE, 0x9F, 0x5F, 0x70, 0xBF, 0x98, 0x8A, 0xF0, 0xC0, 0x9A, 0xF0, 0xF0, 0xC1, 0x78, 0x6C, 0xF0, -0xC2, 0x68, 0x5D, 0xF0, 0xC3, 0x58, 0x4E, 0xF0, 0xC4, 0x3F, 0x05, 0x70, 0xC5, 0x38, 0x30, 0xF0, -0xC6, 0x3A, 0x96, 0xF0, 0xC7, 0x58, 0xAC, 0x70, 0xC7, 0xD9, 0xDF, 0x70, 0xC9, 0x01, 0x2F, 0x70, -0xC9, 0xF1, 0x20, 0x70, 0xCA, 0xE2, 0x62, 0xF0, 0xCB, 0xB5, 0x52, 0xF0, 0xCB, 0xEC, 0xA3, 0xE0, -0xCC, 0x80, 0x4B, 0xE0, 0xCC, 0xDC, 0xA2, 0xF0, 0xCD, 0x95, 0x34, 0xF0, 0xCD, 0xC3, 0x4B, 0x60, -0xCE, 0x72, 0xA2, 0xE0, 0xCE, 0xC5, 0xBF, 0x70, 0xCF, 0x75, 0x16, 0xF0, 0xCF, 0xAC, 0x67, 0xE0, -0xD0, 0x52, 0x84, 0xE0, 0xD0, 0xA5, 0xA1, 0x70, 0xD1, 0x54, 0xF8, 0xF0, 0xD1, 0x8C, 0x49, 0xE0, -0xD2, 0x32, 0x66, 0xE0, 0xD2, 0x85, 0x83, 0x70, 0xD3, 0x59, 0xC4, 0xF0, 0xD4, 0x49, 0xB5, 0xF0, -0xD5, 0x39, 0xD1, 0x20, 0xD6, 0x29, 0xC2, 0x20, 0xD7, 0x19, 0xB3, 0x20, 0xD8, 0x09, 0xA4, 0x20, -0xD8, 0xF9, 0x95, 0x20, 0xD9, 0xE9, 0x86, 0x20, 0xDC, 0xB9, 0x59, 0x20, 0xDD, 0xB2, 0x84, 0xA0, -0xDE, 0xA2, 0x75, 0xA0, 0xDF, 0x92, 0x66, 0xA0, 0xE0, 0x82, 0x57, 0xA0, 0xE1, 0x72, 0x48, 0xA0, -0xE2, 0x62, 0x39, 0xA0, 0xE3, 0x52, 0x2A, 0xA0, 0xE4, 0x42, 0x1B, 0xA0, 0xE5, 0x32, 0x0C, 0xA0, -0xE6, 0x21, 0xFD, 0xA0, 0xE7, 0x1B, 0x29, 0x20, 0xE8, 0x0B, 0x1A, 0x20, 0xE8, 0xFB, 0x0B, 0x20, -0xE9, 0xEA, 0xFC, 0x20, 0xEA, 0xDA, 0xED, 0x20, 0xEB, 0xCA, 0xDE, 0x20, 0xEC, 0xBA, 0xCF, 0x20, -0xED, 0xAA, 0xC0, 0x20, 0xEE, 0x9A, 0xB1, 0x20, 0xEF, 0x8A, 0xA2, 0x20, 0xF0, 0x7A, 0x93, 0x20, -0xF1, 0x6A, 0x84, 0x20, 0xF2, 0x63, 0xAF, 0xA0, 0xF3, 0x53, 0xA0, 0xA0, 0xF4, 0x43, 0x91, 0xA0, -0xF5, 0x33, 0x82, 0xA0, 0xF6, 0x23, 0x73, 0xA0, 0xF7, 0x13, 0x64, 0xA0, 0xF8, 0x03, 0x55, 0xA0, -0xF8, 0xF3, 0x46, 0xA0, 0x0C, 0xAB, 0x2A, 0x00, 0x0D, 0x9B, 0x1B, 0x00, 0x0E, 0x8B, 0x0C, 0x00, -0x0F, 0x84, 0x37, 0x80, 0x10, 0x74, 0x28, 0x80, 0x11, 0x64, 0x19, 0x80, 0x12, 0x54, 0x18, 0x90, -0x13, 0x43, 0xFB, 0x80, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xBD, 0xA0, 0x19, 0xD3, 0xA0, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x02, 0x01, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, -0x05, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x06, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0xFF, 0xFF, 0xF7, -0x70, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, -0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x01, -0x0D, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x12, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x12, 0x00, 0x00, 0x1C, -0x20, 0x01, 0x16, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x4C, -0x4D, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x57, 0x45, 0x4D, 0x54, -0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, -0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, - - -/* Europe/Ljubljana */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x02, 0x35, 0xE0, -0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, -0xD0, 0x82, 0x25, 0x10, 0xD1, 0xA1, 0x8C, 0x10, 0xD2, 0x4E, 0x40, 0x90, 0x18, 0x45, 0x5F, 0x70, -0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, -0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, -0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, -0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, -0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, -0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, -0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, -0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, -0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, -0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, -0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, -0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, -0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, -0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, -0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, -0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/London */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xF2, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0D, 0x9B, 0x26, 0xAD, 0xA0, -0x9B, 0xD6, 0x05, 0x20, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0, -0x9F, 0x97, 0x1A, 0xA0, 0xA0, 0x85, 0xBA, 0x20, 0xA1, 0x76, 0xFC, 0xA0, 0xA2, 0x65, 0x9C, 0x20, -0xA3, 0x7B, 0xC8, 0xA0, 0xA4, 0x4E, 0xB8, 0xA0, 0xA5, 0x3F, 0xFB, 0x20, 0xA6, 0x25, 0x60, 0x20, -0xA7, 0x27, 0xC6, 0x20, 0xA8, 0x2A, 0x2C, 0x20, 0xA8, 0xEB, 0xF8, 0xA0, 0xAA, 0x00, 0xD3, 0xA0, -0xAA, 0xD5, 0x15, 0x20, 0xAB, 0xE9, 0xF0, 0x20, 0xAC, 0xC7, 0x6C, 0x20, 0xAD, 0xC9, 0xD2, 0x20, -0xAE, 0xA7, 0x4E, 0x20, 0xAF, 0xA0, 0x79, 0xA0, 0xB0, 0x87, 0x30, 0x20, 0xB1, 0x92, 0xD0, 0xA0, -0xB2, 0x70, 0x4C, 0xA0, 0xB3, 0x72, 0xB2, 0xA0, 0xB4, 0x50, 0x2E, 0xA0, 0xB5, 0x49, 0x5A, 0x20, -0xB6, 0x30, 0x10, 0xA0, 0xB7, 0x32, 0x76, 0xA0, 0xB8, 0x0F, 0xF2, 0xA0, 0xB9, 0x12, 0x58, 0xA0, -0xB9, 0xEF, 0xD4, 0xA0, 0xBA, 0xE9, 0x00, 0x20, 0xBB, 0xD8, 0xF1, 0x20, 0xBC, 0xDB, 0x57, 0x20, -0xBD, 0xB8, 0xD3, 0x20, 0xBE, 0xB1, 0xFE, 0xA0, 0xBF, 0x98, 0xB5, 0x20, 0xC0, 0x9B, 0x1B, 0x20, -0xC1, 0x78, 0x97, 0x20, 0xC2, 0x7A, 0xFD, 0x20, 0xC3, 0x58, 0x79, 0x20, 0xC4, 0x51, 0xA4, 0xA0, -0xC5, 0x38, 0x5B, 0x20, 0xC6, 0x3A, 0xC1, 0x20, 0xC7, 0x58, 0xD6, 0xA0, 0xC7, 0xDA, 0x09, 0xA0, -0xCA, 0x16, 0x26, 0x90, 0xCA, 0x97, 0x59, 0x90, 0xCB, 0xD1, 0x1E, 0x90, 0xCC, 0x77, 0x3B, 0x90, -0xCD, 0xB1, 0x00, 0x90, 0xCE, 0x60, 0x58, 0x10, 0xCF, 0x90, 0xE2, 0x90, 0xD0, 0x6E, 0x5E, 0x90, -0xD1, 0x72, 0x16, 0x10, 0xD1, 0xFB, 0x32, 0x10, 0xD2, 0x69, 0xFE, 0x20, 0xD3, 0x63, 0x29, 0xA0, -0xD4, 0x49, 0xE0, 0x20, 0xD5, 0x1E, 0x21, 0xA0, 0xD5, 0x42, 0xFD, 0x90, 0xD5, 0xDF, 0xE0, 0x10, -0xD6, 0x4E, 0xAC, 0x20, 0xD6, 0xFE, 0x03, 0xA0, 0xD8, 0x2E, 0x8E, 0x20, 0xD8, 0xF9, 0x95, 0x20, -0xDA, 0x0E, 0x70, 0x20, 0xDA, 0xEB, 0xEC, 0x20, 0xDB, 0xE5, 0x17, 0xA0, 0xDC, 0xCB, 0xCE, 0x20, -0xDD, 0xC4, 0xF9, 0xA0, 0xDE, 0xB4, 0xEA, 0xA0, 0xDF, 0xAE, 0x16, 0x20, 0xE0, 0x94, 0xCC, 0xA0, -0xE1, 0x72, 0x48, 0xA0, 0xE2, 0x6B, 0x74, 0x20, 0xE3, 0x52, 0x2A, 0xA0, 0xE4, 0x54, 0x90, 0xA0, -0xE5, 0x32, 0x0C, 0xA0, 0xE6, 0x3D, 0xAD, 0x20, 0xE7, 0x1B, 0x29, 0x20, 0xE8, 0x14, 0x54, 0xA0, -0xE8, 0xFB, 0x0B, 0x20, 0xE9, 0xFD, 0x71, 0x20, 0xEA, 0xDA, 0xED, 0x20, 0xEB, 0xDD, 0x53, 0x20, -0xEC, 0xBA, 0xCF, 0x20, 0xED, 0xB3, 0xFA, 0xA0, 0xEE, 0x9A, 0xB1, 0x20, 0xEF, 0x81, 0x67, 0xA0, -0xF0, 0x9F, 0x7D, 0x20, 0xF1, 0x61, 0x49, 0xA0, 0xF2, 0x7F, 0x5F, 0x20, 0xF3, 0x4A, 0x66, 0x20, -0xF4, 0x5F, 0x41, 0x20, 0xF5, 0x21, 0x0D, 0xA0, 0xF6, 0x3F, 0x23, 0x20, 0xF7, 0x00, 0xEF, 0xA0, -0xF8, 0x1F, 0x05, 0x20, 0xF8, 0xE0, 0xD1, 0xA0, 0xF9, 0xFE, 0xE7, 0x20, 0xFA, 0xC0, 0xB3, 0xA0, -0xFB, 0xE8, 0x03, 0xA0, 0xFC, 0x7B, 0xAB, 0xA0, 0xFD, 0xC7, 0xBB, 0x70, 0x03, 0x70, 0xC6, 0x20, -0x04, 0x29, 0x58, 0x20, 0x05, 0x50, 0xA8, 0x20, 0x06, 0x09, 0x3A, 0x20, 0x07, 0x30, 0x8A, 0x20, -0x07, 0xE9, 0x1C, 0x20, 0x09, 0x10, 0x6C, 0x20, 0x09, 0xC8, 0xFE, 0x20, 0x0A, 0xF0, 0x4E, 0x20, -0x0B, 0xB2, 0x1A, 0xA0, 0x0C, 0xD0, 0x30, 0x20, 0x0D, 0x91, 0xFC, 0xA0, 0x0E, 0xB0, 0x12, 0x20, -0x0F, 0x71, 0xDE, 0xA0, 0x10, 0x99, 0x2E, 0xA0, 0x11, 0x51, 0xC0, 0xA0, 0x12, 0x79, 0x10, 0xA0, -0x13, 0x31, 0xA2, 0xA0, 0x14, 0x58, 0xF2, 0xA0, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x38, 0xC6, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x18, 0x18, 0xA8, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xF8, 0x8A, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xE1, 0xA7, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0xC1, 0x89, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0xA1, 0x6B, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x81, 0x4D, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x61, 0x2F, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x4A, 0x4B, 0x90, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x2A, 0x2D, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x29, 0x0A, 0x0F, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xE9, 0xF1, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xC9, 0xD3, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0xA9, 0xB5, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x89, 0x97, 0x90, -0x30, 0xE7, 0x24, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, -0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, -0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, -0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, -0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, -0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, -0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, -0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, -0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, -0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, -0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, -0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, -0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, -0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, -0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, -0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, -0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, -0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, -0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, -0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, -0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, -0x7F, 0x8E, 0x7F, 0x90, 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, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, -0x00, 0x01, 0x00, 0x02, 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, 0x03, -0x05, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x06, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, -0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, -0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x01, 0x01, 0x01, -0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, - -/* Europe/Luxembourg */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xB8, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x16, 0x84, 0xA2, 0xAD, 0xBC, -0x9B, 0x1E, 0x8C, 0x60, 0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xEA, 0xA7, 0xE0, 0x9D, 0xA4, 0x99, 0x70, -0x9E, 0xB9, 0x90, 0x90, 0x9F, 0x84, 0x97, 0x90, 0x9F, 0xE0, 0xC4, 0x70, 0xA0, 0x60, 0xA5, 0xF0, -0xA1, 0x7E, 0xE5, 0xA0, 0xA2, 0x2E, 0x12, 0xF0, 0xA3, 0x7A, 0x69, 0x10, 0xA4, 0x35, 0x81, 0xF0, -0xA5, 0x5E, 0x3F, 0x90, 0xA6, 0x25, 0x35, 0xF0, 0xA7, 0x27, 0xAA, 0x00, 0xA8, 0x2A, 0x01, 0xF0, -0xA9, 0x07, 0x9A, 0x10, 0xA9, 0xEE, 0x34, 0x70, 0xAA, 0xE7, 0x6E, 0x00, 0xAB, 0xD8, 0xA2, 0x70, -0xAC, 0xC7, 0x50, 0x00, 0xAD, 0xC9, 0xA7, 0xF0, 0xAE, 0xA7, 0x32, 0x00, 0xAF, 0xA0, 0x4F, 0x70, -0xB0, 0x87, 0x14, 0x00, 0xB1, 0x89, 0x6B, 0xF0, 0xB2, 0x70, 0x30, 0x80, 0xB3, 0x72, 0x88, 0x70, -0xB4, 0x50, 0x2E, 0xA0, 0xB5, 0x49, 0x5A, 0x20, 0xB6, 0x30, 0x10, 0xA0, 0xB7, 0x32, 0x76, 0xA0, -0xB8, 0x0F, 0xF2, 0xA0, 0xB8, 0xFF, 0xE3, 0xA0, 0xB9, 0xEF, 0xD4, 0xA0, 0xBA, 0xD6, 0x8B, 0x20, -0xBB, 0xD8, 0xF1, 0x20, 0xBC, 0xC8, 0xE2, 0x20, 0xBD, 0xB8, 0xD3, 0x20, 0xBE, 0x9F, 0x89, 0xA0, -0xBF, 0x98, 0xB5, 0x20, 0xC0, 0x9B, 0x1B, 0x20, 0xC1, 0x78, 0x97, 0x20, 0xC2, 0x68, 0x88, 0x20, -0xC3, 0x58, 0x79, 0x20, 0xC4, 0x3F, 0x2F, 0xA0, 0xC5, 0x38, 0x5B, 0x20, 0xC6, 0x3A, 0xC1, 0x20, -0xC7, 0x58, 0xD6, 0xA0, 0xC7, 0xDA, 0x09, 0xA0, 0xC8, 0x42, 0x30, 0x20, 0xCC, 0xE7, 0x4B, 0x10, -0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x6F, 0xB0, 0x10, -0xD1, 0x72, 0x16, 0x10, 0xD2, 0x4E, 0x40, 0x90, 0xD3, 0x91, 0x40, 0x10, 0xD4, 0x4B, 0x23, 0x90, -0x0D, 0x2A, 0xFD, 0x70, 0x0D, 0xA4, 0x63, 0x90, 0x0E, 0x8B, 0x1A, 0x10, 0x0F, 0x84, 0x45, 0x90, -0x10, 0x74, 0x36, 0x90, 0x11, 0x64, 0x27, 0x90, 0x12, 0x54, 0x18, 0x90, 0x13, 0x4D, 0x44, 0x10, -0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, -0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, -0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, -0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, -0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, -0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, -0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, -0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, -0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, -0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, -0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, -0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, -0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, -0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, -0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, -0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, -0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, -0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, -0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, -0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, -0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, -0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, -0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, -0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, -0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, -0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, -0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, -0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, -0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x02, 0x01, 0x02, 0x01, -0x02, 0x03, 0x04, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, -0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x0B, -0x09, 0x0A, 0x09, 0x0A, 0x02, 0x03, 0x04, 0x03, 0x04, 0x02, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, -0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, -0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, -0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, -0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, -0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, -0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, -0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, -0x0C, 0x0D, 0x0C, 0x0D, 0x00, 0x00, 0x05, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, -0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, -0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, -0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x0D, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x12, -0x00, 0x00, 0x1C, 0x20, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, -0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, -0x00, 0x43, 0x45, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x00, 0x00, -0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Madrid */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xA3, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x17, 0x9C, 0xF3, 0xF0, 0x70, -0x9D, 0xBE, 0xF7, 0x70, 0x9E, 0xBA, 0xC5, 0xF0, 0x9F, 0xA0, 0x2A, 0xF0, 0xA0, 0x8E, 0xCA, 0x70, -0xA1, 0x81, 0x5E, 0x70, 0xAA, 0x05, 0xEF, 0x70, 0xAA, 0xE7, 0x5F, 0xF0, 0xAD, 0xC9, 0xA7, 0xF0, -0xAE, 0xA7, 0x23, 0xF0, 0xAF, 0xA0, 0x4F, 0x70, 0xB0, 0x87, 0x05, 0xF0, 0xB1, 0x89, 0x6B, 0xF0, -0xB2, 0x70, 0x22, 0x70, 0xB3, 0x72, 0x88, 0x70, 0xB4, 0x50, 0x04, 0x70, 0xC2, 0xA8, 0xF7, 0x70, -0xC3, 0x58, 0x4E, 0xF0, 0xC4, 0x39, 0xBF, 0x70, 0xC5, 0x38, 0x30, 0xF0, 0xC6, 0x3A, 0x96, 0xF0, -0xC7, 0x21, 0x4D, 0x70, 0xC7, 0xF5, 0x8E, 0xF0, 0xCB, 0xF5, 0xDE, 0x60, 0xCC, 0x96, 0xB5, 0x60, -0xCD, 0xC3, 0x4B, 0x60, 0xCE, 0xA2, 0x18, 0xE0, 0xCF, 0xA3, 0x2D, 0x60, 0xD0, 0x8D, 0xD8, 0x60, -0xD1, 0x83, 0x0F, 0x60, 0xD2, 0x60, 0x99, 0x70, 0xD3, 0x62, 0xF1, 0x60, 0xD4, 0x41, 0xBE, 0xE0, -0xD9, 0x1E, 0x46, 0xE0, 0xD9, 0xE6, 0xB8, 0xF0, 0x08, 0x0D, 0xCD, 0xE0, 0x08, 0xF4, 0x92, 0x70, -0x09, 0xF6, 0xEA, 0x60, 0x0A, 0xD4, 0x74, 0x70, 0x0B, 0xBB, 0x1C, 0xE0, 0x0C, 0xAB, 0x1B, 0xF0, -0x0D, 0xA4, 0x39, 0x60, 0x0E, 0x8A, 0xFD, 0xF0, 0x0F, 0x85, 0x6C, 0xE0, 0x10, 0x74, 0x1A, 0x70, -0x11, 0x64, 0x27, 0x90, 0x12, 0x54, 0x18, 0x90, 0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, -0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, -0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, -0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, -0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, -0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, -0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, -0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, -0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, -0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, -0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, -0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, -0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, -0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, -0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, -0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x03, 0x02, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x00, 0x00, 0x0E, 0x10, 0x01, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x09, 0x00, 0x00, 0x0E, -0x10, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x0E, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x13, 0x00, -0x00, 0x1C, 0x20, 0x01, 0x0E, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x13, 0x57, 0x45, 0x53, 0x54, 0x00, -0x57, 0x45, 0x54, 0x00, 0x57, 0x45, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, -0x54, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x01, - -/* Europe/Malta */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xA8, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x37, 0xA6, 0xF0, -0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xC5, 0xCB, 0xF0, 0x9D, 0xB5, 0xBC, 0xF0, 0x9E, 0x89, 0xFE, 0x70, -0x9F, 0x9E, 0xD9, 0x70, 0xA0, 0x60, 0xA5, 0xF0, 0xA1, 0x7E, 0xBB, 0x70, 0xA2, 0x5C, 0x37, 0x70, -0xA3, 0x4C, 0x28, 0x70, 0xC8, 0x6C, 0x35, 0xF0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, 0xD1, 0x72, 0x16, 0x10, -0xD2, 0x4C, 0xD2, 0xF0, 0xD3, 0x3E, 0x31, 0x90, 0xD4, 0x49, 0xD2, 0x10, 0xD5, 0x1D, 0xF7, 0x70, -0xD6, 0x29, 0x97, 0xF0, 0xD6, 0xEB, 0x80, 0x90, 0xD8, 0x09, 0x96, 0x10, 0xF9, 0x33, 0xB5, 0xF0, -0xF9, 0xD9, 0xC4, 0xE0, 0xFB, 0x1C, 0xD2, 0x70, 0xFB, 0xB9, 0xA6, 0xE0, 0xFC, 0xFC, 0xB4, 0x70, -0xFD, 0x99, 0x88, 0xE0, 0xFE, 0xE5, 0xD0, 0xF0, 0xFF, 0x82, 0xA5, 0x60, 0x00, 0xC5, 0xB2, 0xF0, -0x01, 0x62, 0x87, 0x60, 0x02, 0x9C, 0x5A, 0x70, 0x03, 0x42, 0x77, 0x70, 0x04, 0x85, 0x76, 0xF0, -0x05, 0x2B, 0x85, 0xE0, 0x06, 0x1A, 0x33, 0x70, 0x07, 0x0A, 0x24, 0x70, 0x08, 0x17, 0x16, 0x70, -0x08, 0xDA, 0x34, 0x70, 0x09, 0xF7, 0x14, 0x90, 0x0A, 0xC2, 0x0D, 0x80, 0x0B, 0xD6, 0xF6, 0x90, -0x0C, 0xA1, 0xEF, 0x80, 0x0D, 0xB6, 0xD8, 0x90, 0x0E, 0x81, 0xD1, 0x80, 0x0F, 0x96, 0xBA, 0x90, -0x10, 0x61, 0xB3, 0x80, 0x11, 0x76, 0x9C, 0x90, 0x12, 0x41, 0x95, 0x80, 0x13, 0x45, 0x5B, 0x10, -0x14, 0x2A, 0xB2, 0x00, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, -0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, -0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, -0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, -0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, -0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, -0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, -0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, -0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, -0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, -0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, -0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, -0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, -0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, -0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, -0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, -0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, -0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, -0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, -0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, -0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, -0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, -0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, -0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, -0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, -0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, -0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, -0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, -0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x00, 0x01, 0x00, 0x01, -0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x01, -0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, -0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, -0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, -0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Mariehamn */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0xA4, 0x73, 0x6F, 0x18, -0xCB, 0xCE, 0x51, 0x60, 0xCC, 0xBF, 0x85, 0xD0, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x02, 0x01, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x00, 0x00, 0x17, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, -0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, -0x20, 0x00, 0x09, 0x48, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Minsk */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x1E, 0xAA, 0x19, 0xAA, 0x38, -0xB5, 0xA4, 0x19, 0x60, 0xCA, 0x5E, 0x70, 0xD0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x0A, 0x02, 0x60, 0x15, 0x27, 0xA7, 0xD0, -0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, -0x19, 0xDB, 0x43, 0x40, 0x1A, 0xCC, 0x93, 0xD0, 0x1B, 0xBC, 0xA0, 0xF0, 0x1C, 0xAC, 0x91, 0xF0, -0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, -0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, 0x24, 0x2C, 0x19, 0xF0, -0x25, 0x1C, 0x0A, 0xF0, 0x25, 0x9E, 0x73, 0x50, 0x27, 0xF5, 0x18, 0x70, 0x28, 0xE5, 0x17, 0x80, -0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xC4, 0xDD, 0x60, 0x2B, 0xB4, 0xEA, 0x80, 0x2C, 0xA4, 0xDB, 0x80, -0x2D, 0x94, 0xCC, 0x80, 0x2E, 0x84, 0xBD, 0x80, 0x2F, 0x74, 0xAE, 0x80, 0x30, 0x64, 0x9F, 0x80, -0x31, 0x5D, 0xCB, 0x00, 0x32, 0x72, 0xA6, 0x00, 0x33, 0x3D, 0xAD, 0x00, 0x34, 0x52, 0x88, 0x00, -0x35, 0x1D, 0x8F, 0x00, 0x36, 0x32, 0x6A, 0x00, 0x36, 0xFD, 0x71, 0x00, 0x38, 0x1B, 0x86, 0x80, -0x38, 0xDD, 0x53, 0x00, 0x39, 0xFB, 0x68, 0x80, 0x3A, 0xBD, 0x35, 0x00, 0x3B, 0xDB, 0x4A, 0x80, -0x3C, 0xA6, 0x51, 0x80, 0x3D, 0xBB, 0x2C, 0x80, 0x3E, 0x86, 0x33, 0x80, 0x3F, 0x9B, 0x0E, 0x80, -0x40, 0x66, 0x15, 0x80, 0x41, 0x84, 0x2B, 0x00, 0x42, 0x45, 0xF7, 0x80, 0x43, 0x64, 0x0D, 0x00, -0x44, 0x25, 0xD9, 0x80, 0x45, 0x43, 0xEF, 0x00, 0x46, 0x05, 0xBB, 0x80, 0x47, 0x23, 0xD1, 0x00, -0x47, 0xEE, 0xD8, 0x00, 0x49, 0x03, 0xB3, 0x00, 0x49, 0xCE, 0xBA, 0x00, 0x4A, 0xE3, 0x95, 0x00, -0x4B, 0xAE, 0x9C, 0x00, 0x4C, 0xCC, 0xB1, 0x80, 0x4D, 0x8E, 0x7E, 0x00, 0x4E, 0xAC, 0x93, 0x80, -0x4F, 0x6E, 0x60, 0x00, 0x50, 0x8C, 0x75, 0x80, 0x51, 0x57, 0x7C, 0x80, 0x52, 0x6C, 0x57, 0x80, -0x53, 0x37, 0x5E, 0x80, 0x54, 0x4C, 0x39, 0x80, 0x55, 0x17, 0x40, 0x80, 0x56, 0x2C, 0x1B, 0x80, -0x56, 0xF7, 0x22, 0x80, 0x58, 0x15, 0x38, 0x00, 0x58, 0xD7, 0x04, 0x80, 0x59, 0xF5, 0x1A, 0x00, -0x5A, 0xB6, 0xE6, 0x80, 0x5B, 0xD4, 0xFC, 0x00, 0x5C, 0xA0, 0x03, 0x00, 0x5D, 0xB4, 0xDE, 0x00, -0x5E, 0x7F, 0xE5, 0x00, 0x5F, 0x94, 0xC0, 0x00, 0x60, 0x5F, 0xC7, 0x00, 0x61, 0x7D, 0xDC, 0x80, -0x62, 0x3F, 0xA9, 0x00, 0x63, 0x5D, 0xBE, 0x80, 0x64, 0x1F, 0x8B, 0x00, 0x65, 0x3D, 0xA0, 0x80, -0x66, 0x08, 0xA7, 0x80, 0x67, 0x1D, 0x82, 0x80, 0x67, 0xE8, 0x89, 0x80, 0x68, 0xFD, 0x64, 0x80, -0x69, 0xC8, 0x6B, 0x80, 0x6A, 0xDD, 0x46, 0x80, 0x6B, 0xA8, 0x4D, 0x80, 0x6C, 0xC6, 0x63, 0x00, -0x6D, 0x88, 0x2F, 0x80, 0x6E, 0xA6, 0x45, 0x00, 0x6F, 0x68, 0x11, 0x80, 0x70, 0x86, 0x27, 0x00, -0x71, 0x51, 0x2E, 0x00, 0x72, 0x66, 0x09, 0x00, 0x73, 0x31, 0x10, 0x00, 0x74, 0x45, 0xEB, 0x00, -0x75, 0x10, 0xF2, 0x00, 0x76, 0x2F, 0x07, 0x80, 0x76, 0xF0, 0xD4, 0x00, 0x78, 0x0E, 0xE9, 0x80, -0x78, 0xD0, 0xB6, 0x00, 0x79, 0xEE, 0xCB, 0x80, 0x7A, 0xB0, 0x98, 0x00, 0x7B, 0xCE, 0xAD, 0x80, -0x7C, 0x99, 0xB4, 0x80, 0x7D, 0xAE, 0x8F, 0x80, 0x7E, 0x79, 0x96, 0x80, 0x7F, 0x8E, 0x71, 0x80, -0x01, 0x02, 0x05, 0x03, 0x04, 0x03, 0x04, 0x02, 0x06, 0x02, 0x06, 0x02, 0x06, 0x02, 0x06, 0x07, -0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x02, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x00, 0x00, 0x19, 0xC8, 0x00, 0x00, 0x00, -0x00, 0x1C, 0x20, 0x00, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, -0x0C, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x10, 0x00, 0x00, 0x38, -0x40, 0x01, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x08, 0x00, 0x00, 0x38, 0x40, 0x01, 0x15, 0x00, -0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x4D, 0x4D, 0x54, 0x00, 0x45, -0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, -0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, -0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Europe/Monaco */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xB8, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x1B, 0x91, 0x60, 0x50, 0x4F, -0x9B, 0x47, 0x78, 0xF0, 0x9B, 0xD7, 0x2C, 0x70, 0x9C, 0xBC, 0x91, 0x70, 0x9D, 0xC0, 0x48, 0xF0, -0x9E, 0x89, 0xFE, 0x70, 0x9F, 0xA0, 0x2A, 0xF0, 0xA0, 0x60, 0xA5, 0xF0, 0xA1, 0x80, 0x0C, 0xF0, -0xA2, 0x2E, 0x12, 0xF0, 0xA3, 0x7A, 0x4C, 0xF0, 0xA4, 0x35, 0x81, 0xF0, 0xA5, 0x5E, 0x23, 0x70, -0xA6, 0x25, 0x35, 0xF0, 0xA7, 0x27, 0x9B, 0xF0, 0xA8, 0x58, 0x26, 0x70, 0xA9, 0x07, 0x7D, 0xF0, -0xA9, 0xEE, 0x34, 0x70, 0xAA, 0xE7, 0x5F, 0xF0, 0xAB, 0xD7, 0x50, 0xF0, 0xAC, 0xC7, 0x41, 0xF0, -0xAD, 0xC9, 0xA7, 0xF0, 0xAE, 0xA7, 0x23, 0xF0, 0xAF, 0xA0, 0x4F, 0x70, 0xB0, 0x87, 0x05, 0xF0, -0xB1, 0x89, 0x6B, 0xF0, 0xB2, 0x70, 0x22, 0x70, 0xB3, 0x72, 0x88, 0x70, 0xB4, 0x50, 0x04, 0x70, -0xB5, 0x49, 0x2F, 0xF0, 0xB6, 0x2F, 0xE6, 0x70, 0xB7, 0x32, 0x4C, 0x70, 0xB8, 0x0F, 0xC8, 0x70, -0xB8, 0xFF, 0xB9, 0x70, 0xB9, 0xEF, 0xAA, 0x70, 0xBA, 0xD6, 0x60, 0xF0, 0xBB, 0xD8, 0xC6, 0xF0, -0xBC, 0xC8, 0xB7, 0xF0, 0xBD, 0xB8, 0xA8, 0xF0, 0xBE, 0x9F, 0x5F, 0x70, 0xBF, 0x98, 0x8A, 0xF0, -0xC0, 0x9A, 0xF0, 0xF0, 0xC1, 0x78, 0x6C, 0xF0, 0xC2, 0x68, 0x5D, 0xF0, 0xC3, 0x58, 0x4E, 0xF0, -0xC4, 0x3F, 0x05, 0x70, 0xC5, 0x38, 0x30, 0xF0, 0xC6, 0x3A, 0x96, 0xF0, 0xC7, 0x58, 0xAC, 0x70, -0xC7, 0xDA, 0x09, 0xA0, 0xCA, 0x17, 0x5B, 0xF0, 0xCA, 0xE2, 0x54, 0xE0, 0xCB, 0xAD, 0x69, 0xF0, -0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, -0xD0, 0x89, 0xF1, 0xF0, 0xD1, 0x72, 0x16, 0x10, 0xD2, 0x4E, 0x40, 0x90, 0x0B, 0xBB, 0x39, 0x00, -0x0C, 0xAB, 0x1B, 0xF0, 0x0D, 0xA4, 0x63, 0x90, 0x0E, 0x8B, 0x1A, 0x10, 0x0F, 0x84, 0x45, 0x90, -0x10, 0x74, 0x36, 0x90, 0x11, 0x64, 0x27, 0x90, 0x12, 0x54, 0x18, 0x90, 0x13, 0x4D, 0x44, 0x10, -0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, -0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, -0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, -0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, -0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, -0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, -0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, -0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, -0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, -0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, -0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, -0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, -0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, -0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, -0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, -0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, -0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, -0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, -0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, -0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, -0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, -0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, -0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, -0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, -0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, -0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, -0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, -0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, -0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x05, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x07, 0x06, 0x07, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x00, 0x00, 0x02, 0x31, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, -0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, -0x01, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x12, 0x00, 0x00, -0x0E, 0x10, 0x00, 0x17, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x12, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x17, -0x50, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x57, 0x45, 0x4D, -0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Moscow */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1E, 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, -0xB5, 0xA4, 0x19, 0x60, 0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, -0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, 0x19, 0xDB, 0x43, 0x40, 0x1A, 0xCC, 0x93, 0xD0, -0x1B, 0xBC, 0xA0, 0xF0, 0x1C, 0xAC, 0x91, 0xF0, 0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, -0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, -0x23, 0x3C, 0x28, 0xF0, 0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x0B, 0xFB, 0xF0, -0x27, 0x05, 0x27, 0x70, 0x27, 0xF5, 0x18, 0x70, 0x28, 0xE5, 0x17, 0x80, 0x29, 0x78, 0xBF, 0x80, -0x29, 0xD4, 0xD0, 0x40, 0x2A, 0xC4, 0xB3, 0x30, 0x2B, 0xB4, 0xDC, 0x70, 0x2C, 0xA4, 0xCD, 0x70, -0x2D, 0x94, 0xBE, 0x70, 0x2E, 0x84, 0xAF, 0x70, 0x2F, 0x74, 0xA0, 0x70, 0x30, 0x64, 0x91, 0x70, -0x31, 0x5D, 0xBC, 0xF0, 0x32, 0x72, 0x97, 0xF0, 0x33, 0x3D, 0x9E, 0xF0, 0x34, 0x52, 0x79, 0xF0, -0x35, 0x1D, 0x80, 0xF0, 0x36, 0x32, 0x5B, 0xF0, 0x36, 0xFD, 0x62, 0xF0, 0x38, 0x1B, 0x78, 0x70, -0x38, 0xDD, 0x44, 0xF0, 0x39, 0xFB, 0x5A, 0x70, 0x3A, 0xBD, 0x26, 0xF0, 0x3B, 0xDB, 0x3C, 0x70, -0x3C, 0xA6, 0x43, 0x70, 0x3D, 0xBB, 0x1E, 0x70, 0x3E, 0x86, 0x25, 0x70, 0x3F, 0x9B, 0x00, 0x70, -0x40, 0x66, 0x07, 0x70, 0x41, 0x84, 0x1C, 0xF0, 0x42, 0x45, 0xE9, 0x70, 0x43, 0x63, 0xFE, 0xF0, -0x44, 0x25, 0xCB, 0x70, 0x45, 0x43, 0xE0, 0xF0, 0x46, 0x05, 0xAD, 0x70, 0x47, 0x23, 0xC2, 0xF0, -0x47, 0xEE, 0xC9, 0xF0, 0x49, 0x03, 0xA4, 0xF0, 0x49, 0xCE, 0xAB, 0xF0, 0x4A, 0xE3, 0x86, 0xF0, -0x4B, 0xAE, 0x8D, 0xF0, 0x4C, 0xCC, 0xA3, 0x70, 0x4D, 0x8E, 0x6F, 0xF0, 0x4E, 0xAC, 0x85, 0x70, -0x4F, 0x6E, 0x51, 0xF0, 0x50, 0x8C, 0x67, 0x70, 0x51, 0x57, 0x6E, 0x70, 0x52, 0x6C, 0x49, 0x70, -0x53, 0x37, 0x50, 0x70, 0x54, 0x4C, 0x2B, 0x70, 0x55, 0x17, 0x32, 0x70, 0x56, 0x2C, 0x0D, 0x70, -0x56, 0xF7, 0x14, 0x70, 0x58, 0x15, 0x29, 0xF0, 0x58, 0xD6, 0xF6, 0x70, 0x59, 0xF5, 0x0B, 0xF0, -0x5A, 0xB6, 0xD8, 0x70, 0x5B, 0xD4, 0xED, 0xF0, 0x5C, 0x9F, 0xF4, 0xF0, 0x5D, 0xB4, 0xCF, 0xF0, -0x5E, 0x7F, 0xD6, 0xF0, 0x5F, 0x94, 0xB1, 0xF0, 0x60, 0x5F, 0xB8, 0xF0, 0x61, 0x7D, 0xCE, 0x70, -0x62, 0x3F, 0x9A, 0xF0, 0x63, 0x5D, 0xB0, 0x70, 0x64, 0x1F, 0x7C, 0xF0, 0x65, 0x3D, 0x92, 0x70, -0x66, 0x08, 0x99, 0x70, 0x67, 0x1D, 0x74, 0x70, 0x67, 0xE8, 0x7B, 0x70, 0x68, 0xFD, 0x56, 0x70, -0x69, 0xC8, 0x5D, 0x70, 0x6A, 0xDD, 0x38, 0x70, 0x6B, 0xA8, 0x3F, 0x70, 0x6C, 0xC6, 0x54, 0xF0, -0x6D, 0x88, 0x21, 0x70, 0x6E, 0xA6, 0x36, 0xF0, 0x6F, 0x68, 0x03, 0x70, 0x70, 0x86, 0x18, 0xF0, -0x71, 0x51, 0x1F, 0xF0, 0x72, 0x65, 0xFA, 0xF0, 0x73, 0x31, 0x01, 0xF0, 0x74, 0x45, 0xDC, 0xF0, -0x75, 0x10, 0xE3, 0xF0, 0x76, 0x2E, 0xF9, 0x70, 0x76, 0xF0, 0xC5, 0xF0, 0x78, 0x0E, 0xDB, 0x70, -0x78, 0xD0, 0xA7, 0xF0, 0x79, 0xEE, 0xBD, 0x70, 0x7A, 0xB0, 0x89, 0xF0, 0x7B, 0xCE, 0x9F, 0x70, -0x7C, 0x99, 0xA6, 0x70, 0x7D, 0xAE, 0x81, 0x70, 0x7E, 0x79, 0x88, 0x70, 0x7F, 0x8E, 0x63, 0x70, -0x02, 0x01, 0x02, 0x03, 0x01, 0x03, 0x05, 0x04, 0x05, 0x06, 0x05, 0x04, 0x07, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x0A, 0x0B, 0x08, 0x05, 0x04, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Europe/Nicosia */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0xA5, 0x77, 0x1E, 0xB8, -0x09, 0xED, 0xAF, 0xE0, 0x0A, 0xDD, 0x92, 0xD0, 0x0B, 0xFA, 0x64, 0xE0, 0x0C, 0xBE, 0xC6, 0x50, -0x0D, 0xA4, 0x39, 0x60, 0x0E, 0x8A, 0xE1, 0xD0, 0x0F, 0x84, 0x1B, 0x60, 0x10, 0x75, 0x4F, 0xD0, -0x11, 0x63, 0xFD, 0x60, 0x12, 0x53, 0xE0, 0x50, 0x13, 0x4D, 0x19, 0xE0, 0x14, 0x33, 0xC2, 0x50, -0x15, 0x23, 0xC1, 0x60, 0x16, 0x13, 0xA4, 0x50, 0x17, 0x03, 0xA3, 0x60, 0x17, 0xF3, 0x86, 0x50, -0x18, 0xE3, 0x85, 0x60, 0x19, 0xD3, 0x68, 0x50, 0x1A, 0xC3, 0x67, 0x60, 0x1B, 0xBC, 0x84, 0xD0, -0x1C, 0xAC, 0x83, 0xE0, 0x1D, 0x9C, 0x66, 0xD0, 0x1E, 0x8C, 0x65, 0xE0, 0x1F, 0x7C, 0x48, 0xD0, -0x20, 0x6C, 0x47, 0xE0, 0x21, 0x5C, 0x2A, 0xD0, 0x22, 0x4C, 0x29, 0xE0, 0x23, 0x3C, 0x0C, 0xD0, -0x24, 0x2C, 0x0B, 0xE0, 0x25, 0x1B, 0xEE, 0xD0, 0x26, 0x0B, 0xED, 0xE0, 0x27, 0x05, 0x0B, 0x50, -0x27, 0xF5, 0x0A, 0x60, 0x28, 0xE4, 0xED, 0x50, 0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xC4, 0xCF, 0x50, -0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50, 0x2D, 0x94, 0xB0, 0x60, 0x2E, 0x84, 0x93, 0x50, -0x2F, 0x74, 0x92, 0x60, 0x30, 0x64, 0x75, 0x50, 0x31, 0x5D, 0xAE, 0xE0, 0x32, 0x4D, 0x91, 0xD0, -0x33, 0x3D, 0x90, 0xE0, 0x34, 0x2D, 0x73, 0xD0, 0x35, 0x1D, 0x72, 0xE0, 0x36, 0x32, 0x78, 0x10, -0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, -0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, -0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, -0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x00, 0x00, 0x1F, 0x48, 0x00, 0x00, 0x00, 0x00, 0x2A, -0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, -0x00, 0x2A, 0x30, 0x01, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, -0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Oslo */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x27, 0xE3, 0x00, -0x9B, 0xD4, 0x7B, 0x60, 0xC8, 0xB7, 0x4D, 0x60, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, 0xD1, 0x72, 0x16, 0x10, -0xD2, 0x62, 0x07, 0x10, 0xEB, 0xAF, 0x20, 0x90, 0xEC, 0xA8, 0x4C, 0x10, 0xED, 0x98, 0x3D, 0x10, -0xEE, 0x88, 0x2E, 0x10, 0xEF, 0x78, 0x1F, 0x10, 0xF0, 0x68, 0x10, 0x10, 0xF1, 0x58, 0x01, 0x10, -0xF2, 0x47, 0xF2, 0x10, 0xF3, 0x37, 0xE3, 0x10, 0xF4, 0x27, 0xD4, 0x10, 0xF5, 0x17, 0xC5, 0x10, -0xF6, 0x10, 0xF0, 0x90, 0xF7, 0x2F, 0x06, 0x10, 0xF7, 0xF0, 0xD2, 0x90, 0x12, 0xCE, 0x97, 0xF0, -0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x00, 0x01, 0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x1C, -0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, -0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, -0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, -0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Paris */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xB7, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1B, 0x91, 0x60, 0x50, 0x8B, -0x9B, 0x47, 0x78, 0xF0, 0x9B, 0xD7, 0x2C, 0x70, 0x9C, 0xBC, 0x91, 0x70, 0x9D, 0xC0, 0x48, 0xF0, -0x9E, 0x89, 0xFE, 0x70, 0x9F, 0xA0, 0x2A, 0xF0, 0xA0, 0x60, 0xA5, 0xF0, 0xA1, 0x80, 0x0C, 0xF0, -0xA2, 0x2E, 0x12, 0xF0, 0xA3, 0x7A, 0x4C, 0xF0, 0xA4, 0x35, 0x81, 0xF0, 0xA5, 0x5E, 0x23, 0x70, -0xA6, 0x25, 0x35, 0xF0, 0xA7, 0x27, 0x9B, 0xF0, 0xA8, 0x58, 0x26, 0x70, 0xA9, 0x07, 0x7D, 0xF0, -0xA9, 0xEE, 0x34, 0x70, 0xAA, 0xE7, 0x5F, 0xF0, 0xAB, 0xD7, 0x50, 0xF0, 0xAC, 0xC7, 0x41, 0xF0, -0xAD, 0xC9, 0xA7, 0xF0, 0xAE, 0xA7, 0x23, 0xF0, 0xAF, 0xA0, 0x4F, 0x70, 0xB0, 0x87, 0x05, 0xF0, -0xB1, 0x89, 0x6B, 0xF0, 0xB2, 0x70, 0x22, 0x70, 0xB3, 0x72, 0x88, 0x70, 0xB4, 0x50, 0x04, 0x70, -0xB5, 0x49, 0x2F, 0xF0, 0xB6, 0x2F, 0xE6, 0x70, 0xB7, 0x32, 0x4C, 0x70, 0xB8, 0x0F, 0xC8, 0x70, -0xB8, 0xFF, 0xB9, 0x70, 0xB9, 0xEF, 0xAA, 0x70, 0xBA, 0xD6, 0x60, 0xF0, 0xBB, 0xD8, 0xC6, 0xF0, -0xBC, 0xC8, 0xB7, 0xF0, 0xBD, 0xB8, 0xA8, 0xF0, 0xBE, 0x9F, 0x5F, 0x70, 0xBF, 0x98, 0x8A, 0xF0, -0xC0, 0x9A, 0xF0, 0xF0, 0xC1, 0x78, 0x6C, 0xF0, 0xC2, 0x68, 0x5D, 0xF0, 0xC3, 0x58, 0x4E, 0xF0, -0xC4, 0x3F, 0x05, 0x70, 0xC5, 0x38, 0x30, 0xF0, 0xC6, 0x3A, 0x96, 0xF0, 0xC7, 0x58, 0xAC, 0x70, -0xC7, 0xDA, 0x09, 0xA0, 0xC8, 0x6C, 0x27, 0xE0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x4F, 0xE1, 0xE0, 0xD0, 0x89, 0xF1, 0xF0, -0xD1, 0x72, 0x16, 0x10, 0xD2, 0x4E, 0x40, 0x90, 0x0B, 0xBB, 0x39, 0x00, 0x0C, 0xAB, 0x1B, 0xF0, -0x0D, 0xA4, 0x63, 0x90, 0x0E, 0x8B, 0x1A, 0x10, 0x0F, 0x84, 0x45, 0x90, 0x10, 0x74, 0x36, 0x90, -0x11, 0x64, 0x27, 0x90, 0x12, 0x54, 0x18, 0x90, 0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, -0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, -0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, -0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, -0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, -0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, -0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, -0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, -0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, -0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, -0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, -0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, -0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, -0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x04, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x07, 0x05, 0x06, 0x05, 0x06, 0x08, -0x03, 0x08, 0x09, 0x07, 0x09, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x00, -0x00, 0x02, 0x31, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -0x09, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0E, -0x10, 0x00, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x11, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x11, 0x00, -0x00, 0x1C, 0x20, 0x01, 0x16, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x01, -0x11, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0D, 0x50, 0x4D, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, -0x57, 0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x4D, -0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Podgorica */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x02, 0x35, 0xE0, -0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, -0xD0, 0x82, 0x25, 0x10, 0xD1, 0xA1, 0x8C, 0x10, 0xD2, 0x4E, 0x40, 0x90, 0x18, 0x45, 0x5F, 0x70, -0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, -0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, -0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, -0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, -0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, -0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, -0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, -0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, -0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, -0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, -0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, -0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, -0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, -0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, -0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, -0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Prague */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x0C, 0x17, 0x60, -0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, 0x9E, 0xB9, 0x90, 0x90, -0x9F, 0x84, 0x97, 0x90, 0xC8, 0x09, 0x71, 0x90, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x6E, 0x5E, 0x90, 0xD1, 0x79, 0xFF, 0x10, -0xD2, 0xA1, 0x4F, 0x10, 0xD3, 0x80, 0x1C, 0x90, 0xD4, 0x49, 0xD2, 0x10, 0xD5, 0x4C, 0x38, 0x10, -0xD6, 0x29, 0xB4, 0x10, 0xD7, 0x2C, 0x1A, 0x10, 0xD8, 0x09, 0x96, 0x10, 0xD9, 0x01, 0x70, 0x10, -0xD9, 0xE9, 0x78, 0x10, 0x10, 0xED, 0x64, 0x70, 0x11, 0x64, 0x27, 0x90, 0x12, 0x54, 0x18, 0x90, -0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x00, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x1C, -0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, -0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, -0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, -0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Riga */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x22, 0x9E, 0xB9, 0x88, 0x08, -0x9F, 0x84, 0x8F, 0x08, 0xA0, 0x88, 0x46, 0x88, 0xA0, 0xCB, 0x83, 0x08, 0xAD, 0xE7, 0xF1, 0xE8, -0xC8, 0xAF, 0x64, 0x60, 0xCA, 0x62, 0x65, 0x50, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, 0xD0, 0x90, 0x89, 0x70, -0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, -0x18, 0xEA, 0x0E, 0xD0, 0x19, 0xDB, 0x43, 0x40, 0x1A, 0xCC, 0x93, 0xD0, 0x1B, 0xBC, 0xA0, 0xF0, -0x1C, 0xAC, 0x91, 0xF0, 0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, -0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, -0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x19, 0x00, 0x26, 0x0C, 0x0A, 0x00, 0x27, 0x05, 0x35, 0x80, -0x27, 0xF5, 0x26, 0x80, 0x28, 0xE5, 0x17, 0x80, 0x29, 0xD5, 0x08, 0x80, 0x2A, 0xC4, 0xF9, 0x80, -0x2B, 0xB4, 0xEA, 0x80, 0x2C, 0xA4, 0xDB, 0x80, 0x2D, 0x94, 0xCC, 0x80, 0x2E, 0x84, 0xBD, 0x80, -0x2F, 0x74, 0xAE, 0x80, 0x30, 0x64, 0x9F, 0x80, 0x31, 0x5D, 0xCB, 0x00, 0x32, 0x4D, 0xBC, 0x00, -0x32, 0xE3, 0xEA, 0xE0, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, -0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xBA, 0xEF, 0xE0, -0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, -0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, -0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x00, 0x01, 0x00, 0x02, 0x03, 0x06, 0x04, -0x05, 0x04, 0x05, 0x04, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x02, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x02, 0x0C, 0x0D, 0x0C, -0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, -0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, -0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, -0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, -0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x00, 0x00, 0x16, 0x98, 0x00, 0x00, 0x00, 0x00, 0x24, -0xA8, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, -0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x1C, 0x20, 0x01, -0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x38, -0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, -0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x52, 0x4D, 0x54, 0x00, 0x4C, -0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, -0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, -0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Rome */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x37, 0xA6, 0xF0, -0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xC5, 0xCB, 0xF0, 0x9D, 0xB5, 0xBC, 0xF0, 0x9E, 0x89, 0xFE, 0x70, -0x9F, 0x9E, 0xD9, 0x70, 0xA0, 0x60, 0xA5, 0xF0, 0xA1, 0x7E, 0xBB, 0x70, 0xA2, 0x5C, 0x37, 0x70, -0xA3, 0x4C, 0x28, 0x70, 0xC8, 0x6C, 0x35, 0xF0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x07, 0x5F, 0x60, 0xD0, 0x6E, 0x42, 0x70, -0xD1, 0x72, 0x16, 0x10, 0xD2, 0x4C, 0xD2, 0xF0, 0xD3, 0x3E, 0x31, 0x90, 0xD4, 0x49, 0xD2, 0x10, -0xD5, 0x1D, 0xF7, 0x70, 0xD6, 0x29, 0x97, 0xF0, 0xD6, 0xEB, 0x80, 0x90, 0xD8, 0x09, 0x96, 0x10, -0xF9, 0x33, 0xB5, 0xF0, 0xF9, 0xD9, 0xC4, 0xE0, 0xFB, 0x1C, 0xD2, 0x70, 0xFB, 0xB9, 0xA6, 0xE0, -0xFC, 0xFC, 0xB4, 0x70, 0xFD, 0x99, 0x88, 0xE0, 0xFE, 0xE5, 0xD0, 0xF0, 0xFF, 0x82, 0xA5, 0x60, -0x00, 0xC5, 0xB2, 0xF0, 0x01, 0x62, 0x87, 0x60, 0x02, 0x9C, 0x5A, 0x70, 0x03, 0x42, 0x77, 0x70, -0x04, 0x85, 0x76, 0xF0, 0x05, 0x2B, 0x85, 0xE0, 0x06, 0x6E, 0x93, 0x70, 0x07, 0x0B, 0x67, 0xE0, -0x08, 0x45, 0x3A, 0xF0, 0x08, 0xEB, 0x49, 0xE0, 0x0A, 0x2E, 0x57, 0x70, 0x0A, 0xCB, 0x39, 0xF0, -0x0C, 0x0E, 0x39, 0x70, 0x0C, 0xAB, 0x1B, 0xF0, 0x0D, 0xE4, 0xE0, 0xF0, 0x0E, 0x8A, 0xFD, 0xF0, -0x0F, 0xCD, 0xFD, 0x70, 0x10, 0x74, 0x1A, 0x70, 0x11, 0xAD, 0xDF, 0x70, 0x12, 0x53, 0xFC, 0x70, -0x12, 0xCE, 0x97, 0xF0, 0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, -0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, -0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, -0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, -0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, -0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, -0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, -0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, -0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, -0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, -0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, -0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, -0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, -0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, -0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, -0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, -0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, -0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, -0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, -0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, -0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, -0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, -0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, -0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, -0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, -0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, -0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, -0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, -0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, -0x7F, 0x8E, 0x7F, 0x90, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, -0x00, 0x01, 0x00, 0x02, 0x01, 0x02, 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, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x03, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, -0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, -0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, -0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, -0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Samara */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x1A, 0xA1, 0x00, 0x26, 0x9C, -0xB5, 0xA4, 0x0B, 0x50, 0xBE, 0x4C, 0x26, 0xC0, 0x15, 0x27, 0x99, 0xC0, 0x16, 0x18, 0xCE, 0x30, -0x17, 0x08, 0xCD, 0x40, 0x17, 0xFA, 0x01, 0xB0, 0x18, 0xEA, 0x00, 0xC0, 0x19, 0xDB, 0x35, 0x30, -0x1A, 0xCC, 0x85, 0xC0, 0x1B, 0xBC, 0x92, 0xE0, 0x1C, 0xAC, 0x83, 0xE0, 0x1D, 0x9C, 0x74, 0xE0, -0x1E, 0x8C, 0x65, 0xE0, 0x1F, 0x7C, 0x56, 0xE0, 0x20, 0x6C, 0x47, 0xE0, 0x21, 0x5C, 0x38, 0xE0, -0x22, 0x4C, 0x29, 0xE0, 0x23, 0x3C, 0x1A, 0xE0, 0x24, 0x2C, 0x0B, 0xE0, 0x25, 0x1C, 0x0A, 0xF0, -0x26, 0x0B, 0xFB, 0xF0, 0x27, 0x05, 0x27, 0x70, 0x27, 0xF5, 0x18, 0x70, 0x28, 0xE5, 0x17, 0x80, -0x29, 0x00, 0xC7, 0x00, 0x29, 0xD4, 0xC2, 0x30, 0x2A, 0xC4, 0xA5, 0x20, 0x2B, 0xB4, 0xCE, 0x60, -0x2C, 0xA4, 0xBF, 0x60, 0x2D, 0x94, 0xB0, 0x60, 0x2E, 0x84, 0xA1, 0x60, 0x2F, 0x74, 0x92, 0x60, -0x30, 0x64, 0x83, 0x60, 0x31, 0x5D, 0xAE, 0xE0, 0x32, 0x72, 0x89, 0xE0, 0x33, 0x3D, 0x90, 0xE0, -0x34, 0x52, 0x6B, 0xE0, 0x35, 0x1D, 0x72, 0xE0, 0x36, 0x32, 0x4D, 0xE0, 0x36, 0xFD, 0x54, 0xE0, -0x38, 0x1B, 0x6A, 0x60, 0x38, 0xDD, 0x36, 0xE0, 0x39, 0xFB, 0x4C, 0x60, 0x3A, 0xBD, 0x18, 0xE0, -0x3B, 0xDB, 0x2E, 0x60, 0x3C, 0xA6, 0x35, 0x60, 0x3D, 0xBB, 0x10, 0x60, 0x3E, 0x86, 0x17, 0x60, -0x3F, 0x9A, 0xF2, 0x60, 0x40, 0x65, 0xF9, 0x60, 0x41, 0x84, 0x0E, 0xE0, 0x42, 0x45, 0xDB, 0x60, -0x43, 0x63, 0xF0, 0xE0, 0x44, 0x25, 0xBD, 0x60, 0x45, 0x43, 0xD2, 0xE0, 0x46, 0x05, 0x9F, 0x60, -0x47, 0x23, 0xB4, 0xE0, 0x47, 0xEE, 0xBB, 0xE0, 0x49, 0x03, 0x96, 0xE0, 0x49, 0xCE, 0x9D, 0xE0, -0x4A, 0xE3, 0x78, 0xE0, 0x4B, 0xAE, 0x7F, 0xE0, 0x4C, 0xCC, 0x95, 0x60, 0x4D, 0x8E, 0x61, 0xE0, -0x4E, 0xAC, 0x77, 0x60, 0x4F, 0x6E, 0x43, 0xE0, 0x50, 0x8C, 0x59, 0x60, 0x51, 0x57, 0x60, 0x60, -0x52, 0x6C, 0x3B, 0x60, 0x53, 0x37, 0x42, 0x60, 0x54, 0x4C, 0x1D, 0x60, 0x55, 0x17, 0x24, 0x60, -0x56, 0x2B, 0xFF, 0x60, 0x56, 0xF7, 0x06, 0x60, 0x58, 0x15, 0x1B, 0xE0, 0x58, 0xD6, 0xE8, 0x60, -0x59, 0xF4, 0xFD, 0xE0, 0x5A, 0xB6, 0xCA, 0x60, 0x5B, 0xD4, 0xDF, 0xE0, 0x5C, 0x9F, 0xE6, 0xE0, -0x5D, 0xB4, 0xC1, 0xE0, 0x5E, 0x7F, 0xC8, 0xE0, 0x5F, 0x94, 0xA3, 0xE0, 0x60, 0x5F, 0xAA, 0xE0, -0x61, 0x7D, 0xC0, 0x60, 0x62, 0x3F, 0x8C, 0xE0, 0x63, 0x5D, 0xA2, 0x60, 0x64, 0x1F, 0x6E, 0xE0, -0x65, 0x3D, 0x84, 0x60, 0x66, 0x08, 0x8B, 0x60, 0x67, 0x1D, 0x66, 0x60, 0x67, 0xE8, 0x6D, 0x60, -0x68, 0xFD, 0x48, 0x60, 0x69, 0xC8, 0x4F, 0x60, 0x6A, 0xDD, 0x2A, 0x60, 0x6B, 0xA8, 0x31, 0x60, -0x6C, 0xC6, 0x46, 0xE0, 0x6D, 0x88, 0x13, 0x60, 0x6E, 0xA6, 0x28, 0xE0, 0x6F, 0x67, 0xF5, 0x60, -0x70, 0x86, 0x0A, 0xE0, 0x71, 0x51, 0x11, 0xE0, 0x72, 0x65, 0xEC, 0xE0, 0x73, 0x30, 0xF3, 0xE0, -0x74, 0x45, 0xCE, 0xE0, 0x75, 0x10, 0xD5, 0xE0, 0x76, 0x2E, 0xEB, 0x60, 0x76, 0xF0, 0xB7, 0xE0, -0x78, 0x0E, 0xCD, 0x60, 0x78, 0xD0, 0x99, 0xE0, 0x79, 0xEE, 0xAF, 0x60, 0x7A, 0xB0, 0x7B, 0xE0, -0x7B, 0xCE, 0x91, 0x60, 0x7C, 0x99, 0x98, 0x60, 0x7D, 0xAE, 0x73, 0x60, 0x7E, 0x79, 0x7A, 0x60, -0x7F, 0x8E, 0x55, 0x60, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x07, 0x08, 0x07, 0x08, 0x09, 0x08, 0x02, 0x0B, 0x02, -0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, -0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, -0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, -0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, -0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, -0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x00, 0x00, 0x2F, 0x04, 0x00, 0x00, -0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x00, 0x00, 0x46, 0x50, -0x01, 0x09, 0x00, 0x00, 0x38, 0x40, 0x00, 0x0F, 0x00, 0x00, 0x38, 0x40, 0x00, 0x0F, 0x00, 0x00, -0x46, 0x50, 0x01, 0x09, 0x00, 0x00, 0x38, 0x40, 0x01, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0F, -0x00, 0x00, 0x2A, 0x30, 0x01, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0F, 0x00, 0x00, 0x46, 0x50, -0x01, 0x14, 0x00, 0x00, 0x46, 0x50, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x4C, 0x4D, -0x54, 0x00, 0x53, 0x41, 0x4D, 0x54, 0x00, 0x4B, 0x55, 0x59, 0x53, 0x54, 0x00, 0x4B, 0x55, 0x59, -0x54, 0x00, 0x53, 0x41, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, - -/* Europe/San_Marino */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x37, 0xA6, 0xF0, -0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xC5, 0xCB, 0xF0, 0x9D, 0xB5, 0xBC, 0xF0, 0x9E, 0x89, 0xFE, 0x70, -0x9F, 0x9E, 0xD9, 0x70, 0xA0, 0x60, 0xA5, 0xF0, 0xA1, 0x7E, 0xBB, 0x70, 0xA2, 0x5C, 0x37, 0x70, -0xA3, 0x4C, 0x28, 0x70, 0xC8, 0x6C, 0x35, 0xF0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x07, 0x5F, 0x60, 0xD0, 0x6E, 0x42, 0x70, -0xD1, 0x72, 0x16, 0x10, 0xD2, 0x4C, 0xD2, 0xF0, 0xD3, 0x3E, 0x31, 0x90, 0xD4, 0x49, 0xD2, 0x10, -0xD5, 0x1D, 0xF7, 0x70, 0xD6, 0x29, 0x97, 0xF0, 0xD6, 0xEB, 0x80, 0x90, 0xD8, 0x09, 0x96, 0x10, -0xF9, 0x33, 0xB5, 0xF0, 0xF9, 0xD9, 0xC4, 0xE0, 0xFB, 0x1C, 0xD2, 0x70, 0xFB, 0xB9, 0xA6, 0xE0, -0xFC, 0xFC, 0xB4, 0x70, 0xFD, 0x99, 0x88, 0xE0, 0xFE, 0xE5, 0xD0, 0xF0, 0xFF, 0x82, 0xA5, 0x60, -0x00, 0xC5, 0xB2, 0xF0, 0x01, 0x62, 0x87, 0x60, 0x02, 0x9C, 0x5A, 0x70, 0x03, 0x42, 0x77, 0x70, -0x04, 0x85, 0x76, 0xF0, 0x05, 0x2B, 0x85, 0xE0, 0x06, 0x6E, 0x93, 0x70, 0x07, 0x0B, 0x67, 0xE0, -0x08, 0x45, 0x3A, 0xF0, 0x08, 0xEB, 0x49, 0xE0, 0x0A, 0x2E, 0x57, 0x70, 0x0A, 0xCB, 0x39, 0xF0, -0x0C, 0x0E, 0x39, 0x70, 0x0C, 0xAB, 0x1B, 0xF0, 0x0D, 0xE4, 0xE0, 0xF0, 0x0E, 0x8A, 0xFD, 0xF0, -0x0F, 0xCD, 0xFD, 0x70, 0x10, 0x74, 0x1A, 0x70, 0x11, 0xAD, 0xDF, 0x70, 0x12, 0x53, 0xFC, 0x70, -0x12, 0xCE, 0x97, 0xF0, 0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, -0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, -0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, -0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, -0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, -0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, -0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, -0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, -0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, -0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, -0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, -0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, -0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, -0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, -0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, -0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, -0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, -0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, -0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, -0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, -0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, -0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, -0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, -0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, -0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, -0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, -0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, -0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, -0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, -0x7F, 0x8E, 0x7F, 0x90, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, -0x00, 0x01, 0x00, 0x02, 0x01, 0x02, 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, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x03, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, -0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, -0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, -0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, -0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Sarajevo */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x02, 0x35, 0xE0, -0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, -0xD0, 0x82, 0x25, 0x10, 0xD1, 0xA1, 0x8C, 0x10, 0xD2, 0x4E, 0x40, 0x90, 0x18, 0x45, 0x5F, 0x70, -0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, -0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, -0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, -0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, -0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, -0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, -0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, -0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, -0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, -0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, -0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, -0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, -0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, -0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, -0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, -0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Simferopol */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1E, 0xAA, 0x19, 0xA4, 0x20, -0xB5, 0xA4, 0x19, 0x60, 0xCB, 0x04, 0x8D, 0xD0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xCF, 0x9F, 0x38, 0xE0, 0x15, 0x27, 0xA7, 0xD0, -0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, -0x19, 0xDB, 0x43, 0x40, 0x1A, 0xCC, 0x93, 0xD0, 0x1B, 0xBC, 0xA0, 0xF0, 0x1C, 0xAC, 0x91, 0xF0, -0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, -0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, 0x24, 0x2C, 0x19, 0xF0, -0x25, 0x1C, 0x0A, 0xF0, 0x25, 0x9E, 0x73, 0x50, 0x26, 0x8D, 0x2E, 0xF0, 0x29, 0xD4, 0xEC, 0x60, -0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50, 0x2D, 0x94, 0xB0, 0x60, -0x2D, 0xC2, 0xC6, 0xD0, 0x2E, 0x84, 0x85, 0x40, 0x2F, 0x74, 0x84, 0x50, 0x30, 0x64, 0x67, 0x40, -0x31, 0x5D, 0xA0, 0xD0, 0x31, 0x5D, 0xCB, 0x00, 0x32, 0x72, 0xA6, 0x00, 0x32, 0xC9, 0x7E, 0xD0, -0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, -0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, -0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, -0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, -0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x05, 0x03, 0x04, 0x03, 0x04, 0x02, -0x06, 0x02, 0x06, 0x02, 0x06, 0x02, 0x06, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, -0x08, 0x07, 0x02, 0x01, 0x09, 0x01, 0x09, 0x01, 0x09, 0x06, 0x02, 0x06, 0x02, 0x06, 0x08, 0x07, -0x02, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x00, -0x00, 0x2A, 0x30, 0x00, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x1C, 0x20, 0x01, -0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x10, 0x00, 0x00, 0x38, 0x40, 0x01, 0x15, 0x00, 0x00, 0x2A, -0x30, 0x00, 0x08, 0x00, 0x00, 0x38, 0x40, 0x01, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, -0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x04, 0x53, 0x4D, 0x54, 0x00, 0x45, -0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, -0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, -0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, -0x01, - -/* Europe/Skopje */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x02, 0x35, 0xE0, -0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, -0xD0, 0x82, 0x25, 0x10, 0xD1, 0xA1, 0x8C, 0x10, 0xD2, 0x4E, 0x40, 0x90, 0x18, 0x45, 0x5F, 0x70, -0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, -0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, -0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, -0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, -0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, -0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, -0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, -0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, -0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, -0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, -0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, -0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, -0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, -0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, -0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, -0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Sofia */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x12, 0xCC, 0xE7, 0x4B, 0x10, -0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, -0xD1, 0x72, 0x24, 0x20, 0x11, 0x63, 0xEF, 0x50, 0x12, 0x55, 0x3F, 0xE0, 0x13, 0x4D, 0x0B, 0xD0, -0x14, 0x35, 0x21, 0xE0, 0x15, 0x2C, 0xED, 0xD0, 0x16, 0x13, 0xC0, 0x70, 0x17, 0x0C, 0xCF, 0xD0, -0x17, 0xF3, 0xB0, 0x80, 0x18, 0xE3, 0xA1, 0x80, 0x19, 0xD3, 0x92, 0x80, 0x1A, 0xC3, 0x83, 0x80, -0x1B, 0xBC, 0xAF, 0x00, 0x1C, 0xAC, 0xA0, 0x00, 0x1D, 0x9C, 0x91, 0x00, 0x1E, 0x8C, 0x82, 0x00, -0x1F, 0x7C, 0x73, 0x00, 0x20, 0x6C, 0x64, 0x00, 0x21, 0x5C, 0x55, 0x00, 0x22, 0x4C, 0x46, 0x00, -0x23, 0x3C, 0x37, 0x00, 0x24, 0x2C, 0x28, 0x00, 0x25, 0x1C, 0x19, 0x00, 0x26, 0x0C, 0x0A, 0x00, -0x27, 0x05, 0x35, 0x80, 0x27, 0x7F, 0xB4, 0xE0, 0x27, 0xF5, 0x0A, 0x60, 0x28, 0xE4, 0xED, 0x50, -0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50, -0x2D, 0x94, 0xB0, 0x60, 0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0x92, 0x60, 0x30, 0x64, 0x75, 0x50, -0x31, 0x5D, 0xAE, 0xE0, 0x32, 0x72, 0x7B, 0xD0, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x00, 0x03, -0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x00, 0x00, 0x1C, -0x20, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, -0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, -0x0D, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x00, 0x45, 0x45, 0x54, -0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, -0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Stockholm */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x1E, 0x8C, 0x60, -0x9B, 0xD5, 0xDA, 0xF0, 0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, -0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, -0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, -0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, -0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, -0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, -0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, -0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, -0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, -0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, -0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, -0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, -0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, -0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, -0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, -0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, -0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, -0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, -0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, -0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, -0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, -0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, -0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, -0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, -0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, -0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, -0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, -0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, -0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, -0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 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, 0x0E, 0x10, 0x00, 0x00, -0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, -0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, -0x00, 0x01, 0x01, - -/* Europe/Tallinn */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x1E, 0x9E, 0x59, 0x2D, 0xCC, -0x9E, 0xB9, 0x90, 0x90, 0x9F, 0x84, 0x97, 0x90, 0xA1, 0x00, 0x2B, 0x70, 0xA4, 0x73, 0x6F, 0x4C, -0xC8, 0xB0, 0xB5, 0xE0, 0xCA, 0xC6, 0x97, 0x50, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x74, 0xCB, 0xE0, 0x15, 0x27, 0xA7, 0xD0, -0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, -0x19, 0xDB, 0x43, 0x40, 0x1A, 0xCC, 0x93, 0xD0, 0x1B, 0xBC, 0xA0, 0xF0, 0x1C, 0xAC, 0x91, 0xF0, -0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, -0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, 0x24, 0x2C, 0x19, 0xF0, -0x25, 0x1C, 0x19, 0x00, 0x26, 0x0C, 0x0A, 0x00, 0x27, 0x05, 0x35, 0x80, 0x27, 0xF5, 0x26, 0x80, -0x28, 0xE5, 0x17, 0x80, 0x29, 0xD5, 0x08, 0x80, 0x2A, 0xC4, 0xF9, 0x80, 0x2B, 0xB4, 0xEA, 0x80, -0x2C, 0xA4, 0xDB, 0x80, 0x2D, 0x94, 0xCC, 0x80, 0x2E, 0x84, 0xBD, 0x80, 0x2F, 0x74, 0xAE, 0x80, -0x30, 0x64, 0x9F, 0x80, 0x31, 0x5D, 0xCB, 0x00, 0x32, 0x72, 0xA6, 0x00, 0x33, 0x3D, 0xAD, 0x00, -0x34, 0x52, 0x88, 0x00, 0x35, 0x1D, 0x8F, 0x00, 0x36, 0x06, 0xBE, 0x50, 0x36, 0x32, 0x78, 0x10, -0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0x1C, 0xBB, 0xE0, 0x3C, 0xA6, 0x5F, 0x90, -0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, -0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, -0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, -0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, -0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, -0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, -0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, -0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, -0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, -0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, -0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, -0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, -0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, -0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, -0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, -0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, -0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, -0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x00, -0x04, 0x05, 0x06, 0x02, 0x01, 0x02, 0x01, 0x05, 0x07, 0x05, 0x07, 0x05, 0x07, 0x05, 0x07, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0E, 0x0C, 0x0D, 0x0C, 0x04, -0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, -0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, -0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, -0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, -0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x00, 0x00, 0x17, 0x34, 0x00, 0x00, 0x00, 0x00, -0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, -0x00, 0x00, 0x1C, 0x20, 0x00, 0x0D, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, 0x00, 0x00, 0x1C, 0x20, -0x01, 0x04, 0x00, 0x00, 0x38, 0x40, 0x01, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, 0x00, 0x00, -0x38, 0x40, 0x01, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0D, -0x00, 0x00, 0x1C, 0x20, 0x00, 0x0D, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, -0x01, 0x19, 0x54, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x45, -0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, -0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, - -/* Europe/Tirane */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x96, 0xAA, 0x34, 0x68, -0xC8, 0x6D, 0x87, 0x70, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCD, 0xB8, 0xE9, 0x90, -0x08, 0x28, 0x39, 0xF0, 0x08, 0xEF, 0x3E, 0x60, 0x0A, 0x05, 0x78, 0xF0, 0x0A, 0xD0, 0x71, 0xE0, -0x0B, 0xE9, 0x4F, 0x70, 0x0C, 0xB4, 0x48, 0x60, 0x0D, 0xD2, 0x6B, 0xF0, 0x0E, 0x94, 0x2A, 0x60, -0x0F, 0xB0, 0xFC, 0x70, 0x10, 0x74, 0x0C, 0x60, 0x11, 0x90, 0xDE, 0x70, 0x12, 0x53, 0xEE, 0x60, -0x13, 0x70, 0xC0, 0x70, 0x14, 0x3B, 0xB9, 0x60, 0x15, 0x48, 0xB9, 0x70, 0x16, 0x13, 0xB2, 0x60, -0x17, 0x31, 0xD5, 0xF0, 0x17, 0xFC, 0xCE, 0xE0, 0x19, 0x00, 0x94, 0x70, 0x19, 0xDB, 0x5F, 0x60, -0x1A, 0xCC, 0xAF, 0xF0, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x00, 0x00, 0x12, 0x98, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, -0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x1C, -0x20, 0x01, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Tiraspol */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x22, 0x9E, 0x6B, 0x9F, 0x0C, -0xB7, 0xB0, 0xD2, 0x08, 0xB9, 0x3E, 0xF3, 0x60, 0xB9, 0xEF, 0x9C, 0x60, 0xBA, 0xDF, 0x8D, 0x60, -0xBB, 0xCF, 0x7E, 0x60, 0xBC, 0xC8, 0xA9, 0xE0, 0xBD, 0xB8, 0x9A, 0xE0, 0xBE, 0xA8, 0x8B, 0xE0, -0xBF, 0x98, 0x7C, 0xE0, 0xC0, 0x88, 0x6D, 0xE0, 0xC1, 0x78, 0x5E, 0xE0, 0xC2, 0x68, 0x4F, 0xE0, -0xC3, 0x58, 0x40, 0xE0, 0xC4, 0x48, 0x31, 0xE0, 0xC5, 0x38, 0x22, 0xE0, 0xC6, 0x28, 0x13, 0xE0, -0xC7, 0x18, 0x04, 0xE0, 0xC8, 0xBC, 0x93, 0x60, 0xCA, 0x77, 0x7D, 0x50, 0xCC, 0xE7, 0x4B, 0x10, -0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x4E, 0x90, 0x60, -0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, -0x18, 0xEA, 0x0E, 0xD0, 0x19, 0xDB, 0x43, 0x40, 0x1A, 0xCC, 0x93, 0xD0, 0x1B, 0xBC, 0xA0, 0xF0, -0x1C, 0xAC, 0x91, 0xF0, 0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, -0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, -0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x25, 0x9E, 0x73, 0x50, 0x26, 0x43, 0x3E, 0xD0, -0x27, 0xF5, 0x26, 0x80, 0x28, 0xE5, 0x17, 0x80, 0x29, 0x60, 0xE8, 0x60, 0x29, 0xD4, 0xEC, 0x60, -0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50, 0x2D, 0x94, 0xB0, 0x60, -0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0x92, 0x60, 0x30, 0x64, 0x75, 0x50, 0x31, 0x5D, 0xAE, 0xE0, -0x32, 0x72, 0x7B, 0xD0, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, -0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, -0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, -0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, -0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, -0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, -0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, -0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, -0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, -0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, -0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, -0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, -0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, -0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, -0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, -0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, -0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, -0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, -0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, -0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, -0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x04, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x05, 0x08, -0x06, 0x07, 0x06, 0x07, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0A, 0x04, 0x02, 0x03, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, -0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, -0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, -0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, -0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, -0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x00, 0x00, 0x1A, 0xF4, 0x00, 0x00, 0x00, 0x00, -0x18, 0x78, 0x00, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x08, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0D, -0x00, 0x00, 0x1C, 0x20, 0x00, 0x0D, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, -0x00, 0x11, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x15, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x15, 0x00, 0x00, -0x38, 0x40, 0x01, 0x1A, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x1E, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x1E, -0x00, 0x00, 0x38, 0x40, 0x01, 0x1A, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x08, 0x00, 0x00, 0x1C, 0x20, -0x00, 0x0D, 0x43, 0x4D, 0x54, 0x00, 0x42, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, -0x45, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, -0x4D, 0x53, 0x4B, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, -0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x01, - -/* Europe/Uzhgorod */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1A, 0xC8, 0x09, 0x71, 0x90, -0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, -0xD0, 0x80, 0xA9, 0x60, 0xD0, 0xA1, 0x9E, 0xE0, 0xD1, 0xE5, 0xFD, 0xF0, 0x15, 0x27, 0xA7, 0xD0, -0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, -0x19, 0xDB, 0x43, 0x40, 0x1A, 0xCC, 0x93, 0xD0, 0x1B, 0xBC, 0xA0, 0xF0, 0x1C, 0xAC, 0x91, 0xF0, -0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, -0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, 0x24, 0x2C, 0x19, 0xF0, -0x25, 0x1C, 0x0A, 0xF0, 0x25, 0x9E, 0x73, 0x50, 0x26, 0x8D, 0x2E, 0xF0, 0x27, 0xF5, 0x42, 0xA0, -0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50, -0x2D, 0x94, 0xB0, 0x60, 0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x00, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x05, 0x00, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, -0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, -0x04, 0x00, 0x00, 0x38, 0x40, 0x01, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0D, 0x00, 0x00, 0x2A, -0x30, 0x00, 0x0D, 0x00, 0x00, 0x38, 0x40, 0x01, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x11, 0x00, -0x00, 0x2A, 0x30, 0x01, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x15, 0x00, 0x00, 0x1C, 0x20, 0x00, -0x11, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x4D, 0x53, -0x4B, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, -0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x01, 0x01, - -/* Europe/Vaduz */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x15, 0x23, 0xEB, 0x90, -0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, -0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, -0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, -0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, -0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, -0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, -0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, -0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, -0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, -0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, -0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, -0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, -0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, -0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, -0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, -0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, -0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, -0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, -0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, -0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, -0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, -0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, -0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, -0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, -0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, -0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, -0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, -0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, -0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, -0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, -0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, - -/* Europe/Vatican */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x37, 0xA6, 0xF0, -0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xC5, 0xCB, 0xF0, 0x9D, 0xB5, 0xBC, 0xF0, 0x9E, 0x89, 0xFE, 0x70, -0x9F, 0x9E, 0xD9, 0x70, 0xA0, 0x60, 0xA5, 0xF0, 0xA1, 0x7E, 0xBB, 0x70, 0xA2, 0x5C, 0x37, 0x70, -0xA3, 0x4C, 0x28, 0x70, 0xC8, 0x6C, 0x35, 0xF0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x07, 0x5F, 0x60, 0xD0, 0x6E, 0x42, 0x70, -0xD1, 0x72, 0x16, 0x10, 0xD2, 0x4C, 0xD2, 0xF0, 0xD3, 0x3E, 0x31, 0x90, 0xD4, 0x49, 0xD2, 0x10, -0xD5, 0x1D, 0xF7, 0x70, 0xD6, 0x29, 0x97, 0xF0, 0xD6, 0xEB, 0x80, 0x90, 0xD8, 0x09, 0x96, 0x10, -0xF9, 0x33, 0xB5, 0xF0, 0xF9, 0xD9, 0xC4, 0xE0, 0xFB, 0x1C, 0xD2, 0x70, 0xFB, 0xB9, 0xA6, 0xE0, -0xFC, 0xFC, 0xB4, 0x70, 0xFD, 0x99, 0x88, 0xE0, 0xFE, 0xE5, 0xD0, 0xF0, 0xFF, 0x82, 0xA5, 0x60, -0x00, 0xC5, 0xB2, 0xF0, 0x01, 0x62, 0x87, 0x60, 0x02, 0x9C, 0x5A, 0x70, 0x03, 0x42, 0x77, 0x70, -0x04, 0x85, 0x76, 0xF0, 0x05, 0x2B, 0x85, 0xE0, 0x06, 0x6E, 0x93, 0x70, 0x07, 0x0B, 0x67, 0xE0, -0x08, 0x45, 0x3A, 0xF0, 0x08, 0xEB, 0x49, 0xE0, 0x0A, 0x2E, 0x57, 0x70, 0x0A, 0xCB, 0x39, 0xF0, -0x0C, 0x0E, 0x39, 0x70, 0x0C, 0xAB, 0x1B, 0xF0, 0x0D, 0xE4, 0xE0, 0xF0, 0x0E, 0x8A, 0xFD, 0xF0, -0x0F, 0xCD, 0xFD, 0x70, 0x10, 0x74, 0x1A, 0x70, 0x11, 0xAD, 0xDF, 0x70, 0x12, 0x53, 0xFC, 0x70, -0x12, 0xCE, 0x97, 0xF0, 0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, -0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, -0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, -0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, -0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, -0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, -0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, -0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, -0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, -0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, -0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, -0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, -0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, -0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, -0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, -0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, -0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, -0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, -0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, -0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, -0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, -0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, -0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, -0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, -0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, -0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, -0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, -0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, -0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, -0x7F, 0x8E, 0x7F, 0x90, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, -0x00, 0x01, 0x00, 0x02, 0x01, 0x02, 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, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x03, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, -0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, -0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, -0x00, 0x05, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, -0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Vienna */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x0C, 0x17, 0x60, -0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, 0x9E, 0xB9, 0x90, 0x90, -0x9F, 0x84, 0x97, 0x90, 0xA1, 0xF2, 0xBF, 0x70, 0xA2, 0x70, 0x1A, 0x10, 0xA3, 0x44, 0x5B, 0x90, -0xC8, 0x09, 0x71, 0x90, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, -0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, 0xD1, 0x72, 0x16, 0x10, 0xD1, 0x7F, 0x45, 0x10, -0xD2, 0xDB, 0x34, 0xF0, 0xD3, 0x63, 0x1B, 0x90, 0xD4, 0x49, 0xD2, 0x10, 0xD5, 0x39, 0xC3, 0x10, -0xD6, 0x29, 0xB4, 0x10, 0xD7, 0x2C, 0x1A, 0x10, 0xD8, 0x09, 0x96, 0x10, 0x13, 0x4D, 0x27, 0xF0, -0x14, 0x33, 0xD0, 0x60, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, -0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, -0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, -0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, -0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, -0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, -0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, -0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, -0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, -0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, -0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, -0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, -0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, -0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, -0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, -0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, -0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, -0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, -0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, -0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, -0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, -0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, -0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, -0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, -0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, -0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, -0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, -0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, -0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x00, 0x01, 0x02, 0x03, -0x02, 0x03, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x01, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x00, 0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, -0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, -0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x43, 0x45, 0x53, 0x54, -0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, -0x01, - -/* Europe/Vilnius */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x22, 0x9C, 0x4F, 0x1F, 0x50, -0xA1, 0x85, 0x4A, 0x98, 0xA2, 0xF1, 0x30, 0xF0, 0xA3, 0x66, 0x78, 0x60, 0xC8, 0xAC, 0xCF, 0x70, -0xCA, 0x59, 0x2A, 0xD0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, -0xCF, 0x92, 0x34, 0x10, 0xD0, 0x30, 0x3D, 0xE0, 0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, -0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, 0x19, 0xDB, 0x43, 0x40, -0x1A, 0xCC, 0x93, 0xD0, 0x1B, 0xBC, 0xA0, 0xF0, 0x1C, 0xAC, 0x91, 0xF0, 0x1D, 0x9C, 0x82, 0xF0, -0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, -0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, 0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, -0x26, 0x0B, 0xFB, 0xF0, 0x27, 0x05, 0x27, 0x70, 0x27, 0xF5, 0x18, 0x70, 0x28, 0xE5, 0x17, 0x80, -0x29, 0xD5, 0x08, 0x80, 0x2A, 0xC4, 0xF9, 0x80, 0x2B, 0xB4, 0xEA, 0x80, 0x2C, 0xA4, 0xDB, 0x80, -0x2D, 0x94, 0xCC, 0x80, 0x2E, 0x84, 0xBD, 0x80, 0x2F, 0x74, 0xAE, 0x80, 0x30, 0x64, 0x9F, 0x80, -0x31, 0x5D, 0xCB, 0x00, 0x32, 0x72, 0xA6, 0x00, 0x33, 0x3D, 0xAD, 0x00, 0x34, 0x52, 0x88, 0x00, -0x34, 0xAA, 0xC0, 0x60, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, -0x38, 0x1B, 0x94, 0x90, 0x3E, 0x12, 0x13, 0x60, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x01, 0x02, 0x03, 0x02, 0x04, 0x07, 0x05, 0x06, 0x05, 0x06, 0x04, 0x08, 0x04, 0x08, 0x04, 0x08, -0x04, 0x08, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x03, 0x0D, 0x0E, -0x0D, 0x0F, 0x03, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, -0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, -0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, -0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, -0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x10, 0x0F, 0x00, 0x00, 0x13, 0xB0, 0x00, 0x00, 0x00, -0x00, 0x16, 0x68, 0x00, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x08, 0x00, 0x00, 0x1C, 0x20, 0x00, -0x0C, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x10, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x08, 0x00, 0x00, 0x1C, -0x20, 0x01, 0x14, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, -0x00, 0x2A, 0x30, 0x00, 0x10, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, -0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0C, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x0E, -0x10, 0x00, 0x08, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0C, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x57, -0x4D, 0x54, 0x00, 0x4B, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, -0x53, 0x4B, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, -0x01, 0x01, 0x01, - -/* Europe/Volgograd */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x19, 0xA1, 0xF5, 0x46, 0xDC, -0xAB, 0xD8, 0x86, 0x50, 0xB5, 0xA4, 0x0B, 0x50, 0xF0, 0xB0, 0x4C, 0x40, 0x15, 0x27, 0x99, 0xC0, -0x16, 0x18, 0xCE, 0x30, 0x17, 0x08, 0xCD, 0x40, 0x17, 0xFA, 0x01, 0xB0, 0x18, 0xEA, 0x00, 0xC0, -0x19, 0xDB, 0x35, 0x30, 0x1A, 0xCC, 0x85, 0xC0, 0x1B, 0xBC, 0x92, 0xE0, 0x1C, 0xAC, 0x83, 0xE0, -0x1D, 0x9C, 0x74, 0xE0, 0x1E, 0x8C, 0x65, 0xE0, 0x1F, 0x7C, 0x56, 0xE0, 0x20, 0x6C, 0x47, 0xE0, -0x21, 0x5C, 0x38, 0xE0, 0x22, 0x4C, 0x29, 0xE0, 0x23, 0x3C, 0x1A, 0xE0, 0x24, 0x2C, 0x0B, 0xE0, -0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x0B, 0xFB, 0xF0, 0x27, 0x05, 0x27, 0x70, 0x27, 0xF5, 0x18, 0x70, -0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xC4, 0xB3, 0x30, 0x2B, 0xB4, 0xDC, 0x70, 0x2C, 0xA4, 0xCD, 0x70, -0x2D, 0x94, 0xBE, 0x70, 0x2E, 0x84, 0xAF, 0x70, 0x2F, 0x74, 0xA0, 0x70, 0x30, 0x64, 0x91, 0x70, -0x31, 0x5D, 0xBC, 0xF0, 0x32, 0x72, 0x97, 0xF0, 0x33, 0x3D, 0x9E, 0xF0, 0x34, 0x52, 0x79, 0xF0, -0x35, 0x1D, 0x80, 0xF0, 0x36, 0x32, 0x5B, 0xF0, 0x36, 0xFD, 0x62, 0xF0, 0x38, 0x1B, 0x78, 0x70, -0x38, 0xDD, 0x44, 0xF0, 0x39, 0xFB, 0x5A, 0x70, 0x3A, 0xBD, 0x26, 0xF0, 0x3B, 0xDB, 0x3C, 0x70, -0x3C, 0xA6, 0x43, 0x70, 0x3D, 0xBB, 0x1E, 0x70, 0x3E, 0x86, 0x25, 0x70, 0x3F, 0x9B, 0x00, 0x70, -0x40, 0x66, 0x07, 0x70, 0x41, 0x84, 0x1C, 0xF0, 0x42, 0x45, 0xE9, 0x70, 0x43, 0x63, 0xFE, 0xF0, -0x44, 0x25, 0xCB, 0x70, 0x45, 0x43, 0xE0, 0xF0, 0x46, 0x05, 0xAD, 0x70, 0x47, 0x23, 0xC2, 0xF0, -0x47, 0xEE, 0xC9, 0xF0, 0x49, 0x03, 0xA4, 0xF0, 0x49, 0xCE, 0xAB, 0xF0, 0x4A, 0xE3, 0x86, 0xF0, -0x4B, 0xAE, 0x8D, 0xF0, 0x4C, 0xCC, 0xA3, 0x70, 0x4D, 0x8E, 0x6F, 0xF0, 0x4E, 0xAC, 0x85, 0x70, -0x4F, 0x6E, 0x51, 0xF0, 0x50, 0x8C, 0x67, 0x70, 0x51, 0x57, 0x6E, 0x70, 0x52, 0x6C, 0x49, 0x70, -0x53, 0x37, 0x50, 0x70, 0x54, 0x4C, 0x2B, 0x70, 0x55, 0x17, 0x32, 0x70, 0x56, 0x2C, 0x0D, 0x70, -0x56, 0xF7, 0x14, 0x70, 0x58, 0x15, 0x29, 0xF0, 0x58, 0xD6, 0xF6, 0x70, 0x59, 0xF5, 0x0B, 0xF0, -0x5A, 0xB6, 0xD8, 0x70, 0x5B, 0xD4, 0xED, 0xF0, 0x5C, 0x9F, 0xF4, 0xF0, 0x5D, 0xB4, 0xCF, 0xF0, -0x5E, 0x7F, 0xD6, 0xF0, 0x5F, 0x94, 0xB1, 0xF0, 0x60, 0x5F, 0xB8, 0xF0, 0x61, 0x7D, 0xCE, 0x70, -0x62, 0x3F, 0x9A, 0xF0, 0x63, 0x5D, 0xB0, 0x70, 0x64, 0x1F, 0x7C, 0xF0, 0x65, 0x3D, 0x92, 0x70, -0x66, 0x08, 0x99, 0x70, 0x67, 0x1D, 0x74, 0x70, 0x67, 0xE8, 0x7B, 0x70, 0x68, 0xFD, 0x56, 0x70, -0x69, 0xC8, 0x5D, 0x70, 0x6A, 0xDD, 0x38, 0x70, 0x6B, 0xA8, 0x3F, 0x70, 0x6C, 0xC6, 0x54, 0xF0, -0x6D, 0x88, 0x21, 0x70, 0x6E, 0xA6, 0x36, 0xF0, 0x6F, 0x68, 0x03, 0x70, 0x70, 0x86, 0x18, 0xF0, -0x71, 0x51, 0x1F, 0xF0, 0x72, 0x65, 0xFA, 0xF0, 0x73, 0x31, 0x01, 0xF0, 0x74, 0x45, 0xDC, 0xF0, -0x75, 0x10, 0xE3, 0xF0, 0x76, 0x2E, 0xF9, 0x70, 0x76, 0xF0, 0xC5, 0xF0, 0x78, 0x0E, 0xDB, 0x70, -0x78, 0xD0, 0xA7, 0xF0, 0x79, 0xEE, 0xBD, 0x70, 0x7A, 0xB0, 0x89, 0xF0, 0x7B, 0xCE, 0x9F, 0x70, -0x7C, 0x99, 0xA6, 0x70, 0x7D, 0xAE, 0x81, 0x70, 0x7E, 0x79, 0x88, 0x70, 0x7F, 0x8E, 0x63, 0x70, -0x01, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x08, 0x09, 0x08, 0x09, 0x06, 0x08, 0x0A, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x00, 0x00, 0x29, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, -0x04, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x09, 0x00, 0x00, 0x38, 0x40, 0x00, 0x09, 0x00, 0x00, 0x46, -0x50, 0x01, 0x0E, 0x00, 0x00, 0x38, 0x40, 0x00, 0x14, 0x00, 0x00, 0x38, 0x40, 0x00, 0x14, 0x00, -0x00, 0x46, 0x50, 0x01, 0x0E, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0E, 0x00, 0x00, 0x2A, 0x30, 0x00, -0x14, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x54, 0x53, 0x41, 0x54, 0x00, -0x53, 0x54, 0x41, 0x54, 0x00, 0x56, 0x4F, 0x4C, 0x53, 0x54, 0x00, 0x56, 0x4F, 0x4C, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Europe/Warsaw */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xA7, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x16, 0x99, 0xA8, 0x2A, 0xD0, -0x9B, 0x0C, 0x17, 0x60, 0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, -0x9E, 0xB9, 0x90, 0x90, 0x9F, 0x84, 0x97, 0x90, 0xA0, 0x9A, 0xB6, 0x00, 0xA1, 0x65, 0xBD, 0x00, -0xA6, 0x7D, 0x7C, 0x60, 0xC8, 0x76, 0xDE, 0x10, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x80, 0xA9, 0x60, 0xD0, 0x84, 0xBA, 0x00, -0xD1, 0x95, 0x92, 0x70, 0xD2, 0x8A, 0xBB, 0x60, 0xD3, 0x62, 0xFF, 0x70, 0xD4, 0x4B, 0x23, 0x90, -0xD5, 0x5E, 0xAD, 0x10, 0xD6, 0x29, 0xB4, 0x10, 0xD7, 0x2C, 0x1A, 0x10, 0xD8, 0x09, 0x96, 0x10, -0xD9, 0x02, 0xC1, 0x90, 0xD9, 0xE9, 0x78, 0x10, 0xE8, 0x54, 0xD2, 0x00, 0xE8, 0xF1, 0xB4, 0x80, -0xE9, 0xE1, 0xA5, 0x80, 0xEA, 0xD1, 0x96, 0x80, 0xEC, 0x14, 0x96, 0x00, 0xEC, 0xBA, 0xB3, 0x00, -0xED, 0xAA, 0xA4, 0x00, 0xEE, 0x9A, 0x95, 0x00, 0xEF, 0xD4, 0x5A, 0x00, 0xF0, 0x7A, 0x77, 0x00, -0xF1, 0xB4, 0x3C, 0x00, 0xF2, 0x5A, 0x59, 0x00, 0xF3, 0x94, 0x1E, 0x00, 0xF4, 0x3A, 0x3B, 0x00, -0xF5, 0x7D, 0x3A, 0x80, 0xF6, 0x1A, 0x1D, 0x00, 0x0D, 0x2A, 0xFD, 0x70, 0x0D, 0xA4, 0x55, 0x80, -0x0E, 0x8B, 0x0C, 0x00, 0x0F, 0x84, 0x37, 0x80, 0x10, 0x74, 0x28, 0x80, 0x11, 0x64, 0x19, 0x80, -0x12, 0x54, 0x0A, 0x80, 0x13, 0x4D, 0x36, 0x00, 0x14, 0x33, 0xEC, 0x80, 0x15, 0x23, 0xDD, 0x80, -0x16, 0x13, 0xCE, 0x80, 0x17, 0x03, 0xBF, 0x80, 0x17, 0xF3, 0xB0, 0x80, 0x18, 0xE3, 0xA1, 0x80, -0x19, 0xD3, 0x92, 0x80, 0x1A, 0xC3, 0x83, 0x80, 0x1B, 0xBC, 0xAF, 0x00, 0x1C, 0xAC, 0xA0, 0x00, -0x1D, 0x9C, 0x91, 0x00, 0x1E, 0x8C, 0x82, 0x00, 0x1F, 0x7C, 0x73, 0x00, 0x20, 0x6C, 0x64, 0x00, -0x21, 0x5C, 0x55, 0x00, 0x21, 0xDA, 0xD6, 0xF0, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, -0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, -0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, -0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, -0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, -0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, -0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, -0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, -0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, -0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x02, 0x01, 0x02, 0x03, 0x04, 0x03, 0x07, 0x05, -0x06, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x02, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x00, -0x00, 0x13, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, -0x09, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x2A, -0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x12, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x12, 0x00, -0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x57, 0x4D, 0x54, 0x00, 0x43, -0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, -0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Zagreb */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0xCA, 0x02, 0x35, 0xE0, -0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, -0xD0, 0x82, 0x25, 0x10, 0xD1, 0xA1, 0x8C, 0x10, 0xD2, 0x4E, 0x40, 0x90, 0x18, 0x45, 0x5F, 0x70, -0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, -0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, -0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, -0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, -0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, -0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, -0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, -0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, -0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, -0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, -0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, -0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x00, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, -0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, -0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, -0x10, 0x00, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, -0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Zaporozhye */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1E, 0xAA, 0x19, 0xA3, 0x30, -0xB5, 0xA4, 0x19, 0x60, 0xCA, 0xAA, 0xE7, 0xD0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCE, 0xBD, 0xD6, 0x70, 0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, -0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, 0x19, 0xDB, 0x43, 0x40, -0x1A, 0xCC, 0x93, 0xD0, 0x1B, 0xBC, 0xA0, 0xF0, 0x1C, 0xAC, 0x91, 0xF0, 0x1D, 0x9C, 0x82, 0xF0, -0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, -0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, 0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, -0x26, 0x0B, 0xFB, 0xF0, 0x27, 0x05, 0x27, 0x70, 0x27, 0xF5, 0x18, 0x70, 0x28, 0xE4, 0xED, 0x50, -0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50, -0x2D, 0x94, 0xB0, 0x60, 0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x01, 0x02, 0x05, 0x03, 0x04, 0x03, 0x02, 0x06, 0x02, 0x06, 0x02, 0x06, 0x02, 0x06, 0x07, 0x08, -0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x09, 0x01, 0x09, 0x01, 0x09, -0x01, 0x09, 0x01, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, -0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x00, 0x00, 0x20, 0xD0, 0x00, 0x00, 0x00, -0x00, 0x1C, 0x20, 0x00, 0x04, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, -0x0C, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x10, 0x00, 0x00, 0x38, -0x40, 0x01, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x08, 0x00, 0x00, 0x38, 0x40, 0x01, 0x15, 0x00, -0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, -0x04, 0x43, 0x55, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, -0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, -0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, - -/* Europe/Zurich */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xC9, 0x24, 0xC7, 0xF0, -0xC9, 0x72, 0x82, 0x60, 0xCA, 0x16, 0x26, 0x90, 0xCA, 0xE1, 0x03, 0x60, 0xCB, 0xF6, 0x08, 0x90, -0xCC, 0xC0, 0xE5, 0x60, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, -0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, -0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, -0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, -0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, -0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, -0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, -0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, -0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, -0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, -0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, -0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, -0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, -0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, -0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, -0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, -0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, -0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, -0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, -0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, -0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, -0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, -0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, -0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, -0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, -0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, -0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, -0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, -0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 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, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 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, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, -0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x43, 0x45, 0x53, 0x54, -0x00, 0x43, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, - -/* Factory */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x4C, 0x6F, 0x63, 0x61, 0x6C, 0x20, 0x74, 0x69, 0x6D, 0x65, 0x20, 0x7A, 0x6F, 0x6E, -0x65, 0x20, 0x6D, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x74, 0x2D, 0x2D, 0x73, -0x65, 0x65, 0x20, 0x7A, 0x69, 0x63, 0x20, 0x6D, 0x61, 0x6E, 0x75, 0x61, 0x6C, 0x20, 0x70, 0x61, -0x67, 0x65, 0x00, 0x00, 0x00, - -/* GB */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xF2, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0D, 0x9B, 0x26, 0xAD, 0xA0, -0x9B, 0xD6, 0x05, 0x20, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0, -0x9F, 0x97, 0x1A, 0xA0, 0xA0, 0x85, 0xBA, 0x20, 0xA1, 0x76, 0xFC, 0xA0, 0xA2, 0x65, 0x9C, 0x20, -0xA3, 0x7B, 0xC8, 0xA0, 0xA4, 0x4E, 0xB8, 0xA0, 0xA5, 0x3F, 0xFB, 0x20, 0xA6, 0x25, 0x60, 0x20, -0xA7, 0x27, 0xC6, 0x20, 0xA8, 0x2A, 0x2C, 0x20, 0xA8, 0xEB, 0xF8, 0xA0, 0xAA, 0x00, 0xD3, 0xA0, -0xAA, 0xD5, 0x15, 0x20, 0xAB, 0xE9, 0xF0, 0x20, 0xAC, 0xC7, 0x6C, 0x20, 0xAD, 0xC9, 0xD2, 0x20, -0xAE, 0xA7, 0x4E, 0x20, 0xAF, 0xA0, 0x79, 0xA0, 0xB0, 0x87, 0x30, 0x20, 0xB1, 0x92, 0xD0, 0xA0, -0xB2, 0x70, 0x4C, 0xA0, 0xB3, 0x72, 0xB2, 0xA0, 0xB4, 0x50, 0x2E, 0xA0, 0xB5, 0x49, 0x5A, 0x20, -0xB6, 0x30, 0x10, 0xA0, 0xB7, 0x32, 0x76, 0xA0, 0xB8, 0x0F, 0xF2, 0xA0, 0xB9, 0x12, 0x58, 0xA0, -0xB9, 0xEF, 0xD4, 0xA0, 0xBA, 0xE9, 0x00, 0x20, 0xBB, 0xD8, 0xF1, 0x20, 0xBC, 0xDB, 0x57, 0x20, -0xBD, 0xB8, 0xD3, 0x20, 0xBE, 0xB1, 0xFE, 0xA0, 0xBF, 0x98, 0xB5, 0x20, 0xC0, 0x9B, 0x1B, 0x20, -0xC1, 0x78, 0x97, 0x20, 0xC2, 0x7A, 0xFD, 0x20, 0xC3, 0x58, 0x79, 0x20, 0xC4, 0x51, 0xA4, 0xA0, -0xC5, 0x38, 0x5B, 0x20, 0xC6, 0x3A, 0xC1, 0x20, 0xC7, 0x58, 0xD6, 0xA0, 0xC7, 0xDA, 0x09, 0xA0, -0xCA, 0x16, 0x26, 0x90, 0xCA, 0x97, 0x59, 0x90, 0xCB, 0xD1, 0x1E, 0x90, 0xCC, 0x77, 0x3B, 0x90, -0xCD, 0xB1, 0x00, 0x90, 0xCE, 0x60, 0x58, 0x10, 0xCF, 0x90, 0xE2, 0x90, 0xD0, 0x6E, 0x5E, 0x90, -0xD1, 0x72, 0x16, 0x10, 0xD1, 0xFB, 0x32, 0x10, 0xD2, 0x69, 0xFE, 0x20, 0xD3, 0x63, 0x29, 0xA0, -0xD4, 0x49, 0xE0, 0x20, 0xD5, 0x1E, 0x21, 0xA0, 0xD5, 0x42, 0xFD, 0x90, 0xD5, 0xDF, 0xE0, 0x10, -0xD6, 0x4E, 0xAC, 0x20, 0xD6, 0xFE, 0x03, 0xA0, 0xD8, 0x2E, 0x8E, 0x20, 0xD8, 0xF9, 0x95, 0x20, -0xDA, 0x0E, 0x70, 0x20, 0xDA, 0xEB, 0xEC, 0x20, 0xDB, 0xE5, 0x17, 0xA0, 0xDC, 0xCB, 0xCE, 0x20, -0xDD, 0xC4, 0xF9, 0xA0, 0xDE, 0xB4, 0xEA, 0xA0, 0xDF, 0xAE, 0x16, 0x20, 0xE0, 0x94, 0xCC, 0xA0, -0xE1, 0x72, 0x48, 0xA0, 0xE2, 0x6B, 0x74, 0x20, 0xE3, 0x52, 0x2A, 0xA0, 0xE4, 0x54, 0x90, 0xA0, -0xE5, 0x32, 0x0C, 0xA0, 0xE6, 0x3D, 0xAD, 0x20, 0xE7, 0x1B, 0x29, 0x20, 0xE8, 0x14, 0x54, 0xA0, -0xE8, 0xFB, 0x0B, 0x20, 0xE9, 0xFD, 0x71, 0x20, 0xEA, 0xDA, 0xED, 0x20, 0xEB, 0xDD, 0x53, 0x20, -0xEC, 0xBA, 0xCF, 0x20, 0xED, 0xB3, 0xFA, 0xA0, 0xEE, 0x9A, 0xB1, 0x20, 0xEF, 0x81, 0x67, 0xA0, -0xF0, 0x9F, 0x7D, 0x20, 0xF1, 0x61, 0x49, 0xA0, 0xF2, 0x7F, 0x5F, 0x20, 0xF3, 0x4A, 0x66, 0x20, -0xF4, 0x5F, 0x41, 0x20, 0xF5, 0x21, 0x0D, 0xA0, 0xF6, 0x3F, 0x23, 0x20, 0xF7, 0x00, 0xEF, 0xA0, -0xF8, 0x1F, 0x05, 0x20, 0xF8, 0xE0, 0xD1, 0xA0, 0xF9, 0xFE, 0xE7, 0x20, 0xFA, 0xC0, 0xB3, 0xA0, -0xFB, 0xE8, 0x03, 0xA0, 0xFC, 0x7B, 0xAB, 0xA0, 0xFD, 0xC7, 0xBB, 0x70, 0x03, 0x70, 0xC6, 0x20, -0x04, 0x29, 0x58, 0x20, 0x05, 0x50, 0xA8, 0x20, 0x06, 0x09, 0x3A, 0x20, 0x07, 0x30, 0x8A, 0x20, -0x07, 0xE9, 0x1C, 0x20, 0x09, 0x10, 0x6C, 0x20, 0x09, 0xC8, 0xFE, 0x20, 0x0A, 0xF0, 0x4E, 0x20, -0x0B, 0xB2, 0x1A, 0xA0, 0x0C, 0xD0, 0x30, 0x20, 0x0D, 0x91, 0xFC, 0xA0, 0x0E, 0xB0, 0x12, 0x20, -0x0F, 0x71, 0xDE, 0xA0, 0x10, 0x99, 0x2E, 0xA0, 0x11, 0x51, 0xC0, 0xA0, 0x12, 0x79, 0x10, 0xA0, -0x13, 0x31, 0xA2, 0xA0, 0x14, 0x58, 0xF2, 0xA0, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x38, 0xC6, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x18, 0x18, 0xA8, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xF8, 0x8A, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xE1, 0xA7, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0xC1, 0x89, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0xA1, 0x6B, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x81, 0x4D, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x61, 0x2F, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x4A, 0x4B, 0x90, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x2A, 0x2D, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x29, 0x0A, 0x0F, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xE9, 0xF1, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xC9, 0xD3, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0xA9, 0xB5, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x89, 0x97, 0x90, -0x30, 0xE7, 0x24, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, -0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, -0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, -0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, -0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, -0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, -0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, -0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, -0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, -0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, -0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, -0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, -0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, -0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, -0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, -0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, -0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, -0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, -0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, -0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, -0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, -0x7F, 0x8E, 0x7F, 0x90, 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, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, -0x00, 0x01, 0x00, 0x02, 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, 0x03, -0x05, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x06, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, -0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, -0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x01, 0x01, 0x01, -0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, - -/* GB-Eire */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xF2, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0D, 0x9B, 0x26, 0xAD, 0xA0, -0x9B, 0xD6, 0x05, 0x20, 0x9C, 0xCF, 0x30, 0xA0, 0x9D, 0xA4, 0xC3, 0xA0, 0x9E, 0x9C, 0x9D, 0xA0, -0x9F, 0x97, 0x1A, 0xA0, 0xA0, 0x85, 0xBA, 0x20, 0xA1, 0x76, 0xFC, 0xA0, 0xA2, 0x65, 0x9C, 0x20, -0xA3, 0x7B, 0xC8, 0xA0, 0xA4, 0x4E, 0xB8, 0xA0, 0xA5, 0x3F, 0xFB, 0x20, 0xA6, 0x25, 0x60, 0x20, -0xA7, 0x27, 0xC6, 0x20, 0xA8, 0x2A, 0x2C, 0x20, 0xA8, 0xEB, 0xF8, 0xA0, 0xAA, 0x00, 0xD3, 0xA0, -0xAA, 0xD5, 0x15, 0x20, 0xAB, 0xE9, 0xF0, 0x20, 0xAC, 0xC7, 0x6C, 0x20, 0xAD, 0xC9, 0xD2, 0x20, -0xAE, 0xA7, 0x4E, 0x20, 0xAF, 0xA0, 0x79, 0xA0, 0xB0, 0x87, 0x30, 0x20, 0xB1, 0x92, 0xD0, 0xA0, -0xB2, 0x70, 0x4C, 0xA0, 0xB3, 0x72, 0xB2, 0xA0, 0xB4, 0x50, 0x2E, 0xA0, 0xB5, 0x49, 0x5A, 0x20, -0xB6, 0x30, 0x10, 0xA0, 0xB7, 0x32, 0x76, 0xA0, 0xB8, 0x0F, 0xF2, 0xA0, 0xB9, 0x12, 0x58, 0xA0, -0xB9, 0xEF, 0xD4, 0xA0, 0xBA, 0xE9, 0x00, 0x20, 0xBB, 0xD8, 0xF1, 0x20, 0xBC, 0xDB, 0x57, 0x20, -0xBD, 0xB8, 0xD3, 0x20, 0xBE, 0xB1, 0xFE, 0xA0, 0xBF, 0x98, 0xB5, 0x20, 0xC0, 0x9B, 0x1B, 0x20, -0xC1, 0x78, 0x97, 0x20, 0xC2, 0x7A, 0xFD, 0x20, 0xC3, 0x58, 0x79, 0x20, 0xC4, 0x51, 0xA4, 0xA0, -0xC5, 0x38, 0x5B, 0x20, 0xC6, 0x3A, 0xC1, 0x20, 0xC7, 0x58, 0xD6, 0xA0, 0xC7, 0xDA, 0x09, 0xA0, -0xCA, 0x16, 0x26, 0x90, 0xCA, 0x97, 0x59, 0x90, 0xCB, 0xD1, 0x1E, 0x90, 0xCC, 0x77, 0x3B, 0x90, -0xCD, 0xB1, 0x00, 0x90, 0xCE, 0x60, 0x58, 0x10, 0xCF, 0x90, 0xE2, 0x90, 0xD0, 0x6E, 0x5E, 0x90, -0xD1, 0x72, 0x16, 0x10, 0xD1, 0xFB, 0x32, 0x10, 0xD2, 0x69, 0xFE, 0x20, 0xD3, 0x63, 0x29, 0xA0, -0xD4, 0x49, 0xE0, 0x20, 0xD5, 0x1E, 0x21, 0xA0, 0xD5, 0x42, 0xFD, 0x90, 0xD5, 0xDF, 0xE0, 0x10, -0xD6, 0x4E, 0xAC, 0x20, 0xD6, 0xFE, 0x03, 0xA0, 0xD8, 0x2E, 0x8E, 0x20, 0xD8, 0xF9, 0x95, 0x20, -0xDA, 0x0E, 0x70, 0x20, 0xDA, 0xEB, 0xEC, 0x20, 0xDB, 0xE5, 0x17, 0xA0, 0xDC, 0xCB, 0xCE, 0x20, -0xDD, 0xC4, 0xF9, 0xA0, 0xDE, 0xB4, 0xEA, 0xA0, 0xDF, 0xAE, 0x16, 0x20, 0xE0, 0x94, 0xCC, 0xA0, -0xE1, 0x72, 0x48, 0xA0, 0xE2, 0x6B, 0x74, 0x20, 0xE3, 0x52, 0x2A, 0xA0, 0xE4, 0x54, 0x90, 0xA0, -0xE5, 0x32, 0x0C, 0xA0, 0xE6, 0x3D, 0xAD, 0x20, 0xE7, 0x1B, 0x29, 0x20, 0xE8, 0x14, 0x54, 0xA0, -0xE8, 0xFB, 0x0B, 0x20, 0xE9, 0xFD, 0x71, 0x20, 0xEA, 0xDA, 0xED, 0x20, 0xEB, 0xDD, 0x53, 0x20, -0xEC, 0xBA, 0xCF, 0x20, 0xED, 0xB3, 0xFA, 0xA0, 0xEE, 0x9A, 0xB1, 0x20, 0xEF, 0x81, 0x67, 0xA0, -0xF0, 0x9F, 0x7D, 0x20, 0xF1, 0x61, 0x49, 0xA0, 0xF2, 0x7F, 0x5F, 0x20, 0xF3, 0x4A, 0x66, 0x20, -0xF4, 0x5F, 0x41, 0x20, 0xF5, 0x21, 0x0D, 0xA0, 0xF6, 0x3F, 0x23, 0x20, 0xF7, 0x00, 0xEF, 0xA0, -0xF8, 0x1F, 0x05, 0x20, 0xF8, 0xE0, 0xD1, 0xA0, 0xF9, 0xFE, 0xE7, 0x20, 0xFA, 0xC0, 0xB3, 0xA0, -0xFB, 0xE8, 0x03, 0xA0, 0xFC, 0x7B, 0xAB, 0xA0, 0xFD, 0xC7, 0xBB, 0x70, 0x03, 0x70, 0xC6, 0x20, -0x04, 0x29, 0x58, 0x20, 0x05, 0x50, 0xA8, 0x20, 0x06, 0x09, 0x3A, 0x20, 0x07, 0x30, 0x8A, 0x20, -0x07, 0xE9, 0x1C, 0x20, 0x09, 0x10, 0x6C, 0x20, 0x09, 0xC8, 0xFE, 0x20, 0x0A, 0xF0, 0x4E, 0x20, -0x0B, 0xB2, 0x1A, 0xA0, 0x0C, 0xD0, 0x30, 0x20, 0x0D, 0x91, 0xFC, 0xA0, 0x0E, 0xB0, 0x12, 0x20, -0x0F, 0x71, 0xDE, 0xA0, 0x10, 0x99, 0x2E, 0xA0, 0x11, 0x51, 0xC0, 0xA0, 0x12, 0x79, 0x10, 0xA0, -0x13, 0x31, 0xA2, 0xA0, 0x14, 0x58, 0xF2, 0xA0, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x38, 0xC6, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x18, 0x18, 0xA8, 0x90, 0x18, 0xE3, 0xAF, 0x90, 0x19, 0xF8, 0x8A, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xE1, 0xA7, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0xC1, 0x89, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0xA1, 0x6B, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x81, 0x4D, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x61, 0x2F, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x4A, 0x4B, 0x90, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x2A, 0x2D, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x29, 0x0A, 0x0F, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xE9, 0xF1, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xC9, 0xD3, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0xA9, 0xB5, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x89, 0x97, 0x90, -0x30, 0xE7, 0x24, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, -0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, -0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, -0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, -0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, -0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, -0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, -0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, -0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, -0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, -0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, -0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, -0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, -0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, -0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, -0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, -0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, -0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, -0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, -0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, -0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, -0x7F, 0x8E, 0x7F, 0x90, 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, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, -0x00, 0x01, 0x00, 0x02, 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, 0x03, -0x05, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x06, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, -0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00, 0x00, 0x00, -0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, -0x42, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x42, 0x44, 0x53, 0x54, 0x00, 0x01, 0x01, 0x01, -0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, - -/* GMT */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, - -/* GMT0 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, - -/* GMT-0 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, - -/* GMT+0 */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, - -/* Greenwich */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x47, 0x4D, 0x54, 0x00, 0x00, 0x00, - -/* Hongkong */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x85, 0x69, 0x5A, 0xFC, -0xD3, 0x6A, 0xB7, 0x38, 0xD4, 0x93, 0x4A, 0xA8, 0xD5, 0x42, 0xB0, 0x38, 0xD6, 0x9A, 0xB9, 0xA8, -0xD7, 0x3E, 0x41, 0xB8, 0xD8, 0x2E, 0x24, 0xA8, 0xD8, 0xF9, 0x39, 0xB8, 0xDA, 0x0E, 0x06, 0xA8, -0xDA, 0xD9, 0x1B, 0xB8, 0xDB, 0xED, 0xE8, 0xA8, 0xDC, 0xB8, 0xFD, 0xB8, 0xDD, 0xCD, 0xCA, 0xA8, -0xDE, 0xA2, 0x1A, 0x38, 0xDF, 0xAD, 0xAC, 0xA8, 0xE0, 0x81, 0xFC, 0x38, 0xE1, 0x96, 0xC9, 0x28, -0xE2, 0x4F, 0x69, 0x38, 0xE3, 0x76, 0xAB, 0x28, 0xE4, 0x2F, 0x4B, 0x38, 0xE5, 0x5F, 0xC7, 0xA8, -0xE6, 0x0F, 0x2D, 0x38, 0xE7, 0x3F, 0xA9, 0xA8, 0xE7, 0xF8, 0x49, 0xB8, 0xE9, 0x1F, 0x8B, 0xA8, -0xE9, 0xD8, 0x2B, 0xB8, 0xEA, 0xFF, 0x6D, 0xA8, 0xEB, 0xB8, 0x0D, 0xB8, 0xEC, 0xDF, 0x4F, 0xA8, -0xED, 0x97, 0xEF, 0xB8, 0xEE, 0xC8, 0x6C, 0x28, 0xEF, 0x77, 0xD1, 0xB8, 0xF0, 0xA8, 0x4E, 0x28, -0xF1, 0x57, 0xB3, 0xB8, 0xF2, 0x88, 0x30, 0x28, 0xF3, 0x40, 0xD0, 0x38, 0xF4, 0x68, 0x12, 0x28, -0xF5, 0x20, 0xB2, 0x38, 0xF6, 0x47, 0xF4, 0x28, 0xF7, 0x25, 0x7E, 0x38, 0xF8, 0x15, 0x61, 0x28, -0xF9, 0x05, 0x60, 0x38, 0xF9, 0xF5, 0x43, 0x28, 0xFA, 0xE5, 0x42, 0x38, 0xFB, 0xDE, 0x5F, 0xA8, -0xFC, 0xCE, 0x5E, 0xB8, 0xFD, 0xBE, 0x41, 0xA8, 0xFE, 0xAE, 0x40, 0xB8, 0xFF, 0x9E, 0x23, 0xA8, -0x00, 0x8E, 0x22, 0xB8, 0x01, 0x7E, 0x05, 0xA8, 0x02, 0x6E, 0x04, 0xB8, 0x03, 0x5D, 0xE7, 0xA8, -0x04, 0x4D, 0xE6, 0xB8, 0x05, 0x47, 0x04, 0x28, 0x06, 0x37, 0x03, 0x38, 0x07, 0x26, 0xE6, 0x28, -0x08, 0x16, 0xE5, 0x38, 0x09, 0x06, 0xC8, 0x28, 0x09, 0xF6, 0xC7, 0x38, 0x0A, 0xE6, 0xAA, 0x28, -0x0B, 0xD6, 0xA9, 0x38, 0x0C, 0xC6, 0x8C, 0x28, 0x0D, 0xB6, 0x8B, 0x38, 0x0E, 0xA6, 0x6E, 0x28, -0x11, 0x9B, 0x39, 0x38, 0x12, 0x6F, 0x6C, 0xA8, 0x13, 0x7B, 0x1B, 0x38, 0x14, 0x4F, 0x4E, 0xA8, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x6B, 0x04, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, -0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x48, 0x4B, 0x53, 0x54, 0x00, -0x48, 0x4B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* HST */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0x73, 0x60, -0x00, 0x00, 0x48, 0x53, 0x54, 0x00, 0x00, 0x00, - -/* Iceland */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x11, 0x8B, 0x60, 0x83, 0x94, -0x9C, 0x91, 0x1E, 0x00, 0x9D, 0xD1, 0x88, 0x90, 0x9E, 0x72, 0x51, 0x80, 0x9F, 0xD5, 0x03, 0x10, -0xC6, 0x4D, 0x1A, 0x00, 0xC7, 0x66, 0x05, 0xA0, 0xC7, 0xDA, 0x17, 0xB0, 0xC9, 0x26, 0x43, 0xA0, -0xC9, 0xC3, 0x26, 0x20, 0xCB, 0x06, 0x25, 0xA0, 0xCB, 0xAC, 0x42, 0xA0, 0xCC, 0xDC, 0xCD, 0x20, -0xCD, 0x8C, 0x24, 0xA0, 0xCE, 0xBC, 0xAF, 0x20, 0xCF, 0x6C, 0x06, 0xA0, 0xD0, 0x9C, 0x91, 0x20, -0xD1, 0x4B, 0xE8, 0xA0, 0xD2, 0x85, 0xAD, 0xA0, 0xD3, 0x2B, 0xCA, 0xA0, 0xD4, 0x65, 0x8F, 0xA0, -0xD5, 0x39, 0xD1, 0x20, 0xD6, 0x45, 0x71, 0xA0, 0xD7, 0x19, 0xB3, 0x20, 0xD8, 0x25, 0x53, 0xA0, -0xD8, 0xF9, 0x95, 0x20, 0xDA, 0x0E, 0x70, 0x20, 0xDA, 0xD9, 0x77, 0x20, 0xDB, 0xE5, 0x17, 0xA0, -0xDC, 0xB9, 0x59, 0x20, 0xDD, 0xCE, 0x34, 0x20, 0xDE, 0xA2, 0x75, 0xA0, 0xDF, 0xAE, 0x16, 0x20, -0xE0, 0x82, 0x57, 0xA0, 0xE1, 0x8D, 0xF8, 0x20, 0xE2, 0x62, 0x39, 0xA0, 0xE3, 0x6D, 0xDA, 0x20, -0xE4, 0x42, 0x1B, 0xA0, 0xE5, 0x4D, 0xBC, 0x20, 0xE6, 0x21, 0xFD, 0xA0, 0xE7, 0x36, 0xD8, 0xA0, -0xE8, 0x0B, 0x1A, 0x20, 0xE9, 0x16, 0xBA, 0xA0, 0xE9, 0xEA, 0xFC, 0x20, 0xEA, 0xF6, 0x9C, 0xA0, -0xEB, 0xCA, 0xDE, 0x20, 0xEC, 0xD6, 0x7E, 0xA0, 0xED, 0xAA, 0xC0, 0x20, 0xEE, 0xB6, 0x60, 0xA0, -0xEF, 0x8A, 0xA2, 0x20, 0xF0, 0x96, 0x42, 0xA0, 0xF1, 0x6A, 0x84, 0x20, 0xF2, 0x7F, 0x5F, 0x20, -0xF3, 0x53, 0xA0, 0xA0, 0xF4, 0x5F, 0x41, 0x20, 0xF5, 0x33, 0x82, 0xA0, 0xF6, 0x3F, 0x23, 0x20, -0xF7, 0x13, 0x64, 0xA0, 0xF8, 0x1F, 0x05, 0x20, 0xF8, 0xF3, 0x46, 0xA0, 0xF9, 0xFE, 0xE7, 0x20, -0xFA, 0xD3, 0x28, 0xA0, 0xFB, 0xE8, 0x03, 0xA0, 0xFC, 0xBC, 0x45, 0x20, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x05, 0xFF, 0xFF, 0xEB, 0x6C, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x09, 0x00, 0x00, -0x00, 0x00, 0x01, 0x04, 0xFF, 0xFF, 0xF1, 0xF0, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, -0x52, 0x4D, 0x54, 0x00, 0x49, 0x53, 0x53, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x47, 0x4D, 0x54, -0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Indian/Antananarivo */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0D, 0x91, 0xF3, 0xCD, 0xF4, -0xE2, 0x33, 0xC0, 0xC0, 0xE2, 0xAB, 0xB9, 0x40, 0x01, 0x02, 0x03, 0x00, 0x00, 0x2C, 0x8C, 0x00, -0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x00, 0x00, 0x38, 0x40, 0x01, 0x08, 0x00, 0x00, 0x2A, -0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x41, 0x54, 0x00, 0x45, 0x41, 0x53, 0x54, 0x00, -0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - -/* Indian/Chagos */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x89, 0x7E, 0xF7, 0x9C, -0x30, 0xE6, 0xDD, 0xB0, 0x01, 0x02, 0x00, 0x00, 0x43, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x46, 0x50, -0x00, 0x04, 0x00, 0x00, 0x54, 0x60, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x49, 0x4F, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Indian/Christmas */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x62, 0x70, -0x00, 0x00, 0x43, 0x58, 0x54, 0x00, 0x00, 0x00, - -/* Indian/Cocos */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x5B, 0x68, -0x00, 0x00, 0x43, 0x43, 0x54, 0x00, 0x00, 0x00, - -/* Indian/Comoro */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF3, 0xD1, 0xF0, -0x01, 0x00, 0x00, 0x28, 0x90, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Indian/Kerguelen */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xDA, 0x61, 0x62, 0x80, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x7A, 0x7A, 0x7A, -0x00, 0x54, 0x46, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Indian/Mahe */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x88, 0x64, 0xE6, 0x84, -0x01, 0x00, 0x00, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x53, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Indian/Maldives */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xED, 0x2F, 0xC3, 0x98, -0x01, 0x00, 0x00, 0x44, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x46, 0x50, 0x00, 0x04, 0x4D, 0x4D, 0x54, -0x00, 0x4D, 0x56, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Indian/Mauritius */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x89, 0x7F, 0x05, 0x98, -0x01, 0x00, 0x00, 0x35, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x4D, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Indian/Mayotte */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xF3, 0xD0, 0x18, -0x01, 0x00, 0x00, 0x2A, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x45, 0x41, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Indian/Reunion */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x91, 0xCC, 0x39, 0x80, -0x01, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x40, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x52, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Iran */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0x9A, 0x6C, 0x7D, 0xC8, -0xD2, 0xDB, 0x12, 0xC8, 0x0E, 0xBB, 0xA2, 0x48, 0x0F, 0x74, 0x2D, 0x40, 0x10, 0x8E, 0x40, 0x30, -0x10, 0xED, 0x3A, 0x40, 0x11, 0x55, 0x67, 0xC8, 0x12, 0x45, 0x4A, 0xB8, 0x13, 0x37, 0xEC, 0xC8, -0x14, 0x2D, 0x15, 0xB8, 0x28, 0x20, 0x76, 0xC8, 0x28, 0xDB, 0x9D, 0xB8, 0x29, 0xCB, 0x9C, 0xC8, -0x2A, 0xBE, 0x22, 0xB8, 0x2B, 0xAC, 0xD0, 0x48, 0x2C, 0x9F, 0x56, 0x38, 0x2D, 0x8E, 0x03, 0xC8, -0x2E, 0x80, 0x89, 0xB8, 0x2F, 0x6F, 0x37, 0x48, 0x30, 0x61, 0xBD, 0x38, 0x31, 0x50, 0x6A, 0xC8, -0x32, 0x42, 0xF0, 0xB8, 0x33, 0x32, 0xEF, 0xC8, 0x34, 0x25, 0x75, 0xB8, 0x35, 0x14, 0x23, 0x48, -0x36, 0x06, 0xA9, 0x38, 0x36, 0xF5, 0x56, 0xC8, 0x37, 0xE7, 0xDC, 0xB8, 0x38, 0xD6, 0x8A, 0x48, -0x39, 0xC9, 0x10, 0x38, 0x3A, 0xB9, 0x0F, 0x48, 0x3B, 0xAB, 0x95, 0x38, 0x3C, 0x9A, 0x42, 0xC8, -0x3D, 0x8C, 0xC8, 0xB8, 0x3E, 0x7B, 0x76, 0x48, 0x3F, 0x6D, 0xFC, 0x38, 0x40, 0x5C, 0xA9, 0xC8, -0x41, 0x4F, 0x2F, 0xB8, 0x42, 0x3F, 0x2E, 0xC8, 0x43, 0x31, 0xB4, 0xB8, 0x01, 0x02, 0x04, 0x03, -0x04, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, -0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, -0x05, 0x02, 0x05, 0x02, 0x00, 0x00, 0x30, 0x38, 0x00, 0x00, 0x00, 0x00, 0x30, 0x38, 0x00, 0x04, -0x00, 0x00, 0x31, 0x38, 0x00, 0x08, 0x00, 0x00, 0x46, 0x50, 0x01, 0x0D, 0x00, 0x00, 0x38, 0x40, -0x00, 0x08, 0x00, 0x00, 0x3F, 0x48, 0x01, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x54, 0x4D, 0x54, 0x00, -0x49, 0x52, 0x53, 0x54, 0x00, 0x49, 0x52, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Israel */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x9E, 0x30, 0x45, 0x88, -0xC8, 0x59, 0xB2, 0xE0, 0xCC, 0xE5, 0xC1, 0x50, 0xCD, 0xAC, 0xFE, 0x00, 0xCE, 0xC6, 0xF4, 0xD0, -0xCF, 0x8F, 0x66, 0xE0, 0xD0, 0xA9, 0x79, 0xD0, 0xD1, 0x84, 0x60, 0xE0, 0xD2, 0x8A, 0xC9, 0x70, -0xD3, 0x65, 0xB0, 0x80, 0xD4, 0x6B, 0xE0, 0xD0, 0xD7, 0x5A, 0x14, 0x60, 0xD7, 0xDF, 0x1F, 0xC0, -0xD8, 0x2F, 0xB5, 0x70, 0xD9, 0x1E, 0x46, 0xE0, 0xDA, 0x10, 0xE8, 0xF0, 0xDA, 0xEB, 0xB3, 0xE0, -0xDB, 0xB4, 0x34, 0x00, 0xDC, 0xB9, 0x20, 0xE0, 0xDD, 0xE0, 0x8D, 0x00, 0xDE, 0xB4, 0xCE, 0x80, -0xDF, 0xA4, 0xBF, 0x80, 0xE0, 0x8B, 0x76, 0x00, 0xE1, 0x56, 0x7D, 0x00, 0xE2, 0xBE, 0x4A, 0x60, -0xE3, 0x36, 0x34, 0xD0, 0xE4, 0x9C, 0xF7, 0x00, 0xE5, 0x16, 0x16, 0xD0, 0xE6, 0x74, 0xD3, 0xE0, -0xE7, 0x11, 0xD2, 0x80, 0xE8, 0x27, 0xFF, 0x00, 0xE8, 0xE8, 0x4F, 0xD0, 0x08, 0x7C, 0x8B, 0xE0, -0x08, 0xFD, 0xB0, 0xD0, 0x09, 0xF6, 0xEA, 0x60, 0x0A, 0xA6, 0x33, 0xD0, 0x1C, 0xBE, 0xF8, 0xE0, -0x1D, 0x89, 0xF1, 0xD0, 0x1E, 0xCC, 0xFF, 0x60, 0x1F, 0x60, 0x99, 0x50, 0x20, 0x82, 0xB1, 0x60, -0x21, 0x49, 0xB5, 0xD0, 0x22, 0x5D, 0x4D, 0x60, 0x23, 0x1F, 0x0B, 0xD0, 0x24, 0x5A, 0x30, 0x60, -0x25, 0x00, 0x3F, 0x50, 0x26, 0x0B, 0xED, 0xE0, 0x26, 0xD6, 0xE6, 0xD0, 0x27, 0xEB, 0xCF, 0xE0, -0x28, 0xC0, 0x03, 0x50, 0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xA9, 0x1F, 0xD0, 0x2B, 0xBB, 0x65, 0xE0, -0x2C, 0x89, 0x01, 0xD0, 0x2D, 0x9B, 0x47, 0xE0, 0x2E, 0x5F, 0xA9, 0x50, 0x2F, 0x7B, 0x29, 0xE0, -0x30, 0x48, 0xC5, 0xD0, 0x31, 0x48, 0x96, 0xE0, 0x32, 0x3C, 0x6E, 0x50, 0x33, 0x31, 0xB3, 0x60, -0x34, 0x1A, 0xFE, 0xD0, 0x35, 0x11, 0x95, 0x60, 0x35, 0xF1, 0xA6, 0x50, 0x37, 0x04, 0x08, 0x80, -0x37, 0xCF, 0x01, 0x70, 0x38, 0xF6, 0x5F, 0x80, 0x39, 0xDC, 0xF9, 0xE0, 0x3A, 0xD0, 0xED, 0x70, -0x3B, 0xAE, 0x5B, 0x60, 0x3C, 0xA3, 0xA0, 0x70, 0x3D, 0xA0, 0xB2, 0x60, 0x3E, 0x83, 0x82, 0x70, -0x3F, 0x7C, 0x9F, 0xE0, 0x40, 0x73, 0x36, 0x70, 0x41, 0x50, 0xA4, 0x60, 0x42, 0x4C, 0x8F, 0x00, -0x43, 0x48, 0x4F, 0x70, 0x44, 0x2C, 0x71, 0x00, 0x45, 0x1E, 0xF6, 0xF0, 0x46, 0x0C, 0x53, 0x00, -0x46, 0xEC, 0x63, 0xF0, 0x47, 0xEC, 0x35, 0x00, 0x48, 0xE7, 0xF5, 0x70, 0x49, 0xCC, 0x17, 0x00, -0x4A, 0xBE, 0x9C, 0xF0, 0x4B, 0xAB, 0xF9, 0x00, 0x4C, 0x8C, 0x09, 0xF0, 0x4D, 0x95, 0x15, 0x80, -0x4E, 0x87, 0x9B, 0x70, 0x4F, 0x74, 0xF7, 0x80, 0x50, 0x5E, 0x42, 0xF0, 0x51, 0x54, 0xD9, 0x80, -0x52, 0x2B, 0xAF, 0xF0, 0x53, 0x34, 0xBB, 0x80, 0x54, 0x27, 0x41, 0x70, 0x55, 0x14, 0x9D, 0x80, -0x55, 0xFD, 0xE8, 0xF0, 0x56, 0xFD, 0xBA, 0x00, 0x57, 0xF9, 0x7A, 0x70, 0x58, 0xDD, 0x9C, 0x00, -0x59, 0xC6, 0xE7, 0x70, 0x5A, 0xBD, 0x7E, 0x00, 0x5B, 0x9D, 0x8E, 0xF0, 0x5C, 0x9D, 0x60, 0x00, -0x5D, 0x99, 0x20, 0x70, 0x5E, 0x7D, 0x42, 0x00, 0x5F, 0x6F, 0xC7, 0xF0, 0x60, 0x5D, 0x24, 0x00, -0x61, 0x3D, 0x34, 0xF0, 0x62, 0x46, 0x40, 0x80, 0x63, 0x38, 0xC6, 0x70, 0x64, 0x26, 0x22, 0x80, -0x65, 0x0F, 0x6D, 0xF0, 0x66, 0x06, 0x04, 0x80, 0x67, 0x01, 0xC4, 0xF0, 0x67, 0xE5, 0xE6, 0x80, -0x68, 0xD8, 0x6C, 0x70, 0x69, 0xC5, 0xC8, 0x80, 0x6A, 0xAF, 0x13, 0xF0, 0x6B, 0xA5, 0xAA, 0x80, -0x6C, 0xAA, 0xA5, 0x70, 0x6D, 0x8E, 0xC7, 0x00, 0x6E, 0x78, 0x12, 0x70, 0x6F, 0x6E, 0xA9, 0x00, -0x70, 0x4E, 0xB9, 0xF0, 0x71, 0x4E, 0x8B, 0x00, 0x72, 0x4A, 0x4B, 0x70, 0x73, 0x2E, 0x6D, 0x00, -0x74, 0x17, 0xB8, 0x70, 0x75, 0x0E, 0x4F, 0x00, 0x75, 0xEE, 0x5F, 0xF0, 0x76, 0xF7, 0x6B, 0x80, -0x77, 0xE9, 0xF1, 0x70, 0x78, 0xD7, 0x4D, 0x80, 0x79, 0xB7, 0x5E, 0x70, 0x7A, 0xB7, 0x2F, 0x80, -0x7B, 0xB2, 0xEF, 0xF0, 0x7C, 0x97, 0x11, 0x80, 0x7D, 0x89, 0x97, 0x70, 0x7E, 0x76, 0xF3, 0x80, -0x7F, 0x57, 0x04, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x00, 0x00, 0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, -0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0C, 0x4A, 0x4D, 0x54, 0x00, 0x49, 0x44, -0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x49, 0x44, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, - -/* Jamaica */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x93, 0x0F, 0xB5, 0x00, -0x08, 0x20, 0xC1, 0x70, 0x09, 0x10, 0xA4, 0x60, 0x09, 0xAD, 0x94, 0xF0, 0x0A, 0xF0, 0x86, 0x60, -0x0B, 0xE0, 0x85, 0x70, 0x0C, 0xD9, 0xA2, 0xE0, 0x0D, 0xC0, 0x67, 0x70, 0x0E, 0xB9, 0x84, 0xE0, -0x0F, 0xA9, 0x83, 0xF0, 0x10, 0x99, 0x66, 0xE0, 0x11, 0x89, 0x65, 0xF0, 0x12, 0x79, 0x48, 0xE0, -0x13, 0x69, 0x47, 0xF0, 0x14, 0x59, 0x2A, 0xE0, 0x15, 0x49, 0x29, 0xF0, 0x16, 0x39, 0x0C, 0xE0, -0x17, 0x29, 0x0B, 0xF0, 0x18, 0x22, 0x29, 0x60, 0x19, 0x08, 0xED, 0xF0, 0x1A, 0x02, 0x0B, 0x60, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xB8, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, -0x04, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x08, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, -0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Japan */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xC3, 0xCE, 0x85, 0x70, -0xD7, 0x3E, 0x1E, 0x90, 0xD7, 0xEC, 0x16, 0x80, 0xD8, 0xF9, 0x16, 0x90, 0xD9, 0xCB, 0xF8, 0x80, -0xDB, 0x07, 0x1D, 0x10, 0xDB, 0xAB, 0xDA, 0x80, 0xDC, 0xE6, 0xFF, 0x10, 0xDD, 0x8B, 0xBC, 0x80, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x00, 0x00, -0x00, 0x8C, 0xA0, 0x01, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x08, 0x43, 0x4A, 0x54, 0x00, 0x4A, -0x44, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Kwajalein */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xFF, 0x86, 0x1B, 0x50, -0x2C, 0x74, 0xBC, 0xC0, 0x01, 0x02, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x00, 0xFF, 0xFF, 0x57, 0x40, -0x00, 0x04, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x00, 0x4D, 0x48, 0x54, 0x00, 0x4B, 0x57, 0x41, 0x54, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Libya */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0xA1, 0xF2, 0xC1, 0x24, -0xDD, 0xBB, 0xB1, 0x10, 0xDE, 0x23, 0xAD, 0x60, 0xE1, 0x78, 0xD2, 0x10, 0xE1, 0xE7, 0x65, 0xE0, -0xE5, 0x2F, 0x3F, 0x70, 0xE5, 0xA9, 0xCC, 0xE0, 0xEB, 0x4E, 0xC6, 0xF0, 0x16, 0x92, 0x42, 0x60, -0x17, 0x08, 0xF7, 0x70, 0x17, 0xFA, 0x2B, 0xE0, 0x18, 0xEA, 0x2A, 0xF0, 0x19, 0xDB, 0x5F, 0x60, -0x1A, 0xCC, 0xAF, 0xF0, 0x1B, 0xBD, 0xE4, 0x60, 0x1C, 0xB4, 0x7A, 0xF0, 0x1D, 0x9F, 0x17, 0xE0, -0x1E, 0x93, 0x0B, 0x70, 0x1F, 0x82, 0xEE, 0x60, 0x20, 0x70, 0x4A, 0x70, 0x21, 0x61, 0x7E, 0xE0, -0x22, 0x52, 0xCF, 0x70, 0x23, 0x44, 0x03, 0xE0, 0x24, 0x34, 0x02, 0xF0, 0x25, 0x25, 0x37, 0x60, -0x26, 0x40, 0xB7, 0xF0, 0x32, 0x4E, 0xF1, 0x60, 0x33, 0x44, 0x36, 0x70, 0x34, 0x35, 0x6A, 0xE0, -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, 0x03, 0x02, 0x01, 0x03, 0x00, 0x00, 0x0C, -0x5C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, -0x00, 0x1C, 0x20, 0x00, 0x0D, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x43, 0x45, -0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* MET */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x9B, 0x0C, 0x17, 0x60, -0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, 0x9E, 0xB9, 0x90, 0x90, -0x9F, 0x84, 0x97, 0x90, 0xC8, 0x09, 0x71, 0x90, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x82, 0x25, 0x10, 0x0D, 0xA4, 0x63, 0x90, -0x0E, 0x8B, 0x1A, 0x10, 0x0F, 0x84, 0x45, 0x90, 0x10, 0x74, 0x36, 0x90, 0x11, 0x64, 0x27, 0x90, -0x12, 0x54, 0x18, 0x90, 0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, -0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, -0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, -0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, -0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, -0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, -0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, -0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, -0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, -0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, -0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, -0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, -0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, -0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, -0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, -0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, -0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, -0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, -0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, -0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, -0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, -0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, -0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, -0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, -0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, -0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, -0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, -0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, -0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, -0x7F, 0x8E, 0x7F, 0x90, 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, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 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, 0x1C, 0x20, 0x01, 0x00, -0x00, 0x00, 0x0E, 0x10, 0x00, 0x05, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x10, -0x00, 0x05, 0x4D, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, -0x00, 0x00, 0x00, - -/* Mexico/BajaNorte */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0xA5, 0xB6, 0xF6, 0x80, -0xA9, 0x79, 0x4F, 0x70, 0xAF, 0xF2, 0x7C, 0xF0, 0xB6, 0x66, 0x64, 0x70, 0xB7, 0x1B, 0x10, 0x00, -0xB8, 0x0A, 0xF2, 0xF0, 0xCB, 0xEA, 0x8D, 0x80, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x99, 0xBA, 0x70, -0xD7, 0x1B, 0x59, 0x00, 0xD8, 0x91, 0xB4, 0xF0, 0xE2, 0x7E, 0x59, 0xA0, 0xE3, 0x49, 0x52, 0x90, -0xE4, 0x5E, 0x3B, 0xA0, 0xE5, 0x29, 0x34, 0x90, 0xE6, 0x47, 0x58, 0x20, 0xE7, 0x12, 0x51, 0x10, -0xE8, 0x27, 0x3A, 0x20, 0xE8, 0xF2, 0x33, 0x10, 0xEA, 0x07, 0x1C, 0x20, 0xEA, 0xD2, 0x15, 0x10, -0xEB, 0xE6, 0xFE, 0x20, 0xEC, 0xB1, 0xF7, 0x10, 0xED, 0xC6, 0xE0, 0x20, 0xEE, 0x91, 0xD9, 0x10, -0x0B, 0xE0, 0xAF, 0xA0, 0x0C, 0xD9, 0xCD, 0x10, 0x0D, 0xC0, 0x91, 0xA0, 0x0E, 0xB9, 0xAF, 0x10, -0x0F, 0xA9, 0xAE, 0x20, 0x10, 0x99, 0x91, 0x10, 0x11, 0x89, 0x90, 0x20, 0x12, 0x79, 0x73, 0x10, -0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, 0x15, 0x49, 0x54, 0x20, 0x16, 0x39, 0x37, 0x10, -0x17, 0x29, 0x36, 0x20, 0x18, 0x22, 0x53, 0x90, 0x19, 0x09, 0x18, 0x20, 0x1A, 0x02, 0x35, 0x90, -0x1A, 0xF2, 0x34, 0xA0, 0x1B, 0xE2, 0x17, 0x90, 0x1C, 0xD2, 0x16, 0xA0, 0x1D, 0xC1, 0xF9, 0x90, -0x1E, 0xB1, 0xF8, 0xA0, 0x1F, 0xA1, 0xDB, 0x90, 0x20, 0x76, 0x2B, 0x20, 0x21, 0x81, 0xBD, 0x90, -0x22, 0x56, 0x0D, 0x20, 0x23, 0x6A, 0xDA, 0x10, 0x24, 0x35, 0xEF, 0x20, 0x25, 0x4A, 0xBC, 0x10, -0x26, 0x15, 0xD1, 0x20, 0x27, 0x2A, 0x9E, 0x10, 0x27, 0xFE, 0xED, 0xA0, 0x29, 0x0A, 0x80, 0x10, -0x29, 0xDE, 0xCF, 0xA0, 0x2A, 0xEA, 0x62, 0x10, 0x2B, 0xBE, 0xB1, 0xA0, 0x2C, 0xD3, 0x7E, 0x90, -0x2D, 0x9E, 0x93, 0xA0, 0x2E, 0xB3, 0x60, 0x90, 0x2F, 0x7E, 0x75, 0xA0, 0x30, 0x93, 0x42, 0x90, -0x31, 0x67, 0x92, 0x20, 0x32, 0x73, 0x24, 0x90, 0x33, 0x47, 0x74, 0x20, 0x34, 0x53, 0x06, 0x90, -0x35, 0x27, 0x56, 0x20, 0x36, 0x32, 0xE8, 0x90, 0x37, 0x07, 0x38, 0x20, 0x38, 0x1C, 0x05, 0x10, -0x38, 0xE7, 0x1A, 0x20, 0x39, 0xFB, 0xE7, 0x10, 0x3A, 0xC6, 0xFC, 0x20, 0x3B, 0xDB, 0xC9, 0x10, -0x3C, 0xB0, 0x18, 0xA0, 0x3D, 0xBB, 0xAB, 0x10, 0x3E, 0x8F, 0xFA, 0xA0, 0x3F, 0x9B, 0x8D, 0x10, -0x40, 0x6F, 0xDC, 0xA0, 0x41, 0x84, 0xA9, 0x90, 0x42, 0x4F, 0xBE, 0xA0, 0x43, 0x64, 0x8B, 0x90, -0x44, 0x2F, 0xA0, 0xA0, 0x45, 0x44, 0x6D, 0x90, 0x46, 0x0F, 0x82, 0xA0, 0x47, 0x24, 0x4F, 0x90, -0x47, 0xF8, 0x9F, 0x20, 0x49, 0x04, 0x31, 0x90, 0x49, 0xD8, 0x81, 0x20, 0x4A, 0xE4, 0x13, 0x90, -0x4B, 0xB8, 0x63, 0x20, 0x4C, 0xCD, 0x30, 0x10, 0x4D, 0x98, 0x45, 0x20, 0x4E, 0xAD, 0x12, 0x10, -0x4F, 0x78, 0x27, 0x20, 0x50, 0x8C, 0xF4, 0x10, 0x51, 0x61, 0x43, 0xA0, 0x52, 0x6C, 0xD6, 0x10, -0x53, 0x41, 0x25, 0xA0, 0x54, 0x4C, 0xB8, 0x10, 0x55, 0x21, 0x07, 0xA0, 0x56, 0x2C, 0x9A, 0x10, -0x57, 0x00, 0xE9, 0xA0, 0x58, 0x15, 0xB6, 0x90, 0x58, 0xE0, 0xCB, 0xA0, 0x59, 0xF5, 0x98, 0x90, -0x5A, 0xC0, 0xAD, 0xA0, 0x5B, 0xD5, 0x7A, 0x90, 0x5C, 0xA9, 0xCA, 0x20, 0x5D, 0xB5, 0x5C, 0x90, -0x5E, 0x89, 0xAC, 0x20, 0x5F, 0x95, 0x3E, 0x90, 0x60, 0x69, 0x8E, 0x20, 0x61, 0x7E, 0x5B, 0x10, -0x62, 0x49, 0x70, 0x20, 0x63, 0x5E, 0x3D, 0x10, 0x64, 0x29, 0x52, 0x20, 0x65, 0x3E, 0x1F, 0x10, -0x66, 0x12, 0x6E, 0xA0, 0x67, 0x1E, 0x01, 0x10, 0x67, 0xF2, 0x50, 0xA0, 0x68, 0xFD, 0xE3, 0x10, -0x69, 0xD2, 0x32, 0xA0, 0x6A, 0xDD, 0xC5, 0x10, 0x6B, 0xB2, 0x14, 0xA0, 0x6C, 0xC6, 0xE1, 0x90, -0x6D, 0x91, 0xF6, 0xA0, 0x6E, 0xA6, 0xC3, 0x90, 0x6F, 0x71, 0xD8, 0xA0, 0x70, 0x86, 0xA5, 0x90, -0x71, 0x5A, 0xF5, 0x20, 0x72, 0x66, 0x87, 0x90, 0x73, 0x3A, 0xD7, 0x20, 0x74, 0x46, 0x69, 0x90, -0x75, 0x1A, 0xB9, 0x20, 0x76, 0x2F, 0x86, 0x10, 0x76, 0xFA, 0x9B, 0x20, 0x78, 0x0F, 0x68, 0x10, -0x78, 0xDA, 0x7D, 0x20, 0x79, 0xEF, 0x4A, 0x10, 0x7A, 0xBA, 0x5F, 0x20, 0x7B, 0xCF, 0x2C, 0x10, -0x7C, 0xA3, 0x7B, 0xA0, 0x7D, 0xAF, 0x0E, 0x10, 0x7E, 0x83, 0x5D, 0xA0, 0x7F, 0x8E, 0xF0, 0x10, -0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x04, 0x05, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0xFF, 0xFF, 0x92, 0x4C, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, -0x04, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0xFF, 0xFF, 0x9D, -0x90, 0x01, 0x10, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, -0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x44, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - -/* Mexico/BajaSur */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xA5, 0xB6, 0xE8, 0x70, -0xAF, 0xF2, 0x6E, 0xE0, 0xB6, 0x66, 0x56, 0x60, 0xB7, 0x43, 0xD2, 0x60, 0xB8, 0x0C, 0x36, 0x60, -0xB8, 0xFD, 0x86, 0xF0, 0xCB, 0xEA, 0x71, 0x60, 0xD8, 0x91, 0xB4, 0xF0, 0x00, 0x00, 0x70, 0x80, -0x31, 0x67, 0x84, 0x10, 0x32, 0x73, 0x16, 0x80, 0x33, 0x47, 0x66, 0x10, 0x34, 0x52, 0xF8, 0x80, -0x35, 0x27, 0x48, 0x10, 0x36, 0x32, 0xDA, 0x80, 0x37, 0x07, 0x2A, 0x10, 0x38, 0x1B, 0xF7, 0x00, -0x38, 0xE7, 0x0C, 0x10, 0x39, 0xFB, 0xD9, 0x00, 0x3A, 0xF5, 0x12, 0x90, 0x3B, 0xB6, 0xD1, 0x00, -0x3C, 0xB0, 0x0A, 0x90, 0x3D, 0xBB, 0x9D, 0x00, 0x3E, 0x8F, 0xEC, 0x90, 0x3F, 0x9B, 0x7F, 0x00, -0x40, 0x6F, 0xCE, 0x90, 0x41, 0x84, 0x9B, 0x80, 0x42, 0x4F, 0xB0, 0x90, 0x43, 0x64, 0x7D, 0x80, -0x44, 0x2F, 0x92, 0x90, 0x45, 0x44, 0x5F, 0x80, 0x46, 0x0F, 0x74, 0x90, 0x47, 0x24, 0x41, 0x80, -0x47, 0xF8, 0x91, 0x10, 0x49, 0x04, 0x23, 0x80, 0x49, 0xD8, 0x73, 0x10, 0x4A, 0xE4, 0x05, 0x80, -0x4B, 0xB8, 0x55, 0x10, 0x4C, 0xCD, 0x22, 0x00, 0x4D, 0x98, 0x37, 0x10, 0x4E, 0xAD, 0x04, 0x00, -0x4F, 0x78, 0x19, 0x10, 0x50, 0x8C, 0xE6, 0x00, 0x51, 0x61, 0x35, 0x90, 0x52, 0x6C, 0xC8, 0x00, -0x53, 0x41, 0x17, 0x90, 0x54, 0x4C, 0xAA, 0x00, 0x55, 0x20, 0xF9, 0x90, 0x56, 0x2C, 0x8C, 0x00, -0x57, 0x00, 0xDB, 0x90, 0x58, 0x15, 0xA8, 0x80, 0x58, 0xE0, 0xBD, 0x90, 0x59, 0xF5, 0x8A, 0x80, -0x5A, 0xC0, 0x9F, 0x90, 0x5B, 0xD5, 0x6C, 0x80, 0x5C, 0xA9, 0xBC, 0x10, 0x5D, 0xB5, 0x4E, 0x80, -0x5E, 0x89, 0x9E, 0x10, 0x5F, 0x95, 0x30, 0x80, 0x60, 0x69, 0x80, 0x10, 0x61, 0x7E, 0x4D, 0x00, -0x62, 0x49, 0x62, 0x10, 0x63, 0x5E, 0x2F, 0x00, 0x64, 0x29, 0x44, 0x10, 0x65, 0x3E, 0x11, 0x00, -0x66, 0x12, 0x60, 0x90, 0x67, 0x1D, 0xF3, 0x00, 0x67, 0xF2, 0x42, 0x90, 0x68, 0xFD, 0xD5, 0x00, -0x69, 0xD2, 0x24, 0x90, 0x6A, 0xDD, 0xB7, 0x00, 0x6B, 0xB2, 0x06, 0x90, 0x6C, 0xC6, 0xD3, 0x80, -0x6D, 0x91, 0xE8, 0x90, 0x6E, 0xA6, 0xB5, 0x80, 0x6F, 0x71, 0xCA, 0x90, 0x70, 0x86, 0x97, 0x80, -0x71, 0x5A, 0xE7, 0x10, 0x72, 0x66, 0x79, 0x80, 0x73, 0x3A, 0xC9, 0x10, 0x74, 0x46, 0x5B, 0x80, -0x75, 0x1A, 0xAB, 0x10, 0x76, 0x2F, 0x78, 0x00, 0x76, 0xFA, 0x8D, 0x10, 0x78, 0x0F, 0x5A, 0x00, -0x78, 0xDA, 0x6F, 0x10, 0x79, 0xEF, 0x3C, 0x00, 0x7A, 0xBA, 0x51, 0x10, 0x7B, 0xCF, 0x1E, 0x00, -0x7C, 0xA3, 0x6D, 0x90, 0x7D, 0xAF, 0x00, 0x00, 0x7E, 0x83, 0x4F, 0x90, 0x7F, 0x8E, 0xE2, 0x00, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, -0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, -0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, -0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, -0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, -0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0xFF, 0xFF, 0x9C, -0x3C, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, -0xFF, 0x8F, 0x80, 0x00, 0x0C, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x4D, -0x53, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x4D, 0x44, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Mexico/General */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xA5, 0xB6, 0xE8, 0x70, -0xAF, 0xF2, 0x6E, 0xE0, 0xB6, 0x66, 0x56, 0x60, 0xB7, 0x43, 0xD2, 0x60, 0xB8, 0x0C, 0x36, 0x60, -0xB8, 0xFD, 0x86, 0xF0, 0xC5, 0xDE, 0xB0, 0x60, 0xC6, 0x97, 0x34, 0x50, 0xC9, 0x55, 0xF1, 0xE0, -0xC9, 0xEA, 0xDD, 0x50, 0xCF, 0x02, 0xC6, 0xE0, 0xCF, 0xB7, 0x56, 0x50, 0xDA, 0x99, 0x15, 0xE0, -0xDB, 0x76, 0x83, 0xD0, 0x31, 0x67, 0x76, 0x00, 0x32, 0x73, 0x08, 0x70, 0x33, 0x47, 0x58, 0x00, -0x34, 0x52, 0xEA, 0x70, 0x35, 0x27, 0x3A, 0x00, 0x36, 0x32, 0xCC, 0x70, 0x37, 0x07, 0x1C, 0x00, -0x38, 0x1B, 0xE8, 0xF0, 0x38, 0xE6, 0xFE, 0x00, 0x39, 0xFB, 0xCA, 0xF0, 0x3A, 0xF5, 0x04, 0x80, -0x3B, 0xB6, 0xC2, 0xF0, 0x3C, 0xAF, 0xFC, 0x80, 0x3D, 0xBB, 0x8E, 0xF0, 0x3E, 0x8F, 0xDE, 0x80, -0x3F, 0x9B, 0x70, 0xF0, 0x40, 0x6F, 0xC0, 0x80, 0x41, 0x84, 0x8D, 0x70, 0x42, 0x4F, 0xA2, 0x80, -0x43, 0x64, 0x6F, 0x70, 0x44, 0x2F, 0x84, 0x80, 0x45, 0x44, 0x51, 0x70, 0x46, 0x0F, 0x66, 0x80, -0x47, 0x24, 0x33, 0x70, 0x47, 0xF8, 0x83, 0x00, 0x49, 0x04, 0x15, 0x70, 0x49, 0xD8, 0x65, 0x00, -0x4A, 0xE3, 0xF7, 0x70, 0x4B, 0xB8, 0x47, 0x00, 0x4C, 0xCD, 0x13, 0xF0, 0x4D, 0x98, 0x29, 0x00, -0x4E, 0xAC, 0xF5, 0xF0, 0x4F, 0x78, 0x0B, 0x00, 0x50, 0x8C, 0xD7, 0xF0, 0x51, 0x61, 0x27, 0x80, -0x52, 0x6C, 0xB9, 0xF0, 0x53, 0x41, 0x09, 0x80, 0x54, 0x4C, 0x9B, 0xF0, 0x55, 0x20, 0xEB, 0x80, -0x56, 0x2C, 0x7D, 0xF0, 0x57, 0x00, 0xCD, 0x80, 0x58, 0x15, 0x9A, 0x70, 0x58, 0xE0, 0xAF, 0x80, -0x59, 0xF5, 0x7C, 0x70, 0x5A, 0xC0, 0x91, 0x80, 0x5B, 0xD5, 0x5E, 0x70, 0x5C, 0xA9, 0xAE, 0x00, -0x5D, 0xB5, 0x40, 0x70, 0x5E, 0x89, 0x90, 0x00, 0x5F, 0x95, 0x22, 0x70, 0x60, 0x69, 0x72, 0x00, -0x61, 0x7E, 0x3E, 0xF0, 0x62, 0x49, 0x54, 0x00, 0x63, 0x5E, 0x20, 0xF0, 0x64, 0x29, 0x36, 0x00, -0x65, 0x3E, 0x02, 0xF0, 0x66, 0x12, 0x52, 0x80, 0x67, 0x1D, 0xE4, 0xF0, 0x67, 0xF2, 0x34, 0x80, -0x68, 0xFD, 0xC6, 0xF0, 0x69, 0xD2, 0x16, 0x80, 0x6A, 0xDD, 0xA8, 0xF0, 0x6B, 0xB1, 0xF8, 0x80, -0x6C, 0xC6, 0xC5, 0x70, 0x6D, 0x91, 0xDA, 0x80, 0x6E, 0xA6, 0xA7, 0x70, 0x6F, 0x71, 0xBC, 0x80, -0x70, 0x86, 0x89, 0x70, 0x71, 0x5A, 0xD9, 0x00, 0x72, 0x66, 0x6B, 0x70, 0x73, 0x3A, 0xBB, 0x00, -0x74, 0x46, 0x4D, 0x70, 0x75, 0x1A, 0x9D, 0x00, 0x76, 0x2F, 0x69, 0xF0, 0x76, 0xFA, 0x7F, 0x00, -0x78, 0x0F, 0x4B, 0xF0, 0x78, 0xDA, 0x61, 0x00, 0x79, 0xEF, 0x2D, 0xF0, 0x7A, 0xBA, 0x43, 0x00, -0x7B, 0xCF, 0x0F, 0xF0, 0x7C, 0xA3, 0x5F, 0x80, 0x7D, 0xAE, 0xF1, 0xF0, 0x7E, 0x83, 0x41, 0x80, -0x7F, 0x8E, 0xD3, 0xF0, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x04, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, -0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0xFF, 0xFF, 0xA3, 0x0C, 0x00, 0x00, 0xFF, 0xFF, 0x9D, 0x90, -0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, -0xB9, 0xB0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, -0x43, 0x44, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, - -/* MST */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0x9D, 0x90, -0x00, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x00, 0x00, - -/* MST7MDT */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x3A, 0x90, -0x9F, 0xBB, 0x07, 0x80, 0xA0, 0x86, 0x1C, 0x90, 0xA1, 0x9A, 0xE9, 0x80, 0xCB, 0x89, 0x0C, 0x90, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x18, 0x00, 0xFA, 0xF8, 0x75, 0x10, 0xFB, 0xE8, 0x58, 0x00, -0xFC, 0xD8, 0x57, 0x10, 0xFD, 0xC8, 0x3A, 0x00, 0xFE, 0xB8, 0x39, 0x10, 0xFF, 0xA8, 0x1C, 0x00, -0x00, 0x98, 0x1B, 0x10, 0x01, 0x87, 0xFE, 0x00, 0x02, 0x77, 0xFD, 0x10, 0x03, 0x71, 0x1A, 0x80, -0x04, 0x61, 0x19, 0x90, 0x05, 0x50, 0xFC, 0x80, 0x06, 0x40, 0xFB, 0x90, 0x07, 0x30, 0xDE, 0x80, -0x07, 0x8D, 0x35, 0x90, 0x09, 0x10, 0xC0, 0x80, 0x09, 0xAD, 0xB1, 0x10, 0x0A, 0xF0, 0xA2, 0x80, -0x0B, 0xE0, 0xA1, 0x90, 0x0C, 0xD9, 0xBF, 0x00, 0x0D, 0xC0, 0x83, 0x90, 0x0E, 0xB9, 0xA1, 0x00, -0x0F, 0xA9, 0xA0, 0x10, 0x10, 0x99, 0x83, 0x00, 0x11, 0x89, 0x82, 0x10, 0x12, 0x79, 0x65, 0x00, -0x13, 0x69, 0x64, 0x10, 0x14, 0x59, 0x47, 0x00, 0x15, 0x49, 0x46, 0x10, 0x16, 0x39, 0x29, 0x00, -0x17, 0x29, 0x28, 0x10, 0x18, 0x22, 0x45, 0x80, 0x19, 0x09, 0x0A, 0x10, 0x1A, 0x02, 0x27, 0x80, -0x1A, 0xF2, 0x26, 0x90, 0x1B, 0xE2, 0x09, 0x80, 0x1C, 0xD2, 0x08, 0x90, 0x1D, 0xC1, 0xEB, 0x80, -0x1E, 0xB1, 0xEA, 0x90, 0x1F, 0xA1, 0xCD, 0x80, 0x20, 0x76, 0x1D, 0x10, 0x21, 0x81, 0xAF, 0x80, -0x22, 0x55, 0xFF, 0x10, 0x23, 0x6A, 0xCC, 0x00, 0x24, 0x35, 0xE1, 0x10, 0x25, 0x4A, 0xAE, 0x00, -0x26, 0x15, 0xC3, 0x10, 0x27, 0x2A, 0x90, 0x00, 0x27, 0xFE, 0xDF, 0x90, 0x29, 0x0A, 0x72, 0x00, -0x29, 0xDE, 0xC1, 0x90, 0x2A, 0xEA, 0x54, 0x00, 0x2B, 0xBE, 0xA3, 0x90, 0x2C, 0xD3, 0x70, 0x80, -0x2D, 0x9E, 0x85, 0x90, 0x2E, 0xB3, 0x52, 0x80, 0x2F, 0x7E, 0x67, 0x90, 0x30, 0x93, 0x34, 0x80, -0x31, 0x67, 0x84, 0x10, 0x32, 0x73, 0x16, 0x80, 0x33, 0x47, 0x66, 0x10, 0x34, 0x52, 0xF8, 0x80, -0x35, 0x27, 0x48, 0x10, 0x36, 0x32, 0xDA, 0x80, 0x37, 0x07, 0x2A, 0x10, 0x38, 0x1B, 0xF7, 0x00, -0x38, 0xE7, 0x0C, 0x10, 0x39, 0xFB, 0xD9, 0x00, 0x3A, 0xC6, 0xEE, 0x10, 0x3B, 0xDB, 0xBB, 0x00, -0x3C, 0xB0, 0x0A, 0x90, 0x3D, 0xBB, 0x9D, 0x00, 0x3E, 0x8F, 0xEC, 0x90, 0x3F, 0x9B, 0x7F, 0x00, -0x40, 0x6F, 0xCE, 0x90, 0x41, 0x84, 0x9B, 0x80, 0x42, 0x4F, 0xB0, 0x90, 0x43, 0x64, 0x7D, 0x80, -0x44, 0x2F, 0x92, 0x90, 0x45, 0x44, 0x5F, 0x80, 0x45, 0xF3, 0xC5, 0x10, 0x47, 0x2D, 0x7C, 0x00, -0x47, 0xD3, 0xA7, 0x10, 0x49, 0x0D, 0x5E, 0x00, 0x49, 0xB3, 0x89, 0x10, 0x4A, 0xED, 0x40, 0x00, -0x4B, 0x9C, 0xA5, 0x90, 0x4C, 0xD6, 0x5C, 0x80, 0x4D, 0x7C, 0x87, 0x90, 0x4E, 0xB6, 0x3E, 0x80, -0x4F, 0x5C, 0x69, 0x90, 0x50, 0x96, 0x20, 0x80, 0x51, 0x3C, 0x4B, 0x90, 0x52, 0x76, 0x02, 0x80, -0x53, 0x1C, 0x2D, 0x90, 0x54, 0x55, 0xE4, 0x80, 0x54, 0xFC, 0x0F, 0x90, 0x56, 0x35, 0xC6, 0x80, -0x56, 0xE5, 0x2C, 0x10, 0x58, 0x1E, 0xE3, 0x00, 0x58, 0xC5, 0x0E, 0x10, 0x59, 0xFE, 0xC5, 0x00, -0x5A, 0xA4, 0xF0, 0x10, 0x5B, 0xDE, 0xA7, 0x00, 0x5C, 0x84, 0xD2, 0x10, 0x5D, 0xBE, 0x89, 0x00, -0x5E, 0x64, 0xB4, 0x10, 0x5F, 0x9E, 0x6B, 0x00, 0x60, 0x4D, 0xD0, 0x90, 0x61, 0x87, 0x87, 0x80, -0x62, 0x2D, 0xB2, 0x90, 0x63, 0x67, 0x69, 0x80, 0x64, 0x0D, 0x94, 0x90, 0x65, 0x47, 0x4B, 0x80, -0x65, 0xED, 0x76, 0x90, 0x67, 0x27, 0x2D, 0x80, 0x67, 0xCD, 0x58, 0x90, 0x69, 0x07, 0x0F, 0x80, -0x69, 0xAD, 0x3A, 0x90, 0x6A, 0xE6, 0xF1, 0x80, 0x6B, 0x96, 0x57, 0x10, 0x6C, 0xD0, 0x0E, 0x00, -0x6D, 0x76, 0x39, 0x10, 0x6E, 0xAF, 0xF0, 0x00, 0x6F, 0x56, 0x1B, 0x10, 0x70, 0x8F, 0xD2, 0x00, -0x71, 0x35, 0xFD, 0x10, 0x72, 0x6F, 0xB4, 0x00, 0x73, 0x15, 0xDF, 0x10, 0x74, 0x4F, 0x96, 0x00, -0x74, 0xFE, 0xFB, 0x90, 0x76, 0x38, 0xB2, 0x80, 0x76, 0xDE, 0xDD, 0x90, 0x78, 0x18, 0x94, 0x80, -0x78, 0xBE, 0xBF, 0x90, 0x79, 0xF8, 0x76, 0x80, 0x7A, 0x9E, 0xA1, 0x90, 0x7B, 0xD8, 0x58, 0x80, -0x7C, 0x7E, 0x83, 0x90, 0x7D, 0xB8, 0x3A, 0x80, 0x7E, 0x5E, 0x65, 0x90, 0x7F, 0x98, 0x1C, 0x80, -0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 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, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, -0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0x4D, 0x44, 0x54, -0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x4D, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, 0x00, 0x00, 0x01, - -/* Navajo */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x9D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x3A, 0x90, -0x9F, 0xBB, 0x07, 0x80, 0xA0, 0x86, 0x1C, 0x90, 0xA1, 0x9A, 0xE9, 0x80, 0xA2, 0x65, 0xFE, 0x90, -0xA3, 0x84, 0x06, 0x00, 0xA4, 0x45, 0xE0, 0x90, 0xA4, 0x8F, 0xA6, 0x80, 0xCB, 0x89, 0x0C, 0x90, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x18, 0x00, 0xF7, 0x2F, 0x76, 0x90, 0xF8, 0x28, 0x94, 0x00, -0xF9, 0x0F, 0x58, 0x90, 0xFA, 0x08, 0x76, 0x00, 0xFA, 0xF8, 0x75, 0x10, 0xFB, 0xE8, 0x58, 0x00, -0xFC, 0xD8, 0x57, 0x10, 0xFD, 0xC8, 0x3A, 0x00, 0xFE, 0xB8, 0x39, 0x10, 0xFF, 0xA8, 0x1C, 0x00, -0x00, 0x98, 0x1B, 0x10, 0x01, 0x87, 0xFE, 0x00, 0x02, 0x77, 0xFD, 0x10, 0x03, 0x71, 0x1A, 0x80, -0x04, 0x61, 0x19, 0x90, 0x05, 0x50, 0xFC, 0x80, 0x06, 0x40, 0xFB, 0x90, 0x07, 0x30, 0xDE, 0x80, -0x07, 0x8D, 0x35, 0x90, 0x09, 0x10, 0xC0, 0x80, 0x09, 0xAD, 0xB1, 0x10, 0x0A, 0xF0, 0xA2, 0x80, -0x0B, 0xE0, 0xA1, 0x90, 0x0C, 0xD9, 0xBF, 0x00, 0x0D, 0xC0, 0x83, 0x90, 0x0E, 0xB9, 0xA1, 0x00, -0x0F, 0xA9, 0xA0, 0x10, 0x10, 0x99, 0x83, 0x00, 0x11, 0x89, 0x82, 0x10, 0x12, 0x79, 0x65, 0x00, -0x13, 0x69, 0x64, 0x10, 0x14, 0x59, 0x47, 0x00, 0x15, 0x49, 0x46, 0x10, 0x16, 0x39, 0x29, 0x00, -0x17, 0x29, 0x28, 0x10, 0x18, 0x22, 0x45, 0x80, 0x19, 0x09, 0x0A, 0x10, 0x1A, 0x02, 0x27, 0x80, -0x1A, 0xF2, 0x26, 0x90, 0x1B, 0xE2, 0x09, 0x80, 0x1C, 0xD2, 0x08, 0x90, 0x1D, 0xC1, 0xEB, 0x80, -0x1E, 0xB1, 0xEA, 0x90, 0x1F, 0xA1, 0xCD, 0x80, 0x20, 0x76, 0x1D, 0x10, 0x21, 0x81, 0xAF, 0x80, -0x22, 0x55, 0xFF, 0x10, 0x23, 0x6A, 0xCC, 0x00, 0x24, 0x35, 0xE1, 0x10, 0x25, 0x4A, 0xAE, 0x00, -0x26, 0x15, 0xC3, 0x10, 0x27, 0x2A, 0x90, 0x00, 0x27, 0xFE, 0xDF, 0x90, 0x29, 0x0A, 0x72, 0x00, -0x29, 0xDE, 0xC1, 0x90, 0x2A, 0xEA, 0x54, 0x00, 0x2B, 0xBE, 0xA3, 0x90, 0x2C, 0xD3, 0x70, 0x80, -0x2D, 0x9E, 0x85, 0x90, 0x2E, 0xB3, 0x52, 0x80, 0x2F, 0x7E, 0x67, 0x90, 0x30, 0x93, 0x34, 0x80, -0x31, 0x67, 0x84, 0x10, 0x32, 0x73, 0x16, 0x80, 0x33, 0x47, 0x66, 0x10, 0x34, 0x52, 0xF8, 0x80, -0x35, 0x27, 0x48, 0x10, 0x36, 0x32, 0xDA, 0x80, 0x37, 0x07, 0x2A, 0x10, 0x38, 0x1B, 0xF7, 0x00, -0x38, 0xE7, 0x0C, 0x10, 0x39, 0xFB, 0xD9, 0x00, 0x3A, 0xC6, 0xEE, 0x10, 0x3B, 0xDB, 0xBB, 0x00, -0x3C, 0xB0, 0x0A, 0x90, 0x3D, 0xBB, 0x9D, 0x00, 0x3E, 0x8F, 0xEC, 0x90, 0x3F, 0x9B, 0x7F, 0x00, -0x40, 0x6F, 0xCE, 0x90, 0x41, 0x84, 0x9B, 0x80, 0x42, 0x4F, 0xB0, 0x90, 0x43, 0x64, 0x7D, 0x80, -0x44, 0x2F, 0x92, 0x90, 0x45, 0x44, 0x5F, 0x80, 0x45, 0xF3, 0xC5, 0x10, 0x47, 0x2D, 0x7C, 0x00, -0x47, 0xD3, 0xA7, 0x10, 0x49, 0x0D, 0x5E, 0x00, 0x49, 0xB3, 0x89, 0x10, 0x4A, 0xED, 0x40, 0x00, -0x4B, 0x9C, 0xA5, 0x90, 0x4C, 0xD6, 0x5C, 0x80, 0x4D, 0x7C, 0x87, 0x90, 0x4E, 0xB6, 0x3E, 0x80, -0x4F, 0x5C, 0x69, 0x90, 0x50, 0x96, 0x20, 0x80, 0x51, 0x3C, 0x4B, 0x90, 0x52, 0x76, 0x02, 0x80, -0x53, 0x1C, 0x2D, 0x90, 0x54, 0x55, 0xE4, 0x80, 0x54, 0xFC, 0x0F, 0x90, 0x56, 0x35, 0xC6, 0x80, -0x56, 0xE5, 0x2C, 0x10, 0x58, 0x1E, 0xE3, 0x00, 0x58, 0xC5, 0x0E, 0x10, 0x59, 0xFE, 0xC5, 0x00, -0x5A, 0xA4, 0xF0, 0x10, 0x5B, 0xDE, 0xA7, 0x00, 0x5C, 0x84, 0xD2, 0x10, 0x5D, 0xBE, 0x89, 0x00, -0x5E, 0x64, 0xB4, 0x10, 0x5F, 0x9E, 0x6B, 0x00, 0x60, 0x4D, 0xD0, 0x90, 0x61, 0x87, 0x87, 0x80, -0x62, 0x2D, 0xB2, 0x90, 0x63, 0x67, 0x69, 0x80, 0x64, 0x0D, 0x94, 0x90, 0x65, 0x47, 0x4B, 0x80, -0x65, 0xED, 0x76, 0x90, 0x67, 0x27, 0x2D, 0x80, 0x67, 0xCD, 0x58, 0x90, 0x69, 0x07, 0x0F, 0x80, -0x69, 0xAD, 0x3A, 0x90, 0x6A, 0xE6, 0xF1, 0x80, 0x6B, 0x96, 0x57, 0x10, 0x6C, 0xD0, 0x0E, 0x00, -0x6D, 0x76, 0x39, 0x10, 0x6E, 0xAF, 0xF0, 0x00, 0x6F, 0x56, 0x1B, 0x10, 0x70, 0x8F, 0xD2, 0x00, -0x71, 0x35, 0xFD, 0x10, 0x72, 0x6F, 0xB4, 0x00, 0x73, 0x15, 0xDF, 0x10, 0x74, 0x4F, 0x96, 0x00, -0x74, 0xFE, 0xFB, 0x90, 0x76, 0x38, 0xB2, 0x80, 0x76, 0xDE, 0xDD, 0x90, 0x78, 0x18, 0x94, 0x80, -0x78, 0xBE, 0xBF, 0x90, 0x79, 0xF8, 0x76, 0x80, 0x7A, 0x9E, 0xA1, 0x90, 0x7B, 0xD8, 0x58, 0x80, -0x7C, 0x7E, 0x83, 0x90, 0x7D, 0xB8, 0x3A, 0x80, 0x7E, 0x5E, 0x65, 0x90, 0x7F, 0x98, 0x1C, 0x80, -0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 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, 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, 0xFF, 0xFF, 0xAB, -0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF, -0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, -0x00, 0x4D, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - -/* NZ */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0F, 0xB0, 0xB4, 0xB2, 0xE8, -0xB1, 0x51, 0x87, 0x58, 0xB2, 0x78, 0xE5, 0x68, 0xB3, 0x43, 0xE5, 0x60, 0xB4, 0x58, 0xC7, 0x68, -0xB5, 0x23, 0xC7, 0x60, 0xB6, 0x38, 0xA9, 0x68, 0xB7, 0x03, 0xA9, 0x60, 0xB8, 0x18, 0x8B, 0x68, -0xB8, 0xEC, 0xC5, 0xE0, 0xB9, 0xF8, 0x6D, 0x68, 0xBA, 0xCC, 0xA7, 0xE0, 0xBB, 0xD8, 0x4F, 0x68, -0xBC, 0xE3, 0xE8, 0xE0, 0xBD, 0xAE, 0xF6, 0xE8, 0xBE, 0xC3, 0xCA, 0xE0, 0xBF, 0x8E, 0xD8, 0xE8, -0xC0, 0xA3, 0xAC, 0xE0, 0xC1, 0x6E, 0xBA, 0xE8, 0xC2, 0x83, 0x8E, 0xE0, 0xC3, 0x4E, 0x9C, 0xE8, -0xC4, 0x63, 0x70, 0xE0, 0xC5, 0x2E, 0x7E, 0xE8, 0xC6, 0x4C, 0x8D, 0x60, 0xC7, 0x0E, 0x60, 0xE8, -0xC8, 0x2C, 0x6F, 0x60, 0xC8, 0xF7, 0x7D, 0x68, 0xD2, 0xDA, 0x9A, 0x40, 0x09, 0x18, 0xFD, 0xE0, -0x09, 0xAC, 0xA5, 0xE0, 0x0A, 0xEF, 0xA5, 0x60, 0x0B, 0x9E, 0xFC, 0xE0, 0x0C, 0xD8, 0xC1, 0xE0, -0x0D, 0x7E, 0xDE, 0xE0, 0x0E, 0xB8, 0xA3, 0xE0, 0x0F, 0x5E, 0xC0, 0xE0, 0x10, 0x98, 0x85, 0xE0, -0x11, 0x3E, 0xA2, 0xE0, 0x12, 0x78, 0x67, 0xE0, 0x13, 0x1E, 0x84, 0xE0, 0x14, 0x58, 0x49, 0xE0, -0x14, 0xFE, 0x66, 0xE0, 0x16, 0x38, 0x2B, 0xE0, 0x16, 0xE7, 0x83, 0x60, 0x18, 0x21, 0x48, 0x60, -0x18, 0xC7, 0x65, 0x60, 0x1A, 0x01, 0x2A, 0x60, 0x1A, 0xA7, 0x47, 0x60, 0x1B, 0xE1, 0x0C, 0x60, -0x1C, 0x87, 0x29, 0x60, 0x1D, 0xC0, 0xEE, 0x60, 0x1E, 0x67, 0x0B, 0x60, 0x1F, 0xA0, 0xD0, 0x60, -0x20, 0x46, 0xED, 0x60, 0x21, 0x80, 0xB2, 0x60, 0x22, 0x30, 0x09, 0xE0, 0x23, 0x69, 0xCE, 0xE0, -0x24, 0x0F, 0xEB, 0xE0, 0x25, 0x2E, 0x01, 0x60, 0x26, 0x02, 0x42, 0xE0, 0x27, 0x0D, 0xE3, 0x60, -0x27, 0xE2, 0x24, 0xE0, 0x28, 0xED, 0xC5, 0x60, 0x29, 0xC2, 0x06, 0xE0, 0x2A, 0xCD, 0xA7, 0x60, -0x2B, 0xAB, 0x23, 0x60, 0x2C, 0xAD, 0x89, 0x60, 0x2D, 0x8B, 0x05, 0x60, 0x2E, 0x8D, 0x6B, 0x60, -0x2F, 0x6A, 0xE7, 0x60, 0x30, 0x6D, 0x4D, 0x60, 0x31, 0x4A, 0xC9, 0x60, 0x32, 0x56, 0x69, 0xE0, -0x33, 0x2A, 0xAB, 0x60, 0x34, 0x36, 0x4B, 0xE0, 0x35, 0x0A, 0x8D, 0x60, 0x36, 0x16, 0x2D, 0xE0, -0x36, 0xF3, 0xA9, 0xE0, 0x37, 0xF6, 0x0F, 0xE0, 0x38, 0xD3, 0x8B, 0xE0, 0x39, 0xD5, 0xF1, 0xE0, -0x3A, 0xB3, 0x6D, 0xE0, 0x3B, 0xBF, 0x0E, 0x60, 0x3C, 0x93, 0x4F, 0xE0, 0x3D, 0x9E, 0xF0, 0x60, -0x3E, 0x73, 0x31, 0xE0, 0x3F, 0x7E, 0xD2, 0x60, 0x40, 0x5C, 0x4E, 0x60, 0x41, 0x5E, 0xB4, 0x60, -0x42, 0x3C, 0x30, 0x60, 0x43, 0x3E, 0x96, 0x60, 0x44, 0x1C, 0x12, 0x60, 0x45, 0x1E, 0x78, 0x60, -0x45, 0xFB, 0xF4, 0x60, 0x47, 0x07, 0x94, 0xE0, 0x47, 0xDB, 0xD6, 0x60, 0x48, 0xE7, 0x76, 0xE0, -0x49, 0xBB, 0xB8, 0x60, 0x4A, 0xC7, 0x58, 0xE0, 0x4B, 0xA4, 0xD4, 0xE0, 0x4C, 0xA7, 0x3A, 0xE0, -0x4D, 0x84, 0xB6, 0xE0, 0x4E, 0x87, 0x1C, 0xE0, 0x4F, 0x64, 0x98, 0xE0, 0x50, 0x70, 0x39, 0x60, -0x51, 0x44, 0x7A, 0xE0, 0x52, 0x50, 0x1B, 0x60, 0x53, 0x24, 0x5C, 0xE0, 0x54, 0x2F, 0xFD, 0x60, -0x55, 0x04, 0x3E, 0xE0, 0x56, 0x0F, 0xDF, 0x60, 0x56, 0xED, 0x5B, 0x60, 0x57, 0xEF, 0xC1, 0x60, -0x58, 0xCD, 0x3D, 0x60, 0x59, 0xCF, 0xA3, 0x60, 0x5A, 0xAD, 0x1F, 0x60, 0x5B, 0xB8, 0xBF, 0xE0, -0x5C, 0x8D, 0x01, 0x60, 0x5D, 0x98, 0xA1, 0xE0, 0x5E, 0x6C, 0xE3, 0x60, 0x5F, 0x78, 0x83, 0xE0, -0x60, 0x55, 0xFF, 0xE0, 0x61, 0x58, 0x65, 0xE0, 0x62, 0x35, 0xE1, 0xE0, 0x63, 0x38, 0x47, 0xE0, -0x64, 0x15, 0xC3, 0xE0, 0x65, 0x18, 0x29, 0xE0, 0x65, 0xF5, 0xA5, 0xE0, 0x67, 0x01, 0x46, 0x60, -0x67, 0xD5, 0x87, 0xE0, 0x68, 0xE1, 0x28, 0x60, 0x69, 0xB5, 0x69, 0xE0, 0x6A, 0xC1, 0x0A, 0x60, -0x6B, 0x9E, 0x86, 0x60, 0x6C, 0xA0, 0xEC, 0x60, 0x6D, 0x7E, 0x68, 0x60, 0x6E, 0x80, 0xCE, 0x60, -0x6F, 0x5E, 0x4A, 0x60, 0x70, 0x69, 0xEA, 0xE0, 0x71, 0x3E, 0x2C, 0x60, 0x72, 0x49, 0xCC, 0xE0, -0x73, 0x1E, 0x0E, 0x60, 0x74, 0x29, 0xAE, 0xE0, 0x75, 0x07, 0x2A, 0xE0, 0x76, 0x09, 0x90, 0xE0, -0x76, 0xE7, 0x0C, 0xE0, 0x77, 0xE9, 0x72, 0xE0, 0x78, 0xC6, 0xEE, 0xE0, 0x79, 0xC9, 0x54, 0xE0, -0x7A, 0xA6, 0xD0, 0xE0, 0x7B, 0xB2, 0x71, 0x60, 0x7C, 0x86, 0xB2, 0xE0, 0x7D, 0x92, 0x53, 0x60, -0x7E, 0x66, 0x94, 0xE0, 0x7F, 0x72, 0x35, 0x60, 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, 0x05, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x00, 0x00, 0xAF, 0xC8, 0x01, 0x00, 0x00, 0x00, 0xA1, 0xB8, 0x00, 0x05, 0x00, -0x00, 0xA8, 0xC0, 0x01, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x0A, 0x00, 0x00, 0xA8, 0xC0, 0x00, -0x00, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x00, 0x4E, 0x5A, 0x53, 0x54, 0x00, 0x4E, 0x5A, 0x4D, 0x54, -0x00, 0x4E, 0x5A, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, - -/* NZ-CHAT */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0xE7, 0x8B, 0xC2, 0x04, -0x09, 0x18, 0xFD, 0xE0, 0x09, 0xAC, 0xA5, 0xE0, 0x0A, 0xEF, 0xA5, 0x60, 0x0B, 0x9E, 0xFC, 0xE0, -0x0C, 0xD8, 0xC1, 0xE0, 0x0D, 0x7E, 0xDE, 0xE0, 0x0E, 0xB8, 0xA3, 0xE0, 0x0F, 0x5E, 0xC0, 0xE0, -0x10, 0x98, 0x85, 0xE0, 0x11, 0x3E, 0xA2, 0xE0, 0x12, 0x78, 0x67, 0xE0, 0x13, 0x1E, 0x84, 0xE0, -0x14, 0x58, 0x49, 0xE0, 0x14, 0xFE, 0x66, 0xE0, 0x16, 0x38, 0x2B, 0xE0, 0x16, 0xE7, 0x83, 0x60, -0x18, 0x21, 0x48, 0x60, 0x18, 0xC7, 0x65, 0x60, 0x1A, 0x01, 0x2A, 0x60, 0x1A, 0xA7, 0x47, 0x60, -0x1B, 0xE1, 0x0C, 0x60, 0x1C, 0x87, 0x29, 0x60, 0x1D, 0xC0, 0xEE, 0x60, 0x1E, 0x67, 0x0B, 0x60, -0x1F, 0xA0, 0xD0, 0x60, 0x20, 0x46, 0xED, 0x60, 0x21, 0x80, 0xB2, 0x60, 0x22, 0x30, 0x09, 0xE0, -0x23, 0x69, 0xCE, 0xE0, 0x24, 0x0F, 0xEB, 0xE0, 0x25, 0x2E, 0x01, 0x60, 0x26, 0x02, 0x42, 0xE0, -0x27, 0x0D, 0xE3, 0x60, 0x27, 0xE2, 0x24, 0xE0, 0x28, 0xED, 0xC5, 0x60, 0x29, 0xC2, 0x06, 0xE0, -0x2A, 0xCD, 0xA7, 0x60, 0x2B, 0xAB, 0x23, 0x60, 0x2C, 0xAD, 0x89, 0x60, 0x2D, 0x8B, 0x05, 0x60, -0x2E, 0x8D, 0x6B, 0x60, 0x2F, 0x6A, 0xE7, 0x60, 0x30, 0x6D, 0x4D, 0x60, 0x31, 0x4A, 0xC9, 0x60, -0x32, 0x56, 0x69, 0xE0, 0x33, 0x2A, 0xAB, 0x60, 0x34, 0x36, 0x4B, 0xE0, 0x35, 0x0A, 0x8D, 0x60, -0x36, 0x16, 0x2D, 0xE0, 0x36, 0xF3, 0xA9, 0xE0, 0x37, 0xF6, 0x0F, 0xE0, 0x38, 0xD3, 0x8B, 0xE0, -0x39, 0xD5, 0xF1, 0xE0, 0x3A, 0xB3, 0x6D, 0xE0, 0x3B, 0xBF, 0x0E, 0x60, 0x3C, 0x93, 0x4F, 0xE0, -0x3D, 0x9E, 0xF0, 0x60, 0x3E, 0x73, 0x31, 0xE0, 0x3F, 0x7E, 0xD2, 0x60, 0x40, 0x5C, 0x4E, 0x60, -0x41, 0x5E, 0xB4, 0x60, 0x42, 0x3C, 0x30, 0x60, 0x43, 0x3E, 0x96, 0x60, 0x44, 0x1C, 0x12, 0x60, -0x45, 0x1E, 0x78, 0x60, 0x45, 0xFB, 0xF4, 0x60, 0x47, 0x07, 0x94, 0xE0, 0x47, 0xDB, 0xD6, 0x60, -0x48, 0xE7, 0x76, 0xE0, 0x49, 0xBB, 0xB8, 0x60, 0x4A, 0xC7, 0x58, 0xE0, 0x4B, 0xA4, 0xD4, 0xE0, -0x4C, 0xA7, 0x3A, 0xE0, 0x4D, 0x84, 0xB6, 0xE0, 0x4E, 0x87, 0x1C, 0xE0, 0x4F, 0x64, 0x98, 0xE0, -0x50, 0x70, 0x39, 0x60, 0x51, 0x44, 0x7A, 0xE0, 0x52, 0x50, 0x1B, 0x60, 0x53, 0x24, 0x5C, 0xE0, -0x54, 0x2F, 0xFD, 0x60, 0x55, 0x04, 0x3E, 0xE0, 0x56, 0x0F, 0xDF, 0x60, 0x56, 0xED, 0x5B, 0x60, -0x57, 0xEF, 0xC1, 0x60, 0x58, 0xCD, 0x3D, 0x60, 0x59, 0xCF, 0xA3, 0x60, 0x5A, 0xAD, 0x1F, 0x60, -0x5B, 0xB8, 0xBF, 0xE0, 0x5C, 0x8D, 0x01, 0x60, 0x5D, 0x98, 0xA1, 0xE0, 0x5E, 0x6C, 0xE3, 0x60, -0x5F, 0x78, 0x83, 0xE0, 0x60, 0x55, 0xFF, 0xE0, 0x61, 0x58, 0x65, 0xE0, 0x62, 0x35, 0xE1, 0xE0, -0x63, 0x38, 0x47, 0xE0, 0x64, 0x15, 0xC3, 0xE0, 0x65, 0x18, 0x29, 0xE0, 0x65, 0xF5, 0xA5, 0xE0, -0x67, 0x01, 0x46, 0x60, 0x67, 0xD5, 0x87, 0xE0, 0x68, 0xE1, 0x28, 0x60, 0x69, 0xB5, 0x69, 0xE0, -0x6A, 0xC1, 0x0A, 0x60, 0x6B, 0x9E, 0x86, 0x60, 0x6C, 0xA0, 0xEC, 0x60, 0x6D, 0x7E, 0x68, 0x60, -0x6E, 0x80, 0xCE, 0x60, 0x6F, 0x5E, 0x4A, 0x60, 0x70, 0x69, 0xEA, 0xE0, 0x71, 0x3E, 0x2C, 0x60, -0x72, 0x49, 0xCC, 0xE0, 0x73, 0x1E, 0x0E, 0x60, 0x74, 0x29, 0xAE, 0xE0, 0x75, 0x07, 0x2A, 0xE0, -0x76, 0x09, 0x90, 0xE0, 0x76, 0xE7, 0x0C, 0xE0, 0x77, 0xE9, 0x72, 0xE0, 0x78, 0xC6, 0xEE, 0xE0, -0x79, 0xC9, 0x54, 0xE0, 0x7A, 0xA6, 0xD0, 0xE0, 0x7B, 0xB2, 0x71, 0x60, 0x7C, 0x86, 0xB2, 0xE0, -0x7D, 0x92, 0x53, 0x60, 0x7E, 0x66, 0x94, 0xE0, 0x7F, 0x72, 0x35, 0x60, 0x03, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 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, 0xAB, 0xFC, -0x00, 0x00, 0x00, 0x00, 0xC1, 0x5C, 0x01, 0x04, 0x00, 0x00, 0xB3, 0x4C, 0x00, 0x0A, 0x00, 0x00, -0xB3, 0x4C, 0x00, 0x0A, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x48, 0x41, 0x44, 0x54, 0x00, 0x43, 0x48, -0x41, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Apia */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x91, 0x05, 0xFC, 0x00, -0xDA, 0x62, 0x04, 0x38, 0x01, 0x02, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x5E, 0x48, -0x00, 0x04, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x41, 0x4D, 0x54, -0x00, 0x57, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Auckland */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0F, 0xB0, 0xB4, 0xB2, 0xE8, -0xB1, 0x51, 0x87, 0x58, 0xB2, 0x78, 0xE5, 0x68, 0xB3, 0x43, 0xE5, 0x60, 0xB4, 0x58, 0xC7, 0x68, -0xB5, 0x23, 0xC7, 0x60, 0xB6, 0x38, 0xA9, 0x68, 0xB7, 0x03, 0xA9, 0x60, 0xB8, 0x18, 0x8B, 0x68, -0xB8, 0xEC, 0xC5, 0xE0, 0xB9, 0xF8, 0x6D, 0x68, 0xBA, 0xCC, 0xA7, 0xE0, 0xBB, 0xD8, 0x4F, 0x68, -0xBC, 0xE3, 0xE8, 0xE0, 0xBD, 0xAE, 0xF6, 0xE8, 0xBE, 0xC3, 0xCA, 0xE0, 0xBF, 0x8E, 0xD8, 0xE8, -0xC0, 0xA3, 0xAC, 0xE0, 0xC1, 0x6E, 0xBA, 0xE8, 0xC2, 0x83, 0x8E, 0xE0, 0xC3, 0x4E, 0x9C, 0xE8, -0xC4, 0x63, 0x70, 0xE0, 0xC5, 0x2E, 0x7E, 0xE8, 0xC6, 0x4C, 0x8D, 0x60, 0xC7, 0x0E, 0x60, 0xE8, -0xC8, 0x2C, 0x6F, 0x60, 0xC8, 0xF7, 0x7D, 0x68, 0xD2, 0xDA, 0x9A, 0x40, 0x09, 0x18, 0xFD, 0xE0, -0x09, 0xAC, 0xA5, 0xE0, 0x0A, 0xEF, 0xA5, 0x60, 0x0B, 0x9E, 0xFC, 0xE0, 0x0C, 0xD8, 0xC1, 0xE0, -0x0D, 0x7E, 0xDE, 0xE0, 0x0E, 0xB8, 0xA3, 0xE0, 0x0F, 0x5E, 0xC0, 0xE0, 0x10, 0x98, 0x85, 0xE0, -0x11, 0x3E, 0xA2, 0xE0, 0x12, 0x78, 0x67, 0xE0, 0x13, 0x1E, 0x84, 0xE0, 0x14, 0x58, 0x49, 0xE0, -0x14, 0xFE, 0x66, 0xE0, 0x16, 0x38, 0x2B, 0xE0, 0x16, 0xE7, 0x83, 0x60, 0x18, 0x21, 0x48, 0x60, -0x18, 0xC7, 0x65, 0x60, 0x1A, 0x01, 0x2A, 0x60, 0x1A, 0xA7, 0x47, 0x60, 0x1B, 0xE1, 0x0C, 0x60, -0x1C, 0x87, 0x29, 0x60, 0x1D, 0xC0, 0xEE, 0x60, 0x1E, 0x67, 0x0B, 0x60, 0x1F, 0xA0, 0xD0, 0x60, -0x20, 0x46, 0xED, 0x60, 0x21, 0x80, 0xB2, 0x60, 0x22, 0x30, 0x09, 0xE0, 0x23, 0x69, 0xCE, 0xE0, -0x24, 0x0F, 0xEB, 0xE0, 0x25, 0x2E, 0x01, 0x60, 0x26, 0x02, 0x42, 0xE0, 0x27, 0x0D, 0xE3, 0x60, -0x27, 0xE2, 0x24, 0xE0, 0x28, 0xED, 0xC5, 0x60, 0x29, 0xC2, 0x06, 0xE0, 0x2A, 0xCD, 0xA7, 0x60, -0x2B, 0xAB, 0x23, 0x60, 0x2C, 0xAD, 0x89, 0x60, 0x2D, 0x8B, 0x05, 0x60, 0x2E, 0x8D, 0x6B, 0x60, -0x2F, 0x6A, 0xE7, 0x60, 0x30, 0x6D, 0x4D, 0x60, 0x31, 0x4A, 0xC9, 0x60, 0x32, 0x56, 0x69, 0xE0, -0x33, 0x2A, 0xAB, 0x60, 0x34, 0x36, 0x4B, 0xE0, 0x35, 0x0A, 0x8D, 0x60, 0x36, 0x16, 0x2D, 0xE0, -0x36, 0xF3, 0xA9, 0xE0, 0x37, 0xF6, 0x0F, 0xE0, 0x38, 0xD3, 0x8B, 0xE0, 0x39, 0xD5, 0xF1, 0xE0, -0x3A, 0xB3, 0x6D, 0xE0, 0x3B, 0xBF, 0x0E, 0x60, 0x3C, 0x93, 0x4F, 0xE0, 0x3D, 0x9E, 0xF0, 0x60, -0x3E, 0x73, 0x31, 0xE0, 0x3F, 0x7E, 0xD2, 0x60, 0x40, 0x5C, 0x4E, 0x60, 0x41, 0x5E, 0xB4, 0x60, -0x42, 0x3C, 0x30, 0x60, 0x43, 0x3E, 0x96, 0x60, 0x44, 0x1C, 0x12, 0x60, 0x45, 0x1E, 0x78, 0x60, -0x45, 0xFB, 0xF4, 0x60, 0x47, 0x07, 0x94, 0xE0, 0x47, 0xDB, 0xD6, 0x60, 0x48, 0xE7, 0x76, 0xE0, -0x49, 0xBB, 0xB8, 0x60, 0x4A, 0xC7, 0x58, 0xE0, 0x4B, 0xA4, 0xD4, 0xE0, 0x4C, 0xA7, 0x3A, 0xE0, -0x4D, 0x84, 0xB6, 0xE0, 0x4E, 0x87, 0x1C, 0xE0, 0x4F, 0x64, 0x98, 0xE0, 0x50, 0x70, 0x39, 0x60, -0x51, 0x44, 0x7A, 0xE0, 0x52, 0x50, 0x1B, 0x60, 0x53, 0x24, 0x5C, 0xE0, 0x54, 0x2F, 0xFD, 0x60, -0x55, 0x04, 0x3E, 0xE0, 0x56, 0x0F, 0xDF, 0x60, 0x56, 0xED, 0x5B, 0x60, 0x57, 0xEF, 0xC1, 0x60, -0x58, 0xCD, 0x3D, 0x60, 0x59, 0xCF, 0xA3, 0x60, 0x5A, 0xAD, 0x1F, 0x60, 0x5B, 0xB8, 0xBF, 0xE0, -0x5C, 0x8D, 0x01, 0x60, 0x5D, 0x98, 0xA1, 0xE0, 0x5E, 0x6C, 0xE3, 0x60, 0x5F, 0x78, 0x83, 0xE0, -0x60, 0x55, 0xFF, 0xE0, 0x61, 0x58, 0x65, 0xE0, 0x62, 0x35, 0xE1, 0xE0, 0x63, 0x38, 0x47, 0xE0, -0x64, 0x15, 0xC3, 0xE0, 0x65, 0x18, 0x29, 0xE0, 0x65, 0xF5, 0xA5, 0xE0, 0x67, 0x01, 0x46, 0x60, -0x67, 0xD5, 0x87, 0xE0, 0x68, 0xE1, 0x28, 0x60, 0x69, 0xB5, 0x69, 0xE0, 0x6A, 0xC1, 0x0A, 0x60, -0x6B, 0x9E, 0x86, 0x60, 0x6C, 0xA0, 0xEC, 0x60, 0x6D, 0x7E, 0x68, 0x60, 0x6E, 0x80, 0xCE, 0x60, -0x6F, 0x5E, 0x4A, 0x60, 0x70, 0x69, 0xEA, 0xE0, 0x71, 0x3E, 0x2C, 0x60, 0x72, 0x49, 0xCC, 0xE0, -0x73, 0x1E, 0x0E, 0x60, 0x74, 0x29, 0xAE, 0xE0, 0x75, 0x07, 0x2A, 0xE0, 0x76, 0x09, 0x90, 0xE0, -0x76, 0xE7, 0x0C, 0xE0, 0x77, 0xE9, 0x72, 0xE0, 0x78, 0xC6, 0xEE, 0xE0, 0x79, 0xC9, 0x54, 0xE0, -0x7A, 0xA6, 0xD0, 0xE0, 0x7B, 0xB2, 0x71, 0x60, 0x7C, 0x86, 0xB2, 0xE0, 0x7D, 0x92, 0x53, 0x60, -0x7E, 0x66, 0x94, 0xE0, 0x7F, 0x72, 0x35, 0x60, 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, 0x05, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x00, 0x00, 0xAF, 0xC8, 0x01, 0x00, 0x00, 0x00, 0xA1, 0xB8, 0x00, 0x05, 0x00, -0x00, 0xA8, 0xC0, 0x01, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x01, 0x0A, 0x00, 0x00, 0xA8, 0xC0, 0x00, -0x00, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x00, 0x4E, 0x5A, 0x53, 0x54, 0x00, 0x4E, 0x5A, 0x4D, 0x54, -0x00, 0x4E, 0x5A, 0x44, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, - -/* Pacific/Chatham */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0xE7, 0x8B, 0xC2, 0x04, -0x09, 0x18, 0xFD, 0xE0, 0x09, 0xAC, 0xA5, 0xE0, 0x0A, 0xEF, 0xA5, 0x60, 0x0B, 0x9E, 0xFC, 0xE0, -0x0C, 0xD8, 0xC1, 0xE0, 0x0D, 0x7E, 0xDE, 0xE0, 0x0E, 0xB8, 0xA3, 0xE0, 0x0F, 0x5E, 0xC0, 0xE0, -0x10, 0x98, 0x85, 0xE0, 0x11, 0x3E, 0xA2, 0xE0, 0x12, 0x78, 0x67, 0xE0, 0x13, 0x1E, 0x84, 0xE0, -0x14, 0x58, 0x49, 0xE0, 0x14, 0xFE, 0x66, 0xE0, 0x16, 0x38, 0x2B, 0xE0, 0x16, 0xE7, 0x83, 0x60, -0x18, 0x21, 0x48, 0x60, 0x18, 0xC7, 0x65, 0x60, 0x1A, 0x01, 0x2A, 0x60, 0x1A, 0xA7, 0x47, 0x60, -0x1B, 0xE1, 0x0C, 0x60, 0x1C, 0x87, 0x29, 0x60, 0x1D, 0xC0, 0xEE, 0x60, 0x1E, 0x67, 0x0B, 0x60, -0x1F, 0xA0, 0xD0, 0x60, 0x20, 0x46, 0xED, 0x60, 0x21, 0x80, 0xB2, 0x60, 0x22, 0x30, 0x09, 0xE0, -0x23, 0x69, 0xCE, 0xE0, 0x24, 0x0F, 0xEB, 0xE0, 0x25, 0x2E, 0x01, 0x60, 0x26, 0x02, 0x42, 0xE0, -0x27, 0x0D, 0xE3, 0x60, 0x27, 0xE2, 0x24, 0xE0, 0x28, 0xED, 0xC5, 0x60, 0x29, 0xC2, 0x06, 0xE0, -0x2A, 0xCD, 0xA7, 0x60, 0x2B, 0xAB, 0x23, 0x60, 0x2C, 0xAD, 0x89, 0x60, 0x2D, 0x8B, 0x05, 0x60, -0x2E, 0x8D, 0x6B, 0x60, 0x2F, 0x6A, 0xE7, 0x60, 0x30, 0x6D, 0x4D, 0x60, 0x31, 0x4A, 0xC9, 0x60, -0x32, 0x56, 0x69, 0xE0, 0x33, 0x2A, 0xAB, 0x60, 0x34, 0x36, 0x4B, 0xE0, 0x35, 0x0A, 0x8D, 0x60, -0x36, 0x16, 0x2D, 0xE0, 0x36, 0xF3, 0xA9, 0xE0, 0x37, 0xF6, 0x0F, 0xE0, 0x38, 0xD3, 0x8B, 0xE0, -0x39, 0xD5, 0xF1, 0xE0, 0x3A, 0xB3, 0x6D, 0xE0, 0x3B, 0xBF, 0x0E, 0x60, 0x3C, 0x93, 0x4F, 0xE0, -0x3D, 0x9E, 0xF0, 0x60, 0x3E, 0x73, 0x31, 0xE0, 0x3F, 0x7E, 0xD2, 0x60, 0x40, 0x5C, 0x4E, 0x60, -0x41, 0x5E, 0xB4, 0x60, 0x42, 0x3C, 0x30, 0x60, 0x43, 0x3E, 0x96, 0x60, 0x44, 0x1C, 0x12, 0x60, -0x45, 0x1E, 0x78, 0x60, 0x45, 0xFB, 0xF4, 0x60, 0x47, 0x07, 0x94, 0xE0, 0x47, 0xDB, 0xD6, 0x60, -0x48, 0xE7, 0x76, 0xE0, 0x49, 0xBB, 0xB8, 0x60, 0x4A, 0xC7, 0x58, 0xE0, 0x4B, 0xA4, 0xD4, 0xE0, -0x4C, 0xA7, 0x3A, 0xE0, 0x4D, 0x84, 0xB6, 0xE0, 0x4E, 0x87, 0x1C, 0xE0, 0x4F, 0x64, 0x98, 0xE0, -0x50, 0x70, 0x39, 0x60, 0x51, 0x44, 0x7A, 0xE0, 0x52, 0x50, 0x1B, 0x60, 0x53, 0x24, 0x5C, 0xE0, -0x54, 0x2F, 0xFD, 0x60, 0x55, 0x04, 0x3E, 0xE0, 0x56, 0x0F, 0xDF, 0x60, 0x56, 0xED, 0x5B, 0x60, -0x57, 0xEF, 0xC1, 0x60, 0x58, 0xCD, 0x3D, 0x60, 0x59, 0xCF, 0xA3, 0x60, 0x5A, 0xAD, 0x1F, 0x60, -0x5B, 0xB8, 0xBF, 0xE0, 0x5C, 0x8D, 0x01, 0x60, 0x5D, 0x98, 0xA1, 0xE0, 0x5E, 0x6C, 0xE3, 0x60, -0x5F, 0x78, 0x83, 0xE0, 0x60, 0x55, 0xFF, 0xE0, 0x61, 0x58, 0x65, 0xE0, 0x62, 0x35, 0xE1, 0xE0, -0x63, 0x38, 0x47, 0xE0, 0x64, 0x15, 0xC3, 0xE0, 0x65, 0x18, 0x29, 0xE0, 0x65, 0xF5, 0xA5, 0xE0, -0x67, 0x01, 0x46, 0x60, 0x67, 0xD5, 0x87, 0xE0, 0x68, 0xE1, 0x28, 0x60, 0x69, 0xB5, 0x69, 0xE0, -0x6A, 0xC1, 0x0A, 0x60, 0x6B, 0x9E, 0x86, 0x60, 0x6C, 0xA0, 0xEC, 0x60, 0x6D, 0x7E, 0x68, 0x60, -0x6E, 0x80, 0xCE, 0x60, 0x6F, 0x5E, 0x4A, 0x60, 0x70, 0x69, 0xEA, 0xE0, 0x71, 0x3E, 0x2C, 0x60, -0x72, 0x49, 0xCC, 0xE0, 0x73, 0x1E, 0x0E, 0x60, 0x74, 0x29, 0xAE, 0xE0, 0x75, 0x07, 0x2A, 0xE0, -0x76, 0x09, 0x90, 0xE0, 0x76, 0xE7, 0x0C, 0xE0, 0x77, 0xE9, 0x72, 0xE0, 0x78, 0xC6, 0xEE, 0xE0, -0x79, 0xC9, 0x54, 0xE0, 0x7A, 0xA6, 0xD0, 0xE0, 0x7B, 0xB2, 0x71, 0x60, 0x7C, 0x86, 0xB2, 0xE0, -0x7D, 0x92, 0x53, 0x60, 0x7E, 0x66, 0x94, 0xE0, 0x7F, 0x72, 0x35, 0x60, 0x03, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 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, 0xAB, 0xFC, -0x00, 0x00, 0x00, 0x00, 0xC1, 0x5C, 0x01, 0x04, 0x00, 0x00, 0xB3, 0x4C, 0x00, 0x0A, 0x00, 0x00, -0xB3, 0x4C, 0x00, 0x0A, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x48, 0x41, 0x44, 0x54, 0x00, 0x43, 0x48, -0x41, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Easter */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0F, 0xB9, 0xC7, 0x40, 0x88, -0xCC, 0x1C, 0x6E, 0x40, 0xCC, 0x6C, 0xE7, 0xD0, 0xD4, 0x1B, 0xC9, 0xB0, 0xFD, 0xD1, 0x3C, 0x40, -0xFE, 0x92, 0xFA, 0xB0, 0xFF, 0xCC, 0xCD, 0xC0, 0x00, 0x72, 0xDC, 0xB0, 0x01, 0x75, 0x50, 0xC0, -0x02, 0x40, 0x49, 0xB0, 0x03, 0x55, 0x32, 0xC0, 0x04, 0x20, 0x2B, 0xB0, 0x05, 0x3E, 0x4F, 0x40, -0x06, 0x00, 0x0D, 0xB0, 0x07, 0x0B, 0xBC, 0x40, 0x07, 0xDF, 0xEF, 0xB0, 0x08, 0xFE, 0x13, 0x40, -0x09, 0xBF, 0xD1, 0xB0, 0x0A, 0xDD, 0xF5, 0x40, 0x0B, 0xA8, 0xEE, 0x30, 0x0C, 0xBD, 0xD7, 0x40, -0x0D, 0x88, 0xD0, 0x30, 0x0E, 0x9D, 0xB9, 0x40, 0x0F, 0x68, 0xB2, 0x30, 0x10, 0x86, 0xD5, 0xC0, -0x11, 0x48, 0x94, 0x30, 0x12, 0x66, 0xB7, 0xC0, 0x13, 0x28, 0x76, 0x30, 0x14, 0x46, 0x99, 0xC0, -0x15, 0x11, 0x92, 0xB0, 0x16, 0x26, 0x7B, 0xC0, 0x16, 0xF1, 0x74, 0xB0, 0x18, 0x06, 0x5D, 0xC0, -0x18, 0xD1, 0x56, 0xB0, 0x19, 0xE6, 0x3F, 0xC0, 0x1A, 0xB1, 0x38, 0xB0, 0x1B, 0xCF, 0x5C, 0x40, -0x1C, 0x91, 0x1A, 0xB0, 0x1D, 0xAF, 0x3E, 0x40, 0x1E, 0x70, 0xFC, 0xB0, 0x1F, 0x8F, 0x20, 0x40, -0x20, 0x7F, 0x03, 0x30, 0x21, 0x6F, 0x02, 0x40, 0x22, 0x39, 0xFB, 0x30, 0x23, 0x45, 0xA9, 0xC0, -0x24, 0x19, 0xDD, 0x30, 0x25, 0x38, 0x00, 0xC0, 0x26, 0x02, 0xF9, 0xB0, 0x26, 0xF2, 0xF8, 0xC0, -0x27, 0xD9, 0xA1, 0x30, 0x28, 0xF7, 0xC4, 0xC0, 0x29, 0xC2, 0xBD, 0xB0, 0x2A, 0xD7, 0xA6, 0xC0, -0x2B, 0xA2, 0x9F, 0xB0, 0x2C, 0xB7, 0x88, 0xC0, 0x2D, 0x82, 0x81, 0xB0, 0x2E, 0x97, 0x6A, 0xC0, -0x2F, 0x62, 0x63, 0xB0, 0x30, 0x80, 0x87, 0x40, 0x31, 0x42, 0x45, 0xB0, 0x32, 0x60, 0x69, 0x40, -0x33, 0x3D, 0xD7, 0x30, 0x34, 0x40, 0x4B, 0x40, 0x35, 0x0B, 0x44, 0x30, 0x36, 0x0D, 0xB8, 0x40, -0x37, 0x06, 0xD5, 0xB0, 0x38, 0x00, 0x0F, 0x40, 0x38, 0xCB, 0x08, 0x30, 0x39, 0xE9, 0x2B, 0xC0, -0x3A, 0xAA, 0xEA, 0x30, 0x3B, 0xC9, 0x0D, 0xC0, 0x3C, 0x8A, 0xCC, 0x30, 0x3D, 0xA8, 0xEF, 0xC0, -0x3E, 0x6A, 0xAE, 0x30, 0x3F, 0x88, 0xD1, 0xC0, 0x40, 0x53, 0xCA, 0xB0, 0x41, 0x68, 0xB3, 0xC0, -0x42, 0x33, 0xAC, 0xB0, 0x43, 0x48, 0x95, 0xC0, 0x44, 0x13, 0x8E, 0xB0, 0x45, 0x31, 0xB2, 0x40, -0x45, 0xF3, 0x70, 0xB0, 0x47, 0x11, 0x94, 0x40, 0x47, 0xD3, 0x52, 0xB0, 0x48, 0xF1, 0x76, 0x40, -0x49, 0xBC, 0x6F, 0x30, 0x4A, 0xD1, 0x58, 0x40, 0x4B, 0x9C, 0x51, 0x30, 0x4C, 0xB1, 0x3A, 0x40, -0x4D, 0x7C, 0x33, 0x30, 0x4E, 0x91, 0x1C, 0x40, 0x4F, 0x5C, 0x15, 0x30, 0x50, 0x7A, 0x38, 0xC0, -0x51, 0x3B, 0xF7, 0x30, 0x52, 0x5A, 0x1A, 0xC0, 0x53, 0x1B, 0xD9, 0x30, 0x54, 0x39, 0xFC, 0xC0, -0x55, 0x04, 0xF5, 0xB0, 0x56, 0x19, 0xDE, 0xC0, 0x56, 0xE4, 0xD7, 0xB0, 0x57, 0xF9, 0xC0, 0xC0, -0x58, 0xC4, 0xB9, 0xB0, 0x59, 0xE2, 0xDD, 0x40, 0x5A, 0xA4, 0x9B, 0xB0, 0x5B, 0xC2, 0xBF, 0x40, -0x5C, 0x84, 0x7D, 0xB0, 0x5D, 0xA2, 0xA1, 0x40, 0x5E, 0x6D, 0x9A, 0x30, 0x5F, 0x82, 0x83, 0x40, -0x60, 0x4D, 0x7C, 0x30, 0x61, 0x62, 0x65, 0x40, 0x62, 0x2D, 0x5E, 0x30, 0x63, 0x42, 0x47, 0x40, -0x64, 0x0D, 0x40, 0x30, 0x65, 0x2B, 0x63, 0xC0, 0x65, 0xED, 0x22, 0x30, 0x67, 0x0B, 0x45, 0xC0, -0x67, 0xCD, 0x04, 0x30, 0x68, 0xEB, 0x27, 0xC0, 0x69, 0xB6, 0x20, 0xB0, 0x6A, 0xCB, 0x09, 0xC0, -0x6B, 0x96, 0x02, 0xB0, 0x6C, 0xAA, 0xEB, 0xC0, 0x6D, 0x75, 0xE4, 0xB0, 0x6E, 0x94, 0x08, 0x40, -0x6F, 0x55, 0xC6, 0xB0, 0x70, 0x73, 0xEA, 0x40, 0x71, 0x35, 0xA8, 0xB0, 0x72, 0x53, 0xCC, 0x40, -0x73, 0x15, 0x8A, 0xB0, 0x74, 0x33, 0xAE, 0x40, 0x74, 0xFE, 0xA7, 0x30, 0x76, 0x13, 0x90, 0x40, -0x76, 0xDE, 0x89, 0x30, 0x77, 0xF3, 0x72, 0x40, 0x78, 0xBE, 0x6B, 0x30, 0x79, 0xDC, 0x8E, 0xC0, -0x7A, 0x9E, 0x4D, 0x30, 0x7B, 0xBC, 0x70, 0xC0, 0x7C, 0x7E, 0x2F, 0x30, 0x7D, 0x9C, 0x52, 0xC0, -0x7E, 0x67, 0x4B, 0xB0, 0x7F, 0x7C, 0x34, 0xC0, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0xFF, 0xFF, 0x99, 0x78, 0x00, 0x00, 0xFF, 0xFF, 0x9D, -0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x09, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x09, 0xFF, -0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x09, 0x45, 0x4D, 0x54, 0x00, 0x45, -0x41, 0x53, 0x54, 0x00, 0x45, 0x41, 0x53, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, -0x00, 0x01, 0x01, 0x00, 0x01, 0x01, - -/* Pacific/Efate */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x92, 0xF5, 0xC2, 0xB4, -0x19, 0xD2, 0xF7, 0xD0, 0x1A, 0xC2, 0xDA, 0xC0, 0x1B, 0xDA, 0x66, 0xD0, 0x1C, 0xA2, 0xBC, 0xC0, -0x1D, 0x9B, 0xF6, 0x50, 0x1E, 0x82, 0x9E, 0xC0, 0x1F, 0x7B, 0xD8, 0x50, 0x20, 0x6B, 0xBB, 0x40, -0x21, 0x5B, 0xBA, 0x50, 0x22, 0x4B, 0x9D, 0x40, 0x23, 0x3B, 0x9C, 0x50, 0x24, 0x2B, 0x7F, 0x40, -0x25, 0x1B, 0x7E, 0x50, 0x26, 0x0B, 0x61, 0x40, 0x26, 0xFB, 0x60, 0x50, 0x27, 0xEB, 0x43, 0x40, -0x28, 0xE4, 0x7C, 0xD0, 0x29, 0x81, 0x51, 0x40, 0x2A, 0xE9, 0x48, 0xD0, 0x2B, 0x61, 0x33, 0x40, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x9D, 0xCC, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xC0, 0x01, -0x04, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x56, 0x55, 0x53, 0x54, 0x00, -0x56, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Enderbury */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x12, 0x56, 0x04, 0xC0, -0x2F, 0x06, 0x8B, 0x30, 0x01, 0x02, 0xFF, 0xFF, 0x57, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0x65, 0x50, -0x00, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x00, 0x00, 0x50, 0x48, 0x4F, 0x54, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, - -/* Pacific/Fakaofo */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0x73, 0x60, -0x00, 0x00, 0x54, 0x4B, 0x54, 0x00, 0x00, 0x00, - -/* Pacific/Fiji */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x9A, 0x13, 0xB2, 0x3C, -0x36, 0x3B, 0x17, 0xE0, 0x36, 0xD7, 0xFA, 0x60, 0x38, 0x24, 0x34, 0x60, 0x38, 0xB7, 0xDC, 0x60, -0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0xA7, 0x44, 0x00, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x01, -0x04, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x09, 0x4C, 0x4D, 0x54, 0x00, 0x46, 0x4A, 0x53, 0x54, 0x00, -0x46, 0x4A, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Funafuti */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xA8, 0xC0, -0x00, 0x00, 0x54, 0x56, 0x54, 0x00, 0x00, 0x00, - -/* Pacific/Galapagos */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0xB6, 0xA4, 0x4C, 0x80, -0x1E, 0x18, 0xC4, 0x50, 0x01, 0x02, 0xFF, 0xFF, 0xAC, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, -0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x43, 0x54, 0x00, -0x47, 0x41, 0x4C, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Gambier */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x94, 0x50, 0x48, 0x04, -0x01, 0xFF, 0xFF, 0x81, 0x7C, 0x00, 0x00, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x47, 0x41, 0x4D, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Guadalcanal */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x94, 0x4F, 0x33, 0x8C, -0x01, 0x00, 0x00, 0x95, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x53, 0x42, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Guam */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x3A, 0x43, 0x5E, 0x60, -0x01, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, 0x47, 0x53, 0x54, -0x00, 0x43, 0x68, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Honolulu */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x10, 0xBB, 0x05, 0x43, 0x48, -0xBB, 0x20, 0xE4, 0xB8, 0xCB, 0x89, 0x3D, 0xC8, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x49, 0x38, -0xD5, 0x8D, 0x73, 0x48, 0x01, 0x00, 0x02, 0x03, 0x00, 0x04, 0xFF, 0xFF, 0x6C, 0x58, 0x00, 0x00, -0xFF, 0xFF, 0x7A, 0x68, 0x01, 0x04, 0xFF, 0xFF, 0x7A, 0x68, 0x01, 0x08, 0xFF, 0xFF, 0x7A, 0x68, -0x01, 0x0C, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x00, 0x48, 0x53, 0x54, 0x00, 0x48, 0x44, 0x54, 0x00, -0x48, 0x57, 0x54, 0x00, 0x48, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, - -/* Pacific/Johnston */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0x73, 0x60, -0x00, 0x00, 0x48, 0x53, 0x54, 0x00, 0x00, 0x00, - -/* Pacific/Kiritimati */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x12, 0x55, 0xF2, 0x00, -0x2F, 0x06, 0x7D, 0x20, 0x01, 0x02, 0xFF, 0xFF, 0x6A, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x73, 0x60, -0x00, 0x00, 0x00, 0x00, 0xC4, 0xE0, 0x00, 0x00, 0x4C, 0x49, 0x4E, 0x54, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, - -/* Pacific/Kosrae */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0xFF, 0x86, 0x1B, 0x50, -0x36, 0x8B, 0x67, 0x40, 0x01, 0x00, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xC0, -0x00, 0x00, 0x4B, 0x4F, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Kwajalein */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xFF, 0x86, 0x1B, 0x50, -0x2C, 0x74, 0xBC, 0xC0, 0x01, 0x02, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x00, 0xFF, 0xFF, 0x57, 0x40, -0x00, 0x04, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x00, 0x4D, 0x48, 0x54, 0x00, 0x4B, 0x57, 0x41, 0x54, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Majuro */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0xFF, 0x86, 0x1B, 0x50, -0x01, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x00, 0x4D, 0x48, 0x54, -0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Marquesas */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x94, 0x50, 0x4C, 0x48, -0x01, 0xFF, 0xFF, 0x7D, 0x38, 0x00, 0x00, 0xFF, 0xFF, 0x7A, 0x68, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x4D, 0x41, 0x52, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Midway */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0xE6, 0x75, 0x8A, 0xB0, -0xE6, 0xED, 0x75, 0x20, 0xFA, 0xD2, 0x55, 0xB0, 0x1A, 0x2B, 0x30, 0x30, 0x01, 0x00, 0x02, 0x03, -0xFF, 0xFF, 0x65, 0x50, 0x00, 0x00, 0xFF, 0xFF, 0x73, 0x60, 0x01, 0x04, 0xFF, 0xFF, 0x65, 0x50, -0x00, 0x08, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x0C, 0x4E, 0x53, 0x54, 0x00, 0x4E, 0x44, 0x54, 0x00, -0x42, 0x53, 0x54, 0x00, 0x53, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* Pacific/Nauru */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0C, 0xA3, 0xE7, 0x2B, 0x04, -0xCB, 0xB4, 0xBF, 0x48, 0xD0, 0x42, 0x50, 0x70, 0x11, 0x8B, 0x04, 0xC8, 0x01, 0x02, 0x01, 0x03, -0x00, 0x00, 0x9C, 0x7C, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xB8, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, -0x00, 0x08, 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x4E, 0x52, 0x54, 0x00, -0x4A, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Niue */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0xDC, 0x43, 0x35, 0x60, -0x10, 0x74, 0xCA, 0x38, 0x01, 0x02, 0xFF, 0xFF, 0x60, 0xA0, 0x00, 0x00, 0xFF, 0xFF, 0x5E, 0x48, -0x00, 0x00, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x00, 0x4E, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, - -/* Pacific/Norfolk */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xDC, 0x41, 0xF8, 0x80, -0x01, 0x00, 0x00, 0x9D, 0x80, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xB8, 0x00, 0x04, 0x4E, 0x4D, 0x54, -0x00, 0x4E, 0x46, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Noumea */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x92, 0xF5, 0xC4, 0x74, -0x0E, 0xE6, 0xBA, 0x50, 0x0F, 0x56, 0xBB, 0xC0, 0x10, 0xC6, 0x9C, 0x50, 0x11, 0x37, 0xEF, 0x40, -0x32, 0xA0, 0x4B, 0xF0, 0x33, 0x18, 0x44, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x00, -0x00, 0x9C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xC0, 0x01, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x00, -0x09, 0x00, 0x00, 0xA8, 0xC0, 0x01, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x09, 0x4C, 0x4D, 0x54, -0x00, 0x4E, 0x43, 0x53, 0x54, 0x00, 0x4E, 0x43, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, -0x00, 0x00, 0x00, 0x00, - -/* Pacific/Pago_Pago */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0x91, 0x05, 0xFB, 0x08, -0xDA, 0x62, 0x04, 0x38, 0xFA, 0xD2, 0x55, 0xB0, 0x1A, 0x2B, 0x30, 0x30, 0x01, 0x02, 0x03, 0x04, -0xFF, 0xFF, 0x5F, 0xF8, 0x00, 0x00, 0xFF, 0xFF, 0x5E, 0x48, 0x00, 0x04, 0xFF, 0xFF, 0x65, 0x50, -0x00, 0x09, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x0D, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x11, 0x4C, 0x4D, -0x54, 0x00, 0x53, 0x41, 0x4D, 0x54, 0x00, 0x4E, 0x53, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x53, -0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Palau */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, -0x00, 0x00, 0x50, 0x57, 0x54, 0x00, 0x00, 0x00, - -/* Pacific/Pitcairn */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x35, 0x44, 0x42, 0x08, -0x01, 0xFF, 0xFF, 0x88, 0x78, 0x00, 0x00, 0xFF, 0xFF, 0x8F, 0x80, 0x00, 0x04, 0x50, 0x4E, 0x54, -0x00, 0x50, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Ponape */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x9A, 0xB0, -0x00, 0x00, 0x50, 0x4F, 0x4E, 0x54, 0x00, 0x00, 0x00, - -/* Pacific/Port_Moresby */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x8C, 0xA0, -0x00, 0x00, 0x50, 0x47, 0x54, 0x00, 0x00, 0x00, - -/* Pacific/Rarotonga */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0A, 0x10, 0xAC, 0x1B, 0x28, -0x11, 0x3F, 0xB5, 0x18, 0x12, 0x79, 0x81, 0x20, 0x13, 0x1F, 0x97, 0x18, 0x14, 0x59, 0x63, 0x20, -0x14, 0xFF, 0x79, 0x18, 0x16, 0x39, 0x45, 0x20, 0x16, 0xE8, 0x95, 0x98, 0x18, 0x22, 0x61, 0xA0, -0x18, 0xC8, 0x77, 0x98, 0x1A, 0x02, 0x43, 0xA0, 0x1A, 0xA8, 0x59, 0x98, 0x1B, 0xE2, 0x25, 0xA0, -0x1C, 0x88, 0x3B, 0x98, 0x1D, 0xC2, 0x07, 0xA0, 0x1E, 0x68, 0x1D, 0x98, 0x1F, 0xA1, 0xE9, 0xA0, -0x20, 0x47, 0xFF, 0x98, 0x21, 0x81, 0xCB, 0xA0, 0x22, 0x31, 0x1C, 0x18, 0x23, 0x6A, 0xE8, 0x20, -0x24, 0x10, 0xFE, 0x18, 0x25, 0x4A, 0xCA, 0x20, 0x25, 0xF0, 0xE0, 0x18, 0x27, 0x2A, 0xAC, 0x20, -0x27, 0xD0, 0xC2, 0x18, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, -0x6C, 0x58, 0x00, 0x00, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x00, 0xFF, 0xFF, 0x7A, 0x68, 0x01, 0x04, -0x43, 0x4B, 0x54, 0x00, 0x43, 0x4B, 0x48, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* Pacific/Saipan */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xFF, 0x86, 0x37, 0x70, -0x3A, 0x43, 0x5E, 0x60, 0x01, 0x02, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x00, 0x00, 0x00, 0x8C, 0xA0, -0x00, 0x00, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, 0x4D, 0x50, 0x54, 0x00, 0x43, 0x68, 0x53, 0x54, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Samoa */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0x91, 0x05, 0xFB, 0x08, -0xDA, 0x62, 0x04, 0x38, 0xFA, 0xD2, 0x55, 0xB0, 0x1A, 0x2B, 0x30, 0x30, 0x01, 0x02, 0x03, 0x04, -0xFF, 0xFF, 0x5F, 0xF8, 0x00, 0x00, 0xFF, 0xFF, 0x5E, 0x48, 0x00, 0x04, 0xFF, 0xFF, 0x65, 0x50, -0x00, 0x09, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x0D, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x11, 0x4C, 0x4D, -0x54, 0x00, 0x53, 0x41, 0x4D, 0x54, 0x00, 0x4E, 0x53, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x53, -0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Tahiti */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x94, 0x50, 0x55, 0xB8, -0x01, 0xFF, 0xFF, 0x73, 0xC8, 0x00, 0x00, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x04, 0x4C, 0x4D, 0x54, -0x00, 0x54, 0x41, 0x48, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Pacific/Tarawa */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xA8, 0xC0, -0x00, 0x00, 0x47, 0x49, 0x4C, 0x54, 0x00, 0x00, 0x00, - -/* Pacific/Tongatapu */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x09, 0xC9, 0x73, 0x42, 0x90, -0x37, 0xFB, 0x47, 0xD0, 0x38, 0xD3, 0x7D, 0xD0, 0x3A, 0x04, 0x08, 0x50, 0x3A, 0x72, 0xB8, 0x40, -0x3B, 0xE3, 0xEA, 0x50, 0x3C, 0x52, 0x9A, 0x40, 0x01, 0x02, 0x03, 0x04, 0x01, 0x04, 0x01, 0x00, -0x00, 0xAD, 0x70, 0x00, 0x00, 0x00, 0x00, 0xB6, 0xD0, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xE0, 0x01, -0x04, 0x00, 0x00, 0xB6, 0xD0, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xE0, 0x01, 0x04, 0x54, 0x4F, 0x54, -0x00, 0x54, 0x4F, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - -/* Pacific/Truk */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x8C, 0xA0, -0x00, 0x00, 0x54, 0x52, 0x55, 0x54, 0x00, 0x00, 0x00, - -/* Pacific/Wake */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xA8, 0xC0, -0x00, 0x00, 0x57, 0x41, 0x4B, 0x54, 0x00, 0x00, 0x00, - -/* Pacific/Wallis */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xA8, 0xC0, -0x00, 0x00, 0x57, 0x46, 0x54, 0x00, 0x00, 0x00, - -/* Pacific/Yap */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x8C, 0xA0, -0x00, 0x00, 0x54, 0x52, 0x55, 0x54, 0x00, 0x00, 0x00, - -/* Poland */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xA7, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x16, 0x99, 0xA8, 0x2A, 0xD0, -0x9B, 0x0C, 0x17, 0x60, 0x9B, 0xD5, 0xDA, 0xF0, 0x9C, 0xD9, 0xAE, 0x90, 0x9D, 0xA4, 0xB5, 0x90, -0x9E, 0xB9, 0x90, 0x90, 0x9F, 0x84, 0x97, 0x90, 0xA0, 0x9A, 0xB6, 0x00, 0xA1, 0x65, 0xBD, 0x00, -0xA6, 0x7D, 0x7C, 0x60, 0xC8, 0x76, 0xDE, 0x10, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, -0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0x80, 0xA9, 0x60, 0xD0, 0x84, 0xBA, 0x00, -0xD1, 0x95, 0x92, 0x70, 0xD2, 0x8A, 0xBB, 0x60, 0xD3, 0x62, 0xFF, 0x70, 0xD4, 0x4B, 0x23, 0x90, -0xD5, 0x5E, 0xAD, 0x10, 0xD6, 0x29, 0xB4, 0x10, 0xD7, 0x2C, 0x1A, 0x10, 0xD8, 0x09, 0x96, 0x10, -0xD9, 0x02, 0xC1, 0x90, 0xD9, 0xE9, 0x78, 0x10, 0xE8, 0x54, 0xD2, 0x00, 0xE8, 0xF1, 0xB4, 0x80, -0xE9, 0xE1, 0xA5, 0x80, 0xEA, 0xD1, 0x96, 0x80, 0xEC, 0x14, 0x96, 0x00, 0xEC, 0xBA, 0xB3, 0x00, -0xED, 0xAA, 0xA4, 0x00, 0xEE, 0x9A, 0x95, 0x00, 0xEF, 0xD4, 0x5A, 0x00, 0xF0, 0x7A, 0x77, 0x00, -0xF1, 0xB4, 0x3C, 0x00, 0xF2, 0x5A, 0x59, 0x00, 0xF3, 0x94, 0x1E, 0x00, 0xF4, 0x3A, 0x3B, 0x00, -0xF5, 0x7D, 0x3A, 0x80, 0xF6, 0x1A, 0x1D, 0x00, 0x0D, 0x2A, 0xFD, 0x70, 0x0D, 0xA4, 0x55, 0x80, -0x0E, 0x8B, 0x0C, 0x00, 0x0F, 0x84, 0x37, 0x80, 0x10, 0x74, 0x28, 0x80, 0x11, 0x64, 0x19, 0x80, -0x12, 0x54, 0x0A, 0x80, 0x13, 0x4D, 0x36, 0x00, 0x14, 0x33, 0xEC, 0x80, 0x15, 0x23, 0xDD, 0x80, -0x16, 0x13, 0xCE, 0x80, 0x17, 0x03, 0xBF, 0x80, 0x17, 0xF3, 0xB0, 0x80, 0x18, 0xE3, 0xA1, 0x80, -0x19, 0xD3, 0x92, 0x80, 0x1A, 0xC3, 0x83, 0x80, 0x1B, 0xBC, 0xAF, 0x00, 0x1C, 0xAC, 0xA0, 0x00, -0x1D, 0x9C, 0x91, 0x00, 0x1E, 0x8C, 0x82, 0x00, 0x1F, 0x7C, 0x73, 0x00, 0x20, 0x6C, 0x64, 0x00, -0x21, 0x5C, 0x55, 0x00, 0x21, 0xDA, 0xD6, 0xF0, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, -0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, -0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, -0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, -0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, -0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, -0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, -0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, -0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, -0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, -0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, -0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, -0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, -0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, -0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, -0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, -0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, -0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, -0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, -0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, -0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, -0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, -0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, -0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, -0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, -0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x02, 0x01, 0x02, 0x03, 0x04, 0x03, 0x07, 0x05, -0x06, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x02, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x00, -0x00, 0x13, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, -0x09, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x00, 0x00, 0x2A, -0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x12, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x12, 0x00, -0x00, 0x1C, 0x20, 0x01, 0x04, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x09, 0x57, 0x4D, 0x54, 0x00, 0x43, -0x45, 0x53, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, -0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, - -/* Portugal */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xDD, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x1B, 0x92, 0xE6, 0x97, 0x10, -0x9B, 0x4B, 0x6D, 0x70, 0x9B, 0xFE, 0xC7, 0x80, 0x9C, 0x9C, 0xED, 0x70, 0x9D, 0xC9, 0x83, 0x70, -0x9E, 0x7F, 0x72, 0x70, 0x9F, 0xAA, 0xB6, 0xF0, 0xA0, 0x5F, 0x54, 0x70, 0xA1, 0x8B, 0xEA, 0x70, -0xA2, 0x41, 0xD9, 0x70, 0xA3, 0x6E, 0x6F, 0x70, 0xA4, 0x23, 0x0C, 0xF0, 0xA5, 0x4F, 0xA2, 0xF0, -0xAA, 0x05, 0xEF, 0x70, 0xAA, 0xF4, 0x8E, 0xF0, 0xAD, 0xC9, 0xA7, 0xF0, 0xAE, 0xA7, 0x23, 0xF0, -0xAF, 0xA0, 0x4F, 0x70, 0xB0, 0x87, 0x05, 0xF0, 0xB1, 0x89, 0x6B, 0xF0, 0xB2, 0x70, 0x22, 0x70, -0xB3, 0x72, 0x88, 0x70, 0xB4, 0x50, 0x04, 0x70, 0xB7, 0x32, 0x4C, 0x70, 0xB8, 0x0F, 0xC8, 0x70, -0xB8, 0xFF, 0xB9, 0x70, 0xB9, 0xEF, 0xAA, 0x70, 0xBC, 0xC8, 0xB7, 0xF0, 0xBD, 0xB8, 0xA8, 0xF0, -0xBE, 0x9F, 0x5F, 0x70, 0xBF, 0x98, 0x8A, 0xF0, 0xC0, 0x9A, 0xF0, 0xF0, 0xC1, 0x78, 0x6C, 0xF0, -0xC2, 0x68, 0x5D, 0xF0, 0xC3, 0x58, 0x4E, 0xF0, 0xC4, 0x3F, 0x05, 0x70, 0xC5, 0x38, 0x30, 0xF0, -0xC6, 0x3A, 0x96, 0xF0, 0xC7, 0x58, 0xAC, 0x70, 0xC7, 0xD9, 0xDF, 0x70, 0xC9, 0x01, 0x2F, 0x70, -0xC9, 0xF1, 0x20, 0x70, 0xCA, 0xE2, 0x62, 0xF0, 0xCB, 0xB5, 0x52, 0xF0, 0xCB, 0xEC, 0xA3, 0xE0, -0xCC, 0x80, 0x4B, 0xE0, 0xCC, 0xDC, 0xA2, 0xF0, 0xCD, 0x95, 0x34, 0xF0, 0xCD, 0xC3, 0x4B, 0x60, -0xCE, 0x72, 0xA2, 0xE0, 0xCE, 0xC5, 0xBF, 0x70, 0xCF, 0x75, 0x16, 0xF0, 0xCF, 0xAC, 0x67, 0xE0, -0xD0, 0x52, 0x84, 0xE0, 0xD0, 0xA5, 0xA1, 0x70, 0xD1, 0x54, 0xF8, 0xF0, 0xD1, 0x8C, 0x49, 0xE0, -0xD2, 0x32, 0x66, 0xE0, 0xD2, 0x85, 0x83, 0x70, 0xD3, 0x59, 0xC4, 0xF0, 0xD4, 0x49, 0xB5, 0xF0, -0xD5, 0x39, 0xD1, 0x20, 0xD6, 0x29, 0xC2, 0x20, 0xD7, 0x19, 0xB3, 0x20, 0xD8, 0x09, 0xA4, 0x20, -0xD8, 0xF9, 0x95, 0x20, 0xD9, 0xE9, 0x86, 0x20, 0xDC, 0xB9, 0x59, 0x20, 0xDD, 0xB2, 0x84, 0xA0, -0xDE, 0xA2, 0x75, 0xA0, 0xDF, 0x92, 0x66, 0xA0, 0xE0, 0x82, 0x57, 0xA0, 0xE1, 0x72, 0x48, 0xA0, -0xE2, 0x62, 0x39, 0xA0, 0xE3, 0x52, 0x2A, 0xA0, 0xE4, 0x42, 0x1B, 0xA0, 0xE5, 0x32, 0x0C, 0xA0, -0xE6, 0x21, 0xFD, 0xA0, 0xE7, 0x1B, 0x29, 0x20, 0xE8, 0x0B, 0x1A, 0x20, 0xE8, 0xFB, 0x0B, 0x20, -0xE9, 0xEA, 0xFC, 0x20, 0xEA, 0xDA, 0xED, 0x20, 0xEB, 0xCA, 0xDE, 0x20, 0xEC, 0xBA, 0xCF, 0x20, -0xED, 0xAA, 0xC0, 0x20, 0xEE, 0x9A, 0xB1, 0x20, 0xEF, 0x8A, 0xA2, 0x20, 0xF0, 0x7A, 0x93, 0x20, -0xF1, 0x6A, 0x84, 0x20, 0xF2, 0x63, 0xAF, 0xA0, 0xF3, 0x53, 0xA0, 0xA0, 0xF4, 0x43, 0x91, 0xA0, -0xF5, 0x33, 0x82, 0xA0, 0xF6, 0x23, 0x73, 0xA0, 0xF7, 0x13, 0x64, 0xA0, 0xF8, 0x03, 0x55, 0xA0, -0xF8, 0xF3, 0x46, 0xA0, 0x0C, 0xAB, 0x2A, 0x00, 0x0D, 0x9B, 0x1B, 0x00, 0x0E, 0x8B, 0x0C, 0x00, -0x0F, 0x84, 0x37, 0x80, 0x10, 0x74, 0x28, 0x80, 0x11, 0x64, 0x19, 0x80, 0x12, 0x54, 0x18, 0x90, -0x13, 0x43, 0xFB, 0x80, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, 0x16, 0x13, 0xDC, 0x90, -0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xBD, 0xA0, 0x19, 0xD3, 0xA0, 0x90, -0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, 0x1D, 0x9C, 0x9F, 0x10, -0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, 0x21, 0x5C, 0x63, 0x10, -0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, 0x25, 0x1C, 0x27, 0x10, -0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, 0x28, 0xE5, 0x25, 0x90, -0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, 0x2C, 0xA4, 0xE9, 0x90, -0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, -0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, -0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, -0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, -0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, 0x43, 0x64, 0x1B, 0x10, -0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, 0x47, 0x23, 0xDF, 0x10, -0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, 0x4A, 0xE3, 0xA3, 0x10, -0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, 0x4E, 0xAC, 0xA1, 0x90, -0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, -0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, 0x56, 0x2C, 0x29, 0x90, -0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, 0x59, 0xF5, 0x28, 0x10, -0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, 0x5D, 0xB4, 0xEC, 0x10, -0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, 0x61, 0x7D, 0xEA, 0x90, -0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, 0x65, 0x3D, 0xAE, 0x90, -0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, 0x68, 0xFD, 0x72, 0x90, -0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, 0x6C, 0xC6, 0x71, 0x10, -0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, 0x70, 0x86, 0x35, 0x10, -0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, 0x74, 0x45, 0xF9, 0x10, -0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, 0x78, 0x0E, 0xF7, 0x90, -0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, -0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, -0x02, 0x01, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, -0x05, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, 0x05, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x06, 0x02, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x07, 0x08, 0x07, 0x08, 0x07, 0x08, 0x07, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, -0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0xFF, 0xFF, 0xF7, -0x70, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, -0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x1C, 0x20, 0x01, -0x0D, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x12, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x12, 0x00, 0x00, 0x1C, -0x20, 0x01, 0x16, 0x00, 0x00, 0x0E, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x4C, -0x4D, 0x54, 0x00, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, 0x45, 0x54, 0x00, 0x57, 0x45, 0x4D, 0x54, -0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, -0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, - - -/* PRC */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0xB0, 0xFE, 0x9A, 0xA0, -0xC8, 0x5C, 0x01, 0x80, 0xC8, 0xFA, 0x27, 0x70, 0xC9, 0xD5, 0x0E, 0x80, 0xCA, 0xDB, 0x5A, 0xF0, -0x1E, 0xBA, 0x36, 0x00, 0x1F, 0x69, 0x7F, 0x70, 0x20, 0x7E, 0x68, 0x80, 0x21, 0x49, 0x61, 0x70, -0x22, 0x5E, 0x4A, 0x80, 0x23, 0x29, 0x43, 0x70, 0x24, 0x47, 0x67, 0x00, 0x25, 0x12, 0x5F, 0xF0, -0x26, 0x27, 0x49, 0x00, 0x26, 0xF2, 0x41, 0xF0, 0x28, 0x07, 0x2B, 0x00, 0x28, 0xD2, 0x23, 0xF0, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x00, 0x00, 0x71, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x04, 0x00, 0x00, 0x70, -0x80, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, - -/* PST8PDT */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x48, 0xA0, -0x9F, 0xBB, 0x15, 0x90, 0xA0, 0x86, 0x2A, 0xA0, 0xA1, 0x9A, 0xF7, 0x90, 0xCB, 0x89, 0x1A, 0xA0, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x26, 0x10, 0xFA, 0xF8, 0x83, 0x20, 0xFB, 0xE8, 0x66, 0x10, -0xFC, 0xD8, 0x65, 0x20, 0xFD, 0xC8, 0x48, 0x10, 0xFE, 0xB8, 0x47, 0x20, 0xFF, 0xA8, 0x2A, 0x10, -0x00, 0x98, 0x29, 0x20, 0x01, 0x88, 0x0C, 0x10, 0x02, 0x78, 0x0B, 0x20, 0x03, 0x71, 0x28, 0x90, -0x04, 0x61, 0x27, 0xA0, 0x05, 0x51, 0x0A, 0x90, 0x06, 0x41, 0x09, 0xA0, 0x07, 0x30, 0xEC, 0x90, -0x07, 0x8D, 0x43, 0xA0, 0x09, 0x10, 0xCE, 0x90, 0x09, 0xAD, 0xBF, 0x20, 0x0A, 0xF0, 0xB0, 0x90, -0x0B, 0xE0, 0xAF, 0xA0, 0x0C, 0xD9, 0xCD, 0x10, 0x0D, 0xC0, 0x91, 0xA0, 0x0E, 0xB9, 0xAF, 0x10, -0x0F, 0xA9, 0xAE, 0x20, 0x10, 0x99, 0x91, 0x10, 0x11, 0x89, 0x90, 0x20, 0x12, 0x79, 0x73, 0x10, -0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, 0x15, 0x49, 0x54, 0x20, 0x16, 0x39, 0x37, 0x10, -0x17, 0x29, 0x36, 0x20, 0x18, 0x22, 0x53, 0x90, 0x19, 0x09, 0x18, 0x20, 0x1A, 0x02, 0x35, 0x90, -0x1A, 0xF2, 0x34, 0xA0, 0x1B, 0xE2, 0x17, 0x90, 0x1C, 0xD2, 0x16, 0xA0, 0x1D, 0xC1, 0xF9, 0x90, -0x1E, 0xB1, 0xF8, 0xA0, 0x1F, 0xA1, 0xDB, 0x90, 0x20, 0x76, 0x2B, 0x20, 0x21, 0x81, 0xBD, 0x90, -0x22, 0x56, 0x0D, 0x20, 0x23, 0x6A, 0xDA, 0x10, 0x24, 0x35, 0xEF, 0x20, 0x25, 0x4A, 0xBC, 0x10, -0x26, 0x15, 0xD1, 0x20, 0x27, 0x2A, 0x9E, 0x10, 0x27, 0xFE, 0xED, 0xA0, 0x29, 0x0A, 0x80, 0x10, -0x29, 0xDE, 0xCF, 0xA0, 0x2A, 0xEA, 0x62, 0x10, 0x2B, 0xBE, 0xB1, 0xA0, 0x2C, 0xD3, 0x7E, 0x90, -0x2D, 0x9E, 0x93, 0xA0, 0x2E, 0xB3, 0x60, 0x90, 0x2F, 0x7E, 0x75, 0xA0, 0x30, 0x93, 0x42, 0x90, -0x31, 0x67, 0x92, 0x20, 0x32, 0x73, 0x24, 0x90, 0x33, 0x47, 0x74, 0x20, 0x34, 0x53, 0x06, 0x90, -0x35, 0x27, 0x56, 0x20, 0x36, 0x32, 0xE8, 0x90, 0x37, 0x07, 0x38, 0x20, 0x38, 0x1C, 0x05, 0x10, -0x38, 0xE7, 0x1A, 0x20, 0x39, 0xFB, 0xE7, 0x10, 0x3A, 0xC6, 0xFC, 0x20, 0x3B, 0xDB, 0xC9, 0x10, -0x3C, 0xB0, 0x18, 0xA0, 0x3D, 0xBB, 0xAB, 0x10, 0x3E, 0x8F, 0xFA, 0xA0, 0x3F, 0x9B, 0x8D, 0x10, -0x40, 0x6F, 0xDC, 0xA0, 0x41, 0x84, 0xA9, 0x90, 0x42, 0x4F, 0xBE, 0xA0, 0x43, 0x64, 0x8B, 0x90, -0x44, 0x2F, 0xA0, 0xA0, 0x45, 0x44, 0x6D, 0x90, 0x45, 0xF3, 0xD3, 0x20, 0x47, 0x2D, 0x8A, 0x10, -0x47, 0xD3, 0xB5, 0x20, 0x49, 0x0D, 0x6C, 0x10, 0x49, 0xB3, 0x97, 0x20, 0x4A, 0xED, 0x4E, 0x10, -0x4B, 0x9C, 0xB3, 0xA0, 0x4C, 0xD6, 0x6A, 0x90, 0x4D, 0x7C, 0x95, 0xA0, 0x4E, 0xB6, 0x4C, 0x90, -0x4F, 0x5C, 0x77, 0xA0, 0x50, 0x96, 0x2E, 0x90, 0x51, 0x3C, 0x59, 0xA0, 0x52, 0x76, 0x10, 0x90, -0x53, 0x1C, 0x3B, 0xA0, 0x54, 0x55, 0xF2, 0x90, 0x54, 0xFC, 0x1D, 0xA0, 0x56, 0x35, 0xD4, 0x90, -0x56, 0xE5, 0x3A, 0x20, 0x58, 0x1E, 0xF1, 0x10, 0x58, 0xC5, 0x1C, 0x20, 0x59, 0xFE, 0xD3, 0x10, -0x5A, 0xA4, 0xFE, 0x20, 0x5B, 0xDE, 0xB5, 0x10, 0x5C, 0x84, 0xE0, 0x20, 0x5D, 0xBE, 0x97, 0x10, -0x5E, 0x64, 0xC2, 0x20, 0x5F, 0x9E, 0x79, 0x10, 0x60, 0x4D, 0xDE, 0xA0, 0x61, 0x87, 0x95, 0x90, -0x62, 0x2D, 0xC0, 0xA0, 0x63, 0x67, 0x77, 0x90, 0x64, 0x0D, 0xA2, 0xA0, 0x65, 0x47, 0x59, 0x90, -0x65, 0xED, 0x84, 0xA0, 0x67, 0x27, 0x3B, 0x90, 0x67, 0xCD, 0x66, 0xA0, 0x69, 0x07, 0x1D, 0x90, -0x69, 0xAD, 0x48, 0xA0, 0x6A, 0xE6, 0xFF, 0x90, 0x6B, 0x96, 0x65, 0x20, 0x6C, 0xD0, 0x1C, 0x10, -0x6D, 0x76, 0x47, 0x20, 0x6E, 0xAF, 0xFE, 0x10, 0x6F, 0x56, 0x29, 0x20, 0x70, 0x8F, 0xE0, 0x10, -0x71, 0x36, 0x0B, 0x20, 0x72, 0x6F, 0xC2, 0x10, 0x73, 0x15, 0xED, 0x20, 0x74, 0x4F, 0xA4, 0x10, -0x74, 0xFF, 0x09, 0xA0, 0x76, 0x38, 0xC0, 0x90, 0x76, 0xDE, 0xEB, 0xA0, 0x78, 0x18, 0xA2, 0x90, -0x78, 0xBE, 0xCD, 0xA0, 0x79, 0xF8, 0x84, 0x90, 0x7A, 0x9E, 0xAF, 0xA0, 0x7B, 0xD8, 0x66, 0x90, -0x7C, 0x7E, 0x91, 0xA0, 0x7D, 0xB8, 0x48, 0x90, 0x7E, 0x5E, 0x73, 0xA0, 0x7F, 0x98, 0x2A, 0x90, -0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 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, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x00, 0xFF, 0xFF, 0x8F, 0x80, 0x00, -0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x0C, 0x50, 0x44, 0x54, -0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, 0x00, 0x00, 0x01, - -/* ROC */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0xD1, 0x97, 0xD3, 0x00, -0xD2, 0x61, 0x7A, 0x70, 0xD3, 0x79, 0x06, 0x80, 0xD4, 0x42, 0xAD, 0xF0, 0xD5, 0x5A, 0x3A, 0x00, -0xD6, 0x23, 0xE1, 0x70, 0xD7, 0x3C, 0xBF, 0x00, 0xD8, 0x06, 0x66, 0x70, 0xD9, 0x1D, 0xF2, 0x80, -0xD9, 0xE7, 0x99, 0xF0, 0xDA, 0xFF, 0x26, 0x00, 0xDB, 0xC8, 0xCD, 0x70, 0xDC, 0xE0, 0x59, 0x80, -0xDD, 0xAA, 0x00, 0xF0, 0xDE, 0x72, 0x73, 0x00, 0xDF, 0xB5, 0x64, 0x70, 0xE0, 0x7C, 0x85, 0x00, -0xE1, 0x96, 0x97, 0xF0, 0xE2, 0x5D, 0xB8, 0x80, 0xE3, 0x77, 0xCB, 0x70, 0xE4, 0x3E, 0xEC, 0x00, -0xE5, 0x30, 0x20, 0x70, 0xE6, 0x21, 0x71, 0x00, 0xE7, 0x12, 0xA5, 0x70, 0xE8, 0x02, 0xA4, 0x80, -0xE8, 0xF3, 0xD8, 0xF0, 0xE9, 0xE3, 0xD8, 0x00, 0xEA, 0xD5, 0x0C, 0x70, 0xEB, 0xC5, 0x0B, 0x80, -0xEC, 0xB6, 0x3F, 0xF0, 0xED, 0xF7, 0xFC, 0x00, 0xEE, 0x98, 0xC4, 0xF0, 0xEF, 0xD9, 0x2F, 0x80, -0xF0, 0x79, 0xF8, 0x70, 0x07, 0xFC, 0x56, 0x00, 0x08, 0xED, 0x8A, 0x70, 0x09, 0xDD, 0x89, 0x80, -0x0A, 0xCE, 0xBD, 0xF0, 0x13, 0xBC, 0xD5, 0x00, 0x14, 0x36, 0x10, 0xF0, 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, 0x00, 0x7E, 0x90, 0x01, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x04, -0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* ROK */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x08, 0x85, 0x93, 0x7E, 0x78, -0xB0, 0xFE, 0x8D, 0xF0, 0xB8, 0x84, 0xB4, 0x78, 0xE2, 0x4F, 0x29, 0xF0, 0xED, 0xE1, 0x92, 0x80, -0xEE, 0x81, 0x09, 0xF0, 0xF0, 0x35, 0x78, 0x80, 0xFD, 0xA5, 0x0A, 0xF8, 0x20, 0xA3, 0x44, 0x70, -0x21, 0x6E, 0x3D, 0x60, 0x22, 0x83, 0x26, 0x70, 0x23, 0x4E, 0x1F, 0x60, 0x01, 0x00, 0x01, 0x03, -0x02, 0x03, 0x00, 0x01, 0x04, 0x01, 0x04, 0x01, 0x00, 0x00, 0x77, 0x88, 0x00, 0x00, 0x00, 0x00, -0x7E, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x01, 0x04, 0x00, 0x00, 0x70, 0x80, 0x00, 0x00, -0x00, 0x00, 0x8C, 0xA0, 0x01, 0x04, 0x4B, 0x53, 0x54, 0x00, 0x4B, 0x44, 0x54, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Singapore */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x17, 0x86, 0x83, 0x85, 0xA3, -0xBA, 0x67, 0x4E, 0x90, 0xC0, 0x0A, 0xE4, 0x60, 0xCA, 0xB3, 0xE5, 0x60, 0xCB, 0x91, 0x5F, 0x08, -0xD2, 0x48, 0x6D, 0xF0, 0xF7, 0xBA, 0x4D, 0x88, 0x16, 0x91, 0xF5, 0x08, 0x01, 0x02, 0x03, 0x04, -0x05, 0x04, 0x06, 0x07, 0x00, 0x00, 0x61, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x62, 0x70, 0x00, 0x04, -0x00, 0x00, 0x67, 0x20, 0x01, 0x09, 0x00, 0x00, 0x67, 0x20, 0x00, 0x04, 0x00, 0x00, 0x69, 0x78, -0x00, 0x04, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x0F, 0x00, 0x00, 0x69, 0x78, 0x00, 0x13, 0x00, 0x00, -0x70, 0x80, 0x00, 0x13, 0x53, 0x4D, 0x54, 0x00, 0x4D, 0x41, 0x4C, 0x54, 0x00, 0x4D, 0x41, 0x4C, -0x53, 0x54, 0x00, 0x4A, 0x53, 0x54, 0x00, 0x53, 0x47, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Turkey */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x16, 0x90, 0x8B, 0xF5, 0x98, -0x9B, 0x0C, 0x17, 0x60, 0x9B, 0xD5, 0xBE, 0xD0, 0xA2, 0x65, 0x63, 0xE0, 0xA3, 0x7B, 0x82, 0x50, -0xA4, 0x4E, 0x80, 0x60, 0xA5, 0x3F, 0xB4, 0xD0, 0xA6, 0x25, 0x27, 0xE0, 0xA7, 0x27, 0x7F, 0xD0, -0xAA, 0x28, 0x28, 0x60, 0xAA, 0xE1, 0xFD, 0xD0, 0xAB, 0xF9, 0x89, 0xE0, 0xAC, 0xC3, 0x31, 0x50, -0xC8, 0x7F, 0xEE, 0x60, 0xC8, 0xFF, 0xC1, 0xD0, 0xC9, 0x4A, 0xF5, 0x60, 0xCA, 0xCE, 0x80, 0x50, -0xCB, 0xCB, 0xAE, 0x60, 0xCC, 0xE5, 0xC1, 0x50, 0xD1, 0x71, 0xEB, 0xE0, 0xD2, 0x6B, 0x09, 0x50, -0xD3, 0xA2, 0x39, 0x60, 0xD4, 0x43, 0x02, 0x50, 0xD5, 0x4C, 0x0D, 0xE0, 0xD6, 0x29, 0x7B, 0xD0, -0xD7, 0x2B, 0xEF, 0xE0, 0xD8, 0x09, 0x5D, 0xD0, 0xD9, 0x02, 0x97, 0x60, 0xD9, 0xE9, 0x3F, 0xD0, -0xDA, 0xEF, 0xA8, 0x60, 0xDB, 0xD2, 0x5C, 0x50, 0xDC, 0xD4, 0xD0, 0x60, 0xDD, 0xB3, 0x8F, 0xD0, -0xF1, 0xF4, 0xB9, 0x60, 0xF2, 0x64, 0xBA, 0xD0, 0xF5, 0x68, 0x06, 0x60, 0xF6, 0x1F, 0x38, 0xD0, -0x00, 0xA0, 0xBA, 0xE0, 0x01, 0x6B, 0xB3, 0xD0, 0x02, 0x80, 0x9C, 0xE0, 0x03, 0x4B, 0x95, 0xD0, -0x04, 0x69, 0xB9, 0x60, 0x05, 0x34, 0xB2, 0x50, 0x06, 0x6E, 0x93, 0x70, 0x07, 0x39, 0xA8, 0x80, -0x07, 0xFB, 0x75, 0x00, 0x09, 0x19, 0xA6, 0xA0, 0x09, 0xDB, 0x3A, 0xE0, 0x0A, 0xF0, 0x07, 0xD0, -0x0C, 0x10, 0xCE, 0x60, 0x0C, 0xD9, 0x24, 0x50, 0x0D, 0xA4, 0x39, 0x60, 0x0E, 0xA6, 0x91, 0x50, -0x0F, 0x84, 0x1B, 0x60, 0x10, 0x86, 0x73, 0x50, 0x12, 0x67, 0x98, 0xC0, 0x13, 0x4D, 0x36, 0x00, -0x14, 0x47, 0x7A, 0xC0, 0x15, 0x23, 0xDD, 0x80, 0x16, 0x27, 0x5C, 0xC0, 0x17, 0x03, 0xBF, 0x80, -0x18, 0x07, 0x3E, 0xC0, 0x19, 0x89, 0x94, 0x50, 0x19, 0xDC, 0x94, 0xC0, 0x1C, 0xC6, 0xD3, 0xD0, -0x1D, 0x9B, 0x15, 0x50, 0x1E, 0x8C, 0x82, 0x00, 0x1F, 0x7C, 0x73, 0x00, 0x20, 0x6C, 0x64, 0x00, -0x21, 0x5C, 0x55, 0x00, 0x22, 0x4C, 0x46, 0x00, 0x23, 0x3C, 0x37, 0x00, 0x24, 0x2C, 0x28, 0x00, -0x25, 0x1C, 0x19, 0x00, 0x26, 0x0C, 0x0A, 0x00, 0x27, 0x05, 0x35, 0x80, 0x27, 0xF5, 0x18, 0x70, -0x28, 0xE5, 0x09, 0x70, 0x29, 0xD4, 0xFA, 0x70, 0x2A, 0xC4, 0xEB, 0x70, 0x2B, 0xB4, 0xDC, 0x70, -0x2C, 0xA4, 0xCD, 0x70, 0x2D, 0x94, 0xBE, 0x70, 0x2E, 0x84, 0xAF, 0x70, 0x2F, 0x74, 0xA0, 0x70, -0x30, 0x64, 0x91, 0x70, 0x31, 0x5D, 0xBC, 0xF0, 0x32, 0x72, 0x97, 0xF0, 0x33, 0x3D, 0x9E, 0xF0, -0x34, 0x52, 0x79, 0xF0, 0x35, 0x1D, 0x80, 0xF0, 0x36, 0x32, 0x5B, 0xF0, 0x36, 0xFD, 0x62, 0xF0, -0x38, 0x1B, 0x78, 0x70, 0x38, 0xDD, 0x44, 0xF0, 0x39, 0xFB, 0x5A, 0x70, 0x3A, 0xBD, 0x26, 0xF0, -0x3B, 0xDB, 0x3C, 0x70, 0x3C, 0xA6, 0x43, 0x70, 0x3D, 0xBB, 0x1E, 0x70, 0x3E, 0x86, 0x25, 0x70, -0x3F, 0x9B, 0x00, 0x70, 0x40, 0x66, 0x07, 0x70, 0x41, 0x84, 0x1C, 0xF0, 0x42, 0x45, 0xE9, 0x70, -0x43, 0x63, 0xFE, 0xF0, 0x44, 0x25, 0xCB, 0x70, 0x45, 0x43, 0xE0, 0xF0, 0x46, 0x05, 0xAD, 0x70, -0x47, 0x23, 0xC2, 0xF0, 0x47, 0xEE, 0xC9, 0xF0, 0x49, 0x03, 0xA4, 0xF0, 0x49, 0xCE, 0xAB, 0xF0, -0x4A, 0xE3, 0x86, 0xF0, 0x4B, 0xAE, 0x8D, 0xF0, 0x4C, 0xCC, 0xA3, 0x70, 0x4D, 0x8E, 0x6F, 0xF0, -0x4E, 0xAC, 0x85, 0x70, 0x4F, 0x6E, 0x51, 0xF0, 0x50, 0x8C, 0x67, 0x70, 0x51, 0x57, 0x6E, 0x70, -0x52, 0x6C, 0x49, 0x70, 0x53, 0x37, 0x50, 0x70, 0x54, 0x4C, 0x2B, 0x70, 0x55, 0x17, 0x32, 0x70, -0x56, 0x2C, 0x0D, 0x70, 0x56, 0xF7, 0x14, 0x70, 0x58, 0x15, 0x29, 0xF0, 0x58, 0xD6, 0xF6, 0x70, -0x59, 0xF5, 0x0B, 0xF0, 0x5A, 0xB6, 0xD8, 0x70, 0x5B, 0xD4, 0xED, 0xF0, 0x5C, 0x9F, 0xF4, 0xF0, -0x5D, 0xB4, 0xCF, 0xF0, 0x5E, 0x7F, 0xD6, 0xF0, 0x5F, 0x94, 0xB1, 0xF0, 0x60, 0x5F, 0xB8, 0xF0, -0x61, 0x7D, 0xCE, 0x70, 0x62, 0x3F, 0x9A, 0xF0, 0x63, 0x5D, 0xB0, 0x70, 0x64, 0x1F, 0x7C, 0xF0, -0x65, 0x3D, 0x92, 0x70, 0x66, 0x08, 0x99, 0x70, 0x67, 0x1D, 0x74, 0x70, 0x67, 0xE8, 0x7B, 0x70, -0x68, 0xFD, 0x56, 0x70, 0x69, 0xC8, 0x5D, 0x70, 0x6A, 0xDD, 0x38, 0x70, 0x6B, 0xA8, 0x3F, 0x70, -0x6C, 0xC6, 0x54, 0xF0, 0x6D, 0x88, 0x21, 0x70, 0x6E, 0xA6, 0x36, 0xF0, 0x6F, 0x68, 0x03, 0x70, -0x70, 0x86, 0x18, 0xF0, 0x71, 0x51, 0x1F, 0xF0, 0x72, 0x65, 0xFA, 0xF0, 0x73, 0x31, 0x01, 0xF0, -0x74, 0x45, 0xDC, 0xF0, 0x75, 0x10, 0xE3, 0xF0, 0x76, 0x2E, 0xF9, 0x70, 0x76, 0xF0, 0xC5, 0xF0, -0x78, 0x0E, 0xDB, 0x70, 0x78, 0xD0, 0xA7, 0xF0, 0x79, 0xEE, 0xBD, 0x70, 0x7A, 0xB0, 0x89, 0xF0, -0x7B, 0xCE, 0x9F, 0x70, 0x7C, 0x99, 0xA6, 0x70, 0x7D, 0xAE, 0x81, 0x70, 0x7E, 0x79, 0x88, 0x70, -0x7F, 0x8E, 0x63, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x01, 0x02, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x00, 0x00, -0x1B, 0x68, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, -0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x12, 0x00, 0x00, 0x2A, 0x30, -0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x49, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, -0x00, 0x45, 0x45, 0x54, 0x00, 0x54, 0x52, 0x53, 0x54, 0x00, 0x54, 0x52, 0x54, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* UCT */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x55, 0x43, 0x54, 0x00, 0x00, 0x00, - -/* Universal */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, - -/* US/Alaska */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x26, 0xCB, 0x89, 0x36, 0xC0, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x42, 0x30, 0xFA, 0xD2, 0x47, 0xA0, 0xFE, 0xB8, 0x63, 0x40, -0xFF, 0xA8, 0x46, 0x30, 0x00, 0x98, 0x45, 0x40, 0x01, 0x88, 0x28, 0x30, 0x02, 0x78, 0x27, 0x40, -0x03, 0x71, 0x44, 0xB0, 0x04, 0x61, 0x43, 0xC0, 0x05, 0x51, 0x26, 0xB0, 0x06, 0x41, 0x25, 0xC0, -0x07, 0x31, 0x08, 0xB0, 0x07, 0x8D, 0x5F, 0xC0, 0x09, 0x10, 0xEA, 0xB0, 0x09, 0xAD, 0xDB, 0x40, -0x0A, 0xF0, 0xCC, 0xB0, 0x0B, 0xE0, 0xCB, 0xC0, 0x0C, 0xD9, 0xE9, 0x30, 0x0D, 0xC0, 0xAD, 0xC0, -0x0E, 0xB9, 0xCB, 0x30, 0x0F, 0xA9, 0xCA, 0x40, 0x10, 0x99, 0xAD, 0x30, 0x11, 0x89, 0xAC, 0x40, -0x12, 0x79, 0x8F, 0x30, 0x13, 0x69, 0x8E, 0x40, 0x14, 0x59, 0x71, 0x30, 0x15, 0x49, 0x70, 0x40, -0x16, 0x39, 0x53, 0x30, 0x17, 0x29, 0x52, 0x40, 0x18, 0x22, 0x6F, 0xB0, 0x19, 0x09, 0x34, 0x40, -0x1A, 0x02, 0x51, 0xB0, 0x1A, 0x2B, 0x14, 0x10, 0x1A, 0xF2, 0x42, 0xB0, 0x1B, 0xE2, 0x25, 0xA0, -0x1C, 0xD2, 0x24, 0xB0, 0x1D, 0xC2, 0x07, 0xA0, 0x1E, 0xB2, 0x06, 0xB0, 0x1F, 0xA1, 0xE9, 0xA0, -0x20, 0x76, 0x39, 0x30, 0x21, 0x81, 0xCB, 0xA0, 0x22, 0x56, 0x1B, 0x30, 0x23, 0x6A, 0xE8, 0x20, -0x24, 0x35, 0xFD, 0x30, 0x25, 0x4A, 0xCA, 0x20, 0x26, 0x15, 0xDF, 0x30, 0x27, 0x2A, 0xAC, 0x20, -0x27, 0xFE, 0xFB, 0xB0, 0x29, 0x0A, 0x8E, 0x20, 0x29, 0xDE, 0xDD, 0xB0, 0x2A, 0xEA, 0x70, 0x20, -0x2B, 0xBE, 0xBF, 0xB0, 0x2C, 0xD3, 0x8C, 0xA0, 0x2D, 0x9E, 0xA1, 0xB0, 0x2E, 0xB3, 0x6E, 0xA0, -0x2F, 0x7E, 0x83, 0xB0, 0x30, 0x93, 0x50, 0xA0, 0x31, 0x67, 0xA0, 0x30, 0x32, 0x73, 0x32, 0xA0, -0x33, 0x47, 0x82, 0x30, 0x34, 0x53, 0x14, 0xA0, 0x35, 0x27, 0x64, 0x30, 0x36, 0x32, 0xF6, 0xA0, -0x37, 0x07, 0x46, 0x30, 0x38, 0x1C, 0x13, 0x20, 0x38, 0xE7, 0x28, 0x30, 0x39, 0xFB, 0xF5, 0x20, -0x3A, 0xC7, 0x0A, 0x30, 0x3B, 0xDB, 0xD7, 0x20, 0x3C, 0xB0, 0x26, 0xB0, 0x3D, 0xBB, 0xB9, 0x20, -0x3E, 0x90, 0x08, 0xB0, 0x3F, 0x9B, 0x9B, 0x20, 0x40, 0x6F, 0xEA, 0xB0, 0x41, 0x84, 0xB7, 0xA0, -0x42, 0x4F, 0xCC, 0xB0, 0x43, 0x64, 0x99, 0xA0, 0x44, 0x2F, 0xAE, 0xB0, 0x45, 0x44, 0x7B, 0xA0, -0x45, 0xF3, 0xE1, 0x30, 0x47, 0x2D, 0x98, 0x20, 0x47, 0xD3, 0xC3, 0x30, 0x49, 0x0D, 0x7A, 0x20, -0x49, 0xB3, 0xA5, 0x30, 0x4A, 0xED, 0x5C, 0x20, 0x4B, 0x9C, 0xC1, 0xB0, 0x4C, 0xD6, 0x78, 0xA0, -0x4D, 0x7C, 0xA3, 0xB0, 0x4E, 0xB6, 0x5A, 0xA0, 0x4F, 0x5C, 0x85, 0xB0, 0x50, 0x96, 0x3C, 0xA0, -0x51, 0x3C, 0x67, 0xB0, 0x52, 0x76, 0x1E, 0xA0, 0x53, 0x1C, 0x49, 0xB0, 0x54, 0x56, 0x00, 0xA0, -0x54, 0xFC, 0x2B, 0xB0, 0x56, 0x35, 0xE2, 0xA0, 0x56, 0xE5, 0x48, 0x30, 0x58, 0x1E, 0xFF, 0x20, -0x58, 0xC5, 0x2A, 0x30, 0x59, 0xFE, 0xE1, 0x20, 0x5A, 0xA5, 0x0C, 0x30, 0x5B, 0xDE, 0xC3, 0x20, -0x5C, 0x84, 0xEE, 0x30, 0x5D, 0xBE, 0xA5, 0x20, 0x5E, 0x64, 0xD0, 0x30, 0x5F, 0x9E, 0x87, 0x20, -0x60, 0x4D, 0xEC, 0xB0, 0x61, 0x87, 0xA3, 0xA0, 0x62, 0x2D, 0xCE, 0xB0, 0x63, 0x67, 0x85, 0xA0, -0x64, 0x0D, 0xB0, 0xB0, 0x65, 0x47, 0x67, 0xA0, 0x65, 0xED, 0x92, 0xB0, 0x67, 0x27, 0x49, 0xA0, -0x67, 0xCD, 0x74, 0xB0, 0x69, 0x07, 0x2B, 0xA0, 0x69, 0xAD, 0x56, 0xB0, 0x6A, 0xE7, 0x0D, 0xA0, -0x6B, 0x96, 0x73, 0x30, 0x6C, 0xD0, 0x2A, 0x20, 0x6D, 0x76, 0x55, 0x30, 0x6E, 0xB0, 0x0C, 0x20, -0x6F, 0x56, 0x37, 0x30, 0x70, 0x8F, 0xEE, 0x20, 0x71, 0x36, 0x19, 0x30, 0x72, 0x6F, 0xD0, 0x20, -0x73, 0x15, 0xFB, 0x30, 0x74, 0x4F, 0xB2, 0x20, 0x74, 0xFF, 0x17, 0xB0, 0x76, 0x38, 0xCE, 0xA0, -0x76, 0xDE, 0xF9, 0xB0, 0x78, 0x18, 0xB0, 0xA0, 0x78, 0xBE, 0xDB, 0xB0, 0x79, 0xF8, 0x92, 0xA0, -0x7A, 0x9E, 0xBD, 0xB0, 0x7B, 0xD8, 0x74, 0xA0, 0x7C, 0x7E, 0x9F, 0xB0, 0x7D, 0xB8, 0x56, 0xA0, -0x7E, 0x5E, 0x81, 0xB0, 0x7F, 0x98, 0x38, 0xA0, 0x01, 0x02, 0x00, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x05, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x00, 0xFF, 0xFF, 0x81, -0x70, 0x01, 0x04, 0xFF, 0xFF, 0x81, 0x70, 0x01, 0x09, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x0E, 0xFF, -0xFF, 0x81, 0x70, 0x01, 0x13, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x18, 0xFF, 0xFF, 0x8F, 0x80, 0x01, -0x1C, 0xFF, 0xFF, 0x81, 0x70, 0x00, 0x21, 0x43, 0x41, 0x54, 0x00, 0x43, 0x41, 0x57, 0x54, 0x00, -0x43, 0x41, 0x50, 0x54, 0x00, 0x41, 0x48, 0x53, 0x54, 0x00, 0x41, 0x48, 0x44, 0x54, 0x00, 0x59, -0x53, 0x54, 0x00, 0x41, 0x4B, 0x44, 0x54, 0x00, 0x41, 0x4B, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* US/Aleutian */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x23, 0xCB, 0x89, 0x44, 0xD0, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x50, 0x40, 0xFA, 0xD2, 0x55, 0xB0, 0xFE, 0xB8, 0x71, 0x50, -0xFF, 0xA8, 0x54, 0x40, 0x00, 0x98, 0x53, 0x50, 0x01, 0x88, 0x36, 0x40, 0x02, 0x78, 0x35, 0x50, -0x03, 0x71, 0x52, 0xC0, 0x04, 0x61, 0x51, 0xD0, 0x05, 0x51, 0x34, 0xC0, 0x06, 0x41, 0x33, 0xD0, -0x07, 0x31, 0x16, 0xC0, 0x07, 0x8D, 0x6D, 0xD0, 0x09, 0x10, 0xF8, 0xC0, 0x09, 0xAD, 0xE9, 0x50, -0x0A, 0xF0, 0xDA, 0xC0, 0x0B, 0xE0, 0xD9, 0xD0, 0x0C, 0xD9, 0xF7, 0x40, 0x0D, 0xC0, 0xBB, 0xD0, -0x0E, 0xB9, 0xD9, 0x40, 0x0F, 0xA9, 0xD8, 0x50, 0x10, 0x99, 0xBB, 0x40, 0x11, 0x89, 0xBA, 0x50, -0x12, 0x79, 0x9D, 0x40, 0x13, 0x69, 0x9C, 0x50, 0x14, 0x59, 0x7F, 0x40, 0x15, 0x49, 0x7E, 0x50, -0x16, 0x39, 0x61, 0x40, 0x17, 0x29, 0x60, 0x50, 0x18, 0x22, 0x7D, 0xC0, 0x19, 0x09, 0x42, 0x50, -0x1A, 0x02, 0x5F, 0xC0, 0x1A, 0x2B, 0x22, 0x20, 0x1A, 0xF2, 0x50, 0xC0, 0x1B, 0xE2, 0x33, 0xB0, -0x1C, 0xD2, 0x32, 0xC0, 0x1D, 0xC2, 0x15, 0xB0, 0x1E, 0xB2, 0x14, 0xC0, 0x1F, 0xA1, 0xF7, 0xB0, -0x20, 0x76, 0x47, 0x40, 0x21, 0x81, 0xD9, 0xB0, 0x22, 0x56, 0x29, 0x40, 0x23, 0x6A, 0xF6, 0x30, -0x24, 0x36, 0x0B, 0x40, 0x25, 0x4A, 0xD8, 0x30, 0x26, 0x15, 0xED, 0x40, 0x27, 0x2A, 0xBA, 0x30, -0x27, 0xFF, 0x09, 0xC0, 0x29, 0x0A, 0x9C, 0x30, 0x29, 0xDE, 0xEB, 0xC0, 0x2A, 0xEA, 0x7E, 0x30, -0x2B, 0xBE, 0xCD, 0xC0, 0x2C, 0xD3, 0x9A, 0xB0, 0x2D, 0x9E, 0xAF, 0xC0, 0x2E, 0xB3, 0x7C, 0xB0, -0x2F, 0x7E, 0x91, 0xC0, 0x30, 0x93, 0x5E, 0xB0, 0x31, 0x67, 0xAE, 0x40, 0x32, 0x73, 0x40, 0xB0, -0x33, 0x47, 0x90, 0x40, 0x34, 0x53, 0x22, 0xB0, 0x35, 0x27, 0x72, 0x40, 0x36, 0x33, 0x04, 0xB0, -0x37, 0x07, 0x54, 0x40, 0x38, 0x1C, 0x21, 0x30, 0x38, 0xE7, 0x36, 0x40, 0x39, 0xFC, 0x03, 0x30, -0x3A, 0xC7, 0x18, 0x40, 0x3B, 0xDB, 0xE5, 0x30, 0x3C, 0xB0, 0x34, 0xC0, 0x3D, 0xBB, 0xC7, 0x30, -0x3E, 0x90, 0x16, 0xC0, 0x3F, 0x9B, 0xA9, 0x30, 0x40, 0x6F, 0xF8, 0xC0, 0x41, 0x84, 0xC5, 0xB0, -0x42, 0x4F, 0xDA, 0xC0, 0x43, 0x64, 0xA7, 0xB0, 0x44, 0x2F, 0xBC, 0xC0, 0x45, 0x44, 0x89, 0xB0, -0x45, 0xF3, 0xEF, 0x40, 0x47, 0x2D, 0xA6, 0x30, 0x47, 0xD3, 0xD1, 0x40, 0x49, 0x0D, 0x88, 0x30, -0x49, 0xB3, 0xB3, 0x40, 0x4A, 0xED, 0x6A, 0x30, 0x4B, 0x9C, 0xCF, 0xC0, 0x4C, 0xD6, 0x86, 0xB0, -0x4D, 0x7C, 0xB1, 0xC0, 0x4E, 0xB6, 0x68, 0xB0, 0x4F, 0x5C, 0x93, 0xC0, 0x50, 0x96, 0x4A, 0xB0, -0x51, 0x3C, 0x75, 0xC0, 0x52, 0x76, 0x2C, 0xB0, 0x53, 0x1C, 0x57, 0xC0, 0x54, 0x56, 0x0E, 0xB0, -0x54, 0xFC, 0x39, 0xC0, 0x56, 0x35, 0xF0, 0xB0, 0x56, 0xE5, 0x56, 0x40, 0x58, 0x1F, 0x0D, 0x30, -0x58, 0xC5, 0x38, 0x40, 0x59, 0xFE, 0xEF, 0x30, 0x5A, 0xA5, 0x1A, 0x40, 0x5B, 0xDE, 0xD1, 0x30, -0x5C, 0x84, 0xFC, 0x40, 0x5D, 0xBE, 0xB3, 0x30, 0x5E, 0x64, 0xDE, 0x40, 0x5F, 0x9E, 0x95, 0x30, -0x60, 0x4D, 0xFA, 0xC0, 0x61, 0x87, 0xB1, 0xB0, 0x62, 0x2D, 0xDC, 0xC0, 0x63, 0x67, 0x93, 0xB0, -0x64, 0x0D, 0xBE, 0xC0, 0x65, 0x47, 0x75, 0xB0, 0x65, 0xED, 0xA0, 0xC0, 0x67, 0x27, 0x57, 0xB0, -0x67, 0xCD, 0x82, 0xC0, 0x69, 0x07, 0x39, 0xB0, 0x69, 0xAD, 0x64, 0xC0, 0x6A, 0xE7, 0x1B, 0xB0, -0x6B, 0x96, 0x81, 0x40, 0x6C, 0xD0, 0x38, 0x30, 0x6D, 0x76, 0x63, 0x40, 0x6E, 0xB0, 0x1A, 0x30, -0x6F, 0x56, 0x45, 0x40, 0x70, 0x8F, 0xFC, 0x30, 0x71, 0x36, 0x27, 0x40, 0x72, 0x6F, 0xDE, 0x30, -0x73, 0x16, 0x09, 0x40, 0x74, 0x4F, 0xC0, 0x30, 0x74, 0xFF, 0x25, 0xC0, 0x76, 0x38, 0xDC, 0xB0, -0x76, 0xDF, 0x07, 0xC0, 0x78, 0x18, 0xBE, 0xB0, 0x78, 0xBE, 0xE9, 0xC0, 0x79, 0xF8, 0xA0, 0xB0, -0x7A, 0x9E, 0xCB, 0xC0, 0x7B, 0xD8, 0x82, 0xB0, 0x7C, 0x7E, 0xAD, 0xC0, 0x7D, 0xB8, 0x64, 0xB0, -0x7E, 0x5E, 0x8F, 0xC0, 0x7F, 0x98, 0x46, 0xB0, 0x01, 0x02, 0x00, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x05, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x00, 0xFF, 0xFF, 0x73, -0x60, 0x01, 0x04, 0xFF, 0xFF, 0x73, 0x60, 0x01, 0x08, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x0C, 0xFF, -0xFF, 0x73, 0x60, 0x01, 0x10, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x14, 0xFF, 0xFF, 0x81, 0x70, 0x01, -0x19, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x1E, 0x4E, 0x53, 0x54, 0x00, 0x4E, 0x57, 0x54, 0x00, 0x4E, -0x50, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x42, 0x44, 0x54, 0x00, 0x41, 0x48, 0x53, 0x54, 0x00, -0x48, 0x41, 0x44, 0x54, 0x00, 0x48, 0x41, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* US/Arizona */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x9E, 0xA6, 0x3A, 0x90, -0x9F, 0xBB, 0x07, 0x80, 0xA0, 0x86, 0x1C, 0x90, 0xA1, 0x9A, 0xE9, 0x80, 0xCB, 0x89, 0x0C, 0x90, -0xCF, 0x17, 0xDF, 0x1C, 0xCF, 0x8F, 0xE5, 0xAC, 0xD0, 0x81, 0x1A, 0x1C, 0xFA, 0xF8, 0x75, 0x10, -0xFB, 0xE8, 0x58, 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x01, 0xFF, 0xFF, -0xAB, 0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, -0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, - -/* US/Central */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x9E, 0xA6, 0x2C, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xA2, 0xCB, 0x74, 0x00, -0xA3, 0x83, 0xF7, 0xF0, 0xA4, 0x45, 0xD2, 0x80, 0xA5, 0x63, 0xD9, 0xF0, 0xA6, 0x53, 0xD9, 0x00, -0xA7, 0x15, 0x97, 0x70, 0xA8, 0x33, 0xBB, 0x00, 0xA8, 0xFE, 0xB3, 0xF0, 0xAA, 0x13, 0x9D, 0x00, -0xAA, 0xDE, 0x95, 0xF0, 0xAB, 0xF3, 0x7F, 0x00, 0xAC, 0xBE, 0x77, 0xF0, 0xAD, 0xD3, 0x61, 0x00, -0xAE, 0x9E, 0x59, 0xF0, 0xAF, 0xB3, 0x43, 0x00, 0xB0, 0x7E, 0x3B, 0xF0, 0xB1, 0x9C, 0x5F, 0x80, -0xB2, 0x67, 0x58, 0x70, 0xB3, 0x7C, 0x41, 0x80, 0xB4, 0x47, 0x3A, 0x70, 0xB5, 0x5C, 0x23, 0x80, -0xB6, 0x27, 0x1C, 0x70, 0xB7, 0x3C, 0x05, 0x80, 0xB8, 0x06, 0xFE, 0x70, 0xB9, 0x1B, 0xE7, 0x80, -0xB9, 0xE6, 0xE0, 0x70, 0xBB, 0x05, 0x04, 0x00, 0xBB, 0xC6, 0xC2, 0x70, 0xBC, 0xE4, 0xE6, 0x00, -0xBD, 0xAF, 0xDE, 0xF0, 0xBE, 0xC4, 0xC8, 0x00, 0xBF, 0x8F, 0xC0, 0xF0, 0xC0, 0x5A, 0xD6, 0x00, -0xC1, 0xB0, 0x3C, 0x70, 0xC2, 0x84, 0x8C, 0x00, 0xC3, 0x4F, 0x84, 0xF0, 0xC4, 0x64, 0x6E, 0x00, -0xC5, 0x2F, 0x66, 0xF0, 0xC6, 0x4D, 0x8A, 0x80, 0xC7, 0x0F, 0x48, 0xF0, 0xC8, 0x2D, 0x6C, 0x80, -0xC8, 0xF8, 0x65, 0x70, 0xCA, 0x0D, 0x4E, 0x80, 0xCA, 0xD8, 0x47, 0x70, 0xCB, 0x88, 0xFE, 0x80, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, 0xD3, 0x75, 0xF3, 0x00, 0xD4, 0x40, 0xEB, 0xF0, -0xD5, 0x55, 0xD5, 0x00, 0xD6, 0x20, 0xCD, 0xF0, 0xD7, 0x35, 0xB7, 0x00, 0xD8, 0x00, 0xAF, 0xF0, -0xD9, 0x15, 0x99, 0x00, 0xD9, 0xE0, 0x91, 0xF0, 0xDA, 0xFE, 0xB5, 0x80, 0xDB, 0xC0, 0x73, 0xF0, -0xDC, 0xDE, 0x97, 0x80, 0xDD, 0xA9, 0x90, 0x70, 0xDE, 0xBE, 0x79, 0x80, 0xDF, 0x89, 0x72, 0x70, -0xE0, 0x9E, 0x5B, 0x80, 0xE1, 0x69, 0x54, 0x70, 0xE2, 0x7E, 0x3D, 0x80, 0xE3, 0x49, 0x36, 0x70, -0xE4, 0x5E, 0x1F, 0x80, 0xE5, 0x57, 0x3C, 0xF0, 0xE6, 0x47, 0x3C, 0x00, 0xE7, 0x37, 0x1E, 0xF0, -0xE8, 0x27, 0x1E, 0x00, 0xE9, 0x17, 0x00, 0xF0, 0xEA, 0x07, 0x00, 0x00, 0xEA, 0xF6, 0xE2, 0xF0, -0xEB, 0xE6, 0xE2, 0x00, 0xEC, 0xD6, 0xC4, 0xF0, 0xED, 0xC6, 0xC4, 0x00, 0xEE, 0xBF, 0xE1, 0x70, -0xEF, 0xAF, 0xE0, 0x80, 0xF0, 0x9F, 0xC3, 0x70, 0xF1, 0x8F, 0xC2, 0x80, 0xF2, 0x7F, 0xA5, 0x70, -0xF3, 0x6F, 0xA4, 0x80, 0xF4, 0x5F, 0x87, 0x70, 0xF5, 0x4F, 0x86, 0x80, 0xF6, 0x3F, 0x69, 0x70, -0xF7, 0x2F, 0x68, 0x80, 0xF8, 0x28, 0x85, 0xF0, 0xF9, 0x0F, 0x4A, 0x80, 0xFA, 0x08, 0x67, 0xF0, -0xFA, 0xF8, 0x67, 0x00, 0xFB, 0xE8, 0x49, 0xF0, 0xFC, 0xD8, 0x49, 0x00, 0xFD, 0xC8, 0x2B, 0xF0, -0xFE, 0xB8, 0x2B, 0x00, 0xFF, 0xA8, 0x0D, 0xF0, 0x00, 0x98, 0x0D, 0x00, 0x01, 0x87, 0xEF, 0xF0, -0x02, 0x77, 0xEF, 0x00, 0x03, 0x71, 0x0C, 0x70, 0x04, 0x61, 0x0B, 0x80, 0x05, 0x50, 0xEE, 0x70, -0x06, 0x40, 0xED, 0x80, 0x07, 0x30, 0xD0, 0x70, 0x07, 0x8D, 0x27, 0x80, 0x09, 0x10, 0xB2, 0x70, -0x09, 0xAD, 0xA3, 0x00, 0x0A, 0xF0, 0x94, 0x70, 0x0B, 0xE0, 0x93, 0x80, 0x0C, 0xD9, 0xB0, 0xF0, -0x0D, 0xC0, 0x75, 0x80, 0x0E, 0xB9, 0x92, 0xF0, 0x0F, 0xA9, 0x92, 0x00, 0x10, 0x99, 0x74, 0xF0, -0x11, 0x89, 0x74, 0x00, 0x12, 0x79, 0x56, 0xF0, 0x13, 0x69, 0x56, 0x00, 0x14, 0x59, 0x38, 0xF0, -0x15, 0x49, 0x38, 0x00, 0x16, 0x39, 0x1A, 0xF0, 0x17, 0x29, 0x1A, 0x00, 0x18, 0x22, 0x37, 0x70, -0x19, 0x08, 0xFC, 0x00, 0x1A, 0x02, 0x19, 0x70, 0x1A, 0xF2, 0x18, 0x80, 0x1B, 0xE1, 0xFB, 0x70, -0x1C, 0xD1, 0xFA, 0x80, 0x1D, 0xC1, 0xDD, 0x70, 0x1E, 0xB1, 0xDC, 0x80, 0x1F, 0xA1, 0xBF, 0x70, -0x20, 0x76, 0x0F, 0x00, 0x21, 0x81, 0xA1, 0x70, 0x22, 0x55, 0xF1, 0x00, 0x23, 0x6A, 0xBD, 0xF0, -0x24, 0x35, 0xD3, 0x00, 0x25, 0x4A, 0x9F, 0xF0, 0x26, 0x15, 0xB5, 0x00, 0x27, 0x2A, 0x81, 0xF0, -0x27, 0xFE, 0xD1, 0x80, 0x29, 0x0A, 0x63, 0xF0, 0x29, 0xDE, 0xB3, 0x80, 0x2A, 0xEA, 0x45, 0xF0, -0x2B, 0xBE, 0x95, 0x80, 0x2C, 0xD3, 0x62, 0x70, 0x2D, 0x9E, 0x77, 0x80, 0x2E, 0xB3, 0x44, 0x70, -0x2F, 0x7E, 0x59, 0x80, 0x30, 0x93, 0x26, 0x70, 0x31, 0x67, 0x76, 0x00, 0x32, 0x73, 0x08, 0x70, -0x33, 0x47, 0x58, 0x00, 0x34, 0x52, 0xEA, 0x70, 0x35, 0x27, 0x3A, 0x00, 0x36, 0x32, 0xCC, 0x70, -0x37, 0x07, 0x1C, 0x00, 0x38, 0x1B, 0xE8, 0xF0, 0x38, 0xE6, 0xFE, 0x00, 0x39, 0xFB, 0xCA, 0xF0, -0x3A, 0xC6, 0xE0, 0x00, 0x3B, 0xDB, 0xAC, 0xF0, 0x3C, 0xAF, 0xFC, 0x80, 0x3D, 0xBB, 0x8E, 0xF0, -0x3E, 0x8F, 0xDE, 0x80, 0x3F, 0x9B, 0x70, 0xF0, 0x40, 0x6F, 0xC0, 0x80, 0x41, 0x84, 0x8D, 0x70, -0x42, 0x4F, 0xA2, 0x80, 0x43, 0x64, 0x6F, 0x70, 0x44, 0x2F, 0x84, 0x80, 0x45, 0x44, 0x51, 0x70, -0x45, 0xF3, 0xB7, 0x00, 0x47, 0x2D, 0x6D, 0xF0, 0x47, 0xD3, 0x99, 0x00, 0x49, 0x0D, 0x4F, 0xF0, -0x49, 0xB3, 0x7B, 0x00, 0x4A, 0xED, 0x31, 0xF0, 0x4B, 0x9C, 0x97, 0x80, 0x4C, 0xD6, 0x4E, 0x70, -0x4D, 0x7C, 0x79, 0x80, 0x4E, 0xB6, 0x30, 0x70, 0x4F, 0x5C, 0x5B, 0x80, 0x50, 0x96, 0x12, 0x70, -0x51, 0x3C, 0x3D, 0x80, 0x52, 0x75, 0xF4, 0x70, 0x53, 0x1C, 0x1F, 0x80, 0x54, 0x55, 0xD6, 0x70, -0x54, 0xFC, 0x01, 0x80, 0x56, 0x35, 0xB8, 0x70, 0x56, 0xE5, 0x1E, 0x00, 0x58, 0x1E, 0xD4, 0xF0, -0x58, 0xC5, 0x00, 0x00, 0x59, 0xFE, 0xB6, 0xF0, 0x5A, 0xA4, 0xE2, 0x00, 0x5B, 0xDE, 0x98, 0xF0, -0x5C, 0x84, 0xC4, 0x00, 0x5D, 0xBE, 0x7A, 0xF0, 0x5E, 0x64, 0xA6, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, -0x60, 0x4D, 0xC2, 0x80, 0x61, 0x87, 0x79, 0x70, 0x62, 0x2D, 0xA4, 0x80, 0x63, 0x67, 0x5B, 0x70, -0x64, 0x0D, 0x86, 0x80, 0x65, 0x47, 0x3D, 0x70, 0x65, 0xED, 0x68, 0x80, 0x67, 0x27, 0x1F, 0x70, -0x67, 0xCD, 0x4A, 0x80, 0x69, 0x07, 0x01, 0x70, 0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, -0x6B, 0x96, 0x49, 0x00, 0x6C, 0xCF, 0xFF, 0xF0, 0x6D, 0x76, 0x2B, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, -0x6F, 0x56, 0x0D, 0x00, 0x70, 0x8F, 0xC3, 0xF0, 0x71, 0x35, 0xEF, 0x00, 0x72, 0x6F, 0xA5, 0xF0, -0x73, 0x15, 0xD1, 0x00, 0x74, 0x4F, 0x87, 0xF0, 0x74, 0xFE, 0xED, 0x80, 0x76, 0x38, 0xA4, 0x70, -0x76, 0xDE, 0xCF, 0x80, 0x78, 0x18, 0x86, 0x70, 0x78, 0xBE, 0xB1, 0x80, 0x79, 0xF8, 0x68, 0x70, -0x7A, 0x9E, 0x93, 0x80, 0x7B, 0xD8, 0x4A, 0x70, 0x7C, 0x7E, 0x75, 0x80, 0x7D, 0xB8, 0x2C, 0x70, -0x7E, 0x5E, 0x57, 0x80, 0x7F, 0x98, 0x0E, 0x70, 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, 0x01, 0x00, 0x01, -0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x03, 0x04, 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, 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, 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, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, -0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, -0x10, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, -0x00, 0x43, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, - -/* US/Eastern */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x1E, 0x70, -0x9F, 0xBA, 0xEB, 0x60, 0xA0, 0x86, 0x00, 0x70, 0xA1, 0x9A, 0xCD, 0x60, 0xA2, 0x65, 0xE2, 0x70, -0xA3, 0x83, 0xE9, 0xE0, 0xA4, 0x6A, 0xAE, 0x70, 0xA5, 0x35, 0xA7, 0x60, 0xA6, 0x53, 0xCA, 0xF0, -0xA7, 0x15, 0x89, 0x60, 0xA8, 0x33, 0xAC, 0xF0, 0xA8, 0xFE, 0xA5, 0xE0, 0xAA, 0x13, 0x8E, 0xF0, -0xAA, 0xDE, 0x87, 0xE0, 0xAB, 0xF3, 0x70, 0xF0, 0xAC, 0xBE, 0x69, 0xE0, 0xAD, 0xD3, 0x52, 0xF0, -0xAE, 0x9E, 0x4B, 0xE0, 0xAF, 0xB3, 0x34, 0xF0, 0xB0, 0x7E, 0x2D, 0xE0, 0xB1, 0x9C, 0x51, 0x70, -0xB2, 0x67, 0x4A, 0x60, 0xB3, 0x7C, 0x33, 0x70, 0xB4, 0x47, 0x2C, 0x60, 0xB5, 0x5C, 0x15, 0x70, -0xB6, 0x27, 0x0E, 0x60, 0xB7, 0x3B, 0xF7, 0x70, 0xB8, 0x06, 0xF0, 0x60, 0xB9, 0x1B, 0xD9, 0x70, -0xB9, 0xE6, 0xD2, 0x60, 0xBB, 0x04, 0xF5, 0xF0, 0xBB, 0xC6, 0xB4, 0x60, 0xBC, 0xE4, 0xD7, 0xF0, -0xBD, 0xAF, 0xD0, 0xE0, 0xBE, 0xC4, 0xB9, 0xF0, 0xBF, 0x8F, 0xB2, 0xE0, 0xC0, 0xA4, 0x9B, 0xF0, -0xC1, 0x6F, 0x94, 0xE0, 0xC2, 0x84, 0x7D, 0xF0, 0xC3, 0x4F, 0x76, 0xE0, 0xC4, 0x64, 0x5F, 0xF0, -0xC5, 0x2F, 0x58, 0xE0, 0xC6, 0x4D, 0x7C, 0x70, 0xC7, 0x0F, 0x3A, 0xE0, 0xC8, 0x2D, 0x5E, 0x70, -0xC8, 0xF8, 0x57, 0x60, 0xCA, 0x0D, 0x40, 0x70, 0xCA, 0xD8, 0x39, 0x60, 0xCB, 0x88, 0xF0, 0x70, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xFB, 0xE0, 0xD3, 0x75, 0xE4, 0xF0, 0xD4, 0x40, 0xDD, 0xE0, -0xD5, 0x55, 0xC6, 0xF0, 0xD6, 0x20, 0xBF, 0xE0, 0xD7, 0x35, 0xA8, 0xF0, 0xD8, 0x00, 0xA1, 0xE0, -0xD9, 0x15, 0x8A, 0xF0, 0xD9, 0xE0, 0x83, 0xE0, 0xDA, 0xFE, 0xA7, 0x70, 0xDB, 0xC0, 0x65, 0xE0, -0xDC, 0xDE, 0x89, 0x70, 0xDD, 0xA9, 0x82, 0x60, 0xDE, 0xBE, 0x6B, 0x70, 0xDF, 0x89, 0x64, 0x60, -0xE0, 0x9E, 0x4D, 0x70, 0xE1, 0x69, 0x46, 0x60, 0xE2, 0x7E, 0x2F, 0x70, 0xE3, 0x49, 0x28, 0x60, -0xE4, 0x5E, 0x11, 0x70, 0xE5, 0x57, 0x2E, 0xE0, 0xE6, 0x47, 0x2D, 0xF0, 0xE7, 0x37, 0x10, 0xE0, -0xE8, 0x27, 0x0F, 0xF0, 0xE9, 0x16, 0xF2, 0xE0, 0xEA, 0x06, 0xF1, 0xF0, 0xEA, 0xF6, 0xD4, 0xE0, -0xEB, 0xE6, 0xD3, 0xF0, 0xEC, 0xD6, 0xB6, 0xE0, 0xED, 0xC6, 0xB5, 0xF0, 0xEE, 0xBF, 0xD3, 0x60, -0xEF, 0xAF, 0xD2, 0x70, 0xF0, 0x9F, 0xB5, 0x60, 0xF1, 0x8F, 0xB4, 0x70, 0xF2, 0x7F, 0x97, 0x60, -0xF3, 0x6F, 0x96, 0x70, 0xF4, 0x5F, 0x79, 0x60, 0xF5, 0x4F, 0x78, 0x70, 0xF6, 0x3F, 0x5B, 0x60, -0xF7, 0x2F, 0x5A, 0x70, 0xF8, 0x28, 0x77, 0xE0, 0xF9, 0x0F, 0x3C, 0x70, 0xFA, 0x08, 0x59, 0xE0, -0xFA, 0xF8, 0x58, 0xF0, 0xFB, 0xE8, 0x3B, 0xE0, 0xFC, 0xD8, 0x3A, 0xF0, 0xFD, 0xC8, 0x1D, 0xE0, -0xFE, 0xB8, 0x1C, 0xF0, 0xFF, 0xA7, 0xFF, 0xE0, 0x00, 0x97, 0xFE, 0xF0, 0x01, 0x87, 0xE1, 0xE0, -0x02, 0x77, 0xE0, 0xF0, 0x03, 0x70, 0xFE, 0x60, 0x04, 0x60, 0xFD, 0x70, 0x05, 0x50, 0xE0, 0x60, -0x06, 0x40, 0xDF, 0x70, 0x07, 0x30, 0xC2, 0x60, 0x07, 0x8D, 0x19, 0x70, 0x09, 0x10, 0xA4, 0x60, -0x09, 0xAD, 0x94, 0xF0, 0x0A, 0xF0, 0x86, 0x60, 0x0B, 0xE0, 0x85, 0x70, 0x0C, 0xD9, 0xA2, 0xE0, -0x0D, 0xC0, 0x67, 0x70, 0x0E, 0xB9, 0x84, 0xE0, 0x0F, 0xA9, 0x83, 0xF0, 0x10, 0x99, 0x66, 0xE0, -0x11, 0x89, 0x65, 0xF0, 0x12, 0x79, 0x48, 0xE0, 0x13, 0x69, 0x47, 0xF0, 0x14, 0x59, 0x2A, 0xE0, -0x15, 0x49, 0x29, 0xF0, 0x16, 0x39, 0x0C, 0xE0, 0x17, 0x29, 0x0B, 0xF0, 0x18, 0x22, 0x29, 0x60, -0x19, 0x08, 0xED, 0xF0, 0x1A, 0x02, 0x0B, 0x60, 0x1A, 0xF2, 0x0A, 0x70, 0x1B, 0xE1, 0xED, 0x60, -0x1C, 0xD1, 0xEC, 0x70, 0x1D, 0xC1, 0xCF, 0x60, 0x1E, 0xB1, 0xCE, 0x70, 0x1F, 0xA1, 0xB1, 0x60, -0x20, 0x76, 0x00, 0xF0, 0x21, 0x81, 0x93, 0x60, 0x22, 0x55, 0xE2, 0xF0, 0x23, 0x6A, 0xAF, 0xE0, -0x24, 0x35, 0xC4, 0xF0, 0x25, 0x4A, 0x91, 0xE0, 0x26, 0x15, 0xA6, 0xF0, 0x27, 0x2A, 0x73, 0xE0, -0x27, 0xFE, 0xC3, 0x70, 0x29, 0x0A, 0x55, 0xE0, 0x29, 0xDE, 0xA5, 0x70, 0x2A, 0xEA, 0x37, 0xE0, -0x2B, 0xBE, 0x87, 0x70, 0x2C, 0xD3, 0x54, 0x60, 0x2D, 0x9E, 0x69, 0x70, 0x2E, 0xB3, 0x36, 0x60, -0x2F, 0x7E, 0x4B, 0x70, 0x30, 0x93, 0x18, 0x60, 0x31, 0x67, 0x67, 0xF0, 0x32, 0x72, 0xFA, 0x60, -0x33, 0x47, 0x49, 0xF0, 0x34, 0x52, 0xDC, 0x60, 0x35, 0x27, 0x2B, 0xF0, 0x36, 0x32, 0xBE, 0x60, -0x37, 0x07, 0x0D, 0xF0, 0x38, 0x1B, 0xDA, 0xE0, 0x38, 0xE6, 0xEF, 0xF0, 0x39, 0xFB, 0xBC, 0xE0, -0x3A, 0xC6, 0xD1, 0xF0, 0x3B, 0xDB, 0x9E, 0xE0, 0x3C, 0xAF, 0xEE, 0x70, 0x3D, 0xBB, 0x80, 0xE0, -0x3E, 0x8F, 0xD0, 0x70, 0x3F, 0x9B, 0x62, 0xE0, 0x40, 0x6F, 0xB2, 0x70, 0x41, 0x84, 0x7F, 0x60, -0x42, 0x4F, 0x94, 0x70, 0x43, 0x64, 0x61, 0x60, 0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x43, 0x60, -0x45, 0xF3, 0xA8, 0xF0, 0x47, 0x2D, 0x5F, 0xE0, 0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x41, 0xE0, -0x49, 0xB3, 0x6C, 0xF0, 0x4A, 0xED, 0x23, 0xE0, 0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x40, 0x60, -0x4D, 0x7C, 0x6B, 0x70, 0x4E, 0xB6, 0x22, 0x60, 0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x04, 0x60, -0x51, 0x3C, 0x2F, 0x70, 0x52, 0x75, 0xE6, 0x60, 0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xC8, 0x60, -0x54, 0xFB, 0xF3, 0x70, 0x56, 0x35, 0xAA, 0x60, 0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, -0x58, 0xC4, 0xF1, 0xF0, 0x59, 0xFE, 0xA8, 0xE0, 0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, -0x5C, 0x84, 0xB5, 0xF0, 0x5D, 0xBE, 0x6C, 0xE0, 0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, -0x60, 0x4D, 0xB4, 0x70, 0x61, 0x87, 0x6B, 0x60, 0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, -0x64, 0x0D, 0x78, 0x70, 0x65, 0x47, 0x2F, 0x60, 0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, -0x67, 0xCD, 0x3C, 0x70, 0x69, 0x06, 0xF3, 0x60, 0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, -0x6B, 0x96, 0x3A, 0xF0, 0x6C, 0xCF, 0xF1, 0xE0, 0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, -0x6F, 0x55, 0xFE, 0xF0, 0x70, 0x8F, 0xB5, 0xE0, 0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, -0x73, 0x15, 0xC2, 0xF0, 0x74, 0x4F, 0x79, 0xE0, 0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, -0x76, 0xDE, 0xC1, 0x70, 0x78, 0x18, 0x78, 0x60, 0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, -0x7A, 0x9E, 0x85, 0x70, 0x7B, 0xD8, 0x3C, 0x60, 0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, -0x7E, 0x5E, 0x49, 0x70, 0x7F, 0x98, 0x00, 0x60, 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, 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, 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, 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, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x04, 0xFF, -0xFF, 0xC7, 0xC0, 0x01, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0x45, 0x44, 0x54, 0x00, 0x45, -0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, -0x00, 0x00, 0x01, - -/* US/East-Indiana */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x9E, 0xA6, 0x2C, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCA, 0x57, 0x22, 0x80, -0xCA, 0xD8, 0x47, 0x70, 0xCB, 0x88, 0xFE, 0x80, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, -0xD3, 0x75, 0xF3, 0x00, 0xD4, 0x40, 0xEB, 0xF0, 0xD5, 0x55, 0xD5, 0x00, 0xD6, 0x20, 0xCD, 0xF0, -0xD7, 0x35, 0xB7, 0x00, 0xD8, 0x00, 0xAF, 0xF0, 0xD9, 0x15, 0x99, 0x00, 0xD9, 0xE0, 0x91, 0xF0, -0xDA, 0xFE, 0xB5, 0x80, 0xDB, 0xC0, 0x73, 0xF0, 0xDC, 0xDE, 0x97, 0x80, 0xDD, 0xA9, 0x90, 0x70, -0xDE, 0xBE, 0x79, 0x80, 0xDF, 0x89, 0x72, 0x70, 0xE0, 0x9E, 0x5B, 0x80, 0xE1, 0x69, 0x54, 0x70, -0xE2, 0x7E, 0x3D, 0x80, 0xE3, 0x49, 0x36, 0x70, 0xE4, 0x5E, 0x1F, 0x80, 0xE8, 0xF2, 0x16, 0xF0, -0xEA, 0x07, 0x00, 0x00, 0xFE, 0xB8, 0x1C, 0xF0, 0xFF, 0xA7, 0xFF, 0xE0, 0x00, 0x97, 0xFE, 0xF0, -0x01, 0x87, 0xE1, 0xE0, 0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x43, 0x60, 0x45, 0xF3, 0xA8, 0xF0, -0x47, 0x2D, 0x5F, 0xE0, 0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x41, 0xE0, 0x49, 0xB3, 0x6C, 0xF0, -0x4A, 0xED, 0x23, 0xE0, 0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x40, 0x60, 0x4D, 0x7C, 0x6B, 0x70, -0x4E, 0xB6, 0x22, 0x60, 0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x04, 0x60, 0x51, 0x3C, 0x2F, 0x70, -0x52, 0x75, 0xE6, 0x60, 0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xC8, 0x60, 0x54, 0xFB, 0xF3, 0x70, -0x56, 0x35, 0xAA, 0x60, 0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, 0x58, 0xC4, 0xF1, 0xF0, -0x59, 0xFE, 0xA8, 0xE0, 0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, 0x5C, 0x84, 0xB5, 0xF0, -0x5D, 0xBE, 0x6C, 0xE0, 0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, 0x60, 0x4D, 0xB4, 0x70, -0x61, 0x87, 0x6B, 0x60, 0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, 0x64, 0x0D, 0x78, 0x70, -0x65, 0x47, 0x2F, 0x60, 0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, 0x67, 0xCD, 0x3C, 0x70, -0x69, 0x06, 0xF3, 0x60, 0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, 0x6B, 0x96, 0x3A, 0xF0, -0x6C, 0xCF, 0xF1, 0xE0, 0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, 0x6F, 0x55, 0xFE, 0xF0, -0x70, 0x8F, 0xB5, 0xE0, 0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, 0x73, 0x15, 0xC2, 0xF0, -0x74, 0x4F, 0x79, 0xE0, 0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, 0x76, 0xDE, 0xC1, 0x70, -0x78, 0x18, 0x78, 0x60, 0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, 0x7A, 0x9E, 0x85, 0x70, -0x7B, 0xD8, 0x3C, 0x60, 0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, 0x7E, 0x5E, 0x49, 0x70, -0x7F, 0x98, 0x00, 0x60, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x01, 0x00, 0x01, 0x00, -0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x04, -0x01, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, -0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, -0xB9, 0xB0, 0x00, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, -0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x45, 0x44, -0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - -/* US/Hawaii */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x10, 0xBB, 0x05, 0x43, 0x48, -0xBB, 0x20, 0xE4, 0xB8, 0xCB, 0x89, 0x3D, 0xC8, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x49, 0x38, -0xD5, 0x8D, 0x73, 0x48, 0x01, 0x00, 0x02, 0x03, 0x00, 0x04, 0xFF, 0xFF, 0x6C, 0x58, 0x00, 0x00, -0xFF, 0xFF, 0x7A, 0x68, 0x01, 0x04, 0xFF, 0xFF, 0x7A, 0x68, 0x01, 0x08, 0xFF, 0xFF, 0x7A, 0x68, -0x01, 0x0C, 0xFF, 0xFF, 0x73, 0x60, 0x00, 0x00, 0x48, 0x53, 0x54, 0x00, 0x48, 0x44, 0x54, 0x00, -0x48, 0x57, 0x54, 0x00, 0x48, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x01, 0x00, - -/* US/Indiana-Starke */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0x9E, 0xA6, 0x2C, 0x80, -0x9F, 0xBA, 0xF9, 0x70, 0xA0, 0x86, 0x0E, 0x80, 0xA1, 0x9A, 0xDB, 0x70, 0xCB, 0x88, 0xFE, 0x80, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, 0xD5, 0x55, 0xD5, 0x00, 0xD6, 0x20, 0xCD, 0xF0, -0xD7, 0x35, 0xB7, 0x00, 0xD8, 0x00, 0xAF, 0xF0, 0xD9, 0x15, 0x99, 0x00, 0xD9, 0xE0, 0x91, 0xF0, -0xDA, 0xFE, 0xB5, 0x80, 0xDB, 0xC0, 0x73, 0xF0, 0xDC, 0xDE, 0x97, 0x80, 0xDD, 0xA9, 0x90, 0x70, -0xDE, 0xBE, 0x79, 0x80, 0xDF, 0x89, 0x72, 0x70, 0xE0, 0x9E, 0x5B, 0x80, 0xE1, 0x69, 0x54, 0x70, -0xE2, 0x7E, 0x3D, 0x80, 0xE3, 0x49, 0x36, 0x70, 0xE4, 0x5E, 0x1F, 0x80, 0xE5, 0x57, 0x3C, 0xF0, -0xE6, 0x47, 0x3C, 0x00, 0xE7, 0x37, 0x1E, 0xF0, 0xE8, 0x27, 0x1E, 0x00, 0xE8, 0xF2, 0x16, 0xF0, -0xEA, 0x07, 0x00, 0x00, 0xEA, 0xD1, 0xF8, 0xF0, 0xEB, 0xE6, 0xE2, 0x00, 0xEC, 0xD6, 0xC4, 0xF0, -0xED, 0xC6, 0xC4, 0x00, 0xEE, 0xBF, 0xE1, 0x70, 0xEF, 0xAF, 0xE0, 0x80, 0xF0, 0x9F, 0xC3, 0x70, -0xF1, 0x8F, 0xC2, 0x80, 0xF4, 0x5F, 0x87, 0x70, 0xFA, 0xF8, 0x67, 0x00, 0xFB, 0xE8, 0x49, 0xF0, -0xFC, 0xD8, 0x49, 0x00, 0xFD, 0xC8, 0x2B, 0xF0, 0xFE, 0xB8, 0x2B, 0x00, 0xFF, 0xA8, 0x0D, 0xF0, -0x00, 0x98, 0x0D, 0x00, 0x01, 0x87, 0xEF, 0xF0, 0x02, 0x77, 0xEF, 0x00, 0x03, 0x71, 0x0C, 0x70, -0x04, 0x61, 0x0B, 0x80, 0x05, 0x50, 0xEE, 0x70, 0x06, 0x40, 0xED, 0x80, 0x07, 0x30, 0xD0, 0x70, -0x07, 0x8D, 0x27, 0x80, 0x09, 0x10, 0xB2, 0x70, 0x09, 0xAD, 0xA3, 0x00, 0x0A, 0xF0, 0x94, 0x70, -0x0B, 0xE0, 0x93, 0x80, 0x0C, 0xD9, 0xB0, 0xF0, 0x0D, 0xC0, 0x75, 0x80, 0x0E, 0xB9, 0x92, 0xF0, -0x0F, 0xA9, 0x92, 0x00, 0x10, 0x99, 0x74, 0xF0, 0x11, 0x89, 0x74, 0x00, 0x12, 0x79, 0x56, 0xF0, -0x13, 0x69, 0x56, 0x00, 0x14, 0x59, 0x38, 0xF0, 0x15, 0x49, 0x38, 0x00, 0x16, 0x39, 0x1A, 0xF0, -0x17, 0x29, 0x1A, 0x00, 0x18, 0x22, 0x37, 0x70, 0x19, 0x08, 0xFC, 0x00, 0x1A, 0x02, 0x19, 0x70, -0x1A, 0xF2, 0x18, 0x80, 0x1B, 0xE1, 0xFB, 0x70, 0x1C, 0xD1, 0xFA, 0x80, 0x1D, 0xC1, 0xDD, 0x70, -0x1E, 0xB1, 0xDC, 0x80, 0x1F, 0xA1, 0xBF, 0x70, 0x20, 0x76, 0x0F, 0x00, 0x21, 0x81, 0xA1, 0x70, -0x22, 0x55, 0xF1, 0x00, 0x23, 0x6A, 0xBD, 0xF0, 0x24, 0x35, 0xD3, 0x00, 0x25, 0x4A, 0x9F, 0xF0, -0x26, 0x15, 0xB5, 0x00, 0x27, 0x2A, 0x81, 0xF0, 0x27, 0xFE, 0xD1, 0x80, 0x29, 0x0A, 0x63, 0xF0, -0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x51, 0x70, 0x45, 0xF3, 0xB7, 0x00, 0x47, 0x2D, 0x6D, 0xF0, -0x47, 0xD3, 0x99, 0x00, 0x49, 0x0D, 0x4F, 0xF0, 0x49, 0xB3, 0x7B, 0x00, 0x4A, 0xED, 0x31, 0xF0, -0x4B, 0x9C, 0x97, 0x80, 0x4C, 0xD6, 0x4E, 0x70, 0x4D, 0x7C, 0x79, 0x80, 0x4E, 0xB6, 0x30, 0x70, -0x4F, 0x5C, 0x5B, 0x80, 0x50, 0x96, 0x12, 0x70, 0x51, 0x3C, 0x3D, 0x80, 0x52, 0x75, 0xF4, 0x70, -0x53, 0x1C, 0x1F, 0x80, 0x54, 0x55, 0xD6, 0x70, 0x54, 0xFC, 0x01, 0x80, 0x56, 0x35, 0xB8, 0x70, -0x56, 0xE5, 0x1E, 0x00, 0x58, 0x1E, 0xD4, 0xF0, 0x58, 0xC5, 0x00, 0x00, 0x59, 0xFE, 0xB6, 0xF0, -0x5A, 0xA4, 0xE2, 0x00, 0x5B, 0xDE, 0x98, 0xF0, 0x5C, 0x84, 0xC4, 0x00, 0x5D, 0xBE, 0x7A, 0xF0, -0x5E, 0x64, 0xA6, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x60, 0x4D, 0xC2, 0x80, 0x61, 0x87, 0x79, 0x70, -0x62, 0x2D, 0xA4, 0x80, 0x63, 0x67, 0x5B, 0x70, 0x64, 0x0D, 0x86, 0x80, 0x65, 0x47, 0x3D, 0x70, -0x65, 0xED, 0x68, 0x80, 0x67, 0x27, 0x1F, 0x70, 0x67, 0xCD, 0x4A, 0x80, 0x69, 0x07, 0x01, 0x70, -0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, 0x6B, 0x96, 0x49, 0x00, 0x6C, 0xCF, 0xFF, 0xF0, -0x6D, 0x76, 0x2B, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, 0x6F, 0x56, 0x0D, 0x00, 0x70, 0x8F, 0xC3, 0xF0, -0x71, 0x35, 0xEF, 0x00, 0x72, 0x6F, 0xA5, 0xF0, 0x73, 0x15, 0xD1, 0x00, 0x74, 0x4F, 0x87, 0xF0, -0x74, 0xFE, 0xED, 0x80, 0x76, 0x38, 0xA4, 0x70, 0x76, 0xDE, 0xCF, 0x80, 0x78, 0x18, 0x86, 0x70, -0x78, 0xBE, 0xB1, 0x80, 0x79, 0xF8, 0x68, 0x70, 0x7A, 0x9E, 0x93, 0x80, 0x7B, 0xD8, 0x4A, 0x70, -0x7C, 0x7E, 0x75, 0x80, 0x7D, 0xB8, 0x2C, 0x70, 0x7E, 0x5E, 0x57, 0x80, 0x7F, 0x98, 0x0E, 0x70, -0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 0x04, 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, 0x04, 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, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x00, 0xFF, -0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, -0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x10, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, -0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, - -/* US/Michigan */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x8B, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x85, 0xBD, 0x22, 0x5B, -0x99, 0x3C, 0x94, 0x00, 0xCB, 0x88, 0xF0, 0x70, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x60, 0xFB, 0xE0, -0xD7, 0x35, 0xA8, 0xF0, 0xD8, 0x00, 0xA1, 0xE0, 0xFB, 0x33, 0xAC, 0x70, 0xFB, 0xE8, 0x3B, 0xE0, -0x06, 0x40, 0xDF, 0x70, 0x07, 0x30, 0xC2, 0x60, 0x07, 0x8D, 0x19, 0x70, 0x09, 0x10, 0xA4, 0x60, -0x0A, 0x00, 0xA3, 0x70, 0x0A, 0xF0, 0x86, 0x60, 0x0B, 0xE0, 0x85, 0x70, 0x0C, 0xD9, 0xA2, 0xE0, -0x0D, 0xC0, 0x67, 0x70, 0x0E, 0xB9, 0x84, 0xE0, 0x0F, 0xA9, 0x83, 0xF0, 0x10, 0x99, 0x66, 0xE0, -0x11, 0x89, 0x65, 0xF0, 0x12, 0x79, 0x48, 0xE0, 0x13, 0x69, 0x47, 0xF0, 0x14, 0x59, 0x2A, 0xE0, -0x15, 0x49, 0x29, 0xF0, 0x16, 0x39, 0x0C, 0xE0, 0x17, 0x29, 0x0B, 0xF0, 0x18, 0x22, 0x29, 0x60, -0x19, 0x08, 0xED, 0xF0, 0x1A, 0x02, 0x0B, 0x60, 0x1A, 0xF2, 0x0A, 0x70, 0x1B, 0xE1, 0xED, 0x60, -0x1C, 0xD1, 0xEC, 0x70, 0x1D, 0xC1, 0xCF, 0x60, 0x1E, 0xB1, 0xCE, 0x70, 0x1F, 0xA1, 0xB1, 0x60, -0x20, 0x76, 0x00, 0xF0, 0x21, 0x81, 0x93, 0x60, 0x22, 0x55, 0xE2, 0xF0, 0x23, 0x6A, 0xAF, 0xE0, -0x24, 0x35, 0xC4, 0xF0, 0x25, 0x4A, 0x91, 0xE0, 0x26, 0x15, 0xA6, 0xF0, 0x27, 0x2A, 0x73, 0xE0, -0x27, 0xFE, 0xC3, 0x70, 0x29, 0x0A, 0x55, 0xE0, 0x29, 0xDE, 0xA5, 0x70, 0x2A, 0xEA, 0x37, 0xE0, -0x2B, 0xBE, 0x87, 0x70, 0x2C, 0xD3, 0x54, 0x60, 0x2D, 0x9E, 0x69, 0x70, 0x2E, 0xB3, 0x36, 0x60, -0x2F, 0x7E, 0x4B, 0x70, 0x30, 0x93, 0x18, 0x60, 0x31, 0x67, 0x67, 0xF0, 0x32, 0x72, 0xFA, 0x60, -0x33, 0x47, 0x49, 0xF0, 0x34, 0x52, 0xDC, 0x60, 0x35, 0x27, 0x2B, 0xF0, 0x36, 0x32, 0xBE, 0x60, -0x37, 0x07, 0x0D, 0xF0, 0x38, 0x1B, 0xDA, 0xE0, 0x38, 0xE6, 0xEF, 0xF0, 0x39, 0xFB, 0xBC, 0xE0, -0x3A, 0xC6, 0xD1, 0xF0, 0x3B, 0xDB, 0x9E, 0xE0, 0x3C, 0xAF, 0xEE, 0x70, 0x3D, 0xBB, 0x80, 0xE0, -0x3E, 0x8F, 0xD0, 0x70, 0x3F, 0x9B, 0x62, 0xE0, 0x40, 0x6F, 0xB2, 0x70, 0x41, 0x84, 0x7F, 0x60, -0x42, 0x4F, 0x94, 0x70, 0x43, 0x64, 0x61, 0x60, 0x44, 0x2F, 0x76, 0x70, 0x45, 0x44, 0x43, 0x60, -0x45, 0xF3, 0xA8, 0xF0, 0x47, 0x2D, 0x5F, 0xE0, 0x47, 0xD3, 0x8A, 0xF0, 0x49, 0x0D, 0x41, 0xE0, -0x49, 0xB3, 0x6C, 0xF0, 0x4A, 0xED, 0x23, 0xE0, 0x4B, 0x9C, 0x89, 0x70, 0x4C, 0xD6, 0x40, 0x60, -0x4D, 0x7C, 0x6B, 0x70, 0x4E, 0xB6, 0x22, 0x60, 0x4F, 0x5C, 0x4D, 0x70, 0x50, 0x96, 0x04, 0x60, -0x51, 0x3C, 0x2F, 0x70, 0x52, 0x75, 0xE6, 0x60, 0x53, 0x1C, 0x11, 0x70, 0x54, 0x55, 0xC8, 0x60, -0x54, 0xFB, 0xF3, 0x70, 0x56, 0x35, 0xAA, 0x60, 0x56, 0xE5, 0x0F, 0xF0, 0x58, 0x1E, 0xC6, 0xE0, -0x58, 0xC4, 0xF1, 0xF0, 0x59, 0xFE, 0xA8, 0xE0, 0x5A, 0xA4, 0xD3, 0xF0, 0x5B, 0xDE, 0x8A, 0xE0, -0x5C, 0x84, 0xB5, 0xF0, 0x5D, 0xBE, 0x6C, 0xE0, 0x5E, 0x64, 0x97, 0xF0, 0x5F, 0x9E, 0x4E, 0xE0, -0x60, 0x4D, 0xB4, 0x70, 0x61, 0x87, 0x6B, 0x60, 0x62, 0x2D, 0x96, 0x70, 0x63, 0x67, 0x4D, 0x60, -0x64, 0x0D, 0x78, 0x70, 0x65, 0x47, 0x2F, 0x60, 0x65, 0xED, 0x5A, 0x70, 0x67, 0x27, 0x11, 0x60, -0x67, 0xCD, 0x3C, 0x70, 0x69, 0x06, 0xF3, 0x60, 0x69, 0xAD, 0x1E, 0x70, 0x6A, 0xE6, 0xD5, 0x60, -0x6B, 0x96, 0x3A, 0xF0, 0x6C, 0xCF, 0xF1, 0xE0, 0x6D, 0x76, 0x1C, 0xF0, 0x6E, 0xAF, 0xD3, 0xE0, -0x6F, 0x55, 0xFE, 0xF0, 0x70, 0x8F, 0xB5, 0xE0, 0x71, 0x35, 0xE0, 0xF0, 0x72, 0x6F, 0x97, 0xE0, -0x73, 0x15, 0xC2, 0xF0, 0x74, 0x4F, 0x79, 0xE0, 0x74, 0xFE, 0xDF, 0x70, 0x76, 0x38, 0x96, 0x60, -0x76, 0xDE, 0xC1, 0x70, 0x78, 0x18, 0x78, 0x60, 0x78, 0xBE, 0xA3, 0x70, 0x79, 0xF8, 0x5A, 0x60, -0x7A, 0x9E, 0x85, 0x70, 0x7B, 0xD8, 0x3C, 0x60, 0x7C, 0x7E, 0x67, 0x70, 0x7D, 0xB8, 0x1E, 0x60, -0x7E, 0x5E, 0x49, 0x70, 0x7F, 0x98, 0x00, 0x60, 0x01, 0x02, 0x03, 0x04, 0x02, 0x05, 0x02, 0x05, -0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, -0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, -0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, -0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, -0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, -0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, -0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, -0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, 0x02, 0x05, -0x02, 0x05, 0x02, 0xFF, 0xFF, 0xB2, 0x25, 0x00, 0x00, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x04, 0xFF, -0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, -0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x45, -0x53, 0x54, 0x00, 0x45, 0x57, 0x54, 0x00, 0x45, 0x50, 0x54, 0x00, 0x45, 0x44, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - -/* US/Mountain */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x9D, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x3A, 0x90, -0x9F, 0xBB, 0x07, 0x80, 0xA0, 0x86, 0x1C, 0x90, 0xA1, 0x9A, 0xE9, 0x80, 0xA2, 0x65, 0xFE, 0x90, -0xA3, 0x84, 0x06, 0x00, 0xA4, 0x45, 0xE0, 0x90, 0xA4, 0x8F, 0xA6, 0x80, 0xCB, 0x89, 0x0C, 0x90, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x18, 0x00, 0xF7, 0x2F, 0x76, 0x90, 0xF8, 0x28, 0x94, 0x00, -0xF9, 0x0F, 0x58, 0x90, 0xFA, 0x08, 0x76, 0x00, 0xFA, 0xF8, 0x75, 0x10, 0xFB, 0xE8, 0x58, 0x00, -0xFC, 0xD8, 0x57, 0x10, 0xFD, 0xC8, 0x3A, 0x00, 0xFE, 0xB8, 0x39, 0x10, 0xFF, 0xA8, 0x1C, 0x00, -0x00, 0x98, 0x1B, 0x10, 0x01, 0x87, 0xFE, 0x00, 0x02, 0x77, 0xFD, 0x10, 0x03, 0x71, 0x1A, 0x80, -0x04, 0x61, 0x19, 0x90, 0x05, 0x50, 0xFC, 0x80, 0x06, 0x40, 0xFB, 0x90, 0x07, 0x30, 0xDE, 0x80, -0x07, 0x8D, 0x35, 0x90, 0x09, 0x10, 0xC0, 0x80, 0x09, 0xAD, 0xB1, 0x10, 0x0A, 0xF0, 0xA2, 0x80, -0x0B, 0xE0, 0xA1, 0x90, 0x0C, 0xD9, 0xBF, 0x00, 0x0D, 0xC0, 0x83, 0x90, 0x0E, 0xB9, 0xA1, 0x00, -0x0F, 0xA9, 0xA0, 0x10, 0x10, 0x99, 0x83, 0x00, 0x11, 0x89, 0x82, 0x10, 0x12, 0x79, 0x65, 0x00, -0x13, 0x69, 0x64, 0x10, 0x14, 0x59, 0x47, 0x00, 0x15, 0x49, 0x46, 0x10, 0x16, 0x39, 0x29, 0x00, -0x17, 0x29, 0x28, 0x10, 0x18, 0x22, 0x45, 0x80, 0x19, 0x09, 0x0A, 0x10, 0x1A, 0x02, 0x27, 0x80, -0x1A, 0xF2, 0x26, 0x90, 0x1B, 0xE2, 0x09, 0x80, 0x1C, 0xD2, 0x08, 0x90, 0x1D, 0xC1, 0xEB, 0x80, -0x1E, 0xB1, 0xEA, 0x90, 0x1F, 0xA1, 0xCD, 0x80, 0x20, 0x76, 0x1D, 0x10, 0x21, 0x81, 0xAF, 0x80, -0x22, 0x55, 0xFF, 0x10, 0x23, 0x6A, 0xCC, 0x00, 0x24, 0x35, 0xE1, 0x10, 0x25, 0x4A, 0xAE, 0x00, -0x26, 0x15, 0xC3, 0x10, 0x27, 0x2A, 0x90, 0x00, 0x27, 0xFE, 0xDF, 0x90, 0x29, 0x0A, 0x72, 0x00, -0x29, 0xDE, 0xC1, 0x90, 0x2A, 0xEA, 0x54, 0x00, 0x2B, 0xBE, 0xA3, 0x90, 0x2C, 0xD3, 0x70, 0x80, -0x2D, 0x9E, 0x85, 0x90, 0x2E, 0xB3, 0x52, 0x80, 0x2F, 0x7E, 0x67, 0x90, 0x30, 0x93, 0x34, 0x80, -0x31, 0x67, 0x84, 0x10, 0x32, 0x73, 0x16, 0x80, 0x33, 0x47, 0x66, 0x10, 0x34, 0x52, 0xF8, 0x80, -0x35, 0x27, 0x48, 0x10, 0x36, 0x32, 0xDA, 0x80, 0x37, 0x07, 0x2A, 0x10, 0x38, 0x1B, 0xF7, 0x00, -0x38, 0xE7, 0x0C, 0x10, 0x39, 0xFB, 0xD9, 0x00, 0x3A, 0xC6, 0xEE, 0x10, 0x3B, 0xDB, 0xBB, 0x00, -0x3C, 0xB0, 0x0A, 0x90, 0x3D, 0xBB, 0x9D, 0x00, 0x3E, 0x8F, 0xEC, 0x90, 0x3F, 0x9B, 0x7F, 0x00, -0x40, 0x6F, 0xCE, 0x90, 0x41, 0x84, 0x9B, 0x80, 0x42, 0x4F, 0xB0, 0x90, 0x43, 0x64, 0x7D, 0x80, -0x44, 0x2F, 0x92, 0x90, 0x45, 0x44, 0x5F, 0x80, 0x45, 0xF3, 0xC5, 0x10, 0x47, 0x2D, 0x7C, 0x00, -0x47, 0xD3, 0xA7, 0x10, 0x49, 0x0D, 0x5E, 0x00, 0x49, 0xB3, 0x89, 0x10, 0x4A, 0xED, 0x40, 0x00, -0x4B, 0x9C, 0xA5, 0x90, 0x4C, 0xD6, 0x5C, 0x80, 0x4D, 0x7C, 0x87, 0x90, 0x4E, 0xB6, 0x3E, 0x80, -0x4F, 0x5C, 0x69, 0x90, 0x50, 0x96, 0x20, 0x80, 0x51, 0x3C, 0x4B, 0x90, 0x52, 0x76, 0x02, 0x80, -0x53, 0x1C, 0x2D, 0x90, 0x54, 0x55, 0xE4, 0x80, 0x54, 0xFC, 0x0F, 0x90, 0x56, 0x35, 0xC6, 0x80, -0x56, 0xE5, 0x2C, 0x10, 0x58, 0x1E, 0xE3, 0x00, 0x58, 0xC5, 0x0E, 0x10, 0x59, 0xFE, 0xC5, 0x00, -0x5A, 0xA4, 0xF0, 0x10, 0x5B, 0xDE, 0xA7, 0x00, 0x5C, 0x84, 0xD2, 0x10, 0x5D, 0xBE, 0x89, 0x00, -0x5E, 0x64, 0xB4, 0x10, 0x5F, 0x9E, 0x6B, 0x00, 0x60, 0x4D, 0xD0, 0x90, 0x61, 0x87, 0x87, 0x80, -0x62, 0x2D, 0xB2, 0x90, 0x63, 0x67, 0x69, 0x80, 0x64, 0x0D, 0x94, 0x90, 0x65, 0x47, 0x4B, 0x80, -0x65, 0xED, 0x76, 0x90, 0x67, 0x27, 0x2D, 0x80, 0x67, 0xCD, 0x58, 0x90, 0x69, 0x07, 0x0F, 0x80, -0x69, 0xAD, 0x3A, 0x90, 0x6A, 0xE6, 0xF1, 0x80, 0x6B, 0x96, 0x57, 0x10, 0x6C, 0xD0, 0x0E, 0x00, -0x6D, 0x76, 0x39, 0x10, 0x6E, 0xAF, 0xF0, 0x00, 0x6F, 0x56, 0x1B, 0x10, 0x70, 0x8F, 0xD2, 0x00, -0x71, 0x35, 0xFD, 0x10, 0x72, 0x6F, 0xB4, 0x00, 0x73, 0x15, 0xDF, 0x10, 0x74, 0x4F, 0x96, 0x00, -0x74, 0xFE, 0xFB, 0x90, 0x76, 0x38, 0xB2, 0x80, 0x76, 0xDE, 0xDD, 0x90, 0x78, 0x18, 0x94, 0x80, -0x78, 0xBE, 0xBF, 0x90, 0x79, 0xF8, 0x76, 0x80, 0x7A, 0x9E, 0xA1, 0x90, 0x7B, 0xD8, 0x58, 0x80, -0x7C, 0x7E, 0x83, 0x90, 0x7D, 0xB8, 0x3A, 0x80, 0x7E, 0x5E, 0x65, 0x90, 0x7F, 0x98, 0x1C, 0x80, -0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 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, 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, 0xFF, 0xFF, 0xAB, -0xA0, 0x01, 0x00, 0xFF, 0xFF, 0x9D, 0x90, 0x00, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x01, 0x08, 0xFF, -0xFF, 0xAB, 0xA0, 0x01, 0x0C, 0x4D, 0x44, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x57, 0x54, -0x00, 0x4D, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - -/* US/Pacific */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xB9, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x48, 0xA0, -0x9F, 0xBB, 0x15, 0x90, 0xA0, 0x86, 0x2A, 0xA0, 0xA1, 0x9A, 0xF7, 0x90, 0xCB, 0x89, 0x1A, 0xA0, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x26, 0x10, 0xD6, 0xFE, 0x74, 0x20, 0xD8, 0x80, 0xAD, 0x90, -0xDA, 0xFE, 0xD1, 0xA0, 0xDB, 0xC0, 0x90, 0x10, 0xDC, 0xDE, 0xB3, 0xA0, 0xDD, 0xA9, 0xAC, 0x90, -0xDE, 0xBE, 0x95, 0xA0, 0xDF, 0x89, 0x8E, 0x90, 0xE0, 0x9E, 0x77, 0xA0, 0xE1, 0x69, 0x70, 0x90, -0xE2, 0x7E, 0x59, 0xA0, 0xE3, 0x49, 0x52, 0x90, 0xE4, 0x5E, 0x3B, 0xA0, 0xE5, 0x29, 0x34, 0x90, -0xE6, 0x47, 0x58, 0x20, 0xE7, 0x12, 0x51, 0x10, 0xE8, 0x27, 0x3A, 0x20, 0xE8, 0xF2, 0x33, 0x10, -0xEA, 0x07, 0x1C, 0x20, 0xEA, 0xD2, 0x15, 0x10, 0xEB, 0xE6, 0xFE, 0x20, 0xEC, 0xB1, 0xF7, 0x10, -0xED, 0xC6, 0xE0, 0x20, 0xEE, 0x91, 0xD9, 0x10, 0xEF, 0xAF, 0xFC, 0xA0, 0xF0, 0x71, 0xBB, 0x10, -0xF1, 0x8F, 0xDE, 0xA0, 0xF2, 0x7F, 0xC1, 0x90, 0xF3, 0x6F, 0xC0, 0xA0, 0xF4, 0x5F, 0xA3, 0x90, -0xF5, 0x4F, 0xA2, 0xA0, 0xF6, 0x3F, 0x85, 0x90, 0xF7, 0x2F, 0x84, 0xA0, 0xF8, 0x28, 0xA2, 0x10, -0xF9, 0x0F, 0x66, 0xA0, 0xFA, 0x08, 0x84, 0x10, 0xFA, 0xF8, 0x83, 0x20, 0xFB, 0xE8, 0x66, 0x10, -0xFC, 0xD8, 0x65, 0x20, 0xFD, 0xC8, 0x48, 0x10, 0xFE, 0xB8, 0x47, 0x20, 0xFF, 0xA8, 0x2A, 0x10, -0x00, 0x98, 0x29, 0x20, 0x01, 0x88, 0x0C, 0x10, 0x02, 0x78, 0x0B, 0x20, 0x03, 0x71, 0x28, 0x90, -0x04, 0x61, 0x27, 0xA0, 0x05, 0x51, 0x0A, 0x90, 0x06, 0x41, 0x09, 0xA0, 0x07, 0x30, 0xEC, 0x90, -0x07, 0x8D, 0x43, 0xA0, 0x09, 0x10, 0xCE, 0x90, 0x09, 0xAD, 0xBF, 0x20, 0x0A, 0xF0, 0xB0, 0x90, -0x0B, 0xE0, 0xAF, 0xA0, 0x0C, 0xD9, 0xCD, 0x10, 0x0D, 0xC0, 0x91, 0xA0, 0x0E, 0xB9, 0xAF, 0x10, -0x0F, 0xA9, 0xAE, 0x20, 0x10, 0x99, 0x91, 0x10, 0x11, 0x89, 0x90, 0x20, 0x12, 0x79, 0x73, 0x10, -0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, 0x15, 0x49, 0x54, 0x20, 0x16, 0x39, 0x37, 0x10, -0x17, 0x29, 0x36, 0x20, 0x18, 0x22, 0x53, 0x90, 0x19, 0x09, 0x18, 0x20, 0x1A, 0x02, 0x35, 0x90, -0x1A, 0xF2, 0x34, 0xA0, 0x1B, 0xE2, 0x17, 0x90, 0x1C, 0xD2, 0x16, 0xA0, 0x1D, 0xC1, 0xF9, 0x90, -0x1E, 0xB1, 0xF8, 0xA0, 0x1F, 0xA1, 0xDB, 0x90, 0x20, 0x76, 0x2B, 0x20, 0x21, 0x81, 0xBD, 0x90, -0x22, 0x56, 0x0D, 0x20, 0x23, 0x6A, 0xDA, 0x10, 0x24, 0x35, 0xEF, 0x20, 0x25, 0x4A, 0xBC, 0x10, -0x26, 0x15, 0xD1, 0x20, 0x27, 0x2A, 0x9E, 0x10, 0x27, 0xFE, 0xED, 0xA0, 0x29, 0x0A, 0x80, 0x10, -0x29, 0xDE, 0xCF, 0xA0, 0x2A, 0xEA, 0x62, 0x10, 0x2B, 0xBE, 0xB1, 0xA0, 0x2C, 0xD3, 0x7E, 0x90, -0x2D, 0x9E, 0x93, 0xA0, 0x2E, 0xB3, 0x60, 0x90, 0x2F, 0x7E, 0x75, 0xA0, 0x30, 0x93, 0x42, 0x90, -0x31, 0x67, 0x92, 0x20, 0x32, 0x73, 0x24, 0x90, 0x33, 0x47, 0x74, 0x20, 0x34, 0x53, 0x06, 0x90, -0x35, 0x27, 0x56, 0x20, 0x36, 0x32, 0xE8, 0x90, 0x37, 0x07, 0x38, 0x20, 0x38, 0x1C, 0x05, 0x10, -0x38, 0xE7, 0x1A, 0x20, 0x39, 0xFB, 0xE7, 0x10, 0x3A, 0xC6, 0xFC, 0x20, 0x3B, 0xDB, 0xC9, 0x10, -0x3C, 0xB0, 0x18, 0xA0, 0x3D, 0xBB, 0xAB, 0x10, 0x3E, 0x8F, 0xFA, 0xA0, 0x3F, 0x9B, 0x8D, 0x10, -0x40, 0x6F, 0xDC, 0xA0, 0x41, 0x84, 0xA9, 0x90, 0x42, 0x4F, 0xBE, 0xA0, 0x43, 0x64, 0x8B, 0x90, -0x44, 0x2F, 0xA0, 0xA0, 0x45, 0x44, 0x6D, 0x90, 0x45, 0xF3, 0xD3, 0x20, 0x47, 0x2D, 0x8A, 0x10, -0x47, 0xD3, 0xB5, 0x20, 0x49, 0x0D, 0x6C, 0x10, 0x49, 0xB3, 0x97, 0x20, 0x4A, 0xED, 0x4E, 0x10, -0x4B, 0x9C, 0xB3, 0xA0, 0x4C, 0xD6, 0x6A, 0x90, 0x4D, 0x7C, 0x95, 0xA0, 0x4E, 0xB6, 0x4C, 0x90, -0x4F, 0x5C, 0x77, 0xA0, 0x50, 0x96, 0x2E, 0x90, 0x51, 0x3C, 0x59, 0xA0, 0x52, 0x76, 0x10, 0x90, -0x53, 0x1C, 0x3B, 0xA0, 0x54, 0x55, 0xF2, 0x90, 0x54, 0xFC, 0x1D, 0xA0, 0x56, 0x35, 0xD4, 0x90, -0x56, 0xE5, 0x3A, 0x20, 0x58, 0x1E, 0xF1, 0x10, 0x58, 0xC5, 0x1C, 0x20, 0x59, 0xFE, 0xD3, 0x10, -0x5A, 0xA4, 0xFE, 0x20, 0x5B, 0xDE, 0xB5, 0x10, 0x5C, 0x84, 0xE0, 0x20, 0x5D, 0xBE, 0x97, 0x10, -0x5E, 0x64, 0xC2, 0x20, 0x5F, 0x9E, 0x79, 0x10, 0x60, 0x4D, 0xDE, 0xA0, 0x61, 0x87, 0x95, 0x90, -0x62, 0x2D, 0xC0, 0xA0, 0x63, 0x67, 0x77, 0x90, 0x64, 0x0D, 0xA2, 0xA0, 0x65, 0x47, 0x59, 0x90, -0x65, 0xED, 0x84, 0xA0, 0x67, 0x27, 0x3B, 0x90, 0x67, 0xCD, 0x66, 0xA0, 0x69, 0x07, 0x1D, 0x90, -0x69, 0xAD, 0x48, 0xA0, 0x6A, 0xE6, 0xFF, 0x90, 0x6B, 0x96, 0x65, 0x20, 0x6C, 0xD0, 0x1C, 0x10, -0x6D, 0x76, 0x47, 0x20, 0x6E, 0xAF, 0xFE, 0x10, 0x6F, 0x56, 0x29, 0x20, 0x70, 0x8F, 0xE0, 0x10, -0x71, 0x36, 0x0B, 0x20, 0x72, 0x6F, 0xC2, 0x10, 0x73, 0x15, 0xED, 0x20, 0x74, 0x4F, 0xA4, 0x10, -0x74, 0xFF, 0x09, 0xA0, 0x76, 0x38, 0xC0, 0x90, 0x76, 0xDE, 0xEB, 0xA0, 0x78, 0x18, 0xA2, 0x90, -0x78, 0xBE, 0xCD, 0xA0, 0x79, 0xF8, 0x84, 0x90, 0x7A, 0x9E, 0xAF, 0xA0, 0x7B, 0xD8, 0x66, 0x90, -0x7C, 0x7E, 0x91, 0xA0, 0x7D, 0xB8, 0x48, 0x90, 0x7E, 0x5E, 0x73, 0xA0, 0x7F, 0x98, 0x2A, 0x90, -0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 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, 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, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x00, 0xFF, -0xFF, 0x8F, 0x80, 0x00, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, -0x0C, 0x50, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, -0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - -/* US/Pacific-New */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xB9, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x9E, 0xA6, 0x48, 0xA0, -0x9F, 0xBB, 0x15, 0x90, 0xA0, 0x86, 0x2A, 0xA0, 0xA1, 0x9A, 0xF7, 0x90, 0xCB, 0x89, 0x1A, 0xA0, -0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x26, 0x10, 0xD6, 0xFE, 0x74, 0x20, 0xD8, 0x80, 0xAD, 0x90, -0xDA, 0xFE, 0xD1, 0xA0, 0xDB, 0xC0, 0x90, 0x10, 0xDC, 0xDE, 0xB3, 0xA0, 0xDD, 0xA9, 0xAC, 0x90, -0xDE, 0xBE, 0x95, 0xA0, 0xDF, 0x89, 0x8E, 0x90, 0xE0, 0x9E, 0x77, 0xA0, 0xE1, 0x69, 0x70, 0x90, -0xE2, 0x7E, 0x59, 0xA0, 0xE3, 0x49, 0x52, 0x90, 0xE4, 0x5E, 0x3B, 0xA0, 0xE5, 0x29, 0x34, 0x90, -0xE6, 0x47, 0x58, 0x20, 0xE7, 0x12, 0x51, 0x10, 0xE8, 0x27, 0x3A, 0x20, 0xE8, 0xF2, 0x33, 0x10, -0xEA, 0x07, 0x1C, 0x20, 0xEA, 0xD2, 0x15, 0x10, 0xEB, 0xE6, 0xFE, 0x20, 0xEC, 0xB1, 0xF7, 0x10, -0xED, 0xC6, 0xE0, 0x20, 0xEE, 0x91, 0xD9, 0x10, 0xEF, 0xAF, 0xFC, 0xA0, 0xF0, 0x71, 0xBB, 0x10, -0xF1, 0x8F, 0xDE, 0xA0, 0xF2, 0x7F, 0xC1, 0x90, 0xF3, 0x6F, 0xC0, 0xA0, 0xF4, 0x5F, 0xA3, 0x90, -0xF5, 0x4F, 0xA2, 0xA0, 0xF6, 0x3F, 0x85, 0x90, 0xF7, 0x2F, 0x84, 0xA0, 0xF8, 0x28, 0xA2, 0x10, -0xF9, 0x0F, 0x66, 0xA0, 0xFA, 0x08, 0x84, 0x10, 0xFA, 0xF8, 0x83, 0x20, 0xFB, 0xE8, 0x66, 0x10, -0xFC, 0xD8, 0x65, 0x20, 0xFD, 0xC8, 0x48, 0x10, 0xFE, 0xB8, 0x47, 0x20, 0xFF, 0xA8, 0x2A, 0x10, -0x00, 0x98, 0x29, 0x20, 0x01, 0x88, 0x0C, 0x10, 0x02, 0x78, 0x0B, 0x20, 0x03, 0x71, 0x28, 0x90, -0x04, 0x61, 0x27, 0xA0, 0x05, 0x51, 0x0A, 0x90, 0x06, 0x41, 0x09, 0xA0, 0x07, 0x30, 0xEC, 0x90, -0x07, 0x8D, 0x43, 0xA0, 0x09, 0x10, 0xCE, 0x90, 0x09, 0xAD, 0xBF, 0x20, 0x0A, 0xF0, 0xB0, 0x90, -0x0B, 0xE0, 0xAF, 0xA0, 0x0C, 0xD9, 0xCD, 0x10, 0x0D, 0xC0, 0x91, 0xA0, 0x0E, 0xB9, 0xAF, 0x10, -0x0F, 0xA9, 0xAE, 0x20, 0x10, 0x99, 0x91, 0x10, 0x11, 0x89, 0x90, 0x20, 0x12, 0x79, 0x73, 0x10, -0x13, 0x69, 0x72, 0x20, 0x14, 0x59, 0x55, 0x10, 0x15, 0x49, 0x54, 0x20, 0x16, 0x39, 0x37, 0x10, -0x17, 0x29, 0x36, 0x20, 0x18, 0x22, 0x53, 0x90, 0x19, 0x09, 0x18, 0x20, 0x1A, 0x02, 0x35, 0x90, -0x1A, 0xF2, 0x34, 0xA0, 0x1B, 0xE2, 0x17, 0x90, 0x1C, 0xD2, 0x16, 0xA0, 0x1D, 0xC1, 0xF9, 0x90, -0x1E, 0xB1, 0xF8, 0xA0, 0x1F, 0xA1, 0xDB, 0x90, 0x20, 0x76, 0x2B, 0x20, 0x21, 0x81, 0xBD, 0x90, -0x22, 0x56, 0x0D, 0x20, 0x23, 0x6A, 0xDA, 0x10, 0x24, 0x35, 0xEF, 0x20, 0x25, 0x4A, 0xBC, 0x10, -0x26, 0x15, 0xD1, 0x20, 0x27, 0x2A, 0x9E, 0x10, 0x27, 0xFE, 0xED, 0xA0, 0x29, 0x0A, 0x80, 0x10, -0x29, 0xDE, 0xCF, 0xA0, 0x2A, 0xEA, 0x62, 0x10, 0x2B, 0xBE, 0xB1, 0xA0, 0x2C, 0xD3, 0x7E, 0x90, -0x2D, 0x9E, 0x93, 0xA0, 0x2E, 0xB3, 0x60, 0x90, 0x2F, 0x7E, 0x75, 0xA0, 0x30, 0x93, 0x42, 0x90, -0x31, 0x67, 0x92, 0x20, 0x32, 0x73, 0x24, 0x90, 0x33, 0x47, 0x74, 0x20, 0x34, 0x53, 0x06, 0x90, -0x35, 0x27, 0x56, 0x20, 0x36, 0x32, 0xE8, 0x90, 0x37, 0x07, 0x38, 0x20, 0x38, 0x1C, 0x05, 0x10, -0x38, 0xE7, 0x1A, 0x20, 0x39, 0xFB, 0xE7, 0x10, 0x3A, 0xC6, 0xFC, 0x20, 0x3B, 0xDB, 0xC9, 0x10, -0x3C, 0xB0, 0x18, 0xA0, 0x3D, 0xBB, 0xAB, 0x10, 0x3E, 0x8F, 0xFA, 0xA0, 0x3F, 0x9B, 0x8D, 0x10, -0x40, 0x6F, 0xDC, 0xA0, 0x41, 0x84, 0xA9, 0x90, 0x42, 0x4F, 0xBE, 0xA0, 0x43, 0x64, 0x8B, 0x90, -0x44, 0x2F, 0xA0, 0xA0, 0x45, 0x44, 0x6D, 0x90, 0x45, 0xF3, 0xD3, 0x20, 0x47, 0x2D, 0x8A, 0x10, -0x47, 0xD3, 0xB5, 0x20, 0x49, 0x0D, 0x6C, 0x10, 0x49, 0xB3, 0x97, 0x20, 0x4A, 0xED, 0x4E, 0x10, -0x4B, 0x9C, 0xB3, 0xA0, 0x4C, 0xD6, 0x6A, 0x90, 0x4D, 0x7C, 0x95, 0xA0, 0x4E, 0xB6, 0x4C, 0x90, -0x4F, 0x5C, 0x77, 0xA0, 0x50, 0x96, 0x2E, 0x90, 0x51, 0x3C, 0x59, 0xA0, 0x52, 0x76, 0x10, 0x90, -0x53, 0x1C, 0x3B, 0xA0, 0x54, 0x55, 0xF2, 0x90, 0x54, 0xFC, 0x1D, 0xA0, 0x56, 0x35, 0xD4, 0x90, -0x56, 0xE5, 0x3A, 0x20, 0x58, 0x1E, 0xF1, 0x10, 0x58, 0xC5, 0x1C, 0x20, 0x59, 0xFE, 0xD3, 0x10, -0x5A, 0xA4, 0xFE, 0x20, 0x5B, 0xDE, 0xB5, 0x10, 0x5C, 0x84, 0xE0, 0x20, 0x5D, 0xBE, 0x97, 0x10, -0x5E, 0x64, 0xC2, 0x20, 0x5F, 0x9E, 0x79, 0x10, 0x60, 0x4D, 0xDE, 0xA0, 0x61, 0x87, 0x95, 0x90, -0x62, 0x2D, 0xC0, 0xA0, 0x63, 0x67, 0x77, 0x90, 0x64, 0x0D, 0xA2, 0xA0, 0x65, 0x47, 0x59, 0x90, -0x65, 0xED, 0x84, 0xA0, 0x67, 0x27, 0x3B, 0x90, 0x67, 0xCD, 0x66, 0xA0, 0x69, 0x07, 0x1D, 0x90, -0x69, 0xAD, 0x48, 0xA0, 0x6A, 0xE6, 0xFF, 0x90, 0x6B, 0x96, 0x65, 0x20, 0x6C, 0xD0, 0x1C, 0x10, -0x6D, 0x76, 0x47, 0x20, 0x6E, 0xAF, 0xFE, 0x10, 0x6F, 0x56, 0x29, 0x20, 0x70, 0x8F, 0xE0, 0x10, -0x71, 0x36, 0x0B, 0x20, 0x72, 0x6F, 0xC2, 0x10, 0x73, 0x15, 0xED, 0x20, 0x74, 0x4F, 0xA4, 0x10, -0x74, 0xFF, 0x09, 0xA0, 0x76, 0x38, 0xC0, 0x90, 0x76, 0xDE, 0xEB, 0xA0, 0x78, 0x18, 0xA2, 0x90, -0x78, 0xBE, 0xCD, 0xA0, 0x79, 0xF8, 0x84, 0x90, 0x7A, 0x9E, 0xAF, 0xA0, 0x7B, 0xD8, 0x66, 0x90, -0x7C, 0x7E, 0x91, 0xA0, 0x7D, 0xB8, 0x48, 0x90, 0x7E, 0x5E, 0x73, 0xA0, 0x7F, 0x98, 0x2A, 0x90, -0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 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, 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, 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, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x00, 0xFF, -0xFF, 0x8F, 0x80, 0x00, 0x04, 0xFF, 0xFF, 0x9D, 0x90, 0x01, 0x08, 0xFF, 0xFF, 0x9D, 0x90, 0x01, -0x0C, 0x50, 0x44, 0x54, 0x00, 0x50, 0x53, 0x54, 0x00, 0x50, 0x57, 0x54, 0x00, 0x50, 0x50, 0x54, -0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - -/* US/Samoa */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0x91, 0x05, 0xFB, 0x08, -0xDA, 0x62, 0x04, 0x38, 0xFA, 0xD2, 0x55, 0xB0, 0x1A, 0x2B, 0x30, 0x30, 0x01, 0x02, 0x03, 0x04, -0xFF, 0xFF, 0x5F, 0xF8, 0x00, 0x00, 0xFF, 0xFF, 0x5E, 0x48, 0x00, 0x04, 0xFF, 0xFF, 0x65, 0x50, -0x00, 0x09, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x0D, 0xFF, 0xFF, 0x65, 0x50, 0x00, 0x11, 0x4C, 0x4D, -0x54, 0x00, 0x53, 0x41, 0x4D, 0x54, 0x00, 0x4E, 0x53, 0x54, 0x00, 0x42, 0x53, 0x54, 0x00, 0x53, -0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* UTC */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, - -/* WET */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x0D, 0xA4, 0x63, 0x90, -0x0E, 0x8B, 0x1A, 0x10, 0x0F, 0x84, 0x45, 0x90, 0x10, 0x74, 0x36, 0x90, 0x11, 0x64, 0x27, 0x90, -0x12, 0x54, 0x18, 0x90, 0x13, 0x4D, 0x44, 0x10, 0x14, 0x33, 0xFA, 0x90, 0x15, 0x23, 0xEB, 0x90, -0x16, 0x13, 0xDC, 0x90, 0x17, 0x03, 0xCD, 0x90, 0x17, 0xF3, 0xBE, 0x90, 0x18, 0xE3, 0xAF, 0x90, -0x19, 0xD3, 0xA0, 0x90, 0x1A, 0xC3, 0x91, 0x90, 0x1B, 0xBC, 0xBD, 0x10, 0x1C, 0xAC, 0xAE, 0x10, -0x1D, 0x9C, 0x9F, 0x10, 0x1E, 0x8C, 0x90, 0x10, 0x1F, 0x7C, 0x81, 0x10, 0x20, 0x6C, 0x72, 0x10, -0x21, 0x5C, 0x63, 0x10, 0x22, 0x4C, 0x54, 0x10, 0x23, 0x3C, 0x45, 0x10, 0x24, 0x2C, 0x36, 0x10, -0x25, 0x1C, 0x27, 0x10, 0x26, 0x0C, 0x18, 0x10, 0x27, 0x05, 0x43, 0x90, 0x27, 0xF5, 0x34, 0x90, -0x28, 0xE5, 0x25, 0x90, 0x29, 0xD5, 0x16, 0x90, 0x2A, 0xC5, 0x07, 0x90, 0x2B, 0xB4, 0xF8, 0x90, -0x2C, 0xA4, 0xE9, 0x90, 0x2D, 0x94, 0xDA, 0x90, 0x2E, 0x84, 0xCB, 0x90, 0x2F, 0x74, 0xBC, 0x90, -0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, -0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, -0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, -0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, -0x3F, 0x9B, 0x1C, 0x90, 0x40, 0x66, 0x23, 0x90, 0x41, 0x84, 0x39, 0x10, 0x42, 0x46, 0x05, 0x90, -0x43, 0x64, 0x1B, 0x10, 0x44, 0x25, 0xE7, 0x90, 0x45, 0x43, 0xFD, 0x10, 0x46, 0x05, 0xC9, 0x90, -0x47, 0x23, 0xDF, 0x10, 0x47, 0xEE, 0xE6, 0x10, 0x49, 0x03, 0xC1, 0x10, 0x49, 0xCE, 0xC8, 0x10, -0x4A, 0xE3, 0xA3, 0x10, 0x4B, 0xAE, 0xAA, 0x10, 0x4C, 0xCC, 0xBF, 0x90, 0x4D, 0x8E, 0x8C, 0x10, -0x4E, 0xAC, 0xA1, 0x90, 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, -0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x6C, 0x90, 0x54, 0x4C, 0x47, 0x90, 0x55, 0x17, 0x4E, 0x90, -0x56, 0x2C, 0x29, 0x90, 0x56, 0xF7, 0x30, 0x90, 0x58, 0x15, 0x46, 0x10, 0x58, 0xD7, 0x12, 0x90, -0x59, 0xF5, 0x28, 0x10, 0x5A, 0xB6, 0xF4, 0x90, 0x5B, 0xD5, 0x0A, 0x10, 0x5C, 0xA0, 0x11, 0x10, -0x5D, 0xB4, 0xEC, 0x10, 0x5E, 0x7F, 0xF3, 0x10, 0x5F, 0x94, 0xCE, 0x10, 0x60, 0x5F, 0xD5, 0x10, -0x61, 0x7D, 0xEA, 0x90, 0x62, 0x3F, 0xB7, 0x10, 0x63, 0x5D, 0xCC, 0x90, 0x64, 0x1F, 0x99, 0x10, -0x65, 0x3D, 0xAE, 0x90, 0x66, 0x08, 0xB5, 0x90, 0x67, 0x1D, 0x90, 0x90, 0x67, 0xE8, 0x97, 0x90, -0x68, 0xFD, 0x72, 0x90, 0x69, 0xC8, 0x79, 0x90, 0x6A, 0xDD, 0x54, 0x90, 0x6B, 0xA8, 0x5B, 0x90, -0x6C, 0xC6, 0x71, 0x10, 0x6D, 0x88, 0x3D, 0x90, 0x6E, 0xA6, 0x53, 0x10, 0x6F, 0x68, 0x1F, 0x90, -0x70, 0x86, 0x35, 0x10, 0x71, 0x51, 0x3C, 0x10, 0x72, 0x66, 0x17, 0x10, 0x73, 0x31, 0x1E, 0x10, -0x74, 0x45, 0xF9, 0x10, 0x75, 0x11, 0x00, 0x10, 0x76, 0x2F, 0x15, 0x90, 0x76, 0xF0, 0xE2, 0x10, -0x78, 0x0E, 0xF7, 0x90, 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, -0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, -0x7F, 0x8E, 0x7F, 0x90, 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, -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, 0x00, 0x01, 0x00, 0x00, -0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x57, 0x45, 0x53, 0x54, 0x00, 0x57, -0x45, 0x54, 0x00, 0x01, 0x01, 0x01, 0x01, - -/* W-SU */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1E, 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, -0xB5, 0xA4, 0x19, 0x60, 0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, -0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, 0x19, 0xDB, 0x43, 0x40, 0x1A, 0xCC, 0x93, 0xD0, -0x1B, 0xBC, 0xA0, 0xF0, 0x1C, 0xAC, 0x91, 0xF0, 0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, -0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, -0x23, 0x3C, 0x28, 0xF0, 0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x0B, 0xFB, 0xF0, -0x27, 0x05, 0x27, 0x70, 0x27, 0xF5, 0x18, 0x70, 0x28, 0xE5, 0x17, 0x80, 0x29, 0x78, 0xBF, 0x80, -0x29, 0xD4, 0xD0, 0x40, 0x2A, 0xC4, 0xB3, 0x30, 0x2B, 0xB4, 0xDC, 0x70, 0x2C, 0xA4, 0xCD, 0x70, -0x2D, 0x94, 0xBE, 0x70, 0x2E, 0x84, 0xAF, 0x70, 0x2F, 0x74, 0xA0, 0x70, 0x30, 0x64, 0x91, 0x70, -0x31, 0x5D, 0xBC, 0xF0, 0x32, 0x72, 0x97, 0xF0, 0x33, 0x3D, 0x9E, 0xF0, 0x34, 0x52, 0x79, 0xF0, -0x35, 0x1D, 0x80, 0xF0, 0x36, 0x32, 0x5B, 0xF0, 0x36, 0xFD, 0x62, 0xF0, 0x38, 0x1B, 0x78, 0x70, -0x38, 0xDD, 0x44, 0xF0, 0x39, 0xFB, 0x5A, 0x70, 0x3A, 0xBD, 0x26, 0xF0, 0x3B, 0xDB, 0x3C, 0x70, -0x3C, 0xA6, 0x43, 0x70, 0x3D, 0xBB, 0x1E, 0x70, 0x3E, 0x86, 0x25, 0x70, 0x3F, 0x9B, 0x00, 0x70, -0x40, 0x66, 0x07, 0x70, 0x41, 0x84, 0x1C, 0xF0, 0x42, 0x45, 0xE9, 0x70, 0x43, 0x63, 0xFE, 0xF0, -0x44, 0x25, 0xCB, 0x70, 0x45, 0x43, 0xE0, 0xF0, 0x46, 0x05, 0xAD, 0x70, 0x47, 0x23, 0xC2, 0xF0, -0x47, 0xEE, 0xC9, 0xF0, 0x49, 0x03, 0xA4, 0xF0, 0x49, 0xCE, 0xAB, 0xF0, 0x4A, 0xE3, 0x86, 0xF0, -0x4B, 0xAE, 0x8D, 0xF0, 0x4C, 0xCC, 0xA3, 0x70, 0x4D, 0x8E, 0x6F, 0xF0, 0x4E, 0xAC, 0x85, 0x70, -0x4F, 0x6E, 0x51, 0xF0, 0x50, 0x8C, 0x67, 0x70, 0x51, 0x57, 0x6E, 0x70, 0x52, 0x6C, 0x49, 0x70, -0x53, 0x37, 0x50, 0x70, 0x54, 0x4C, 0x2B, 0x70, 0x55, 0x17, 0x32, 0x70, 0x56, 0x2C, 0x0D, 0x70, -0x56, 0xF7, 0x14, 0x70, 0x58, 0x15, 0x29, 0xF0, 0x58, 0xD6, 0xF6, 0x70, 0x59, 0xF5, 0x0B, 0xF0, -0x5A, 0xB6, 0xD8, 0x70, 0x5B, 0xD4, 0xED, 0xF0, 0x5C, 0x9F, 0xF4, 0xF0, 0x5D, 0xB4, 0xCF, 0xF0, -0x5E, 0x7F, 0xD6, 0xF0, 0x5F, 0x94, 0xB1, 0xF0, 0x60, 0x5F, 0xB8, 0xF0, 0x61, 0x7D, 0xCE, 0x70, -0x62, 0x3F, 0x9A, 0xF0, 0x63, 0x5D, 0xB0, 0x70, 0x64, 0x1F, 0x7C, 0xF0, 0x65, 0x3D, 0x92, 0x70, -0x66, 0x08, 0x99, 0x70, 0x67, 0x1D, 0x74, 0x70, 0x67, 0xE8, 0x7B, 0x70, 0x68, 0xFD, 0x56, 0x70, -0x69, 0xC8, 0x5D, 0x70, 0x6A, 0xDD, 0x38, 0x70, 0x6B, 0xA8, 0x3F, 0x70, 0x6C, 0xC6, 0x54, 0xF0, -0x6D, 0x88, 0x21, 0x70, 0x6E, 0xA6, 0x36, 0xF0, 0x6F, 0x68, 0x03, 0x70, 0x70, 0x86, 0x18, 0xF0, -0x71, 0x51, 0x1F, 0xF0, 0x72, 0x65, 0xFA, 0xF0, 0x73, 0x31, 0x01, 0xF0, 0x74, 0x45, 0xDC, 0xF0, -0x75, 0x10, 0xE3, 0xF0, 0x76, 0x2E, 0xF9, 0x70, 0x76, 0xF0, 0xC5, 0xF0, 0x78, 0x0E, 0xDB, 0x70, -0x78, 0xD0, 0xA7, 0xF0, 0x79, 0xEE, 0xBD, 0x70, 0x7A, 0xB0, 0x89, 0xF0, 0x7B, 0xCE, 0x9F, 0x70, -0x7C, 0x99, 0xA6, 0x70, 0x7D, 0xAE, 0x81, 0x70, 0x7E, 0x79, 0x88, 0x70, 0x7F, 0x8E, 0x63, 0x70, -0x02, 0x01, 0x02, 0x03, 0x01, 0x03, 0x05, 0x04, 0x05, 0x06, 0x05, 0x04, 0x07, 0x04, 0x05, 0x04, -0x05, 0x04, 0x05, 0x04, 0x05, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x0A, 0x0B, 0x08, 0x05, 0x04, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - -/* Zulu */ -0x54, 0x5A, 0x69, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, }; - -const timelib_tzdb timezonedb_builtin = { "2007.3", 550, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; diff --git a/ext/date/lib/timezonemap.h b/ext/date/lib/timezonemap.h deleted file mode 100644 index 905694630ca61..0000000000000 --- a/ext/date/lib/timezonemap.h +++ /dev/null @@ -1,1698 +0,0 @@ - { "acst", 1, -14400, "America/Porto_Acre" }, - { "acst", 1, -14400, "America/Eirunepe" }, - { "acst", 1, -14400, "America/Rio_Branco" }, - { "acst", 1, -14400, "Brazil/Acre" }, - { "act", 0, -18000, "America/Porto_Acre" }, - { "act", 0, -18000, "America/Eirunepe" }, - { "act", 0, -18000, "America/Rio_Branco" }, - { "act", 0, -18000, "Brazil/Acre" }, - { "addt", 1, -7200, "America/Goose_Bay" }, - { "addt", 1, -7200, "America/Pangnirtung" }, - { "adt", 1, -10800, "America/Halifax" }, - { "adt", 1, -10800, "America/Barbados" }, - { "adt", 1, -10800, "America/Blanc-Sablon" }, - { "adt", 1, -10800, "America/Glace_Bay" }, - { "adt", 1, -10800, "America/Goose_Bay" }, - { "adt", 1, -10800, "America/Martinique" }, - { "adt", 1, -10800, "America/Moncton" }, - { "adt", 1, -10800, "America/Pangnirtung" }, - { "adt", 1, -10800, "America/Thule" }, - { "adt", 1, -10800, "Atlantic/Bermuda" }, - { "adt", 1, -10800, "Canada/Atlantic" }, - { "adt", 1, 14400, "Asia/Baghdad" }, - { "aft", 0, 16200, "Asia/Kabul" }, - { "ahdt", 1, -32400, "America/Anchorage" }, - { "ahdt", 1, -32400, "US/Alaska" }, - { "ahst", 0, -36000, "America/Anchorage" }, - { "ahst", 0, -36000, "America/Adak" }, - { "ahst", 0, -36000, "America/Atka" }, - { "ahst", 0, -36000, "US/Alaska" }, - { "ahst", 0, -36000, "US/Aleutian" }, - { "akdt", 1, -28800, "America/Anchorage" }, - { "akdt", 1, -28800, "America/Juneau" }, - { "akdt", 1, -28800, "America/Nome" }, - { "akdt", 1, -28800, "America/Yakutat" }, - { "akdt", 1, -28800, "US/Alaska" }, - { "akst", 0, -32400, "America/Anchorage" }, - { "akst", 0, -32400, "America/Juneau" }, - { "akst", 0, -32400, "America/Nome" }, - { "akst", 0, -32400, "America/Yakutat" }, - { "akst", 0, -32400, "US/Alaska" }, - { "aktst", 1, 21600, "Asia/Aqtobe" }, - { "aktt", 0, 14400, "Asia/Aqtobe" }, - { "aktt", 0, 18000, "Asia/Aqtobe" }, - { "aktt", 0, 21600, "Asia/Aqtobe" }, - { "almst", 1, 25200, "Asia/Almaty" }, - { "almt", 0, 18000, "Asia/Almaty" }, - { "almt", 0, 21600, "Asia/Almaty" }, - { "amst", 1, 14400, "Asia/Yerevan" }, - { "amst", 1, 18000, "Asia/Yerevan" }, - { "amst", 1, -10800, "America/Boa_Vista" }, - { "amst", 1, -10800, "America/Campo_Grande" }, - { "amst", 1, -10800, "America/Cuiaba" }, - { "amst", 1, -10800, "America/Manaus" }, - { "amst", 1, -10800, "America/Porto_Velho" }, - { "amst", 1, -10800, "Brazil/West" }, - { "amt", 0, 10800, "Asia/Yerevan" }, - { "amt", 0, 14400, "Asia/Yerevan" }, - { "amt", 0, -14400, "America/Boa_Vista" }, - { "amt", 0, -14400, "America/Campo_Grande" }, - { "amt", 0, -14400, "America/Cuiaba" }, - { "amt", 0, -14400, "America/Manaus" }, - { "amt", 0, -14400, "America/Porto_Velho" }, - { "amt", 0, -14400, "Brazil/West" }, - { "amt", 0, 1172, "Europe/Amsterdam" }, - { "anast", 1, 43200, "Asia/Anadyr" }, - { "anast", 1, 46800, "Asia/Anadyr" }, - { "anast", 1, 50400, "Asia/Anadyr" }, - { "anat", 0, 39600, "Asia/Anadyr" }, - { "anat", 0, 43200, "Asia/Anadyr" }, - { "anat", 0, 46800, "Asia/Anadyr" }, - { "ant", 0, -16200, "America/Curacao" }, - { "ant", 0, -16200, "America/Aruba" }, - { "apt", 1, -10800, "America/Halifax" }, - { "apt", 1, -10800, "America/Blanc-Sablon" }, - { "apt", 1, -10800, "America/Glace_Bay" }, - { "apt", 1, -10800, "America/Moncton" }, - { "apt", 1, -10800, "America/Pangnirtung" }, - { "apt", 1, -10800, "America/Puerto_Rico" }, - { "apt", 1, -10800, "Canada/Atlantic" }, - { "aqtst", 1, 18000, "Asia/Aqtau" }, - { "aqtst", 1, 21600, "Asia/Aqtau" }, - { "aqtst", 1, 21600, "Asia/Aqtobe" }, - { "aqtt", 0, 14400, "Asia/Aqtau" }, - { "aqtt", 0, 18000, "Asia/Aqtau" }, - { "aqtt", 0, 18000, "Asia/Aqtobe" }, - { "arst", 1, -10800, "America/Buenos_Aires" }, - { "arst", 1, -7200, "America/Buenos_Aires" }, - { "arst", 1, -10800, "America/Argentina/Buenos_Aires" }, - { "arst", 1, -10800, "America/Argentina/Catamarca" }, - { "arst", 1, -10800, "America/Argentina/ComodRivadavia" }, - { "arst", 1, -10800, "America/Argentina/Cordoba" }, - { "arst", 1, -10800, "America/Argentina/Jujuy" }, - { "arst", 1, -10800, "America/Argentina/La_Rioja" }, - { "arst", 1, -10800, "America/Argentina/Mendoza" }, - { "arst", 1, -10800, "America/Argentina/Rio_Gallegos" }, - { "arst", 1, -10800, "America/Argentina/San_Juan" }, - { "arst", 1, -10800, "America/Argentina/Tucuman" }, - { "arst", 1, -10800, "America/Argentina/Ushuaia" }, - { "arst", 1, -10800, "America/Catamarca" }, - { "arst", 1, -10800, "America/Cordoba" }, - { "arst", 1, -10800, "America/Jujuy" }, - { "arst", 1, -10800, "America/Mendoza" }, - { "arst", 1, -10800, "America/Rosario" }, - { "arst", 1, -10800, "Antarctica/Palmer" }, - { "arst", 1, -7200, "America/Argentina/Buenos_Aires" }, - { "arst", 1, -7200, "America/Argentina/Catamarca" }, - { "arst", 1, -7200, "America/Argentina/ComodRivadavia" }, - { "arst", 1, -7200, "America/Argentina/Cordoba" }, - { "arst", 1, -7200, "America/Argentina/Jujuy" }, - { "arst", 1, -7200, "America/Argentina/La_Rioja" }, - { "arst", 1, -7200, "America/Argentina/Mendoza" }, - { "arst", 1, -7200, "America/Argentina/Rio_Gallegos" }, - { "arst", 1, -7200, "America/Argentina/San_Juan" }, - { "arst", 1, -7200, "America/Argentina/Tucuman" }, - { "arst", 1, -7200, "America/Argentina/Ushuaia" }, - { "arst", 1, -7200, "America/Catamarca" }, - { "arst", 1, -7200, "America/Cordoba" }, - { "arst", 1, -7200, "America/Jujuy" }, - { "arst", 1, -7200, "America/Mendoza" }, - { "arst", 1, -7200, "America/Rosario" }, - { "arst", 1, -7200, "Antarctica/Palmer" }, - { "art", 0, -10800, "America/Buenos_Aires" }, - { "art", 0, -14400, "America/Buenos_Aires" }, - { "art", 0, -10800, "America/Argentina/Buenos_Aires" }, - { "art", 0, -10800, "America/Argentina/Catamarca" }, - { "art", 0, -10800, "America/Argentina/ComodRivadavia" }, - { "art", 0, -10800, "America/Argentina/Cordoba" }, - { "art", 0, -10800, "America/Argentina/Jujuy" }, - { "art", 0, -10800, "America/Argentina/La_Rioja" }, - { "art", 0, -10800, "America/Argentina/Mendoza" }, - { "art", 0, -10800, "America/Argentina/Rio_Gallegos" }, - { "art", 0, -10800, "America/Argentina/San_Juan" }, - { "art", 0, -10800, "America/Argentina/Tucuman" }, - { "art", 0, -10800, "America/Argentina/Ushuaia" }, - { "art", 0, -10800, "America/Catamarca" }, - { "art", 0, -10800, "America/Cordoba" }, - { "art", 0, -10800, "America/Jujuy" }, - { "art", 0, -10800, "America/Mendoza" }, - { "art", 0, -10800, "America/Rosario" }, - { "art", 0, -10800, "Antarctica/Palmer" }, - { "art", 0, -14400, "America/Argentina/Buenos_Aires" }, - { "art", 0, -14400, "America/Argentina/Catamarca" }, - { "art", 0, -14400, "America/Argentina/ComodRivadavia" }, - { "art", 0, -14400, "America/Argentina/Cordoba" }, - { "art", 0, -14400, "America/Argentina/Jujuy" }, - { "art", 0, -14400, "America/Argentina/La_Rioja" }, - { "art", 0, -14400, "America/Argentina/Mendoza" }, - { "art", 0, -14400, "America/Argentina/Rio_Gallegos" }, - { "art", 0, -14400, "America/Argentina/San_Juan" }, - { "art", 0, -14400, "America/Argentina/Tucuman" }, - { "art", 0, -14400, "America/Argentina/Ushuaia" }, - { "art", 0, -14400, "America/Catamarca" }, - { "art", 0, -14400, "America/Cordoba" }, - { "art", 0, -14400, "America/Jujuy" }, - { "art", 0, -14400, "America/Mendoza" }, - { "art", 0, -14400, "America/Rosario" }, - { "art", 0, -14400, "Antarctica/Palmer" }, - { "ashst", 1, 18000, "Asia/Ashkhabad" }, - { "ashst", 1, 21600, "Asia/Ashkhabad" }, - { "ashst", 1, 18000, "Asia/Ashgabat" }, - { "ashst", 1, 21600, "Asia/Ashgabat" }, - { "asht", 0, 14400, "Asia/Ashkhabad" }, - { "asht", 0, 18000, "Asia/Ashkhabad" }, - { "asht", 0, 14400, "Asia/Ashgabat" }, - { "asht", 0, 18000, "Asia/Ashgabat" }, - { "ast", 0, 10800, "Asia/Riyadh" }, - { "ast", 0, -14400, "America/Anguilla" }, - { "ast", 0, -14400, "America/Antigua" }, - { "ast", 0, -14400, "America/Aruba" }, - { "ast", 0, -14400, "America/Barbados" }, - { "ast", 0, -14400, "America/Blanc-Sablon" }, - { "ast", 0, -14400, "America/Curacao" }, - { "ast", 0, -14400, "America/Dominica" }, - { "ast", 0, -14400, "America/Glace_Bay" }, - { "ast", 0, -14400, "America/Goose_Bay" }, - { "ast", 0, -14400, "America/Grenada" }, - { "ast", 0, -14400, "America/Guadeloupe" }, - { "ast", 0, -14400, "America/Halifax" }, - { "ast", 0, -14400, "America/Martinique" }, - { "ast", 0, -14400, "America/Miquelon" }, - { "ast", 0, -14400, "America/Moncton" }, - { "ast", 0, -14400, "America/Montserrat" }, - { "ast", 0, -14400, "America/Pangnirtung" }, - { "ast", 0, -14400, "America/Port_of_Spain" }, - { "ast", 0, -14400, "America/Puerto_Rico" }, - { "ast", 0, -14400, "America/Santo_Domingo" }, - { "ast", 0, -14400, "America/St_Kitts" }, - { "ast", 0, -14400, "America/St_Lucia" }, - { "ast", 0, -14400, "America/St_Thomas" }, - { "ast", 0, -14400, "America/St_Vincent" }, - { "ast", 0, -14400, "America/Thule" }, - { "ast", 0, -14400, "America/Tortola" }, - { "ast", 0, -14400, "America/Virgin" }, - { "ast", 0, -14400, "Atlantic/Bermuda" }, - { "ast", 0, -14400, "Canada/Atlantic" }, - { "ast", 0, 10800, "Asia/Aden" }, - { "ast", 0, 10800, "Asia/Baghdad" }, - { "ast", 0, 10800, "Asia/Bahrain" }, - { "ast", 0, 10800, "Asia/Kuwait" }, - { "ast", 0, 10800, "Asia/Qatar" }, - { "awt", 1, -10800, "America/Halifax" }, - { "awt", 1, -10800, "America/Blanc-Sablon" }, - { "awt", 1, -10800, "America/Glace_Bay" }, - { "awt", 1, -10800, "America/Moncton" }, - { "awt", 1, -10800, "America/Pangnirtung" }, - { "awt", 1, -10800, "America/Puerto_Rico" }, - { "awt", 1, -10800, "Canada/Atlantic" }, - { "azomt", 1, 0, "Atlantic/Azores" }, - { "azost", 1, -3600, "Atlantic/Azores" }, - { "azost", 1, 0, "Atlantic/Azores" }, - { "azot", 0, -3600, "Atlantic/Azores" }, - { "azot", 0, -7200, "Atlantic/Azores" }, - { "azst", 1, 14400, "Asia/Baku" }, - { "azst", 1, 18000, "Asia/Baku" }, - { "azt", 0, 10800, "Asia/Baku" }, - { "azt", 0, 14400, "Asia/Baku" }, - { "bakst", 1, 14400, "Asia/Baku" }, - { "bakst", 1, 18000, "Asia/Baku" }, - { "bakt", 0, 10800, "Asia/Baku" }, - { "bakt", 0, 14400, "Asia/Baku" }, - { "bdst", 1, 7200, "Europe/London" }, - { "bdst", 1, 7200, "Europe/Belfast" }, - { "bdst", 1, 7200, "Europe/Gibraltar" }, - { "bdst", 1, 7200, "Europe/Guernsey" }, - { "bdst", 1, 7200, "Europe/Isle_of_Man" }, - { "bdst", 1, 7200, "Europe/Jersey" }, - { "bdst", 1, 7200, "GB" }, - { "bdst", 1, 7200, "GB-Eire" }, - { "bdt", 1, -36000, "America/Adak" }, - { "bdt", 1, -36000, "America/Atka" }, - { "bdt", 1, -36000, "America/Nome" }, - { "bdt", 1, -36000, "US/Aleutian" }, - { "bdt", 0, 21600, "Asia/Dacca" }, - { "bdt", 0, 21600, "Asia/Dhaka" }, - { "beat", 0, 9000, "Africa/Mogadishu" }, - { "beat", 0, 9000, "Africa/Kampala" }, - { "beat", 0, 9000, "Africa/Nairobi" }, - { "beaut", 0, 9885, "Africa/Nairobi" }, - { "beaut", 0, 9885, "Africa/Dar_es_Salaam" }, - { "beaut", 0, 9885, "Africa/Kampala" }, - { "bmt", 0, -14308, "America/Barbados" }, - { "bmt", 0, -3996, "Africa/Banjul" }, - { "bmt", 0, 6264, "Europe/Tiraspol" }, - { "bmt", 0, 6264, "Europe/Chisinau" }, - { "bnt", 0, 27000, "Asia/Brunei" }, - { "bnt", 0, 28800, "Asia/Brunei" }, - { "bortst", 1, 30000, "Asia/Kuching" }, - { "bort", 0, 27000, "Asia/Kuching" }, - { "bort", 0, 28800, "Asia/Kuching" }, - { "bost", 1, -12756, "America/La_Paz" }, - { "bot", 0, -14400, "America/La_Paz" }, - { "brst", 1, -7200, "America/Sao_Paulo" }, - { "brst", 1, -7200, "America/Araguaina" }, - { "brst", 1, -7200, "America/Bahia" }, - { "brst", 1, -7200, "America/Belem" }, - { "brst", 1, -7200, "America/Fortaleza" }, - { "brst", 1, -7200, "America/Maceio" }, - { "brst", 1, -7200, "America/Recife" }, - { "brst", 1, -7200, "Brazil/East" }, - { "brt", 0, -10800, "America/Sao_Paulo" }, - { "brt", 0, -10800, "America/Araguaina" }, - { "brt", 0, -10800, "America/Bahia" }, - { "brt", 0, -10800, "America/Belem" }, - { "brt", 0, -10800, "America/Fortaleza" }, - { "brt", 0, -10800, "America/Maceio" }, - { "brt", 0, -10800, "America/Recife" }, - { "brt", 0, -10800, "Brazil/East" }, - { "bst", 0, 3600, "Europe/London" }, - { "bst", 1, 3600, "Europe/London" }, - { "bst", 0, -39600, "America/Adak" }, - { "bst", 0, -39600, "America/Atka" }, - { "bst", 0, -39600, "America/Nome" }, - { "bst", 0, -39600, "Pacific/Midway" }, - { "bst", 0, -39600, "Pacific/Pago_Pago" }, - { "bst", 0, -39600, "Pacific/Samoa" }, - { "bst", 0, -39600, "US/Aleutian" }, - { "bst", 0, -39600, "US/Samoa" }, - { "bst", 0, 3600, "Europe/Belfast" }, - { "bst", 0, 3600, "Europe/Guernsey" }, - { "bst", 0, 3600, "Europe/Isle_of_Man" }, - { "bst", 0, 3600, "Europe/Jersey" }, - { "bst", 0, 3600, "GB" }, - { "bst", 0, 3600, "GB-Eire" }, - { "bst", 1, 3600, "Eire" }, - { "bst", 1, 3600, "Europe/Belfast" }, - { "bst", 1, 3600, "Europe/Dublin" }, - { "bst", 1, 3600, "Europe/Gibraltar" }, - { "bst", 1, 3600, "Europe/Guernsey" }, - { "bst", 1, 3600, "Europe/Isle_of_Man" }, - { "bst", 1, 3600, "Europe/Jersey" }, - { "bst", 1, 3600, "GB" }, - { "bst", 1, 3600, "GB-Eire" }, - { "btt", 0, 21600, "Asia/Thimbu" }, - { "btt", 0, 21600, "Asia/Thimphu" }, - { "burt", 0, 23400, "Asia/Calcutta" }, - { "burt", 0, 23400, "Asia/Dacca" }, - { "burt", 0, 23400, "Asia/Dhaka" }, - { "burt", 0, 23400, "Asia/Rangoon" }, - { "cant", 0, -3600, "Atlantic/Canary" }, - { "capt", 1, -32400, "America/Anchorage" }, - { "capt", 1, -32400, "US/Alaska" }, - { "cast", 0, 34200, "Australia/Adelaide" }, - { "cast", 1, 10800, "Africa/Gaborone" }, - { "cast", 1, 10800, "Africa/Khartoum" }, - { "cat", 0, -36000, "America/Anchorage" }, - { "cat", 0, -36000, "US/Alaska" }, - { "cat", 0, 7200, "Africa/Khartoum" }, - { "cat", 0, 7200, "Africa/Blantyre" }, - { "cat", 0, 7200, "Africa/Gaborone" }, - { "cat", 0, 7200, "Africa/Harare" }, - { "cat", 0, 7200, "Africa/Kigali" }, - { "cat", 0, 7200, "Africa/Lusaka" }, - { "cat", 0, 7200, "Africa/Maputo" }, - { "cat", 0, 7200, "Africa/Windhoek" }, - { "cawt", 1, -32400, "America/Anchorage" }, - { "cawt", 1, -32400, "US/Alaska" }, - { "cddt", 1, -14400, "America/Rankin_Inlet" }, - { "cdt", 1, -18000, "America/Chicago" }, - { "cdt", 1, -14400, "America/Havana" }, - { "cdt", 1, -14400, "Cuba" }, - { "cdt", 1, -18000, "America/Atikokan" }, - { "cdt", 1, -18000, "America/Belize" }, - { "cdt", 1, -18000, "America/Cambridge_Bay" }, - { "cdt", 1, -18000, "America/Cancun" }, - { "cdt", 1, -18000, "America/Chihuahua" }, - { "cdt", 1, -18000, "America/Coral_Harbour" }, - { "cdt", 1, -18000, "America/Costa_Rica" }, - { "cdt", 1, -18000, "America/El_Salvador" }, - { "cdt", 1, -18000, "America/Fort_Wayne" }, - { "cdt", 1, -18000, "America/Guatemala" }, - { "cdt", 1, -18000, "America/Indiana/Indianapolis" }, - { "cdt", 1, -18000, "America/Indiana/Knox" }, - { "cdt", 1, -18000, "America/Indiana/Marengo" }, - { "cdt", 1, -18000, "America/Indiana/Petersburg" }, - { "cdt", 1, -18000, "America/Indiana/Vevay" }, - { "cdt", 1, -18000, "America/Indiana/Vincennes" }, - { "cdt", 1, -18000, "America/Indiana/Winamac" }, - { "cdt", 1, -18000, "America/Indianapolis" }, - { "cdt", 1, -18000, "America/Iqaluit" }, - { "cdt", 1, -18000, "America/Kentucky/Louisville" }, - { "cdt", 1, -18000, "America/Kentucky/Monticello" }, - { "cdt", 1, -18000, "America/Knox_IN" }, - { "cdt", 1, -18000, "America/Louisville" }, - { "cdt", 1, -18000, "America/Managua" }, - { "cdt", 1, -18000, "America/Menominee" }, - { "cdt", 1, -18000, "America/Merida" }, - { "cdt", 1, -18000, "America/Mexico_City" }, - { "cdt", 1, -18000, "America/Monterrey" }, - { "cdt", 1, -18000, "America/North_Dakota/Center" }, - { "cdt", 1, -18000, "America/North_Dakota/New_Salem" }, - { "cdt", 1, -18000, "America/Pangnirtung" }, - { "cdt", 1, -18000, "America/Rainy_River" }, - { "cdt", 1, -18000, "America/Rankin_Inlet" }, - { "cdt", 1, -18000, "America/Tegucigalpa" }, - { "cdt", 1, -18000, "America/Winnipeg" }, - { "cdt", 1, -18000, "Canada/Central" }, - { "cdt", 1, -18000, "CST6CDT" }, - { "cdt", 1, -18000, "Mexico/General" }, - { "cdt", 1, -18000, "US/Central" }, - { "cdt", 1, -18000, "US/East-Indiana" }, - { "cdt", 1, -18000, "US/Indiana-Starke" }, - { "cdt", 1, 32400, "Asia/Shanghai" }, - { "cdt", 1, 32400, "Asia/Chongqing" }, - { "cdt", 1, 32400, "Asia/Chungking" }, - { "cdt", 1, 32400, "Asia/Harbin" }, - { "cdt", 1, 32400, "Asia/Kashgar" }, - { "cdt", 1, 32400, "Asia/Taipei" }, - { "cdt", 1, 32400, "Asia/Urumqi" }, - { "cdt", 1, 32400, "PRC" }, - { "cdt", 1, 32400, "ROC" }, - { "cemt", 1, 10800, "Europe/Berlin" }, - { "cemt", 1, 10800, "CET" }, - { "cest", 1, 7200, "Europe/Berlin" }, - { "cest", 1, 10800, "Europe/Kaliningrad" }, - { "cest", 1, 7200, "Africa/Algiers" }, - { "cest", 1, 7200, "Africa/Ceuta" }, - { "cest", 1, 7200, "Africa/Tripoli" }, - { "cest", 1, 7200, "Africa/Tunis" }, - { "cest", 1, 7200, "Arctic/Longyearbyen" }, - { "cest", 1, 7200, "Atlantic/Jan_Mayen" }, - { "cest", 1, 7200, "CET" }, - { "cest", 1, 7200, "Europe/Amsterdam" }, - { "cest", 1, 7200, "Europe/Andorra" }, - { "cest", 1, 7200, "Europe/Athens" }, - { "cest", 1, 7200, "Europe/Belgrade" }, - { "cest", 1, 7200, "Europe/Bratislava" }, - { "cest", 1, 7200, "Europe/Brussels" }, - { "cest", 1, 7200, "Europe/Budapest" }, - { "cest", 1, 7200, "Europe/Chisinau" }, - { "cest", 1, 7200, "Europe/Copenhagen" }, - { "cest", 1, 7200, "Europe/Gibraltar" }, - { "cest", 1, 7200, "Europe/Kaliningrad" }, - { "cest", 1, 7200, "Europe/Kiev" }, - { "cest", 1, 7200, "Europe/Lisbon" }, - { "cest", 1, 7200, "Europe/Ljubljana" }, - { "cest", 1, 7200, "Europe/Luxembourg" }, - { "cest", 1, 7200, "Europe/Madrid" }, - { "cest", 1, 7200, "Europe/Malta" }, - { "cest", 1, 7200, "Europe/Minsk" }, - { "cest", 1, 7200, "Europe/Monaco" }, - { "cest", 1, 7200, "Europe/Oslo" }, - { "cest", 1, 7200, "Europe/Paris" }, - { "cest", 1, 7200, "Europe/Podgorica" }, - { "cest", 1, 7200, "Europe/Prague" }, - { "cest", 1, 7200, "Europe/Riga" }, - { "cest", 1, 7200, "Europe/Rome" }, - { "cest", 1, 7200, "Europe/San_Marino" }, - { "cest", 1, 7200, "Europe/Sarajevo" }, - { "cest", 1, 7200, "Europe/Simferopol" }, - { "cest", 1, 7200, "Europe/Skopje" }, - { "cest", 1, 7200, "Europe/Sofia" }, - { "cest", 1, 7200, "Europe/Stockholm" }, - { "cest", 1, 7200, "Europe/Tallinn" }, - { "cest", 1, 7200, "Europe/Tirane" }, - { "cest", 1, 7200, "Europe/Tiraspol" }, - { "cest", 1, 7200, "Europe/Uzhgorod" }, - { "cest", 1, 7200, "Europe/Vaduz" }, - { "cest", 1, 7200, "Europe/Vatican" }, - { "cest", 1, 7200, "Europe/Vienna" }, - { "cest", 1, 7200, "Europe/Vilnius" }, - { "cest", 1, 7200, "Europe/Warsaw" }, - { "cest", 1, 7200, "Europe/Zagreb" }, - { "cest", 1, 7200, "Europe/Zaporozhye" }, - { "cest", 1, 7200, "Europe/Zurich" }, - { "cest", 1, 7200, "Libya" }, - { "cest", 1, 7200, "Poland" }, - { "cest", 1, 7200, "Portugal" }, - { "cest", 1, 7200, "WET" }, - { "cet", 0, 3600, "Europe/Berlin" }, - { "cet", 0, 3600, "Africa/Algiers" }, - { "cet", 0, 3600, "Africa/Casablanca" }, - { "cet", 0, 3600, "Africa/Ceuta" }, - { "cet", 0, 3600, "Africa/Tripoli" }, - { "cet", 0, 3600, "Africa/Tunis" }, - { "cet", 0, 3600, "Arctic/Longyearbyen" }, - { "cet", 0, 3600, "Atlantic/Jan_Mayen" }, - { "cet", 0, 3600, "CET" }, - { "cet", 0, 3600, "Europe/Amsterdam" }, - { "cet", 0, 3600, "Europe/Andorra" }, - { "cet", 0, 3600, "Europe/Athens" }, - { "cet", 0, 3600, "Europe/Belgrade" }, - { "cet", 0, 3600, "Europe/Bratislava" }, - { "cet", 0, 3600, "Europe/Brussels" }, - { "cet", 0, 3600, "Europe/Budapest" }, - { "cet", 0, 3600, "Europe/Chisinau" }, - { "cet", 0, 3600, "Europe/Copenhagen" }, - { "cet", 0, 3600, "Europe/Gibraltar" }, - { "cet", 0, 3600, "Europe/Kaliningrad" }, - { "cet", 0, 3600, "Europe/Kiev" }, - { "cet", 0, 3600, "Europe/Lisbon" }, - { "cet", 0, 3600, "Europe/Ljubljana" }, - { "cet", 0, 3600, "Europe/Luxembourg" }, - { "cet", 0, 3600, "Europe/Madrid" }, - { "cet", 0, 3600, "Europe/Malta" }, - { "cet", 0, 3600, "Europe/Minsk" }, - { "cet", 0, 3600, "Europe/Monaco" }, - { "cet", 0, 3600, "Europe/Oslo" }, - { "cet", 0, 3600, "Europe/Paris" }, - { "cet", 0, 3600, "Europe/Podgorica" }, - { "cet", 0, 3600, "Europe/Prague" }, - { "cet", 0, 3600, "Europe/Riga" }, - { "cet", 0, 3600, "Europe/Rome" }, - { "cet", 0, 3600, "Europe/San_Marino" }, - { "cet", 0, 3600, "Europe/Sarajevo" }, - { "cet", 0, 3600, "Europe/Simferopol" }, - { "cet", 0, 3600, "Europe/Skopje" }, - { "cet", 0, 3600, "Europe/Sofia" }, - { "cet", 0, 3600, "Europe/Stockholm" }, - { "cet", 0, 3600, "Europe/Tallinn" }, - { "cet", 0, 3600, "Europe/Tirane" }, - { "cet", 0, 3600, "Europe/Tiraspol" }, - { "cet", 0, 3600, "Europe/Uzhgorod" }, - { "cet", 0, 3600, "Europe/Vaduz" }, - { "cet", 0, 3600, "Europe/Vatican" }, - { "cet", 0, 3600, "Europe/Vienna" }, - { "cet", 0, 3600, "Europe/Vilnius" }, - { "cet", 0, 3600, "Europe/Warsaw" }, - { "cet", 0, 3600, "Europe/Zagreb" }, - { "cet", 0, 3600, "Europe/Zaporozhye" }, - { "cet", 0, 3600, "Europe/Zurich" }, - { "cet", 0, 3600, "Libya" }, - { "cet", 0, 3600, "Poland" }, - { "cet", 0, 3600, "Portugal" }, - { "cet", 0, 3600, "WET" }, - { "cet", 0, 7200, "Europe/Kaliningrad" }, - { "cgst", 1, -3600, "America/Scoresbysund" }, - { "cgt", 0, -7200, "America/Scoresbysund" }, - { "chadt", 1, 49500, "Pacific/Chatham" }, - { "chadt", 1, 49500, "NZ-CHAT" }, - { "chast", 0, 45900, "Pacific/Chatham" }, - { "chast", 0, 45900, "NZ-CHAT" }, - { "chat", 0, 30600, "Asia/Harbin" }, - { "chat", 0, 32400, "Asia/Harbin" }, - { "chdt", 1, -19800, "America/Belize" }, - { "chost", 1, 36000, "Asia/Choibalsan" }, - { "chot", 0, 32400, "Asia/Choibalsan" }, - { "cit", 0, 28800, "Asia/Dili" }, - { "cit", 0, 28800, "Asia/Makassar" }, - { "cit", 0, 28800, "Asia/Pontianak" }, - { "cit", 0, 28800, "Asia/Ujung_Pandang" }, - { "cjt", 0, 32400, "Asia/Sakhalin" }, - { "ckhst", 1, -34200, "Pacific/Rarotonga" }, - { "ckt", 0, -36000, "Pacific/Rarotonga" }, - { "clst", 1, -10800, "America/Santiago" }, - { "clst", 1, -14400, "America/Santiago" }, - { "clst", 1, -10800, "Antarctica/Palmer" }, - { "clst", 1, -10800, "Chile/Continental" }, - { "clst", 1, -14400, "Chile/Continental" }, - { "clt", 0, -14400, "America/Santiago" }, - { "clt", 0, -18000, "America/Santiago" }, - { "clt", 0, -14400, "Antarctica/Palmer" }, - { "clt", 0, -14400, "Chile/Continental" }, - { "clt", 0, -18000, "Chile/Continental" }, - { "cost", 1, -14400, "America/Bogota" }, - { "cot", 0, -18000, "America/Bogota" }, - { "cpt", 1, -18000, "America/Chicago" }, - { "cpt", 1, -18000, "America/Atikokan" }, - { "cpt", 1, -18000, "America/Coral_Harbour" }, - { "cpt", 1, -18000, "America/Fort_Wayne" }, - { "cpt", 1, -18000, "America/Indiana/Indianapolis" }, - { "cpt", 1, -18000, "America/Indiana/Knox" }, - { "cpt", 1, -18000, "America/Indiana/Marengo" }, - { "cpt", 1, -18000, "America/Indiana/Petersburg" }, - { "cpt", 1, -18000, "America/Indiana/Vevay" }, - { "cpt", 1, -18000, "America/Indiana/Vincennes" }, - { "cpt", 1, -18000, "America/Indiana/Winamac" }, - { "cpt", 1, -18000, "America/Indianapolis" }, - { "cpt", 1, -18000, "America/Kentucky/Louisville" }, - { "cpt", 1, -18000, "America/Kentucky/Monticello" }, - { "cpt", 1, -18000, "America/Knox_IN" }, - { "cpt", 1, -18000, "America/Louisville" }, - { "cpt", 1, -18000, "America/Menominee" }, - { "cpt", 1, -18000, "America/Rainy_River" }, - { "cpt", 1, -18000, "America/Rankin_Inlet" }, - { "cpt", 1, -18000, "America/Winnipeg" }, - { "cpt", 1, -18000, "Canada/Central" }, - { "cpt", 1, -18000, "CST6CDT" }, - { "cpt", 1, -18000, "US/Central" }, - { "cpt", 1, -18000, "US/East-Indiana" }, - { "cpt", 1, -18000, "US/Indiana-Starke" }, - { "cst", 0, -21600, "America/Chicago" }, - { "cst", 0, -18000, "America/Havana" }, - { "cst", 0, -18000, "Cuba" }, - { "cst", 0, -21600, "America/Atikokan" }, - { "cst", 0, -21600, "America/Belize" }, - { "cst", 0, -21600, "America/Cambridge_Bay" }, - { "cst", 0, -21600, "America/Cancun" }, - { "cst", 0, -21600, "America/Chihuahua" }, - { "cst", 0, -21600, "America/Coral_Harbour" }, - { "cst", 0, -21600, "America/Costa_Rica" }, - { "cst", 0, -21600, "America/Detroit" }, - { "cst", 0, -21600, "America/El_Salvador" }, - { "cst", 0, -21600, "America/Fort_Wayne" }, - { "cst", 0, -21600, "America/Guatemala" }, - { "cst", 0, -21600, "America/Hermosillo" }, - { "cst", 0, -21600, "America/Indiana/Indianapolis" }, - { "cst", 0, -21600, "America/Indiana/Knox" }, - { "cst", 0, -21600, "America/Indiana/Marengo" }, - { "cst", 0, -21600, "America/Indiana/Petersburg" }, - { "cst", 0, -21600, "America/Indiana/Vevay" }, - { "cst", 0, -21600, "America/Indiana/Vincennes" }, - { "cst", 0, -21600, "America/Indiana/Winamac" }, - { "cst", 0, -21600, "America/Indianapolis" }, - { "cst", 0, -21600, "America/Iqaluit" }, - { "cst", 0, -21600, "America/Kentucky/Louisville" }, - { "cst", 0, -21600, "America/Kentucky/Monticello" }, - { "cst", 0, -21600, "America/Knox_IN" }, - { "cst", 0, -21600, "America/Louisville" }, - { "cst", 0, -21600, "America/Managua" }, - { "cst", 0, -21600, "America/Mazatlan" }, - { "cst", 0, -21600, "America/Menominee" }, - { "cst", 0, -21600, "America/Merida" }, - { "cst", 0, -21600, "America/Mexico_City" }, - { "cst", 0, -21600, "America/Monterrey" }, - { "cst", 0, -21600, "America/North_Dakota/Center" }, - { "cst", 0, -21600, "America/North_Dakota/New_Salem" }, - { "cst", 0, -21600, "America/Pangnirtung" }, - { "cst", 0, -21600, "America/Rainy_River" }, - { "cst", 0, -21600, "America/Rankin_Inlet" }, - { "cst", 0, -21600, "America/Regina" }, - { "cst", 0, -21600, "America/Swift_Current" }, - { "cst", 0, -21600, "America/Tegucigalpa" }, - { "cst", 0, -21600, "America/Winnipeg" }, - { "cst", 0, -21600, "Canada/Central" }, - { "cst", 0, -21600, "Canada/East-Saskatchewan" }, - { "cst", 0, -21600, "Canada/Saskatchewan" }, - { "cst", 0, -21600, "CST6CDT" }, - { "cst", 0, -21600, "Mexico/BajaSur" }, - { "cst", 0, -21600, "Mexico/General" }, - { "cst", 0, -21600, "US/Central" }, - { "cst", 0, -21600, "US/East-Indiana" }, - { "cst", 0, -21600, "US/Indiana-Starke" }, - { "cst", 0, -21600, "US/Michigan" }, - { "cst", 0, 28800, "Asia/Chongqing" }, - { "cst", 0, 28800, "Asia/Chungking" }, - { "cst", 0, 28800, "Asia/Harbin" }, - { "cst", 0, 28800, "Asia/Kashgar" }, - { "cst", 0, 28800, "Asia/Macao" }, - { "cst", 0, 28800, "Asia/Macau" }, - { "cst", 0, 28800, "Asia/Shanghai" }, - { "cst", 0, 28800, "Asia/Taipei" }, - { "cst", 0, 28800, "Asia/Urumqi" }, - { "cst", 0, 28800, "PRC" }, - { "cst", 0, 28800, "ROC" }, - { "cst", 0, 34200, "Asia/Jayapura" }, - { "cst", 0, 34200, "Australia/Adelaide" }, - { "cst", 0, 34200, "Australia/Broken_Hill" }, - { "cst", 0, 34200, "Australia/Darwin" }, - { "cst", 0, 34200, "Australia/North" }, - { "cst", 0, 34200, "Australia/South" }, - { "cst", 0, 34200, "Australia/Yancowinna" }, - { "cst", 1, 37800, "Australia/Adelaide" }, - { "cst", 1, 37800, "Australia/Broken_Hill" }, - { "cst", 1, 37800, "Australia/Darwin" }, - { "cst", 1, 37800, "Australia/North" }, - { "cst", 1, 37800, "Australia/South" }, - { "cst", 1, 37800, "Australia/Yancowinna" }, - { "cvst", 1, -3600, "Atlantic/Cape_Verde" }, - { "cvt", 0, -3600, "Atlantic/Cape_Verde" }, - { "cvt", 0, -7200, "Atlantic/Cape_Verde" }, - { "cwst", 0, 31500, "Australia/Eucla" }, - { "cwst", 1, 35100, "Australia/Eucla" }, - { "cwt", 1, -18000, "America/Chicago" }, - { "cwt", 1, -18000, "America/Atikokan" }, - { "cwt", 1, -18000, "America/Coral_Harbour" }, - { "cwt", 1, -18000, "America/Fort_Wayne" }, - { "cwt", 1, -18000, "America/Indiana/Indianapolis" }, - { "cwt", 1, -18000, "America/Indiana/Knox" }, - { "cwt", 1, -18000, "America/Indiana/Marengo" }, - { "cwt", 1, -18000, "America/Indiana/Petersburg" }, - { "cwt", 1, -18000, "America/Indiana/Vevay" }, - { "cwt", 1, -18000, "America/Indiana/Vincennes" }, - { "cwt", 1, -18000, "America/Indiana/Winamac" }, - { "cwt", 1, -18000, "America/Indianapolis" }, - { "cwt", 1, -18000, "America/Kentucky/Louisville" }, - { "cwt", 1, -18000, "America/Kentucky/Monticello" }, - { "cwt", 1, -18000, "America/Knox_IN" }, - { "cwt", 1, -18000, "America/Louisville" }, - { "cwt", 1, -18000, "America/Menominee" }, - { "cwt", 1, -18000, "America/Mexico_City" }, - { "cwt", 1, -18000, "America/Rainy_River" }, - { "cwt", 1, -18000, "America/Rankin_Inlet" }, - { "cwt", 1, -18000, "America/Winnipeg" }, - { "cwt", 1, -18000, "Canada/Central" }, - { "cwt", 1, -18000, "CST6CDT" }, - { "cwt", 1, -18000, "Mexico/General" }, - { "cwt", 1, -18000, "US/Central" }, - { "cwt", 1, -18000, "US/East-Indiana" }, - { "cwt", 1, -18000, "US/Indiana-Starke" }, - { "chst", 0, 36000, "Pacific/Guam" }, - { "chst", 0, 36000, "Pacific/Saipan" }, - { "dact", 0, 21600, "Asia/Dacca" }, - { "dact", 0, 21600, "Asia/Dhaka" }, - { "davt", 0, 25200, "Antarctica/Davis" }, - { "ddut", 0, 36000, "Antarctica/DumontDUrville" }, - { "dusst", 1, 21600, "Asia/Dushanbe" }, - { "dusst", 1, 25200, "Asia/Dushanbe" }, - { "dust", 0, 18000, "Asia/Dushanbe" }, - { "dust", 0, 21600, "Asia/Dushanbe" }, - { "easst", 1, -18000, "Chile/EasterIsland" }, - { "easst", 1, -21600, "Chile/EasterIsland" }, - { "easst", 1, -18000, "Pacific/Easter" }, - { "easst", 1, -21600, "Pacific/Easter" }, - { "east", 0, -21600, "Chile/EasterIsland" }, - { "east", 0, -25200, "Chile/EasterIsland" }, - { "east", 0, -21600, "Pacific/Easter" }, - { "east", 0, -25200, "Pacific/Easter" }, - { "east", 1, 14400, "Indian/Antananarivo" }, - { "eat", 0, 10800, "Africa/Khartoum" }, - { "eat", 0, 10800, "Africa/Addis_Ababa" }, - { "eat", 0, 10800, "Africa/Asmara" }, - { "eat", 0, 10800, "Africa/Asmera" }, - { "eat", 0, 10800, "Africa/Dar_es_Salaam" }, - { "eat", 0, 10800, "Africa/Djibouti" }, - { "eat", 0, 10800, "Africa/Kampala" }, - { "eat", 0, 10800, "Africa/Mogadishu" }, - { "eat", 0, 10800, "Africa/Nairobi" }, - { "eat", 0, 10800, "Indian/Antananarivo" }, - { "eat", 0, 10800, "Indian/Comoro" }, - { "eat", 0, 10800, "Indian/Mayotte" }, - { "ect", 0, -18000, "America/Guayaquil" }, - { "ect", 0, -18000, "Pacific/Galapagos" }, - { "eddt", 1, -10800, "America/Iqaluit" }, - { "edt", 1, -14400, "America/New_York" }, - { "edt", 1, -14400, "America/Cancun" }, - { "edt", 1, -14400, "America/Detroit" }, - { "edt", 1, -14400, "America/Fort_Wayne" }, - { "edt", 1, -14400, "America/Grand_Turk" }, - { "edt", 1, -14400, "America/Indiana/Indianapolis" }, - { "edt", 1, -14400, "America/Indiana/Marengo" }, - { "edt", 1, -14400, "America/Indiana/Vevay" }, - { "edt", 1, -14400, "America/Indiana/Vincennes" }, - { "edt", 1, -14400, "America/Indiana/Winamac" }, - { "edt", 1, -14400, "America/Indianapolis" }, - { "edt", 1, -14400, "America/Iqaluit" }, - { "edt", 1, -14400, "America/Jamaica" }, - { "edt", 1, -14400, "America/Kentucky/Louisville" }, - { "edt", 1, -14400, "America/Kentucky/Monticello" }, - { "edt", 1, -14400, "America/Louisville" }, - { "edt", 1, -14400, "America/Montreal" }, - { "edt", 1, -14400, "America/Nassau" }, - { "edt", 1, -14400, "America/Nipigon" }, - { "edt", 1, -14400, "America/Pangnirtung" }, - { "edt", 1, -14400, "America/Port-au-Prince" }, - { "edt", 1, -14400, "America/Santo_Domingo" }, - { "edt", 1, -14400, "America/Thunder_Bay" }, - { "edt", 1, -14400, "America/Toronto" }, - { "edt", 1, -14400, "Canada/Eastern" }, - { "edt", 1, -14400, "EST" }, - { "edt", 1, -14400, "EST5EDT" }, - { "edt", 1, -14400, "Jamaica" }, - { "edt", 1, -14400, "US/East-Indiana" }, - { "edt", 1, -14400, "US/Eastern" }, - { "edt", 1, -14400, "US/Michigan" }, - { "eest", 1, 10800, "Europe/Helsinki" }, - { "eest", 1, 10800, "Africa/Cairo" }, - { "eest", 1, 10800, "Asia/Amman" }, - { "eest", 1, 10800, "Asia/Beirut" }, - { "eest", 1, 10800, "Asia/Damascus" }, - { "eest", 1, 10800, "Asia/Gaza" }, - { "eest", 1, 10800, "Asia/Istanbul" }, - { "eest", 1, 10800, "Asia/Nicosia" }, - { "eest", 1, 10800, "EET" }, - { "eest", 1, 10800, "Egypt" }, - { "eest", 1, 10800, "Europe/Athens" }, - { "eest", 1, 10800, "Europe/Bucharest" }, - { "eest", 1, 10800, "Europe/Chisinau" }, - { "eest", 1, 10800, "Europe/Istanbul" }, - { "eest", 1, 10800, "Europe/Kaliningrad" }, - { "eest", 1, 10800, "Europe/Kiev" }, - { "eest", 1, 10800, "Europe/Mariehamn" }, - { "eest", 1, 10800, "Europe/Minsk" }, - { "eest", 1, 10800, "Europe/Moscow" }, - { "eest", 1, 10800, "Europe/Nicosia" }, - { "eest", 1, 10800, "Europe/Riga" }, - { "eest", 1, 10800, "Europe/Simferopol" }, - { "eest", 1, 10800, "Europe/Sofia" }, - { "eest", 1, 10800, "Europe/Tallinn" }, - { "eest", 1, 10800, "Europe/Tiraspol" }, - { "eest", 1, 10800, "Europe/Uzhgorod" }, - { "eest", 1, 10800, "Europe/Vilnius" }, - { "eest", 1, 10800, "Europe/Warsaw" }, - { "eest", 1, 10800, "Europe/Zaporozhye" }, - { "eest", 1, 10800, "Poland" }, - { "eest", 1, 10800, "Turkey" }, - { "eest", 1, 10800, "W-SU" }, - { "eet", 0, 7200, "Europe/Helsinki" }, - { "eet", 1, 10800, "Asia/Gaza" }, - { "eet", 0, 7200, "Africa/Cairo" }, - { "eet", 0, 7200, "Africa/Tripoli" }, - { "eet", 0, 7200, "Asia/Amman" }, - { "eet", 0, 7200, "Asia/Beirut" }, - { "eet", 0, 7200, "Asia/Damascus" }, - { "eet", 0, 7200, "Asia/Gaza" }, - { "eet", 0, 7200, "Asia/Istanbul" }, - { "eet", 0, 7200, "Asia/Nicosia" }, - { "eet", 0, 7200, "EET" }, - { "eet", 0, 7200, "Egypt" }, - { "eet", 0, 7200, "Europe/Athens" }, - { "eet", 0, 7200, "Europe/Bucharest" }, - { "eet", 0, 7200, "Europe/Chisinau" }, - { "eet", 0, 7200, "Europe/Istanbul" }, - { "eet", 0, 7200, "Europe/Kaliningrad" }, - { "eet", 0, 7200, "Europe/Kiev" }, - { "eet", 0, 7200, "Europe/Mariehamn" }, - { "eet", 0, 7200, "Europe/Minsk" }, - { "eet", 0, 7200, "Europe/Moscow" }, - { "eet", 0, 7200, "Europe/Nicosia" }, - { "eet", 0, 7200, "Europe/Riga" }, - { "eet", 0, 7200, "Europe/Simferopol" }, - { "eet", 0, 7200, "Europe/Sofia" }, - { "eet", 0, 7200, "Europe/Tallinn" }, - { "eet", 0, 7200, "Europe/Tiraspol" }, - { "eet", 0, 7200, "Europe/Uzhgorod" }, - { "eet", 0, 7200, "Europe/Vilnius" }, - { "eet", 0, 7200, "Europe/Warsaw" }, - { "eet", 0, 7200, "Europe/Zaporozhye" }, - { "eet", 0, 7200, "Libya" }, - { "eet", 0, 7200, "Poland" }, - { "eet", 0, 7200, "Turkey" }, - { "eet", 0, 7200, "W-SU" }, - { "egst", 1, 0, "America/Scoresbysund" }, - { "egt", 0, -3600, "America/Scoresbysund" }, - { "ehdt", 1, -16200, "America/Santo_Domingo" }, - { "eit", 0, 32400, "Asia/Jayapura" }, - { "ept", 1, -14400, "America/New_York" }, - { "ept", 1, -14400, "America/Detroit" }, - { "ept", 1, -14400, "America/Iqaluit" }, - { "ept", 1, -14400, "America/Montreal" }, - { "ept", 1, -14400, "America/Nipigon" }, - { "ept", 1, -14400, "America/Thunder_Bay" }, - { "ept", 1, -14400, "America/Toronto" }, - { "ept", 1, -14400, "Canada/Eastern" }, - { "ept", 1, -14400, "EST" }, - { "ept", 1, -14400, "EST5EDT" }, - { "ept", 1, -14400, "US/Eastern" }, - { "ept", 1, -14400, "US/Michigan" }, - { "est", 0, -18000, "America/New_York" }, - { "est", 0, -18000, "America/Antigua" }, - { "est", 0, -18000, "America/Atikokan" }, - { "est", 0, -18000, "America/Cambridge_Bay" }, - { "est", 0, -18000, "America/Cancun" }, - { "est", 0, -18000, "America/Cayman" }, - { "est", 0, -18000, "America/Chicago" }, - { "est", 0, -18000, "America/Coral_Harbour" }, - { "est", 0, -18000, "America/Detroit" }, - { "est", 0, -18000, "America/Fort_Wayne" }, - { "est", 0, -18000, "America/Grand_Turk" }, - { "est", 0, -18000, "America/Indiana/Indianapolis" }, - { "est", 0, -18000, "America/Indiana/Knox" }, - { "est", 0, -18000, "America/Indiana/Marengo" }, - { "est", 0, -18000, "America/Indiana/Petersburg" }, - { "est", 0, -18000, "America/Indiana/Vevay" }, - { "est", 0, -18000, "America/Indiana/Vincennes" }, - { "est", 0, -18000, "America/Indiana/Winamac" }, - { "est", 0, -18000, "America/Indianapolis" }, - { "est", 0, -18000, "America/Iqaluit" }, - { "est", 0, -18000, "America/Jamaica" }, - { "est", 0, -18000, "America/Kentucky/Louisville" }, - { "est", 0, -18000, "America/Kentucky/Monticello" }, - { "est", 0, -18000, "America/Knox_IN" }, - { "est", 0, -18000, "America/Louisville" }, - { "est", 0, -18000, "America/Managua" }, - { "est", 0, -18000, "America/Menominee" }, - { "est", 0, -18000, "America/Merida" }, - { "est", 0, -18000, "America/Montreal" }, - { "est", 0, -18000, "America/Nassau" }, - { "est", 0, -18000, "America/Nipigon" }, - { "est", 0, -18000, "America/Panama" }, - { "est", 0, -18000, "America/Pangnirtung" }, - { "est", 0, -18000, "America/Port-au-Prince" }, - { "est", 0, -18000, "America/Rankin_Inlet" }, - { "est", 0, -18000, "America/Santo_Domingo" }, - { "est", 0, -18000, "America/Thunder_Bay" }, - { "est", 0, -18000, "America/Toronto" }, - { "est", 0, -18000, "Canada/Eastern" }, - { "est", 0, -18000, "EST" }, - { "est", 0, -18000, "EST5EDT" }, - { "est", 0, -18000, "Jamaica" }, - { "est", 0, -18000, "US/Central" }, - { "est", 0, -18000, "US/East-Indiana" }, - { "est", 0, -18000, "US/Eastern" }, - { "est", 0, -18000, "US/Indiana-Starke" }, - { "est", 0, -18000, "US/Michigan" }, - { "est", 0, 36000, "Australia/ACT" }, - { "est", 0, 36000, "Australia/Brisbane" }, - { "est", 0, 36000, "Australia/Canberra" }, - { "est", 0, 36000, "Australia/Currie" }, - { "est", 0, 36000, "Australia/Hobart" }, - { "est", 0, 36000, "Australia/Lindeman" }, - { "est", 0, 36000, "Australia/Melbourne" }, - { "est", 0, 36000, "Australia/NSW" }, - { "est", 0, 36000, "Australia/Queensland" }, - { "est", 0, 36000, "Australia/Sydney" }, - { "est", 0, 36000, "Australia/Tasmania" }, - { "est", 0, 36000, "Australia/Victoria" }, - { "est", 1, 39600, "Australia/Melbourne" }, - { "est", 1, 39600, "Australia/ACT" }, - { "est", 1, 39600, "Australia/Brisbane" }, - { "est", 1, 39600, "Australia/Canberra" }, - { "est", 1, 39600, "Australia/Currie" }, - { "est", 1, 39600, "Australia/Hobart" }, - { "est", 1, 39600, "Australia/Lindeman" }, - { "est", 1, 39600, "Australia/NSW" }, - { "est", 1, 39600, "Australia/Queensland" }, - { "est", 1, 39600, "Australia/Sydney" }, - { "est", 1, 39600, "Australia/Tasmania" }, - { "est", 1, 39600, "Australia/Victoria" }, - { "ewt", 1, -14400, "America/New_York" }, - { "ewt", 1, -14400, "America/Detroit" }, - { "ewt", 1, -14400, "America/Iqaluit" }, - { "ewt", 1, -14400, "America/Montreal" }, - { "ewt", 1, -14400, "America/Nipigon" }, - { "ewt", 1, -14400, "America/Thunder_Bay" }, - { "ewt", 1, -14400, "America/Toronto" }, - { "ewt", 1, -14400, "Canada/Eastern" }, - { "ewt", 1, -14400, "EST" }, - { "ewt", 1, -14400, "EST5EDT" }, - { "ewt", 1, -14400, "US/Eastern" }, - { "ewt", 1, -14400, "US/Michigan" }, - { "fjst", 1, 46800, "Pacific/Fiji" }, - { "fjt", 0, 43200, "Pacific/Fiji" }, - { "fkst", 1, -10800, "Atlantic/Stanley" }, - { "fkst", 1, -7200, "Atlantic/Stanley" }, - { "fkt", 0, -10800, "Atlantic/Stanley" }, - { "fkt", 0, -14400, "Atlantic/Stanley" }, - { "fnst", 1, -3600, "America/Noronha" }, - { "fnst", 1, -3600, "Brazil/DeNoronha" }, - { "fnt", 0, -7200, "America/Noronha" }, - { "fnt", 0, -7200, "Brazil/DeNoronha" }, - { "fort", 0, 14400, "Asia/Aqtau" }, - { "fort", 0, 18000, "Asia/Aqtau" }, - { "frust", 1, 21600, "Asia/Bishkek" }, - { "frust", 1, 25200, "Asia/Bishkek" }, - { "frut", 0, 18000, "Asia/Bishkek" }, - { "frut", 0, 21600, "Asia/Bishkek" }, - { "galt", 0, -21600, "Pacific/Galapagos" }, - { "gamt", 0, -32400, "Pacific/Gambier" }, - { "gbgt", 0, -13500, "America/Guyana" }, - { "gest", 1, 14400, "Asia/Tbilisi" }, - { "gest", 1, 18000, "Asia/Tbilisi" }, - { "get", 0, 10800, "Asia/Tbilisi" }, - { "get", 0, 14400, "Asia/Tbilisi" }, - { "gft", 0, -10800, "America/Cayenne" }, - { "gft", 0, -14400, "America/Cayenne" }, - { "ghst", 1, 1200, "Africa/Accra" }, - { "gmt", 0, 0, "Africa/Abidjan" }, - { "gmt", 0, 0, "Africa/Accra" }, - { "gmt", 0, 0, "Africa/Bamako" }, - { "gmt", 0, 0, "Africa/Banjul" }, - { "gmt", 0, 0, "Africa/Bissau" }, - { "gmt", 0, 0, "Africa/Conakry" }, - { "gmt", 0, 0, "Africa/Dakar" }, - { "gmt", 0, 0, "Africa/Freetown" }, - { "gmt", 0, 0, "Africa/Malabo" }, - { "gmt", 0, 0, "Africa/Monrovia" }, - { "gmt", 0, 0, "Africa/Niamey" }, - { "gmt", 0, 0, "Africa/Nouakchott" }, - { "gmt", 0, 0, "Africa/Ouagadougou" }, - { "gmt", 0, 0, "Africa/Porto-Novo" }, - { "gmt", 0, 0, "Africa/Sao_Tome" }, - { "gmt", 0, 0, "Africa/Timbuktu" }, - { "gmt", 0, 0, "America/Danmarkshavn" }, - { "gmt", 0, 0, "Atlantic/Reykjavik" }, - { "gmt", 0, 0, "Atlantic/St_Helena" }, - { "gmt", 0, 0, "Eire" }, - { "gmt", 0, 0, "Europe/Belfast" }, - { "gmt", 0, 0, "Europe/Dublin" }, - { "gmt", 0, 0, "Europe/Gibraltar" }, - { "gmt", 0, 0, "Europe/Guernsey" }, - { "gmt", 0, 0, "Europe/Isle_of_Man" }, - { "gmt", 0, 0, "Europe/Jersey" }, - { "gmt", 0, 0, "Europe/London" }, - { "gmt", 0, 0, "GB" }, - { "gmt", 0, 0, "GB-Eire" }, - { "gmt", 0, 0, "Iceland" }, - { "gst", 0, 14400, "Asia/Dubai" }, - { "gst", 0, 14400, "Asia/Bahrain" }, - { "gst", 0, 14400, "Asia/Muscat" }, - { "gst", 0, 14400, "Asia/Qatar" }, - { "gyt", 0, -10800, "America/Guyana" }, - { "gyt", 0, -13500, "America/Guyana" }, - { "gyt", 0, -14400, "America/Guyana" }, - { "hadt", 1, -32400, "America/Adak" }, - { "hadt", 1, -32400, "America/Atka" }, - { "hadt", 1, -32400, "US/Aleutian" }, - { "hast", 0, -36000, "America/Adak" }, - { "hast", 0, -36000, "America/Atka" }, - { "hast", 0, -36000, "US/Aleutian" }, - { "hdt", 1, -34200, "Pacific/Honolulu" }, - { "hdt", 1, -34200, "HST" }, - { "hdt", 1, -34200, "US/Hawaii" }, - { "hkst", 1, 32400, "Asia/Hong_Kong" }, - { "hkst", 1, 32400, "Hongkong" }, - { "hkt", 0, 28800, "Asia/Hong_Kong" }, - { "hkt", 0, 28800, "Hongkong" }, - { "hovst", 1, 28800, "Asia/Hovd" }, - { "hovt", 0, 21600, "Asia/Hovd" }, - { "hovt", 0, 25200, "Asia/Hovd" }, - { "hpt", 1, -34200, "Pacific/Honolulu" }, - { "hpt", 1, -34200, "HST" }, - { "hpt", 1, -34200, "US/Hawaii" }, - { "hst", 0, -36000, "Pacific/Honolulu" }, - { "hst", 0, -37800, "Pacific/Honolulu" }, - { "hst", 0, -36000, "HST" }, - { "hst", 0, -36000, "US/Hawaii" }, - { "hst", 0, -37800, "HST" }, - { "hst", 0, -37800, "US/Hawaii" }, - { "hwt", 1, -34200, "Pacific/Honolulu" }, - { "hwt", 1, -34200, "HST" }, - { "hwt", 1, -34200, "US/Hawaii" }, - { "ict", 0, 25200, "Asia/Bangkok" }, - { "ict", 0, 25200, "Asia/Phnom_Penh" }, - { "ict", 0, 25200, "Asia/Saigon" }, - { "ict", 0, 25200, "Asia/Vientiane" }, - { "ict", 0, 28800, "Asia/Phnom_Penh" }, - { "ict", 0, 28800, "Asia/Saigon" }, - { "ict", 0, 28800, "Asia/Vientiane" }, - { "iddt", 1, 14400, "Asia/Jerusalem" }, - { "iddt", 1, 14400, "Asia/Tel_Aviv" }, - { "iddt", 1, 14400, "Israel" }, - { "idt", 1, 10800, "Asia/Jerusalem" }, - { "idt", 1, 10800, "Asia/Gaza" }, - { "idt", 1, 10800, "Asia/Tel_Aviv" }, - { "idt", 1, 10800, "Israel" }, - { "ihst", 1, 21600, "Asia/Colombo" }, - { "iot", 0, 18000, "Indian/Chagos" }, - { "iot", 0, 21600, "Indian/Chagos" }, - { "irdt", 1, 16200, "Asia/Tehran" }, - { "irdt", 1, 18000, "Asia/Tehran" }, - { "irdt", 1, 16200, "Iran" }, - { "irdt", 1, 18000, "Iran" }, - { "irkst", 1, 28800, "Asia/Irkutsk" }, - { "irkst", 1, 32400, "Asia/Irkutsk" }, - { "irkt", 0, 25200, "Asia/Irkutsk" }, - { "irkt", 0, 28800, "Asia/Irkutsk" }, - { "irst", 0, 12600, "Asia/Tehran" }, - { "irst", 0, 14400, "Asia/Tehran" }, - { "irst", 0, 12600, "Iran" }, - { "irst", 0, 14400, "Iran" }, - { "isst", 1, 0, "Atlantic/Reykjavik" }, - { "isst", 1, 0, "Iceland" }, - { "ist", 0, 7200, "Asia/Jerusalem" }, - { "ist", 0, -3600, "Atlantic/Reykjavik" }, - { "ist", 0, -3600, "Iceland" }, - { "ist", 0, 19800, "Asia/Calcutta" }, - { "ist", 0, 19800, "Asia/Colombo" }, - { "ist", 0, 19800, "Asia/Dacca" }, - { "ist", 0, 19800, "Asia/Dhaka" }, - { "ist", 0, 19800, "Asia/Karachi" }, - { "ist", 0, 19800, "Asia/Katmandu" }, - { "ist", 0, 19800, "Asia/Thimbu" }, - { "ist", 0, 19800, "Asia/Thimphu" }, - { "ist", 1, 2079, "Eire" }, - { "ist", 1, 2079, "Europe/Dublin" }, - { "ist", 1, 23400, "Asia/Calcutta" }, - { "ist", 1, 23400, "Asia/Colombo" }, - { "ist", 1, 23400, "Asia/Karachi" }, - { "ist", 0, 3600, "Eire" }, - { "ist", 0, 3600, "Europe/Dublin" }, - { "ist", 1, 3600, "Eire" }, - { "ist", 1, 3600, "Europe/Dublin" }, - { "ist", 0, 7200, "Asia/Gaza" }, - { "ist", 0, 7200, "Asia/Tel_Aviv" }, - { "ist", 0, 7200, "Israel" }, - { "javt", 0, 26400, "Asia/Jakarta" }, - { "jdt", 1, 36000, "Asia/Tokyo" }, - { "jdt", 1, 36000, "Japan" }, - { "jst", 0, 32400, "Asia/Tokyo" }, - { "jst", 0, 32400, "Asia/Dili" }, - { "jst", 0, 32400, "Asia/Jakarta" }, - { "jst", 0, 32400, "Asia/Kuala_Lumpur" }, - { "jst", 0, 32400, "Asia/Kuching" }, - { "jst", 0, 32400, "Asia/Makassar" }, - { "jst", 0, 32400, "Asia/Manila" }, - { "jst", 0, 32400, "Asia/Pontianak" }, - { "jst", 0, 32400, "Asia/Rangoon" }, - { "jst", 0, 32400, "Asia/Sakhalin" }, - { "jst", 0, 32400, "Asia/Singapore" }, - { "jst", 0, 32400, "Asia/Ujung_Pandang" }, - { "jst", 0, 32400, "Japan" }, - { "jst", 0, 32400, "Pacific/Nauru" }, - { "jst", 0, 32400, "Singapore" }, - { "kart", 0, 18000, "Asia/Karachi" }, - { "kast", 0, 18000, "Asia/Kashgar" }, - { "kast", 0, 19800, "Asia/Kashgar" }, - { "kdt", 1, 32400, "Asia/Seoul" }, - { "kdt", 1, 36000, "Asia/Seoul" }, - { "kdt", 1, 32400, "ROK" }, - { "kdt", 1, 36000, "ROK" }, - { "kgst", 1, 21600, "Asia/Bishkek" }, - { "kgt", 0, 18000, "Asia/Bishkek" }, - { "kgt", 0, 21600, "Asia/Bishkek" }, - { "kizst", 1, 21600, "Asia/Qyzylorda" }, - { "kizt", 0, 14400, "Asia/Qyzylorda" }, - { "kizt", 0, 18000, "Asia/Qyzylorda" }, - { "kizt", 0, 21600, "Asia/Qyzylorda" }, - { "kmt", 0, 5736, "Europe/Vilnius" }, - { "kost", 0, 39600, "Pacific/Kosrae" }, - { "kost", 0, 43200, "Pacific/Kosrae" }, - { "krast", 1, 25200, "Asia/Krasnoyarsk" }, - { "krast", 1, 28800, "Asia/Krasnoyarsk" }, - { "krat", 0, 21600, "Asia/Krasnoyarsk" }, - { "krat", 0, 25200, "Asia/Krasnoyarsk" }, - { "kst", 0, 28800, "Asia/Seoul" }, - { "kst", 0, 30600, "Asia/Seoul" }, - { "kst", 0, 32400, "Asia/Seoul" }, - { "kst", 0, 28800, "Asia/Pyongyang" }, - { "kst", 0, 28800, "ROK" }, - { "kst", 0, 30600, "Asia/Pyongyang" }, - { "kst", 0, 30600, "ROK" }, - { "kst", 0, 32400, "Asia/Pyongyang" }, - { "kst", 0, 32400, "ROK" }, - { "kuyst", 1, 10800, "Europe/Samara" }, - { "kuyst", 1, 14400, "Europe/Samara" }, - { "kuyst", 1, 18000, "Europe/Samara" }, - { "kuyt", 0, 10800, "Europe/Samara" }, - { "kuyt", 0, 14400, "Europe/Samara" }, - { "kwat", 0, -43200, "Pacific/Kwajalein" }, - { "kwat", 0, -43200, "Kwajalein" }, - { "lhst", 0, 37800, "Australia/Lord_Howe" }, - { "lhst", 1, 39600, "Australia/Lord_Howe" }, - { "lhst", 1, 41400, "Australia/Lord_Howe" }, - { "lhst", 0, 37800, "Australia/LHI" }, - { "lhst", 1, 39600, "Australia/LHI" }, - { "lhst", 1, 41400, "Australia/LHI" }, - { "lint", 0, -36000, "Pacific/Kiritimati" }, - { "lint", 0, 50400, "Pacific/Kiritimati" }, - { "lkt", 0, 21600, "Asia/Colombo" }, - { "lkt", 0, 23400, "Asia/Colombo" }, - { "lont", 0, 25200, "Asia/Chongqing" }, - { "lont", 0, 25200, "Asia/Chungking" }, - { "lrt", 0, -2670, "Africa/Monrovia" }, - { "lst", 1, 9384, "Europe/Riga" }, - { "madmt", 1, 3600, "Atlantic/Madeira" }, - { "madst", 1, 0, "Atlantic/Madeira" }, - { "madt", 0, -3600, "Atlantic/Madeira" }, - { "magst", 1, 39600, "Asia/Magadan" }, - { "magst", 1, 43200, "Asia/Magadan" }, - { "magt", 0, 36000, "Asia/Magadan" }, - { "magt", 0, 39600, "Asia/Magadan" }, - { "malst", 1, 26400, "Asia/Singapore" }, - { "malst", 1, 26400, "Asia/Kuala_Lumpur" }, - { "malst", 1, 26400, "Singapore" }, - { "malt", 0, 25200, "Asia/Singapore" }, - { "malt", 0, 26400, "Asia/Singapore" }, - { "malt", 0, 27000, "Asia/Singapore" }, - { "malt", 0, 25200, "Asia/Kuala_Lumpur" }, - { "malt", 0, 25200, "Singapore" }, - { "malt", 0, 26400, "Asia/Kuala_Lumpur" }, - { "malt", 0, 26400, "Singapore" }, - { "malt", 0, 27000, "Asia/Kuala_Lumpur" }, - { "malt", 0, 27000, "Singapore" }, - { "mart", 0, -34200, "Pacific/Marquesas" }, - { "mawt", 0, 21600, "Antarctica/Mawson" }, - { "mddt", 1, -18000, "America/Cambridge_Bay" }, - { "mddt", 1, -18000, "America/Yellowknife" }, - { "mdst", 1, 16248, "Europe/Moscow" }, - { "mdst", 1, 16248, "W-SU" }, - { "mdt", 1, -21600, "America/Denver" }, - { "mdt", 1, -21600, "America/Boise" }, - { "mdt", 1, -21600, "America/Cambridge_Bay" }, - { "mdt", 1, -21600, "America/Chihuahua" }, - { "mdt", 1, -21600, "America/Edmonton" }, - { "mdt", 1, -21600, "America/Hermosillo" }, - { "mdt", 1, -21600, "America/Inuvik" }, - { "mdt", 1, -21600, "America/Mazatlan" }, - { "mdt", 1, -21600, "America/North_Dakota/Center" }, - { "mdt", 1, -21600, "America/North_Dakota/New_Salem" }, - { "mdt", 1, -21600, "America/Phoenix" }, - { "mdt", 1, -21600, "America/Regina" }, - { "mdt", 1, -21600, "America/Shiprock" }, - { "mdt", 1, -21600, "America/Swift_Current" }, - { "mdt", 1, -21600, "America/Yellowknife" }, - { "mdt", 1, -21600, "Canada/East-Saskatchewan" }, - { "mdt", 1, -21600, "Canada/Mountain" }, - { "mdt", 1, -21600, "Canada/Saskatchewan" }, - { "mdt", 1, -21600, "Mexico/BajaSur" }, - { "mdt", 1, -21600, "MST" }, - { "mdt", 1, -21600, "MST7MDT" }, - { "mdt", 1, -21600, "Navajo" }, - { "mdt", 1, -21600, "US/Arizona" }, - { "mdt", 1, -21600, "US/Mountain" }, - { "mest", 1, 7200, "MET" }, - { "met", 0, 3600, "MET" }, - { "mht", 0, 43200, "Pacific/Kwajalein" }, - { "mht", 0, 43200, "Kwajalein" }, - { "mht", 0, 43200, "Pacific/Majuro" }, - { "mmt", 0, 9048, "Europe/Moscow" }, - { "mmt", 0, 23400, "Asia/Rangoon" }, - { "mmt", 0, 28656, "Asia/Makassar" }, - { "mmt", 0, 28656, "Asia/Ujung_Pandang" }, - { "mmt", 0, 9048, "W-SU" }, - { "most", 1, 32400, "Asia/Macao" }, - { "most", 1, 32400, "Asia/Macau" }, - { "mot", 0, 28800, "Asia/Macao" }, - { "mot", 0, 28800, "Asia/Macau" }, - { "mpt", 1, -21600, "America/Denver" }, - { "mpt", 1, -21600, "America/Boise" }, - { "mpt", 1, -21600, "America/Cambridge_Bay" }, - { "mpt", 1, -21600, "America/Edmonton" }, - { "mpt", 1, -21600, "America/North_Dakota/Center" }, - { "mpt", 1, -21600, "America/North_Dakota/New_Salem" }, - { "mpt", 1, -21600, "America/Regina" }, - { "mpt", 1, -21600, "America/Shiprock" }, - { "mpt", 1, -21600, "America/Swift_Current" }, - { "mpt", 1, -21600, "America/Yellowknife" }, - { "mpt", 1, -21600, "Canada/East-Saskatchewan" }, - { "mpt", 1, -21600, "Canada/Mountain" }, - { "mpt", 1, -21600, "Canada/Saskatchewan" }, - { "mpt", 1, -21600, "MST" }, - { "mpt", 1, -21600, "MST7MDT" }, - { "mpt", 1, -21600, "Navajo" }, - { "mpt", 1, -21600, "US/Mountain" }, - { "mpt", 0, 36000, "Pacific/Saipan" }, - { "msd", 1, 14400, "Europe/Moscow" }, - { "msd", 1, 18000, "Europe/Moscow" }, - { "msd", 1, 14400, "Europe/Chisinau" }, - { "msd", 1, 14400, "Europe/Kaliningrad" }, - { "msd", 1, 14400, "Europe/Kiev" }, - { "msd", 1, 14400, "Europe/Minsk" }, - { "msd", 1, 14400, "Europe/Riga" }, - { "msd", 1, 14400, "Europe/Simferopol" }, - { "msd", 1, 14400, "Europe/Tallinn" }, - { "msd", 1, 14400, "Europe/Tiraspol" }, - { "msd", 1, 14400, "Europe/Uzhgorod" }, - { "msd", 1, 14400, "Europe/Vilnius" }, - { "msd", 1, 14400, "Europe/Zaporozhye" }, - { "msd", 1, 14400, "W-SU" }, - { "msd", 1, 18000, "W-SU" }, - { "msk", 0, 10800, "Europe/Moscow" }, - { "msk", 0, 10800, "Europe/Chisinau" }, - { "msk", 0, 10800, "Europe/Kaliningrad" }, - { "msk", 0, 10800, "Europe/Kiev" }, - { "msk", 0, 10800, "Europe/Minsk" }, - { "msk", 0, 10800, "Europe/Riga" }, - { "msk", 0, 10800, "Europe/Simferopol" }, - { "msk", 0, 10800, "Europe/Tallinn" }, - { "msk", 0, 10800, "Europe/Tiraspol" }, - { "msk", 0, 10800, "Europe/Uzhgorod" }, - { "msk", 0, 10800, "Europe/Vilnius" }, - { "msk", 0, 10800, "Europe/Zaporozhye" }, - { "msk", 0, 10800, "W-SU" }, - { "mst", 0, -25200, "America/Denver" }, - { "mst", 0, -25200, "America/Boise" }, - { "mst", 0, -25200, "America/Cambridge_Bay" }, - { "mst", 0, -25200, "America/Chihuahua" }, - { "mst", 0, -25200, "America/Dawson_Creek" }, - { "mst", 0, -25200, "America/Edmonton" }, - { "mst", 0, -25200, "America/Ensenada" }, - { "mst", 0, -25200, "America/Hermosillo" }, - { "mst", 0, -25200, "America/Inuvik" }, - { "mst", 0, -25200, "America/Mazatlan" }, - { "mst", 0, -25200, "America/Mexico_City" }, - { "mst", 0, -25200, "America/North_Dakota/Center" }, - { "mst", 0, -25200, "America/North_Dakota/New_Salem" }, - { "mst", 0, -25200, "America/Phoenix" }, - { "mst", 0, -25200, "America/Regina" }, - { "mst", 0, -25200, "America/Shiprock" }, - { "mst", 0, -25200, "America/Swift_Current" }, - { "mst", 0, -25200, "America/Tijuana" }, - { "mst", 0, -25200, "America/Yellowknife" }, - { "mst", 0, -25200, "Canada/East-Saskatchewan" }, - { "mst", 0, -25200, "Canada/Mountain" }, - { "mst", 0, -25200, "Canada/Saskatchewan" }, - { "mst", 0, -25200, "Mexico/BajaNorte" }, - { "mst", 0, -25200, "Mexico/BajaSur" }, - { "mst", 0, -25200, "Mexico/General" }, - { "mst", 0, -25200, "MST" }, - { "mst", 0, -25200, "MST7MDT" }, - { "mst", 0, -25200, "Navajo" }, - { "mst", 0, -25200, "US/Arizona" }, - { "mst", 0, -25200, "US/Mountain" }, - { "mst", 1, 12648, "Europe/Moscow" }, - { "mst", 1, 12648, "W-SU" }, - { "mut", 0, 14400, "Indian/Mauritius" }, - { "mvt", 0, 18000, "Indian/Maldives" }, - { "mwt", 1, -21600, "America/Denver" }, - { "mwt", 1, -21600, "America/Boise" }, - { "mwt", 1, -21600, "America/Cambridge_Bay" }, - { "mwt", 1, -21600, "America/Edmonton" }, - { "mwt", 1, -21600, "America/North_Dakota/Center" }, - { "mwt", 1, -21600, "America/North_Dakota/New_Salem" }, - { "mwt", 1, -21600, "America/Phoenix" }, - { "mwt", 1, -21600, "America/Regina" }, - { "mwt", 1, -21600, "America/Shiprock" }, - { "mwt", 1, -21600, "America/Swift_Current" }, - { "mwt", 1, -21600, "America/Yellowknife" }, - { "mwt", 1, -21600, "Canada/East-Saskatchewan" }, - { "mwt", 1, -21600, "Canada/Mountain" }, - { "mwt", 1, -21600, "Canada/Saskatchewan" }, - { "mwt", 1, -21600, "MST" }, - { "mwt", 1, -21600, "MST7MDT" }, - { "mwt", 1, -21600, "Navajo" }, - { "mwt", 1, -21600, "US/Arizona" }, - { "mwt", 1, -21600, "US/Mountain" }, - { "myt", 0, 28800, "Asia/Kuala_Lumpur" }, - { "myt", 0, 28800, "Asia/Kuching" }, - { "ncst", 1, 43200, "Pacific/Noumea" }, - { "nct", 0, 39600, "Pacific/Noumea" }, - { "nddt", 1, -5400, "America/St_Johns" }, - { "nddt", 1, -5400, "Canada/Newfoundland" }, - { "ndt", 1, -9000, "America/St_Johns" }, - { "ndt", 1, -9052, "America/St_Johns" }, - { "ndt", 1, -36000, "Pacific/Midway" }, - { "ndt", 1, -9000, "America/Goose_Bay" }, - { "ndt", 1, -9000, "Canada/Newfoundland" }, - { "ndt", 1, -9052, "America/Goose_Bay" }, - { "ndt", 1, -9052, "Canada/Newfoundland" }, - { "negt", 0, -12600, "America/Paramaribo" }, - { "nest", 1, 4800, "Europe/Amsterdam" }, - { "net", 0, 1200, "Europe/Amsterdam" }, - { "nft", 0, 41400, "Pacific/Norfolk" }, - { "novst", 1, 25200, "Asia/Novosibirsk" }, - { "novst", 1, 28800, "Asia/Novosibirsk" }, - { "novt", 0, 21600, "Asia/Novosibirsk" }, - { "novt", 0, 25200, "Asia/Novosibirsk" }, - { "npt", 1, -9000, "America/St_Johns" }, - { "npt", 1, -36000, "America/Adak" }, - { "npt", 1, -36000, "America/Atka" }, - { "npt", 1, -36000, "America/Nome" }, - { "npt", 1, -36000, "US/Aleutian" }, - { "npt", 1, -9000, "America/Goose_Bay" }, - { "npt", 1, -9000, "Canada/Newfoundland" }, - { "npt", 0, 20700, "Asia/Katmandu" }, - { "nrt", 0, 41400, "Pacific/Nauru" }, - { "nrt", 0, 43200, "Pacific/Nauru" }, - { "nst", 0, -12600, "America/St_Johns" }, - { "nst", 0, -12652, "America/St_Johns" }, - { "nst", 0, -12600, "America/Goose_Bay" }, - { "nst", 0, -12600, "Canada/Newfoundland" }, - { "nst", 0, -12652, "America/Goose_Bay" }, - { "nst", 0, -12652, "Canada/Newfoundland" }, - { "nst", 0, -39600, "America/Adak" }, - { "nst", 0, -39600, "America/Atka" }, - { "nst", 0, -39600, "America/Nome" }, - { "nst", 0, -39600, "Pacific/Midway" }, - { "nst", 0, -39600, "Pacific/Pago_Pago" }, - { "nst", 0, -39600, "Pacific/Samoa" }, - { "nst", 0, -39600, "US/Aleutian" }, - { "nst", 0, -39600, "US/Samoa" }, - { "nst", 1, 4772, "Europe/Amsterdam" }, - { "nut", 0, -39600, "Pacific/Niue" }, - { "nut", 0, -41400, "Pacific/Niue" }, - { "nwt", 1, -9000, "America/St_Johns" }, - { "nwt", 1, -36000, "America/Adak" }, - { "nwt", 1, -36000, "America/Atka" }, - { "nwt", 1, -36000, "America/Nome" }, - { "nwt", 1, -36000, "US/Aleutian" }, - { "nwt", 1, -9000, "America/Goose_Bay" }, - { "nwt", 1, -9000, "Canada/Newfoundland" }, - { "nzdt", 1, 46800, "Pacific/Auckland" }, - { "nzdt", 1, 46800, "Antarctica/McMurdo" }, - { "nzdt", 1, 46800, "Antarctica/South_Pole" }, - { "nzdt", 1, 46800, "NZ" }, - { "nzmt", 0, 41400, "Pacific/Auckland" }, - { "nzmt", 0, 41400, "NZ" }, - { "nzst", 0, 43200, "Pacific/Auckland" }, - { "nzst", 1, 43200, "Pacific/Auckland" }, - { "nzst", 1, 45000, "Pacific/Auckland" }, - { "nzst", 0, 43200, "Antarctica/McMurdo" }, - { "nzst", 0, 43200, "Antarctica/South_Pole" }, - { "nzst", 0, 43200, "NZ" }, - { "nzst", 1, 43200, "NZ" }, - { "nzst", 1, 45000, "NZ" }, - { "omsst", 1, 21600, "Asia/Omsk" }, - { "omsst", 1, 25200, "Asia/Omsk" }, - { "omst", 0, 18000, "Asia/Omsk" }, - { "omst", 0, 21600, "Asia/Omsk" }, - { "orast", 1, 18000, "Asia/Oral" }, - { "orat", 0, 14400, "Asia/Oral" }, - { "orat", 0, 18000, "Asia/Oral" }, - { "pddt", 1, -21600, "America/Inuvik" }, - { "pdt", 1, -25200, "America/Los_Angeles" }, - { "pdt", 1, -25200, "America/Boise" }, - { "pdt", 1, -25200, "America/Dawson" }, - { "pdt", 1, -25200, "America/Dawson_Creek" }, - { "pdt", 1, -25200, "America/Ensenada" }, - { "pdt", 1, -25200, "America/Inuvik" }, - { "pdt", 1, -25200, "America/Juneau" }, - { "pdt", 1, -25200, "America/Tijuana" }, - { "pdt", 1, -25200, "America/Vancouver" }, - { "pdt", 1, -25200, "America/Whitehorse" }, - { "pdt", 1, -25200, "Canada/Pacific" }, - { "pdt", 1, -25200, "Canada/Yukon" }, - { "pdt", 1, -25200, "Mexico/BajaNorte" }, - { "pdt", 1, -25200, "PST8PDT" }, - { "pdt", 1, -25200, "US/Pacific" }, - { "pdt", 1, -25200, "US/Pacific-New" }, - { "pest", 1, -14400, "America/Lima" }, - { "petst", 1, 43200, "Asia/Kamchatka" }, - { "petst", 1, 46800, "Asia/Kamchatka" }, - { "pett", 0, 39600, "Asia/Kamchatka" }, - { "pett", 0, 43200, "Asia/Kamchatka" }, - { "pet", 0, -18000, "America/Lima" }, - { "phot", 0, -39600, "Pacific/Enderbury" }, - { "phot", 0, 46800, "Pacific/Enderbury" }, - { "phst", 1, 32400, "Asia/Manila" }, - { "pht", 0, 28800, "Asia/Manila" }, - { "pkst", 1, 21600, "Asia/Karachi" }, - { "pkt", 0, 18000, "Asia/Karachi" }, - { "pmdt", 1, -7200, "America/Miquelon" }, - { "pmst", 0, -10800, "America/Miquelon" }, - { "pmt", 0, -13236, "America/Paramaribo" }, - { "pmt", 0, -13252, "America/Paramaribo" }, - { "pmt", 0, 26240, "Asia/Pontianak" }, - { "pmt", 0, 36000, "Antarctica/DumontDUrville" }, - { "ppt", 1, -25200, "America/Los_Angeles" }, - { "ppt", 1, -25200, "America/Dawson_Creek" }, - { "ppt", 1, -25200, "America/Ensenada" }, - { "ppt", 1, -25200, "America/Inuvik" }, - { "ppt", 1, -25200, "America/Juneau" }, - { "ppt", 1, -25200, "America/Tijuana" }, - { "ppt", 1, -25200, "America/Vancouver" }, - { "ppt", 1, -25200, "Canada/Pacific" }, - { "ppt", 1, -25200, "Mexico/BajaNorte" }, - { "ppt", 1, -25200, "PST8PDT" }, - { "ppt", 1, -25200, "US/Pacific" }, - { "ppt", 1, -25200, "US/Pacific-New" }, - { "pst", 0, -28800, "America/Los_Angeles" }, - { "pst", 0, -28800, "America/Boise" }, - { "pst", 0, -28800, "America/Dawson" }, - { "pst", 0, -28800, "America/Dawson_Creek" }, - { "pst", 0, -28800, "America/Ensenada" }, - { "pst", 0, -28800, "America/Hermosillo" }, - { "pst", 0, -28800, "America/Inuvik" }, - { "pst", 0, -28800, "America/Juneau" }, - { "pst", 0, -28800, "America/Mazatlan" }, - { "pst", 0, -28800, "America/Tijuana" }, - { "pst", 0, -28800, "America/Vancouver" }, - { "pst", 0, -28800, "America/Whitehorse" }, - { "pst", 0, -28800, "Canada/Pacific" }, - { "pst", 0, -28800, "Canada/Yukon" }, - { "pst", 0, -28800, "Mexico/BajaNorte" }, - { "pst", 0, -28800, "Mexico/BajaSur" }, - { "pst", 0, -28800, "Pacific/Pitcairn" }, - { "pst", 0, -28800, "PST8PDT" }, - { "pst", 0, -28800, "US/Pacific" }, - { "pst", 0, -28800, "US/Pacific-New" }, - { "pwt", 1, -25200, "America/Los_Angeles" }, - { "pwt", 1, -25200, "America/Dawson_Creek" }, - { "pwt", 1, -25200, "America/Ensenada" }, - { "pwt", 1, -25200, "America/Inuvik" }, - { "pwt", 1, -25200, "America/Juneau" }, - { "pwt", 1, -25200, "America/Tijuana" }, - { "pwt", 1, -25200, "America/Vancouver" }, - { "pwt", 1, -25200, "Canada/Pacific" }, - { "pwt", 1, -25200, "Mexico/BajaNorte" }, - { "pwt", 1, -25200, "PST8PDT" }, - { "pwt", 1, -25200, "US/Pacific" }, - { "pwt", 1, -25200, "US/Pacific-New" }, - { "pyst", 1, -10800, "America/Asuncion" }, - { "pyt", 0, -10800, "America/Asuncion" }, - { "pyt", 0, -14400, "America/Asuncion" }, - { "qyzst", 1, 25200, "Asia/Qyzylorda" }, - { "qyzt", 0, 18000, "Asia/Qyzylorda" }, - { "qyzt", 0, 21600, "Asia/Qyzylorda" }, - { "ret", 0, 14400, "Indian/Reunion" }, - { "rmt", 0, 5784, "Europe/Riga" }, - { "rott", 0, -10800, "Antarctica/Rothera" }, - { "sakst", 1, 39600, "Asia/Sakhalin" }, - { "sakst", 1, 43200, "Asia/Sakhalin" }, - { "sakt", 0, 36000, "Asia/Sakhalin" }, - { "sakt", 0, 39600, "Asia/Sakhalin" }, - { "samst", 1, 21600, "Asia/Samarkand" }, - { "samst", 1, 18000, "Europe/Samara" }, - { "samt", 0, 14400, "Asia/Samarkand" }, - { "samt", 0, 18000, "Asia/Samarkand" }, - { "samt", 0, -41400, "Pacific/Apia" }, - { "samt", 0, -41400, "Pacific/Pago_Pago" }, - { "samt", 0, -41400, "Pacific/Samoa" }, - { "samt", 0, -41400, "US/Samoa" }, - { "samt", 0, 10800, "Europe/Samara" }, - { "samt", 0, 14400, "Europe/Samara" }, - { "sast", 1, 10800, "Africa/Johannesburg" }, - { "sast", 0, 7200, "Africa/Johannesburg" }, - { "sast", 1, 10800, "Africa/Maseru" }, - { "sast", 1, 10800, "Africa/Windhoek" }, - { "sast", 0, 7200, "Africa/Maseru" }, - { "sast", 0, 7200, "Africa/Mbabane" }, - { "sast", 0, 7200, "Africa/Windhoek" }, - { "sbt", 0, 39600, "Pacific/Guadalcanal" }, - { "sct", 0, 14400, "Indian/Mahe" }, - { "sgt", 0, 27000, "Asia/Singapore" }, - { "sgt", 0, 28800, "Asia/Singapore" }, - { "sgt", 0, 27000, "Singapore" }, - { "sgt", 0, 28800, "Singapore" }, - { "shest", 1, 21600, "Asia/Aqtau" }, - { "shet", 0, 18000, "Asia/Aqtau" }, - { "shet", 0, 21600, "Asia/Aqtau" }, - { "slst", 1, -1200, "Africa/Freetown" }, - { "slst", 1, 3600, "Africa/Freetown" }, - { "smt", 0, 25580, "Asia/Saigon" }, - { "smt", 0, -16966, "America/Santiago" }, - { "smt", 0, -16966, "Chile/Continental" }, - { "smt", 0, 25580, "Asia/Phnom_Penh" }, - { "smt", 0, 25580, "Asia/Vientiane" }, - { "srt", 0, -10800, "America/Paramaribo" }, - { "srt", 0, -12600, "America/Paramaribo" }, - { "sst", 0, -39600, "Pacific/Samoa" }, - { "sst", 0, -39600, "Pacific/Midway" }, - { "sst", 0, -39600, "Pacific/Pago_Pago" }, - { "sst", 0, -39600, "US/Samoa" }, - { "stat", 0, 10800, "Europe/Volgograd" }, - { "stat", 0, 14400, "Europe/Volgograd" }, - { "svest", 1, 18000, "Asia/Yekaterinburg" }, - { "svest", 1, 21600, "Asia/Yekaterinburg" }, - { "svet", 0, 14400, "Asia/Yekaterinburg" }, - { "svet", 0, 18000, "Asia/Yekaterinburg" }, - { "syot", 0, 10800, "Antarctica/Syowa" }, - { "taht", 0, -36000, "Pacific/Tahiti" }, - { "tasst", 1, 25200, "Asia/Samarkand" }, - { "tasst", 1, 21600, "Asia/Tashkent" }, - { "tasst", 1, 25200, "Asia/Tashkent" }, - { "tast", 0, 21600, "Asia/Samarkand" }, - { "tast", 0, 18000, "Asia/Tashkent" }, - { "tast", 0, 21600, "Asia/Tashkent" }, - { "tbist", 1, 14400, "Asia/Tbilisi" }, - { "tbist", 1, 18000, "Asia/Tbilisi" }, - { "tbit", 0, 10800, "Asia/Tbilisi" }, - { "tbit", 0, 14400, "Asia/Tbilisi" }, - { "tft", 0, 18000, "Indian/Kerguelen" }, - { "tjt", 0, 18000, "Asia/Dushanbe" }, - { "tlt", 0, 28800, "Asia/Dili" }, - { "tlt", 0, 32400, "Asia/Dili" }, - { "tmt", 0, 12344, "Asia/Tehran" }, - { "tmt", 0, 12344, "Iran" }, - { "tmt", 0, 14400, "Asia/Ashgabat" }, - { "tmt", 0, 14400, "Asia/Ashkhabad" }, - { "tmt", 0, 18000, "Asia/Ashgabat" }, - { "tmt", 0, 18000, "Asia/Ashkhabad" }, - { "tmt", 0, 5940, "Europe/Tallinn" }, - { "tost", 1, 50400, "Pacific/Tongatapu" }, - { "tot", 0, 46800, "Pacific/Tongatapu" }, - { "trst", 1, 14400, "Europe/Istanbul" }, - { "trst", 1, 14400, "Asia/Istanbul" }, - { "trst", 1, 14400, "Turkey" }, - { "trt", 0, 10800, "Europe/Istanbul" }, - { "trt", 0, 10800, "Asia/Istanbul" }, - { "trt", 0, 10800, "Turkey" }, - { "tsat", 0, 10800, "Europe/Volgograd" }, - { "ulast", 1, 32400, "Asia/Ulaanbaatar" }, - { "ulast", 1, 32400, "Asia/Ulan_Bator" }, - { "ulat", 0, 25200, "Asia/Ulaanbaatar" }, - { "ulat", 0, 28800, "Asia/Ulaanbaatar" }, - { "ulat", 0, 25200, "Asia/Choibalsan" }, - { "ulat", 0, 25200, "Asia/Ulan_Bator" }, - { "ulat", 0, 28800, "Asia/Choibalsan" }, - { "ulat", 0, 28800, "Asia/Ulan_Bator" }, - { "urast", 1, 18000, "Asia/Oral" }, - { "urast", 1, 21600, "Asia/Oral" }, - { "urat", 0, 14400, "Asia/Oral" }, - { "urat", 0, 18000, "Asia/Oral" }, - { "urat", 0, 21600, "Asia/Oral" }, - { "urut", 0, 21600, "Asia/Urumqi" }, - { "uyhst", 1, -10800, "America/Montevideo" }, - { "uyhst", 1, -9000, "America/Montevideo" }, - { "uyst", 1, -7200, "America/Montevideo" }, - { "uyt", 0, -10800, "America/Montevideo" }, - { "uyt", 0, -12600, "America/Montevideo" }, - { "uzst", 1, 21600, "Asia/Samarkand" }, - { "uzst", 1, 21600, "Asia/Tashkent" }, - { "uzt", 0, 18000, "Asia/Samarkand" }, - { "uzt", 0, 18000, "Asia/Tashkent" }, - { "vet", 0, -14400, "America/Caracas" }, - { "vet", 0, -16200, "America/Caracas" }, - { "vlasst", 1, 36000, "Asia/Vladivostok" }, - { "vlast", 0, 32400, "Asia/Vladivostok" }, - { "vlast", 1, 39600, "Asia/Vladivostok" }, - { "vlat", 0, 32400, "Asia/Vladivostok" }, - { "vlat", 0, 36000, "Asia/Vladivostok" }, - { "volst", 1, 14400, "Europe/Volgograd" }, - { "volst", 1, 18000, "Europe/Volgograd" }, - { "volt", 0, 10800, "Europe/Volgograd" }, - { "volt", 0, 14400, "Europe/Volgograd" }, - { "vost", 0, 21600, "Antarctica/Vostok" }, - { "vust", 1, 43200, "Pacific/Efate" }, - { "vut", 0, 39600, "Pacific/Efate" }, - { "warst", 1, -10800, "America/Mendoza" }, - { "warst", 1, -10800, "America/Argentina/Jujuy" }, - { "warst", 1, -10800, "America/Argentina/Mendoza" }, - { "warst", 1, -10800, "America/Jujuy" }, - { "wart", 0, -14400, "America/Mendoza" }, - { "wart", 0, -14400, "America/Argentina/Catamarca" }, - { "wart", 0, -14400, "America/Argentina/ComodRivadavia" }, - { "wart", 0, -14400, "America/Argentina/Cordoba" }, - { "wart", 0, -14400, "America/Argentina/Jujuy" }, - { "wart", 0, -14400, "America/Argentina/La_Rioja" }, - { "wart", 0, -14400, "America/Argentina/Mendoza" }, - { "wart", 0, -14400, "America/Argentina/Rio_Gallegos" }, - { "wart", 0, -14400, "America/Argentina/San_Juan" }, - { "wart", 0, -14400, "America/Argentina/Tucuman" }, - { "wart", 0, -14400, "America/Argentina/Ushuaia" }, - { "wart", 0, -14400, "America/Catamarca" }, - { "wart", 0, -14400, "America/Cordoba" }, - { "wart", 0, -14400, "America/Jujuy" }, - { "wart", 0, -14400, "America/Rosario" }, - { "wast", 1, 7200, "Africa/Windhoek" }, - { "wast", 1, 7200, "Africa/Ndjamena" }, - { "wat", 0, -3600, "Africa/Dakar" }, - { "wat", 0, -3600, "Africa/Bamako" }, - { "wat", 0, -3600, "Africa/Banjul" }, - { "wat", 0, -3600, "Africa/Bissau" }, - { "wat", 0, -3600, "Africa/Conakry" }, - { "wat", 0, -3600, "Africa/El_Aaiun" }, - { "wat", 0, -3600, "Africa/Freetown" }, - { "wat", 0, -3600, "Africa/Niamey" }, - { "wat", 0, -3600, "Africa/Nouakchott" }, - { "wat", 0, -3600, "Africa/Timbuktu" }, - { "wat", 0, 0, "Africa/Freetown" }, - { "wat", 0, 3600, "Africa/Brazzaville" }, - { "wat", 0, 3600, "Africa/Bangui" }, - { "wat", 0, 3600, "Africa/Douala" }, - { "wat", 0, 3600, "Africa/Lagos" }, - { "wat", 0, 3600, "Africa/Libreville" }, - { "wat", 0, 3600, "Africa/Luanda" }, - { "wat", 0, 3600, "Africa/Malabo" }, - { "wat", 0, 3600, "Africa/Ndjamena" }, - { "wat", 0, 3600, "Africa/Niamey" }, - { "wat", 0, 3600, "Africa/Porto-Novo" }, - { "wat", 0, 3600, "Africa/Windhoek" }, - { "wemt", 1, 7200, "Europe/Lisbon" }, - { "wemt", 1, 7200, "Europe/Madrid" }, - { "wemt", 1, 7200, "Europe/Monaco" }, - { "wemt", 1, 7200, "Europe/Paris" }, - { "wemt", 1, 7200, "Portugal" }, - { "wemt", 1, 7200, "WET" }, - { "west", 1, 3600, "Europe/Paris" }, - { "west", 1, 3600, "Africa/Algiers" }, - { "west", 1, 3600, "Africa/Casablanca" }, - { "west", 1, 3600, "Africa/Ceuta" }, - { "west", 1, 3600, "Atlantic/Canary" }, - { "west", 1, 3600, "Atlantic/Faeroe" }, - { "west", 1, 3600, "Atlantic/Faroe" }, - { "west", 1, 3600, "Atlantic/Madeira" }, - { "west", 1, 3600, "Europe/Brussels" }, - { "west", 1, 3600, "Europe/Lisbon" }, - { "west", 1, 3600, "Europe/Luxembourg" }, - { "west", 1, 3600, "Europe/Madrid" }, - { "west", 1, 3600, "Europe/Monaco" }, - { "west", 1, 3600, "Portugal" }, - { "west", 1, 3600, "WET" }, - { "west", 1, 7200, "Europe/Luxembourg" }, - { "wet", 0, 0, "Europe/Paris" }, - { "wet", 0, 0, "Africa/Algiers" }, - { "wet", 0, 0, "Africa/Casablanca" }, - { "wet", 0, 0, "Africa/Ceuta" }, - { "wet", 0, 0, "Africa/El_Aaiun" }, - { "wet", 0, 0, "Atlantic/Azores" }, - { "wet", 0, 0, "Atlantic/Canary" }, - { "wet", 0, 0, "Atlantic/Faeroe" }, - { "wet", 0, 0, "Atlantic/Faroe" }, - { "wet", 0, 0, "Atlantic/Madeira" }, - { "wet", 0, 0, "Europe/Brussels" }, - { "wet", 0, 0, "Europe/Lisbon" }, - { "wet", 0, 0, "Europe/Luxembourg" }, - { "wet", 0, 0, "Europe/Madrid" }, - { "wet", 0, 0, "Europe/Monaco" }, - { "wet", 0, 0, "Portugal" }, - { "wet", 0, 0, "WET" }, - { "wet", 0, 3600, "Europe/Luxembourg" }, - { "wgst", 1, -7200, "America/Godthab" }, - { "wgst", 1, -7200, "America/Danmarkshavn" }, - { "wgt", 0, -10800, "America/Godthab" }, - { "wgt", 0, -10800, "America/Danmarkshavn" }, - { "wit", 0, 25200, "Asia/Jakarta" }, - { "wit", 0, 27000, "Asia/Jakarta" }, - { "wit", 0, 28800, "Asia/Jakarta" }, - { "wit", 0, 25200, "Asia/Pontianak" }, - { "wit", 0, 27000, "Asia/Pontianak" }, - { "wit", 0, 28800, "Asia/Pontianak" }, - { "wst", 0, 28800, "Australia/Perth" }, - { "wst", 1, 32400, "Australia/Perth" }, - { "wst", 0, -39600, "Pacific/Apia" }, - { "wst", 0, 28800, "Antarctica/Casey" }, - { "wst", 0, 28800, "Australia/West" }, - { "wst", 1, 32400, "Australia/West" }, - { "yakst", 1, 32400, "Asia/Yakutsk" }, - { "yakst", 1, 36000, "Asia/Yakutsk" }, - { "yakt", 0, 28800, "Asia/Yakutsk" }, - { "yakt", 0, 32400, "Asia/Yakutsk" }, - { "yddt", 1, -25200, "America/Dawson" }, - { "yddt", 1, -25200, "America/Whitehorse" }, - { "yddt", 1, -25200, "Canada/Yukon" }, - { "ydt", 1, -28800, "America/Dawson" }, - { "ydt", 1, -28800, "America/Whitehorse" }, - { "ydt", 1, -28800, "America/Yakutat" }, - { "ydt", 1, -28800, "Canada/Yukon" }, - { "yekst", 1, 21600, "Asia/Yekaterinburg" }, - { "yekt", 0, 18000, "Asia/Yekaterinburg" }, - { "yerst", 1, 14400, "Asia/Yerevan" }, - { "yerst", 1, 18000, "Asia/Yerevan" }, - { "yert", 0, 10800, "Asia/Yerevan" }, - { "yert", 0, 14400, "Asia/Yerevan" }, - { "ypt", 1, -28800, "America/Dawson" }, - { "ypt", 1, -28800, "America/Whitehorse" }, - { "ypt", 1, -28800, "America/Yakutat" }, - { "ypt", 1, -28800, "Canada/Yukon" }, - { "yst", 0, -32400, "America/Anchorage" }, - { "yst", 0, -32400, "America/Dawson" }, - { "yst", 0, -32400, "America/Juneau" }, - { "yst", 0, -32400, "America/Nome" }, - { "yst", 0, -32400, "America/Whitehorse" }, - { "yst", 0, -32400, "America/Yakutat" }, - { "yst", 0, -32400, "Canada/Yukon" }, - { "yst", 0, -32400, "US/Alaska" }, - { "ywt", 1, -28800, "America/Dawson" }, - { "ywt", 1, -28800, "America/Whitehorse" }, - { "ywt", 1, -28800, "America/Yakutat" }, - { "ywt", 1, -28800, "Canada/Yukon" }, - { "a", 0, 3600, NULL }, - { "b", 0, 7200, NULL }, - { "c", 0, 10800, NULL }, - { "d", 0, 14400, NULL }, - { "e", 0, 18000, NULL }, - { "f", 0, 21600, NULL }, - { "g", 0, 25200, NULL }, - { "h", 0, 28800, NULL }, - { "i", 0, 32400, NULL }, - { "k", 0, 36000, NULL }, - { "l", 0, 39600, NULL }, - { "m", 0, 43200, NULL }, - { "n", 0, -3600, NULL }, - { "o", 0, -7200, NULL }, - { "p", 0, -10800, NULL }, - { "q", 0, -14400, NULL }, - { "r", 0, -18000, NULL }, - { "s", 0, -21600, NULL }, - { "t", 0, -25200, NULL }, - { "utc", 0, 0, "UTC" }, - { "u", 0, -28800, NULL }, - { "v", 0, -32400, NULL }, - { "w", 0, -36000, NULL }, - { "x", 0, -39600, NULL }, - { "y", 0, -43200, NULL }, - { "zzz", 0, 0, "Antarctica/Davis" }, - { "zzz", 0, 0, "Antarctica/DumontDUrville" }, - { "z", 0, 0, NULL }, diff --git a/ext/date/lib/tm2unixtime.c b/ext/date/lib/tm2unixtime.c deleted file mode 100644 index 691ed89a8ec77..0000000000000 --- a/ext/date/lib/tm2unixtime.c +++ /dev/null @@ -1,331 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Derick Rethans | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#include "timelib.h" - -/* jan feb mrt apr may jun jul aug sep oct nov dec */ -static int month_tab_leap[12] = { -1, 30, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; -static int month_tab[12] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; - -/* dec jan feb mrt apr may jun jul aug sep oct nov dec */ -static int days_in_month_leap[13] = { 31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; -static int days_in_month[13] = { 31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; - -static int do_range_limit(timelib_sll start, timelib_sll end, timelib_sll adj, timelib_sll *a, timelib_sll *b) -{ - if (*a < start) { - *a += adj; - (*b)--; - return 1; - } - if (*a >= end) { - if (start == 0) { - (*b) += (*a / end); - (*a) -= (end * (*a / end)); - return 0; - } - - *a -= adj; - (*b)++; - return 1; - } - return 0; -} - -static int do_range_limit_days(timelib_sll *y, timelib_sll *m, timelib_sll *d) -{ - timelib_sll leapyear; - timelib_sll days_this_month; - timelib_sll last_month, last_year; - timelib_sll days_last_month; - - do_range_limit(1, 13, 12, m, y); - - leapyear = timelib_is_leap(*y); - days_this_month = leapyear ? days_in_month_leap[*m] : days_in_month[*m]; - last_month = (*m) - 1; - - if (last_month < 1) { - last_month += 12; - last_year = (*y) - 1; - } else { - last_year = (*y); - } - leapyear = timelib_is_leap(last_year); - days_last_month = leapyear ? days_in_month_leap[last_month] : days_in_month[last_month]; - - if (*d <= 0) { - *d += days_last_month; - (*m)--; - return 1; - } - if (*d > days_this_month) { - *d -= days_this_month; - (*m)++; - return 1; - } - return 0; -} - -static void do_adjust_for_weekday(timelib_time* time) -{ - timelib_sll current_dow, difference; - - current_dow = timelib_day_of_week(time->y, time->m, time->d); - difference = time->relative.weekday - current_dow; - if ((time->relative.d < 0 && difference < 0) || (time->relative.d >= 0 && difference <= -time->relative.weekday_behavior)) { - difference += 7; - } - if (time->relative.weekday >= 0) { - time->d += difference; - } else { - time->d -= (7 - (abs(time->relative.weekday) - current_dow)); - } -} - -static void do_normalize(timelib_time* time) -{ - do {} while (do_range_limit(0, 60, 60, &time->s, &time->i)); - do {} while (do_range_limit(0, 60, 60, &time->i, &time->h)); - do {} while (do_range_limit(0, 24, 24, &time->h, &time->d)); - do {} while (do_range_limit(1, 13, 12, &time->m, &time->y)); - - do {} while (do_range_limit_days(&time->y, &time->m, &time->d)); - do {} while (do_range_limit(1, 13, 12, &time->m, &time->y)); -} - -static void do_adjust_relative(timelib_time* time) -{ - if (time->have_weekday_relative) { - do_adjust_for_weekday(time); - } - do_normalize(time); - - if (time->have_relative) { - time->s += time->relative.s; - time->i += time->relative.i; - time->h += time->relative.h; - - time->d += time->relative.d; - time->m += time->relative.m; - time->y += time->relative.y; - } - do_normalize(time); - - memset(&(time->relative), 0, sizeof(time->relative)); -} - -static void do_adjust_special_weekday(timelib_time* time) -{ - timelib_sll current_dow, this_weekday = 0, count; - - current_dow = timelib_day_of_week(time->y, time->m, time->d); - count = time->special.amount; - if (count == 0) { - if (current_dow == 6) { - this_weekday = 2; - } - if (current_dow == 0) { - this_weekday = 1; - } - time->d += this_weekday; - return; - } else if (count > 0) { - if (current_dow == 5) { - this_weekday = 2; - } - if (current_dow == 6) { - this_weekday = 1; - } - } else if (count < 0) { - if (current_dow == 0) { - this_weekday = -1; - } - if (current_dow == 1) { - this_weekday = -2; - } - } - time->d += this_weekday + ((count / 5) * 7) + (count % 5); -} - -static void do_adjust_special(timelib_time* time) -{ - if (time->have_special_relative) { - switch (time->special.type) { - case TIMELIB_SPECIAL_WEEKDAY: - do_adjust_special_weekday(time); - break; - } - } - do_normalize(time); - memset(&(time->special), 0, sizeof(time->special)); -} - -static timelib_sll do_years(timelib_sll year) -{ - timelib_sll i; - timelib_sll res = 0; - timelib_sll eras; - - eras = (year - 1970) / 400; - if (eras != 0) { - year = year - (eras * 400); - res += (SECS_PER_ERA * eras); - } - - if (year >= 1970) { - for (i = year - 1; i >= 1970; i--) { - if (timelib_is_leap(i)) { - res += (DAYS_PER_LYEAR * SECS_PER_DAY); - } else { - res += (DAYS_PER_YEAR * SECS_PER_DAY); - } - } - } else { - for (i = 1969; i >= year; i--) { - if (timelib_is_leap(i)) { - res -= (DAYS_PER_LYEAR * SECS_PER_DAY); - } else { - res -= (DAYS_PER_YEAR * SECS_PER_DAY); - } - } - } - return res; -} - -static timelib_sll do_months(timelib_ull month, timelib_ull year) -{ - if (timelib_is_leap(year)) { - return ((month_tab_leap[month - 1] + 1) * SECS_PER_DAY); - } else { - return ((month_tab[month - 1]) * SECS_PER_DAY); - } -} - -static timelib_sll do_days(timelib_ull day) -{ - return ((day - 1) * SECS_PER_DAY); -} - -static timelib_sll do_time(timelib_ull hour, timelib_ull minute, timelib_ull second) -{ - timelib_sll res = 0; - - res += hour * 3600; - res += minute * 60; - res += second; - return res; -} - -static timelib_sll do_adjust_timezone(timelib_time *tz, timelib_tzinfo *tzi) -{ - switch (tz->zone_type) { - case TIMELIB_ZONETYPE_OFFSET: - - tz->is_localtime = 1; - return tz->z * 60; - break; - - case TIMELIB_ZONETYPE_ABBR: { - timelib_sll tmp; - - tz->is_localtime = 1; - tmp = tz->z; - tmp -= tz->dst * 60; - tmp *= 60; - return tmp; - } - break; - - case TIMELIB_ZONETYPE_ID: - tzi = tz->tz_info; - /* Break intentionally missing */ - - default: - /* No timezone in struct, fallback to reference if possible */ - if (tzi) { - timelib_time_offset *before, *after; - timelib_sll tmp; - int in_transistion; - - tz->is_localtime = 1; - before = timelib_get_time_zone_info(tz->sse, tzi); - after = timelib_get_time_zone_info(tz->sse - before->offset, tzi); - timelib_set_timezone(tz, tzi); - - in_transistion = ( - ((tz->sse - after->offset) >= (after->transistion_time + (before->offset - after->offset))) && - ((tz->sse - after->offset) < after->transistion_time) - ); - - if ((before->offset != after->offset) && !in_transistion) { - tmp = -after->offset; - } else { - tmp = -tz->z; - } - timelib_time_offset_dtor(before); - timelib_time_offset_dtor(after); - - return tmp; - } - } - return 0; -} - -void timelib_update_ts(timelib_time* time, timelib_tzinfo* tzi) -{ - timelib_sll res = 0; - - do_adjust_relative(time); - do_adjust_special(time); - res += do_years(time->y); - res += do_months(time->m, time->y); - res += do_days(time->d); - res += do_time(time->h, time->i, time->s); - time->sse = res; - - res += do_adjust_timezone(time, tzi); - time->sse = res; - - time->sse_uptodate = 1; -} - -#if 0 -int main(void) -{ - timelib_sll res; - timelib_time time; - - time = timelib_strtotime("10 Feb 2005 06:07:03 PM CET"); /* 1108055223 */ - printf ("%04d-%02d-%02d %02d:%02d:%02d.%-5d %+04d %1d", - time.y, time.m, time.d, time.h, time.i, time.s, time.f, time.z, time.dst); - if (time.have_relative) { - printf ("%3dY %3dM %3dD / %3dH %3dM %3dS", - time.relative.y, time.relative.m, time.relative.d, time.relative.h, time.relative.i, time.relative.s); - } - if (time.have_weekday_relative) { - printf (" / %d", time.relative.weekday); - } - res = time2unixtime(&time); - printf("%Ld\n", res); - - return 0; -} -#endif diff --git a/ext/date/lib/unixtime2tm.c b/ext/date/lib/unixtime2tm.c deleted file mode 100644 index 14075daed69b6..0000000000000 --- a/ext/date/lib/unixtime2tm.c +++ /dev/null @@ -1,251 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Derick Rethans | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#include "timelib.h" - -#include - -#ifdef HAVE_STDLIB_H -#include -#endif - -#ifdef HAVE_STRING_H -#include -#else -#include -#endif - -static int month_tab_leap[12] = { -1, 30, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; -static int month_tab[12] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; - - -/* Converts a Unix timestamp value into broken down time, in GMT */ -void timelib_unixtime2gmt(timelib_time* tm, timelib_sll ts) -{ - timelib_sll days, remainder, tmp_days; - timelib_sll cur_year = 1970; - timelib_sll i; - timelib_sll hours, minutes, seconds; - int *months; - - days = ts / SECS_PER_DAY; - remainder = ts - (days * SECS_PER_DAY); - if (ts < 0 && remainder == 0) { - days++; - remainder -= SECS_PER_DAY; - } - DEBUG(printf("days=%lld, rem=%lld\n", days, remainder);); - - if (ts >= 0) { - tmp_days = days + 1; - while (tmp_days >= DAYS_PER_LYEAR) { - cur_year++; - if (timelib_is_leap(cur_year)) { - tmp_days -= DAYS_PER_LYEAR; - } else { - tmp_days -= DAYS_PER_YEAR; - } - } - } else { - tmp_days = days; - - /* Guess why this might be for, it has to do with a pope ;-). It's also - * only valid for Great Brittain and it's colonies. It needs fixing for - * other locales. *sigh*, why is this crap so complex! */ - if (ts <= TIMELIB_LL_CONST(-6857352000)) { - tmp_days -= 11; - } - - while (tmp_days <= 0) { - cur_year--; - DEBUG(printf("tmp_days=%lld, year=%lld\n", tmp_days, cur_year);); - if (timelib_is_leap(cur_year)) { - tmp_days += DAYS_PER_LYEAR; - } else { - tmp_days += DAYS_PER_YEAR; - } - } - remainder += SECS_PER_DAY; - } - DEBUG(printf("tmp_days=%lld, year=%lld\n", tmp_days, cur_year);); - - months = timelib_is_leap(cur_year) ? month_tab_leap : month_tab; - if (timelib_is_leap(cur_year) && cur_year < 1970) { - tmp_days--; - } - i = 11; - while (i > 0) { - DEBUG(printf("month=%lld (%d)\n", i, months[i]);); - if (tmp_days > months[i]) { - break; - } - i--; - } - DEBUG(printf("A: ts=%lld, year=%lld, month=%lld, day=%lld,", ts, cur_year, i + 1, tmp_days - months[i]);); - - /* That was the date, now we do the tiiiime */ - hours = remainder / 3600; - minutes = (remainder - hours * 3600) / 60; - seconds = remainder % 60; - DEBUG(printf(" hour=%lld, minute=%lld, second=%lld\n", hours, minutes, seconds);); - - tm->y = cur_year; - tm->m = i + 1; - tm->d = tmp_days - months[i]; - tm->h = hours; - tm->i = minutes; - tm->s = seconds; - tm->z = 0; - tm->dst = 0; - tm->sse = ts; - tm->sse_uptodate = 1; - tm->tim_uptodate = 1; - tm->is_localtime = 0; -} - -void timelib_update_from_sse(timelib_time *tm) -{ - timelib_sll sse; - - sse = tm->sse; - - switch (tm->zone_type) { - case TIMELIB_ZONETYPE_ABBR: - case TIMELIB_ZONETYPE_OFFSET: { - int z = tm->z; - signed int dst = tm->dst; - - timelib_unixtime2gmt(tm, tm->sse - (tm->z * 60)); - - tm->z = z; - tm->dst = dst; - goto cleanup; - } - - case TIMELIB_ZONETYPE_ID: { - timelib_time_offset *gmt_offset; - - gmt_offset = timelib_get_time_zone_info(tm->sse, tm->tz_info); - timelib_unixtime2gmt(tm, tm->sse + gmt_offset->offset); - timelib_time_offset_dtor(gmt_offset); - - goto cleanup; - } - - default: - timelib_unixtime2gmt(tm, tm->sse); - goto cleanup; - } -cleanup: - tm->sse = sse; - tm->is_localtime = 1; - tm->have_zone = 1; -} - -void timelib_unixtime2local(timelib_time *tm, timelib_sll ts) -{ - timelib_time_offset *gmt_offset; - timelib_tzinfo *tz = tm->tz_info; - - switch (tm->zone_type) { - case TIMELIB_ZONETYPE_ABBR: - case TIMELIB_ZONETYPE_OFFSET: { - int z = tm->z; - signed int dst = tm->dst; - - timelib_unixtime2gmt(tm, ts - (tm->z * 60)); - - tm->z = z; - tm->dst = dst; - break; - } - - case TIMELIB_ZONETYPE_ID: - gmt_offset = timelib_get_time_zone_info(ts, tz); - timelib_unixtime2gmt(tm, ts + gmt_offset->offset); - - /* we need to reset the sse here as unixtime2gmt modifies it */ - tm->sse = ts; - tm->dst = gmt_offset->is_dst; - tm->z = gmt_offset->offset; - tm->tz_info = tz; - - timelib_time_tz_abbr_update(tm, gmt_offset->abbr); - timelib_time_offset_dtor(gmt_offset); - break; - - default: - tm->is_localtime = 0; - tm->have_zone = 0; - return; - } - - tm->is_localtime = 1; - tm->have_zone = 1; -} - -void timelib_set_timezone(timelib_time *t, timelib_tzinfo *tz) -{ - timelib_time_offset *gmt_offset; - - gmt_offset = timelib_get_time_zone_info(t->sse, tz); - t->z = gmt_offset->offset; -/* - if (t->dst != gmt_offset->is_dst) { - printf("ERROR (%d, %d)\n", t->dst, gmt_offset->is_dst); - exit(1); - } -*/ - t->dst = gmt_offset->is_dst; - t->tz_info = tz; - if (t->tz_abbr) { - free(t->tz_abbr); - } - t->tz_abbr = strdup(gmt_offset->abbr); - timelib_time_offset_dtor(gmt_offset); - - t->have_zone = 1; - t->zone_type = TIMELIB_ZONETYPE_ID; -} - -/* Converts the time stored in the struct to localtime if localtime = true, - * otherwise it converts it to gmttime. This is only done when necessary - * ofcourse. */ -int timelib_apply_localtime(timelib_time *t, unsigned int localtime) -{ - if (localtime) { - /* Converting from GMT time to local time */ - DEBUG(printf("Converting from GMT time to local time\n");); - - /* Check if TZ is set */ - if (!t->tz_info) { - DEBUG(printf("E: No timezone configured, can't switch to local time\n");); - return -1; - } - - timelib_unixtime2local(t, t->sse); - } else { - /* Converting from local time to GMT time */ - DEBUG(printf("Converting from local time to GMT time\n");); - - timelib_unixtime2gmt(t, t->sse); - } - return 0; -} diff --git a/ext/date/php_date.c b/ext/date/php_date.c deleted file mode 100644 index 95cf47e1b1a58..0000000000000 --- a/ext/date/php_date.c +++ /dev/null @@ -1,2630 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Derick Rethans | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#include "php.h" -#include "php_streams.h" -#include "php_main.h" -#include "php_globals.h" -#include "php_ini.h" -#include "ext/standard/info.h" -#include "ext/standard/php_versioning.h" -#include "php_date.h" -#include "lib/timelib.h" -#include -#include - -/* {{{ arginfo */ -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_date, 0, 0, 1) - ZEND_ARG_INFO(0, format) - ZEND_ARG_INFO(0, timestamp) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_gmdate, 0, 0, 1) - ZEND_ARG_INFO(0, format) - ZEND_ARG_INFO(0, timestamp) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_idate, 0, 0, 1) - ZEND_ARG_INFO(0, format) - ZEND_ARG_INFO(0, timestamp) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_strtotime, 0, 0, 1) - ZEND_ARG_INFO(0, time) - ZEND_ARG_INFO(0, now) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_mktime, 0, 0, 0) - ZEND_ARG_INFO(0, hour) - ZEND_ARG_INFO(0, min) - ZEND_ARG_INFO(0, sec) - ZEND_ARG_INFO(0, mon) - ZEND_ARG_INFO(0, day) - ZEND_ARG_INFO(0, year) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_gmmktime, 0, 0, 0) - ZEND_ARG_INFO(0, hour) - ZEND_ARG_INFO(0, min) - ZEND_ARG_INFO(0, sec) - ZEND_ARG_INFO(0, mon) - ZEND_ARG_INFO(0, day) - ZEND_ARG_INFO(0, year) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_checkdate, 0) - ZEND_ARG_INFO(0, month) - ZEND_ARG_INFO(0, day) - ZEND_ARG_INFO(0, year) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_strftime, 0, 0, 1) - ZEND_ARG_INFO(0, format) - ZEND_ARG_INFO(0, timestamp) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_gmstrftime, 0, 0, 1) - ZEND_ARG_INFO(0, format) - ZEND_ARG_INFO(0, timestamp) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_time, 0) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_localtime, 0, 0, 0) - ZEND_ARG_INFO(0, timestamp) - ZEND_ARG_INFO(0, associative_array) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_getdate, 0, 0, 0) - ZEND_ARG_INFO(0, timestamp) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_date_default_timezone_set, 0) - ZEND_ARG_INFO(0, timezone_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_date_default_timezone_get, 0) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_date_sunrise, 0, 0, 1) - ZEND_ARG_INFO(0, time) - ZEND_ARG_INFO(0, format) - ZEND_ARG_INFO(0, latitude) - ZEND_ARG_INFO(0, longitude) - ZEND_ARG_INFO(0, zenith) - ZEND_ARG_INFO(0, gmt_offset) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_date_sunset, 0, 0, 1) - ZEND_ARG_INFO(0, time) - ZEND_ARG_INFO(0, format) - ZEND_ARG_INFO(0, latitude) - ZEND_ARG_INFO(0, longitude) - ZEND_ARG_INFO(0, zenith) - ZEND_ARG_INFO(0, gmt_offset) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_date_sun_info, 0) - ZEND_ARG_INFO(0, time) - ZEND_ARG_INFO(0, latitude) - ZEND_ARG_INFO(0, longitude) -ZEND_END_ARG_INFO() - -/* }}} */ - -/* {{{ Function table */ -zend_function_entry date_functions[] = { - PHP_FE(strtotime, arginfo_strtotime) - PHP_FE(date, arginfo_date) - PHP_FE(idate, arginfo_idate) - PHP_FE(gmdate, arginfo_gmdate) - PHP_FE(mktime, arginfo_mktime) - PHP_FE(gmmktime, arginfo_gmmktime) - PHP_FE(checkdate, arginfo_checkdate) - -#ifdef HAVE_STRFTIME - PHP_FE(strftime, arginfo_strftime) - PHP_FE(gmstrftime, arginfo_gmstrftime) -#endif - - PHP_FE(time, arginfo_time) - PHP_FE(localtime, arginfo_localtime) - PHP_FE(getdate, arginfo_getdate) - - /* Advanced Interface */ - PHP_FE(date_create, NULL) - PHP_FE(date_parse, NULL) - PHP_FE(date_format, NULL) - PHP_FE(date_format_locale, NULL) - PHP_FE(date_modify, NULL) - PHP_FE(date_timezone_get, NULL) - PHP_FE(date_timezone_set, NULL) - PHP_FE(date_offset_get, NULL) - - PHP_FE(date_time_set, NULL) - PHP_FE(date_date_set, NULL) - PHP_FE(date_isodate_set, NULL) - - PHP_FE(timezone_open, NULL) - PHP_FE(timezone_name_get, NULL) - PHP_FE(timezone_name_from_abbr, NULL) - PHP_FE(timezone_offset_get, NULL) - PHP_FE(timezone_transitions_get, NULL) - PHP_FE(timezone_identifiers_list, NULL) - PHP_FE(timezone_abbreviations_list, NULL) - - /* Options and Configuration */ - PHP_FE(date_default_timezone_set, arginfo_date_default_timezone_set) - PHP_FE(date_default_timezone_get, arginfo_date_default_timezone_get) - - /* Astronomical functions */ - PHP_FE(date_sunrise, arginfo_date_sunrise) - PHP_FE(date_sunset, arginfo_date_sunset) - PHP_FE(date_sun_info, arginfo_date_sun_info) - {NULL, NULL, NULL} -}; - - -zend_function_entry date_funcs_date[] = { - PHP_ME(DateTime, __construct, NULL, ZEND_ACC_CTOR|ZEND_ACC_PUBLIC) - PHP_ME_MAPPING(format, date_format, NULL, 0) - PHP_ME_MAPPING(modify, date_modify, NULL, 0) - PHP_ME_MAPPING(getTimezone, date_timezone_get, NULL, 0) - PHP_ME_MAPPING(setTimezone, date_timezone_set, NULL, 0) - PHP_ME_MAPPING(getOffset, date_offset_get, NULL, 0) - PHP_ME_MAPPING(setTime, date_time_set, NULL, 0) - PHP_ME_MAPPING(setDate, date_date_set, NULL, 0) - PHP_ME_MAPPING(setISODate, date_isodate_set, NULL, 0) - {NULL, NULL, NULL} -}; - -zend_function_entry date_funcs_timezone[] = { - PHP_ME(DateTimeZone, __construct, NULL, ZEND_ACC_CTOR|ZEND_ACC_PUBLIC) - PHP_ME_MAPPING(getName, timezone_name_get, NULL, 0) - PHP_ME_MAPPING(getOffset, timezone_offset_get, NULL, 0) - PHP_ME_MAPPING(getTransitions, timezone_transitions_get, NULL, 0) - PHP_ME_MAPPING(listAbbreviations, timezone_abbreviations_list, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) - PHP_ME_MAPPING(listIdentifiers, timezone_identifiers_list, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) - {NULL, NULL, NULL} -}; - -static char* guess_timezone(const timelib_tzdb *tzdb TSRMLS_DC); -static void date_register_classes(TSRMLS_D); -/* }}} */ - -ZEND_DECLARE_MODULE_GLOBALS(date) -static PHP_GINIT_FUNCTION(date); - -/* True global */ -timelib_tzdb *php_date_global_timezone_db; -int php_date_global_timezone_db_enabled; - -#define DATE_DEFAULT_LATITUDE "31.7667" -#define DATE_DEFAULT_LONGITUDE "35.2333" - -/* on 90'35; common sunset declaration (start of sun body appear) */ -#define DATE_SUNSET_ZENITH "90.583333" - -/* on 90'35; common sunrise declaration (sun body disappeared) */ -#define DATE_SUNRISE_ZENITH "90.583333" - -/* {{{ INI Settings */ -PHP_INI_BEGIN() - STD_PHP_INI_ENTRY("date.timezone", "", PHP_INI_ALL, OnUpdateString, default_timezone, zend_date_globals, date_globals) - PHP_INI_ENTRY("date.default_latitude", DATE_DEFAULT_LATITUDE, PHP_INI_ALL, NULL) - PHP_INI_ENTRY("date.default_longitude", DATE_DEFAULT_LONGITUDE, PHP_INI_ALL, NULL) - PHP_INI_ENTRY("date.sunset_zenith", DATE_SUNSET_ZENITH, PHP_INI_ALL, NULL) - PHP_INI_ENTRY("date.sunrise_zenith", DATE_SUNRISE_ZENITH, PHP_INI_ALL, NULL) -PHP_INI_END() -/* }}} */ - -zend_class_entry *date_ce_date, *date_ce_timezone; - -static zend_object_handlers date_object_handlers_date; -static zend_object_handlers date_object_handlers_timezone; - -typedef struct _php_date_obj php_date_obj; -typedef struct _php_timezone_obj php_timezone_obj; - -struct _php_date_obj { - zend_object std; - timelib_time *time; -}; - -struct _php_timezone_obj { - zend_object std; - timelib_tzinfo *tz; -}; - -#define DATE_SET_CONTEXT \ - zval *object; \ - object = getThis(); \ - -#define DATE_FETCH_OBJECT \ - php_date_obj *obj; \ - DATE_SET_CONTEXT; \ - if (object) { \ - if (ZEND_NUM_ARGS()) { \ - WRONG_PARAM_COUNT; \ - } \ - } else { \ - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, NULL, "O", &object, date_ce_date) == FAILURE) { \ - RETURN_FALSE; \ - } \ - } \ - obj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); \ - -#define DATE_CHECK_INITIALIZED(member, class_name) \ - if (!(member)) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "The " #class_name " object has not been correctly initialized by its constructor"); \ - RETURN_FALSE; \ - } - -static void date_object_free_storage_date(void *object TSRMLS_DC); -static void date_object_free_storage_timezone(void *object TSRMLS_DC); -static zend_object_value date_object_new_date(zend_class_entry *class_type TSRMLS_DC); -static zend_object_value date_object_new_timezone(zend_class_entry *class_type TSRMLS_DC); -static zend_object_value date_object_clone_date(zval *this_ptr TSRMLS_DC); -static int date_object_compare_date(zval *d1, zval *d2 TSRMLS_DC); -static zend_object_value date_object_clone_timezone(zval *this_ptr TSRMLS_DC); - -/* This is need to ensure that session extension request shutdown occurs 1st, because it uses the date extension */ -static zend_module_dep date_deps[] = { - ZEND_MOD_OPTIONAL("session") - {NULL, NULL, NULL} -}; - -/* {{{ Module struct */ -zend_module_entry date_module_entry = { - STANDARD_MODULE_HEADER_EX, - NULL, - date_deps, - "date", /* extension name */ - date_functions, /* function list */ - PHP_MINIT(date), /* process startup */ - PHP_MSHUTDOWN(date), /* process shutdown */ - PHP_RINIT(date), /* request startup */ - PHP_RSHUTDOWN(date), /* request shutdown */ - PHP_MINFO(date), /* extension info */ - PHP_VERSION, /* extension version */ - PHP_MODULE_GLOBALS(date), /* globals descriptor */ - PHP_GINIT(date), /* globals ctor */ - NULL, /* globals dtor */ - NULL, /* post deactivate */ - STANDARD_MODULE_PROPERTIES_EX -}; -/* }}} */ - - -/* {{{ PHP_GINIT_FUNCTION */ -static PHP_GINIT_FUNCTION(date) -{ - date_globals->default_timezone = NULL; - date_globals->timezone = NULL; -} -/* }}} */ - - -static void _php_date_tzinfo_dtor(void *tzinfo) -{ - timelib_tzinfo **tzi = (timelib_tzinfo **)tzinfo; - - timelib_tzinfo_dtor(*tzi); -} - -/* {{{ PHP_RINIT_FUNCTION */ -PHP_RINIT_FUNCTION(date) -{ - if (DATEG(timezone)) { - efree(DATEG(timezone)); - } - DATEG(timezone) = NULL; - zend_hash_init(&DATEG(tzcache), 4, NULL, _php_date_tzinfo_dtor, 0); - - return SUCCESS; -} -/* }}} */ - -/* {{{ PHP_RSHUTDOWN_FUNCTION */ -PHP_RSHUTDOWN_FUNCTION(date) -{ - if (DATEG(timezone)) { - efree(DATEG(timezone)); - } - DATEG(timezone) = NULL; - zend_hash_destroy(&DATEG(tzcache)); - - return SUCCESS; -} -/* }}} */ - -#define DATE_TIMEZONEDB php_date_global_timezone_db ? php_date_global_timezone_db : timelib_builtin_db() - -/* - * RFC822, Section 5.1: http://www.ietf.org/rfc/rfc822.txt - * date-time = [ day "," ] date time ; dd mm yy hh:mm:ss zzz - * day = "Mon" / "Tue" / "Wed" / "Thu" / "Fri" / "Sat" / "Sun" - * date = 1*2DIGIT month 2DIGIT ; day month year e.g. 20 Jun 82 - * month = "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" / "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec" - * time = hour zone ; ANSI and Military - * hour = 2DIGIT ":" 2DIGIT [":" 2DIGIT] ; 00:00:00 - 23:59:59 - * zone = "UT" / "GMT" / "EST" / "EDT" / "CST" / "CDT" / "MST" / "MDT" / "PST" / "PDT" / 1ALPHA / ( ("+" / "-") 4DIGIT ) - */ -#define DATE_FORMAT_RFC822 "D, d M y H:i:s O" - -/* - * RFC850, Section 2.1.4: http://www.ietf.org/rfc/rfc850.txt - * Format must be acceptable both to the ARPANET and to the getdate routine. - * One format that is acceptable to both is Weekday, DD-Mon-YY HH:MM:SS TIMEZONE - * TIMEZONE can be any timezone name (3 or more letters) - */ -#define DATE_FORMAT_RFC850 "l, d-M-y H:i:s T" - -/* - * RFC1036, Section 2.1.2: http://www.ietf.org/rfc/rfc1036.txt - * Its format must be acceptable both in RFC-822 and to the getdate(3) - * Wdy, DD Mon YY HH:MM:SS TIMEZONE - * There is no hope of having a complete list of timezones. Universal - * Time (GMT), the North American timezones (PST, PDT, MST, MDT, CST, - * CDT, EST, EDT) and the +/-hhmm offset specifed in RFC-822 should be supported. - */ -#define DATE_FORMAT_RFC1036 "D, d M y H:i:s O" - -/* - * RFC1123, Section 5.2.14: http://www.ietf.org/rfc/rfc1123.txt - * RFC-822 Date and Time Specification: RFC-822 Section 5 - * The syntax for the date is hereby changed to: date = 1*2DIGIT month 2*4DIGIT - */ -#define DATE_FORMAT_RFC1123 "D, d M Y H:i:s O" - -/* - * RFC2822, Section 3.3: http://www.ietf.org/rfc/rfc2822.txt - * FWS = ([*WSP CRLF] 1*WSP) / ; Folding white space - * CFWS = *([FWS] comment) (([FWS] comment) / FWS) - * - * date-time = [ day-of-week "," ] date FWS time [CFWS] - * day-of-week = ([FWS] day-name) - * day-name = "Mon" / "Tue" / "Wed" / "Thu" / "Fri" / "Sat" / "Sun" - * date = day month year - * year = 4*DIGIT - * month = (FWS month-name FWS) - * month-name = "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" / "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec" - * day = ([FWS] 1*2DIGIT) - * time = time-of-day FWS zone - * time-of-day = hour ":" minute [ ":" second ] - * hour = 2DIGIT - * minute = 2DIGIT - * second = 2DIGIT - * zone = (( "+" / "-" ) 4DIGIT) - */ -#define DATE_FORMAT_RFC2822 "D, d M Y H:i:s O" -/* - * RFC3339, Section 5.6: http://www.ietf.org/rfc/rfc3339.txt - * date-fullyear = 4DIGIT - * date-month = 2DIGIT ; 01-12 - * date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on month/year - * - * time-hour = 2DIGIT ; 00-23 - * time-minute = 2DIGIT ; 00-59 - * time-second = 2DIGIT ; 00-58, 00-59, 00-60 based on leap second rules - * - * time-secfrac = "." 1*DIGIT - * time-numoffset = ("+" / "-") time-hour ":" time-minute - * time-offset = "Z" / time-numoffset - * - * partial-time = time-hour ":" time-minute ":" time-second [time-secfrac] - * full-date = date-fullyear "-" date-month "-" date-mday - * full-time = partial-time time-offset - * - * date-time = full-date "T" full-time - */ -#define DATE_FORMAT_RFC3339 "Y-m-d\\TH:i:sP" - -#define DATE_FORMAT_ISO8601 "Y-m-d\\TH:i:sO" - -#define DATE_TZ_ERRMSG \ - "It is not safe to rely on the system's timezone settings. Please use " \ - "the date.timezone setting, the TZ environment variable or the " \ - "date_default_timezone_set() function. In case you used any of those " \ - "methods and you are still getting this warning, you most likely " \ - "misspelled the timezone identifier. " - -#define SUNFUNCS_RET_TIMESTAMP 0 -#define SUNFUNCS_RET_STRING 1 -#define SUNFUNCS_RET_DOUBLE 2 - - -/* {{{ PHP_MINIT_FUNCTION */ -PHP_MINIT_FUNCTION(date) -{ - REGISTER_INI_ENTRIES(); - - date_register_classes(TSRMLS_C); - -/* - * RFC4287, Section 3.3: http://www.ietf.org/rfc/rfc4287.txt - * A Date construct is an element whose content MUST conform to the - * "date-time" production in [RFC3339]. In addition, an uppercase "T" - * character MUST be used to separate date and time, and an uppercase - * "Z" character MUST be present in the absence of a numeric time zone offset. - */ - REGISTER_STRING_CONSTANT("DATE_ATOM", DATE_FORMAT_RFC3339, CONST_CS | CONST_PERSISTENT); -/* - * Preliminary specification: http://wp.netscape.com/newsref/std/cookie_spec.html - * "This is based on RFC 822, RFC 850, RFC 1036, and RFC 1123, - * with the variations that the only legal time zone is GMT - * and the separators between the elements of the date must be dashes." - */ - REGISTER_STRING_CONSTANT("DATE_COOKIE", DATE_FORMAT_RFC850, CONST_CS | CONST_PERSISTENT); - REGISTER_STRING_CONSTANT("DATE_ISO8601", DATE_FORMAT_ISO8601, CONST_CS | CONST_PERSISTENT); - REGISTER_STRING_CONSTANT("DATE_RFC822", DATE_FORMAT_RFC822, CONST_CS | CONST_PERSISTENT); - REGISTER_STRING_CONSTANT("DATE_RFC850", DATE_FORMAT_RFC850, CONST_CS | CONST_PERSISTENT); - REGISTER_STRING_CONSTANT("DATE_RFC1036", DATE_FORMAT_RFC1036, CONST_CS | CONST_PERSISTENT); - REGISTER_STRING_CONSTANT("DATE_RFC1123", DATE_FORMAT_RFC1123, CONST_CS | CONST_PERSISTENT); - REGISTER_STRING_CONSTANT("DATE_RFC2822", DATE_FORMAT_RFC2822, CONST_CS | CONST_PERSISTENT); - REGISTER_STRING_CONSTANT("DATE_RFC3339", DATE_FORMAT_RFC3339, CONST_CS | CONST_PERSISTENT); -/* - * RSS 2.0 Specification: http://blogs.law.harvard.edu/tech/rss - * "All date-times in RSS conform to the Date and Time Specification of RFC 822, - * with the exception that the year may be expressed with two characters or four characters (four preferred)" - */ - REGISTER_STRING_CONSTANT("DATE_RSS", DATE_FORMAT_RFC1123, CONST_CS | CONST_PERSISTENT); - REGISTER_STRING_CONSTANT("DATE_W3C", DATE_FORMAT_RFC3339, CONST_CS | CONST_PERSISTENT); - - REGISTER_LONG_CONSTANT("SUNFUNCS_RET_TIMESTAMP", SUNFUNCS_RET_TIMESTAMP, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SUNFUNCS_RET_STRING", SUNFUNCS_RET_STRING, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SUNFUNCS_RET_DOUBLE", SUNFUNCS_RET_DOUBLE, CONST_CS | CONST_PERSISTENT); - - php_date_global_timezone_db = NULL; - php_date_global_timezone_db_enabled = 0; - - return SUCCESS; -} -/* }}} */ - -/* {{{ PHP_MSHUTDOWN_FUNCTION */ -PHP_MSHUTDOWN_FUNCTION(date) -{ - UNREGISTER_INI_ENTRIES(); - - return SUCCESS; -} -/* }}} */ - -/* {{{ PHP_MINFO_FUNCTION */ -PHP_MINFO_FUNCTION(date) -{ - const timelib_tzdb *tzdb = DATE_TIMEZONEDB; - - php_info_print_table_start(); - php_info_print_table_row(2, "date/time support", "enabled"); - php_info_print_table_row(2, "\"Olson\" Timezone Database Version", tzdb->version); - php_info_print_table_row(2, "Timezone Database", php_date_global_timezone_db_enabled ? "external" : "internal"); - php_info_print_table_row(2, "Default timezone", guess_timezone(tzdb TSRMLS_CC)); - php_info_print_table_end(); - - DISPLAY_INI_ENTRIES(); -} -/* }}} */ - -/* {{{ Timezone Cache functions */ -static timelib_tzinfo *php_date_parse_tzfile(char *formal_tzname, const timelib_tzdb *tzdb TSRMLS_DC) -{ - timelib_tzinfo *tzi, **ptzi; - - if (zend_hash_find(&DATEG(tzcache), formal_tzname, strlen(formal_tzname) + 1, (void **) &ptzi) == SUCCESS) { - return *ptzi; - } - - tzi = timelib_parse_tzfile(formal_tzname, tzdb); - if (tzi) { - zend_hash_add(&DATEG(tzcache), formal_tzname, strlen(formal_tzname) + 1, (void *) &tzi, sizeof(timelib_tzinfo*), NULL); - } - return tzi; -} -/* }}} */ - -/* {{{ Helper functions */ -static char* guess_timezone(const timelib_tzdb *tzdb TSRMLS_DC) -{ - char *env; - - /* Checking configure timezone */ - if (DATEG(timezone) && (strlen(DATEG(timezone)) > 0)) { - return DATEG(timezone); - } - /* Check environment variable */ - env = getenv("TZ"); - if (env && *env && timelib_timezone_id_is_valid(env, tzdb)) { - return env; - } - /* Check config setting for default timezone */ - if (DATEG(default_timezone) && (strlen(DATEG(default_timezone)) > 0) && timelib_timezone_id_is_valid(DATEG(default_timezone), tzdb)) { - return DATEG(default_timezone); - } -#if HAVE_TM_ZONE - /* Try to guess timezone from system information */ - { - struct tm *ta, tmbuf; - time_t the_time; - char *tzid; - - the_time = time(NULL); - ta = php_localtime_r(&the_time, &tmbuf); - tzid = timelib_timezone_id_from_abbr(ta->tm_zone, ta->tm_gmtoff, ta->tm_isdst); - if (! tzid) { - tzid = "UTC"; - } - - php_error_docref(NULL TSRMLS_CC, E_STRICT, DATE_TZ_ERRMSG "We selected '%s' for '%s/%.1f/%s' instead", tzid, ta->tm_zone, (float) (ta->tm_gmtoff / 3600), ta->tm_isdst ? "DST" : "no DST"); - return tzid; - } -#endif -#ifdef PHP_WIN32 - { - char *tzid; - TIME_ZONE_INFORMATION tzi; - - switch (GetTimeZoneInformation(&tzi)) - { - /* no DST or not in effect */ - case TIME_ZONE_ID_UNKNOWN: - case TIME_ZONE_ID_STANDARD: -php_win_std_time: - tzid = timelib_timezone_id_from_abbr("", (tzi.Bias + tzi.StandardBias) * -60, 0); - if (! tzid) { - tzid = "UTC"; - } - php_error_docref(NULL TSRMLS_CC, E_STRICT, DATE_TZ_ERRMSG "We selected '%s' for '%.1f/no DST' instead", tzid, ((tzi.Bias + tzi.StandardBias) / -60.0)); - break; - - /* DST in effect */ - case TIME_ZONE_ID_DAYLIGHT: - /* If user has disabled DST in the control panel, Windows returns 0 here */ - if (tzi.DaylightBias == 0) { - goto php_win_std_time; - } - - tzid = timelib_timezone_id_from_abbr("", (tzi.Bias + tzi.DaylightBias) * -60, 1); - if (! tzid) { - tzid = "UTC"; - } - php_error_docref(NULL TSRMLS_CC, E_STRICT, DATE_TZ_ERRMSG "We selected '%s' for '%.1f/DST' instead", tzid, ((tzi.Bias + tzi.DaylightBias) / -60.0)); - break; - } - return tzid; - } -#elif defined(NETWARE) - /* Try to guess timezone from system information */ - { - char *tzid = timelib_timezone_id_from_abbr("", ((_timezone * -1) + (daylightOffset * daylightOnOff)), daylightOnOff); - if (tzid) { - return tzid; - } - } -#endif - /* Fallback to UTC */ - php_error_docref(NULL TSRMLS_CC, E_WARNING, DATE_TZ_ERRMSG "We had to select 'UTC' because your platform doesn't provide functionality for the guessing algorithm"); - return "UTC"; -} - -PHPAPI timelib_tzinfo *get_timezone_info(TSRMLS_D) -{ - char *tz; - timelib_tzinfo *tzi; - - tz = guess_timezone(DATE_TIMEZONEDB TSRMLS_CC); - tzi = php_date_parse_tzfile(tz, DATE_TIMEZONEDB TSRMLS_CC); - if (! tzi) { - php_error_docref(NULL TSRMLS_CC, E_ERROR, "Timezone database is corrupt - this should *never* happen!"); - } - return tzi; -} -/* }}} */ - - -/* {{{ date() and gmdate() data */ -#include "ext/standard/php_smart_str.h" - -static char *mon_full_names[] = { - "January", "February", "March", "April", - "May", "June", "July", "August", - "September", "October", "November", "December" -}; - -static char *mon_short_names[] = { - "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" -}; - -static char *day_full_names[] = { - "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" -}; - -static char *day_short_names[] = { - "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" -}; - -static char *am_pm_lower_names[] = { "am", "pm" }; -static char *am_pm_upper_names[] = { "AM", "PM" }; - -static char *english_suffix(timelib_sll number) -{ - if (number >= 10 && number <= 19) { - return "th"; - } else { - switch (number % 10) { - case 1: return "st"; - case 2: return "nd"; - case 3: return "rd"; - } - } - return "th"; -} -/* }}} */ - -/* {{{ day of week helpers */ -char *php_date_full_day_name(timelib_sll y, timelib_sll m, timelib_sll d) -{ - timelib_sll day_of_week = timelib_day_of_week(y, m, d); - if (day_of_week < 0) { - return "Unknown"; - } - return day_full_names[day_of_week]; -} - -char *php_date_short_day_name(timelib_sll y, timelib_sll m, timelib_sll d) -{ - timelib_sll day_of_week = timelib_day_of_week(y, m, d); - if (day_of_week < 0) { - return "Unknown"; - } - return day_short_names[day_of_week]; -} -/* }}} */ - -/* {{{ date_format - (gm)date helper */ - -typedef struct { - int day_shortname_lengths[7]; - int day_fullname_lengths[7]; - int month_shortname_lengths[12]; - int month_fullname_lengths[12]; - int am_pm_lenghts[2]; - - char* day_shortname[7]; - char* day_fullname[7]; - char* month_shortname[12]; - char* month_fullname[12]; - char* am_pm_name[2]; -} php_locale_data; - -static const UChar sLongPat [] = { 0x004D, 0x004D, 0x004D, 0x004D, 0x0020, - 0x0079, 0x0079, 0x0079, 0x0079 }; - - -#define DATE_LOC_READ(type, var, cor) \ - count = udat_countSymbols(fmt, (type)); \ - for (i = 0 - (cor); i < count; i++) { \ - array[i] = (UChar *) malloc(sizeof(UChar) * 15); \ - \ - status = U_ZERO_ERROR; \ - j = udat_getSymbols(fmt, (type), i, array[i], 15, &status); \ - \ - tmp->var[i + (cor)] = (char*)array[i]; \ - } - -static php_locale_data* date_get_locale_data(char *locale) -{ - php_locale_data *tmp = malloc(sizeof(php_locale_data)); - UDateFormat *fmt; - UErrorCode status = 0; - int32_t count, i, j; - UChar *array[15]; - UChar *pat = (UChar*)sLongPat; - int32_t len = 9; - - fmt = udat_open(UDAT_IGNORE,UDAT_IGNORE, locale, NULL, 0, pat, len, &status); - - DATE_LOC_READ(UDAT_WEEKDAYS, day_fullname, -1); - DATE_LOC_READ(UDAT_SHORT_WEEKDAYS, day_shortname, -1); - DATE_LOC_READ(UDAT_MONTHS, month_fullname, 0); - DATE_LOC_READ(UDAT_SHORT_MONTHS, month_shortname, 0); - DATE_LOC_READ(UDAT_AM_PMS, am_pm_name, 0); - - udat_close(fmt); - - return tmp; -} - -static void date_free_locale_data(php_locale_data *data) -{ - int i; - for (i = 0; i < 7; ++i) { - free(data->day_shortname[i]); - free(data->day_fullname[i]); - } - for (i = 0; i < 12; ++i) { - free(data->month_shortname[i]); - free(data->month_fullname[i]); - } - free(data->am_pm_name[0]); - free(data->am_pm_name[1]); - free(data); -} - -static inline int date_spprintf(char **str, size_t size TSRMLS_DC, const char *format, ...) -{ - int c; - va_list ap; - - va_start(ap, format); - - if (UG(unicode)) { - c = vuspprintf((UChar**)str, size, format, ap) * sizeof(UChar); - } else { - c = vspprintf(str, size, format, ap); - } - va_end(ap); - return c; -} - -#define dayname_short(s,l) s < 0 ? "Unknown" : (l ? loc_dat->day_shortname[s] : day_short_names[s]) -#define dayname_full(s,l) s < 0 ? "Unknown" : (l ? loc_dat->day_fullname[s] : day_full_names[s]) -#define monthname_short(s,l) l ? loc_dat->month_shortname[s] : mon_short_names[s] -#define monthname_full(s,l) l ? loc_dat->month_fullname[s] : mon_full_names[s] -#define am_pm_lower_full(s,l) l ? loc_dat->am_pm_name[s] : am_pm_lower_names[s] -#define am_pm_upper_full(s,l) l ? loc_dat->am_pm_name[s] : am_pm_upper_names[s] - -static char *date_format(char *format, int format_len, int *return_len, timelib_time *t, int localtime, int localized TSRMLS_DC) -{ - smart_str string = {0}; - int i, no_free, length; - char *buffer; - timelib_time_offset *offset = NULL; - timelib_sll isoweek, isoyear; - php_locale_data *loc_dat; - int rfc_colon = 0; - - if (!format_len) { - if (UG(unicode)) { - return (char*)eustrdup(EMPTY_STR); - } else { - return estrdup(""); - } - } - - loc_dat = date_get_locale_data(UG(default_locale)); - - if (localtime) { - if (t->zone_type == TIMELIB_ZONETYPE_ABBR) { - offset = timelib_time_offset_ctor(); - offset->offset = (t->z - (t->dst * 60)) * -60; - offset->leap_secs = 0; - offset->is_dst = t->dst; - offset->abbr = strdup(t->tz_abbr); - } else if (t->zone_type == TIMELIB_ZONETYPE_OFFSET) { - offset = timelib_time_offset_ctor(); - offset->offset = (t->z - (t->dst * 60)) * -60; - offset->leap_secs = 0; - offset->is_dst = t->dst; - offset->abbr = malloc(9); /* GMT±xxxx\0 */ - snprintf(offset->abbr, 9, "GMT%c%02d%02d", - localtime ? ((offset->offset < 0) ? '-' : '+') : '+', - localtime ? abs(offset->offset / 3600) : 0, - localtime ? abs((offset->offset % 3600) / 60) : 0 ); - } else { - offset = timelib_get_time_zone_info(t->sse, t->tz_info); - } - } - timelib_isoweek_from_date(t->y, t->m, t->d, &isoweek, &isoyear); - - for (i = 0; i < format_len; i++) { - no_free = 0; - switch (format[i]) { - /* day */ - case 'd': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%02d", (int) t->d); break; - case 'D': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%R", localized ? IS_UNICODE : IS_STRING, dayname_short(timelib_day_of_week(t->y, t->m, t->d), localized)); break; - case 'j': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%d", (int) t->d); break; - case 'l': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%R", localized ? IS_UNICODE : IS_STRING, dayname_full(timelib_day_of_week(t->y, t->m, t->d), localized)); break; - case 'S': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%s", english_suffix(t->d)); break; - case 'w': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%d", (int) timelib_day_of_week(t->y, t->m, t->d)); break; - case 'N': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%d", (int) timelib_iso_day_of_week(t->y, t->m, t->d)); break; - case 'z': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%d", (int) timelib_day_of_year(t->y, t->m, t->d)); break; - - /* week */ - case 'W': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%02d", (int) isoweek); break; /* iso weeknr */ - case 'o': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%d", (int) isoyear); break; /* iso year */ - - /* month */ - case 'F': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%R", localized ? IS_UNICODE : IS_STRING, monthname_full(t->m - 1, localized)); break; - case 'm': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%02d", (int) t->m); break; - case 'M': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%R", localized ? IS_UNICODE : IS_STRING, monthname_short(t->m - 1, localized)); break; - case 'n': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%d", (int) t->m); break; - case 't': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%d", (int) timelib_days_in_month(t->y, t->m)); break; - - /* year */ - case 'L': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%d", timelib_is_leap((int) t->y)); break; - case 'y': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%02d", (int) t->y % 100); break; - case 'Y': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%04d", (int) t->y); break; - - /* time */ - case 'a': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%R", localized ? IS_UNICODE : IS_STRING, am_pm_lower_full(t->h >= 12 ? 1 : 0, localized)); break; - case 'A': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%R", localized ? IS_UNICODE : IS_STRING, am_pm_upper_full(t->h >= 12 ? 1 : 0, localized)); break; - case 'B': { - int retval = (((((long)t->sse)-(((long)t->sse) - ((((long)t->sse) % 86400) + 3600))) * 10) / 864); - while (retval < 0) { - retval += 1000; - } - retval = retval % 1000; - length = date_spprintf(&buffer, 32 TSRMLS_CC, "%03d", retval); - break; - } - case 'g': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%d", (t->h % 12) ? (int) t->h % 12 : 12); break; - case 'G': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%d", (int) t->h); break; - case 'h': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%02d", (t->h % 12) ? (int) t->h % 12 : 12); break; - case 'H': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%02d", (int) t->h); break; - case 'i': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%02d", (int) t->i); break; - case 's': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%02d", (int) t->s); break; - - /* timezone */ - case 'I': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%d", localtime ? offset->is_dst : 0); break; - case 'P': rfc_colon = 1; /* break intentionally missing */ - case 'O': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%c%02d%s%02d", - localtime ? ((offset->offset < 0) ? '-' : '+') : '+', - localtime ? abs(offset->offset / 3600) : 0, - rfc_colon ? ":" : "", - localtime ? abs((offset->offset % 3600) / 60) : 0 - ); - break; - case 'T': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%s", localtime ? offset->abbr : "GMT"); break; - case 'e': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%s", localtime ? t->tz_info->name : "UTC"); break; - case 'Z': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%d", localtime ? offset->offset : 0); break; - - /* full date/time */ - case 'c': length = date_spprintf(&buffer, 96 TSRMLS_CC, "%04d-%02d-%02dT%02d:%02d:%02d%c%02d:%02d", - (int) t->y, (int) t->m, (int) t->d, - (int) t->h, (int) t->i, (int) t->s, - localtime ? ((offset->offset < 0) ? '-' : '+') : '+', - localtime ? abs(offset->offset / 3600) : 0, - localtime ? abs((offset->offset % 3600) / 60) : 0 - ); - break; - case 'r': length = date_spprintf(&buffer, 96 TSRMLS_CC, "%3s, %02d %3s %04d %02d:%02d:%02d %c%02d%02d", - php_date_short_day_name(t->y, t->m, t->d), - (int) t->d, mon_short_names[t->m - 1], - (int) t->y, (int) t->h, (int) t->i, (int) t->s, - localtime ? ((offset->offset < 0) ? '-' : '+') : '+', - localtime ? abs(offset->offset / 3600) : 0, - localtime ? abs((offset->offset % 3600) / 60) : 0 - ); - break; - case 'U': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%lld", (timelib_sll) t->sse); break; - - case '\\': if (i < format_len) i++; length = date_spprintf(&buffer, 32 TSRMLS_CC, "%c", format[i]); break; - - default: length = date_spprintf(&buffer, 32 TSRMLS_CC, "%c", format[i]); - break; - } - smart_str_appendl(&string, buffer, length); - if (!no_free) { - efree(buffer); - } - } - - smart_str_0(&string); - date_free_locale_data(loc_dat); - - if (localtime) { - timelib_time_offset_dtor(offset); - } - - if (UG(unicode)) { - *return_len = string.len / 2; - } else { - *return_len = string.len; - } - return string.c; -} - -static void php_date(INTERNAL_FUNCTION_PARAMETERS, int localtime) -{ - char *format; - int format_len; - long ts; - char *string; - - if (ZEND_NUM_ARGS() == 1) { - ts = time(NULL); - } - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &format, &format_len, &ts) == FAILURE) { - RETURN_FALSE; - } - - string = php_format_date(format, format_len, ts, localtime TSRMLS_CC); - - if (UG(unicode)) { - RETVAL_UNICODE((UChar*)string, 0); - } else { - RETVAL_STRING(string, 0); - } -} -/* }}} */ - -PHPAPI char *php_format_date(char *format, int format_len, time_t ts, int localtime TSRMLS_DC) /* {{{ */ -{ - timelib_time *t; - timelib_tzinfo *tzi; - char *string; - int return_len; - - t = timelib_time_ctor(); - - if (localtime) { - tzi = get_timezone_info(TSRMLS_C); - t->tz_info = tzi; - t->zone_type = TIMELIB_ZONETYPE_ID; - timelib_unixtime2local(t, ts); - } else { - tzi = NULL; - timelib_unixtime2gmt(t, ts); - } - - string = date_format(format, format_len, &return_len, t, localtime, 0 TSRMLS_CC); - - timelib_time_dtor(t); - return string; -} -/* }}} */ - -/* {{{ php_idate - */ -PHPAPI int php_idate(char format, time_t ts, int localtime) -{ - timelib_time *t; - timelib_tzinfo *tzi; - int retval = -1; - timelib_time_offset *offset = NULL; - timelib_sll isoweek, isoyear; - - t = timelib_time_ctor(); - - if (!localtime) { - TSRMLS_FETCH(); - tzi = get_timezone_info(TSRMLS_C); - t->tz_info = tzi; - t->zone_type = TIMELIB_ZONETYPE_ID; - timelib_unixtime2local(t, ts); - } else { - tzi = NULL; - timelib_unixtime2gmt(t, ts); - } - - if (!localtime) { - if (t->zone_type == TIMELIB_ZONETYPE_ABBR) { - offset = timelib_time_offset_ctor(); - offset->offset = (t->z - (t->dst * 60)) * -60; - offset->leap_secs = 0; - offset->is_dst = t->dst; - offset->abbr = strdup(t->tz_abbr); - } else if (t->zone_type == TIMELIB_ZONETYPE_OFFSET) { - offset = timelib_time_offset_ctor(); - offset->offset = (t->z - (t->dst * 60)) * -60; - offset->leap_secs = 0; - offset->is_dst = t->dst; - offset->abbr = malloc(9); /* GMT±xxxx\0 */ - snprintf(offset->abbr, 9, "GMT%c%02d%02d", - !localtime ? ((offset->offset < 0) ? '-' : '+') : '+', - !localtime ? abs(offset->offset / 3600) : 0, - !localtime ? abs((offset->offset % 3600) / 60) : 0 ); - } else { - offset = timelib_get_time_zone_info(t->sse, t->tz_info); - } - } - - timelib_isoweek_from_date(t->y, t->m, t->d, &isoweek, &isoyear); - - switch (format) { - /* day */ - case 'd': case 'j': retval = (int) t->d; break; - - case 'w': retval = (int) timelib_day_of_week(t->y, t->m, t->d); break; - case 'z': retval = (int) timelib_day_of_year(t->y, t->m, t->d); break; - - /* week */ - case 'W': retval = (int) isoweek; break; /* iso weeknr */ - - /* month */ - case 'm': case 'n': retval = (int) t->m; break; - case 't': retval = (int) timelib_days_in_month(t->y, t->m); break; - - /* year */ - case 'L': retval = (int) timelib_is_leap((int) t->y); break; - case 'y': retval = (int) (t->y % 100); break; - case 'Y': retval = (int) t->y; break; - - /* Swatch Beat a.k.a. Internet Time */ - case 'B': - retval = (((((long)t->sse)-(((long)t->sse) - ((((long)t->sse) % 86400) + 3600))) * 10) / 864); - while (retval < 0) { - retval += 1000; - } - retval = retval % 1000; - break; - - /* time */ - case 'g': case 'h': retval = (int) ((t->h % 12) ? (int) t->h % 12 : 12); break; - case 'H': case 'G': retval = (int) t->h; break; - case 'i': retval = (int) t->i; break; - case 's': retval = (int) t->s; break; - - /* timezone */ - case 'I': retval = (int) (!localtime ? offset->is_dst : 0); break; - case 'Z': retval = (int) (!localtime ? offset->offset : 0); break; - - case 'U': retval = (int) t->sse; break; - } - - if (!localtime) { - timelib_time_offset_dtor(offset); - } - timelib_time_dtor(t); - - return retval; -} -/* }}} */ - -/* {{{ proto string date(string format [, long timestamp]) - Format a local date/time */ -PHP_FUNCTION(date) -{ - php_date(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); -} -/* }}} */ - -/* {{{ proto string gmdate(string format [, long timestamp]) - Format a GMT date/time */ -PHP_FUNCTION(gmdate) -{ - php_date(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); -} -/* }}} */ - -/* {{{ proto int idate(string format [, int timestamp]) - Format a local time/date as integer */ -PHP_FUNCTION(idate) -{ - char *format; - int format_len; - long ts; - int ret; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &format, &format_len, &ts) == FAILURE) { - RETURN_FALSE; - } - - if (format_len != 1) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "idate format is one char"); - RETURN_FALSE; - } - - if (ZEND_NUM_ARGS() == 1) { - ts = time(NULL); - } - - ret = php_idate(format[0], ts, 0); - if (ret == -1) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unrecognized date format token"); - RETURN_FALSE; - } - RETURN_LONG(ret); -} -/* }}} */ - -/* {{{ php_date_set_tzdb - NOT THREADSAFE */ -PHPAPI void php_date_set_tzdb(timelib_tzdb *tzdb) -{ - const timelib_tzdb *builtin = timelib_builtin_db(); - - if (php_version_compare(tzdb->version, builtin->version) > 0) { - php_date_global_timezone_db = tzdb; - php_date_global_timezone_db_enabled = 1; - } -} -/* }}} */ - -/* {{{ php_parse_date: Backwards compability function */ -PHPAPI signed long php_parse_date(char *string, signed long *now) -{ - timelib_time *parsed_time; - int error2; - signed long retval; - - parsed_time = timelib_strtotime(string, strlen(string), NULL, DATE_TIMEZONEDB); - timelib_update_ts(parsed_time, NULL); - retval = timelib_date_to_int(parsed_time, &error2); - timelib_time_dtor(parsed_time); - if (error2) { - return -1; - } - return retval; -} -/* }}} */ - - -/* {{{ proto int strtotime(string time [, int now ]) - Convert string representation of date and time to a timestamp */ -PHP_FUNCTION(strtotime) -{ - char *times, *initial_ts; - int time_len, error1, error2; - struct timelib_error_container *error; - long preset_ts, ts; - - timelib_time *t, *now; - timelib_tzinfo *tzi; - - tzi = get_timezone_info(TSRMLS_C); - - if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "sl", ×, &time_len, &preset_ts) != FAILURE) { - /* We have an initial timestamp */ - now = timelib_time_ctor(); - - initial_ts = emalloc(25); - snprintf(initial_ts, 24, "@%ld", preset_ts); - t = timelib_strtotime(initial_ts, strlen(initial_ts), NULL, DATE_TIMEZONEDB); /* we ignore the error here, as this should never fail */ - timelib_update_ts(t, tzi); - now->tz_info = tzi; - now->zone_type = TIMELIB_ZONETYPE_ID; - timelib_unixtime2local(now, t->sse); - timelib_time_dtor(t); - efree(initial_ts); - } else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", ×, &time_len, &preset_ts) != FAILURE) { - /* We have no initial timestamp */ - now = timelib_time_ctor(); - now->tz_info = tzi; - now->zone_type = TIMELIB_ZONETYPE_ID; - timelib_unixtime2local(now, (timelib_sll) time(NULL)); - } else { - RETURN_FALSE; - } - - if (!time_len) { - timelib_time_dtor(now); - RETURN_FALSE; - } - - t = timelib_strtotime(times, time_len, &error, DATE_TIMEZONEDB); - error1 = error->error_count; - timelib_error_container_dtor(error); - timelib_fill_holes(t, now, 0); - timelib_update_ts(t, tzi); - ts = timelib_date_to_int(t, &error2); - - /* if tz_info is not a copy, avoid double free */ - if (now->tz_info != tzi && now->tz_info) { - timelib_tzinfo_dtor(now->tz_info); - } - if (t->tz_info != tzi) { - timelib_tzinfo_dtor(t->tz_info); - } - - timelib_time_dtor(now); - timelib_time_dtor(t); - - if (error1 || error2) { - RETURN_FALSE; - } else { - RETURN_LONG(ts); - } -} -/* }}} */ - - -/* {{{ php_mktime - (gm)mktime helper */ -PHPAPI void php_mktime(INTERNAL_FUNCTION_PARAMETERS, int gmt) -{ - long hou, min, sec, mon, day, yea, dst = -1; - timelib_time *now; - timelib_tzinfo *tzi = NULL; - long ts, adjust_seconds = 0; - int error; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lllllll", &hou, &min, &sec, &mon, &day, &yea, &dst) == FAILURE) { - RETURN_FALSE; - } - /* Initialize structure with current time */ - now = timelib_time_ctor(); - if (gmt) { - timelib_unixtime2gmt(now, (timelib_sll) time(NULL)); - } else { - tzi = get_timezone_info(TSRMLS_C); - now->tz_info = tzi; - now->zone_type = TIMELIB_ZONETYPE_ID; - timelib_unixtime2local(now, (timelib_sll) time(NULL)); - } - /* Fill in the new data */ - switch (ZEND_NUM_ARGS()) { - case 7: - /* break intentionally missing */ - case 6: - if (yea >= 0 && yea < 70) { - yea += 2000; - } else if (yea >= 70 && yea <= 110) { - yea += 1900; - } - now->y = yea; - /* break intentionally missing again */ - case 5: - now->d = day; - /* break missing intentionally here too */ - case 4: - now->m = mon; - /* and here */ - case 3: - now->s = sec; - /* yup, this break isn't here on purpose too */ - case 2: - now->i = min; - /* last intentionally missing break */ - case 1: - now->h = hou; - break; - default: - php_error_docref(NULL TSRMLS_CC, E_STRICT, "You should be using the time() function instead"); - } - /* Update the timestamp */ - if (gmt) { - timelib_update_ts(now, NULL); - } else { - timelib_update_ts(now, tzi); - } - /* Support for the deprecated is_dst parameter */ - if (dst != -1) { - php_error_docref(NULL TSRMLS_CC, E_STRICT, "The is_dst parameter is deprecated"); - if (gmt) { - /* GMT never uses DST */ - if (dst == 1) { - adjust_seconds = -3600; - } - } else { - /* Figure out is_dst for current TS */ - timelib_time_offset *tmp_offset; - tmp_offset = timelib_get_time_zone_info(now->sse, tzi); - if (dst == 1 && tmp_offset->is_dst == 0) { - adjust_seconds = -3600; - } - if (dst == 0 && tmp_offset->is_dst == 1) { - adjust_seconds = +3600; - } - timelib_time_offset_dtor(tmp_offset); - } - } - /* Clean up and return */ - ts = timelib_date_to_int(now, &error); - ts += adjust_seconds; - timelib_time_dtor(now); - - if (error) { - RETURN_FALSE; - } else { - RETURN_LONG(ts); - } -} -/* }}} */ - -/* {{{ proto int mktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]]) - Get UNIX timestamp for a date */ -PHP_FUNCTION(mktime) -{ - php_mktime(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); -} -/* }}} */ - -/* {{{ proto int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]]) - Get UNIX timestamp for a GMT date */ -PHP_FUNCTION(gmmktime) -{ - php_mktime(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); -} -/* }}} */ - - -/* {{{ proto bool checkdate(int month, int day, int year) - Returns true(1) if it is a valid date in gregorian calendar */ -PHP_FUNCTION(checkdate) -{ - long m, d, y; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &m, &d, &y) == FAILURE) { - RETURN_FALSE; - } - - if (y < 1 || y > 32767 || m < 1 || m > 12 || d < 1 || d > timelib_days_in_month(y, m)) { - RETURN_FALSE; - } - RETURN_TRUE; /* True : This month, day, year arguments are valid */ -} -/* }}} */ - -#ifdef HAVE_STRFTIME -/* {{{ php_strftime - (gm)strftime helper */ -PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gmt) -{ - char *format, *buf; - int format_len; - long timestamp; - struct tm ta; - int max_reallocs = 5; - size_t buf_len = 64, real_len; - timelib_time *ts; - timelib_tzinfo *tzi; - timelib_time_offset *offset = NULL; - - timestamp = (long) time(NULL); - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &format, &format_len, ×tamp) == FAILURE) { - RETURN_FALSE; - } - - if (format_len == 0) { - RETURN_FALSE; - } - - ts = timelib_time_ctor(); - if (gmt) { - tzi = NULL; - timelib_unixtime2gmt(ts, (timelib_sll) timestamp); - } else { - tzi = get_timezone_info(TSRMLS_C); - ts->tz_info = tzi; - ts->zone_type = TIMELIB_ZONETYPE_ID; - timelib_unixtime2local(ts, (timelib_sll) timestamp); - } - ta.tm_sec = ts->s; - ta.tm_min = ts->i; - ta.tm_hour = ts->h; - ta.tm_mday = ts->d; - ta.tm_mon = ts->m - 1; - ta.tm_year = ts->y - 1900; - ta.tm_wday = timelib_day_of_week(ts->y, ts->m, ts->d); - ta.tm_yday = timelib_day_of_year(ts->y, ts->m, ts->d); - if (gmt) { - ta.tm_isdst = 0; -#if HAVE_TM_GMTOFF - ta.tm_gmtoff = 0; -#endif -#if HAVE_TM_ZONE - ta.tm_zone = "GMT"; -#endif - } else { - offset = timelib_get_time_zone_info(timestamp, tzi); - - ta.tm_isdst = offset->is_dst; -#if HAVE_TM_GMTOFF - ta.tm_gmtoff = offset->offset; -#endif -#if HAVE_TM_ZONE - ta.tm_zone = offset->abbr; -#endif - } - - buf = (char *) emalloc(buf_len); - while ((real_len=strftime(buf, buf_len, format, &ta))==buf_len || real_len==0) { - buf_len *= 2; - buf = (char *) erealloc(buf, buf_len); - if (!--max_reallocs) { - break; - } - } - - timelib_time_dtor(ts); - if (!gmt) { - timelib_time_offset_dtor(offset); - } - - if (real_len && real_len != buf_len) { - buf = (char *) erealloc(buf, real_len + 1); - if (UG(unicode)) { - RETVAL_RT_STRINGL(buf, real_len, 1); - efree(buf); - return; - } else { - RETURN_STRINGL(buf, real_len, 0); - } - - } - efree(buf); - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto string strftime(string format [, int timestamp]) - Format a local time/date according to locale settings */ -PHP_FUNCTION(strftime) -{ - php_strftime(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); -} -/* }}} */ - -/* {{{ proto string gmstrftime(string format [, int timestamp]) - Format a GMT/UCT time/date according to locale settings */ -PHP_FUNCTION(gmstrftime) -{ - php_strftime(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); -} -/* }}} */ -#endif - -/* {{{ proto int time(void) - Return current UNIX timestamp */ -PHP_FUNCTION(time) -{ - RETURN_LONG((long)time(NULL)); -} -/* }}} */ - -/* {{{ proto array localtime([int timestamp [, bool associative_array]]) - Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array */ -PHP_FUNCTION(localtime) -{ - long timestamp = (long)time(NULL); - zend_bool associative = 0; - timelib_tzinfo *tzi; - timelib_time *ts; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lb", ×tamp, &associative) == FAILURE) { - RETURN_FALSE; - } - - tzi = get_timezone_info(TSRMLS_C); - ts = timelib_time_ctor(); - ts->tz_info = tzi; - ts->zone_type = TIMELIB_ZONETYPE_ID; - timelib_unixtime2local(ts, (timelib_sll) timestamp); - - array_init(return_value); - - if (associative) { - add_ascii_assoc_long(return_value, "tm_sec", ts->s); - add_ascii_assoc_long(return_value, "tm_min", ts->i); - add_ascii_assoc_long(return_value, "tm_hour", ts->h); - add_ascii_assoc_long(return_value, "tm_mday", ts->d); - add_ascii_assoc_long(return_value, "tm_mon", ts->m - 1); - add_ascii_assoc_long(return_value, "tm_year", ts->y - 1900); - add_ascii_assoc_long(return_value, "tm_wday", timelib_day_of_week(ts->y, ts->m, ts->d)); - add_ascii_assoc_long(return_value, "tm_yday", timelib_day_of_year(ts->y, ts->m, ts->d)); - add_ascii_assoc_long(return_value, "tm_isdst", ts->dst); - } else { - add_next_index_long(return_value, ts->s); - add_next_index_long(return_value, ts->i); - add_next_index_long(return_value, ts->h); - add_next_index_long(return_value, ts->d); - add_next_index_long(return_value, ts->m - 1); - add_next_index_long(return_value, ts->y- 1900); - add_next_index_long(return_value, timelib_day_of_week(ts->y, ts->m, ts->d)); - add_next_index_long(return_value, timelib_day_of_year(ts->y, ts->m, ts->d)); - add_next_index_long(return_value, ts->dst); - } - - timelib_time_dtor(ts); -} -/* }}} */ - -/* {{{ proto array getdate([int timestamp]) - Get date/time information */ -PHP_FUNCTION(getdate) -{ - long timestamp = (long)time(NULL); - timelib_tzinfo *tzi; - timelib_time *ts; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", ×tamp) == FAILURE) { - RETURN_FALSE; - } - - tzi = get_timezone_info(TSRMLS_C); - ts = timelib_time_ctor(); - ts->tz_info = tzi; - ts->zone_type = TIMELIB_ZONETYPE_ID; - timelib_unixtime2local(ts, (timelib_sll) timestamp); - - array_init(return_value); - - add_ascii_assoc_long(return_value, "seconds", ts->s); - add_ascii_assoc_long(return_value, "minutes", ts->i); - add_ascii_assoc_long(return_value, "hours", ts->h); - add_ascii_assoc_long(return_value, "mday", ts->d); - add_ascii_assoc_long(return_value, "wday", timelib_day_of_week(ts->y, ts->m, ts->d)); - add_ascii_assoc_long(return_value, "mon", ts->m); - add_ascii_assoc_long(return_value, "year", ts->y); - add_ascii_assoc_long(return_value, "yday", timelib_day_of_year(ts->y, ts->m, ts->d)); - add_ascii_assoc_string(return_value, "weekday", php_date_full_day_name(ts->y, ts->m, ts->d), 1); - add_ascii_assoc_string(return_value, "month", mon_full_names[ts->m - 1], 1); - add_index_long(return_value, 0, timestamp); - - timelib_time_dtor(ts); -} -/* }}} */ - -static void date_register_classes(TSRMLS_D) -{ - zend_class_entry ce_date, ce_timezone; - - INIT_CLASS_ENTRY(ce_date, "DateTime", date_funcs_date); - ce_date.create_object = date_object_new_date; - date_ce_date = zend_register_internal_class_ex(&ce_date, NULL, NULL TSRMLS_CC); - memcpy(&date_object_handlers_date, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); - date_object_handlers_date.clone_obj = date_object_clone_date; - date_object_handlers_date.compare_objects = date_object_compare_date; - -#define REGISTER_DATE_CLASS_CONST_STRING(const_name, value) \ - zend_declare_class_constant_stringl(date_ce_date, const_name, sizeof(const_name)-1, value, sizeof(value)-1 TSRMLS_CC); - - REGISTER_DATE_CLASS_CONST_STRING("ATOM", DATE_FORMAT_RFC3339); - REGISTER_DATE_CLASS_CONST_STRING("COOKIE", DATE_FORMAT_RFC850); - REGISTER_DATE_CLASS_CONST_STRING("ISO8601", DATE_FORMAT_ISO8601); - REGISTER_DATE_CLASS_CONST_STRING("RFC822", DATE_FORMAT_RFC822); - REGISTER_DATE_CLASS_CONST_STRING("RFC850", DATE_FORMAT_RFC850); - REGISTER_DATE_CLASS_CONST_STRING("RFC1036", DATE_FORMAT_RFC1036); - REGISTER_DATE_CLASS_CONST_STRING("RFC1123", DATE_FORMAT_RFC1123); - REGISTER_DATE_CLASS_CONST_STRING("RFC2822", DATE_FORMAT_RFC2822); - REGISTER_DATE_CLASS_CONST_STRING("RFC3339", DATE_FORMAT_RFC3339); - REGISTER_DATE_CLASS_CONST_STRING("RSS", DATE_FORMAT_RFC1123); - REGISTER_DATE_CLASS_CONST_STRING("W3C", DATE_FORMAT_RFC3339); - - - INIT_CLASS_ENTRY(ce_timezone, "DateTimeZone", date_funcs_timezone); - ce_timezone.create_object = date_object_new_timezone; - date_ce_timezone = zend_register_internal_class_ex(&ce_timezone, NULL, NULL TSRMLS_CC); - memcpy(&date_object_handlers_timezone, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); - date_object_handlers_timezone.clone_obj = date_object_clone_timezone; -} - -static inline zend_object_value date_object_new_date_ex(zend_class_entry *class_type, php_date_obj **ptr TSRMLS_DC) -{ - php_date_obj *intern; - zend_object_value retval; - zval *tmp; - - intern = emalloc(sizeof(php_date_obj)); - memset(intern, 0, sizeof(php_date_obj)); - if (ptr) { - *ptr = intern; - } - - zend_object_std_init(&intern->std, class_type TSRMLS_CC); - zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); - - retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) date_object_free_storage_date, NULL TSRMLS_CC); - retval.handlers = &date_object_handlers_date; - - return retval; -} - -static zend_object_value date_object_new_date(zend_class_entry *class_type TSRMLS_DC) -{ - return date_object_new_date_ex(class_type, NULL TSRMLS_CC); -} - -static zend_object_value date_object_clone_date(zval *this_ptr TSRMLS_DC) -{ - php_date_obj *new_obj = NULL; - php_date_obj *old_obj = (php_date_obj *) zend_object_store_get_object(this_ptr TSRMLS_CC); - zend_object_value new_ov = date_object_new_date_ex(old_obj->std.ce, &new_obj TSRMLS_CC); - - zend_objects_clone_members(&new_obj->std, new_ov, &old_obj->std, Z_OBJ_HANDLE_P(this_ptr) TSRMLS_CC); - - /* this should probably moved to a new `timelib_time *timelime_time_clone(timelib_time *)` */ - new_obj->time = timelib_time_ctor(); - *new_obj->time = *old_obj->time; - if (old_obj->time->tz_abbr) { - new_obj->time->tz_abbr = strdup(old_obj->time->tz_abbr); - } - if (old_obj->time->tz_info) { - new_obj->time->tz_info = timelib_tzinfo_clone(old_obj->time->tz_info); - } - - return new_ov; -} - -static int date_object_compare_date(zval *d1, zval *d2 TSRMLS_DC) -{ - if (Z_TYPE_P(d1) == IS_OBJECT && Z_TYPE_P(d2) == IS_OBJECT && - instanceof_function(Z_OBJCE_P(d1), date_ce_date TSRMLS_CC) && - instanceof_function(Z_OBJCE_P(d2), date_ce_date TSRMLS_CC)) { - php_date_obj *o1 = zend_object_store_get_object(d1 TSRMLS_CC); - php_date_obj *o2 = zend_object_store_get_object(d2 TSRMLS_CC); - - if (!o1->time->sse_uptodate) { - timelib_update_ts(o1->time, o1->time->tz_info); - } - if (!o2->time->sse_uptodate) { - timelib_update_ts(o2->time, o2->time->tz_info); - } - - return (o1->time->sse == o2->time->sse) ? 0 : ((o1->time->sse < o2->time->sse) ? -1 : 1); - } - - return 1; -} - -static inline zend_object_value date_object_new_timezone_ex(zend_class_entry *class_type, php_timezone_obj **ptr TSRMLS_DC) -{ - php_timezone_obj *intern; - zend_object_value retval; - zval *tmp; - - intern = emalloc(sizeof(php_timezone_obj)); - memset(intern, 0, sizeof(php_timezone_obj)); - if (ptr) { - *ptr = intern; - } - - zend_object_std_init(&intern->std, class_type TSRMLS_CC); - zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); - - retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) date_object_free_storage_timezone, NULL TSRMLS_CC); - retval.handlers = &date_object_handlers_timezone; - - return retval; -} - -static zend_object_value date_object_new_timezone(zend_class_entry *class_type TSRMLS_DC) -{ - return date_object_new_timezone_ex(class_type, NULL TSRMLS_CC); -} - -static zend_object_value date_object_clone_timezone(zval *this_ptr TSRMLS_DC) -{ - php_timezone_obj *new_obj = NULL; - php_timezone_obj *old_obj = (php_timezone_obj *) zend_object_store_get_object(this_ptr TSRMLS_CC); - zend_object_value new_ov = date_object_new_timezone_ex(old_obj->std.ce, &new_obj TSRMLS_CC); - - zend_objects_clone_members(&new_obj->std, new_ov, &old_obj->std, Z_OBJ_HANDLE_P(this_ptr) TSRMLS_CC); - new_obj->tz = old_obj->tz; - - return new_ov; -} - -static void date_object_free_storage_date(void *object TSRMLS_DC) -{ - php_date_obj *intern = (php_date_obj *)object; - - if (intern->time) { - if (intern->time->tz_info) { - timelib_tzinfo_dtor(intern->time->tz_info); - } - timelib_time_dtor(intern->time); - } - - zend_object_std_dtor(&intern->std TSRMLS_CC); - efree(object); -} - -static void date_object_free_storage_timezone(void *object TSRMLS_DC) -{ - php_timezone_obj *intern = (php_timezone_obj *)object; - - zend_object_std_dtor(&intern->std TSRMLS_CC); - efree(object); -} - -/* Advanced Interface */ -static zval * date_instantiate(zend_class_entry *pce, zval *object TSRMLS_DC) -{ - if (!object) { - ALLOC_ZVAL(object); - } - - Z_TYPE_P(object) = IS_OBJECT; - object_init_ex(object, pce); - object->refcount = 1; - object->is_ref = 0; - return object; -} - -static void date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, int time_str_len, zval *timezone_object TSRMLS_DC) -{ - timelib_time *now; - timelib_tzinfo *tzi; - timelib_error_container *err = NULL; - int free_tzi = 0; - - if (dateobj->time) { - if (dateobj->time->tz_info) { - timelib_tzinfo_dtor(dateobj->time->tz_info); - } - timelib_time_dtor(dateobj->time); - } - dateobj->time = timelib_strtotime(time_str_len ? time_str : "now", time_str_len ? time_str_len : sizeof("now") -1, &err, DATE_TIMEZONEDB); - if (err) { - if (err->error_count) { - /* spit out the first library error message, at least */ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to parse time string (%s) at position %d (%c): %s", time_str, - err->error_messages[0].position, err->error_messages[0].character, err->error_messages[0].message); - } - timelib_error_container_dtor(err); - } - - if (timezone_object) { - php_timezone_obj *tzobj; - - tzobj = (php_timezone_obj *) zend_object_store_get_object(timezone_object TSRMLS_CC); - tzi = timelib_tzinfo_clone(tzobj->tz); - free_tzi = 1; - } else if (dateobj->time->tz_info) { - tzi = timelib_tzinfo_clone(dateobj->time->tz_info); - free_tzi = 1; - } else { - tzi = get_timezone_info(TSRMLS_C); - } - - now = timelib_time_ctor(); - now->tz_info = tzi; - now->zone_type = TIMELIB_ZONETYPE_ID; - timelib_unixtime2local(now, (timelib_sll) time(NULL)); - - timelib_fill_holes(dateobj->time, now, 0); - timelib_update_ts(dateobj->time, tzi); - - dateobj->time->have_weekday_relative = dateobj->time->have_relative = 0; - if (now->tz_info != tzi) { - timelib_tzinfo_dtor(now->tz_info); - } - if (free_tzi) { - timelib_tzinfo_dtor(tzi); - } - timelib_time_dtor(now); -} - -/* {{{ proto DateTime date_create([string time[, DateTimeZone object]]) - Returns new DateTime object -*/ -PHP_FUNCTION(date_create) -{ - zval *timezone_object = NULL; - char *time_str = NULL; - int time_str_len = 0; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO", &time_str, &time_str_len, &timezone_object, date_ce_timezone) == FAILURE) { - RETURN_FALSE; - } - - date_instantiate(date_ce_date, return_value TSRMLS_CC); - date_initialize(zend_object_store_get_object(return_value TSRMLS_CC), time_str, time_str_len, timezone_object TSRMLS_CC); -} -/* }}} */ - -/* {{{ proto DateTime::__construct([string time[, DateTimeZone object]]) - Creates new DateTime object -*/ -PHP_METHOD(DateTime, __construct) -{ - zval *timezone_object = NULL; - char *time_str = NULL; - int time_str_len = 0; - - php_set_error_handling(EH_THROW, NULL TSRMLS_CC); - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) { - date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, timezone_object TSRMLS_CC); - } - php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC); -} -/* }}} */ - -/* {{{ proto array date_parse(string date) - Returns associative array with detailed info about given date -*/ -PHP_FUNCTION(date_parse) -{ - char *date; - int date_len, i; - struct timelib_error_container *error; - timelib_time *parsed_time; - zval *element; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &date, &date_len) == FAILURE) { - RETURN_FALSE; - } - - parsed_time = timelib_strtotime(date, date_len, &error, DATE_TIMEZONEDB); - array_init(return_value); -#define PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(name, elem) \ - if (parsed_time->elem == -1) { \ - add_ascii_assoc_bool(return_value, #name, 0); \ - } else { \ - add_ascii_assoc_long(return_value, #name, parsed_time->elem); \ - } - PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(year, y); - PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(month, m); - PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(day, d); - PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(hour, h); - PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(minute, i); - PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(second, s); - - if (parsed_time->f == -1) { - add_ascii_assoc_bool(return_value, "fraction", 0); - } else { - add_ascii_assoc_double(return_value, "fraction", parsed_time->f); - } - - add_ascii_assoc_long(return_value, "warning_count", error->warning_count); - MAKE_STD_ZVAL(element); - array_init(element); - for (i = 0; i < error->warning_count; i++) { - add_index_string(element, error->warning_messages[i].position, error->warning_messages[i].message, 1); - } - add_ascii_assoc_zval(return_value, "warnings", element); - - add_ascii_assoc_long(return_value, "error_count", error->error_count); - MAKE_STD_ZVAL(element); - array_init(element); - for (i = 0; i < error->error_count; i++) { - add_index_string(element, error->error_messages[i].position, error->error_messages[i].message, 1); - } - add_ascii_assoc_zval(return_value, "errors", element); - timelib_error_container_dtor(error); - - add_ascii_assoc_bool(return_value, "is_localtime", parsed_time->is_localtime); - - if (parsed_time->is_localtime) { - PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(zone_type, zone_type); - switch (parsed_time->zone_type) { - case TIMELIB_ZONETYPE_OFFSET: - PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(zone, z); - add_ascii_assoc_bool(return_value, "is_dst", parsed_time->dst); - break; - case TIMELIB_ZONETYPE_ID: - if (parsed_time->tz_abbr) { - add_ascii_assoc_string(return_value, "tz_abbr", parsed_time->tz_abbr, 1); - } - if (parsed_time->tz_info) { - add_ascii_assoc_string(return_value, "tz_id", parsed_time->tz_info->name, 1); - } - break; - case TIMELIB_ZONETYPE_ABBR: - PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(zone, z); - add_ascii_assoc_bool(return_value, "is_dst", parsed_time->dst); - add_ascii_assoc_string(return_value, "tz_abbr", parsed_time->tz_abbr, 1); - break; - } - } - if (parsed_time->have_relative || parsed_time->have_weekday_relative) { - MAKE_STD_ZVAL(element); - array_init(element); - } - if (parsed_time->have_relative) { - add_ascii_assoc_long(element, "year", parsed_time->relative.y); - add_ascii_assoc_long(element, "month", parsed_time->relative.m); - add_ascii_assoc_long(element, "day", parsed_time->relative.d); - add_ascii_assoc_long(element, "hour", parsed_time->relative.h); - add_ascii_assoc_long(element, "minute", parsed_time->relative.i); - add_ascii_assoc_long(element, "second", parsed_time->relative.s); - } - if (parsed_time->have_weekday_relative) { - add_ascii_assoc_long(element, "weekday", parsed_time->relative.weekday); - } - if (parsed_time->have_relative || parsed_time->have_weekday_relative) { - add_ascii_assoc_zval(return_value, "relative", element); - } - timelib_time_dtor(parsed_time); -} -/* }}} */ - -/* {{{ proto string date_format(DateTime object, string format) - Returns date formatted according to given format -*/ -PHP_FUNCTION(date_format) -{ - zval *object; - php_date_obj *dateobj; - char *format, *str; - int format_len, length; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, date_ce_date, &format, &format_len) == FAILURE) { - RETURN_FALSE; - } - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); - DATE_CHECK_INITIALIZED(dateobj->time, DateTime); - str = date_format(format, format_len, &length, dateobj->time, dateobj->time->is_localtime, 0 TSRMLS_CC); - if (UG(unicode)) { - RETURN_UNICODEL((UChar*) str, length, 0); - } else { - RETURN_STRINGL(str, length, 0); - } -} -/* }}} */ - -/* {{{ proto string date_format_locale(DateTime object, string format) -*/ -PHP_FUNCTION(date_format_locale) -{ - zval *object; - php_date_obj *dateobj; - char *format, *str; - int format_len, length; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, date_ce_date, &format, &format_len) == FAILURE) { - RETURN_FALSE; - } - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); - - str = date_format(format, format_len, &length, dateobj->time, dateobj->time->is_localtime, 1 TSRMLS_CC); - if (UG(unicode)) { - RETURN_UNICODEL((UChar*)str, length, 0); - } else { - RETURN_STRINGL(str, length, 0); - } -} -/* }}} */ - -/* {{{ proto void date_modify(DateTime object, string modify) - Alters the timestamp. -*/ -PHP_FUNCTION(date_modify) -{ - zval *object; - php_date_obj *dateobj; - char *modify; - int modify_len; - timelib_time *tmp_time; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, date_ce_date, &modify, &modify_len) == FAILURE) { - RETURN_FALSE; - } - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); - DATE_CHECK_INITIALIZED(dateobj->time, DateTime); - - tmp_time = timelib_strtotime(modify, modify_len, NULL, DATE_TIMEZONEDB); - dateobj->time->relative.y = tmp_time->relative.y; - dateobj->time->relative.m = tmp_time->relative.m; - dateobj->time->relative.d = tmp_time->relative.d; - dateobj->time->relative.h = tmp_time->relative.h; - dateobj->time->relative.i = tmp_time->relative.i; - dateobj->time->relative.s = tmp_time->relative.s; - dateobj->time->relative.weekday = tmp_time->relative.weekday; - dateobj->time->have_relative = tmp_time->have_relative; - dateobj->time->have_weekday_relative = tmp_time->have_weekday_relative; - dateobj->time->sse_uptodate = 0; - timelib_time_dtor(tmp_time); - - timelib_update_ts(dateobj->time, NULL); - timelib_update_from_sse(dateobj->time); -} -/* }}} */ - -/* {{{ proto DateTimeZone date_timezone_get(DateTime object) - Return new DateTimeZone object relative to give DateTime -*/ -PHP_FUNCTION(date_timezone_get) -{ - zval *object; - php_date_obj *dateobj; - php_timezone_obj *tzobj; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_date) == FAILURE) { - RETURN_FALSE; - } - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); - DATE_CHECK_INITIALIZED(dateobj->time, DateTime); - if (dateobj->time->is_localtime && dateobj->time->tz_info) { - date_instantiate(date_ce_timezone, return_value TSRMLS_CC); - tzobj = (php_timezone_obj *) zend_object_store_get_object(return_value TSRMLS_CC); - tzobj->tz = timelib_tzinfo_clone(dateobj->time->tz_info); - } else { - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto void date_timezone_set(DateTime object, DateTimeZone object) - Sets the timezone for the DateTime object. -*/ -PHP_FUNCTION(date_timezone_set) -{ - zval *object; - zval *timezone_object; - php_date_obj *dateobj; - php_timezone_obj *tzobj; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_date, &timezone_object, date_ce_timezone) == FAILURE) { - RETURN_FALSE; - } - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); - DATE_CHECK_INITIALIZED(dateobj->time, DateTime); - tzobj = (php_timezone_obj *) zend_object_store_get_object(timezone_object TSRMLS_CC); - if (dateobj->time->tz_info) { - timelib_tzinfo_dtor(dateobj->time->tz_info); - } - timelib_set_timezone(dateobj->time, timelib_tzinfo_clone(tzobj->tz)); - timelib_unixtime2local(dateobj->time, dateobj->time->sse); -} -/* }}} */ - -/* {{{ proto long date_offset_get(DateTime object) - Returns the DST offset. -*/ -PHP_FUNCTION(date_offset_get) -{ - zval *object; - php_date_obj *dateobj; - timelib_time_offset *offset; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_date) == FAILURE) { - RETURN_FALSE; - } - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); - DATE_CHECK_INITIALIZED(dateobj->time, DateTime); - if (dateobj->time->is_localtime && dateobj->time->tz_info) { - offset = timelib_get_time_zone_info(dateobj->time->sse, dateobj->time->tz_info); - RETVAL_LONG(offset->offset); - timelib_time_offset_dtor(offset); - return; - } else { - RETURN_LONG(0); - } -} -/* }}} */ - -/* {{{ proto void date_time_set(DateTime object, long hour, long minute[, long second]) - Sets the time. -*/ -PHP_FUNCTION(date_time_set) -{ - zval *object; - php_date_obj *dateobj; - long h, i, s = 0; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll|l", &object, date_ce_date, &h, &i, &s) == FAILURE) { - RETURN_FALSE; - } - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); - DATE_CHECK_INITIALIZED(dateobj->time, DateTime); - dateobj->time->h = h; - dateobj->time->i = i; - dateobj->time->s = s; - timelib_update_ts(dateobj->time, NULL); -} -/* }}} */ - -/* {{{ proto void date_date_set(DateTime object, long year, long month, long day) - Sets the date. -*/ -PHP_FUNCTION(date_date_set) -{ - zval *object; - php_date_obj *dateobj; - long y, m, d; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Olll", &object, date_ce_date, &y, &m, &d) == FAILURE) { - RETURN_FALSE; - } - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); - DATE_CHECK_INITIALIZED(dateobj->time, DateTime); - dateobj->time->y = y; - dateobj->time->m = m; - dateobj->time->d = d; - timelib_update_ts(dateobj->time, NULL); -} -/* }}} */ - -/* {{{ proto void date_isodate_set(DateTime object, long year, long week[, long day]) - Sets the ISO date. -*/ -PHP_FUNCTION(date_isodate_set) -{ - zval *object; - php_date_obj *dateobj; - long y, w, d = 1; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll|l", &object, date_ce_date, &y, &w, &d) == FAILURE) { - RETURN_FALSE; - } - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); - DATE_CHECK_INITIALIZED(dateobj->time, DateTime); - dateobj->time->y = y; - dateobj->time->m = 1; - dateobj->time->d = 1; - dateobj->time->relative.d = timelib_daynr_from_weeknr(y, w, d); - dateobj->time->have_relative = 1; - - timelib_update_ts(dateobj->time, NULL); -} -/* }}} */ - -static int timezone_initialize(timelib_tzinfo **tzi, /*const*/ char *tz TSRMLS_DC) -{ - char *tzid; - - *tzi = NULL; - - if ((tzid = timelib_timezone_id_from_abbr(tz, -1, 0))) { - *tzi = php_date_parse_tzfile(tzid, DATE_TIMEZONEDB TSRMLS_CC); - } else { - *tzi = php_date_parse_tzfile(tz, DATE_TIMEZONEDB TSRMLS_CC); - } - - if (*tzi) { - return SUCCESS; - } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown or bad timezone (%s)", tz); - return FAILURE; - } -} - -/* {{{ proto DateTimeZone timezone_open(string timezone) - Returns new DateTimeZone object -*/ -PHP_FUNCTION(timezone_open) -{ - char *tz; - int tz_len; - timelib_tzinfo *tzi = NULL; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &tz, &tz_len) == FAILURE) { - RETURN_FALSE; - } - if (SUCCESS != timezone_initialize(&tzi, tz TSRMLS_CC)) { - RETURN_FALSE; - } - ((php_timezone_obj *) zend_object_store_get_object(date_instantiate(date_ce_timezone, return_value TSRMLS_CC) TSRMLS_CC))->tz = tzi; -} -/* }}} */ - -/* {{{ proto DateTimeZone::__construct(string timezone) - Creates new DateTimeZone object. -*/ -PHP_METHOD(DateTimeZone, __construct) -{ - char *tz; - int tz_len; - timelib_tzinfo *tzi = NULL; - - php_set_error_handling(EH_THROW, NULL TSRMLS_CC); - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &tz, &tz_len)) { - if (SUCCESS == timezone_initialize(&tzi, tz TSRMLS_CC)) { - ((php_timezone_obj *) zend_object_store_get_object(getThis() TSRMLS_CC))->tz = tzi; - } - } - php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC); -} -/* }}} */ - -/* {{{ proto string timezone_name_get(DateTimeZone object) - Returns the name of the timezone. -*/ -PHP_FUNCTION(timezone_name_get) -{ - zval *object; - php_timezone_obj *tzobj; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_timezone) == FAILURE) { - RETURN_FALSE; - } - tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC); - DATE_CHECK_INITIALIZED(tzobj->tz, DateTimeZone); - - RETURN_ASCII_STRING(tzobj->tz->name, 1); -} -/* }}} */ - -/* {{{ proto string timezone_name_from_abbr(string abbr[, long gmtOffset[, long isdst]]) - Returns the timezone name from abbrevation -*/ -PHP_FUNCTION(timezone_name_from_abbr) -{ - char *abbr; - char *tzid; - int abbr_len; - long gmtoffset = -1; - long isdst = -1; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &abbr, &abbr_len, &gmtoffset, &isdst) == FAILURE) { - RETURN_FALSE; - } - tzid = timelib_timezone_id_from_abbr(abbr, gmtoffset, isdst); - - if (tzid) { - RETURN_STRING(tzid, 1); - } else { - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto long timezone_offset_get(DateTimeZone object, DateTime object) - Returns the timezone offset. -*/ -PHP_FUNCTION(timezone_offset_get) -{ - zval *object, *dateobject; - php_timezone_obj *tzobj; - php_date_obj *dateobj; - timelib_time_offset *offset; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_timezone, &dateobject, date_ce_date) == FAILURE) { - RETURN_FALSE; - } - tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC); - DATE_CHECK_INITIALIZED(tzobj->tz, DateTimeZone); - dateobj = (php_date_obj *) zend_object_store_get_object(dateobject TSRMLS_CC); - DATE_CHECK_INITIALIZED(dateobj->time, DateTime); - - offset = timelib_get_time_zone_info(dateobj->time->sse, tzobj->tz); - RETVAL_LONG(offset->offset); - timelib_time_offset_dtor(offset); -} -/* }}} */ - -/* {{{ proto array timezone_transitions_get(DateTimeZone object) - Returns numeracilly indexed array containing associative array for all transitions for the timezone. -*/ -PHP_FUNCTION(timezone_transitions_get) -{ - zval *object, *element; - php_timezone_obj *tzobj; - int i; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_timezone) == FAILURE) { - RETURN_FALSE; - } - tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC); - DATE_CHECK_INITIALIZED(tzobj->tz, DateTimeZone); - - array_init(return_value); - for (i = 0; i < tzobj->tz->timecnt; ++i) { - MAKE_STD_ZVAL(element); - array_init(element); - add_ascii_assoc_long(element, "ts", tzobj->tz->trans[i]); - add_ascii_assoc_string(element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, tzobj->tz->trans[i], 0 TSRMLS_CC), 0); - add_ascii_assoc_long(element, "offset", tzobj->tz->type[tzobj->tz->trans_idx[i]].offset); - add_ascii_assoc_bool(element, "isdst", tzobj->tz->type[tzobj->tz->trans_idx[i]].isdst); - add_ascii_assoc_string(element, "abbr", &tzobj->tz->timezone_abbr[tzobj->tz->type[tzobj->tz->trans_idx[i]].abbr_idx], 1); - - add_next_index_zval(return_value, element); - } -} -/* }}} */ - -/* {{{ proto array timezone_identifiers_list() - Returns numerically index array with all timezone identifiers. -*/ -PHP_FUNCTION(timezone_identifiers_list) -{ - const timelib_tzdb *tzdb; - const timelib_tzdb_index_entry *table; - int i, item_count; - - tzdb = DATE_TIMEZONEDB; - item_count = tzdb->index_size; - table = tzdb->index; - - array_init(return_value); - - for (i = 0; i < item_count; ++i) { - add_next_index_string(return_value, table[i].id, 1); - }; -} -/* }}} */ - -/* {{{ proto array timezone_abbreviations_list() - Returns associative array containing dst, offset and the timezone name -*/ -PHP_FUNCTION(timezone_abbreviations_list) -{ - const timelib_tz_lookup_table *table, *entry; - zval *element, **abbr_array_pp, *abbr_array; - - table = timelib_timezone_abbreviations_list(); - array_init(return_value); - entry = table; - - do { - MAKE_STD_ZVAL(element); - array_init(element); - add_ascii_assoc_bool(element, "dst", entry->type); - add_ascii_assoc_long(element, "offset", entry->gmtoffset); - if (entry->full_tz_name) { - add_ascii_assoc_string(element, "timezone_id", entry->full_tz_name, 1); - } else { - add_ascii_assoc_null(element, "timezone_id"); - } - - if (zend_hash_find(HASH_OF(return_value), entry->name, strlen(entry->name) + 1, (void **) &abbr_array_pp) == FAILURE) { - MAKE_STD_ZVAL(abbr_array); - array_init(abbr_array); - add_ascii_assoc_zval(return_value, entry->name, abbr_array); - } else { - abbr_array = *abbr_array_pp; - } - add_next_index_zval(abbr_array, element); - entry++; - } while (entry->name); -} -/* }}} */ - -/* {{{ proto bool date_default_timezone_set(string timezone_identifier) - Sets the default timezone used by all date/time functions in a script */ -PHP_FUNCTION(date_default_timezone_set) -{ - char *zone; - int zone_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &zone, &zone_len) == FAILURE) { - RETURN_FALSE; - } - if (!timelib_timezone_id_is_valid(zone, DATE_TIMEZONEDB)) { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Timezone ID '%s' is invalid", zone); - RETURN_FALSE; - } - if (DATEG(timezone)) { - efree(DATEG(timezone)); - DATEG(timezone) = NULL; - } - DATEG(timezone) = estrndup(zone, zone_len); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto string date_default_timezone_get() - Gets the default timezone used by all date/time functions in a script */ -PHP_FUNCTION(date_default_timezone_get) -{ - timelib_tzinfo *default_tz; - - default_tz = get_timezone_info(TSRMLS_C); - RETVAL_ASCII_STRING(default_tz->name, 1); -} -/* }}} */ - -/* {{{ php_do_date_sunrise_sunset - * Common for date_sunrise() and date_sunset() functions - */ -static void php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAMETERS, int calc_sunset) -{ - double latitude, longitude, zenith, gmt_offset = 0, altitude; - double h_rise, h_set, N; - timelib_sll rise, set, transit; - long time, retformat; - int rs; - timelib_time *t; - timelib_tzinfo *tzi; - char retstr[6]; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|ldddd", &time, &retformat, &latitude, &longitude, &zenith, &gmt_offset) == FAILURE) { - RETURN_FALSE; - } - - switch (ZEND_NUM_ARGS()) { - case 1: - retformat = SUNFUNCS_RET_STRING; - case 2: - latitude = INI_FLT("date.default_latitude"); - case 3: - longitude = INI_FLT("date.default_longitude"); - case 4: - if (calc_sunset) { - zenith = INI_FLT("date.sunset_zenith"); - } else { - zenith = INI_FLT("date.sunrise_zenith"); - } - case 5: - case 6: - break; - default: - php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid format"); - RETURN_FALSE; - break; - } - if (retformat != SUNFUNCS_RET_TIMESTAMP && - retformat != SUNFUNCS_RET_STRING && - retformat != SUNFUNCS_RET_DOUBLE) - { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong return format given, pick one of SUNFUNCS_RET_TIMESTAMP, SUNFUNCS_RET_STRING or SUNFUNCS_RET_DOUBLE"); - RETURN_FALSE; - } - altitude = 90 - zenith; - - /* Initialize time struct */ - t = timelib_time_ctor(); - tzi = get_timezone_info(TSRMLS_C); - t->tz_info = tzi; - t->zone_type = TIMELIB_ZONETYPE_ID; - - if (ZEND_NUM_ARGS() <= 5) { - gmt_offset = timelib_get_current_offset(t) / 3600; - } - - timelib_unixtime2local(t, time); - rs = timelib_astro_rise_set_altitude(t, longitude, latitude, altitude, altitude > -1 ? 1 : 0, &h_rise, &h_set, &rise, &set, &transit); - timelib_time_dtor(t); - - if (rs != 0) { - RETURN_FALSE; - } - - if (retformat == SUNFUNCS_RET_TIMESTAMP) { - RETURN_LONG(calc_sunset ? set : rise); - } - N = (calc_sunset ? h_set : h_rise) + gmt_offset; - while (N > 24) { - N -= 24; - } - while (N < 0) { - N += 24; - } - switch (retformat) { - case SUNFUNCS_RET_STRING: - sprintf(retstr, "%02d:%02d", (int) N, (int) (60 * (N - (int) N))); - RETURN_RT_STRINGL(retstr, 5, 1); - break; - case SUNFUNCS_RET_DOUBLE: - RETURN_DOUBLE(N); - break; - } -} -/* }}} */ - -/* {{{ proto mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]]) - Returns time of sunrise for a given day and location */ -PHP_FUNCTION(date_sunrise) -{ - php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); -} -/* }}} */ - -/* {{{ proto mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]]) - Returns time of sunset for a given day and location */ -PHP_FUNCTION(date_sunset) -{ - php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); -} -/* }}} */ - -/* {{{ proto array date_sun_info(long time, float latitude, float longitude) - Returns an array with information about sun set/rise and twilight begin/end */ -PHP_FUNCTION(date_sun_info) -{ - long time; - double latitude, longitude; - timelib_time *t, *t2; - timelib_tzinfo *tzi; - int rs; - timelib_sll rise, set, transit; - int dummy; - double ddummy; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ldd", &time, &latitude, &longitude) == FAILURE) { - RETURN_FALSE; - } - /* Initialize time struct */ - t = timelib_time_ctor(); - tzi = get_timezone_info(TSRMLS_C); - t->tz_info = tzi; - t->zone_type = TIMELIB_ZONETYPE_ID; - timelib_unixtime2local(t, time); - - /* Setup */ - t2 = timelib_time_ctor(); - array_init(return_value); - - /* Get sun up/down and transit */ - rs = timelib_astro_rise_set_altitude(t, latitude, longitude, -35.0/60, 1, &ddummy, &ddummy, &rise, &set, &transit); - switch (rs) { - case -1: /* always below */ - add_ascii_assoc_bool(return_value, "sunrise", 0); - add_ascii_assoc_bool(return_value, "sunset", 0); - break; - case 1: /* always above */ - add_ascii_assoc_bool(return_value, "sunrise", 1); - add_ascii_assoc_bool(return_value, "sunset", 1); - break; - default: - t2->sse = rise; - add_ascii_assoc_long(return_value, "sunrise", timelib_date_to_int(t2, &dummy)); - t2->sse = set; - add_ascii_assoc_long(return_value, "sunset", timelib_date_to_int(t2, &dummy)); - } - t2->sse = transit; - add_ascii_assoc_long(return_value, "transit", timelib_date_to_int(t2, &dummy)); - - /* Get civil twilight */ - rs = timelib_astro_rise_set_altitude(t, latitude, longitude, -6.0, 0, &ddummy, &ddummy, &rise, &set, &transit); - switch (rs) { - case -1: /* always below */ - add_ascii_assoc_bool(return_value, "civil_twilight_begin", 0); - add_ascii_assoc_bool(return_value, "civil_twilight_end", 0); - break; - case 1: /* always above */ - add_ascii_assoc_bool(return_value, "civil_twilight_begin", 1); - add_ascii_assoc_bool(return_value, "civil_twilight_end", 1); - break; - default: - t2->sse = rise; - add_ascii_assoc_long(return_value, "civil_twilight_begin", timelib_date_to_int(t2, &dummy)); - t2->sse = set; - add_ascii_assoc_long(return_value, "civil_twilight_end", timelib_date_to_int(t2, &dummy)); - } - - /* Get nautical twilight */ - rs = timelib_astro_rise_set_altitude(t, latitude, longitude, -12.0, 0, &ddummy, &ddummy, &rise, &set, &transit); - switch (rs) { - case -1: /* always below */ - add_ascii_assoc_bool(return_value, "nautical_twilight_begin", 0); - add_ascii_assoc_bool(return_value, "nautical_twilight_end", 0); - break; - case 1: /* always above */ - add_ascii_assoc_bool(return_value, "nautical_twilight_begin", 1); - add_ascii_assoc_bool(return_value, "nautical_twilight_end", 1); - break; - default: - t2->sse = rise; - add_ascii_assoc_long(return_value, "nautical_twilight_begin", timelib_date_to_int(t2, &dummy)); - t2->sse = set; - add_ascii_assoc_long(return_value, "nautical_twilight_end", timelib_date_to_int(t2, &dummy)); - } - - /* Get astronomical twilight */ - rs = timelib_astro_rise_set_altitude(t, latitude, longitude, -18.0, 0, &ddummy, &ddummy, &rise, &set, &transit); - switch (rs) { - case -1: /* always below */ - add_ascii_assoc_bool(return_value, "astronomical_twilight_begin", 0); - add_ascii_assoc_bool(return_value, "astronomical_twilight_end", 0); - break; - case 1: /* always above */ - add_ascii_assoc_bool(return_value, "astronomical_twilight_begin", 1); - add_ascii_assoc_bool(return_value, "astronomical_twilight_end", 1); - break; - default: - t2->sse = rise; - add_ascii_assoc_long(return_value, "astronomical_twilight_begin", timelib_date_to_int(t2, &dummy)); - t2->sse = set; - add_ascii_assoc_long(return_value, "astronomical_twilight_end", timelib_date_to_int(t2, &dummy)); - } - timelib_time_dtor(t); - timelib_time_dtor(t2); -} -/* }}} */ -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: fdm=marker - * vim: noet sw=4 ts=4 - */ diff --git a/ext/date/php_date.h b/ext/date/php_date.h deleted file mode 100644 index 9b4bd8682c286..0000000000000 --- a/ext/date/php_date.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Derick Rethans | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef PHP_DATE_H -#define PHP_DATE_H - -#include "lib/timelib.h" -#include "Zend/zend_hash.h" - -extern zend_module_entry date_module_entry; -#define phpext_date_ptr &date_module_entry - -PHP_FUNCTION(date); -PHP_FUNCTION(idate); -PHP_FUNCTION(gmdate); -PHP_FUNCTION(strtotime); - -PHP_FUNCTION(mktime); -PHP_FUNCTION(gmmktime); - -PHP_FUNCTION(checkdate); - -#ifdef HAVE_STRFTIME -PHP_FUNCTION(strftime); -PHP_FUNCTION(gmstrftime); -#endif - -PHP_FUNCTION(time); -PHP_FUNCTION(localtime); -PHP_FUNCTION(getdate); - -/* Advanced Interface */ -PHP_METHOD(DateTime, __construct); -PHP_FUNCTION(date_create); -PHP_FUNCTION(date_parse); -PHP_FUNCTION(date_format); -PHP_FUNCTION(date_format_locale); -PHP_FUNCTION(date_modify); -PHP_FUNCTION(date_timezone_get); -PHP_FUNCTION(date_timezone_set); -PHP_FUNCTION(date_offset_get); - -PHP_FUNCTION(date_time_set); -PHP_FUNCTION(date_date_set); -PHP_FUNCTION(date_isodate_set); - -PHP_METHOD(DateTimeZone, __construct); -PHP_FUNCTION(timezone_open); -PHP_FUNCTION(timezone_name_get); -PHP_FUNCTION(timezone_name_from_abbr); -PHP_FUNCTION(timezone_offset_get); -PHP_FUNCTION(timezone_transitions_get); -PHP_FUNCTION(timezone_identifiers_list); -PHP_FUNCTION(timezone_abbreviations_list); - -PHP_METHOD(timezone, identifiers_list); -PHP_METHOD(timezone, abbreviations_list); - -/* Options and Configuration */ -PHP_FUNCTION(date_default_timezone_set); -PHP_FUNCTION(date_default_timezone_get); - -/* Astro functions */ -PHP_FUNCTION(date_sunrise); -PHP_FUNCTION(date_sunset); -PHP_FUNCTION(date_sun_info); - -PHP_RINIT_FUNCTION(date); -PHP_RSHUTDOWN_FUNCTION(date); -PHP_MINIT_FUNCTION(date); -PHP_MSHUTDOWN_FUNCTION(date); -PHP_MINFO_FUNCTION(date); - -ZEND_BEGIN_MODULE_GLOBALS(date) - char *default_timezone; - char *timezone; - HashTable tzcache; -ZEND_END_MODULE_GLOBALS(date) - -#ifdef ZTS -#define DATEG(v) TSRMG(date_globals_id, zend_date_globals *, v) -#else -#define DATEG(v) (date_globals.v) -#endif - -/* Backwards compability wrapper */ -PHPAPI signed long php_parse_date(char *string, signed long *now); -PHPAPI void php_mktime(INTERNAL_FUNCTION_PARAMETERS, int gmt); -PHPAPI int php_idate(char format, time_t ts, int localtime); -#if HAVE_STRFTIME -#define _php_strftime php_strftime -PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gm); -#endif -PHPAPI char *php_format_date(char *format, int format_len, time_t ts, int localtime TSRMLS_DC); - -/* Mechanism to set new TZ database */ -PHPAPI void php_date_set_tzdb(timelib_tzdb *tzdb); -PHPAPI timelib_tzinfo *get_timezone_info(TSRMLS_D); - -#endif /* PHP_DATE_H */ diff --git a/ext/date/tests/002.phpt b/ext/date/tests/002.phpt deleted file mode 100644 index 7384b7424469b..0000000000000 --- a/ext/date/tests/002.phpt +++ /dev/null @@ -1,93 +0,0 @@ ---TEST-- -strtotime() function ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -*** GMT0 -1999-10-13 00:00:00 -1999-10-13 00:00:00 -2000-01-19 00:00:00 -2000-01-19 00:00:00 -2001-12-21 00:00:00 -2001-12-21 00:00:00 -2001-12-21 12:16:00 -2001-12-21 12:16:00 -%d-12-21 12:16:00 -2001-10-22 21:19:58 -2001-10-22 23:19:58 -2001-10-22 23:32:58 -2001-10-22 19:19:58 -2001-10-22 19:06:58 -2001-10-23 01:00:58 -2001-10-22 23:19:58 -2001-10-22 19:06:58 -2001-10-22 19:05:00 -1996-12-30 00:00:00 -2004-03-01 05:00:00 -*** US/Eastern -1999-10-13 00:00:00 -1999-10-13 00:00:00 -2000-01-19 00:00:00 -2000-01-19 00:00:00 -2001-12-21 00:00:00 -2001-12-21 00:00:00 -2001-12-21 12:16:00 -2001-12-21 12:16:00 -%d-12-21 12:16:00 -2001-10-22 21:19:58 -2001-10-22 19:19:58 -2001-10-22 19:32:58 -2001-10-22 15:19:58 -2001-10-22 15:06:58 -2001-10-22 21:00:58 -2001-10-22 19:19:58 -2001-10-22 15:06:58 -2001-10-22 15:05:00 -1996-12-30 00:00:00 -2004-03-01 00:00:00 diff --git a/ext/date/tests/003.phpt b/ext/date/tests/003.phpt deleted file mode 100644 index 0d2cfa275b597..0000000000000 --- a/ext/date/tests/003.phpt +++ /dev/null @@ -1,81 +0,0 @@ ---TEST-- -date suffixes test ---INI-- -date.timezone=UTC ---FILE-- - ---EXPECTF-- -string(4) "31st" -string(3) "1st" -string(3) "2nd" -string(3) "3rd" -string(3) "4th" -string(3) "5th" -string(3) "6th" -string(3) "7th" -string(3) "8th" -string(3) "9th" -string(4) "10th" -string(4) "11th" -string(4) "12th" -string(4) "13th" -string(4) "14th" -string(4) "15th" -string(4) "16th" -string(4) "17th" -string(4) "18th" -string(4) "19th" -string(4) "20th" -string(4) "21st" -string(4) "22nd" -string(4) "23rd" -string(4) "24th" -string(4) "25th" -string(4) "26th" -string(4) "27th" -string(4) "28th" -string(4) "29th" -string(4) "30th" -string(4) "31st" -Done ---UEXPECTF-- -unicode(4) "31st" -unicode(3) "1st" -unicode(3) "2nd" -unicode(3) "3rd" -unicode(3) "4th" -unicode(3) "5th" -unicode(3) "6th" -unicode(3) "7th" -unicode(3) "8th" -unicode(3) "9th" -unicode(4) "10th" -unicode(4) "11th" -unicode(4) "12th" -unicode(4) "13th" -unicode(4) "14th" -unicode(4) "15th" -unicode(4) "16th" -unicode(4) "17th" -unicode(4) "18th" -unicode(4) "19th" -unicode(4) "20th" -unicode(4) "21st" -unicode(4) "22nd" -unicode(4) "23rd" -unicode(4) "24th" -unicode(4) "25th" -unicode(4) "26th" -unicode(4) "27th" -unicode(4) "28th" -unicode(4) "29th" -unicode(4) "30th" -unicode(4) "31st" -Done diff --git a/ext/date/tests/004.phpt b/ext/date/tests/004.phpt deleted file mode 100644 index 55317f7a76339..0000000000000 --- a/ext/date/tests/004.phpt +++ /dev/null @@ -1,119 +0,0 @@ ---TEST-- -date() format params ---FILE-- - ---EXPECTF-- -string(1) "2" -string(3) "177" -string(1) "6" -string(2) "30" -string(1) "0" -string(2) "am" -string(3) "041" -string(2) "12" -string(1) "0" -string(1) "0" -string(10) "1151366400" -string(1) "2" -string(3) "177" -string(1) "6" -string(2) "30" -string(1) "0" -string(2) "am" -string(3) "041" -string(1) "3" -string(1) "3" -string(5) "10800" -string(10) "1151366400" -string(1) "1" -string(3) "176" -string(1) "6" -string(2) "30" -string(1) "0" -string(2) "pm" -string(3) "041" -string(1) "7" -string(2) "19" -string(6) "-18000" -string(10) "1151366400" -string(1) "2" -string(3) "177" -string(1) "6" -string(2) "30" -string(1) "0" -string(2) "am" -string(3) "041" -string(1) "1" -string(1) "1" -string(4) "3600" -string(10) "1151366400" -Done ---UEXPECTF-- -unicode(1) "2" -unicode(3) "177" -unicode(1) "6" -unicode(2) "30" -unicode(1) "0" -unicode(2) "am" -unicode(3) "041" -unicode(2) "12" -unicode(1) "0" -unicode(1) "0" -unicode(10) "1151366400" -unicode(1) "2" -unicode(3) "177" -unicode(1) "6" -unicode(2) "30" -unicode(1) "0" -unicode(2) "am" -unicode(3) "041" -unicode(1) "3" -unicode(1) "3" -unicode(5) "10800" -unicode(10) "1151366400" -unicode(1) "1" -unicode(3) "176" -unicode(1) "6" -unicode(2) "30" -unicode(1) "0" -unicode(2) "pm" -unicode(3) "041" -unicode(1) "7" -unicode(2) "19" -unicode(6) "-18000" -unicode(10) "1151366400" -unicode(1) "2" -unicode(3) "177" -unicode(1) "6" -unicode(2) "30" -unicode(1) "0" -unicode(2) "am" -unicode(3) "041" -unicode(1) "1" -unicode(1) "1" -unicode(4) "3600" -unicode(10) "1151366400" -Done diff --git a/ext/date/tests/005.phpt b/ext/date/tests/005.phpt deleted file mode 100644 index 7485214d48b76..0000000000000 --- a/ext/date/tests/005.phpt +++ /dev/null @@ -1,45 +0,0 @@ ---TEST-- -idate() and invalid params ---INI-- -date.timezone=UTC ---FILE-- - ---EXPECTF-- -Warning: idate() expects at least 1 parameter, 0 given in %s on line %d -bool(false) - -Warning: idate() expects at most 2 parameters, 3 given in %s on line %d -bool(false) - -Warning: idate(): Unrecognized date format token in %s on line %d -bool(false) - -Warning: idate(): idate format is one char in %s on line %d -bool(false) - -Warning: idate(): Unrecognized date format token in %s on line %d -bool(false) -int(41) - -Warning: idate(): Unrecognized date format token in %s on line %d -bool(false) - -Warning: idate(): Unrecognized date format token in %s on line %d -bool(false) -Done diff --git a/ext/date/tests/006.phpt b/ext/date/tests/006.phpt deleted file mode 100644 index 407242b161e7b..0000000000000 --- a/ext/date/tests/006.phpt +++ /dev/null @@ -1,33 +0,0 @@ ---TEST-- -checkdate() tests ---INI-- -date.timezone=UTC ---FILE-- - ---EXPECTF-- -Warning: checkdate() expects exactly 3 parameters, 0 given in %s on line %d -bool(false) -bool(true) -bool(false) -bool(false) -bool(false) -bool(true) -bool(false) -bool(false) -bool(false) -Done diff --git a/ext/date/tests/007.phpt b/ext/date/tests/007.phpt deleted file mode 100644 index e33e0e853e83a..0000000000000 --- a/ext/date/tests/007.phpt +++ /dev/null @@ -1,185 +0,0 @@ ---TEST-- -localtime() tests ---INI-- -date.timezone=UTC ---FILE-- - ---EXPECTF-- -Warning: localtime() expects at most 2 parameters, 3 given in %s on line %d -bool(false) -array(9) { - [0]=> - int(%d) - [1]=> - int(%d) - [2]=> - int(%d) - [3]=> - int(%d) - [4]=> - int(%d) - [5]=> - int(%d) - [6]=> - int(%d) - [7]=> - int(%d) - [8]=> - int(%d) -} -array(9) { - [0]=> - int(0) - [1]=> - int(0) - [2]=> - int(0) - [3]=> - int(27) - [4]=> - int(5) - [5]=> - int(106) - [6]=> - int(2) - [7]=> - int(177) - [8]=> - int(0) -} -array(9) { - ["tm_sec"]=> - int(0) - ["tm_min"]=> - int(0) - ["tm_hour"]=> - int(0) - ["tm_mday"]=> - int(27) - ["tm_mon"]=> - int(5) - ["tm_year"]=> - int(106) - ["tm_wday"]=> - int(2) - ["tm_yday"]=> - int(177) - ["tm_isdst"]=> - int(0) -} -array(9) { - [0]=> - int(0) - [1]=> - int(0) - [2]=> - int(0) - [3]=> - int(27) - [4]=> - int(5) - [5]=> - int(106) - [6]=> - int(2) - [7]=> - int(177) - [8]=> - int(0) -} -Done ---UEXPECTF-- -Warning: localtime() expects at most 2 parameters, 3 given in %s on line %d -bool(false) -array(9) { - [0]=> - int(%d) - [1]=> - int(%d) - [2]=> - int(%d) - [3]=> - int(%d) - [4]=> - int(%d) - [5]=> - int(%d) - [6]=> - int(%d) - [7]=> - int(%d) - [8]=> - int(%d) -} -array(9) { - [0]=> - int(0) - [1]=> - int(0) - [2]=> - int(0) - [3]=> - int(27) - [4]=> - int(5) - [5]=> - int(106) - [6]=> - int(2) - [7]=> - int(177) - [8]=> - int(0) -} -array(9) { - [u"tm_sec"]=> - int(0) - [u"tm_min"]=> - int(0) - [u"tm_hour"]=> - int(0) - [u"tm_mday"]=> - int(27) - [u"tm_mon"]=> - int(5) - [u"tm_year"]=> - int(106) - [u"tm_wday"]=> - int(2) - [u"tm_yday"]=> - int(177) - [u"tm_isdst"]=> - int(0) -} -array(9) { - [0]=> - int(0) - [1]=> - int(0) - [2]=> - int(0) - [3]=> - int(27) - [4]=> - int(5) - [5]=> - int(106) - [6]=> - int(2) - [7]=> - int(177) - [8]=> - int(0) -} -Done diff --git a/ext/date/tests/008.phpt b/ext/date/tests/008.phpt deleted file mode 100644 index 9abdd447f7621..0000000000000 --- a/ext/date/tests/008.phpt +++ /dev/null @@ -1,119 +0,0 @@ ---TEST-- -getdate() tests ---INI-- -date.timezone=UTC ---FILE-- - ---EXPECTF-- -Warning: getdate() expects at most 1 parameter, 2 given in %s on line %d -bool(false) -array(11) { - ["seconds"]=> - int(0) - ["minutes"]=> - int(0) - ["hours"]=> - int(0) - ["mday"]=> - int(27) - ["wday"]=> - int(2) - ["mon"]=> - int(6) - ["year"]=> - int(2006) - ["yday"]=> - int(177) - ["weekday"]=> - string(7) "Tuesday" - ["month"]=> - string(4) "June" - [0]=> - int(1151366400) -} -array(11) { - ["seconds"]=> - int(%d) - ["minutes"]=> - int(%d) - ["hours"]=> - int(%d) - ["mday"]=> - int(%d) - ["wday"]=> - int(%d) - ["mon"]=> - int(%d) - ["year"]=> - int(%d) - ["yday"]=> - int(%d) - ["weekday"]=> - string(%d) "%s" - ["month"]=> - string(%d) "%s" - [0]=> - int(%d) -} -Done ---UEXPECTF-- -Warning: getdate() expects at most 1 parameter, 2 given in %s on line %d -bool(false) -array(11) { - [u"seconds"]=> - int(0) - [u"minutes"]=> - int(0) - [u"hours"]=> - int(0) - [u"mday"]=> - int(27) - [u"wday"]=> - int(2) - [u"mon"]=> - int(6) - [u"year"]=> - int(2006) - [u"yday"]=> - int(177) - [u"weekday"]=> - string(7) "Tuesday" - [u"month"]=> - string(4) "June" - [0]=> - int(1151366400) -} -array(11) { - [u"seconds"]=> - int(%d) - [u"minutes"]=> - int(%d) - [u"hours"]=> - int(%d) - [u"mday"]=> - int(%d) - [u"wday"]=> - int(%d) - [u"mon"]=> - int(%d) - [u"year"]=> - int(%d) - [u"yday"]=> - int(%d) - [u"weekday"]=> - string(%d) "%s" - [u"month"]=> - string(%d) "%s" - [0]=> - int(%d) -} -Done diff --git a/ext/date/tests/009.phpt b/ext/date/tests/009.phpt deleted file mode 100644 index 4d569ae1776ea..0000000000000 --- a/ext/date/tests/009.phpt +++ /dev/null @@ -1,65 +0,0 @@ ---TEST-- -strftime() and gmstrftime() tests ---INI-- -date.timezone=Asia/Jerusalem ---FILE-- - ---EXPECTF-- -Warning: strftime() expects at least 1 parameter, 0 given in %s on line %d -bool(false) -bool(false) -string(%d) "Tue Tuesday Jun June Tue Jun 27 00:00:00 2006 %s -%s %" -string(5) "%q %a" -string(%d) "%s" -string(4) "blah" - -Warning: gmstrftime() expects at least 1 parameter, 0 given in %s on line %d -bool(false) -bool(false) -string(%d) "Mon Monday Jun June Mon Jun 26 21:00:00 2006 %s -%s %" -string(5) "%q %a" -string(%d) "%s" -string(4) "blah" -Done ---UEXPECTF-- -Warning: strftime() expects at least 1 parameter, 0 given in %s on line %d -bool(false) -bool(false) -unicode(%d) "Tue Tuesday Jun June Tue Jun 27 00:00:00 2006 %s -%s %" -unicode(5) "%q %a" -unicode(%d) "%s" -unicode(4) "blah" - -Warning: gmstrftime() expects at least 1 parameter, 0 given in %s on line %d -bool(false) -bool(false) -unicode(%d) "Mon Monday Jun June Mon Jun 26 21:00:00 2006 %s -%s %" -unicode(5) "%q %a" -unicode(%d) "%s" -unicode(4) "blah" -Done diff --git a/ext/date/tests/010.phpt b/ext/date/tests/010.phpt deleted file mode 100644 index 32a647aace144..0000000000000 --- a/ext/date/tests/010.phpt +++ /dev/null @@ -1,644 +0,0 @@ ---TEST-- -timezone_abbreviations_list() tests ---INI-- -date.timezone=UTC ---FILE-- - ---EXPECTF-- -array(70) { - [0]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(16) "America/New_York" - } - [1]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(15) "America/Antigua" - } - [2]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(16) "America/Atikokan" - } - [3]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(21) "America/Cambridge_Bay" - } - [4]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(14) "America/Cancun" - } - [5]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(14) "America/Cayman" - } - [6]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(15) "America/Chicago" - } - [7]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(21) "America/Coral_Harbour" - } - [8]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(15) "America/Detroit" - } - [9]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(18) "America/Fort_Wayne" - } - [10]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(18) "America/Grand_Turk" - } - [11]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(28) "America/Indiana/Indianapolis" - } - [12]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(20) "America/Indiana/Knox" - } - [13]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(23) "America/Indiana/Marengo" - } - [14]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(26) "America/Indiana/Petersburg" - } - [15]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(21) "America/Indiana/Vevay" - } - [16]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(25) "America/Indiana/Vincennes" - } - [17]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(20) "America/Indianapolis" - } - [18]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(15) "America/Iqaluit" - } - [19]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(15) "America/Jamaica" - } - [20]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(27) "America/Kentucky/Louisville" - } - [21]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(27) "America/Kentucky/Monticello" - } - [22]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(15) "America/Knox_IN" - } - [23]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(18) "America/Louisville" - } - [24]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(15) "America/Managua" - } - [25]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(17) "America/Menominee" - } - [26]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(14) "America/Merida" - } - [27]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(16) "America/Montreal" - } - [28]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(14) "America/Nassau" - } - [29]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(15) "America/Nipigon" - } - [30]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(14) "America/Panama" - } - [31]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(19) "America/Pangnirtung" - } - [32]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(22) "America/Port-au-Prince" - } - [33]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(20) "America/Rankin_Inlet" - } - [34]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(21) "America/Santo_Domingo" - } - [35]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(19) "America/Thunder_Bay" - } - [36]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(15) "America/Toronto" - } - [37]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(14) "Canada/Eastern" - } - [38]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(3) "EST" - } - [39]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(7) "EST5EDT" - } - [40]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(7) "Jamaica" - } - [41]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(10) "US/Central" - } - [42]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(15) "US/East-Indiana" - } - [43]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(10) "US/Eastern" - } - [44]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(17) "US/Indiana-Starke" - } - [45]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(-18000) - ["timezone_id"]=> - string(11) "US/Michigan" - } - [46]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(36000) - ["timezone_id"]=> - string(13) "Australia/ACT" - } - [47]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(36000) - ["timezone_id"]=> - string(18) "Australia/Brisbane" - } - [48]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(36000) - ["timezone_id"]=> - string(18) "Australia/Canberra" - } - [49]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(36000) - ["timezone_id"]=> - string(16) "Australia/Currie" - } - [50]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(36000) - ["timezone_id"]=> - string(16) "Australia/Hobart" - } - [51]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(36000) - ["timezone_id"]=> - string(18) "Australia/Lindeman" - } - [52]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(36000) - ["timezone_id"]=> - string(19) "Australia/Melbourne" - } - [53]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(36000) - ["timezone_id"]=> - string(13) "Australia/NSW" - } - [54]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(36000) - ["timezone_id"]=> - string(20) "Australia/Queensland" - } - [55]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(36000) - ["timezone_id"]=> - string(16) "Australia/Sydney" - } - [56]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(36000) - ["timezone_id"]=> - string(18) "Australia/Tasmania" - } - [57]=> - array(3) { - ["dst"]=> - bool(false) - ["offset"]=> - int(36000) - ["timezone_id"]=> - string(18) "Australia/Victoria" - } - [58]=> - array(3) { - ["dst"]=> - bool(true) - ["offset"]=> - int(39600) - ["timezone_id"]=> - string(19) "Australia/Melbourne" - } - [59]=> - array(3) { - ["dst"]=> - bool(true) - ["offset"]=> - int(39600) - ["timezone_id"]=> - string(13) "Australia/ACT" - } - [60]=> - array(3) { - ["dst"]=> - bool(true) - ["offset"]=> - int(39600) - ["timezone_id"]=> - string(18) "Australia/Brisbane" - } - [61]=> - array(3) { - ["dst"]=> - bool(true) - ["offset"]=> - int(39600) - ["timezone_id"]=> - string(18) "Australia/Canberra" - } - [62]=> - array(3) { - ["dst"]=> - bool(true) - ["offset"]=> - int(39600) - ["timezone_id"]=> - string(16) "Australia/Currie" - } - [63]=> - array(3) { - ["dst"]=> - bool(true) - ["offset"]=> - int(39600) - ["timezone_id"]=> - string(16) "Australia/Hobart" - } - [64]=> - array(3) { - ["dst"]=> - bool(true) - ["offset"]=> - int(39600) - ["timezone_id"]=> - string(18) "Australia/Lindeman" - } - [65]=> - array(3) { - ["dst"]=> - bool(true) - ["offset"]=> - int(39600) - ["timezone_id"]=> - string(13) "Australia/NSW" - } - [66]=> - array(3) { - ["dst"]=> - bool(true) - ["offset"]=> - int(39600) - ["timezone_id"]=> - string(20) "Australia/Queensland" - } - [67]=> - array(3) { - ["dst"]=> - bool(true) - ["offset"]=> - int(39600) - ["timezone_id"]=> - string(16) "Australia/Sydney" - } - [68]=> - array(3) { - ["dst"]=> - bool(true) - ["offset"]=> - int(39600) - ["timezone_id"]=> - string(18) "Australia/Tasmania" - } - [69]=> - array(3) { - ["dst"]=> - bool(true) - ["offset"]=> - int(39600) - ["timezone_id"]=> - string(18) "Australia/Victoria" - } -} -Done diff --git a/ext/date/tests/011.phpt b/ext/date/tests/011.phpt deleted file mode 100644 index 1302f1d2122d2..0000000000000 --- a/ext/date/tests/011.phpt +++ /dev/null @@ -1,23 +0,0 @@ ---TEST-- -timezone_name_from_abbr() tests ---INI-- -date.timezone=UTC ---FILE-- - ---EXPECTF-- -Warning: timezone_name_from_abbr() expects at least 1 parameter, 0 given in %s on line 3 -bool(false) -string(13) "Europe/Berlin" -bool(false) -bool(false) -string(12) "Europe/Paris" -Done diff --git a/ext/date/tests/012.phpt b/ext/date/tests/012.phpt deleted file mode 100644 index bfba6d182b068..0000000000000 --- a/ext/date/tests/012.phpt +++ /dev/null @@ -1,53 +0,0 @@ ---TEST-- -date_isodate_set() tests ---INI-- -date.timezone=UTC ---FILE-- -format("Y/m/d H:i:s")); -var_dump(date_isodate_set($dto, 2006)); -var_dump($dto->format("Y/m/d H:i:s")); -var_dump(date_isodate_set($dto, 2006, 5)); -var_dump($dto->format("Y/m/d H:i:s")); -var_dump(date_isodate_set($dto, 2006, 100, 15)); -var_dump($dto->format("Y/m/d H:i:s")); -var_dump(date_isodate_set($dto, 2006, 100, 15, 10)); -var_dump($dto->format("Y/m/d H:i:s")); - -echo "Done\n"; -?> ---EXPECTF-- -NULL -string(19) "2006/01/23 00:00:00" - -Warning: date_isodate_set() expects at least 3 parameters, 2 given in %s on line %d -bool(false) -string(19) "2006/01/23 00:00:00" -NULL -string(19) "2006/01/30 00:00:00" -NULL -string(19) "2007/12/10 00:00:00" - -Warning: date_isodate_set() expects at most 4 parameters, 5 given in %s on line %d -bool(false) -string(19) "2007/12/10 00:00:00" -Done ---UEXPECTF-- -NULL -unicode(19) "2006/01/23 00:00:00" - -Warning: date_isodate_set() expects at least 3 parameters, 2 given in %s on line %d -bool(false) -unicode(19) "2006/01/23 00:00:00" -NULL -unicode(19) "2006/01/30 00:00:00" -NULL -unicode(19) "2007/12/10 00:00:00" - -Warning: date_isodate_set() expects at most 4 parameters, 5 given in %s on line %d -bool(false) -unicode(19) "2007/12/10 00:00:00" -Done diff --git a/ext/date/tests/013.phpt b/ext/date/tests/013.phpt deleted file mode 100644 index 75e31d5c538a6..0000000000000 --- a/ext/date/tests/013.phpt +++ /dev/null @@ -1,55 +0,0 @@ ---TEST-- -date_date_set() tests ---INI-- -date.timezone=UTC ---FILE-- -format("Y.m.d H:i:s")); -var_dump(date_date_set()); -var_dump($dto->format("Y.m.d H:i:s")); -var_dump(date_date_set($dto, 2006, 5)); -var_dump($dto->format("Y.m.d H:i:s")); -var_dump(date_date_set($dto, 2006, 2, 15)); -var_dump($dto->format("Y.m.d H:i:s")); -var_dump(date_date_set($dto, 2006, 24, 60)); -var_dump($dto->format("Y.m.d H:i:s")); - -echo "Done\n"; -?> ---EXPECTF-- -object(DateTime)#%d (0) { -} -string(19) "2006.12.12 00:00:00" - -Warning: date_date_set() expects exactly 4 parameters, 0 given in %s on line %d -bool(false) -string(19) "2006.12.12 00:00:00" - -Warning: date_date_set() expects exactly 4 parameters, 3 given in %s on line %d -bool(false) -string(19) "2006.12.12 00:00:00" -NULL -string(19) "2006.02.15 00:00:00" -NULL -string(19) "2008.01.29 00:00:00" -Done ---UEXPECTF-- -object(DateTime)#%d (0) { -} -unicode(19) "2006.12.12 00:00:00" - -Warning: date_date_set() expects exactly 4 parameters, 0 given in %s on line %d -bool(false) -unicode(19) "2006.12.12 00:00:00" - -Warning: date_date_set() expects exactly 4 parameters, 3 given in %s on line %d -bool(false) -unicode(19) "2006.12.12 00:00:00" -NULL -unicode(19) "2006.02.15 00:00:00" -NULL -unicode(19) "2008.01.29 00:00:00" -Done diff --git a/ext/date/tests/014.phpt b/ext/date/tests/014.phpt deleted file mode 100644 index af57e55dd4cc3..0000000000000 --- a/ext/date/tests/014.phpt +++ /dev/null @@ -1,33 +0,0 @@ ---TEST-- -timezone_offset_get() tests ---INI-- -date.timezone=UTC ---FILE-- - ---EXPECTF-- -object(DateTime)#%d (0) { -} -object(DateTimeZone)#%d (0) { -} - -Warning: timezone_offset_get() expects exactly 2 parameters, 0 given in %s on line %d -bool(false) -int(0) - -Warning: timezone_offset_get() expects parameter 1 to be DateTimeZone, object given in %s on line %d -bool(false) -Done diff --git a/ext/date/tests/bug13142.phpt b/ext/date/tests/bug13142.phpt deleted file mode 100644 index 5e54263c54932..0000000000000 --- a/ext/date/tests/bug13142.phpt +++ /dev/null @@ -1,20 +0,0 @@ ---TEST-- -Bug #13142 (strtotime handling of "M d H:i:s Y" format) ---SKIPIF-- - ---FILE-- - ---EXPECT-- -Tue, 04 Sep 2001 16:39:45 -0400 -Tue, 04 Sep 2001 16:39:45 -0400 diff --git a/ext/date/tests/bug14561.phpt b/ext/date/tests/bug14561.phpt deleted file mode 100644 index 98638c3e4b525..0000000000000 --- a/ext/date/tests/bug14561.phpt +++ /dev/null @@ -1,11 +0,0 @@ ---TEST-- -Bug #14561 (strtotime() bug) ---FILE-- - ---EXPECT-- -1134847800 -1134847800 diff --git a/ext/date/tests/bug17988.phpt b/ext/date/tests/bug17988.phpt deleted file mode 100644 index 259fa7dc2e3bd..0000000000000 --- a/ext/date/tests/bug17988.phpt +++ /dev/null @@ -1,33 +0,0 @@ ---TEST-- -Bug #17988 (strtotime handling of postgresql timestamps) ---FILE-- - ---EXPECT-- -2002-06-25 14:18:48 -2002-06-25 14:18:48 -2002-06-25 13:18:48 -2002-06-25 12:18:48 -2002-06-25 18:18:48 -2002-06-25 14:18:48 -2002-06-25 14:18:48 -2002-06-25 18:18:48 -2002-06-25 10:18:48 -2002-06-25 17:18:48 -2002-06-25 11:18:48 -2002-06-25 17:48:48 -2002-06-25 10:48:48 diff --git a/ext/date/tests/bug20382-1.phpt b/ext/date/tests/bug20382-1.phpt deleted file mode 100644 index a259d934af1d6..0000000000000 --- a/ext/date/tests/bug20382-1.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -Bug #20382 [1] (strtotime ("Monday", $date) produces wrong result on DST changeover) ---FILE-- - ---EXPECT-- -tStamp=Wednesday 2004-10-27 17:17:17 CEST -result=Monday 2004-11-01 00:00:00 CET -wanted=Monday 2004-11-01 00:00:00 CET diff --git a/ext/date/tests/bug20382-2.phpt b/ext/date/tests/bug20382-2.phpt deleted file mode 100644 index 639f1b799d8e6..0000000000000 --- a/ext/date/tests/bug20382-2.phpt +++ /dev/null @@ -1,170 +0,0 @@ ---TEST-- -Bug #20382 [2] (strtotime ("Monday", $date) produces wrong result on DST changeover) ---FILE-- - ---EXPECT-- -Europe/Andorra -ts = Monday 2037-10-19 17:17:17 CEST -result = Monday 2037-10-26 00:00:00 CET -wanted = Monday 00:00:00 - -Asia/Dubai -ts = Thursday 1970-01-01 17:17:17 GST -result = Monday 1970-01-05 00:00:00 GST -wanted = Monday 00:00:00 - -Asia/Kabul -ts = Thursday 1970-01-01 17:17:17 AFT -result = Monday 1970-01-05 00:00:00 AFT -wanted = Monday 00:00:00 - -America/Antigua -ts = Thursday 1970-01-01 17:17:17 AST -result = Monday 1970-01-05 00:00:00 AST -wanted = Monday 00:00:00 - -America/Anguilla -ts = Thursday 1970-01-01 17:17:17 AST -result = Monday 1970-01-05 00:00:00 AST -wanted = Monday 00:00:00 - -Europe/Tirane -ts = Monday 1983-04-11 17:17:17 CET -result = Monday 1983-04-18 01:00:00 CEST -wanted = Monday 00:00:00 - -Asia/Yerevan -ts = Monday 2037-10-19 17:17:17 AMST -result = Monday 2037-10-26 00:00:00 AMT -wanted = Monday 00:00:00 - -America/Curacao -ts = Thursday 1970-01-01 17:17:17 AST -result = Monday 1970-01-05 00:00:00 AST -wanted = Monday 00:00:00 - -Africa/Luanda -ts = Thursday 1970-01-01 17:17:17 WAT -result = Monday 1970-01-05 00:00:00 WAT -wanted = Monday 00:00:00 - -Antarctica/McMurdo -ts = Monday 2037-09-28 17:17:17 NZST -result = Monday 2037-10-05 00:00:00 NZDT -wanted = Monday 00:00:00 - -Australia/Adelaide -ts = Friday 1971-01-01 17:17:17 CST -result = Monday 1971-01-04 00:00:00 CST -wanted = Monday 00:00:00 - -Australia/Darwin -ts = Monday 1971-03-29 17:17:17 CST -result = Monday 1971-04-05 00:00:00 CST -wanted = Monday 00:00:00 - -Australia/Perth -ts = Friday 1971-01-01 17:17:17 WST -result = Monday 1971-01-04 00:00:00 WST -wanted = Monday 00:00:00 - -America/Aruba -ts = Monday 1971-03-29 17:17:17 AST -result = Monday 1971-04-05 00:00:00 AST -wanted = Monday 00:00:00 - -Asia/Baku -ts = Friday 1971-01-01 17:17:17 BAKT -result = Monday 1971-01-04 00:00:00 BAKT -wanted = Monday 00:00:00 - -Europe/Sarajevo -ts = Friday 1971-01-01 17:17:17 CET -result = Monday 1971-01-04 00:00:00 CET -wanted = Monday 00:00:00 - -America/Barbados -ts = Friday 1971-01-01 17:17:17 AST -result = Monday 1971-01-04 00:00:00 AST -wanted = Monday 00:00:00 - -Asia/Dacca -ts = Friday 1971-01-01 17:17:17 DACT -result = Monday 1971-01-04 00:00:00 DACT -wanted = Monday 00:00:00 - -Europe/Brussels -ts = Friday 1971-01-01 17:17:17 CET -result = Monday 1971-01-04 00:00:00 CET -wanted = Monday 00:00:00 - -Africa/Ouagadougou -ts = Monday 1971-03-29 17:17:17 GMT -result = Monday 1971-04-05 00:00:00 GMT -wanted = Monday 00:00:00 - -Europe/Tirane -ts = Monday 1983-04-11 17:17:17 CET -result = Monday 1983-04-18 01:00:00 CEST -wanted = Monday 00:00:00 - -America/Buenos_Aires -ts = Monday 1974-09-30 17:17:17 ART -result = Monday 1974-10-07 00:00:00 ART -wanted = Monday 00:00:00 - -America/Rosario -ts = Monday 1974-09-30 17:17:17 ART -result = Monday 1974-10-07 00:00:00 ART -wanted = Monday 00:00:00 - -Europe/Vienna -ts = Monday 1980-03-31 17:17:17 CET -result = Monday 1980-04-07 00:00:00 CEST -wanted = Monday 00:00:00 - -Asia/Baku -ts = Monday 1995-12-25 17:17:17 AZT -result = Monday 1996-01-01 00:00:00 AZT -wanted = Monday 00:00:00 diff --git a/ext/date/tests/bug21399.phpt b/ext/date/tests/bug21399.phpt deleted file mode 100644 index 08040bec54307..0000000000000 --- a/ext/date/tests/bug21399.phpt +++ /dev/null @@ -1,9 +0,0 @@ ---TEST-- -Bug #21399 (strtotime() request for "YYYYMMDDhhmmss [ZZZ]") ---FILE-- - ---EXPECT-- -2005-06-20 09:14:07 diff --git a/ext/date/tests/bug21966.phpt b/ext/date/tests/bug21966.phpt deleted file mode 100644 index 31f592fa98407..0000000000000 --- a/ext/date/tests/bug21966.phpt +++ /dev/null @@ -1,19 +0,0 @@ ---TEST-- -Bug #21966 (date() or mktime() returning bad value for mktime month param of '2') ---FILE-- - ---EXPECT-- -27/3/04 = 1080345600 -28/3/04 = 1080432000 -28/3/04 = 1080435600 -29/3/04 = 1080514800 -30/3/04 = 1080601200 diff --git a/ext/date/tests/bug26090.phpt b/ext/date/tests/bug26090.phpt deleted file mode 100644 index 03a90352cc092..0000000000000 --- a/ext/date/tests/bug26090.phpt +++ /dev/null @@ -1,14 +0,0 @@ ---TEST-- -Bug #26090 (allow colons in time zone offset to strtotime()) ---FILE-- - ---EXPECT-- -2003-10-28 13:20:30 EST -2003-10-28 13:20:30 EST diff --git a/ext/date/tests/bug26198.phpt b/ext/date/tests/bug26198.phpt deleted file mode 100644 index c957bfcf7a9b9..0000000000000 --- a/ext/date/tests/bug26198.phpt +++ /dev/null @@ -1,11 +0,0 @@ ---TEST-- -Bug #26198 (strtotime handling of "M Y" and "Y M" format) ---FILE-- - ---EXPECT-- -October 2001 (2001-10-01 00:00:00 GMT) -Oct 2001 (2001-10-01 00:00:00 GMT) diff --git a/ext/date/tests/bug26317.phpt b/ext/date/tests/bug26317.phpt deleted file mode 100644 index aef29035e2a91..0000000000000 --- a/ext/date/tests/bug26317.phpt +++ /dev/null @@ -1,17 +0,0 @@ ---TEST-- -Bug #26317 (military timezone offset signedness) ---SKIPIF-- -if (!@putenv("TZ=GMT0") || getenv("TZ") != 'GMT0') { - die("skip unable to change TZ enviroment variable\n"); -} ---FILE-- - ---EXPECT-- -2003-11-19 16:20:42 -2003-11-19 16:20:42 -2003-11-19 16:20:42 diff --git a/ext/date/tests/bug26320.phpt b/ext/date/tests/bug26320.phpt deleted file mode 100644 index 5b237cadbf1cb..0000000000000 --- a/ext/date/tests/bug26320.phpt +++ /dev/null @@ -1,15 +0,0 @@ ---TEST-- -Bug #26320 (strtotime handling of XML Schema/ISO 8601 format) ---SKIPIF-- -if (!@putenv("TZ=GMT0") || getenv("TZ") != 'GMT0') { - die("skip unable to change TZ enviroment variable\n"); -} ---FILE-- - ---EXPECT-- -2003-11-19 12:30:42 -2003-11-19 12:30:42 diff --git a/ext/date/tests/bug26694.phpt b/ext/date/tests/bug26694.phpt deleted file mode 100644 index a709d1666c335..0000000000000 --- a/ext/date/tests/bug26694.phpt +++ /dev/null @@ -1,9 +0,0 @@ ---TEST-- -Bug #26694 (strtotime() request for "Sun, 21 Dec 2003 20:38:33 +0000 GMT") ---FILE-- - ---EXPECT-- -2003-12-21 20:38:33 diff --git a/ext/date/tests/bug27719.phpt b/ext/date/tests/bug27719.phpt deleted file mode 100644 index 6f65bfb85e0a2..0000000000000 --- a/ext/date/tests/bug27719.phpt +++ /dev/null @@ -1,67 +0,0 @@ ---TEST-- -Bug #27719 (mktime returns incorrect timestamp for dst days) ---INI-- -error_reporting=2047 ---FILE-- - ---EXPECTF-- -1081054800 04/04/04 12:00:00 -%s -1081054800 04/04/04 12:00:00 - -1075870800 02/04/04 12:00:00 -1075867200 02/03/04 11:00:00 -1075870800 02/04/04 12:00:00 - -1081054800 04/04/04 12:00:00 -1081051200 04/03/04 11:00:00 -1081054800 04/04/04 12:00:00 - -1081065600 04/04/04 04:00:00 -1081062000 04/04/04 03:00:00 -1081062000 04/04/04 03:00:00 - -1086325200 06/04/04 01:00:00 -1086321600 06/04/04 12:00:00 -1086321600 06/04/04 12:00:00 diff --git a/ext/date/tests/bug27780.phpt b/ext/date/tests/bug27780.phpt deleted file mode 100644 index f1e6eb67bd9e9..0000000000000 --- a/ext/date/tests/bug27780.phpt +++ /dev/null @@ -1,113 +0,0 @@ ---TEST-- -Bug #27780 (strtotime(+1 xxx) returns a wrong date/time) ---FILE-- - ---EXPECT-- -America/Chicago -1076824799 [2004-02-14 23:59:59 CST] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +59 seconds] -1076824800 [2004-02-15 00:00:00 CST] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +60 seconds] -1076824801 [2004-02-15 00:00:01 CST] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +61 seconds] -1079503200 [2004-03-17 00:00:00 CST] [2004-04-07 00:00:00 -21 days] -1080367200 [2004-03-27 00:00:00 CST] [2004-04-07 00:00:00 11 days ago] -1080460800 [2004-03-28 02:00:00 CST] [2004-04-07 00:00:00 -10 day +2 hours] -1081227600 [2004-04-06 00:00:00 CDT] [2004-04-07 00:00:00 -1 day] -1081314000 [2004-04-07 00:00:00 CDT] [2004-04-07 00:00:00] -1081317600 [2004-04-07 01:00:00 CDT] [2004-04-07 00:00:00 +1 hour] -1081321200 [2004-04-07 02:00:00 CDT] [2004-04-07 00:00:00 +2 hour] -1081400400 [2004-04-08 00:00:00 CDT] [2004-04-07 00:00:00 +1 day] -1081400400 [2004-04-08 00:00:00 CDT] [2004-04-07 00:00:00 1 day] -1083128400 [2004-04-28 00:00:00 CDT] [2004-04-07 00:00:00 +21 days] - -Europe/Amsterdam -1076799599 [2004-02-14 23:59:59 CET] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +59 seconds] -1076799600 [2004-02-15 00:00:00 CET] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +60 seconds] -1076799601 [2004-02-15 00:00:01 CET] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +61 seconds] -1079478000 [2004-03-17 00:00:00 CET] [2004-04-07 00:00:00 -21 days] -1080342000 [2004-03-27 00:00:00 CET] [2004-04-07 00:00:00 11 days ago] -1080435600 [2004-03-28 03:00:00 CEST] [2004-04-07 00:00:00 -10 day +2 hours] -1081202400 [2004-04-06 00:00:00 CEST] [2004-04-07 00:00:00 -1 day] -1081288800 [2004-04-07 00:00:00 CEST] [2004-04-07 00:00:00] -1081292400 [2004-04-07 01:00:00 CEST] [2004-04-07 00:00:00 +1 hour] -1081296000 [2004-04-07 02:00:00 CEST] [2004-04-07 00:00:00 +2 hour] -1081375200 [2004-04-08 00:00:00 CEST] [2004-04-07 00:00:00 +1 day] -1081375200 [2004-04-08 00:00:00 CEST] [2004-04-07 00:00:00 1 day] -1083103200 [2004-04-28 00:00:00 CEST] [2004-04-07 00:00:00 +21 days] - -Asia/Jerusalem -1076795999 [2004-02-14 23:59:59 IST] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +59 seconds] -1076796000 [2004-02-15 00:00:00 IST] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +60 seconds] -1076796001 [2004-02-15 00:00:01 IST] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +61 seconds] -1079474400 [2004-03-17 00:00:00 IST] [2004-04-07 00:00:00 -21 days] -1080338400 [2004-03-27 00:00:00 IST] [2004-04-07 00:00:00 11 days ago] -1080432000 [2004-03-28 02:00:00 IST] [2004-04-07 00:00:00 -10 day +2 hours] -1081202400 [2004-04-06 00:00:00 IST] [2004-04-07 00:00:00 -1 day] -1081288800 [2004-04-07 00:00:00 IST] [2004-04-07 00:00:00] -1081292400 [2004-04-07 02:00:00 IDT] [2004-04-07 00:00:00 +1 hour] -1081292400 [2004-04-07 02:00:00 IDT] [2004-04-07 00:00:00 +2 hour] -1081371600 [2004-04-08 00:00:00 IDT] [2004-04-07 00:00:00 +1 day] -1081371600 [2004-04-08 00:00:00 IDT] [2004-04-07 00:00:00 1 day] -1083099600 [2004-04-28 00:00:00 IDT] [2004-04-07 00:00:00 +21 days] - -Asia/Singapore -1076774399 [2004-02-14 23:59:59 SGT] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +59 seconds] -1076774400 [2004-02-15 00:00:00 SGT] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +60 seconds] -1076774401 [2004-02-15 00:00:01 SGT] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +61 seconds] -1079452800 [2004-03-17 00:00:00 SGT] [2004-04-07 00:00:00 -21 days] -1080316800 [2004-03-27 00:00:00 SGT] [2004-04-07 00:00:00 11 days ago] -1080410400 [2004-03-28 02:00:00 SGT] [2004-04-07 00:00:00 -10 day +2 hours] -1081180800 [2004-04-06 00:00:00 SGT] [2004-04-07 00:00:00 -1 day] -1081267200 [2004-04-07 00:00:00 SGT] [2004-04-07 00:00:00] -1081270800 [2004-04-07 01:00:00 SGT] [2004-04-07 00:00:00 +1 hour] -1081274400 [2004-04-07 02:00:00 SGT] [2004-04-07 00:00:00 +2 hour] -1081353600 [2004-04-08 00:00:00 SGT] [2004-04-07 00:00:00 +1 day] -1081353600 [2004-04-08 00:00:00 SGT] [2004-04-07 00:00:00 1 day] -1083081600 [2004-04-28 00:00:00 SGT] [2004-04-07 00:00:00 +21 days] - -America/Sao_Paulo -1076810399 [2004-02-14 23:59:59 BRST] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +59 seconds] -1076814000 [2004-02-15 00:00:00 BRT] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +60 seconds] -1076814001 [2004-02-15 00:00:01 BRT] [2004-04-07 00:00:00 -2 months +7 days +23 hours +59 minutes +61 seconds] -1079492400 [2004-03-17 00:00:00 BRT] [2004-04-07 00:00:00 -21 days] -1080356400 [2004-03-27 00:00:00 BRT] [2004-04-07 00:00:00 11 days ago] -1080450000 [2004-03-28 02:00:00 BRT] [2004-04-07 00:00:00 -10 day +2 hours] -1081220400 [2004-04-06 00:00:00 BRT] [2004-04-07 00:00:00 -1 day] -1081306800 [2004-04-07 00:00:00 BRT] [2004-04-07 00:00:00] -1081310400 [2004-04-07 01:00:00 BRT] [2004-04-07 00:00:00 +1 hour] -1081314000 [2004-04-07 02:00:00 BRT] [2004-04-07 00:00:00 +2 hour] -1081393200 [2004-04-08 00:00:00 BRT] [2004-04-07 00:00:00 +1 day] -1081393200 [2004-04-08 00:00:00 BRT] [2004-04-07 00:00:00 1 day] -1083121200 [2004-04-28 00:00:00 BRT] [2004-04-07 00:00:00 +21 days] diff --git a/ext/date/tests/bug28024.phpt b/ext/date/tests/bug28024.phpt deleted file mode 100644 index 3e0399adbed3b..0000000000000 --- a/ext/date/tests/bug28024.phpt +++ /dev/null @@ -1,11 +0,0 @@ ---TEST-- -Bug #28024 (Changed behavior of strtotime()) ---FILE-- - ---EXPECT-- -1072972800 -2004-01-01 17:00:00 CET diff --git a/ext/date/tests/bug28088.phpt b/ext/date/tests/bug28088.phpt deleted file mode 100644 index 95866e00be461..0000000000000 --- a/ext/date/tests/bug28088.phpt +++ /dev/null @@ -1,17 +0,0 @@ ---TEST-- -Bug #28088 (strtotime() cannot convert 00 hours") ---FILE-- - ---EXPECT-- -The following line rightly shows the correct date time: -04/04/04 2345 -But the following line fails to show the correct date time: -04/04/04 0045 diff --git a/ext/date/tests/bug28599.phpt b/ext/date/tests/bug28599.phpt deleted file mode 100644 index fcd17b46972fb..0000000000000 --- a/ext/date/tests/bug28599.phpt +++ /dev/null @@ -1,9 +0,0 @@ ---TEST-- -Bug #28599 (strtotime fails with zero base time) ---FILE-- - ---EXPECT-- -15-11-2004 16:49:33 diff --git a/ext/date/tests/bug29150.phpt b/ext/date/tests/bug29150.phpt deleted file mode 100644 index 274584d050842..0000000000000 --- a/ext/date/tests/bug29150.phpt +++ /dev/null @@ -1,9 +0,0 @@ ---TEST-- -Bug #29150 (Roman number format for months) ---FILE-- - ---EXPECT-- -2005-06-20 00:00:00 diff --git a/ext/date/tests/bug29585.phpt b/ext/date/tests/bug29585.phpt deleted file mode 100644 index 394569924662b..0000000000000 --- a/ext/date/tests/bug29585.phpt +++ /dev/null @@ -1,9 +0,0 @@ ---TEST-- -Bug #29585 (Support week numbers in strtotime()) ---FILE-- - ---EXPECT-- -2004-07-19 00:00:00 diff --git a/ext/date/tests/bug29595.phpt b/ext/date/tests/bug29595.phpt deleted file mode 100644 index 285ade140b348..0000000000000 --- a/ext/date/tests/bug29595.phpt +++ /dev/null @@ -1,11 +0,0 @@ ---TEST-- -Bug #29595 (Roman number format for months) ---FILE-- - ---EXPECT-- -1092026907 diff --git a/ext/date/tests/bug30096.phpt b/ext/date/tests/bug30096.phpt deleted file mode 100644 index fa4f716ee650b..0000000000000 --- a/ext/date/tests/bug30096.phpt +++ /dev/null @@ -1,48 +0,0 @@ ---TEST-- -Bug #30096 (gmmktime does not return the corrent time) ---INI-- -error_reporting=2047 ---FILE-- - dst\n"; -$ts = -1; -gm_date_check(01,00,00,03,27,2005); -gm_date_check(02,00,00,03,27,2005); -gm_date_check(03,00,00,03,27,2005); -gm_date_check(04,00,00,03,27,2005); - -echo "\ndst --> no dst\n"; -$ts = -1; -gm_date_check(01,00,00,10,30,2005); -gm_date_check(02,00,00,10,30,2005); -gm_date_check(03,00,00,10,30,2005); -gm_date_check(04,00,00,10,30,2005); - -function gm_date_check($hour, $minute, $second, $month, $day, $year) { - global $ts, $tsold; - - echo "gmmktime($hour,$minute,$second,$month,$day,$year): "; - - $tsold = $ts; - $ts = gmmktime($hour, $minute, $second, $month, $day, $year); - - echo $ts, " | gmdate('r', $ts):", gmdate('r', $ts); - if ($tsold > 0) { - echo " | Diff: " . ($ts - $tsold); - } - echo "\n"; -} - -?> ---EXPECT-- -no dst --> dst -gmmktime(1,0,0,3,27,2005): 1111885200 | gmdate('r', 1111885200):Sun, 27 Mar 2005 01:00:00 +0000 -gmmktime(2,0,0,3,27,2005): 1111888800 | gmdate('r', 1111888800):Sun, 27 Mar 2005 02:00:00 +0000 | Diff: 3600 -gmmktime(3,0,0,3,27,2005): 1111892400 | gmdate('r', 1111892400):Sun, 27 Mar 2005 03:00:00 +0000 | Diff: 3600 -gmmktime(4,0,0,3,27,2005): 1111896000 | gmdate('r', 1111896000):Sun, 27 Mar 2005 04:00:00 +0000 | Diff: 3600 - -dst --> no dst -gmmktime(1,0,0,10,30,2005): 1130634000 | gmdate('r', 1130634000):Sun, 30 Oct 2005 01:00:00 +0000 -gmmktime(2,0,0,10,30,2005): 1130637600 | gmdate('r', 1130637600):Sun, 30 Oct 2005 02:00:00 +0000 | Diff: 3600 -gmmktime(3,0,0,10,30,2005): 1130641200 | gmdate('r', 1130641200):Sun, 30 Oct 2005 03:00:00 +0000 | Diff: 3600 -gmmktime(4,0,0,10,30,2005): 1130644800 | gmdate('r', 1130644800):Sun, 30 Oct 2005 04:00:00 +0000 | Diff: 3600 diff --git a/ext/date/tests/bug30532.phpt b/ext/date/tests/bug30532.phpt deleted file mode 100644 index faee0b316f32c..0000000000000 --- a/ext/date/tests/bug30532.phpt +++ /dev/null @@ -1,23 +0,0 @@ ---TEST-- -Bug #30532 (strtotime - crossing daylight savings time) ---FILE-- - ---EXPECT-- -2004-10-31 01:00:00 EDT -2004-10-31 01:00:00 EST -2004-10-31 02:00:00 EST - -2004-10-31 01:00:00 EDT -2004-10-31 02:00:00 EST -2004-10-31 03:00:00 EST diff --git a/ext/date/tests/bug32086.phpt b/ext/date/tests/bug32086.phpt deleted file mode 100644 index 2799164cb1842..0000000000000 --- a/ext/date/tests/bug32086.phpt +++ /dev/null @@ -1,49 +0,0 @@ ---TEST-- -Bug #32086 (strtotime don't work in DST) ---FILE-- - ---EXPECT-- -1099278000 -1099364400 -1099364400 -1099364400 -1099447200 -2004-11-01 00:00:00 BRT -2004-11-02 01:00:00 BRST -2004-11-02 01:00:00 BRST -2004-11-02 01:00:00 BRST -2004-11-03 00:00:00 BRST -1108778400 -1108868400 -1108868400 -1108868400 -1108954800 -2005-02-19 00:00:00 BRST -2005-02-20 00:00:00 BRT -2005-02-20 00:00:00 BRT -2005-02-20 00:00:00 BRT -2005-02-21 00:00:00 BRT diff --git a/ext/date/tests/bug32270.phpt b/ext/date/tests/bug32270.phpt deleted file mode 100644 index 2c5ff47549803..0000000000000 --- a/ext/date/tests/bug32270.phpt +++ /dev/null @@ -1,25 +0,0 @@ ---TEST-- -Bug #32270 (strtotime/date behavior) ---FILE-- - ---EXPECT-- -01/01/1902 00:00:00 PST --2145888000 -01/01/1950 00:00:00 PST --631123200 -01/01/2000 00:00:00 PST -946713600 diff --git a/ext/date/tests/bug32555.phpt b/ext/date/tests/bug32555.phpt deleted file mode 100644 index 3ef513b5e902f..0000000000000 --- a/ext/date/tests/bug32555.phpt +++ /dev/null @@ -1,17 +0,0 @@ ---TEST-- -Bug #32555 (strtotime("tomorrow") can return false) ---FILE-- - ---EXPECT-- -Sat Apr 2 02:30:00 2005 EST -Sun Apr 3 00:00:00 2005 EST -Sun Apr 3 03:30:00 2005 EDT -Mon Apr 4 02:30:00 2005 EDT diff --git a/ext/date/tests/bug32588.phpt b/ext/date/tests/bug32588.phpt deleted file mode 100644 index 6cf5ac92f85ff..0000000000000 --- a/ext/date/tests/bug32588.phpt +++ /dev/null @@ -1,13 +0,0 @@ ---TEST-- -Bug #32588 (strtotime() error for 'last xxx' DST problem) ---FILE-- - ---EXPECT-- -1116406800 -1116407554 -1116443554 diff --git a/ext/date/tests/bug33414-1.phpt b/ext/date/tests/bug33414-1.phpt deleted file mode 100644 index 7b15228cf348b..0000000000000 --- a/ext/date/tests/bug33414-1.phpt +++ /dev/null @@ -1,320 +0,0 @@ ---TEST-- -Bug #33414 [1] (Comprehensive list of incorrect days returned after strotime() / date() tests) ---FILE-- - ---EXPECT-- -TZ=America/Mendoza - wrong day. -tStamp=Sunday 1992-10-18 17:17:17 ARST 1 -result=Sunday 1992-10-25 00:00:00 ARST 1 -wanted=Sunday 00:00:00 - -TZ=America/Catamarca - wrong day. -tStamp=Sunday 1990-10-21 17:17:17 ARST 1 -result=Sunday 1990-10-28 00:00:00 ARST 1 -wanted=Sunday 00:00:00 - -TZ=America/Cordoba - wrong day. -tStamp=Sunday 1990-10-21 17:17:17 ARST 1 -result=Sunday 1990-10-28 00:00:00 ARST 1 -wanted=Sunday 00:00:00 - -TZ=America/Rosario - wrong day. -tStamp=Tuesday 1991-10-15 17:17:17 WART 0 -result=Tuesday 1991-10-22 00:00:00 ARST 1 -wanted=Tuesday 00:00:00 - -TZ=Europe/Vienna - wrong day - giving unexpected results, at -least on my system :-) -tStamp=Thursday 1980-04-03 17:17:17 CET 0 -result=Thursday 1980-04-10 00:00:00 CEST 1 -wanted=Thursday 00:00:00 - -TZ=Asia/Baku - wrong day. -tStamp=Sunday 1992-09-20 17:17:17 AZST 1 -result=Sunday 1992-09-27 00:00:00 AZT 0 -wanted=Sunday 00:00:00 - -TZ=America/Noronha - wrong day. -tStamp=Friday 1999-10-01 17:17:17 FNT 0 -result=Friday 1999-10-08 00:00:00 FNST 1 -wanted=Friday 00:00:00 - -TZ=America/Havana - wrong day. -tStamp=Thursday 2004-10-28 17:17:17 CDT 1 -result=Thursday 2004-11-04 00:00:00 CDT 1 -wanted=Thursday 00:00:00 - -TZ=Europe/Tallinn - wrong day. -tStamp=Saturday 2002-03-30 17:17:17 EET 0 -result=Saturday 2002-04-06 00:00:00 EEST 1 -wanted=Saturday 00:00:00 - -TZ=Asia/Jerusalem - wrong day. -tStamp=Thursday 2005-09-29 17:17:17 IDT 1 -result=Thursday 2005-10-06 00:00:00 IDT 1 -wanted=Thursday 00:00:00 - -TZ=Europe/Vilnius - wrong day. -tStamp=Friday 2003-03-28 17:17:17 EET 0 -result=Friday 2003-04-04 00:00:00 EEST 1 -wanted=Friday 00:00:00 - -TZ=Pacific/Kwajalein - wrong day. -tStamp=Friday 1993-08-13 17:17:17 KWAT 0 -result=Saturday 1993-08-21 00:00:00 MHT 0 -wanted=Friday 00:00:00 - -TZ=Asia/Ulan_Bator - wrong day. -tStamp=Saturday 2001-09-22 17:17:17 ULAST 1 -result=Saturday 2001-09-29 00:00:00 ULAST 1 -wanted=Saturday 00:00:00 - -TZ=America/Cancun - wrong day. -tStamp=Sunday 2002-04-07 17:17:17 CDT 1 -result=Sunday 2002-04-14 00:00:00 CDT 1 -wanted=Sunday 00:00:00 - -TZ=America/Mexico_City - wrong day. -tStamp=Wednesday 2002-04-03 17:17:17 CST 0 -result=Wednesday 2002-04-10 00:00:00 CDT 1 -wanted=Wednesday 00:00:00 - -TZ=America/Mazatlan - wrong day. -tStamp=Tuesday 2002-04-02 17:17:17 MST 0 -result=Tuesday 2002-04-09 00:00:00 MDT 1 -wanted=Tuesday 00:00:00 - -TZ=America/Chihuahua - wrong day. -tStamp=Thursday 2002-04-04 17:17:17 MST 0 -result=Thursday 2002-04-11 00:00:00 MDT 1 -wanted=Thursday 00:00:00 - -TZ=Asia/Kuala_Lumpur - wrong day. -tStamp=Monday 1981-12-28 17:17:17 MALT 0 -result=Monday 1982-01-04 00:00:00 MYT 0 -wanted=Monday 00:00:00 - -TZ=Pacific/Chatham - wrong day. -tStamp=Monday 1974-10-28 17:17:17 CHAST 0 -result=Monday 1974-11-04 00:00:00 CHADT 1 -wanted=Monday 00:00:00 - -TZ=America/Lima - wrong day. -tStamp=Thursday 1985-12-26 17:17:17 PET 0 -result=Thursday 1986-01-02 00:00:00 PEST 1 -wanted=Thursday 00:00:00 - -TZ=Asia/Karachi - wrong day. -tStamp=Friday 2002-04-05 17:17:17 PKT 0 -result=Friday 2002-04-12 00:00:00 PKST 1 -wanted=Friday 00:00:00 - -TZ=America/Asuncion - wrong day. -tStamp=Wednesday 2002-02-27 17:17:17 PYST 1 -result=Wednesday 2002-03-06 00:00:00 PYST 1 -wanted=Wednesday 00:00:00 - -TZ=Asia/Singapore - wrong day. -tStamp=Thursday 1981-12-31 17:17:17 SGT 0 -result=Thursday 1982-01-07 00:00:00 SGT 0 -wanted=Thursday 00:00:00 - -TZ=America/Montevideo - wrong day. -tStamp=Thursday 2004-09-16 17:17:17 UYT 0 -result=Thursday 2004-09-23 00:00:00 UYST 1 -wanted=Thursday 00:00:00 diff --git a/ext/date/tests/bug33414-2.phpt b/ext/date/tests/bug33414-2.phpt deleted file mode 100644 index 8eb2a35697227..0000000000000 --- a/ext/date/tests/bug33414-2.phpt +++ /dev/null @@ -1,121 +0,0 @@ ---TEST-- -Bug #33414 [2] (Comprehensive list of incorrect days returned after strotime() / date() tests) ---FILE-- - ---EXPECT-- -TZ=Pacific/Rarotonga - wrong day. -tStamp=Thursday 1970-01-01 17:17:17 CKT 0 -result=Tuesday 1970-01-06 00:00:00 CKT 0 -wanted=Tuesday 00:00:00 - -TZ=Atlantic/South_Georgia - wrong day. -tStamp=Thursday 1970-01-01 17:17:17 GST 0 -result=Tuesday 1970-01-06 00:00:00 GST 0 -wanted=Tuesday 00:00:00 - -TZ=America/Port-au-Prince - wrong day. -tStamp=Monday 2005-03-28 17:17:17 EST 0 -result=Monday 2005-04-04 00:00:00 EDT 1 -wanted=Monday 00:00:00 - -TZ=Pacific/Enderbury - wrong day, off by 2 days. -tStamp=Thursday 1970-01-01 17:17:17 PHOT 0 -result=Monday 1970-01-05 00:00:00 PHOT 0 -wanted=Monday 00:00:00 - -TZ=Pacific/Kiritimati - wrong day, off by 2 days. -tStamp=Thursday 1970-01-01 17:17:17 LINT 0 -result=Monday 1970-01-05 00:00:00 LINT 0 -wanted=Monday 00:00:00 - -TZ=America/Managua - wrong day. -tStamp=Tuesday 2005-04-05 17:17:17 CST 0 -result=Tuesday 2005-04-12 00:00:00 CDT 1 -wanted=Tuesday 00:00:00 - -TZ=Pacific/Pitcairn - wrong day. -tStamp=Thursday 1970-01-01 17:17:17 PNT 0 -result=Wednesday 1970-01-07 00:00:00 PNT 0 -wanted=Wednesday 00:00:00 - -TZ=Pacific/Fakaofo - wrong day. -tStamp=Thursday 1970-01-01 17:17:17 TKT 0 -result=Saturday 1970-01-03 00:00:00 TKT 0 -wanted=Saturday 00:00:00 - -TZ=Pacific/Johnston - wrong day. -tStamp=Thursday 1970-01-01 17:17:17 HST 0 -result=Friday 1970-01-02 00:00:00 HST 0 -wanted=Friday 00:00:00 diff --git a/ext/date/tests/bug33415-1.phpt b/ext/date/tests/bug33415-1.phpt deleted file mode 100644 index 3d36af8a53329..0000000000000 --- a/ext/date/tests/bug33415-1.phpt +++ /dev/null @@ -1,33 +0,0 @@ ---TEST-- -Bug #33415 [1] (Possibly invalid non-one-hour DST or timezone shifts) ---FILE-- - ---EXPECT-- -TZ=America/Jujuy - Is it OK for this to be 2 AM, rather than 1 -AM as per most DST transitions? -tStamp=Monday 1990-10-15 17:17:17 WART 0 -result=Monday 1990-10-22 00:00:00 WART 0 -wanted=Monday 00:00:00 - -TZ=Asia/Tbilisi - Is it OK for this to be 2 AM? -tStamp=Sunday 2005-03-20 17:17:17 GET 0 -result=Sunday 2005-03-27 00:00:00 GET 0 -wanted=Sunday 00:00:00 diff --git a/ext/date/tests/bug33415-2.phpt b/ext/date/tests/bug33415-2.phpt deleted file mode 100644 index a1e5930b5ff52..0000000000000 --- a/ext/date/tests/bug33415-2.phpt +++ /dev/null @@ -1,342 +0,0 @@ ---TEST-- -Bug #33415 [2] (Possibly invalid non-one-hour DST or timezone shifts) ---FILE-- - ---EXPECT-- -TZ=Africa/Bujumbura - *Note*: Unexpected, as does not appear to -have a DST or timezone transition. -tStamp=Thursday 1970-01-01 17:17:17 CAT 0 -result=Wednesday 1970-01-07 00:00:00 CAT 0 -wanted=Wednesday 00:00:00 - -TZ=Asia/Thimbu - Is it OK for this to be 0:30 AM? yes -tStamp=Thursday 1987-09-24 17:17:17 IST 0 -result=Thursday 1987-10-01 00:30:00 BTT 0 -wanted=Thursday 00:30:00 - -TZ=Indian/Cocos - Is it OK for this to be 6:30 AM? Note: does not -appear to have a DST or timezone transition. -tStamp=Thursday 1970-01-01 17:17:17 CCT 0 -result=Thursday 1970-01-08 00:00:00 CCT 0 -wanted=Thursday 00:00:00 - -TZ=Africa/Lubumbashi - Is it OK for this to be 2 AM? Note: does -not appear to have a DST or timezone transition. -tStamp=Thursday 1970-01-01 17:17:17 CAT 0 -result=Saturday 1970-01-03 00:00:00 CAT 0 -wanted=Saturday 00:00:00 - -TZ=Asia/Kashgar - Is it OK for this to be 3 AM? yes -tStamp=Thursday 1980-04-24 17:17:17 KAST 0 -result=Thursday 1980-05-01 03:00:00 CST 0 -wanted=Thursday 03:00:00 - -TZ=Indian/Christmas - Is it OK for this to be 7 AM? Note: does -not appear to have a DST or timezone transition. -tStamp=Thursday 1970-01-01 17:17:17 CXT 0 -result=Sunday 1970-01-04 00:00:00 CXT 0 -wanted=Sunday 00:00:00 - -TZ=America/Santo_Domingo - Is it OK for this to be 0:30 AM? yes -tStamp=Sunday 1970-10-18 17:17:17 EST 0 -result=Sunday 1970-10-25 00:30:00 EHDT 1 -wanted=Sunday 00:30:00 - -TZ=Pacific/Truk - Is it OK for this to be 10 AM? Note: does not -appear to have a DST or timezone transition. -tStamp=Thursday 1970-01-01 17:17:17 TRUT 0 -result=Tuesday 1970-01-06 00:00:00 TRUT 0 -wanted=Tuesday 00:00:00 - -TZ=Pacific/Ponape - Is it OK for this to be 11 AM? Note: does -not appear to have a DST or timezone transition. -tStamp=Thursday 1970-01-01 17:17:17 PONT 0 -result=Monday 1970-01-05 00:00:00 PONT 0 -wanted=Monday 00:00:00 - -TZ=America/Scoresbysund - Is it OK for this to be 2 AM? yes -tStamp=Sunday 1981-03-22 17:17:17 CGT 0 -result=Sunday 1981-03-29 02:00:00 EGST 1 -wanted=Sunday 02:00:00 - -TZ=America/Guyana - Is it OK for this to be 0:45 AM? yes -tStamp=Thursday 1975-07-24 17:17:17 GYT 0 -result=Thursday 1975-07-31 00:45:00 GYT 0 -wanted=Thursday 00:45:00 - -TZ=Asia/Tehran - Is it OK for this to be 0:30 AM? yes -tStamp=Tuesday 1977-10-25 17:17:17 IRST 0 -result=Tuesday 1977-11-01 00:30:00 IRST 0 -wanted=Tuesday 00:30:00 - -TZ=Pacific/Tarawa - Is it OK for this to be Midday? Note: does -not appear to have a DST or timezone transition. -tStamp=Thursday 1970-01-01 17:17:17 GILT 0 -result=Monday 1970-01-05 00:00:00 GILT 0 -wanted=Monday 00:00:00 - -TZ=Africa/Monrovia - Is it OK for this to be 00:44:30 AM? yes -tStamp=Monday 1972-04-24 17:17:17 LRT 0 -result=Monday 1972-05-01 00:44:30 GMT 0 -wanted=Monday 00:44:30 - -TZ=Asia/Katmandu - Is it OK for this to 0:15 AM?. yes -tStamp=Wednesday 1985-12-25 17:17:17 IST 0 -result=Wednesday 1986-01-01 00:15:00 NPT 0 -wanted=Wednesday 00:15:00 - -TZ=Pacific/Nauru - Is it OK for this to be 0:30? yes -tStamp=Tuesday 1979-04-24 17:17:17 NRT 0 -result=Tuesday 1979-05-01 00:30:00 NRT 0 -wanted=Tuesday 00:30:00 - -TZ=Pacific/Niue - Is it OK for this to be 0:30 AM? yes -tStamp=Sunday 1978-09-24 17:17:17 NUT 0 -result=Sunday 1978-10-01 00:30:00 NUT 0 -wanted=Sunday 00:30:00 - -TZ=Pacific/Port_Moresby - Is it OK for this to be 10 AM? No DST -or timezone transition. -tStamp=Thursday 1970-01-01 17:17:17 PGT 0 -result=Thursday 1970-01-08 00:00:00 PGT 0 -wanted=Thursday 00:00:00 - -TZ=America/Miquelon - Is it OK for this to be 1 AM ? yes -tStamp=Thursday 1980-04-24 17:17:17 AST 0 -result=Thursday 1980-05-01 01:00:00 PMST 0 -wanted=Thursday 01:00:00 - -TZ=Pacific/Palau - Is it OK for this to be 9 AM? No DST or -timezone transition. -tStamp=Thursday 1970-01-01 17:17:17 PWT 0 -result=Saturday 1970-01-03 00:00:00 PWT 0 -wanted=Saturday 00:00:00 - -TZ=Pacific/Funafuti - Is it OK for this to be midday? Note: does -not appear to have a DST or timezone transition. -tStamp=Thursday 1970-01-01 17:17:17 TVT 0 -result=Wednesday 1970-01-07 00:00:00 TVT 0 -wanted=Wednesday 00:00:00 - -TZ=Pacific/Wake - Is it OK for this to be midday? Note: does not -appear to have a DST or timezone transition. -tStamp=Thursday 1970-01-01 17:17:17 WAKT 0 -result=Tuesday 1970-01-06 00:00:00 WAKT 0 -wanted=Tuesday 00:00:00 - -TZ=Pacific/Wallis - Is it OK for this to be midday? Note: does -not appear to have a DST or timezone transition. -tStamp=Thursday 1970-01-01 17:17:17 WFT 0 -result=Tuesday 1970-01-06 00:00:00 WFT 0 -wanted=Tuesday 00:00:00 - -TZ=America/Paramaribo - Is it OK for this to be 0:30 AM? yes -tStamp=Monday 1984-09-24 17:17:17 SRT 0 -result=Monday 1984-10-01 00:30:00 SRT 0 -wanted=Monday 00:30:00 diff --git a/ext/date/tests/bug33452.phpt b/ext/date/tests/bug33452.phpt deleted file mode 100644 index e5abebf3c8dd6..0000000000000 --- a/ext/date/tests/bug33452.phpt +++ /dev/null @@ -1,11 +0,0 @@ ---TEST-- -Bug #33452 (Support for year accompanying ISO week nr) ---FILE-- - ---EXPECT-- -2005-53 -2004-53 diff --git a/ext/date/tests/bug33532.phpt b/ext/date/tests/bug33532.phpt deleted file mode 100644 index 2a8da034120c9..0000000000000 --- a/ext/date/tests/bug33532.phpt +++ /dev/null @@ -1,38 +0,0 @@ ---TEST-- -Bug #33532 (Different output for strftime() and date()) ---INI-- -error_reporting=2047 -date.timezone=UTC ---FILE-- - ---EXPECT-- -TZ has NOT been set -Should strftime==datestr? Strftime seems to assume GMT tStamp. -input 10:00:00 AM July 1 2005 -strftime 10:00:00 AM July 1 2005 UTC +0000 -datestr 10:00:00 AM July 1 2005 UTC - -Setting TZ -input 10:00:00 AM July 1 2005 -strftime 10:00:00 AM July 1 2005 EST +1000 -datestr 10:00:00 AM July 1 2005 EST diff --git a/ext/date/tests/bug33536.phpt b/ext/date/tests/bug33536.phpt deleted file mode 100644 index aa5f5ddb38bfe..0000000000000 --- a/ext/date/tests/bug33536.phpt +++ /dev/null @@ -1,13 +0,0 @@ ---TEST-- -Bug #33456 (strtotime defaults to now even on non time string) ---FILE-- - ---EXPECT-- -bool(false) -1970-01-01 -1970-01-01 diff --git a/ext/date/tests/bug33562.phpt b/ext/date/tests/bug33562.phpt deleted file mode 100644 index 8383a79ab7359..0000000000000 --- a/ext/date/tests/bug33562.phpt +++ /dev/null @@ -1,11 +0,0 @@ ---TEST-- -Bug #33562 (date("") crashes) ---FILE-- - ---EXPECT-- -[] -done diff --git a/ext/date/tests/bug33563.phpt b/ext/date/tests/bug33563.phpt deleted file mode 100644 index 9f4eb7b4d27dd..0000000000000 --- a/ext/date/tests/bug33563.phpt +++ /dev/null @@ -1,12 +0,0 @@ ---TEST-- -Bug #33563 (strtotime('+1 month',$abc) cant get right time) ---FILE-- - ---EXPECT-- -strCurrDate:2005-06-30 21:04:23 strMonAfter:2005-07-30 21:04:23 diff --git a/ext/date/tests/bug33578.phpt b/ext/date/tests/bug33578.phpt deleted file mode 100644 index 4ba6df85971c3..0000000000000 --- a/ext/date/tests/bug33578.phpt +++ /dev/null @@ -1,21 +0,0 @@ ---TEST-- -Bug #33578 (strtotime() doesn't parse "11 Oct" format") ---FILE-- - ---EXPECTF-- -10/11/%d -10/11/%d -10/11/2005 -10/11/%d -10/11/%d -10/11/2005 -10/11/2005 diff --git a/ext/date/tests/bug33869.phpt b/ext/date/tests/bug33869.phpt deleted file mode 100644 index 6957a6b7e24cd..0000000000000 --- a/ext/date/tests/bug33869.phpt +++ /dev/null @@ -1,26 +0,0 @@ ---TEST-- -Bug #33869 (strtotime() doesn't parse "+1days" format) ---FILE-- - ---EXPECT-- -2005-01-06T01:01:01+0000 -2005-02-01T01:01:01+0000 -2006-01-01T01:01:01+0000 -2005-01-06T01:01:01+0000 -2005-02-01T01:01:01+0000 -2006-01-01T01:01:01+0000 diff --git a/ext/date/tests/bug33957.phpt b/ext/date/tests/bug33957.phpt deleted file mode 100644 index 43f14ee315f1d..0000000000000 --- a/ext/date/tests/bug33957.phpt +++ /dev/null @@ -1,103 +0,0 @@ ---TEST-- -Bug #33957 (gmdate('W')/date('W') sometimes returns wrong week number) ---FILE-- - ---EXPECT-- -1992-12-14 51 -1992-12-15 51 -1992-12-16 51 -1992-12-17 51 -1992-12-18 51 -1992-12-19 51 -1992-12-20 51 -1992-12-21 52 -1992-12-22 52 -1992-12-23 52 -1992-12-24 52 -1992-12-25 52 -1992-12-26 52 -1992-12-27 52 -1992-12-28 53 -1992-12-29 53 -1992-12-30 53 -1992-12-31 53 -1993-01-1 53 -1993-01-2 53 -1993-01-3 53 -1993-01-4 01 -1993-01-5 01 -1993-01-6 01 -1993-01-7 01 -1993-01-8 01 ----- - 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 - (12-14) 51-1992 50-1993 50-1994 50-1995 50-1996 50-1997 51-1998 50-1999 50-2000 50-2001 50-2002 50-2003 51-2004 50-2005 50-2006 50-2007 50-2008 51-2009 50-2010 50-2011 50-2012 50-2013 50-2014 51-2015 50-2016 50-2017 50-2018 50-2019 - (12-15) 51-1992 50-1993 50-1994 50-1995 50-1996 51-1997 51-1998 50-1999 50-2000 50-2001 50-2002 51-2003 51-2004 50-2005 50-2006 50-2007 51-2008 51-2009 50-2010 50-2011 50-2012 50-2013 51-2014 51-2015 50-2016 50-2017 50-2018 50-2019 - (12-16) 51-1992 50-1993 50-1994 50-1995 51-1996 51-1997 51-1998 50-1999 50-2000 50-2001 51-2002 51-2003 51-2004 50-2005 50-2006 50-2007 51-2008 51-2009 50-2010 50-2011 50-2012 51-2013 51-2014 51-2015 50-2016 50-2017 50-2018 51-2019 - (12-17) 51-1992 50-1993 50-1994 50-1995 51-1996 51-1997 51-1998 50-1999 50-2000 51-2001 51-2002 51-2003 51-2004 50-2005 50-2006 51-2007 51-2008 51-2009 50-2010 50-2011 51-2012 51-2013 51-2014 51-2015 50-2016 50-2017 51-2018 51-2019 - (12-18) 51-1992 50-1993 50-1994 51-1995 51-1996 51-1997 51-1998 50-1999 51-2000 51-2001 51-2002 51-2003 51-2004 50-2005 51-2006 51-2007 51-2008 51-2009 50-2010 50-2011 51-2012 51-2013 51-2014 51-2015 50-2016 51-2017 51-2018 51-2019 - (12-19) 51-1992 50-1993 51-1994 51-1995 51-1996 51-1997 51-1998 50-1999 51-2000 51-2001 51-2002 51-2003 51-2004 51-2005 51-2006 51-2007 51-2008 51-2009 50-2010 51-2011 51-2012 51-2013 51-2014 51-2015 51-2016 51-2017 51-2018 51-2019 - (12-20) 51-1992 51-1993 51-1994 51-1995 51-1996 51-1997 51-1998 51-1999 51-2000 51-2001 51-2002 51-2003 52-2004 51-2005 51-2006 51-2007 51-2008 51-2009 51-2010 51-2011 51-2012 51-2013 51-2014 51-2015 51-2016 51-2017 51-2018 51-2019 - (12-21) 52-1992 51-1993 51-1994 51-1995 51-1996 51-1997 52-1998 51-1999 51-2000 51-2001 51-2002 51-2003 52-2004 51-2005 51-2006 51-2007 51-2008 52-2009 51-2010 51-2011 51-2012 51-2013 51-2014 52-2015 51-2016 51-2017 51-2018 51-2019 - (12-22) 52-1992 51-1993 51-1994 51-1995 51-1996 52-1997 52-1998 51-1999 51-2000 51-2001 51-2002 52-2003 52-2004 51-2005 51-2006 51-2007 52-2008 52-2009 51-2010 51-2011 51-2012 51-2013 52-2014 52-2015 51-2016 51-2017 51-2018 51-2019 - (12-23) 52-1992 51-1993 51-1994 51-1995 52-1996 52-1997 52-1998 51-1999 51-2000 51-2001 52-2002 52-2003 52-2004 51-2005 51-2006 51-2007 52-2008 52-2009 51-2010 51-2011 51-2012 52-2013 52-2014 52-2015 51-2016 51-2017 51-2018 52-2019 - (12-24) 52-1992 51-1993 51-1994 51-1995 52-1996 52-1997 52-1998 51-1999 51-2000 52-2001 52-2002 52-2003 52-2004 51-2005 51-2006 52-2007 52-2008 52-2009 51-2010 51-2011 52-2012 52-2013 52-2014 52-2015 51-2016 51-2017 52-2018 52-2019 - (12-25) 52-1992 51-1993 51-1994 52-1995 52-1996 52-1997 52-1998 51-1999 52-2000 52-2001 52-2002 52-2003 52-2004 51-2005 52-2006 52-2007 52-2008 52-2009 51-2010 51-2011 52-2012 52-2013 52-2014 52-2015 51-2016 52-2017 52-2018 52-2019 - (12-26) 52-1992 51-1993 52-1994 52-1995 52-1996 52-1997 52-1998 51-1999 52-2000 52-2001 52-2002 52-2003 52-2004 52-2005 52-2006 52-2007 52-2008 52-2009 51-2010 52-2011 52-2012 52-2013 52-2014 52-2015 52-2016 52-2017 52-2018 52-2019 - (12-27) 52-1992 52-1993 52-1994 52-1995 52-1996 52-1997 52-1998 52-1999 52-2000 52-2001 52-2002 52-2003 53-2004 52-2005 52-2006 52-2007 52-2008 52-2009 52-2010 52-2011 52-2012 52-2013 52-2014 52-2015 52-2016 52-2017 52-2018 52-2019 - (12-28) 53-1992 52-1993 52-1994 52-1995 52-1996 52-1997 53-1998 52-1999 52-2000 52-2001 52-2002 52-2003 53-2004 52-2005 52-2006 52-2007 52-2008 53-2009 52-2010 52-2011 52-2012 52-2013 52-2014 53-2015 52-2016 52-2017 52-2018 52-2019 - (12-29) 53-1992 52-1993 52-1994 52-1995 52-1996 01-1998 53-1998 52-1999 52-2000 52-2001 52-2002 01-2004 53-2004 52-2005 52-2006 52-2007 01-2009 53-2009 52-2010 52-2011 52-2012 52-2013 01-2015 53-2015 52-2016 52-2017 52-2018 52-2019 - (12-30) 53-1992 52-1993 52-1994 52-1995 01-1997 01-1998 53-1998 52-1999 52-2000 52-2001 01-2003 01-2004 53-2004 52-2005 52-2006 52-2007 01-2009 53-2009 52-2010 52-2011 52-2012 01-2014 01-2015 53-2015 52-2016 52-2017 52-2018 01-2020 - (12-31) 53-1992 52-1993 52-1994 52-1995 01-1997 01-1998 53-1998 52-1999 52-2000 01-2002 01-2003 01-2004 53-2004 52-2005 52-2006 01-2008 01-2009 53-2009 52-2010 52-2011 01-2013 01-2014 01-2015 53-2015 52-2016 52-2017 01-2019 01-2020 -+1 (01-01) 53-1992 52-1993 52-1994 01-1996 01-1997 01-1998 53-1998 52-1999 01-2001 01-2002 01-2003 01-2004 53-2004 52-2005 01-2007 01-2008 01-2009 53-2009 52-2010 52-2011 01-2013 01-2014 01-2015 53-2015 52-2016 01-2018 01-2019 01-2020 -+1 (01-02) 53-1992 52-1993 01-1995 01-1996 01-1997 01-1998 53-1998 52-1999 01-2001 01-2002 01-2003 01-2004 53-2004 01-2006 01-2007 01-2008 01-2009 53-2009 52-2010 01-2012 01-2013 01-2014 01-2015 53-2015 01-2017 01-2018 01-2019 01-2020 -+1 (01-03) 53-1992 01-1994 01-1995 01-1996 01-1997 01-1998 53-1998 01-2000 01-2001 01-2002 01-2003 01-2004 01-2005 01-2006 01-2007 01-2008 01-2009 53-2009 01-2011 01-2012 01-2013 01-2014 01-2015 53-2015 01-2017 01-2018 01-2019 01-2020 -+1 (01-04) 01-1993 01-1994 01-1995 01-1996 01-1997 01-1998 01-1999 01-2000 01-2001 01-2002 01-2003 01-2004 01-2005 01-2006 01-2007 01-2008 01-2009 01-2010 01-2011 01-2012 01-2013 01-2014 01-2015 01-2016 01-2017 01-2018 01-2019 01-2020 -+1 (01-05) 01-1993 01-1994 01-1995 01-1996 01-1997 02-1998 01-1999 01-2000 01-2001 01-2002 01-2003 02-2004 01-2005 01-2006 01-2007 01-2008 02-2009 01-2010 01-2011 01-2012 01-2013 01-2014 02-2015 01-2016 01-2017 01-2018 01-2019 01-2020 -+1 (01-06) 01-1993 01-1994 01-1995 01-1996 02-1997 02-1998 01-1999 01-2000 01-2001 01-2002 02-2003 02-2004 01-2005 01-2006 01-2007 01-2008 02-2009 01-2010 01-2011 01-2012 01-2013 02-2014 02-2015 01-2016 01-2017 01-2018 01-2019 02-2020 -+1 (01-07) 01-1993 01-1994 01-1995 01-1996 02-1997 02-1998 01-1999 01-2000 01-2001 02-2002 02-2003 02-2004 01-2005 01-2006 01-2007 02-2008 02-2009 01-2010 01-2011 01-2012 02-2013 02-2014 02-2015 01-2016 01-2017 01-2018 02-2019 02-2020 -+1 (01-08) 01-1993 01-1994 01-1995 02-1996 02-1997 02-1998 01-1999 01-2000 02-2001 02-2002 02-2003 02-2004 01-2005 01-2006 02-2007 02-2008 02-2009 01-2010 01-2011 01-2012 02-2013 02-2014 02-2015 01-2016 01-2017 02-2018 02-2019 02-2020 -+1 (01-09) 01-1993 01-1994 02-1995 02-1996 02-1997 02-1998 01-1999 01-2000 02-2001 02-2002 02-2003 02-2004 01-2005 02-2006 02-2007 02-2008 02-2009 01-2010 01-2011 02-2012 02-2013 02-2014 02-2015 01-2016 02-2017 02-2018 02-2019 02-2020 -+1 (01-10) 01-1993 02-1994 02-1995 02-1996 02-1997 02-1998 01-1999 02-2000 02-2001 02-2002 02-2003 02-2004 02-2005 02-2006 02-2007 02-2008 02-2009 01-2010 02-2011 02-2012 02-2013 02-2014 02-2015 01-2016 02-2017 02-2018 02-2019 02-2020 -+1 (01-11) 02-1993 02-1994 02-1995 02-1996 02-1997 02-1998 02-1999 02-2000 02-2001 02-2002 02-2003 02-2004 02-2005 02-2006 02-2007 02-2008 02-2009 02-2010 02-2011 02-2012 02-2013 02-2014 02-2015 02-2016 02-2017 02-2018 02-2019 02-2020 -+1 (01-12) 02-1993 02-1994 02-1995 02-1996 02-1997 03-1998 02-1999 02-2000 02-2001 02-2002 02-2003 03-2004 02-2005 02-2006 02-2007 02-2008 03-2009 02-2010 02-2011 02-2012 02-2013 02-2014 03-2015 02-2016 02-2017 02-2018 02-2019 02-2020 -+1 (01-13) 02-1993 02-1994 02-1995 02-1996 03-1997 03-1998 02-1999 02-2000 02-2001 02-2002 03-2003 03-2004 02-2005 02-2006 02-2007 02-2008 03-2009 02-2010 02-2011 02-2012 02-2013 03-2014 03-2015 02-2016 02-2017 02-2018 02-2019 03-2020 -+1 (01-14) 02-1993 02-1994 02-1995 02-1996 03-1997 03-1998 02-1999 02-2000 02-2001 03-2002 03-2003 03-2004 02-2005 02-2006 02-2007 03-2008 03-2009 02-2010 02-2011 02-2012 03-2013 03-2014 03-2015 02-2016 02-2017 02-2018 03-2019 03-2020 -+1 (01-15) 02-1993 02-1994 02-1995 03-1996 03-1997 03-1998 02-1999 02-2000 03-2001 03-2002 03-2003 03-2004 02-2005 02-2006 03-2007 03-2008 03-2009 02-2010 02-2011 02-2012 03-2013 03-2014 03-2015 02-2016 02-2017 03-2018 03-2019 03-2020 -+1 (01-16) 02-1993 02-1994 03-1995 03-1996 03-1997 03-1998 02-1999 02-2000 03-2001 03-2002 03-2003 03-2004 02-2005 03-2006 03-2007 03-2008 03-2009 02-2010 02-2011 03-2012 03-2013 03-2014 03-2015 02-2016 03-2017 03-2018 03-2019 03-2020 -+1 (01-17) 02-1993 03-1994 03-1995 03-1996 03-1997 03-1998 02-1999 03-2000 03-2001 03-2002 03-2003 03-2004 03-2005 03-2006 03-2007 03-2008 03-2009 02-2010 03-2011 03-2012 03-2013 03-2014 03-2015 02-2016 03-2017 03-2018 03-2019 03-2020 -+1 (01-18) 03-1993 03-1994 03-1995 03-1996 03-1997 03-1998 03-1999 03-2000 03-2001 03-2002 03-2003 03-2004 03-2005 03-2006 03-2007 03-2008 03-2009 03-2010 03-2011 03-2012 03-2013 03-2014 03-2015 03-2016 03-2017 03-2018 03-2019 03-2020 ----- diff --git a/ext/date/tests/bug34087.phpt b/ext/date/tests/bug34087.phpt deleted file mode 100644 index 3fa3885481731..0000000000000 --- a/ext/date/tests/bug34087.phpt +++ /dev/null @@ -1,20 +0,0 @@ ---TEST-- -Bug #34087 (strtotime() does not work with date format "Y/m/d") ---FILE-- - ---EXPECT-- -Y/m/d: 1123804800 -Y-m-d: 1123804800 -2005-01-02T00:00:00+0000 -2005-01-02T00:00:00+0000 -2005-01-02T00:00:00+0000 -2005-01-02T00:00:00+0000 diff --git a/ext/date/tests/bug34304.phpt b/ext/date/tests/bug34304.phpt deleted file mode 100644 index a2b26a14c53d5..0000000000000 --- a/ext/date/tests/bug34304.phpt +++ /dev/null @@ -1,11 +0,0 @@ ---TEST-- -Bug #34304 () ---FILE-- - ---EXPECT-- -2004-W53-7 -2005-W01-7 diff --git a/ext/date/tests/bug34676.phpt b/ext/date/tests/bug34676.phpt deleted file mode 100644 index 6f616feb4064a..0000000000000 --- a/ext/date/tests/bug34676.phpt +++ /dev/null @@ -1,19 +0,0 @@ ---TEST-- -Bug #34676 (missing support for strtotime("midnight") and strtotime("noon")) ---FILE-- - %s\n", $test, date(DATE_ISO8601, $t)); -} - -?> ---EXPECT-- -noon => 2005-12-22T12:00:00+0000 -midnight => 2005-12-22T00:00:00+0000 diff --git a/ext/date/tests/bug34771.phpt b/ext/date/tests/bug34771.phpt deleted file mode 100644 index a27d085a1da7b..0000000000000 --- a/ext/date/tests/bug34771.phpt +++ /dev/null @@ -1,32 +0,0 @@ ---TEST-- -Bug #34771 (strtotime() fails with 1-12am/pm) ---FILE-- - %s\n", $test, date(DATE_ISO8601, $t)); -} - -?> ---EXPECT-- -12am => 2005-12-22T00:00:00+0000 -1am => 2005-12-22T01:00:00+0000 -1pm => 2005-12-22T13:00:00+0000 -12a.m. => 2005-12-22T00:00:00+0000 -1a.m. => 2005-12-22T01:00:00+0000 -1p.m. => 2005-12-22T13:00:00+0000 -12:00am => 2005-12-22T00:00:00+0000 -1:00am => 2005-12-22T01:00:00+0000 -1:00pm => 2005-12-22T13:00:00+0000 -12:00a.m. => 2005-12-22T00:00:00+0000 -1:00a.m. => 2005-12-22T01:00:00+0000 -1:00p.m. => 2005-12-22T13:00:00+0000 diff --git a/ext/date/tests/bug35143.phpt b/ext/date/tests/bug35143.phpt deleted file mode 100644 index 8aac915fb11bb..0000000000000 --- a/ext/date/tests/bug35143.phpt +++ /dev/null @@ -1,33 +0,0 @@ ---TEST-- -Bug #35143 (gettimeofday() ignores current time zone) ---FILE-- - ---EXPECTF-- -string(3) "UTC" -array(4) { - ["sec"]=> - int(%d) - ["usec"]=> - int(%d) - ["minuteswest"]=> - int(0) - ["dsttime"]=> - int(0) -} ---UEXPECTF-- -unicode(3) "UTC" -array(4) { - [u"sec"]=> - int(%d) - [u"usec"]=> - int(%d) - [u"minuteswest"]=> - int(0) - [u"dsttime"]=> - int(0) -} diff --git a/ext/date/tests/bug35218.phpt b/ext/date/tests/bug35218.phpt deleted file mode 100644 index 725f03c4aa60c..0000000000000 --- a/ext/date/tests/bug35218.phpt +++ /dev/null @@ -1,14 +0,0 @@ ---TEST-- -Bug #35218 (strtotime no longer ignores timezone comments like "(PST)") ---FILE-- - ---EXPECT-- -int(1131951370) -int(1131951370) diff --git a/ext/date/tests/bug35414.phpt b/ext/date/tests/bug35414.phpt deleted file mode 100644 index f6af5110fb57e..0000000000000 --- a/ext/date/tests/bug35414.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -Bug #35414 (strtotime() no longer works with ordinal suffix) ---FILE-- - ---EXPECT-- -2005-11-26T18:18:00+0000 -2005-11-26T00:00:00+0000 -2005-12-04T00:00:00+0000 -2005-12-04T00:00:00+0000 diff --git a/ext/date/tests/bug35422.phpt b/ext/date/tests/bug35422.phpt deleted file mode 100644 index 8273c75411763..0000000000000 --- a/ext/date/tests/bug35422.phpt +++ /dev/null @@ -1,12 +0,0 @@ ---TEST-- -Bug #35422 (strtotime() does not parse times with UTC as timezone) ---FILE-- - ---EXPECT-- -2000-07-01T00:00:00+0000 -2000-07-01T00:00:00+0000 diff --git a/ext/date/tests/bug35425.phpt b/ext/date/tests/bug35425.phpt deleted file mode 100644 index 4259b49a1c4fc..0000000000000 --- a/ext/date/tests/bug35425.phpt +++ /dev/null @@ -1,30 +0,0 @@ ---TEST-- -Bug #35425 (idate() function ignores timezone settings) ---FILE-- - ---EXPECT-- -int(292) -int(1) -int(1) -int(1) -int(1) -int(0) -int(0) -int(1) -int(1) -int(31) -int(1104559261) -int(6) -int(53) -int(5) -int(2005) -int(0) -int(-18000) diff --git a/ext/date/tests/bug35456.phpt b/ext/date/tests/bug35456.phpt deleted file mode 100644 index 6432b9944530e..0000000000000 --- a/ext/date/tests/bug35456.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -Bug #35456 (+ 1 [time unit] format did not work) ---FILE-- - ---EXPECT-- -2005-11-29T22:15:19+0000 -2005-12-28T22:15:19+0000 -2005-12-05T22:15:19+0000 diff --git a/ext/date/tests/bug35499.phpt b/ext/date/tests/bug35499.phpt deleted file mode 100644 index 2fbcbf0bfaa7d..0000000000000 --- a/ext/date/tests/bug35499.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -Bug #35499 (strtotime() does not handle whitespace around the date string) ---FILE-- - ---EXPECT-- -2005-11-20T08:00:00+0000 -2005-11-20T08:00:00+0000 -bool(false) -bool(false) diff --git a/ext/date/tests/bug35624.phpt b/ext/date/tests/bug35624.phpt deleted file mode 100644 index 722adba823533..0000000000000 --- a/ext/date/tests/bug35624.phpt +++ /dev/null @@ -1,29 +0,0 @@ ---TEST-- -Bug #35624 (strtotime() does not handle 3 character weekdays) ---FILE-- - ---EXPECT-- -MonMon -MonMon -TueTue -TueTue -WedWed -WedWed -ThuThu -ThuThu -FriFri -FriFri -SatSat -SatSat -SunSun -SunSun diff --git a/ext/date/tests/bug35630.phpt b/ext/date/tests/bug35630.phpt deleted file mode 100644 index b111b1aaf2e87..0000000000000 --- a/ext/date/tests/bug35630.phpt +++ /dev/null @@ -1,11 +0,0 @@ ---TEST-- -Bug #35630 (strtotime() crashes on non-separated relative modifiers) ---FILE-- - ---EXPECT-- -2006-01-09T00:00:00+0000 diff --git a/ext/date/tests/bug35699.phpt b/ext/date/tests/bug35699.phpt deleted file mode 100644 index 5e4951e9fc60f..0000000000000 --- a/ext/date/tests/bug35699.phpt +++ /dev/null @@ -1,14 +0,0 @@ ---TEST-- -Bug #35699 (date() can't handle leap years before 1970) ---FILE-- - ---EXPECT-- -1964-06-06T00:00:00+0000 -1963-06-06T00:00:00+0000 -1964-01-06T00:00:00+0000 diff --git a/ext/date/tests/bug35705.phpt b/ext/date/tests/bug35705.phpt deleted file mode 100644 index 6894160a4d4c1..0000000000000 --- a/ext/date/tests/bug35705.phpt +++ /dev/null @@ -1,11 +0,0 @@ ---TEST-- -Bug #35705 (strtotime() fails to parse soap date format without TZ) ---FILE-- - ---EXPECT-- -2000-10-10T10:12:30+0000 diff --git a/ext/date/tests/bug35885.phpt b/ext/date/tests/bug35885.phpt deleted file mode 100644 index 5f4e5d58cff05..0000000000000 --- a/ext/date/tests/bug35885.phpt +++ /dev/null @@ -1,14 +0,0 @@ ---TEST-- -Bug #35885 (strtotime("NOW") no longer works) ---FILE-- - ---EXPECT-- -bool(true) diff --git a/ext/date/tests/bug35887.phpt b/ext/date/tests/bug35887.phpt deleted file mode 100644 index e6ea7bd3889a4..0000000000000 --- a/ext/date/tests/bug35887.phpt +++ /dev/null @@ -1,11 +0,0 @@ ---TEST-- -Bug #35887 (wddx_deserialize not parsing dateTime fields properly) ---FILE-- - ---EXPECT-- -2006-01-06T08:00:00+0000 diff --git a/ext/date/tests/bug36224.phpt b/ext/date/tests/bug36224.phpt deleted file mode 100644 index 1690f4e7b2ce5..0000000000000 --- a/ext/date/tests/bug36224.phpt +++ /dev/null @@ -1,13 +0,0 @@ ---TEST-- -Bug #36224 (date(DATE_ATOM) gives wrong resulsts) ---FILE-- - ---EXPECT-- -2006-01-31T20:23:56+01:00 -2006-01-31T19:23:56+01:00 diff --git a/ext/date/tests/bug36510.phpt b/ext/date/tests/bug36510.phpt deleted file mode 100644 index ea8bb028b22f5..0000000000000 --- a/ext/date/tests/bug36510.phpt +++ /dev/null @@ -1,14 +0,0 @@ ---TEST-- -Bug #36510 (strtotime() fails to parse date strings with tabs) ---FILE-- - ---EXPECT-- -int(1140966188) -int(1140966188) diff --git a/ext/date/tests/bug36599.phpt b/ext/date/tests/bug36599.phpt deleted file mode 100644 index b34a7c288fbc4..0000000000000 --- a/ext/date/tests/bug36599.phpt +++ /dev/null @@ -1,12 +0,0 @@ ---TEST-- -Bug #36599 (DATE_W3C format constant incorrect). ---FILE-- - ---EXPECT-- -2006-03-03T08:47:55+00:00 -2006-03-03T08:47:55+00:00 diff --git a/ext/date/tests/bug36988.phpt b/ext/date/tests/bug36988.phpt deleted file mode 100644 index d35e58939aa1b..0000000000000 --- a/ext/date/tests/bug36988.phpt +++ /dev/null @@ -1,12 +0,0 @@ ---TEST-- -Bug #36988 (mktime freezes on long numbers) ---INI-- -date.timezone=GMT ---FILE-- - ---EXPECT-- -smaller than one second diff --git a/ext/date/tests/bug37017.phpt b/ext/date/tests/bug37017.phpt deleted file mode 100644 index 61dc8ba383f38..0000000000000 --- a/ext/date/tests/bug37017.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -Bug #37017 (strtotime fails before 13:00:00 with some time zones identifiers). ---INI-- -date.timezone=GMT ---FILE-- - ---EXPECT-- -1147453201 -1147453200 -1147453199 -1147438799 diff --git a/ext/date/tests/bug37368.phpt b/ext/date/tests/bug37368.phpt deleted file mode 100644 index 5be1c967987fe..0000000000000 --- a/ext/date/tests/bug37368.phpt +++ /dev/null @@ -1,10 +0,0 @@ ---TEST-- -Bug #37368 (Incorrect timestamp returned for strtotime()). ---INI-- -date.timezone=UTC ---FILE-- - ---EXPECT-- -Wed, 07 Jun 2006 17:06:44 +0000 diff --git a/ext/date/tests/bug37514.phpt b/ext/date/tests/bug37514.phpt deleted file mode 100644 index abbb4407c8d1c..0000000000000 --- a/ext/date/tests/bug37514.phpt +++ /dev/null @@ -1,20 +0,0 @@ ---TEST-- -Bug #37514 (strtotime doesn't assume year correctly). ---INI-- -date.timezone=UTC ---FILE-- - ---EXPECT-- -Fri, 18 May 2007 05:05:00 +0000 -Fri, 18 May 2007 17:05:00 +0000 -Fri, 18 May 2007 17:05:00 +0000 -Fri, 18 May 2007 05:05:00 +0000 -Fri, 18 May 2007 05:05:00 +0000 -Thu, 18 May 2006 17:05:00 +0000 diff --git a/ext/date/tests/bug37616.phpt b/ext/date/tests/bug37616.phpt deleted file mode 100644 index 6572d42601fd4..0000000000000 --- a/ext/date/tests/bug37616.phpt +++ /dev/null @@ -1,11 +0,0 @@ ---TEST-- -Bug #37616 (DATE_RFC822 does not product RFC 822 dates) ---FILE-- - ---EXPECT-- -string(29) "Sat, 01 Jul 06 14:27:30 +0200" ---UEXPECT-- -unicode(29) "Sat, 01 Jul 06 14:27:30 +0200" diff --git a/ext/date/tests/bug37747.phpt b/ext/date/tests/bug37747.phpt deleted file mode 100644 index 465f791c413d0..0000000000000 --- a/ext/date/tests/bug37747.phpt +++ /dev/null @@ -1,11 +0,0 @@ ---TEST-- -Bug #37747 (strtotime segfaults when given "nextyear") ---FILE-- - ---EXPECT-- -bool(false) -ALIVE diff --git a/ext/date/tests/bug38229.phpt b/ext/date/tests/bug38229.phpt deleted file mode 100644 index 472a05faef23d..0000000000000 --- a/ext/date/tests/bug38229.phpt +++ /dev/null @@ -1,13 +0,0 @@ ---TEST-- -Bug #38229 (strtotime() does not parse YYYY-MM) ---FILE-- - ---EXPECT-- -2006-01 -2006-03 -2006-12 diff --git a/ext/date/tests/bug39782.phpt b/ext/date/tests/bug39782.phpt deleted file mode 100644 index 99abdd7bc847b..0000000000000 --- a/ext/date/tests/bug39782.phpt +++ /dev/null @@ -1,19 +0,0 @@ ---TEST-- -Bug #39782 (setTime() on a DateTime constructed with a Weekday yields incorrect results) ---FILE-- -format('D M j Y - H:i:s') . "\n"; - -$dttTest->setTime(12, 0, 0); -echo $dttTest->format('D M j Y - H:i:s') . "\n"; - -$dttTest->setTime(12, 0, 0); -echo $dttTest->format('D M j Y - H:i:s') . "\n"; -?> ---EXPECT-- -Wed Dec 13 2006 - 00:00:00 -Wed Dec 13 2006 - 12:00:00 -Wed Dec 13 2006 - 12:00:00 \ No newline at end of file diff --git a/ext/date/tests/date.phpt b/ext/date/tests/date.phpt deleted file mode 100644 index ccdb3cda946fe..0000000000000 --- a/ext/date/tests/date.phpt +++ /dev/null @@ -1,22 +0,0 @@ ---TEST-- -date() function ---FILE-- - ---EXPECT-- -c: 2003-01-23T12:20:59+00:00 -r: Thu, 23 Jan 2003 12:20:59 +0000 -c: 2003-01-23T13:20:59+01:00 -r: Thu, 23 Jan 2003 13:20:59 +0100 diff --git a/ext/date/tests/date_constants.phpt b/ext/date/tests/date_constants.phpt deleted file mode 100644 index 1bf0025372f67..0000000000000 --- a/ext/date/tests/date_constants.phpt +++ /dev/null @@ -1,110 +0,0 @@ ---TEST-- -Date constants ---FILE-- - ---EXPECT-- -string(25) "2006-07-01T14:27:30+02:00" -string(25) "2006-05-30T14:32:13+02:00" -string(33) "Saturday, 01-Jul-06 14:27:30 CEST" -string(32) "Tuesday, 30-May-06 14:32:13 CEST" -string(24) "2006-07-01T14:27:30+0200" -string(24) "2006-05-30T14:32:13+0200" -string(29) "Sat, 01 Jul 06 14:27:30 +0200" -string(29) "Tue, 30 May 06 14:32:13 +0200" -string(33) "Saturday, 01-Jul-06 14:27:30 CEST" -string(32) "Tuesday, 30-May-06 14:32:13 CEST" -string(29) "Sat, 01 Jul 06 14:27:30 +0200" -string(29) "Tue, 30 May 06 14:32:13 +0200" -string(31) "Sat, 01 Jul 2006 14:27:30 +0200" -string(31) "Tue, 30 May 2006 14:32:13 +0200" -string(31) "Sat, 01 Jul 2006 14:27:30 +0200" -string(31) "Tue, 30 May 2006 14:32:13 +0200" -string(25) "2006-07-01T14:27:30+02:00" -string(25) "2006-05-30T14:32:13+02:00" -string(31) "Sat, 01 Jul 2006 14:27:30 +0200" -string(31) "Tue, 30 May 2006 14:32:13 +0200" -string(25) "2006-07-01T14:27:30+02:00" -string(25) "2006-05-30T14:32:13+02:00" - -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) ---UEXPECT-- -unicode(25) "2006-07-01T14:27:30+02:00" -unicode(25) "2006-05-30T14:32:13+02:00" -unicode(33) "Saturday, 01-Jul-06 14:27:30 CEST" -unicode(32) "Tuesday, 30-May-06 14:32:13 CEST" -unicode(24) "2006-07-01T14:27:30+0200" -unicode(24) "2006-05-30T14:32:13+0200" -unicode(29) "Sat, 01 Jul 06 14:27:30 +0200" -unicode(29) "Tue, 30 May 06 14:32:13 +0200" -unicode(33) "Saturday, 01-Jul-06 14:27:30 CEST" -unicode(32) "Tuesday, 30-May-06 14:32:13 CEST" -unicode(29) "Sat, 01 Jul 06 14:27:30 +0200" -unicode(29) "Tue, 30 May 06 14:32:13 +0200" -unicode(31) "Sat, 01 Jul 2006 14:27:30 +0200" -unicode(31) "Tue, 30 May 2006 14:32:13 +0200" -unicode(31) "Sat, 01 Jul 2006 14:27:30 +0200" -unicode(31) "Tue, 30 May 2006 14:32:13 +0200" -unicode(25) "2006-07-01T14:27:30+02:00" -unicode(25) "2006-05-30T14:32:13+02:00" -unicode(31) "Sat, 01 Jul 2006 14:27:30 +0200" -unicode(31) "Tue, 30 May 2006 14:32:13 +0200" -unicode(25) "2006-07-01T14:27:30+02:00" -unicode(25) "2006-05-30T14:32:13+02:00" - -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) diff --git a/ext/date/tests/date_create-1.phpt b/ext/date/tests/date_create-1.phpt deleted file mode 100644 index 365d54dc9469e..0000000000000 --- a/ext/date/tests/date_create-1.phpt +++ /dev/null @@ -1,48 +0,0 @@ ---TEST-- -date_create() function [1] ---SKIPIF-- - ---FILE-- -format(DateTime::ISO8601), "\n"; -} -?> ---EXPECT-- -2005-07-14T22:30:41+0200 -2005-07-14T22:30:41+0000 -2005-07-14T22:30:41+0100 -2005-07-14T22:30:41+0200 -2005-07-14T22:30:41+0200 -2005-07-14T22:30:41-0700 -2005-07-14T22:30:41+0000 -2005-07-14T22:30:41+0100 -2005-07-14T22:30:41-0700 -2005-07-14T22:30:41+0000 -2005-07-14T22:30:41+0000 -2005-07-14T22:30:41+0000 -2005-07-14T22:30:41+0200 -2005-07-14T22:30:41-0700 diff --git a/ext/date/tests/date_create-2.phpt b/ext/date/tests/date_create-2.phpt deleted file mode 100644 index 4aa33595d8c82..0000000000000 --- a/ext/date/tests/date_create-2.phpt +++ /dev/null @@ -1,12 +0,0 @@ ---TEST-- -date_create() function [2] ---SKIPIF-- - ---FILE-- -format('D, d M Y H:i:s T'), "\n"; -?> ---EXPECT-- -Mon, 18 Jul 2005 22:10:00 GMT+0400 diff --git a/ext/date/tests/date_create-3.phpt b/ext/date/tests/date_create-3.phpt deleted file mode 100644 index 07bfa7e6e6974..0000000000000 --- a/ext/date/tests/date_create-3.phpt +++ /dev/null @@ -1,13 +0,0 @@ ---TEST-- -date_create() function [3] ---SKIPIF-- - ---FILE-- - ---EXPECT-- -2005-12-31T00:00:00+0100 -2005-12-31T00:00:00+0100 diff --git a/ext/date/tests/date_default_timezone_get-1.phpt b/ext/date/tests/date_default_timezone_get-1.phpt deleted file mode 100644 index b6494658e4d7c..0000000000000 --- a/ext/date/tests/date_default_timezone_get-1.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -date_default_timezone_get() function [1] ---INI-- -date.timezone= ---FILE-- - ---EXPECTF-- -Strict Standards: date_default_timezone_get(): It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for 'UTC/0.0/no DST' instead in %sdate_default_timezone_get-1.php on line 3 -UTC - -Strict Standards: date(): It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for 'UTC/0.0/no DST' instead in %sdate_default_timezone_get-1.php on line 4 -UTC diff --git a/ext/date/tests/date_default_timezone_get-2.phpt b/ext/date/tests/date_default_timezone_get-2.phpt deleted file mode 100644 index 73013a76267f6..0000000000000 --- a/ext/date/tests/date_default_timezone_get-2.phpt +++ /dev/null @@ -1,12 +0,0 @@ ---TEST-- -date_default_timezone_get() function [2] ---INI-- -date.timezone=CEST ---FILE-- - ---EXPECTF-- -Strict Standards: date_default_timezone_get(): It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for 'UTC/0.0/no DST' instead in %sdate_default_timezone_get-2.php on line 3 -UTC diff --git a/ext/date/tests/date_default_timezone_get-3.phpt b/ext/date/tests/date_default_timezone_get-3.phpt deleted file mode 100644 index 0e2e3c53e558a..0000000000000 --- a/ext/date/tests/date_default_timezone_get-3.phpt +++ /dev/null @@ -1,15 +0,0 @@ ---TEST-- -date_default_timezone_get() function [3] ---INI-- -date.timezone= ---FILE-- - ---EXPECT-- -Europe/Rome -America/Chicago diff --git a/ext/date/tests/date_default_timezone_set-1.phpt b/ext/date/tests/date_default_timezone_set-1.phpt deleted file mode 100644 index 3c7a9aa4d6a1e..0000000000000 --- a/ext/date/tests/date_default_timezone_set-1.phpt +++ /dev/null @@ -1,28 +0,0 @@ ---TEST-- -date_default_timezone_set() function [1] ---INI-- -date.timezone= ---FILE-- - ---EXPECTF-- -Strict Standards: strtotime(): It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for 'UTC/0.0/no DST' instead in %sdate_default_timezone_set-1.php on line 3 - -Strict Standards: strtotime(): It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for 'UTC/0.0/no DST' instead in %sdate_default_timezone_set-1.php on line 4 -America/Indiana/Knox -2005-01-12T03:00:00-0500 -2005-07-12T03:00:00-0500 -2005-01-12T08:00:00-0500 -2005-07-12T08:00:00-0500 diff --git a/ext/date/tests/date_modify-1.phpt b/ext/date/tests/date_modify-1.phpt deleted file mode 100644 index 7707b7fc241cc..0000000000000 --- a/ext/date/tests/date_modify-1.phpt +++ /dev/null @@ -1,30 +0,0 @@ ---TEST-- -date_modify() function [1] ---SKIPIF-- - ---FILE-- -modify("+1 second"); -echo date_format($ts, 'D, d M Y H:i:s T'), "\n"; - -date_default_timezone_set("Europe/Amsterdam"); -$ts = date_create("Sun Mar 27 01:59:59 2005"); -echo date_format($ts, 'D, d M Y H:i:s T'), "\n"; -$ts->modify("+1 second"); -echo date_format($ts, 'D, d M Y H:i:s T'), "\n"; - -$ts = date_create("Sun Oct 30 01:59:59 2005"); -echo date_format($ts, 'D, d M Y H:i:s T'), "\n"; -$ts->modify("+ 1 hour 1 second"); -echo date_format($ts, 'D, d M Y H:i:s T'), "\n"; -?> ---EXPECT-- -Thu, 19 Aug 1993 23:59:59 KWAT -Sat, 21 Aug 1993 00:00:00 MHT -Sun, 27 Mar 2005 01:59:59 CET -Sun, 27 Mar 2005 03:00:00 CEST -Sun, 30 Oct 2005 01:59:59 CEST -Sun, 30 Oct 2005 03:00:00 CET diff --git a/ext/date/tests/date_modify-2.phpt b/ext/date/tests/date_modify-2.phpt deleted file mode 100644 index cc197fcdc499c..0000000000000 --- a/ext/date/tests/date_modify-2.phpt +++ /dev/null @@ -1,15 +0,0 @@ ---TEST-- -date_modify() function [2] ---SKIPIF-- - ---FILE-- - ---EXPECT-- -Mon, 18 Jul 2005 22:10:00 GMT+0400 -Mon, 18 Jul 2005 23:10:00 GMT+0400 diff --git a/ext/date/tests/date_parse_001.phpt b/ext/date/tests/date_parse_001.phpt deleted file mode 100644 index 205380fc9a133..0000000000000 --- a/ext/date/tests/date_parse_001.phpt +++ /dev/null @@ -1,303 +0,0 @@ ---TEST-- -Test basic date_parse() ---INI-- -date.timezone=UTC ---FILE-- - ---EXPECTF-- -array(12) { - ["year"]=> - int(2006) - ["month"]=> - int(12) - ["day"]=> - int(12) - ["hour"]=> - int(10) - ["minute"]=> - int(0) - ["second"]=> - int(0) - ["fraction"]=> - float(0.5) - ["warning_count"]=> - int(0) - ["warnings"]=> - array(0) { - } - ["error_count"]=> - int(0) - ["errors"]=> - array(0) { - } - ["is_localtime"]=> - bool(false) -} -array(12) { - ["year"]=> - int(2006) - ["month"]=> - int(12) - ["day"]=> - int(12) - ["hour"]=> - bool(false) - ["minute"]=> - bool(false) - ["second"]=> - bool(false) - ["fraction"]=> - bool(false) - ["warning_count"]=> - int(0) - ["warnings"]=> - array(0) { - } - ["error_count"]=> - int(0) - ["errors"]=> - array(0) { - } - ["is_localtime"]=> - bool(false) -} -array(15) { - ["year"]=> - int(2006) - ["month"]=> - int(12) - ["day"]=> - bool(false) - ["hour"]=> - bool(false) - ["minute"]=> - bool(false) - ["second"]=> - bool(false) - ["fraction"]=> - bool(false) - ["warning_count"]=> - int(0) - ["warnings"]=> - array(0) { - } - ["error_count"]=> - int(1) - ["errors"]=> - array(1) { - [7]=> - string(20) "Unexpected character" - } - ["is_localtime"]=> - bool(true) - ["zone_type"]=> - int(1) - ["zone"]=> - int(720) - ["is_dst"]=> - bool(false) -} -array(12) { - ["year"]=> - int(2006) - ["month"]=> - int(2) - ["day"]=> - int(30) - ["hour"]=> - bool(false) - ["minute"]=> - bool(false) - ["second"]=> - bool(false) - ["fraction"]=> - bool(false) - ["warning_count"]=> - int(0) - ["warnings"]=> - array(0) { - } - ["error_count"]=> - int(0) - ["errors"]=> - array(0) { - } - ["is_localtime"]=> - bool(false) -} -array(12) { - ["year"]=> - int(2006) - ["month"]=> - int(3) - ["day"]=> - int(4) - ["hour"]=> - bool(false) - ["minute"]=> - bool(false) - ["second"]=> - bool(false) - ["fraction"]=> - bool(false) - ["warning_count"]=> - int(0) - ["warnings"]=> - array(0) { - } - ["error_count"]=> - int(0) - ["errors"]=> - array(0) { - } - ["is_localtime"]=> - bool(false) -} -array(12) { - ["year"]=> - int(2006) - ["month"]=> - int(3) - ["day"]=> - bool(false) - ["hour"]=> - bool(false) - ["minute"]=> - bool(false) - ["second"]=> - bool(false) - ["fraction"]=> - bool(false) - ["warning_count"]=> - int(0) - ["warnings"]=> - array(0) { - } - ["error_count"]=> - int(0) - ["errors"]=> - array(0) { - } - ["is_localtime"]=> - bool(false) -} -array(15) { - ["year"]=> - bool(false) - ["month"]=> - bool(false) - ["day"]=> - bool(false) - ["hour"]=> - bool(false) - ["minute"]=> - bool(false) - ["second"]=> - bool(false) - ["fraction"]=> - bool(false) - ["warning_count"]=> - int(0) - ["warnings"]=> - array(0) { - } - ["error_count"]=> - int(2) - ["errors"]=> - array(2) { - [0]=> - string(20) "Unexpected character" - [1]=> - string(20) "Unexpected character" - } - ["is_localtime"]=> - bool(true) - ["zone_type"]=> - int(1) - ["zone"]=> - int(180) - ["is_dst"]=> - bool(false) -} -array(15) { - ["year"]=> - bool(false) - ["month"]=> - bool(false) - ["day"]=> - bool(false) - ["hour"]=> - bool(false) - ["minute"]=> - bool(false) - ["second"]=> - bool(false) - ["fraction"]=> - bool(false) - ["warning_count"]=> - int(0) - ["warnings"]=> - array(0) { - } - ["error_count"]=> - int(1) - ["errors"]=> - array(1) { - [0]=> - string(20) "Unexpected character" - } - ["is_localtime"]=> - bool(true) - ["zone_type"]=> - int(1) - ["zone"]=> - int(0) - ["is_dst"]=> - bool(false) -} -array(12) { - ["year"]=> - bool(false) - ["month"]=> - bool(false) - ["day"]=> - bool(false) - ["hour"]=> - bool(false) - ["minute"]=> - bool(false) - ["second"]=> - bool(false) - ["fraction"]=> - bool(false) - ["warning_count"]=> - int(0) - ["warnings"]=> - array(0) { - } - ["error_count"]=> - int(1) - ["errors"]=> - array(1) { - [0]=> - string(12) "Empty string" - } - ["is_localtime"]=> - bool(false) -} - -Warning: date_parse() expects parameter 1 to be string, array given in %s on line %d -bool(false) -Done diff --git a/ext/date/tests/date_sun_info_001.phpt b/ext/date/tests/date_sun_info_001.phpt deleted file mode 100644 index 7ab4af59815c3..0000000000000 --- a/ext/date/tests/date_sun_info_001.phpt +++ /dev/null @@ -1,32 +0,0 @@ ---TEST-- -Test basic date_sun_info() ---INI-- -date.timezone=UTC ---FILE-- - ---EXPECTF-- -array(9) { - ["sunrise"]=> - int(1165899133) - ["sunset"]=> - int(1165934481) - ["transit"]=> - int(1165916807) - ["civil_twilight_begin"]=> - int(1165897449) - ["civil_twilight_end"]=> - int(1165936165) - ["nautical_twilight_begin"]=> - int(1165895547) - ["nautical_twilight_end"]=> - int(1165938067) - ["astronomical_twilight_begin"]=> - int(1165893693) - ["astronomical_twilight_end"]=> - int(1165939921) -} -Done diff --git a/ext/date/tests/default-timezone-1.phpt b/ext/date/tests/default-timezone-1.phpt deleted file mode 100644 index ea5f2e6b84f46..0000000000000 --- a/ext/date/tests/default-timezone-1.phpt +++ /dev/null @@ -1,11 +0,0 @@ ---TEST-- -date.timezone setting [1] ---INI-- -date.timezone=GMT ---FILE-- - ---EXPECT-- -1119132944 diff --git a/ext/date/tests/default-timezone-2.phpt b/ext/date/tests/default-timezone-2.phpt deleted file mode 100644 index c9a404bccba15..0000000000000 --- a/ext/date/tests/default-timezone-2.phpt +++ /dev/null @@ -1,11 +0,0 @@ ---TEST-- -date.timezone setting [2] ---INI-- -date.timezone=Europe/Oslo ---FILE-- - ---EXPECT-- -1119125744 diff --git a/ext/date/tests/format-negative-timestamp.phpt b/ext/date/tests/format-negative-timestamp.phpt deleted file mode 100644 index 5fd6a65897b64..0000000000000 --- a/ext/date/tests/format-negative-timestamp.phpt +++ /dev/null @@ -1,24 +0,0 @@ ---TEST-- -strtotime() - Format: @timestamps ---FILE-- - $max_2) - $new_tm *= -1; - - if (strtotime("@$new_tm") != $new_tm) { - echo "Error when parsing: @$new_tm\n"; - } -} - -echo "done!"; -?> ---EXPECT-- -done! diff --git a/ext/date/tests/mktime-1.phpt b/ext/date/tests/mktime-1.phpt deleted file mode 100644 index 87fc0df68573d..0000000000000 --- a/ext/date/tests/mktime-1.phpt +++ /dev/null @@ -1,44 +0,0 @@ ---TEST-- -Check for mktime with out-of-range parameters ---INI-- -error_reporting=2047 ---FILE-- - ---EXPECT-- -2000-02-29 -2000-02-28 -2000-02-29 -2001-02-28 -2001-03-01 -1999-11-30 -2000-05-29 12:00:00 -2000-05-29 13:00:00 -2000-05-29 12:00:00 -2000-01-31 12:00:00 -2000-01-31 12:00:00 -2000-01-31 11:00:00 -2000-04-29 12:00:00 -2000-04-29 13:00:00 -2000-04-29 12:00:00 diff --git a/ext/date/tests/mktime-2.phpt b/ext/date/tests/mktime-2.phpt deleted file mode 100644 index aa259b577cab7..0000000000000 --- a/ext/date/tests/mktime-2.phpt +++ /dev/null @@ -1,51 +0,0 @@ ---TEST-- -mktime() [2] ---INI-- -error_reporting=2047 ---FILE-- - ---EXPECTF-- -int(1009843200) -int(1009843200) -int(1009843200) -int(%s) -int(1025481600) -int(1025481600) -int(1025481600) -int(%s) -int(1009843200) -int(1009843200) -int(1009843200) -int(1009839600) -int(1025478000) -int(1025478000) -int(1025481600) -int(1025478000) diff --git a/ext/date/tests/mktime-3.phpt b/ext/date/tests/mktime-3.phpt deleted file mode 100644 index 0d19074fc3118..0000000000000 --- a/ext/date/tests/mktime-3.phpt +++ /dev/null @@ -1,54 +0,0 @@ ---TEST-- -mktime() [3] ---INI-- -error_reporting=2047 ---FILE-- - ---EXPECT-- -America/Toronto -Y: 0 - January 2000-01-01T01:01:01-0500 -Y: 69 - out of range -Y: 70 - January 1970-01-01T01:01:01-0500 -Y: 71 - January 1971-01-01T01:01:01-0500 -Y: 99 - January 1999-01-01T01:01:01-0500 -Y: 100 - January 2000-01-01T01:01:01-0500 -Y: 105 - January 2005-01-01T01:01:01-0500 -Y: 1900 - out of range -Y: 1901 - out of range -Y: 1902 - January 1902-01-01T01:01:01-0500 -Y: 1999 - January 1999-01-01T01:01:01-0500 -Y: 2000 - January 2000-01-01T01:01:01-0500 -Y: 2001 - January 2001-01-01T01:01:01-0500 - -Europe/Oslo -Y: 0 - January 2000-01-01T01:01:01+0100 -Y: 69 - out of range -Y: 70 - January 1970-01-01T01:01:01+0100 -Y: 71 - January 1971-01-01T01:01:01+0100 -Y: 99 - January 1999-01-01T01:01:01+0100 -Y: 100 - January 2000-01-01T01:01:01+0100 -Y: 105 - January 2005-01-01T01:01:01+0100 -Y: 1900 - out of range -Y: 1901 - out of range -Y: 1902 - January 1902-01-01T01:01:01+0100 -Y: 1999 - January 1999-01-01T01:01:01+0100 -Y: 2000 - January 2000-01-01T01:01:01+0100 -Y: 2001 - January 2001-01-01T01:01:01+0100 diff --git a/ext/date/tests/oo_001.phpt b/ext/date/tests/oo_001.phpt deleted file mode 100644 index 9cb366315b084..0000000000000 --- a/ext/date/tests/oo_001.phpt +++ /dev/null @@ -1,66 +0,0 @@ ---TEST-- -date OO interface ---INI-- -date.timezone=UTC ---FILE-- -format("Y-m-d H:i:s")); - -$d = new _d; -var_dump($d->format("Y-m-d H:i:s")); - -try { - new DateTime("1am todax"); -} catch (Exception $e) { - echo $e->getMessage(),"\n"; -} - -$t = new DateTimeZone("UTC"); -var_dump($t->getName()); - -$t = new _t; -var_dump($t->getName()); - -try { - new DateTimeZone("GottaFindThisOne"); -} catch (Exception $e) { - echo $e->getMessage(),"\n"; -} - -echo "DONE\n"; -?> ---EXPECTF-- -string(19) "%d-%d-%d %d:%d:%d" - -Warning: DateTime::format(): The DateTime object has not been correctly initialized by its constructor in %soo_001.php on line %d -bool(false) -DateTime::__construct(): Failed to parse time string (1am todax) at position 4 (t): The timezone could not be found in the database -string(3) "UTC" - -Warning: DateTimeZone::getName(): The DateTimeZone object has not been correctly initialized by its constructor in %soo_001.php on line %d -bool(false) -DateTimeZone::__construct(): Unknown or bad timezone (GottaFindThisOne) -DONE ---UEXPECTF-- -unicode(19) "%d-%d-%d %d:%d:%d" - -Warning: DateTime::format(): The DateTime object has not been correctly initialized by its constructor in %soo_001.php on line %d -bool(false) -DateTime::__construct(): Failed to parse time string (1am todax) at position 4 (t): The timezone could not be found in the database -unicode(3) "UTC" - -Warning: DateTimeZone::getName(): The DateTimeZone object has not been correctly initialized by its constructor in %soo_001.php on line %d -bool(false) -DateTimeZone::__construct(): Unknown or bad timezone (GottaFindThisOne) -DONE - diff --git a/ext/date/tests/oo_002.phpt b/ext/date/tests/oo_002.phpt deleted file mode 100644 index 9a327099d7833..0000000000000 --- a/ext/date/tests/oo_002.phpt +++ /dev/null @@ -1,35 +0,0 @@ ---TEST-- -date OO cloning ---INI-- -date.timezone=Europe/Berlin ---FILE-- -format(DateTime::RFC822)); -$c = clone $d; -var_dump($c->format(DateTime::RFC822)); -$d->modify("1 hour after"); -$c->modify("1 second ago"); -var_dump($d->format(DateTime::RFC822)); -var_dump($c->format(DateTime::RFC822)); -$t = new _t("Asia/Tokyo"); -var_dump($t->getName()); -$c = clone $t; -var_dump($c->getName()); -?> ---EXPECTF-- -string(29) "Wed, 01 Aug 07 13:00:00 +0000" -string(29) "Wed, 01 Aug 07 13:00:00 +0000" -string(29) "Wed, 01 Aug 07 14:00:00 +0000" -string(29) "Wed, 01 Aug 07 12:59:59 +0000" -string(10) "Asia/Tokyo" -string(10) "Asia/Tokyo" ---UEXPECTF-- -unicode(29) "Wed, 01 Aug 07 13:00:00 +0000" -unicode(29) "Wed, 01 Aug 07 13:00:00 +0000" -unicode(29) "Wed, 01 Aug 07 14:00:00 +0000" -unicode(29) "Wed, 01 Aug 07 12:59:59 +0000" -unicode(10) "Asia/Tokyo" -unicode(10) "Asia/Tokyo" diff --git a/ext/date/tests/strtotime-mysql.phpt b/ext/date/tests/strtotime-mysql.phpt deleted file mode 100755 index 73c3e336ddf06..0000000000000 --- a/ext/date/tests/strtotime-mysql.phpt +++ /dev/null @@ -1,29 +0,0 @@ ---TEST-- -strtotime() and mysql timestamps ---FILE-- - ---EXPECT-- -string(31) "Fri, 23 May 1997 09:15:28 +0000" -string(31) "Sun, 31 Dec 2000 18:58:59 +0000" -bool(false) ---UEXPECT-- -unicode(31) "Fri, 23 May 1997 09:15:28 +0000" -unicode(31) "Sun, 31 Dec 2000 18:58:59 +0000" -bool(false) diff --git a/ext/date/tests/strtotime.phpt b/ext/date/tests/strtotime.phpt deleted file mode 100644 index 6560d7f1fd3e9..0000000000000 --- a/ext/date/tests/strtotime.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -strtotime() function ---FILE-- - ---EXPECT-- -2005-07-14T22:30:41+0200 -2005-07-15T00:30:41+0200 diff --git a/ext/date/tests/strtotime2.phpt b/ext/date/tests/strtotime2.phpt deleted file mode 100644 index b8b605923dbce..0000000000000 --- a/ext/date/tests/strtotime2.phpt +++ /dev/null @@ -1,40 +0,0 @@ ---TEST-- -strtotime() on date constants ---FILE-- - ---EXPECT-- -DATE_ATOM: OK -DATE_COOKIE: OK -DATE_ISO8601: OK -DATE_RFC822: OK -DATE_RFC850: OK -DATE_RFC1036: OK -DATE_RFC1123: OK -DATE_RFC2822: OK -DATE_RFC3339: OK -DATE_RSS: OK -DATE_W3C: OK diff --git a/ext/date/tests/strtotime3.phpt b/ext/date/tests/strtotime3.phpt deleted file mode 100644 index 67861e53f20d0..0000000000000 --- a/ext/date/tests/strtotime3.phpt +++ /dev/null @@ -1,94 +0,0 @@ ---TEST-- -strtotime() function ---FILE-- - ---EXPECT-- -bool(false) -bool(false) -string(31) "Thu, 15 Jun 2006 00:00:00 +0100" -string(31) "Fri, 16 Jun 2006 22:49:12 +0100" -bool(false) -string(31) "Fri, 16 Jun 2006 23:49:12 +0100" -bool(false) -string(31) "Fri, 16 Jun 2006 02:22:00 +0100" -bool(false) -string(31) "Fri, 16 Jun 2006 02:22:33 +0100" -bool(false) -string(31) "Tue, 02 Mar 2004 00:00:00 +0000" -string(31) "Tue, 02 Mar 2004 00:00:00 +0000" -string(31) "Sun, 12 Feb 2006 23:12:23 +0000" -bool(false) -string(31) "Fri, 16 Jun 2006 00:00:00 +0100" -string(31) "Sun, 15 Jan 2006 00:00:00 +0000" -string(31) "Sun, 15 Jan 2006 00:00:00 +0000" -string(31) "Tue, 10 Oct 2000 13:55:36 +0100" -bool(false) -string(31) "Fri, 16 Jun 2006 20:06:00 +0100" -string(31) "Mon, 16 Jun 1986 22:51:59 +0100" -string(31) "Mon, 16 Jan 2006 00:00:00 +0000" -string(31) "Mon, 16 Jan 2006 00:00:00 +0000" ---UEXPECT-- -bool(false) -bool(false) -unicode(31) "Thu, 15 Jun 2006 00:00:00 +0100" -unicode(31) "Fri, 16 Jun 2006 22:49:12 +0100" -bool(false) -unicode(31) "Fri, 16 Jun 2006 23:49:12 +0100" -bool(false) -unicode(31) "Fri, 16 Jun 2006 02:22:00 +0100" -bool(false) -unicode(31) "Fri, 16 Jun 2006 02:22:33 +0100" -bool(false) -unicode(31) "Tue, 02 Mar 2004 00:00:00 +0000" -unicode(31) "Tue, 02 Mar 2004 00:00:00 +0000" -unicode(31) "Sun, 12 Feb 2006 23:12:23 +0000" -bool(false) -unicode(31) "Fri, 16 Jun 2006 00:00:00 +0100" -unicode(31) "Sun, 15 Jan 2006 00:00:00 +0000" -unicode(31) "Sun, 15 Jan 2006 00:00:00 +0000" -unicode(31) "Tue, 10 Oct 2000 13:55:36 +0100" -bool(false) -unicode(31) "Fri, 16 Jun 2006 20:06:00 +0100" -unicode(31) "Mon, 16 Jun 1986 22:51:59 +0100" -unicode(31) "Mon, 16 Jan 2006 00:00:00 +0000" -unicode(31) "Mon, 16 Jan 2006 00:00:00 +0000" diff --git a/ext/date/tests/timezone-configuration.phpt b/ext/date/tests/timezone-configuration.phpt deleted file mode 100644 index 147b10a8236c8..0000000000000 --- a/ext/date/tests/timezone-configuration.phpt +++ /dev/null @@ -1,19 +0,0 @@ ---TEST-- -timezone configuration [1] ---INI-- -date.timezone=GMT ---FILE-- - ---EXPECT-- -1119125744 -1119129344 -1119125744 diff --git a/ext/date/tests/timezones.phpt b/ext/date/tests/timezones.phpt deleted file mode 100644 index c7e470ab8ca47..0000000000000 --- a/ext/date/tests/timezones.phpt +++ /dev/null @@ -1,26 +0,0 @@ ---TEST-- -setting bogus timezones ---FILE-- - ---EXPECTF-- -Notice: date_default_timezone_set(): Timezone ID 'AAA' is invalid in %stimezones.php on line 4 -bool(false) - -Notice: date_default_timezone_set(): Timezone ID 'ZZZ' is invalid in %stimezones.php on line 5 -bool(false) -bool(true) -bool(true) -done diff --git a/ext/dba/CREDITS b/ext/dba/CREDITS deleted file mode 100644 index 370b3ea27108a..0000000000000 --- a/ext/dba/CREDITS +++ /dev/null @@ -1,2 +0,0 @@ -DBA -Sascha Schumann, Marcus Boerger \ No newline at end of file diff --git a/ext/dba/README b/ext/dba/README deleted file mode 100755 index 0c22830e5427c..0000000000000 --- a/ext/dba/README +++ /dev/null @@ -1,54 +0,0 @@ -These functions build the foundation for accessing Berkeley DB style -databases. - -This is a general abstraction layer for several file-based databases. As -such, functionality is limited to a common subset of features supported -by modern databases such as Sleepycat Software's DB2. (This is not to be -confused with IBM's DB2 software, which is supported through the ODBC -functions.) - -This extensions allows to work with the following databases: -dbm DBM is the oldest (original) type of Berkeley DB style databases. - You should avoid it, if possible. We do not support the - compatibility functions built into DB2 and gdbm, because they are - only compatible on the source code level, but cannot handle the - original dbm format. -ndbm NDBM is a newer type and more flexible than dbm. It still has - most of the arbitrary limits of dbm (therefore it is deprecated). -gdbm GDBM is the GNU database manager. -db2 DB2 is Sleepycat Software's DB2. It's described as "a programmatic - toolkit that provides high-performance built-in database support - for both standalone and client/server applications. -db3 DB3 is Sleepycat Software's DB3. -db4 DB4 is Sleepycat Software's DB4. This is available since PHP 5.0. -cdb CDB is "a fast, reliable, lightweight package for creating and - reading constant databases." It is from the author of qmail and - can be found at http://cr.yp.to/cdb.html. Since it is constant, - we support only reading operations. And since PHP 4.3.0 we support - writing (not updating) through the internal cdb library. -cdb_make Since PHP 4.3.0 we support creation (not updating) of cdb files - when the bundled cdb library is used. -flatfile This is available since PHP 4.3.0 for compatibility with the - deprecated dbm extension only and should be avoided. However you - may use this where files were created in this format. That happens - when configure could not find any external library. -inifile This is available since PHP 4.3.3 to be able to modify php.ini - files from within PHP scripts. When working with ini files you - can pass arrays of the form array(0=>group,1=>value_name) or - strings of the form "[group]value_name" where group is optional. - As the functions dba_firstkey() and dba_nextkey() return string - representations of the key there is a new function dba_key_split() - available since PHP 5 which allows to convert the string keys into - array keys without loosing FALSE. -qdbm This is available since PHP 5.0.0. The qdbm library can be loaded - from http://qdbm.sourceforge.net. - - -After configuring and compiling PHP you must execute the following test -from commandline: - php run-tests.php ext/dba. -This shows whether your combination of handlers works. Most problematic -are dbm and ndbm which conflict with many installations. The reason for -this is that on several systems these libraries are part of more than one -other library. The configuration test only prevents you from configuring -malfaunctioning single handlers but not combinations. \ No newline at end of file diff --git a/ext/dba/config.m4 b/ext/dba/config.m4 deleted file mode 100644 index 8ac827bf8f692..0000000000000 --- a/ext/dba/config.m4 +++ /dev/null @@ -1,552 +0,0 @@ -dnl -dnl $Id$ -dnl - -dnl Suppose we need FlatFile if no support or only CDB is used. - -AC_DEFUN([PHP_DBA_STD_BEGIN],[ - unset THIS_INCLUDE THIS_LIBS THIS_LFLAGS THIS_PREFIX THIS_RESULT -]) - -AC_DEFUN([PHP_TEMP_LDFLAGS],[ - old_LDFLAGS=$LDFLAGS - LDFLAGS="$1 $LDFLAGS" - old_LIBS=$LIBS - LIBS="$2 $LIBS" - $3 - LDFLAGS=$old_LDFLAGS - LIBS=$old_LIBS -]) - -dnl Assign INCLUDE/LFLAGS from PREFIX -AC_DEFUN([PHP_DBA_STD_ASSIGN],[ - if test -n "$THIS_PREFIX" && test "$THIS_PREFIX" != "/usr"; then - THIS_LFLAGS=$THIS_PREFIX/$PHP_LIBDIR - fi -]) - -dnl Standard check -AC_DEFUN([PHP_DBA_STD_CHECK],[ - THIS_RESULT="yes" - if test -z "$THIS_INCLUDE"; then - AC_MSG_ERROR([DBA: Could not find necessary header file(s).]) - fi - if test -z "$THIS_LIBS"; then - AC_MSG_ERROR([DBA: Could not find necessary library.]) - fi -]) - -dnl Attach THIS_x to DBA_x -AC_DEFUN([PHP_DBA_STD_ATTACH],[ - PHP_ADD_LIBRARY_WITH_PATH($THIS_LIBS, $THIS_LFLAGS, DBA_SHARED_LIBADD) - unset THIS_INCLUDE THIS_LIBS THIS_LFLAGS THIS_PREFIX -]) - -dnl Print the result message -dnl parameters(name [, full name [, empty or error message]]) -AC_DEFUN([AC_DBA_STD_RESULT],[ - THIS_NAME=[]translit($1,a-z0-9-,A-Z0-9_) - if test -n "$2"; then - THIS_FULL_NAME="$2" - else - THIS_FULL_NAME="$THIS_NAME" - fi - AC_MSG_CHECKING(for $THIS_FULL_NAME support) - if test -n "$3"; then - AC_MSG_ERROR($3) - fi - if test "$THIS_RESULT" = "yes" -o "$THIS_RESULT" = "builtin"; then - HAVE_DBA=1 - eval HAVE_$THIS_NAME=1 - AC_MSG_RESULT($THIS_RESULT) - else - AC_MSG_RESULT(no) - fi - unset THIS_RESULT THIS_NAME THIS_FULL_NAME -]) - -PHP_ARG_ENABLE(dba,whether to enable DBA, -[ --enable-dba Build DBA with builtin modules. To build shared DBA - extension use --enable-dba=shared]) - -AC_ARG_WITH(qdbm, -[ --with-qdbm[=DIR] DBA: Include QDBM support],[ - if test "$withval" != "no"; then - PHP_DBA_STD_BEGIN - for i in $withval /usr/local /usr; do - if test -f "$i/include/depot.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/depot.h - break - fi - done - - if test -n "$THIS_INCLUDE"; then - for LIB in qdbm; do - PHP_CHECK_LIBRARY($LIB, dpopen, [ - AC_DEFINE_UNQUOTED(QDBM_INCLUDE_FILE, "$THIS_INCLUDE", [ ]) - AC_DEFINE(DBA_QDBM, 1, [ ]) - THIS_LIBS=$LIB - ], [], [-L$THIS_PREFIX/$PHP_LIBDIR]) - if test -n "$THIS_LIBS"; then - break - fi - done - fi - - PHP_DBA_STD_ASSIGN - PHP_DBA_STD_CHECK - PHP_DBA_STD_ATTACH - fi -]) -AC_DBA_STD_RESULT(qdbm) - -AC_ARG_WITH(gdbm, -[ --with-gdbm[=DIR] DBA: Include GDBM support],[ - if test "$withval" != "no"; then - PHP_DBA_STD_BEGIN - if test "$HAVE_QDBM" = "1"; then - AC_DBA_STD_RESULT(gdbm,gdbm,You cannot combine --with-gdbm with --with-qdbm) - fi - for i in $withval /usr/local /usr; do - if test -f "$i/include/gdbm.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/gdbm.h - break - fi - done - - if test -n "$THIS_INCLUDE"; then - PHP_CHECK_LIBRARY(gdbm, gdbm_open, [ - AC_DEFINE_UNQUOTED(GDBM_INCLUDE_FILE, "$THIS_INCLUDE", [ ]) - AC_DEFINE(DBA_GDBM, 1, [ ]) - THIS_LIBS=gdbm - ], [], [-L$THIS_PREFIX/$PHP_LIBDIR]) - fi - - PHP_DBA_STD_ASSIGN - PHP_DBA_STD_CHECK - PHP_DBA_STD_ATTACH - fi -]) -AC_DBA_STD_RESULT(gdbm) - -AC_ARG_WITH(ndbm, -[ --with-ndbm[=DIR] DBA: Include NDBM support],[ - if test "$withval" != "no"; then - PHP_DBA_STD_BEGIN - for i in $withval /usr/local /usr; do - if test -f "$i/include/ndbm.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/ndbm.h - break - elif test -f "$i/include/db1/ndbm.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/db1/ndbm.h - break - fi - done - - if test -n "$THIS_INCLUDE"; then - for LIB in ndbm db1 c; do - PHP_CHECK_LIBRARY($LIB, dbm_open, [ - AC_DEFINE_UNQUOTED(NDBM_INCLUDE_FILE, "$THIS_INCLUDE", [ ]) - AC_DEFINE(DBA_NDBM, 1, [ ]) - THIS_LIBS=$LIB - ], [], [-L$THIS_PREFIX/$PHP_LIBDIR]) - if test -n "$THIS_LIBS"; then - break - fi - done - fi - - PHP_DBA_STD_ASSIGN - PHP_DBA_STD_CHECK - PHP_DBA_STD_ATTACH - fi -]) -AC_DBA_STD_RESULT(ndbm) - -dnl Berkeley specific (library and version test) -dnl parameters(version, library list, function) -AC_DEFUN([PHP_DBA_DB_CHECK],[ - for LIB in $2; do - if test -f $THIS_PREFIX/$PHP_LIBDIR/lib$LIB.a -o -f $THIS_PREFIX/$PHP_LIBDIR/lib$LIB.$SHLIB_SUFFIX_NAME; then - PHP_TEMP_LDFLAGS(-L$THIS_PREFIX/$PHP_LIBDIR, -l$LIB,[ - AC_TRY_LINK([ -#include "$THIS_INCLUDE" - ],[ - $3; - ],[ - AC_EGREP_CPP(yes,[ -#include "$THIS_INCLUDE" -#if DB_VERSION_MAJOR == $1 - yes -#endif - ],[ - THIS_LIBS=$LIB - break - ]) - ]) - ]) - fi - done - if test -z "$THIS_LIBS"; then - AC_MSG_CHECKING(for db$1 major version) - AC_MSG_ERROR(Header contains different version) - fi - if test "$1" = "4"; then - AC_MSG_CHECKING(for db4 minor version and patch level) - AC_EGREP_CPP(yes,[ -#include "$THIS_INCLUDE" -#if DB_VERSION_MINOR != 1 || DB_VERSION_PATCH >= 25 - yes -#endif - ],[ - AC_MSG_RESULT(ok) - ],[ - AC_MSG_ERROR(Version 4.1 requires patch level 25) - ]) - fi - if test "$ext_shared" = "yes"; then - AC_MSG_CHECKING(if dba can be used as shared extension) - AC_EGREP_CPP(yes,[ -#include "$THIS_INCLUDE" -#if DB_VERSION_MAJOR > 3 || (DB_VERSION_MAJOR == 3 && DB_VERSION_MINOR > 2) - yes -#endif - ],[ - AC_MSG_RESULT(yes) - ],[ - AC_MSG_ERROR(At least version 3.3 is required) - ]) - fi - if test -n "$THIS_LIBS"; then - AC_DEFINE(DBA_DB$1, 1, [ ]) - if test -n "$THIS_INCLUDE"; then - AC_DEFINE_UNQUOTED(DB$1_INCLUDE_FILE, "$THIS_INCLUDE", [ ]) - fi - fi - DB$1_LIBS=$THIS_LIBS - DB$1_PREFIX=$THIS_PREFIX - DB$1_INCLUDE=$THIS_INCLUDE - PHP_DBA_STD_ASSIGN - PHP_DBA_STD_CHECK - PHP_DBA_STD_ATTACH -]) - -AC_ARG_WITH(db4, -[ --with-db4[=DIR] DBA: Include Berkeley DB4 support],[ - if test "$withval" != "no"; then - PHP_DBA_STD_BEGIN - for i in $withval /usr/local/BerkeleyDB.4.2 /usr/local/BerkeleyDB.4.1 /usr/local/BerkeleyDB.4.0 /usr/local /usr; do - if test -f "$i/db4/db.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/db4/db.h - break - elif test -f "$i/include/db4/db.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/db4/db.h - break - elif test -f "$i/include/db/db4.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/db/db4.h - break - elif test -f "$i/include/db4.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/db4.h - break - elif test -f "$i/include/db.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/db.h - break - fi - done - PHP_DBA_DB_CHECK(4, db-4.5 db-4.4 db-4.3 db-4.2 db-4.1 db-4.0 db-4 db4 db, [(void)db_create((DB**)0, (DB_ENV*)0, 0)]) - fi -]) -AC_DBA_STD_RESULT(db4,Berkeley DB4) - -AC_ARG_WITH(db3, -[ --with-db3[=DIR] DBA: Include Berkeley DB3 support],[ - if test "$withval" != "no"; then - PHP_DBA_STD_BEGIN - if test "$HAVE_DB4" = "1"; then - AC_DBA_STD_RESULT(db3,Berkeley DB3,You cannot combine --with-db3 with --with-db4) - fi - for i in $withval /usr/local/BerkeleyDB.3.3 /usr/local/BerkeleyDB.3.2 /usr/local/BerkeleyDB.3.1 /usr/local/BerkeleyDB.3.0 /usr/local /usr; do - if test -f "$i/db3/db.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/db3/db.h - break - elif test -f "$i/include/db3/db.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/db3/db.h - break - elif test -f "$i/include/db/db3.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/db/db3.h - break - elif test -f "$i/include/db3.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/db3.h - break - elif test -f "$i/include/db.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/db.h - break - fi - done - PHP_DBA_DB_CHECK(3, db-3.3 db-3.2 db-3.1 db-3.0 db-3 db3 db, [(void)db_create((DB**)0, (DB_ENV*)0, 0)]) - fi -]) -AC_DBA_STD_RESULT(db3,Berkeley DB3) - -AC_ARG_WITH(db2, -[ --with-db2[=DIR] DBA: Include Berkeley DB2 support],[ - if test "$withval" != "no"; then - PHP_DBA_STD_BEGIN - if test "$HAVE_DB3" = "1" -o "$HAVE_DB4" = "1"; then - AC_DBA_STD_RESULT(db2,Berkeley DB2,You cannot combine --with-db2 with --with-db3 or --with-db4) - fi - for i in $withval $withval/BerkeleyDB /usr/BerkeleyDB /usr/local /usr; do - if test -f "$i/db2/db.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/db2/db.h - break - elif test -f "$i/include/db2/db.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/db2/db.h - break - elif test -f "$i/include/db/db2.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/db/db2.h - break - elif test -f "$i/include/db2.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/db2.h - break - elif test -f "$i/include/db.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/db.h - break - fi - done - PHP_DBA_DB_CHECK(2, db-2 db2 db, [(void)db_appinit("", NULL, (DB_ENV*)0, 0)]) - fi -]) -AC_DBA_STD_RESULT(db2,Berkeley DB2) - -AC_ARG_WITH(db1, -[ --with-db1[=DIR] DBA: Include Berkeley DB1 support/emulation],[ - if test "$withval" != "no"; then - PHP_DBA_STD_BEGIN - AC_MSG_CHECKING(for DB1 in library) - if test "$HAVE_DB4" = "1"; then - THIS_VERSION=4 - THIS_LIBS=$DB4_LIBS - THIS_PREFIX=$DB4_PREFIX - elif test "$HAVE_DB3" = "1"; then - THIS_LIBS=$DB3_LIBS - THIS_PREFIX=$DB3_PREFIX - elif test "$HAVE_DB2" = "1"; then - THIS_VERSION=2 - THIS_LIBS=$DB2_LIBS - THIS_PREFIX=$DB2_PREFIX - fi - if test "$HAVE_DB4" = "1" -o "$HAVE_DB3" = "1" -o "$HAVE_DB2" = "1"; then - AC_DEFINE_UNQUOTED(DB1_VERSION, "Berkeley DB 1.85 emulation in DB$THIS_VERSION", [ ]) - for i in db$THIS_VERSION/db_185.h include/db$THIS_VERSION/db_185.h include/db/db_185.h; do - if test -f "$THIS_PREFIX/$i"; then - THIS_INCLUDE=$THIS_PREFIX/$i - break - fi - done - else - AC_DEFINE_UNQUOTED(DB1_VERSION, "Unknown DB1", [ ]) - for i in $withval /usr/local /usr; do - if test -f "$i/db1/db.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/db1/db.h - break - elif test -f "$i/include/db1/db.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/db1/db.h - break - elif test -f "$i/include/db.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/db.h - break - fi - done - THIS_LIBS=db - fi - AC_MSG_RESULT($THIS_LIBS) - AC_MSG_CHECKING(for DB1 in header) - AC_MSG_RESULT($THIS_INCLUDE) - if test -n "$THIS_INCLUDE"; then - PHP_TEMP_LDFLAGS(-L$THIS_PREFIX/$PHP_LIBDIR, -l$THIS_LIBS,[ - AC_TRY_LINK([ -#include "$THIS_INCLUDE" - ],[ - DB * dbp = dbopen("", 0, 0, DB_HASH, 0); - ],[ - AC_DEFINE_UNQUOTED(DB1_INCLUDE_FILE, "$THIS_INCLUDE", [ ]) - AC_DEFINE(DBA_DB1, 1, [ ]) - THIS_RESULT=yes - ],[ - THIS_RESULT=no - ]) - ]) - fi - PHP_DBA_STD_ASSIGN - PHP_DBA_STD_CHECK - PHP_DBA_STD_ATTACH - fi -]) -AC_DBA_STD_RESULT(db1,DB1) - -AC_ARG_WITH(dbm, -[ --with-dbm[=DIR] DBA: Include DBM support],[ - if test "$withval" != "no"; then - PHP_DBA_STD_BEGIN - if test "$HAVE_QDBM" = "1"; then - AC_DBA_STD_RESULT(dbm,dbm,You cannot combine --with-dbm with --with-qdbm) - fi - for i in $withval /usr/local /usr; do - if test -f "$i/include/dbm.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/dbm.h - break - elif test -f "$i/include/gdbm/dbm.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/gdbm/dbm.h - break - fi - done - - if test -n "$THIS_INCLUDE"; then - for LIB in dbm c gdbm; do - PHP_CHECK_LIBRARY($LIB, dbminit, [ - AC_MSG_CHECKING(for DBM using GDBM) - AC_DEFINE_UNQUOTED(DBM_INCLUDE_FILE, "$THIS_INCLUDE", [ ]) - if test "$LIB" = "gdbm"; then - AC_DEFINE_UNQUOTED(DBM_VERSION, "GDBM", [ ]) - AC_MSG_RESULT(yes) - else - AC_DEFINE_UNQUOTED(DBM_VERSION, "DBM", [ ]) - AC_MSG_RESULT(no) - fi - AC_DEFINE(DBA_DBM, 1, [ ]) - THIS_LIBS=$LIB - ], [], [-L$THIS_PREFIX/$PHP_LIBDIR]) - if test -n "$THIS_LIBS"; then - break - fi - done - fi - - PHP_DBA_STD_ASSIGN - PHP_DBA_STD_CHECK - PHP_DBA_STD_ATTACH - fi -]) -AC_DBA_STD_RESULT(dbm) - -AC_DEFUN([PHP_DBA_BUILTIN_CDB],[ - AC_DEFINE(DBA_CDB_BUILTIN, 1, [ ]) - AC_DEFINE(DBA_CDB_MAKE, 1, [ ]) - AC_DEFINE(DBA_CDB, 1, [ ]) - cdb_sources="libcdb/cdb.c libcdb/cdb_make.c libcdb/uint32.c" - THIS_RESULT="builtin" -]) - -AC_ARG_WITH(cdb, -[ --with-cdb[=DIR] DBA: Include CDB support],[ - if test "$withval" = "yes" -o "$HAVE_DBA" = "1"; then - PHP_DBA_BUILTIN_CDB - elif test "$withval" != "no"; then - PHP_DBA_STD_BEGIN - for i in $withval /usr/local /usr; do - if test -f "$i/include/cdb.h"; then - THIS_PREFIX=$i - THIS_INCLUDE=$i/include/cdb.h - break - fi - done - - if test -n "$THIS_INCLUDE"; then - for LIB in cdb c; do - PHP_CHECK_LIBRARY($LIB, cdb_read, [ - AC_DEFINE_UNQUOTED(CDB_INCLUDE_FILE, "$THIS_INCLUDE", [ ]) - AC_DEFINE(DBA_CDB, 1, [ ]) - THIS_LIBS=$LIB - ], [], [-L$THIS_PREFIX/$PHP_LIBDIR]) - if test -n "$THIS_LIBS"; then - break - fi - done - fi - - PHP_DBA_STD_ASSIGN - PHP_DBA_STD_CHECK - PHP_DBA_STD_ATTACH - fi -],[ - if test "$PHP_DBA" != "no" && test "$HAVE_DBA" = "1"; then - PHP_DBA_BUILTIN_CDB - fi -]) -AC_DBA_STD_RESULT(cdb) - -AC_DEFUN([PHP_DBA_BUILTIN_INI],[ - AC_DEFINE(DBA_INIFILE, 1, [ ]) - ini_sources="libinifile/inifile.c" - THIS_RESULT="builtin" -]) - -AC_ARG_WITH(inifile, -[ --with-inifile DBA: Include INI support],[ - if test "$withval" != "no"; then - PHP_DBA_BUILTIN_INI - fi -],[ - if test "$PHP_DBA" != "no" && test "$HAVE_DBA" = "1"; then - PHP_DBA_BUILTIN_INI - fi -]) -AC_DBA_STD_RESULT(inifile,INI File) - -AC_DEFUN([PHP_DBA_BUILTIN_FLATFILE],[ - AC_DEFINE(DBA_FLATFILE, 1, [ ]) - flat_sources="libflatfile/flatfile.c" - THIS_RESULT="builtin" -]) - -dnl -dnl FlatFile check must be the last one. -dnl -AC_ARG_WITH(flatfile, -[ --with-flatfile DBA: Include FlatFile support],[ - if test "$withval" != "no"; then - PHP_DBA_BUILTIN_FLATFILE - fi -],[ - if test "$PHP_DBA" != "no" && test "$HAVE_DBA" = "1"; then - PHP_DBA_BUILTIN_FLATFILE - fi -]) -AC_DBA_STD_RESULT(FlatFile,FlatFile) - -AC_MSG_CHECKING(whether to enable DBA interface) -if test "$HAVE_DBA" = "1"; then - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_DBA, 1, [ ]) - PHP_NEW_EXTENSION(dba, dba.c dba_cdb.c dba_dbm.c dba_gdbm.c dba_ndbm.c dba_db1.c dba_db2.c dba_db3.c dba_db4.c dba_flatfile.c dba_inifile.c dba_qdbm.c $cdb_sources $flat_sources $ini_sources, $ext_shared) - PHP_ADD_BUILD_DIR($ext_builddir/libinifile) - PHP_ADD_BUILD_DIR($ext_builddir/libcdb) - PHP_ADD_BUILD_DIR($ext_builddir/libflatfile) - PHP_SUBST(DBA_SHARED_LIBADD) -else - AC_MSG_RESULT(no) -fi diff --git a/ext/dba/config.w32 b/ext/dba/config.w32 deleted file mode 100644 index 4f3514e62f25c..0000000000000 --- a/ext/dba/config.w32 +++ /dev/null @@ -1,18 +0,0 @@ -// $Id$ -// vim:ft=javascript - -ARG_WITH("dba", "DBA support", "no"); - -if (PHP_DBA != "no") { - if (CHECK_LIB("libdb31s.lib", "dba", PHP_DBA) && - CHECK_HEADER_ADD_INCLUDE("db.h", "CFLAGS_DBA")) { - EXTENSION("dba", "dba.c dba_cdb.c dba_db1.c dba_db2.c dba_db3.c dba_dbm.c dba_flatfile.c dba_gdbm.c dba_ndbm.c dba_inifile.c"); - ADD_SOURCES("ext/dba/libcdb", "cdb.c cdb_make.c uint32.c", "dba"); - ADD_SOURCES("ext/dba/libflatfile", "flatfile.c", "dba"); - ADD_SOURCES("ext/dba/libinifile", "inifile.c", "dba"); - AC_DEFINE('HAVE_DBA', 1, 'DBA support'); - ADD_FLAG("CFLAGS_DBA", "/D DBA_DB1=0 /D DB1_VERSION=\"\\\"Berkeley DB 1.85 emulation in DB3\\\"\" /D DB1_INCLUDE_FILE=\"\\\"db_185.h\\\"\" /D DBA_DB3=1 /D DB3_INCLUDE_FILE=\"\\\"db.h\\\"\" /D DBA_FLATFILE=1 /D DBA_CDB=1 /D DBA_CDB_MAKE=1 /D DBA_CDB_BUILTIN=1 /D DBA_INIFILE=1"); - } else { - WARNING("dba not enabled; libraries and headers not found"); - } -} diff --git a/ext/dba/dba.c b/ext/dba/dba.c deleted file mode 100644 index 8156d6608bca0..0000000000000 --- a/ext/dba/dba.c +++ /dev/null @@ -1,1215 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Sascha Schumann | - | Marcus Boerger | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if HAVE_DBA - -#include "php_ini.h" -#include -#include -#ifdef HAVE_SYS_FILE_H -#include -#endif - -#include "php_dba.h" -#include "ext/standard/info.h" -#include "ext/standard/php_string.h" -#include "ext/standard/flock_compat.h" - -#include "php_gdbm.h" -#include "php_ndbm.h" -#include "php_dbm.h" -#include "php_cdb.h" -#include "php_db1.h" -#include "php_db2.h" -#include "php_db3.h" -#include "php_db4.h" -#include "php_flatfile.h" -#include "php_inifile.h" -#include "php_qdbm.h" - -/* {{{ arginfo */ -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_dba_popen, 0, 0, 2) - ZEND_ARG_INFO(0, path) - ZEND_ARG_INFO(0, mode) - ZEND_ARG_INFO(0, handlername) - ZEND_ARG_INFO(0, ...) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_dba_open, 0, 0, 2) - ZEND_ARG_INFO(0, path) - ZEND_ARG_INFO(0, mode) - ZEND_ARG_INFO(0, handlername) - ZEND_ARG_INFO(0, ...) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dba_close, 0) - ZEND_ARG_INFO(0, handle) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dba_exists, 0) - ZEND_ARG_INFO(0, key) - ZEND_ARG_INFO(0, handle) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_dba_fetch, 0, 0, 2) - ZEND_ARG_INFO(0, key) - ZEND_ARG_INFO(0, skip) - ZEND_ARG_INFO(0, handle) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dba_key_split, 0) - ZEND_ARG_INFO(0, key) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dba_firstkey, 0) - ZEND_ARG_INFO(0, handle) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dba_nextkey, 0) - ZEND_ARG_INFO(0, handle) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dba_delete, 0) - ZEND_ARG_INFO(0, key) - ZEND_ARG_INFO(0, handle) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dba_insert, 0) - ZEND_ARG_INFO(0, key) - ZEND_ARG_INFO(0, value) - ZEND_ARG_INFO(0, handle) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dba_replace, 0) - ZEND_ARG_INFO(0, key) - ZEND_ARG_INFO(0, value) - ZEND_ARG_INFO(0, handle) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dba_optimize, 0) - ZEND_ARG_INFO(0, handle) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dba_sync, 0) - ZEND_ARG_INFO(0, handle) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_dba_handlers, 0, 0, 0) - ZEND_ARG_INFO(0, full_info) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dba_list, 0) -ZEND_END_ARG_INFO() - -/* }}} */ - -/* {{{ dba_functions[] - */ -zend_function_entry dba_functions[] = { - PHP_FE(dba_open, arginfo_dba_open) - PHP_FE(dba_popen, arginfo_dba_popen) - PHP_FE(dba_close, arginfo_dba_close) - PHP_FE(dba_delete, arginfo_dba_delete) - PHP_FE(dba_exists, arginfo_dba_exists) - PHP_FE(dba_fetch, arginfo_dba_fetch) - PHP_FE(dba_insert, arginfo_dba_insert) - PHP_FE(dba_replace, arginfo_dba_replace) - PHP_FE(dba_firstkey, arginfo_dba_firstkey) - PHP_FE(dba_nextkey, arginfo_dba_nextkey) - PHP_FE(dba_optimize, arginfo_dba_optimize) - PHP_FE(dba_sync, arginfo_dba_sync) - PHP_FE(dba_handlers, arginfo_dba_handlers) - PHP_FE(dba_list, arginfo_dba_list) - PHP_FE(dba_key_split, arginfo_dba_key_split) - {NULL, NULL, NULL} -}; -/* }}} */ - -PHP_MINIT_FUNCTION(dba); -PHP_MSHUTDOWN_FUNCTION(dba); -PHP_MINFO_FUNCTION(dba); - -ZEND_BEGIN_MODULE_GLOBALS(dba) - char *default_handler; - dba_handler *default_hptr; -ZEND_END_MODULE_GLOBALS(dba) - -ZEND_DECLARE_MODULE_GLOBALS(dba) - -#ifdef ZTS -#define DBA_G(v) TSRMG(dba_globals_id, zend_dba_globals *, v) -#else -#define DBA_G(v) (dba_globals.v) -#endif - -static PHP_GINIT_FUNCTION(dba); - -zend_module_entry dba_module_entry = { - STANDARD_MODULE_HEADER, - "dba", - dba_functions, - PHP_MINIT(dba), - PHP_MSHUTDOWN(dba), - NULL, - NULL, - PHP_MINFO(dba), - NO_VERSION_YET, - PHP_MODULE_GLOBALS(dba), - PHP_GINIT(dba), - NULL, - NULL, - STANDARD_MODULE_PROPERTIES_EX -}; - -#ifdef COMPILE_DL_DBA -ZEND_GET_MODULE(dba) -#endif - -/* {{{ macromania */ - -#define DBA_ID_PARS \ - zval **id; \ - dba_info *info = NULL; \ - int ac = ZEND_NUM_ARGS() - -/* these are used to get the standard arguments */ - -#define DBA_GET1 \ - if(ac != 1 || zend_get_parameters_ex(ac, &id) != SUCCESS) { \ - WRONG_PARAM_COUNT; \ - } - -/* {{{ php_dba_myke_key */ -static size_t php_dba_make_key(zval **key, char **key_str, char **key_free TSRMLS_DC) -{ - if (Z_TYPE_PP(key) == IS_ARRAY) { - zval **group, **name; - HashPosition pos; - size_t len; - - if (zend_hash_num_elements(Z_ARRVAL_PP(key)) != 2) { - php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, "Key does not have exactly two elements: (key, name)"); - return -1; - } - zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(key), &pos); - zend_hash_get_current_data_ex(Z_ARRVAL_PP(key), (void **) &group, &pos); - zend_hash_move_forward_ex(Z_ARRVAL_PP(key), &pos); - zend_hash_get_current_data_ex(Z_ARRVAL_PP(key), (void **) &name, &pos); - convert_to_string_ex(group); - convert_to_string_ex(name); - if (Z_STRLEN_PP(group) == 0) { - *key_str = Z_STRVAL_PP(name); - *key_free = NULL; - return Z_STRLEN_PP(name); - } - len = spprintf(key_str, 0, "[%s]%s", Z_STRVAL_PP(group), Z_STRVAL_PP(name)); - *key_free = *key_str; - return len; - } else { - convert_to_string_ex(key); - *key_str = Z_STRVAL_PP(key); - *key_free = NULL; - return Z_STRLEN_PP(key); - } -} -/* }}} */ - -#define DBA_GET2 \ - zval **key; \ - char *key_str, *key_free; \ - size_t key_len; \ - if(ac != 2 || zend_get_parameters_ex(ac, &key, &id) != SUCCESS) { \ - WRONG_PARAM_COUNT; \ - } \ - if ((key_len = php_dba_make_key(key, &key_str, &key_free TSRMLS_CC)) == 0) {\ - RETURN_FALSE; \ - } - -#define DBA_GET2_3 \ - zval **key; \ - char *key_str, *key_free; \ - size_t key_len; \ - zval **tmp; \ - int skip = 0; \ - switch(ac) { \ - case 2: \ - if (zend_get_parameters_ex(ac, &key, &id) != SUCCESS) { \ - WRONG_PARAM_COUNT; \ - } \ - break; \ - case 3: \ - if (zend_get_parameters_ex(ac, &key, &tmp, &id) != SUCCESS) { \ - WRONG_PARAM_COUNT; \ - } \ - convert_to_long_ex(tmp); \ - skip = Z_LVAL_PP(tmp); \ - break; \ - default: \ - WRONG_PARAM_COUNT; \ - } \ - if ((key_len = php_dba_make_key(key, &key_str, &key_free TSRMLS_CC)) == 0) {\ - RETURN_FALSE; \ - } - -#define DBA_GET3 \ - zval **key, **val; \ - char *key_str, *key_free; \ - size_t key_len; \ - if(ac != 3 || zend_get_parameters_ex(ac, &key, &val, &id) != SUCCESS) { \ - WRONG_PARAM_COUNT; \ - } \ - convert_to_string_ex(val); \ - if ((key_len = php_dba_make_key(key, &key_str, &key_free TSRMLS_CC)) == 0) {\ - RETURN_FALSE; \ - } - -#define DBA_ID_GET \ - ZEND_FETCH_RESOURCE2(info, dba_info *, id, -1, "DBA identifier", le_db, le_pdb); - -#define DBA_ID_GET1 DBA_ID_PARS; DBA_GET1; DBA_ID_GET -#define DBA_ID_GET2 DBA_ID_PARS; DBA_GET2; DBA_ID_GET -#define DBA_ID_GET2_3 DBA_ID_PARS; DBA_GET2_3; DBA_ID_GET -#define DBA_ID_GET3 DBA_ID_PARS; DBA_GET3; DBA_ID_GET - -#define DBA_ID_DONE \ - if (key_free) efree(key_free) -/* a DBA handler must have specific routines */ - -#define DBA_NAMED_HND(alias, name, flags) \ -{\ - #alias, flags, dba_open_##name, dba_close_##name, dba_fetch_##name, dba_update_##name, \ - dba_exists_##name, dba_delete_##name, dba_firstkey_##name, dba_nextkey_##name, \ - dba_optimize_##name, dba_sync_##name, dba_info_##name \ -}, - -#define DBA_HND(name, flags) DBA_NAMED_HND(name, name, flags) - -/* check whether the user has write access */ -#define DBA_WRITE_CHECK \ - if(info->mode != DBA_WRITER && info->mode != DBA_TRUNC && info->mode != DBA_CREAT) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "You cannot perform a modification to a database without proper access"); \ - RETURN_FALSE; \ - } - -/* }}} */ - -/* {{{ globals */ - -static dba_handler handler[] = { -#if DBA_GDBM - DBA_HND(gdbm, DBA_LOCK_EXT) /* Locking done in library if set */ -#endif -#if DBA_DBM - DBA_HND(dbm, DBA_LOCK_ALL) /* No lock in lib */ -#endif -#if DBA_NDBM - DBA_HND(ndbm, DBA_LOCK_ALL) /* Could be done in library: filemode = 0644 + S_ENFMT */ -#endif -#if DBA_CDB - DBA_HND(cdb, DBA_STREAM_OPEN|DBA_LOCK_ALL) /* No lock in lib */ -#endif -#if DBA_CDB_BUILTIN - DBA_NAMED_HND(cdb_make, cdb, DBA_STREAM_OPEN|DBA_LOCK_ALL) /* No lock in lib */ -#endif -#if DBA_DB1 - DBA_HND(db1, DBA_LOCK_ALL) /* No lock in lib */ -#endif -#if DBA_DB2 - DBA_HND(db2, DBA_LOCK_ALL) /* No lock in lib */ -#endif -#if DBA_DB3 - DBA_HND(db3, DBA_LOCK_ALL) /* No lock in lib */ -#endif -#if DBA_DB4 - DBA_HND(db4, DBA_LOCK_EXT) /* Locking done in library itself */ -#endif -#if DBA_INIFILE - DBA_HND(inifile, DBA_STREAM_OPEN|DBA_LOCK_ALL|DBA_CAST_AS_FD) /* No lock in lib */ -#endif -#if DBA_FLATFILE - DBA_HND(flatfile, DBA_STREAM_OPEN|DBA_LOCK_ALL|DBA_NO_APPEND) /* No lock in lib */ -#endif -#if DBA_QDBM - DBA_HND(qdbm, DBA_LOCK_EXT) -#endif - { NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } -}; - -#if DBA_FLATFILE -#define DBA_DEFAULT "flatfile" -#elif DBA_DB4 -#define DBA_DEFAULT "db4" -#elif DBA_DB3 -#define DBA_DEFAULT "db3" -#elif DBA_DB2 -#define DBA_DEFAULT "db2" -#elif DBA_DB1 -#define DBA_DEFAULT "db1" -#elif DBA_GDBM -#define DBA_DEFAULT "gdbm" -#elif DBA_NBBM -#define DBA_DEFAULT "ndbm" -#elif DBA_DBM -#define DBA_DEFAULT "dbm" -#elif DBA_QDBM -#define DBA_DEFAULT "qdbm" -#else -#define DBA_DEFAULT "" -#endif -/* cdb/cdb_make and ini are no option here */ - -static int le_db; -static int le_pdb; -/* }}} */ - -/* {{{ dba_fetch_resource -PHPAPI void dba_fetch_resource(dba_info **pinfo, zval **id TSRMLS_DC) -{ - dba_info *info; - DBA_ID_FETCH - *pinfo = info; -} -*/ -/* }}} */ - -/* {{{ dba_get_handler -PHPAPI dba_handler *dba_get_handler(const char* handler_name) -{ - dba_handler *hptr; - for (hptr = handler; hptr->name && strcasecmp(hptr->name, handler_name); hptr++); - return hptr; -} -*/ -/* }}} */ - -/* {{{ dba_close - */ -static void dba_close(dba_info *info TSRMLS_DC) -{ - if (info->hnd) { - info->hnd->close(info TSRMLS_CC); - } - if (info->path) { - pefree(info->path, info->flags&DBA_PERSISTENT); - } - if (info->fp && info->fp!=info->lock.fp) { - if(info->flags&DBA_PERSISTENT) { - php_stream_pclose(info->fp); - } else { - php_stream_close(info->fp); - } - } - if (info->lock.fp) { - if(info->flags&DBA_PERSISTENT) { - php_stream_pclose(info->lock.fp); - } else { - php_stream_close(info->lock.fp); - } - } - if (info->lock.name) { - pefree(info->lock.name, info->flags&DBA_PERSISTENT); - } - pefree(info, info->flags&DBA_PERSISTENT); -} -/* }}} */ - -/* {{{ dba_close_rsrc - */ -static void dba_close_rsrc(zend_rsrc_list_entry *rsrc TSRMLS_DC) -{ - dba_info *info = (dba_info *)rsrc->ptr; - - dba_close(info TSRMLS_CC); -} -/* }}} */ - -/* {{{ dba_close_pe_rsrc_deleter */ -int dba_close_pe_rsrc_deleter(zend_rsrc_list_entry *le, void *pDba TSRMLS_DC) -{ - return le->ptr == pDba; -} -/* }}} */ - -/* {{{ dba_close_pe_rsrc */ -static void dba_close_pe_rsrc(zend_rsrc_list_entry *rsrc TSRMLS_DC) -{ - dba_info *info = (dba_info *)rsrc->ptr; - - /* closes the resource by calling dba_close_rsrc() */ - zend_hash_apply_with_argument(&EG(persistent_list), (apply_func_arg_t) dba_close_pe_rsrc_deleter, info TSRMLS_CC); -} -/* }}} */ - -/* {{{ PHP_INI - */ -ZEND_INI_MH(OnUpdateDefaultHandler) -{ - dba_handler *hptr; - - if (!strlen(new_value)) { - DBA_G(default_hptr) = NULL; - return OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); - } - - for (hptr = handler; hptr->name && strcasecmp(hptr->name, new_value); hptr++); - - if (!hptr->name) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "No such handler: %s", new_value); - return FAILURE; - } - DBA_G(default_hptr) = hptr; - return OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); -} - -PHP_INI_BEGIN() - STD_PHP_INI_ENTRY("dba.default_handler", DBA_DEFAULT, PHP_INI_ALL, OnUpdateDefaultHandler, default_handler, zend_dba_globals, dba_globals) -PHP_INI_END() -/* }}} */ - -/* {{{ PHP_GINIT_FUNCTION - */ -static PHP_GINIT_FUNCTION(dba) -{ - dba_globals->default_handler = ""; - dba_globals->default_hptr = NULL; -} -/* }}} */ - -/* {{{ PHP_MINIT_FUNCTION - */ -PHP_MINIT_FUNCTION(dba) -{ - REGISTER_INI_ENTRIES(); - le_db = zend_register_list_destructors_ex(dba_close_rsrc, NULL, "dba", module_number); - le_pdb = zend_register_list_destructors_ex(dba_close_pe_rsrc, dba_close_rsrc, "dba persistent", module_number); - return SUCCESS; -} -/* }}} */ - -/* {{{ PHP_MSHUTDOWN_FUNCTION - */ -PHP_MSHUTDOWN_FUNCTION(dba) -{ - UNREGISTER_INI_ENTRIES(); - return SUCCESS; -} -/* }}} */ - -#include "ext/standard/php_smart_str.h" - -/* {{{ PHP_MINFO_FUNCTION - */ -PHP_MINFO_FUNCTION(dba) -{ - dba_handler *hptr; - smart_str handlers = {0}; - - for(hptr = handler; hptr->name; hptr++) { - smart_str_appends(&handlers, hptr->name); - smart_str_appendc(&handlers, ' '); - } - - php_info_print_table_start(); - php_info_print_table_row(2, "DBA support", "enabled"); - if (handlers.c) { - smart_str_0(&handlers); - php_info_print_table_row(2, "Supported handlers", handlers.c); - smart_str_free(&handlers); - } else { - php_info_print_table_row(2, "Supported handlers", "none"); - } - php_info_print_table_end(); -} -/* }}} */ - -/* {{{ php_dba_update - */ -static void php_dba_update(INTERNAL_FUNCTION_PARAMETERS, int mode) -{ - DBA_ID_GET3; - - DBA_WRITE_CHECK; - - if(info->hnd->update(info, key_str, key_len, VALLEN(val), mode TSRMLS_CC) == SUCCESS) - { - DBA_ID_DONE; - RETURN_TRUE; - } - DBA_ID_DONE; - RETURN_FALSE; -} -/* }}} */ - -#define FREENOW if(args) efree(args); if(key) efree(key) - -/* {{{ php_find_dbm - */ -dba_info *php_dba_find(const char* path TSRMLS_DC) -{ - zend_rsrc_list_entry *le; - dba_info *info; - int numitems, i; - - numitems = zend_hash_next_free_element(&EG(regular_list)); - for (i=1; iptr); - if (!strcmp(info->path, path)) { - return (dba_info *)(le->ptr); - } - } - } - - return NULL; -} -/* }}} */ - -/* {{{ php_dba_open - */ -static void php_dba_open(INTERNAL_FUNCTION_PARAMETERS, int persistent) -{ - zval ***args = (zval ***) NULL; - int ac = ZEND_NUM_ARGS(); - dba_mode_t modenr; - dba_info *info, *other; - dba_handler *hptr; - char *key = NULL, *error = NULL; - int keylen = 0; - int i; - int lock_mode, lock_flag, lock_dbf = 0; - char *file_mode; - char mode[4], *pmode, *lock_file_mode = NULL; - int persistent_flag = persistent ? STREAM_OPEN_PERSISTENT : 0; - char *opened_path, *lock_name; - - if(ac < 2) { - WRONG_PARAM_COUNT; - } - - /* we pass additional args to the respective handler */ - args = safe_emalloc(ac, sizeof(zval *), 0); - if (zend_get_parameters_array_ex(ac, args) != SUCCESS) { - FREENOW; - WRONG_PARAM_COUNT; - } - - /* we only take string arguments */ - for (i = 0; i < ac; i++) { - convert_to_string_ex(args[i]); - keylen += Z_STRLEN_PP(args[i]); - } - - if (persistent) { - zend_rsrc_list_entry *le; - - /* calculate hash */ - key = safe_emalloc(keylen, 1, 1); - key[keylen] = '\0'; - keylen = 0; - - for(i = 0; i < ac; i++) { - memcpy(key+keylen, Z_STRVAL_PP(args[i]), Z_STRLEN_PP(args[i])); - keylen += Z_STRLEN_PP(args[i]); - } - - /* try to find if we already have this link in our persistent list */ - if (zend_hash_find(&EG(persistent_list), key, keylen+1, (void **) &le) == SUCCESS) { - FREENOW; - - if (Z_TYPE_P(le) != le_pdb) { - RETURN_FALSE; - } - - info = (dba_info *)le->ptr; - - ZEND_REGISTER_RESOURCE(return_value, info, le_pdb); - return; - } - } - - if (ac==2) { - hptr = DBA_G(default_hptr); - if (!hptr) { - php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "No default handler selected"); - FREENOW; - RETURN_FALSE; - } - } else { - for (hptr = handler; hptr->name && strcasecmp(hptr->name, Z_STRVAL_PP(args[2])); hptr++); - } - - if (!hptr->name) { - php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "No such handler: %s", Z_STRVAL_PP(args[2])); - FREENOW; - RETURN_FALSE; - } - - /* Check mode: [rwnc][fl]?t? - * r: Read - * w: Write - * n: Create/Truncate - * c: Create - * - * d: force lock on database file - * l: force lock on lck file - * -: ignore locking - * - * t: test open database, warning if locked - */ - strlcpy(mode, Z_STRVAL_PP(args[1]), sizeof(mode)); - pmode = &mode[0]; - if (pmode[0] && (pmode[1]=='d' || pmode[1]=='l' || pmode[1]=='-')) { /* force lock on db file or lck file or disable locking */ - switch (pmode[1]) { - case 'd': - lock_dbf = 1; - if ((hptr->flags & DBA_LOCK_ALL) == 0) { - lock_flag = (hptr->flags & DBA_LOCK_ALL); - break; - } - /* no break */ - case 'l': - lock_flag = DBA_LOCK_ALL; - if ((hptr->flags & DBA_LOCK_ALL) == 0) { - php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_NOTICE, "Handler %s does locking internally", hptr->name); - } - break; - default: - case '-': - if ((hptr->flags & DBA_LOCK_ALL) == 0) { - php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "Locking cannot be disabled for handler %s", hptr->name); - FREENOW; - RETURN_FALSE; - } - lock_flag = 0; - break; - } - } else { - lock_flag = (hptr->flags&DBA_LOCK_ALL); - lock_dbf = 1; - } - switch (*pmode++) { - case 'r': - modenr = DBA_READER; - lock_mode = (lock_flag & DBA_LOCK_READER) ? LOCK_SH : 0; - file_mode = "r"; - break; - case 'w': - modenr = DBA_WRITER; - lock_mode = (lock_flag & DBA_LOCK_WRITER) ? LOCK_EX : 0; - file_mode = "r+b"; - break; - case 'c': - modenr = DBA_CREAT; - lock_mode = (lock_flag & DBA_LOCK_CREAT) ? LOCK_EX : 0; - if (lock_mode) { - if (lock_dbf) { - /* the create/append check will be done on the lock - * when the lib opens the file it is already created - */ - file_mode = "r+b"; /* read & write, seek 0 */ - lock_file_mode = "a+b"; /* append */ - } else { - file_mode = "a+b"; /* append */ - lock_file_mode = "w+b"; /* create/truncate */ - } - } else { - file_mode = "a+b"; - } - /* In case of the 'a+b' append mode, the handler is responsible - * to handle any rewind problems (see flatfile handler). - */ - break; - case 'n': - modenr = DBA_TRUNC; - lock_mode = (lock_flag & DBA_LOCK_TRUNC) ? LOCK_EX : 0; - file_mode = "w+b"; - break; - default: - php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "Illegal DBA mode"); - FREENOW; - RETURN_FALSE; - } - if (!lock_file_mode) { - lock_file_mode = file_mode; - } - if (*pmode=='d' || *pmode=='l' || *pmode=='-') { - pmode++; /* done already - skip here */ - } - if (*pmode=='t') { - pmode++; - if (!lock_flag) { - php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "You cannot combine modifiers - (no lock) and t (test lock)"); - FREENOW; - RETURN_FALSE; - } - if (!lock_mode) { - if ((hptr->flags & DBA_LOCK_ALL) == 0) { - php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "Handler %s uses its own locking which doesn't support mode modifier t (test lock)", hptr->name); - FREENOW; - RETURN_FALSE; - } else { - php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "Handler %s doesn't uses locking for this mode which makes modifier t (test lock) obsolete", hptr->name); - FREENOW; - RETURN_FALSE; - } - } else { - lock_mode |= LOCK_NB; /* test =: non blocking */ - } - } - if (*pmode) { - php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "Illegal DBA mode"); - FREENOW; - RETURN_FALSE; - } - - info = pemalloc(sizeof(dba_info), persistent); - memset(info, 0, sizeof(dba_info)); - info->path = pestrdup(Z_STRVAL_PP(args[0]), persistent); - info->mode = modenr; - info->argc = ac - 3; - info->argv = args + 3; - info->flags = (hptr->flags & ~DBA_LOCK_ALL) | (lock_flag & DBA_LOCK_ALL) | (persistent ? DBA_PERSISTENT : 0); - info->lock.mode = lock_mode; - - /* if any open call is a locking call: - * check if we already habe a locking call open that should block this call - * the problem is some systems would allow read during write - */ - if (hptr->flags & DBA_LOCK_ALL) { - if ((other = php_dba_find(info->path TSRMLS_CC)) != NULL) { - if ( ( (lock_mode&LOCK_EX) && (other->lock.mode&(LOCK_EX|LOCK_SH)) ) - || ( (other->lock.mode&LOCK_EX) && (lock_mode&(LOCK_EX|LOCK_SH)) ) - ) { - error = "Unable to establish lock (database file already open)"; /* force failure exit */ - } - } - } - - if (!error && lock_mode) { - if (lock_dbf) { - lock_name = Z_STRVAL_PP(args[0]); - } else { - spprintf(&lock_name, 0, "%s.lck", info->path); - if (!strcmp(file_mode, "r")) { - /* when in read only mode try to use existing .lck file first */ - /* do not log errors for .lck file while in read ony mode on .lck file */ - lock_file_mode = "rb"; - info->lock.fp = php_stream_open_wrapper(lock_name, lock_file_mode, STREAM_MUST_SEEK|IGNORE_PATH|persistent_flag, &opened_path); - } - if (!info->lock.fp) { - /* when not in read mode or failed to open .lck file read only. now try again in create(write) mode and log errors */ - lock_file_mode = "a+b"; - } else { - if (!persistent) { - info->lock.name = opened_path; - } else { - info->lock.name = pestrdup(opened_path, persistent); - efree(opened_path); - } - } - } - if (!info->lock.fp) { - info->lock.fp = php_stream_open_wrapper(lock_name, lock_file_mode, STREAM_MUST_SEEK|REPORT_ERRORS|IGNORE_PATH|persistent_flag, &opened_path); - if (info->lock.fp) { - if (lock_dbf) { - /* replace the path info with the real path of the opened file */ - pefree(info->path, persistent); - info->path = pestrdup(opened_path, persistent); - } - /* now store the name of the lock */ - if (!persistent) { - info->lock.name = opened_path; - } else { - info->lock.name = pestrdup(opened_path, persistent); - efree(opened_path); - } - } - } - if (!lock_dbf) { - efree(lock_name); - } - if (!info->lock.fp) { - dba_close(info TSRMLS_CC); - /* stream operation already wrote an error message */ - FREENOW; - RETURN_FALSE; - } - if (!php_stream_supports_lock(info->lock.fp)) { - error = "Stream does not support locking"; - } - if (php_stream_lock(info->lock.fp, lock_mode)) { - error = "Unable to establish lock"; /* force failure exit */ - } - } - - /* centralised open stream for builtin */ - if (!error && (hptr->flags&DBA_STREAM_OPEN)==DBA_STREAM_OPEN) { - if (info->lock.fp && lock_dbf) { - info->fp = info->lock.fp; /* use the same stream for locking and database access */ - } else { - info->fp = php_stream_open_wrapper(info->path, file_mode, STREAM_MUST_SEEK|REPORT_ERRORS|IGNORE_PATH|persistent_flag, NULL); - } - if (!info->fp) { - dba_close(info TSRMLS_CC); - /* stream operation already wrote an error message */ - FREENOW; - RETURN_FALSE; - } - if (hptr->flags & (DBA_NO_APPEND|DBA_CAST_AS_FD)) { - /* Needed becasue some systems do not allow to write to the original - * file contents with O_APPEND being set. - */ - if (SUCCESS != php_stream_cast(info->fp, PHP_STREAM_AS_FD, (void*)&info->fd, 1)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not cast stream"); - dba_close(info TSRMLS_CC); - FREENOW; - RETURN_FALSE; -#ifdef F_SETFL - } else if (modenr == DBA_CREAT) { - int flags = fcntl(info->fd, F_SETFL); - fcntl(info->fd, F_SETFL, flags & ~O_APPEND); -#endif - } - - } - } - - if (error || hptr->open(info, &error TSRMLS_CC) != SUCCESS) { - dba_close(info TSRMLS_CC); - php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "Driver initialization failed for handler: %s%s%s", hptr->name, error?": ":"", error?error:""); - FREENOW; - RETURN_FALSE; - } - - info->hnd = hptr; - info->argc = 0; - info->argv = NULL; - - if (persistent) { - zend_rsrc_list_entry new_le; - - Z_TYPE(new_le) = le_pdb; - new_le.ptr = info; - if (zend_hash_update(&EG(persistent_list), key, keylen+1, &new_le, sizeof(zend_rsrc_list_entry), NULL) == FAILURE) { - dba_close(info TSRMLS_CC); - php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "Could not register persistent resource"); - FREENOW; - RETURN_FALSE; - } - } - - ZEND_REGISTER_RESOURCE(return_value, info, (persistent ? le_pdb : le_db)); - FREENOW; -} -/* }}} */ -#undef FREENOW - -/* {{{ proto resource dba_popen(string path, string mode [, string handlername, string ...]) - Opens path using the specified handler in mode persistently */ -PHP_FUNCTION(dba_popen) -{ - php_dba_open(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); -} -/* }}} */ - -/* {{{ proto resource dba_open(string path, string mode [, string handlername, string ...]) - Opens path using the specified handler in mode*/ -PHP_FUNCTION(dba_open) -{ - php_dba_open(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); -} -/* }}} */ - -/* {{{ proto void dba_close(resource handle) - Closes database */ -PHP_FUNCTION(dba_close) -{ - DBA_ID_GET1; - - zend_list_delete(Z_RESVAL_PP(id)); -} -/* }}} */ - -/* {{{ proto bool dba_exists(string key, resource handle) - Checks, if the specified key exists */ -PHP_FUNCTION(dba_exists) -{ - DBA_ID_GET2; - - if(info->hnd->exists(info, key_str, key_len TSRMLS_CC) == SUCCESS) { - DBA_ID_DONE; - RETURN_TRUE; - } - DBA_ID_DONE; - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto string dba_fetch(string key, [int skip ,] resource handle) - Fetches the data associated with key */ -PHP_FUNCTION(dba_fetch) -{ - char *val; - int len = 0; - DBA_ID_GET2_3; - - if (ac==3) { - if (!strcmp(info->hnd->name, "cdb")) { - if (skip < 0) { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Handler %s accepts only skip values greater than or equal to zero, using skip=0", info->hnd->name); - skip = 0; - } - } else if (!strcmp(info->hnd->name, "inifile")) { - /* "-1" is compareable to 0 but allows a non restrictive - * access which is fater. For example 'inifile' uses this - * to allow faster access when the key was already found - * using firstkey/nextkey. However explicitly setting the - * value to 0 ensures the first value. - */ - if (skip < -1) { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Handler %s accepts only skip value -1 and greater, using skip=0", info->hnd->name); - skip = 0; - } - } else { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Handler %s does not support optional skip parameter, the value will be ignored", info->hnd->name); - skip = 0; - } - } else { - skip = 0; - } - if((val = info->hnd->fetch(info, key_str, key_len, skip, &len TSRMLS_CC)) != NULL) { - DBA_ID_DONE; - RETURN_STRINGL(val, len, 0); - } - DBA_ID_DONE; - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto array|false dba_key_split(string key) - Splits an inifile key into an array of the form array(0=>group,1=>value_name) but returns false if input is false or null */ -PHP_FUNCTION(dba_key_split) -{ - zval *zkey; - char *key, *name; - int key_len; - - if (ZEND_NUM_ARGS() != 1) { - WRONG_PARAM_COUNT; - } - if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "z", &zkey) == SUCCESS) { - if (Z_TYPE_P(zkey) == IS_NULL || (Z_TYPE_P(zkey) == IS_BOOL && !Z_LVAL_P(zkey))) { - RETURN_BOOL(0); - } - } - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &key, &key_len) == FAILURE) { - RETURN_BOOL(0); - } - array_init(return_value); - if (key[0] == '[' && (name = strchr(key, ']')) != NULL) { - add_next_index_stringl(return_value, key+1, name - (key + 1), 1); - add_next_index_stringl(return_value, name+1, key_len - (name - key + 1), 1); - } else { - add_next_index_stringl(return_value, "", 0, 1); - add_next_index_stringl(return_value, key, key_len, 1); - } -} -/* }}} */ - -/* {{{ proto string dba_firstkey(resource handle) - Resets the internal key pointer and returns the first key */ -PHP_FUNCTION(dba_firstkey) -{ - char *fkey; - int len; - DBA_ID_GET1; - - fkey = info->hnd->firstkey(info, &len TSRMLS_CC); - if(fkey) - RETURN_STRINGL(fkey, len, 0); - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto string dba_nextkey(resource handle) - Returns the next key */ -PHP_FUNCTION(dba_nextkey) -{ - char *nkey; - int len; - DBA_ID_GET1; - - nkey = info->hnd->nextkey(info, &len TSRMLS_CC); - if(nkey) - RETURN_STRINGL(nkey, len, 0); - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto bool dba_delete(string key, resource handle) - Deletes the entry associated with key - If inifile: remove all other key lines */ -PHP_FUNCTION(dba_delete) -{ - DBA_ID_GET2; - - DBA_WRITE_CHECK; - - if(info->hnd->delete(info, key_str, key_len TSRMLS_CC) == SUCCESS) - { - DBA_ID_DONE; - RETURN_TRUE; - } - DBA_ID_DONE; - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto bool dba_insert(string key, string value, resource handle) - If not inifile: Insert value as key, return false, if key exists already - If inifile: Add vakue as key (next instance of key) */ -PHP_FUNCTION(dba_insert) -{ - php_dba_update(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); -} -/* }}} */ - -/* {{{ proto bool dba_replace(string key, string value, resource handle) - Inserts value as key, replaces key, if key exists already - If inifile: remove all other key lines */ -PHP_FUNCTION(dba_replace) -{ - php_dba_update(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); -} -/* }}} */ - -/* {{{ proto bool dba_optimize(resource handle) - Optimizes (e.g. clean up, vacuum) database */ -PHP_FUNCTION(dba_optimize) -{ - DBA_ID_GET1; - - DBA_WRITE_CHECK; - if(info->hnd->optimize(info TSRMLS_CC) == SUCCESS) { - RETURN_TRUE; - } - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto bool dba_sync(resource handle) - Synchronizes database */ -PHP_FUNCTION(dba_sync) -{ - DBA_ID_GET1; - - if(info->hnd->sync(info TSRMLS_CC) == SUCCESS) { - RETURN_TRUE; - } - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto array dba_handlers([bool full_info]) - List configured database handlers */ -PHP_FUNCTION(dba_handlers) -{ - dba_handler *hptr; - zend_bool full_info = 0; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &full_info) == FAILURE) { - RETURN_FALSE; - } - - array_init(return_value); - - for(hptr = handler; hptr->name; hptr++) { - if (full_info) { - add_assoc_string(return_value, hptr->name, hptr->info(hptr, NULL TSRMLS_CC), 0); - } else { - add_next_index_string(return_value, hptr->name, 1); - } - } -} -/* }}} */ - -/* {{{ proto array dba_list() - List opened databases */ -PHP_FUNCTION(dba_list) -{ - ulong numitems, i; - zend_rsrc_list_entry *le; - dba_info *info; - - if (ZEND_NUM_ARGS()!=0) { - ZEND_WRONG_PARAM_COUNT(); - RETURN_FALSE; - } - - array_init(return_value); - - numitems = zend_hash_next_free_element(&EG(regular_list)); - for (i=1; iptr); - add_index_string(return_value, i, info->path, 1); - } - } -} -/* }}} */ - -#endif /* HAVE_DBA */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/dba/dba.dsp b/ext/dba/dba.dsp deleted file mode 100644 index ddfd1485a965d..0000000000000 --- a/ext/dba/dba.dsp +++ /dev/null @@ -1,213 +0,0 @@ -# Microsoft Developer Studio Project File - Name="dba" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=dba - Win32 Debug_TS Berkeley DB3 -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "dba.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "dba.mak" CFG="dba - Win32 Debug_TS Berkeley DB3" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "dba - Win32 Release_TS Berkeley DB3" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "dba - Win32 Debug_TS Berkeley DB3" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "dba - Win32 Release_TS Berkeley DB3" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_TS" -# PROP BASE Intermediate_Dir "Release_TS" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_TS" -# PROP Intermediate_Dir "Release_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_DBA" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBA=1 /D DBA_DB3=1 /D DB3_INCLUDE_FILE="db.h" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=0 /D DBA_DB3=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_DBA" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBA=1 /D DBA_FLATFILE=1 /D DBA_CDB=1 /D DBA_CDB_MAKE=1 /D DBA_CDB_BUILTIN=1 /D DBA_INIFILE=1 /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 php5ts.lib libdb31s.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dba.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" -# ADD LINK32 php5ts.lib libdb31s.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dba.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" - -!ELSEIF "$(CFG)" == "dba - Win32 Debug_TS Berkeley DB3" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_TS" -# PROP BASE Intermediate_Dir "Debug_TS" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug_TS" -# PROP Intermediate_Dir "Debug_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_DBA" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBA=1 /D "DBA_DB3" /D DB3_INCLUDE_FILE="db.h" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "DBA_DB3" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_DBA" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBA=1 /D DBA_FLATFILE=1 /D DBA_CDB=1 /D DBA_CDB_MAKE=1 /D DBA_CDB_BUILTIN=1 /D DBA_INIFILE=1 /YX /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_dba.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" -# ADD LINK32 php5ts_debug.lib libdb31s.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_dba.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" - -!ENDIF - -# Begin Target - -# Name "dba - Win32 Release_TS Berkeley DB3" -# Name "dba - Win32 Debug_TS Berkeley DB3" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\libcdb\cdb.c -# End Source File -# Begin Source File - -SOURCE=.\libcdb\cdb_make.c -# End Source File -# Begin Source File - -SOURCE=.\dba.c -# End Source File -# Begin Source File - -SOURCE=.\dba_cdb.c -# End Source File -# Begin Source File - -SOURCE=.\dba_db2.c -# End Source File -# Begin Source File - -SOURCE=.\dba_db3.c -# End Source File -# Begin Source File - -SOURCE=.\dba_dbm.c -# End Source File -# Begin Source File - -SOURCE=.\dba_flatfile.c -# End Source File -# Begin Source File - -SOURCE=.\dba_gdbm.c -# End Source File -# Begin Source File - -SOURCE=.\dba_inifile.c -# End Source File -# Begin Source File - -SOURCE=.\dba_ndbm.c -# End Source File -# Begin Source File - -SOURCE=.\libflatfile\flatfile.c -# End Source File -# Begin Source File - -SOURCE=.\libinifile\inifile.c -# End Source File -# Begin Source File - -SOURCE=.\libcdb\uint32.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\libcdb\cdb.h -# End Source File -# Begin Source File - -SOURCE=.\libcdb\cdb_make.h -# End Source File -# Begin Source File - -SOURCE=.\libflatfile\flatfile.h -# End Source File -# Begin Source File - -SOURCE=.\php_cdb.h -# End Source File -# Begin Source File - -SOURCE=.\php_db2.h -# End Source File -# Begin Source File - -SOURCE=.\php_db3.h -# End Source File -# Begin Source File - -SOURCE=.\php_dba.h -# End Source File -# Begin Source File - -SOURCE=.\php_dbm.h -# End Source File -# Begin Source File - -SOURCE=.\php_flatfile.h -# End Source File -# Begin Source File - -SOURCE=.\php_gdbm.h -# End Source File -# Begin Source File - -SOURCE=.\php_inifile.h -# End Source File -# Begin Source File - -SOURCE=.\php_ndbm.h -# End Source File -# Begin Source File - -SOURCE=.\libcdb\uint32.h -# End Source File -# Begin Source File - -SOURCE=.\libinifile\inifile.h -# End Source File -# End Group -# End Target -# End Project diff --git a/ext/dba/dba_cdb.c b/ext/dba/dba_cdb.c deleted file mode 100644 index 60f295033b5ec..0000000000000 --- a/ext/dba/dba_cdb.c +++ /dev/null @@ -1,350 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Sascha Schumann | - | Marcus Boerger | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if DBA_CDB -#include "php_cdb.h" - -#include -#ifdef HAVE_UNISTD_H -#include -#endif -#include - -#if DBA_CDB_BUILTIN -# include "libcdb/cdb.h" -# include "libcdb/cdb_make.h" -# include "libcdb/uint32.h" -#else -# ifdef CDB_INCLUDE_FILE -# include CDB_INCLUDE_FILE -# endif -#endif - -#define CDB_INFO \ - dba_cdb *cdb = (dba_cdb *) info->dbf - -typedef struct { - struct cdb c; -#if DBA_CDB_BUILTIN - struct cdb_make m; - php_stream *file; - int make; -#else - int file; -#endif - uint32 eod; /* size of constant database */ - uint32 pos; /* current position for traversing */ -} dba_cdb; - -DBA_OPEN_FUNC(cdb) -{ -#if DBA_CDB_BUILTIN - php_stream* file = 0; - int make; -#else - int file = 0; -#endif - dba_cdb *cdb; - dba_info *pinfo = (dba_info *) info; - - switch (info->mode) { - case DBA_READER: -#if DBA_CDB_BUILTIN - make = 0; - file = info->fp; -#else - file = VCWD_OPEN(info->path, O_RDONLY); - if (file < 0) { - *error = "Unable to open file"; - return FAILURE; - } -#endif - break; -#if DBA_CDB_BUILTIN - case DBA_TRUNC: - make = 1; - file = info->fp; - break; - case DBA_CREAT: - case DBA_WRITER: - *error = "Update operations are not supported"; - return FAILURE; /* not supported */ -#endif - default: - *error = "Currently not supported"; - return FAILURE; - } - - cdb = pemalloc(sizeof(dba_cdb), info->flags&DBA_PERSISTENT); - memset(cdb, 0, sizeof(dba_cdb)); - -#if DBA_CDB_BUILTIN - if (make) { - cdb_make_start(&cdb->m, file TSRMLS_CC); - } else { - cdb_init(&cdb->c, file TSRMLS_CC); - } - cdb->make = make; -#else - cdb_init(&cdb->c, file); -#endif - cdb->file = file; - - pinfo->dbf = cdb; - return SUCCESS; -} - -DBA_CLOSE_FUNC(cdb) -{ - CDB_INFO; - - /* cdb_free does not close associated file */ -#if DBA_CDB_BUILTIN - if (cdb->make) { - cdb_make_finish(&cdb->m TSRMLS_CC); - } else { - cdb_free(&cdb->c TSRMLS_CC); - } -#else - cdb_free(&cdb->c); - close(cdb->file); -#endif - pefree(cdb, info->flags&DBA_PERSISTENT); -} - -#if DBA_CDB_BUILTIN -# define php_cdb_read(cdb, buf, len, pos) cdb_read(cdb, buf, len, pos TSRMLS_CC) -# define php_cdb_findnext(cdb, key, len) cdb_findnext(cdb, key, len TSRMLS_CC) -# define php_cdb_find(cdb, key, len) cdb_find(cdb, key, len TSRMLS_CC) -#else -# define php_cdb_read(cdb, buf, len, pos) cdb_read(cdb, buf, len, pos) -# define php_cdb_findnext(cdb, key, len) cdb_findnext(cdb, key, len) -# define php_cdb_find(cdb, key, len) cdb_find(cdb, key, len) -#endif - -DBA_FETCH_FUNC(cdb) -{ - CDB_INFO; - unsigned int len; - char *new_entry = NULL; - -#if DBA_CDB_BUILTIN - if (cdb->make) - return NULL; /* database was opened writeonly */ -#endif - if (php_cdb_find(&cdb->c, key, keylen) == 1) { - while(skip--) { - if (php_cdb_findnext(&cdb->c, key, keylen) != 1) { - return NULL; - } - } - len = cdb_datalen(&cdb->c); - new_entry = safe_emalloc(len, 1, 1); - - if (php_cdb_read(&cdb->c, new_entry, len, cdb_datapos(&cdb->c)) == -1) { - efree(new_entry); - return NULL; - } - new_entry[len] = 0; - if (newlen) - *newlen = len; - } - - return new_entry; -} - -DBA_UPDATE_FUNC(cdb) -{ -#if DBA_CDB_BUILTIN - CDB_INFO; - - if (!cdb->make) - return FAILURE; /* database was opened readonly */ - if (!mode) - return FAILURE; /* cdb_make dosn't know replace */ - if (cdb_make_add(&cdb->m, key, keylen, val, vallen TSRMLS_CC) != -1) - return SUCCESS; -#endif - return FAILURE; -} - -DBA_EXISTS_FUNC(cdb) -{ - CDB_INFO; - -#if DBA_CDB_BUILTIN - if (cdb->make) - return FAILURE; /* database was opened writeonly */ -#endif - if (php_cdb_find(&cdb->c, key, keylen) == 1) - return SUCCESS; - return FAILURE; -} - -DBA_DELETE_FUNC(cdb) -{ - return FAILURE; /* cdb doesn't support delete */ -} - -/* {{{ cdb_file_read */ -#if DBA_CDB_BUILTIN -# define cdb_file_read(fildes, buf, size) php_stream_read(fildes, buf, size) -#else -# define cdb_file_read(fildes, buf, size) read(fildes, buf, size) -#endif -/* }}} */ - -#define CREAD(n) do { \ - if (cdb_file_read(cdb->file, buf, n) < n) return NULL; \ -} while (0) - -/* {{{ cdb_file_lseek - php_stream_seek does not return actual position */ -#if DBA_CDB_BUILTIN -int cdb_file_lseek(php_stream *fp, off_t offset, int whence TSRMLS_DC) { - php_stream_seek(fp, offset, whence); - return php_stream_tell(fp); -} -#else -int cdb_file_lseek(int fd, off_t offset, int whence TSRMLS_DC) { - return lseek(fd, offset, whence); -} -#endif -/* }}} */ - -#define CSEEK(n) do { \ - if (n >= cdb->eod) return NULL; \ - if (cdb_file_lseek(cdb->file, (off_t)n, SEEK_SET TSRMLS_CC) != (off_t) n) return NULL; \ -} while (0) - - -DBA_FIRSTKEY_FUNC(cdb) -{ - CDB_INFO; - uint32 klen, dlen; - char buf[8]; - char *key; - -#if DBA_CDB_BUILTIN - if (cdb->make) - return NULL; /* database was opened writeonly */ -#endif - - cdb->eod = -1; - CSEEK(0); - CREAD(4); - - /* Total length of file in bytes */ - uint32_unpack(buf, &cdb->eod); - - CSEEK(2048); - CREAD(8); - - /* The first four bytes contain the length of the key */ - uint32_unpack(buf, &klen); - uint32_unpack(buf + 4, &dlen); - - key = safe_emalloc(klen, 1, 1); - if (cdb_file_read(cdb->file, key, klen) < klen) { - efree(key); - key = NULL; - } else { - key[klen] = '\0'; - if (newlen) *newlen = klen; - } - - /* header + klenlen + dlenlen + klen + dlen */ - cdb->pos = 2048 + 4 + 4 + klen + dlen; - - return key; -} - -DBA_NEXTKEY_FUNC(cdb) -{ - CDB_INFO; - uint32 klen, dlen; - char buf[8]; - char *key; - -#if DBA_CDB_BUILTIN - if (cdb->make) - return NULL; /* database was opened writeonly */ -#endif - - CSEEK(cdb->pos); - CREAD(8); - uint32_unpack(buf, &klen); - uint32_unpack(buf + 4, &dlen); - - key = safe_emalloc(klen, 1, 1); - if (cdb_file_read(cdb->file, key, klen) < klen) { - efree(key); - key = NULL; - } else { - key[klen] = '\0'; - if (newlen) *newlen = klen; - } - - cdb->pos += 8 + klen + dlen; - - return key; -} - -DBA_OPTIMIZE_FUNC(cdb) -{ - return SUCCESS; -} - -DBA_SYNC_FUNC(cdb) -{ - /* this is read-only */ - return SUCCESS; -} - -DBA_INFO_FUNC(cdb) -{ -#if DBA_CDB_BUILTIN - if (!strcmp(hnd->name, "cdb")) { - return estrdup(cdb_version()); - } else { - return estrdup(cdb_make_version()); - } -#else - return estrdup("External"); -#endif -} - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/dba/dba_db1.c b/ext/dba/dba_db1.c deleted file mode 100755 index b9ce9cd262f8f..0000000000000 --- a/ext/dba/dba_db1.c +++ /dev/null @@ -1,197 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Shen Cheng-Da | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if DBA_DB1 -#include "php_db1.h" - -#ifdef DB1_INCLUDE_FILE -#include DB1_INCLUDE_FILE -#endif - -#include -#include -#include - -#define DB1_DATA dba_db1_data *dba = info->dbf -#define DB1_GKEY DBT gkey; gkey.data = (char *) key; gkey.size = keylen - -typedef struct { - DB *dbp; -} dba_db1_data; - -DBA_OPEN_FUNC(db1) -{ - dba_db1_data *dba; - DB *db; - - int gmode; - int filemode = 0644; - - if (info->argc > 0) { - convert_to_long_ex(info->argv[0]); - filemode = Z_LVAL_PP(info->argv[0]); - } - - gmode = 0; - switch (info->mode) { - case DBA_READER: - gmode = O_RDONLY; - break; - case DBA_WRITER: - gmode = O_RDWR; - break; - case DBA_CREAT: - gmode = O_RDWR | O_CREAT; - break; - case DBA_TRUNC: - gmode = O_RDWR | O_CREAT | O_TRUNC; - break; - default: - return FAILURE; /* not possible */ - } - - db = dbopen((char *)info->path, gmode, filemode, DB_HASH, NULL); - - if (db == NULL) { - return FAILURE; - } - - dba = pemalloc(sizeof(*dba), info->flags&DBA_PERSISTENT); - dba->dbp = db; - - info->dbf = dba; - - return SUCCESS; -} - -DBA_CLOSE_FUNC(db1) -{ - DB1_DATA; - dba->dbp->close(dba->dbp); - pefree(info->dbf, info->flags&DBA_PERSISTENT); -} - -DBA_FETCH_FUNC(db1) -{ - DBT gval; - DB1_DATA; - DB1_GKEY; - - memset(&gval, 0, sizeof(gval)); - if (dba->dbp->get(dba->dbp, &gkey, &gval, 0) == RET_SUCCESS) { - if (newlen) *newlen = gval.size; - return estrndup(gval.data, gval.size); - } - return NULL; -} - -DBA_UPDATE_FUNC(db1) -{ - DBT gval; - DB1_DATA; - DB1_GKEY; - - gval.data = (char *) val; - gval.size = vallen; - - return dba->dbp->put(dba->dbp, &gkey, &gval, mode == 1 ? R_NOOVERWRITE : 0) != RET_SUCCESS ? FAILURE : SUCCESS; -} - -DBA_EXISTS_FUNC(db1) -{ - DBT gval; - DB1_DATA; - DB1_GKEY; - - return dba->dbp->get(dba->dbp, &gkey, &gval, 0) != RET_SUCCESS ? FAILURE : SUCCESS; -} - -DBA_DELETE_FUNC(db1) -{ - DB1_DATA; - DB1_GKEY; - - return dba->dbp->del(dba->dbp, &gkey, 0) != RET_SUCCESS ? FAILURE : SUCCESS; -} - -DBA_FIRSTKEY_FUNC(db1) -{ - DBT gkey; - DBT gval; - DB1_DATA; - - memset(&gkey, 0, sizeof(gkey)); - memset(&gval, 0, sizeof(gval)); - - if (dba->dbp->seq(dba->dbp, &gkey, &gval, R_FIRST) == RET_SUCCESS) { - if (newlen) *newlen = gkey.size; - return estrndup(gkey.data, gkey.size); - } - return NULL; -} - -DBA_NEXTKEY_FUNC(db1) -{ - DBT gkey; - DBT gval; - DB1_DATA; - - memset(&gkey, 0, sizeof(gkey)); - memset(&gval, 0, sizeof(gval)); - - if (dba->dbp->seq(dba->dbp, &gkey, &gval, R_NEXT) == RET_SUCCESS) { - if (newlen) *newlen = gkey.size; - return estrndup(gkey.data, gkey.size); - } - return NULL; -} - -DBA_OPTIMIZE_FUNC(db1) -{ - /* dummy */ - return SUCCESS; -} - -DBA_SYNC_FUNC(db1) -{ - return SUCCESS; -} - -DBA_INFO_FUNC(db1) -{ - return estrdup(DB1_VERSION); -} - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/dba/dba_db2.c b/ext/dba/dba_db2.c deleted file mode 100644 index e51f2430797fd..0000000000000 --- a/ext/dba/dba_db2.c +++ /dev/null @@ -1,209 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Sascha Schumann | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if DBA_DB2 -#include "php_db2.h" -#include - -#include -#ifdef DB2_INCLUDE_FILE -#include DB2_INCLUDE_FILE -#endif - -#define DB2_DATA dba_db2_data *dba = info->dbf -#define DB2_GKEY \ - DBT gkey = {0}; \ - gkey.data = (char *) key; \ - gkey.size = keylen - -typedef struct { - DB *dbp; - DBC *cursor; -} dba_db2_data; - -DBA_OPEN_FUNC(db2) -{ - DB *dbp; - DBTYPE type; - int gmode = 0; - int filemode = 0644; - struct stat check_stat; - int s = VCWD_STAT(info->path, &check_stat); - - if (!s && !check_stat.st_size) { - info->mode = DBA_TRUNC; /* force truncate */ - } - - type = info->mode == DBA_READER ? DB_UNKNOWN : - info->mode == DBA_TRUNC ? DB_BTREE : - s ? DB_BTREE : DB_UNKNOWN; - - gmode = info->mode == DBA_READER ? DB_RDONLY : - (info->mode == DBA_CREAT && s) ? DB_CREATE : - (info->mode == DBA_CREAT && !s) ? 0 : - info->mode == DBA_WRITER ? 0 : - info->mode == DBA_TRUNC ? DB_CREATE | DB_TRUNCATE : -1; - - if (gmode == -1) { - return FAILURE;/* not possible */ - } - - if (info->argc > 0) { - convert_to_long_ex(info->argv[0]); - filemode = Z_LVAL_PP(info->argv[0]); - } - - if (db_open(info->path, type, gmode, filemode, NULL, NULL, &dbp)) { - return FAILURE; - } - - info->dbf = pemalloc(sizeof(dba_db2_data), info->flags&DBA_PERSISTENT); - memset(info->dbf, 0, sizeof(dba_db2_data)); - ((dba_db2_data *) info->dbf)->dbp = dbp; - return SUCCESS; -} - -DBA_CLOSE_FUNC(db2) -{ - DB2_DATA; - - if (dba->cursor) - dba->cursor->c_close(dba->cursor); - dba->dbp->close(dba->dbp, 0); - pefree(dba, info->flags&DBA_PERSISTENT); -} - -DBA_FETCH_FUNC(db2) -{ - DBT gval = {0}; - DB2_DATA; - DB2_GKEY; - - if (dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) { - return NULL; - } - - if (newlen) *newlen = gval.size; - return estrndup(gval.data, gval.size); -} - -DBA_UPDATE_FUNC(db2) -{ - DBT gval = {0}; - DB2_DATA; - DB2_GKEY; - - gval.data = (char *) val; - gval.size = vallen; - - if (dba->dbp->put(dba->dbp, NULL, &gkey, &gval, - mode == 1 ? DB_NOOVERWRITE : 0)) { - return FAILURE; - } - return SUCCESS; -} - -DBA_EXISTS_FUNC(db2) -{ - DBT gval = {0}; - DB2_DATA; - DB2_GKEY; - - if (dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) { - return FAILURE; - } - return SUCCESS; -} - -DBA_DELETE_FUNC(db2) -{ - DB2_DATA; - DB2_GKEY; - - return dba->dbp->del(dba->dbp, NULL, &gkey, 0) ? FAILURE : SUCCESS; -} - -DBA_FIRSTKEY_FUNC(db2) -{ - DB2_DATA; - - if (dba->cursor) { - dba->cursor->c_close(dba->cursor); - dba->cursor = NULL; - } - -#if (DB_VERSION_MAJOR > 2) || (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR > 6) || (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 6 && DB_VERSION_PATCH >= 4) - if (dba->dbp->cursor(dba->dbp, NULL, &dba->cursor, 0)) { -#else - if (dba->dbp->cursor(dba->dbp, NULL, &dba->cursor)) { -#endif - return NULL; - } - - /* we should introduce something like PARAM_PASSTHRU... */ - return dba_nextkey_db2(info, newlen TSRMLS_CC); -} - -DBA_NEXTKEY_FUNC(db2) -{ - DB2_DATA; - DBT gkey = {0}, gval = {0}; - - if (dba->cursor->c_get(dba->cursor, &gkey, &gval, DB_NEXT) - || !gkey.data) - return NULL; - - if (newlen) *newlen = gkey.size; - return estrndup(gkey.data, gkey.size); -} - -DBA_OPTIMIZE_FUNC(db2) -{ - return SUCCESS; -} - -DBA_SYNC_FUNC(db2) -{ - DB2_DATA; - - return dba->dbp->sync(dba->dbp, 0) ? FAILURE : SUCCESS; -} - -DBA_INFO_FUNC(db2) -{ - return estrdup(DB_VERSION_STRING); -} - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/dba/dba_db3.c b/ext/dba/dba_db3.c deleted file mode 100644 index 830a844bbd8dd..0000000000000 --- a/ext/dba/dba_db3.c +++ /dev/null @@ -1,238 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Sascha Schumann | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if DBA_DB3 -#include "php_db3.h" -#include - -#include -#ifdef DB3_INCLUDE_FILE -#include DB3_INCLUDE_FILE -#else -#include -#endif - -static void php_dba_db3_errcall_fcn(const char *errpfx, char *msg) -{ - TSRMLS_FETCH(); - - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "%s%s", errpfx?errpfx:"", msg); -} - -#define DB3_DATA dba_db3_data *dba = info->dbf -#define DB3_GKEY \ - DBT gkey; \ - memset(&gkey, 0, sizeof(gkey)); \ - gkey.data = (char *) key; gkey.size = keylen - -typedef struct { - DB *dbp; - DBC *cursor; -} dba_db3_data; - -DBA_OPEN_FUNC(db3) -{ - DB *dbp = NULL; - DBTYPE type; - int gmode = 0, err; - int filemode = 0644; - struct stat check_stat; - int s = VCWD_STAT(info->path, &check_stat); - - if (!s && !check_stat.st_size) { - info->mode = DBA_TRUNC; /* force truncate */ - } - - type = info->mode == DBA_READER ? DB_UNKNOWN : - info->mode == DBA_TRUNC ? DB_BTREE : - s ? DB_BTREE : DB_UNKNOWN; - - gmode = info->mode == DBA_READER ? DB_RDONLY : - (info->mode == DBA_CREAT && s) ? DB_CREATE : - (info->mode == DBA_CREAT && !s) ? 0 : - info->mode == DBA_WRITER ? 0 : - info->mode == DBA_TRUNC ? DB_CREATE | DB_TRUNCATE : -1; - - if (gmode == -1) { - return FAILURE; /* not possible */ - } - - if (info->argc > 0) { - convert_to_long_ex(info->argv[0]); - filemode = Z_LVAL_PP(info->argv[0]); - } - -#ifdef DB_FCNTL_LOCKING - gmode |= DB_FCNTL_LOCKING; -#endif - - if ((err=db_create(&dbp, NULL, 0)) == 0) { - dbp->set_errcall(dbp, php_dba_db3_errcall_fcn); - if ((err=dbp->open(dbp, info->path, NULL, type, gmode, filemode)) == 0) { - dba_db3_data *data; - - data = pemalloc(sizeof(*data), info->flags&DBA_PERSISTENT); - data->dbp = dbp; - data->cursor = NULL; - info->dbf = data; - - return SUCCESS; - } else { - dbp->close(dbp, 0); - *error = db_strerror(err); - } - } else { - *error = db_strerror(err); - } - - return FAILURE; -} - -DBA_CLOSE_FUNC(db3) -{ - DB3_DATA; - - if (dba->cursor) dba->cursor->c_close(dba->cursor); - dba->dbp->close(dba->dbp, 0); - pefree(dba, info->flags&DBA_PERSISTENT); -} - -DBA_FETCH_FUNC(db3) -{ - DBT gval; - char *new = NULL; - DB3_DATA; - DB3_GKEY; - - memset(&gval, 0, sizeof(gval)); - if (!dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) { - if (newlen) *newlen = gval.size; - new = estrndup(gval.data, gval.size); - } - return new; -} - -DBA_UPDATE_FUNC(db3) -{ - DBT gval; - DB3_DATA; - DB3_GKEY; - - memset(&gval, 0, sizeof(gval)); - gval.data = (char *) val; - gval.size = vallen; - - if (!dba->dbp->put(dba->dbp, NULL, &gkey, &gval, - mode == 1 ? DB_NOOVERWRITE : 0)) { - return SUCCESS; - } - return FAILURE; -} - -DBA_EXISTS_FUNC(db3) -{ - DBT gval; - DB3_DATA; - DB3_GKEY; - - memset(&gval, 0, sizeof(gval)); - if (!dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) { - return SUCCESS; - } - return FAILURE; -} - -DBA_DELETE_FUNC(db3) -{ - DB3_DATA; - DB3_GKEY; - - return dba->dbp->del(dba->dbp, NULL, &gkey, 0) ? FAILURE : SUCCESS; -} - -DBA_FIRSTKEY_FUNC(db3) -{ - DB3_DATA; - - if (dba->cursor) { - dba->cursor->c_close(dba->cursor); - } - - dba->cursor = NULL; - if (dba->dbp->cursor(dba->dbp, NULL, &dba->cursor, 0) != 0) { - return NULL; - } - - /* we should introduce something like PARAM_PASSTHRU... */ - return dba_nextkey_db3(info, newlen TSRMLS_CC); -} - -DBA_NEXTKEY_FUNC(db3) -{ - DB3_DATA; - DBT gkey, gval; - char *nkey = NULL; - - memset(&gkey, 0, sizeof(gkey)); - memset(&gval, 0, sizeof(gval)); - - if (dba->cursor->c_get(dba->cursor, &gkey, &gval, DB_NEXT) == 0) { - if (gkey.data) { - nkey = estrndup(gkey.data, gkey.size); - if (newlen) *newlen = gkey.size; - } - } - - return nkey; -} - -DBA_OPTIMIZE_FUNC(db3) -{ - return SUCCESS; -} - -DBA_SYNC_FUNC(db3) -{ - DB3_DATA; - - return dba->dbp->sync(dba->dbp, 0) ? FAILURE : SUCCESS; -} - -DBA_INFO_FUNC(db3) -{ - return estrdup(DB_VERSION_STRING); -} - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/dba/dba_db4.c b/ext/dba/dba_db4.c deleted file mode 100644 index 61c964091f260..0000000000000 --- a/ext/dba/dba_db4.c +++ /dev/null @@ -1,267 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Marcus Boerger | - | Sascha Schumann | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if DBA_DB4 -#include "php_db4.h" -#include - -#include -#ifdef DB4_INCLUDE_FILE -#include DB4_INCLUDE_FILE -#else -#include -#endif - -static void php_dba_db4_errcall_fcn(const char *errpfx, char *msg) -{ - TSRMLS_FETCH(); - - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "%s%s", errpfx?errpfx:"", msg); -} - -#define DB4_DATA dba_db4_data *dba = info->dbf -#define DB4_GKEY \ - DBT gkey; \ - memset(&gkey, 0, sizeof(gkey)); \ - gkey.data = (char *) key; gkey.size = keylen - -typedef struct { - DB *dbp; - DBC *cursor; -} dba_db4_data; - -DBA_OPEN_FUNC(db4) -{ - DB *dbp = NULL; - DBTYPE type; - int gmode = 0, err; - int filemode = 0644; - struct stat check_stat; - int s = VCWD_STAT(info->path, &check_stat); - - if (!s && !check_stat.st_size) { - info->mode = DBA_TRUNC; /* force truncate */ - } - - type = info->mode == DBA_READER ? DB_UNKNOWN : - info->mode == DBA_TRUNC ? DB_BTREE : - s ? DB_BTREE : DB_UNKNOWN; - - gmode = info->mode == DBA_READER ? DB_RDONLY : - (info->mode == DBA_CREAT && s) ? DB_CREATE : - (info->mode == DBA_CREAT && !s) ? 0 : - info->mode == DBA_WRITER ? 0 : - info->mode == DBA_TRUNC ? DB_CREATE | DB_TRUNCATE : -1; - - if (gmode == -1) { - return FAILURE; /* not possible */ - } - - gmode |= DB_INIT_LOCK; - if (info->flags & DBA_PERSISTENT) { - gmode |= DB_THREAD; - } - - if (info->argc > 0) { - convert_to_long_ex(info->argv[0]); - filemode = Z_LVAL_PP(info->argv[0]); - } - -#ifdef DB_FCNTL_LOCKING - gmode |= DB_FCNTL_LOCKING; -#endif - - if ((err=db_create(&dbp, NULL, 0)) == 0) { - dbp->set_errcall(dbp, php_dba_db4_errcall_fcn); - if ( -#if (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 1) - (err=dbp->open(dbp, 0, info->path, NULL, type, gmode, filemode)) == 0) { -#else - (err=dbp->open(dbp, info->path, NULL, type, gmode, filemode)) == 0) { -#endif - dba_db4_data *data; - - data = pemalloc(sizeof(*data), info->flags&DBA_PERSISTENT); - data->dbp = dbp; - data->cursor = NULL; - info->dbf = data; - - return SUCCESS; - } else { - dbp->close(dbp, 0); - *error = db_strerror(err); - } - } else { - *error = db_strerror(err); - } - - return FAILURE; -} - -DBA_CLOSE_FUNC(db4) -{ - DB4_DATA; - - if (dba->cursor) dba->cursor->c_close(dba->cursor); - dba->dbp->close(dba->dbp, 0); - pefree(dba, info->flags&DBA_PERSISTENT); -} - -DBA_FETCH_FUNC(db4) -{ - DBT gval; - char *new = NULL; - DB4_DATA; - DB4_GKEY; - - memset(&gval, 0, sizeof(gval)); - if (info->flags & DBA_PERSISTENT) { - gval.flags |= DB_DBT_MALLOC; - } - if (!dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) { - if (newlen) *newlen = gval.size; - new = estrndup(gval.data, gval.size); - if (info->flags & DBA_PERSISTENT) { - free(gval.data); - } - } - return new; -} - -DBA_UPDATE_FUNC(db4) -{ - DBT gval; - DB4_DATA; - DB4_GKEY; - - memset(&gval, 0, sizeof(gval)); - gval.data = (char *) val; - gval.size = vallen; - - if (!dba->dbp->put(dba->dbp, NULL, &gkey, &gval, - mode == 1 ? DB_NOOVERWRITE : 0)) { - return SUCCESS; - } - return FAILURE; -} - -DBA_EXISTS_FUNC(db4) -{ - DBT gval; - DB4_DATA; - DB4_GKEY; - - memset(&gval, 0, sizeof(gval)); - if (!dba->dbp->get(dba->dbp, NULL, &gkey, &gval, 0)) { - return SUCCESS; - } - return FAILURE; -} - -DBA_DELETE_FUNC(db4) -{ - DB4_DATA; - DB4_GKEY; - - return dba->dbp->del(dba->dbp, NULL, &gkey, 0) ? FAILURE : SUCCESS; -} - -DBA_FIRSTKEY_FUNC(db4) -{ - DB4_DATA; - - if (dba->cursor) { - dba->cursor->c_close(dba->cursor); - } - - dba->cursor = NULL; - if (dba->dbp->cursor(dba->dbp, NULL, &dba->cursor, 0) != 0) { - return NULL; - } - - /* we should introduce something like PARAM_PASSTHRU... */ - return dba_nextkey_db4(info, newlen TSRMLS_CC); -} - -DBA_NEXTKEY_FUNC(db4) -{ - DB4_DATA; - DBT gkey, gval; - char *nkey = NULL; - - memset(&gkey, 0, sizeof(gkey)); - memset(&gval, 0, sizeof(gval)); - - if (info->flags & DBA_PERSISTENT) { - gkey.flags |= DB_DBT_MALLOC; - gval.flags |= DB_DBT_MALLOC; - } - if (dba->cursor->c_get(dba->cursor, &gkey, &gval, DB_NEXT) == 0) { - if (gkey.data) { - nkey = estrndup(gkey.data, gkey.size); - if (newlen) *newlen = gkey.size; - } - if (info->flags & DBA_PERSISTENT) { - if (gkey.data) { - free(gkey.data); - } - if (gval.data) { - free(gval.data); - } - } - } - - return nkey; -} - -DBA_OPTIMIZE_FUNC(db4) -{ - return SUCCESS; -} - -DBA_SYNC_FUNC(db4) -{ - DB4_DATA; - - return dba->dbp->sync(dba->dbp, 0) ? FAILURE : SUCCESS; -} - -DBA_INFO_FUNC(db4) -{ - return estrdup(DB_VERSION_STRING); -} - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/dba/dba_dbm.c b/ext/dba/dba_dbm.c deleted file mode 100644 index 241d4e74bc39f..0000000000000 --- a/ext/dba/dba_dbm.c +++ /dev/null @@ -1,213 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Sascha Schumann | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if DBA_DBM -#include "php_dbm.h" - -#ifdef DBM_INCLUDE_FILE -#include DBM_INCLUDE_FILE -#endif -#if DBA_GDBM -#include "php_gdbm.h" -#endif - -#include -#include -#include -#include - -#define DBM_DATA dba_dbm_data *dba = info->dbf -#define DBM_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen - -#define TRUNC_IT(extension, mode) \ - snprintf(buf, MAXPATHLEN, "%s" extension, info->path); \ - buf[MAXPATHLEN-1] = '\0'; \ - if((fd = VCWD_OPEN_MODE(buf, O_CREAT | mode | O_WRONLY, filemode)) == -1) \ - return FAILURE; \ - close(fd); - - -typedef struct { - datum nextkey; -} dba_dbm_data; - -DBA_OPEN_FUNC(dbm) -{ - int fd; - int filemode = 0644; - - if(info->argc > 0) { - convert_to_long_ex(info->argv[0]); - filemode = Z_LVAL_PP(info->argv[0]); - } - - if(info->mode == DBA_TRUNC) { - char buf[MAXPATHLEN]; - - /* dbm/ndbm original */ - TRUNC_IT(".pag", O_TRUNC); - TRUNC_IT(".dir", O_TRUNC); - } - - if(info->mode == DBA_CREAT) { - char buf[MAXPATHLEN]; - - TRUNC_IT(".pag", 0); - TRUNC_IT(".dir", 0); - } - - if(dbminit((char *) info->path) == -1) { - return FAILURE; - } - - info->dbf = pemalloc(sizeof(dba_dbm_data), info->flags&DBA_PERSISTENT); - memset(info->dbf, 0, sizeof(dba_dbm_data)); - return SUCCESS; -} - -DBA_CLOSE_FUNC(dbm) -{ - pefree(info->dbf, info->flags&DBA_PERSISTENT); - dbmclose(); -} - -DBA_FETCH_FUNC(dbm) -{ - datum gval; - char *new = NULL; - - DBM_GKEY; - gval = fetch(gkey); - if(gval.dptr) { - if(newlen) *newlen = gval.dsize; - new = estrndup(gval.dptr, gval.dsize); - } - return new; -} - -DBA_UPDATE_FUNC(dbm) -{ - datum gval; - - DBM_GKEY; - - if (mode == 1) { /* insert */ - gval = fetch(gkey); - if(gval.dptr) { - return FAILURE; - } - } - - gval.dptr = (char *) val; - gval.dsize = vallen; - - return (store(gkey, gval) == -1 ? FAILURE : SUCCESS); -} - -DBA_EXISTS_FUNC(dbm) -{ - datum gval; - DBM_GKEY; - - gval = fetch(gkey); - if(gval.dptr) { - return SUCCESS; - } - return FAILURE; -} - -DBA_DELETE_FUNC(dbm) -{ - DBM_GKEY; - return(delete(gkey) == -1 ? FAILURE : SUCCESS); -} - -DBA_FIRSTKEY_FUNC(dbm) -{ - DBM_DATA; - datum gkey; - char *key = NULL; - - gkey = firstkey(); - if(gkey.dptr) { - if(newlen) *newlen = gkey.dsize; - key = estrndup(gkey.dptr, gkey.dsize); - dba->nextkey = gkey; - } else - dba->nextkey.dptr = NULL; - return key; -} - -DBA_NEXTKEY_FUNC(dbm) -{ - DBM_DATA; - datum gkey; - char *nkey = NULL; - - if(!dba->nextkey.dptr) return NULL; - - gkey = nextkey(dba->nextkey); - if(gkey.dptr) { - if(newlen) *newlen = gkey.dsize; - nkey = estrndup(gkey.dptr, gkey.dsize); - dba->nextkey = gkey; - } else - dba->nextkey.dptr = NULL; - return nkey; -} - -DBA_OPTIMIZE_FUNC(dbm) -{ - /* dummy */ - return SUCCESS; -} - -DBA_SYNC_FUNC(dbm) -{ - return SUCCESS; -} - -DBA_INFO_FUNC(dbm) -{ -#if DBA_GDBM - if (!strcmp(DBM_VERSION, "GDBM")) - { - return dba_info_gdbm(hnd, info TSRMLS_CC); - } -#endif - return estrdup(DBM_VERSION); -} - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/dba/dba_flatfile.c b/ext/dba/dba_flatfile.c deleted file mode 100644 index cf833cbd75407..0000000000000 --- a/ext/dba/dba_flatfile.c +++ /dev/null @@ -1,188 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Marcus Boerger | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if DBA_FLATFILE -#include "php_flatfile.h" - -#include "libflatfile/flatfile.h" - -#ifdef HAVE_UNISTD_H -#include -#endif -#include -#include -#include - -#define FLATFILE_DATA flatfile *dba = info->dbf -#define FLATFILE_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen - -DBA_OPEN_FUNC(flatfile) -{ - info->dbf = pemalloc(sizeof(flatfile), info->flags&DBA_PERSISTENT); - memset(info->dbf, 0, sizeof(flatfile)); - - ((flatfile*)info->dbf)->fp = info->fp; - - return SUCCESS; -} - -DBA_CLOSE_FUNC(flatfile) -{ - FLATFILE_DATA; - - if (dba->nextkey.dptr) { - efree(dba->nextkey.dptr); - } - pefree(dba, info->flags&DBA_PERSISTENT); -} - -DBA_FETCH_FUNC(flatfile) -{ - datum gval; - char *new = NULL; - - FLATFILE_DATA; - FLATFILE_GKEY; - - gval = flatfile_fetch(dba, gkey TSRMLS_CC); - if (gval.dptr) { - if (newlen) { - *newlen = gval.dsize; - } - new = estrndup(gval.dptr, gval.dsize); - efree(gval.dptr); - } - return new; -} - -DBA_UPDATE_FUNC(flatfile) -{ - datum gval; - - FLATFILE_DATA; - FLATFILE_GKEY; - gval.dptr = (char *) val; - gval.dsize = vallen; - - switch(flatfile_store(dba, gkey, gval, mode==1 ? FLATFILE_INSERT : FLATFILE_REPLACE TSRMLS_CC)) { - case -1: - php_error_docref1(NULL TSRMLS_CC, key, E_WARNING, "Operation not possible"); - return FAILURE; - default: - case 0: - return SUCCESS; - case 1: - php_error_docref1(NULL TSRMLS_CC, key, E_WARNING, "Key already exists"); - return SUCCESS; - } -} - -DBA_EXISTS_FUNC(flatfile) -{ - datum gval; - FLATFILE_DATA; - FLATFILE_GKEY; - - gval = flatfile_fetch(dba, gkey TSRMLS_CC); - if (gval.dptr) { - efree(gval.dptr); - return SUCCESS; - } - return FAILURE; -} - -DBA_DELETE_FUNC(flatfile) -{ - FLATFILE_DATA; - FLATFILE_GKEY; - return(flatfile_delete(dba, gkey TSRMLS_CC) == -1 ? FAILURE : SUCCESS); -} - -DBA_FIRSTKEY_FUNC(flatfile) -{ - FLATFILE_DATA; - - if (dba->nextkey.dptr) { - efree(dba->nextkey.dptr); - } - dba->nextkey = flatfile_firstkey(dba TSRMLS_CC); - if (dba->nextkey.dptr) { - if (newlen) { - *newlen = dba->nextkey.dsize; - } - return estrndup(dba->nextkey.dptr, dba->nextkey.dsize); - } - return NULL; -} - -DBA_NEXTKEY_FUNC(flatfile) -{ - FLATFILE_DATA; - - if (!dba->nextkey.dptr) { - return NULL; - } - - if (dba->nextkey.dptr) { - efree(dba->nextkey.dptr); - } - dba->nextkey = flatfile_nextkey(dba TSRMLS_CC); - if (dba->nextkey.dptr) { - if (newlen) { - *newlen = dba->nextkey.dsize; - } - return estrndup(dba->nextkey.dptr, dba->nextkey.dsize); - } - return NULL; -} - -DBA_OPTIMIZE_FUNC(flatfile) -{ - /* dummy */ - return SUCCESS; -} - -DBA_SYNC_FUNC(flatfile) -{ - /* dummy */ - return SUCCESS; -} - -DBA_INFO_FUNC(flatfile) -{ - return estrdup(flatfile_version()); -} - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/dba/dba_gdbm.c b/ext/dba/dba_gdbm.c deleted file mode 100644 index 7d6398a2fef80..0000000000000 --- a/ext/dba/dba_gdbm.c +++ /dev/null @@ -1,200 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Sascha Schumann | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if DBA_GDBM -#include "php_gdbm.h" - -#ifdef GDBM_INCLUDE_FILE -#include GDBM_INCLUDE_FILE -#endif - -#define GDBM_DATA dba_gdbm_data *dba = info->dbf -#define GDBM_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen - -typedef struct { - GDBM_FILE dbf; - datum nextkey; -} dba_gdbm_data; - -DBA_OPEN_FUNC(gdbm) -{ - GDBM_FILE dbf; - int gmode = 0; - int filemode = 0644; - - gmode = info->mode == DBA_READER ? GDBM_READER : - info->mode == DBA_WRITER ? GDBM_WRITER : - info->mode == DBA_CREAT ? GDBM_WRCREAT : - info->mode == DBA_TRUNC ? GDBM_NEWDB : -1; - - if(gmode == -1) - return FAILURE; /* not possible */ - - if(info->argc > 0) { - convert_to_long_ex(info->argv[0]); - filemode = Z_LVAL_PP(info->argv[0]); - } - - dbf = gdbm_open(info->path, 0, gmode, filemode, NULL); - - if(dbf) { - info->dbf = pemalloc(sizeof(dba_gdbm_data), info->flags&DBA_PERSISTENT); - memset(info->dbf, 0, sizeof(dba_gdbm_data)); - ((dba_gdbm_data *) info->dbf)->dbf = dbf; - return SUCCESS; - } - *error = gdbm_strerror(gdbm_errno); - return FAILURE; -} - -DBA_CLOSE_FUNC(gdbm) -{ - GDBM_DATA; - - if(dba->nextkey.dptr) free(dba->nextkey.dptr); - gdbm_close(dba->dbf); - pefree(dba, info->flags&DBA_PERSISTENT); -} - -DBA_FETCH_FUNC(gdbm) -{ - GDBM_DATA; - datum gval; - char *new = NULL; - - GDBM_GKEY; - gval = gdbm_fetch(dba->dbf, gkey); - if(gval.dptr) { - if(newlen) *newlen = gval.dsize; - new = estrndup(gval.dptr, gval.dsize); - free(gval.dptr); - } - return new; -} - -DBA_UPDATE_FUNC(gdbm) -{ - datum gval; - GDBM_DATA; - - GDBM_GKEY; - gval.dptr = (char *) val; - gval.dsize = vallen; - - if(gdbm_store(dba->dbf, gkey, gval, - mode == 1 ? GDBM_INSERT : GDBM_REPLACE) == 0) - return SUCCESS; - php_error_docref2(NULL TSRMLS_CC, key, val, E_WARNING, "%s", gdbm_strerror(gdbm_errno)); - return FAILURE; -} - -DBA_EXISTS_FUNC(gdbm) -{ - GDBM_DATA; - GDBM_GKEY; - - return gdbm_exists(dba->dbf, gkey) ? SUCCESS : FAILURE; -} - -DBA_DELETE_FUNC(gdbm) -{ - GDBM_DATA; - GDBM_GKEY; - - return gdbm_delete(dba->dbf, gkey) == -1 ? FAILURE : SUCCESS; -} - -DBA_FIRSTKEY_FUNC(gdbm) -{ - GDBM_DATA; - datum gkey; - char *key = NULL; - - if(dba->nextkey.dptr) { - free(dba->nextkey.dptr); - } - - gkey = gdbm_firstkey(dba->dbf); - if(gkey.dptr) { - key = estrndup(gkey.dptr, gkey.dsize); - if(newlen) *newlen = gkey.dsize; - dba->nextkey = gkey; - } else { - dba->nextkey.dptr = NULL; - } - return key; -} - -DBA_NEXTKEY_FUNC(gdbm) -{ - GDBM_DATA; - char *nkey = NULL; - datum gkey; - - if(!dba->nextkey.dptr) return NULL; - - gkey = gdbm_nextkey(dba->dbf, dba->nextkey); - free(dba->nextkey.dptr); - if(gkey.dptr) { - nkey = estrndup(gkey.dptr, gkey.dsize); - if(newlen) *newlen = gkey.dsize; - dba->nextkey = gkey; - } else { - dba->nextkey.dptr = NULL; - } - return nkey; -} - -DBA_OPTIMIZE_FUNC(gdbm) -{ - GDBM_DATA; - gdbm_reorganize(dba->dbf); - return SUCCESS; -} - -DBA_SYNC_FUNC(gdbm) -{ - GDBM_DATA; - - gdbm_sync(dba->dbf); - return SUCCESS; -} - -DBA_INFO_FUNC(gdbm) -{ - return estrdup(gdbm_version); -} - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/dba/dba_inifile.c b/ext/dba/dba_inifile.c deleted file mode 100644 index e60597631eaa0..0000000000000 --- a/ext/dba/dba_inifile.c +++ /dev/null @@ -1,194 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Marcus Boerger | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if DBA_INIFILE -#include "php_inifile.h" - -#include "libinifile/inifile.h" - -#ifdef HAVE_UNISTD_H -#include -#endif -#include -#include -#include - -#define INIFILE_DATA \ - inifile *dba = info->dbf - -#define INIFILE_GKEY \ - key_type ini_key; \ - if (!key) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "No key specified"); \ - return 0; \ - } \ - ini_key = inifile_key_split((char*)key) /* keylen not needed here */ - -#define INIFILE_DONE \ - inifile_key_free(&ini_key) - -DBA_OPEN_FUNC(inifile) -{ - info->dbf = inifile_alloc(info->fp, info->mode == DBA_READER, info->flags&DBA_PERSISTENT TSRMLS_CC); - - return info->dbf ? SUCCESS : FAILURE; -} - -DBA_CLOSE_FUNC(inifile) -{ - INIFILE_DATA; - - inifile_free(dba, info->flags&DBA_PERSISTENT); -} - -DBA_FETCH_FUNC(inifile) -{ - val_type ini_val; - - INIFILE_DATA; - INIFILE_GKEY; - - ini_val = inifile_fetch(dba, &ini_key, skip TSRMLS_CC); - *newlen = ini_val.value ? strlen(ini_val.value) : 0; - INIFILE_DONE; - return ini_val.value; -} - -DBA_UPDATE_FUNC(inifile) -{ - val_type ini_val; - int res; - - INIFILE_DATA; - INIFILE_GKEY; - - ini_val.value = val; - - if (mode == 1) { - res = inifile_append(dba, &ini_key, &ini_val TSRMLS_CC); - } else { - res = inifile_replace(dba, &ini_key, &ini_val TSRMLS_CC); - } - INIFILE_DONE; - switch(res) { - case -1: - php_error_docref1(NULL TSRMLS_CC, key, E_WARNING, "Operation not possible"); - return FAILURE; - default: - case 0: - return SUCCESS; - case 1: - php_error_docref1(NULL TSRMLS_CC, key, E_WARNING, "Key already exists"); - return SUCCESS; - } -} - -DBA_EXISTS_FUNC(inifile) -{ - val_type ini_val; - - INIFILE_DATA; - INIFILE_GKEY; - - ini_val = inifile_fetch(dba, &ini_key, 0 TSRMLS_CC); - INIFILE_DONE; - if (ini_val.value) { - inifile_val_free(&ini_val); - return SUCCESS; - } - return FAILURE; -} - -DBA_DELETE_FUNC(inifile) -{ - int res; - - INIFILE_DATA; - INIFILE_GKEY; - - res = inifile_delete(dba, &ini_key TSRMLS_CC); - - INIFILE_DONE; - return (res == -1 ? FAILURE : SUCCESS); -} - -DBA_FIRSTKEY_FUNC(inifile) -{ - INIFILE_DATA; - - if (inifile_firstkey(dba TSRMLS_CC)) { - char *result = inifile_key_string(&dba->curr.key); - *newlen = strlen(result); - return result; - } else { - return NULL; - } -} - -DBA_NEXTKEY_FUNC(inifile) -{ - INIFILE_DATA; - - if (!dba->curr.key.group && !dba->curr.key.name) { - return NULL; - } - - if (inifile_nextkey(dba TSRMLS_CC)) { - char *result = inifile_key_string(&dba->curr.key); - *newlen = strlen(result); - return result; - } else { - return NULL; - } -} - -DBA_OPTIMIZE_FUNC(inifile) -{ - /* dummy */ - return SUCCESS; -} - -DBA_SYNC_FUNC(inifile) -{ - /* dummy */ - return SUCCESS; -} - -DBA_INFO_FUNC(inifile) -{ - return estrdup(inifile_version()); -} - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/dba/dba_ndbm.c b/ext/dba/dba_ndbm.c deleted file mode 100644 index de67af4353ce2..0000000000000 --- a/ext/dba/dba_ndbm.c +++ /dev/null @@ -1,171 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Sascha Schumann | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if DBA_NDBM -#include "php_ndbm.h" - -#include -#ifdef NDBM_INCLUDE_FILE -#include NDBM_INCLUDE_FILE -#endif - -#define NDBM_GKEY datum gkey; gkey.dptr = (char *) key; gkey.dsize = keylen - -DBA_OPEN_FUNC(ndbm) -{ - DBM *dbf; - int gmode = 0; - int filemode = 0644; - dba_info *pinfo = (dba_info *) info; - - switch(info->mode) { - case DBA_READER: - gmode = O_RDONLY; - break; - case DBA_WRITER: - gmode = O_RDWR; - break; - case DBA_CREAT: - gmode = O_RDWR | O_CREAT; - break; - case DBA_TRUNC: - gmode = O_RDWR | O_CREAT | O_TRUNC; - break; - default: - return FAILURE; /* not possible */ - } - - if(info->argc > 0) { - convert_to_long_ex(info->argv[0]); - filemode = Z_LVAL_PP(info->argv[0]); - } - - dbf = dbm_open(info->path, gmode, filemode); - - pinfo->dbf = dbf; - return SUCCESS; -} - -DBA_CLOSE_FUNC(ndbm) -{ - dbm_close(info->dbf); -} - -DBA_FETCH_FUNC(ndbm) -{ - datum gval; - char *new = NULL; - - NDBM_GKEY; - gval = dbm_fetch(info->dbf, gkey); - if(gval.dptr) { - if(newlen) *newlen = gval.dsize; - new = estrndup(gval.dptr, gval.dsize); - } - return new; -} - -DBA_UPDATE_FUNC(ndbm) -{ - datum gval; - - NDBM_GKEY; - gval.dptr = (char *) val; - gval.dsize = vallen; - - if(!dbm_store(info->dbf, gkey, gval, mode == 1 ? DBM_INSERT : DBM_REPLACE)) - return SUCCESS; - return FAILURE; -} - -DBA_EXISTS_FUNC(ndbm) -{ - datum gval; - NDBM_GKEY; - gval = dbm_fetch(info->dbf, gkey); - if(gval.dptr) { - return SUCCESS; - } - return FAILURE; -} - -DBA_DELETE_FUNC(ndbm) -{ - NDBM_GKEY; - return(dbm_delete(info->dbf, gkey) == -1 ? FAILURE : SUCCESS); -} - -DBA_FIRSTKEY_FUNC(ndbm) -{ - datum gkey; - char *key = NULL; - - gkey = dbm_firstkey(info->dbf); - if(gkey.dptr) { - if(newlen) *newlen = gkey.dsize; - key = estrndup(gkey.dptr, gkey.dsize); - } - return key; -} - -DBA_NEXTKEY_FUNC(ndbm) -{ - datum gkey; - char *nkey = NULL; - - gkey = dbm_nextkey(info->dbf); - if(gkey.dptr) { - if(newlen) *newlen = gkey.dsize; - nkey = estrndup(gkey.dptr, gkey.dsize); - } - return nkey; -} - -DBA_OPTIMIZE_FUNC(ndbm) -{ - return SUCCESS; -} - -DBA_SYNC_FUNC(ndbm) -{ - return SUCCESS; -} - -DBA_INFO_FUNC(ndbm) -{ - return estrdup("NDBM"); -} - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/dba/dba_qdbm.c b/ext/dba/dba_qdbm.c deleted file mode 100755 index 55cbd9ef745bb..0000000000000 --- a/ext/dba/dba_qdbm.c +++ /dev/null @@ -1,194 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Marcin Gibula | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if DBA_QDBM -#include "php_qdbm.h" - -#ifdef QDBM_INCLUDE_FILE -#include QDBM_INCLUDE_FILE -#endif - -#define QDBM_DATA dba_qdbm_data *dba = info->dbf - -typedef struct { - DEPOT *dbf; -} dba_qdbm_data; - -DBA_OPEN_FUNC(qdbm) -{ - DEPOT *dbf; - - switch(info->mode) { - case DBA_READER: - dbf = dpopen(info->path, DP_OREADER, 0); - break; - case DBA_WRITER: - dbf = dpopen(info->path, DP_OWRITER, 0); - break; - case DBA_CREAT: - dbf = dpopen(info->path, DP_OWRITER | DP_OCREAT, 0); - break; - case DBA_TRUNC: - dbf = dpopen(info->path, DP_OWRITER | DP_OCREAT | DP_OTRUNC, 0); - break; - default: - return FAILURE; - } - - if (dbf) { - info->dbf = pemalloc(sizeof(dba_qdbm_data), info->flags & DBA_PERSISTENT); - memset(info->dbf, 0, sizeof(dba_qdbm_data)); - ((dba_qdbm_data *) info->dbf)->dbf = dbf; - return SUCCESS; - } - - *error = (char *) dperrmsg(dpecode); - return FAILURE; -} - -DBA_CLOSE_FUNC(qdbm) -{ - QDBM_DATA; - - dpclose(dba->dbf); - pefree(dba, info->flags & DBA_PERSISTENT); -} - -DBA_FETCH_FUNC(qdbm) -{ - QDBM_DATA; - char *value, *new = NULL; - int value_size; - - value = dpget(dba->dbf, key, keylen, 0, -1, &value_size); - if (value) { - if (newlen) *newlen = value_size; - new = estrndup(value, value_size); - free(value); - } - - return new; -} - -DBA_UPDATE_FUNC(qdbm) -{ - QDBM_DATA; - int result; - - result = dpput(dba->dbf, key, keylen, val, vallen, mode == 1 ? DP_DKEEP : DP_DOVER); - if (result) - return SUCCESS; - - php_error_docref2(NULL TSRMLS_CC, key, val, E_WARNING, "%s", dperrmsg(dpecode)); - return FAILURE; -} - -DBA_EXISTS_FUNC(qdbm) -{ - QDBM_DATA; - char *value; - - value = dpget(dba->dbf, key, keylen, 0, -1, NULL); - if (value) { - free(value); - return SUCCESS; - } - - return FAILURE; -} - -DBA_DELETE_FUNC(qdbm) -{ - QDBM_DATA; - - return dpout(dba->dbf, key, keylen) ? SUCCESS : FAILURE; -} - -DBA_FIRSTKEY_FUNC(qdbm) -{ - QDBM_DATA; - int value_size; - char *value, *new = NULL; - - dpiterinit(dba->dbf); - - value = dpiternext(dba->dbf, &value_size); - if (value) { - if (newlen) *newlen = value_size; - new = estrndup(value, value_size); - free(value); - } - - return new; -} - -DBA_NEXTKEY_FUNC(qdbm) -{ - QDBM_DATA; - int value_size; - char *value, *new = NULL; - - value = dpiternext(dba->dbf, &value_size); - if (value) { - if (newlen) *newlen = value_size; - new = estrndup(value, value_size); - free(value); - } - - return new; -} - -DBA_OPTIMIZE_FUNC(qdbm) -{ - QDBM_DATA; - - dpoptimize(dba->dbf, 0); - return SUCCESS; -} - -DBA_SYNC_FUNC(qdbm) -{ - QDBM_DATA; - - dpsync(dba->dbf); - return SUCCESS; -} - -DBA_INFO_FUNC(qdbm) -{ - return estrdup(dpversion); -} - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/dba/install_cdb.sh b/ext/dba/install_cdb.sh deleted file mode 100755 index ce5f3cc856283..0000000000000 --- a/ext/dba/install_cdb.sh +++ /dev/null @@ -1,53 +0,0 @@ -#! /bin/sh - -# You can use this script if you want to use an external cdb lib. If you -# compile php using --with-cdb the internal functions will be used and no -# external library is used so that this script is not necessary. -# -# cdb-0.75 lacks support for installing header files and creating a -# library which programs can link against. This shell script fills -# the gap. -# -# $Id: install_cdb.sh,v 1.2 2002-11-04 17:53:04 helly Exp $ - -if test -r "cdb.a" && test -r "auto-str.c" && test -r "byte.a"; then - : -else - echo "Please execute this script in the cdb-0.75 source directory after 'make'" - exit 1 -fi - -prefix=$1 - -if test -z "$prefix"; then - prefix=/usr/local -fi - -echo "Using prefix $prefix" - -if mkdir -p "$prefix/include" "$prefix/lib"; then - : -else - echo "Creating directories failed. Please become superuser." - exit 1 -fi - -mkdir -p tmp || exit 1 -cd tmp -ar x ../cdb.a -ar x ../byte.a -ar x ../unix.a -ar x ../byte.a -ar x ../buffer.a -cp ../error.o . - -# not really portable -ar r "$prefix/lib/libcdb.a" * -ranlib "$prefix/lib/libcdb.a" -cd .. - -rm -rf tmp - -cp cdb.h uint32.h "$prefix/include" - -echo "done" diff --git a/ext/dba/libcdb/cdb.c b/ext/dba/libcdb/cdb.c deleted file mode 100644 index 3850feff9085a..0000000000000 --- a/ext/dba/libcdb/cdb.c +++ /dev/null @@ -1,194 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Marcus Boerger | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -/* incorporated from D.J.Bernstein's cdb-0.75 (http://cr.yp.to/cdb.html)*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#include -#include -#ifndef PHP_WIN32 -#include -#endif -#ifdef HAVE_UNISTD_H -#include -#endif -#include -#include -#include "cdb.h" - -#ifndef EPROTO -# define EPROTO -15 /* cdb 0.75's default for PROTOless systems */ -#endif - -/* {{{ cdb_match */ -static int cdb_match(struct cdb *c, char *key, unsigned int len, uint32 pos TSRMLS_DC) -{ - char buf[32]; - unsigned int n; - - while (len > 0) { - n = sizeof(buf); - if (n > len) - n = len; - if (cdb_read(c, buf, n, pos TSRMLS_CC) == -1) - return -1; - if (memcmp(buf, key, n)) - return 0; - pos += n; - key += n; - len -= n; - } - return 1; -} -/* }}} */ - -/* {{{ cdb_hash */ -uint32 cdb_hash(char *buf, unsigned int len) -{ - uint32 h; - const unsigned char * b = buf; - - h = CDB_HASHSTART; - while (len--) { - h = ( h + (h << 5)) ^ (*b++); - } - return h; -} -/* }}} */ - -/* {{{ cdb_free */ -void cdb_free(struct cdb *c TSRMLS_DC) -{ -} -/* }}} */ - -/* {{{ cdb_findstart */ -void cdb_findstart(struct cdb *c TSRMLS_DC) -{ - c->loop = 0; -} -/* }}} */ - -/* {{{ cdb_init */ -void cdb_init(struct cdb *c, php_stream *fp TSRMLS_DC) -{ - cdb_free(c TSRMLS_CC); - cdb_findstart(c TSRMLS_CC); - c->fp = fp; -} -/* }}} */ - -/* {{{ cdb_read */ -int cdb_read(struct cdb *c, char *buf, unsigned int len, uint32 pos TSRMLS_DC) -{ - if (php_stream_seek(c->fp, pos, SEEK_SET) == -1) { - errno = EPROTO; - return -1; - } - while (len > 0) { - int r; - do { - r = php_stream_read(c->fp, buf, len); - } while ((r == -1) && (errno == EINTR)); - if (r == -1) - return -1; - if (r == 0) { - errno = EPROTO; - return -1; - } - buf += r; - len -= r; - } - return 0; -} -/* }}} */ - -/* {{{ cdb_findnext */ -int cdb_findnext(struct cdb *c, char *key, unsigned int len TSRMLS_DC) -{ - char buf[8]; - uint32 pos; - uint32 u; - - if (!c->loop) { - u = cdb_hash(key, len); - if (cdb_read(c, buf, 8, (u << 3) & 2047 TSRMLS_CC) == -1) - return -1; - uint32_unpack(buf + 4,&c->hslots); - if (!c->hslots) - return 0; - uint32_unpack(buf, &c->hpos); - c->khash = u; - u >>= 8; - u %= c->hslots; - u <<= 3; - c->kpos = c->hpos + u; - } - - while (c->loop < c->hslots) { - if (cdb_read(c, buf, 8, c->kpos TSRMLS_CC) == -1) - return -1; - uint32_unpack(buf + 4, &pos); - if (!pos) - return 0; - c->loop += 1; - c->kpos += 8; - if (c->kpos == c->hpos + (c->hslots << 3)) - c->kpos = c->hpos; - uint32_unpack(buf, &u); - if (u == c->khash) { - if (cdb_read(c, buf, 8, pos TSRMLS_CC) == -1) - return -1; - uint32_unpack(buf, &u); - if (u == len) - switch(cdb_match(c, key, len, pos + 8 TSRMLS_CC)) { - case -1: - return -1; - case 1: - uint32_unpack(buf + 4, &c->dlen); - c->dpos = pos + 8 + len; - return 1; - } - } - } - - return 0; -} -/* }}} */ - -/* {{{ cdb_find */ -int cdb_find(struct cdb *c, char *key, unsigned int len TSRMLS_DC) -{ - cdb_findstart(c TSRMLS_CC); - return cdb_findnext(c, key, len TSRMLS_CC); -} -/* }}} */ - -/* {{{ cdb_version */ -char *cdb_version() -{ - return "0.75, $Revision$"; -} -/* }}} */ diff --git a/ext/dba/libcdb/cdb.h b/ext/dba/libcdb/cdb.h deleted file mode 100644 index 298c027579c37..0000000000000 --- a/ext/dba/libcdb/cdb.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Marcus Boerger | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -/* incorporated from D.J.Bernstein's cdb-0.75 (http://cr.yp.to/cdb.html)*/ - -#ifndef CDB_H -#define CDB_H - -#include "uint32.h" - -#define CDB_HASHSTART 5381 - -struct cdb { - php_stream *fp; - uint32 loop; /* number of hash slots searched under this key */ - uint32 khash; /* initialized if loop is nonzero */ - uint32 kpos; /* initialized if loop is nonzero */ - uint32 hpos; /* initialized if loop is nonzero */ - uint32 hslots; /* initialized if loop is nonzero */ - uint32 dpos; /* initialized if cdb_findnext() returns 1 */ - uint32 dlen; /* initialized if cdb_findnext() returns 1 */ -}; - -uint32 cdb_hash(char *, unsigned int); - -void cdb_free(struct cdb * TSRMLS_DC); -void cdb_init(struct cdb *, php_stream *fp TSRMLS_DC); - -int cdb_read(struct cdb *, char *, unsigned int, uint32 TSRMLS_DC); - -void cdb_findstart(struct cdb * TSRMLS_DC); -int cdb_findnext(struct cdb *, char *, unsigned int TSRMLS_DC); -int cdb_find(struct cdb *, char *, unsigned int TSRMLS_DC); - -#define cdb_datapos(c) ((c)->dpos) -#define cdb_datalen(c) ((c)->dlen) - -char *cdb_version(); - -#endif diff --git a/ext/dba/libcdb/cdb_make.c b/ext/dba/libcdb/cdb_make.c deleted file mode 100644 index ec4855bf19e8e..0000000000000 --- a/ext/dba/libcdb/cdb_make.c +++ /dev/null @@ -1,244 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Marcus Boerger | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -/* incorporated from D.J.Bernstein's cdb-0.75 (http://cr.yp.to/cdb.html)*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#include -#ifdef HAVE_UNISTD_H -#include -#endif -#include -#include -#include -#include "cdb.h" -#include "cdb_make.h" -#include "uint32.h" - -/* {{{ cdb_make_write */ -static int cdb_make_write(struct cdb_make *c, char *buf, uint32 sz TSRMLS_DC) { - return php_stream_write(c->fp, buf, sz) == sz ? 0 : -1; -} - -/* {{{ cdb_posplus */ -static int cdb_posplus(struct cdb_make *c, uint32 len) -{ - uint32 newpos = c->pos + len; - if (newpos < len) { - errno = ENOMEM; - return -1; - } - c->pos = newpos; - return 0; -} -/* }}} */ - -/* {{{ cdb_make_start */ -int cdb_make_start(struct cdb_make *c, php_stream * f TSRMLS_DC) -{ - c->head = 0; - c->split = 0; - c->hash = 0; - c->numentries = 0; - c->fp = f; - c->pos = sizeof(c->final); - if (php_stream_seek(f, c->pos, SEEK_SET) == -1) { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Fseek failed"); - return -1; - } - return php_stream_tell(c->fp); -} -/* }}} */ - -/* {{{ cdb_make_addend */ -int cdb_make_addend(struct cdb_make *c, unsigned int keylen, unsigned int datalen, uint32 h TSRMLS_DC) -{ - struct cdb_hplist *head; - - head = c->head; - if (!head || (head->num >= CDB_HPLIST)) { - head = (struct cdb_hplist *) emalloc(sizeof(struct cdb_hplist)); - if (!head) - return -1; - head->num = 0; - head->next = c->head; - c->head = head; - } - head->hp[head->num].h = h; - head->hp[head->num].p = c->pos; - ++head->num; - ++c->numentries; - if (cdb_posplus(c,8) == -1) - return -1; - if (cdb_posplus(c, keylen) == -1) - return -1; - if (cdb_posplus(c, datalen) == -1) - return -1; - return 0; -} -/* }}} */ - -/* {{{ cdb_make_addbegin */ -int cdb_make_addbegin(struct cdb_make *c, unsigned int keylen, unsigned int datalen TSRMLS_DC) -{ - char buf[8]; - - if (keylen > 0xffffffff) { - errno = ENOMEM; - return -1; - } - if (datalen > 0xffffffff) { - errno = ENOMEM; - return -1; - } - - uint32_pack(buf, keylen); - uint32_pack(buf + 4, datalen); - if (cdb_make_write(c, buf, 8 TSRMLS_CC) != 0) - return -1; - return 0; -} - -/* {{{ cdb_make_add */ -int cdb_make_add(struct cdb_make *c,char *key,unsigned int keylen,char *data,unsigned int datalen TSRMLS_DC) -{ - if (cdb_make_addbegin(c, keylen, datalen TSRMLS_CC) == -1) - return -1; - if (cdb_make_write(c, key, keylen TSRMLS_CC) != 0) - return -1; - if (cdb_make_write(c, data, datalen TSRMLS_CC) != 0) - return -1; - return cdb_make_addend(c, keylen, datalen, cdb_hash(key, keylen) TSRMLS_CC); -} -/* }}} */ - -/* {{{ cdb_make_finish */ -int cdb_make_finish(struct cdb_make *c TSRMLS_DC) -{ - char buf[8]; - int i; - uint32 len; - uint32 u; - uint32 memsize; - uint32 count; - uint32 where; - struct cdb_hplist *x; - struct cdb_hp *hp; - - for (i = 0;i < 256;++i) - c->count[i] = 0; - - for (x = c->head; x; x = x->next) { - i = x->num; - while (i--) - ++c->count[255 & x->hp[i].h]; - } - - memsize = 1; - for (i = 0;i < 256;++i) { - u = c->count[i] * 2; - if (u > memsize) - memsize = u; - } - - memsize += c->numentries; /* no overflow possible up to now */ - u = (uint32) 0 - (uint32) 1; - u /= sizeof(struct cdb_hp); - if (memsize > u) { - errno = ENOMEM; - return -1; - } - - c->split = (struct cdb_hp *) safe_emalloc(memsize, sizeof(struct cdb_hp), 0); - if (!c->split) - return -1; - - c->hash = c->split + c->numentries; - - u = 0; - for (i = 0;i < 256;++i) { - u += c->count[i]; /* bounded by numentries, so no overflow */ - c->start[i] = u; - } - - for (x = c->head; x; x = x->next) { - i = x->num; - while (i--) - c->split[--c->start[255 & x->hp[i].h]] = x->hp[i]; - } - - for (i = 0;i < 256;++i) { - count = c->count[i]; - - len = count + count; /* no overflow possible */ - uint32_pack(c->final + 8 * i,c->pos); - uint32_pack(c->final + 8 * i + 4,len); - - for (u = 0;u < len;++u) - c->hash[u].h = c->hash[u].p = 0; - - hp = c->split + c->start[i]; - for (u = 0;u < count;++u) { - where = (hp->h >> 8) % len; - while (c->hash[where].p) - if (++where == len) - where = 0; - c->hash[where] = *hp++; - } - - for (u = 0;u < len;++u) { - uint32_pack(buf, c->hash[u].h); - uint32_pack(buf + 4, c->hash[u].p); - if (cdb_make_write(c, buf, 8 TSRMLS_CC) != 0) - return -1; - if (cdb_posplus(c, 8) == -1) - return -1; - } - } - - if (c->split) - efree(c->split); - - for (x = c->head; x; c->head = x) { - x = x->next; - efree(c->head); - } - - if (php_stream_flush(c->fp) != 0) - return -1; - php_stream_rewind(c->fp); - if (php_stream_tell(c->fp) != 0) - return -1; - if (cdb_make_write(c, c->final, sizeof(c->final) TSRMLS_CC) != 0) - return -1; - return php_stream_flush(c->fp); -} -/* }}} */ - -/* {{{ cdb_make_version */ -char *cdb_make_version() -{ - return "0.75, $Revision$"; -} diff --git a/ext/dba/libcdb/cdb_make.h b/ext/dba/libcdb/cdb_make.h deleted file mode 100644 index e8c3e068a5ed5..0000000000000 --- a/ext/dba/libcdb/cdb_make.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Marcus Boerger | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -/* incorporated from D.J.Bernstein's cdb-0.75 (http://cr.yp.to/cdb.html)*/ - -#ifndef CDB_MAKE_H -#define CDB_MAKE_H - -#include -#include "uint32.h" - -#define CDB_HPLIST 1000 - -struct cdb_hp { - uint32 h; - uint32 p; -}; - -struct cdb_hplist { - struct cdb_hp hp[CDB_HPLIST]; - struct cdb_hplist *next; - int num; -} ; - -struct cdb_make { - /* char bspace[8192]; */ - char final[2048]; - uint32 count[256]; - uint32 start[256]; - struct cdb_hplist *head; - struct cdb_hp *split; /* includes space for hash */ - struct cdb_hp *hash; - uint32 numentries; - /* buffer b; */ - uint32 pos; - /* int fd; */ - php_stream * fp; -}; - -int cdb_make_start(struct cdb_make *, php_stream * TSRMLS_DC); -int cdb_make_addbegin(struct cdb_make *, unsigned int, unsigned int TSRMLS_DC); -int cdb_make_addend(struct cdb_make *, unsigned int, unsigned int, uint32 TSRMLS_DC); -int cdb_make_add(struct cdb_make *, char *, unsigned int, char *, unsigned int TSRMLS_DC); -int cdb_make_finish(struct cdb_make * TSRMLS_DC); -char *cdb_make_version(); - -#endif diff --git a/ext/dba/libcdb/uint32.c b/ext/dba/libcdb/uint32.c deleted file mode 100644 index c5cac0ea3490d..0000000000000 --- a/ext/dba/libcdb/uint32.c +++ /dev/null @@ -1,49 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Marcus Boerger | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -/* incorporated from D.J.Bernstein's cdb-0.75 (http://cr.yp.to/cdb.html)*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#include "uint32.h" - -/* {{{ uint32_pack */ -void uint32_pack(char *out, uint32 in) -{ - out[0] = in&0xff; in>>=8; - out[1] = in&0xff; in>>=8; - out[2] = in&0xff; in>>=8; - out[3] = in&0xff; -} -/* }}} */ - -/* {{{ uint32_unpack */ -void uint32_unpack(const char *in, uint32 *out) -{ - *out = (((uint32)(unsigned char)in[3])<<24) | - (((uint32)(unsigned char)in[2])<<16) | - (((uint32)(unsigned char)in[1])<<8) | - (((uint32)(unsigned char)in[0])); -} -/* }}} */ diff --git a/ext/dba/libcdb/uint32.h b/ext/dba/libcdb/uint32.h deleted file mode 100644 index 3f317201de333..0000000000000 --- a/ext/dba/libcdb/uint32.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Marcus Boerger | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -/* incorporated from D.J.Bernstein's cdb-0.75 (http://cr.yp.to/cdb.html)*/ - -#ifndef UINT32_H -#define UINT32_H - -#if SIZEOF_INT == 4 -/* Most 32-bit and 64-bit systems have 32-bit ints */ -typedef unsigned int uint32; -#elif SIZEOF_LONG == 4 -/* 16-bit systems? */ -typedef unsigned long uint32; -#else -#error Need type which holds 32 bits -#endif - -void uint32_pack(char *out, uint32 in); -void uint32_unpack(const char *in, uint32 *out); - -#endif diff --git a/ext/dba/libflatfile/flatfile.c b/ext/dba/libflatfile/flatfile.c deleted file mode 100644 index 07b5bc21b9627..0000000000000 --- a/ext/dba/libflatfile/flatfile.c +++ /dev/null @@ -1,322 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Marcus Boerger | - | based on ext/db/db.c by: | - | Rasmus Lerdorf | - | Jim Winstead | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_globals.h" - -#include -#include -#include -#if HAVE_UNISTD_H -#include -#endif - -#include "flatfile.h" - -#define _php_stream_gets(stream, buf, len) php_stream_gets(stream, ZSTR(((char*)buf)), len) - -#define FLATFILE_BLOCK_SIZE 1024 - -/* - * ret = -1 means that database was opened for read-only - * ret = 0 success - * ret = 1 key already exists - nothing done - */ - -/* {{{ flatfile_store - */ -int flatfile_store(flatfile *dba, datum key_datum, datum value_datum, int mode TSRMLS_DC) { - if (mode == FLATFILE_INSERT) { - if (flatfile_findkey(dba, key_datum TSRMLS_CC)) { - return 1; - } - php_stream_seek(dba->fp, 0L, SEEK_END); - php_stream_printf(dba->fp TSRMLS_CC, "%d\n", key_datum.dsize); - php_stream_flush(dba->fp); - if (php_stream_write(dba->fp, key_datum.dptr, key_datum.dsize) < key_datum.dsize) { - return -1; - } - php_stream_printf(dba->fp TSRMLS_CC, "%d\n", value_datum.dsize); - php_stream_flush(dba->fp); - if (php_stream_write(dba->fp, value_datum.dptr, value_datum.dsize) < value_datum.dsize) { - return -1; - } - } else { /* FLATFILE_REPLACE */ - flatfile_delete(dba, key_datum TSRMLS_CC); - php_stream_printf(dba->fp TSRMLS_CC, "%d\n", key_datum.dsize); - php_stream_flush(dba->fp); - if (php_stream_write(dba->fp, key_datum.dptr, key_datum.dsize) < key_datum.dsize) { - return -1; - } - php_stream_printf(dba->fp TSRMLS_CC, "%d\n", value_datum.dsize); - if (php_stream_write(dba->fp, value_datum.dptr, value_datum.dsize) < value_datum.dsize) { - return -1; - } - } - - php_stream_flush(dba->fp); - return 0; -} -/* }}} */ - -/* {{{ flatfile_fetch - */ -datum flatfile_fetch(flatfile *dba, datum key_datum TSRMLS_DC) { - datum value_datum = {NULL, 0}; - char buf[16]; - - if (flatfile_findkey(dba, key_datum TSRMLS_CC)) { - if (_php_stream_gets(dba->fp, buf, sizeof(buf))) { - value_datum.dsize = atoi(buf); - value_datum.dptr = safe_emalloc(value_datum.dsize, 1, 1); - value_datum.dsize = php_stream_read(dba->fp, value_datum.dptr, value_datum.dsize); - } else { - value_datum.dptr = NULL; - value_datum.dsize = 0; - } - } - return value_datum; -} -/* }}} */ - -/* {{{ flatfile_delete - */ -int flatfile_delete(flatfile *dba, datum key_datum TSRMLS_DC) { - char *key = key_datum.dptr; - size_t size = key_datum.dsize; - size_t buf_size = FLATFILE_BLOCK_SIZE; - char *buf = emalloc(buf_size); - size_t num; - size_t pos; - - php_stream_rewind(dba->fp); - while(!php_stream_eof(dba->fp)) { - /* read in the length of the key name */ - if (!_php_stream_gets(dba->fp, buf, 15)) { - break; - } - num = atoi(buf); - if (num >= buf_size) { - buf_size = num + FLATFILE_BLOCK_SIZE; - buf = erealloc(buf, buf_size); - } - pos = php_stream_tell(dba->fp); - - /* read in the key name */ - num = php_stream_read(dba->fp, buf, num); - if (num < 0) { - break; - } - - if (size == num && !memcmp(buf, key, size)) { - php_stream_seek(dba->fp, pos, SEEK_SET); - php_stream_putc(dba->fp, 0); - php_stream_flush(dba->fp); - php_stream_seek(dba->fp, 0L, SEEK_END); - efree(buf); - return SUCCESS; - } - - /* read in the length of the value */ - if (!_php_stream_gets(dba->fp, buf, 15)) { - break; - } - num = atoi(buf); - if (num >= buf_size) { - buf_size = num + FLATFILE_BLOCK_SIZE; - buf = erealloc(buf, buf_size); - } - /* read in the value */ - num = php_stream_read(dba->fp, buf, num); - if (num < 0) { - break; - } - } - efree(buf); - return FAILURE; -} -/* }}} */ - -/* {{{ flatfile_findkey - */ -int flatfile_findkey(flatfile *dba, datum key_datum TSRMLS_DC) { - size_t buf_size = FLATFILE_BLOCK_SIZE; - char *buf = emalloc(buf_size); - size_t num; - int ret=0; - void *key = key_datum.dptr; - size_t size = key_datum.dsize; - - php_stream_rewind(dba->fp); - while (!php_stream_eof(dba->fp)) { - if (!_php_stream_gets(dba->fp, buf, 15)) { - break; - } - num = atoi(buf); - if (num >= buf_size) { - buf_size = num + FLATFILE_BLOCK_SIZE; - buf = erealloc(buf, buf_size); - } - num = php_stream_read(dba->fp, buf, num); - if (num < 0) { - break; - } - if (size == num) { - if (!memcmp(buf, key, size)) { - ret = 1; - break; - } - } - if (!_php_stream_gets(dba->fp, buf, 15)) { - break; - } - num = atoi(buf); - if (num >= buf_size) { - buf_size = num + FLATFILE_BLOCK_SIZE; - buf = erealloc(buf, buf_size); - } - num = php_stream_read(dba->fp, buf, num); - if (num < 0) { - break; - } - } - efree(buf); - return ret; -} -/* }}} */ - -/* {{{ flatfile_firstkey - */ -datum flatfile_firstkey(flatfile *dba TSRMLS_DC) { - datum res; - size_t num; - size_t buf_size = FLATFILE_BLOCK_SIZE; - char *buf = emalloc(buf_size); - - php_stream_rewind(dba->fp); - while(!php_stream_eof(dba->fp)) { - if (!_php_stream_gets(dba->fp, buf, 15)) { - break; - } - num = atoi(buf); - if (num >= buf_size) { - buf_size = num + FLATFILE_BLOCK_SIZE; - buf = erealloc(buf, buf_size); - } - num = php_stream_read(dba->fp, buf, num); - if (num < 0) { - break; - } - if (*(buf) != 0) { - dba->CurrentFlatFilePos = php_stream_tell(dba->fp); - res.dptr = buf; - res.dsize = num; - return res; - } - if (!_php_stream_gets(dba->fp, buf, 15)) { - break; - } - num = atoi(buf); - if (num >= buf_size) { - buf_size = num + FLATFILE_BLOCK_SIZE; - buf = erealloc(buf, buf_size); - } - num = php_stream_read(dba->fp, buf, num); - if (num < 0) { - break; - } - } - efree(buf); - res.dptr = NULL; - res.dsize = 0; - return res; -} -/* }}} */ - -/* {{{ flatfile_nextkey - */ -datum flatfile_nextkey(flatfile *dba TSRMLS_DC) { - datum res; - size_t num; - size_t buf_size = FLATFILE_BLOCK_SIZE; - char *buf = emalloc(buf_size); - - php_stream_seek(dba->fp, dba->CurrentFlatFilePos, SEEK_SET); - while(!php_stream_eof(dba->fp)) { - if (!_php_stream_gets(dba->fp, buf, 15)) { - break; - } - num = atoi(buf); - if (num >= buf_size) { - buf_size = num + FLATFILE_BLOCK_SIZE; - buf = erealloc(buf, buf_size); - } - num = php_stream_read(dba->fp, buf, num); - if (num < 0) { - break; - } - if (!_php_stream_gets(dba->fp, buf, 15)) { - break; - } - num = atoi(buf); - if (num >= buf_size) { - buf_size = num + FLATFILE_BLOCK_SIZE; - buf = erealloc(buf, buf_size); - } - num = php_stream_read(dba->fp, buf, num); - if (num < 0) { - break; - } - if (*(buf)!=0) { - dba->CurrentFlatFilePos = php_stream_tell(dba->fp); - res.dptr = buf; - res.dsize = num; - return res; - } - } - efree(buf); - res.dptr = NULL; - res.dsize = 0; - return res; -} -/* }}} */ - -/* {{{ flatfile_version */ -char *flatfile_version() -{ - return "1.0, $Revision$"; -} -/* }}} */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/dba/libflatfile/flatfile.h b/ext/dba/libflatfile/flatfile.h deleted file mode 100644 index 0b13e69276f66..0000000000000 --- a/ext/dba/libflatfile/flatfile.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Marcus Boerger | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifndef PHP_LIB_FLATFILE_H -#define PHP_LIB_FLATFILE_H - -typedef struct { - char *dptr; - size_t dsize; -} datum; - -typedef struct { - char *lockfn; - int lockfd; - php_stream *fp; - size_t CurrentFlatFilePos; - datum nextkey; -} flatfile; - -#define FLATFILE_INSERT 1 -#define FLATFILE_REPLACE 0 - -int flatfile_store(flatfile *dba, datum key_datum, datum value_datum, int mode TSRMLS_DC); -datum flatfile_fetch(flatfile *dba, datum key_datum TSRMLS_DC); -int flatfile_delete(flatfile *dba, datum key_datum TSRMLS_DC); -int flatfile_findkey(flatfile *dba, datum key_datum TSRMLS_DC); -datum flatfile_firstkey(flatfile *dba TSRMLS_DC); -datum flatfile_nextkey(flatfile *dba TSRMLS_DC); -char *flatfile_version(); - -#endif diff --git a/ext/dba/libinifile/inifile.c b/ext/dba/libinifile/inifile.c deleted file mode 100644 index 9c97db689c878..0000000000000 --- a/ext/dba/libinifile/inifile.c +++ /dev/null @@ -1,591 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Marcus Boerger | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_globals.h" - -#include -#include -#include -#if HAVE_UNISTD_H -#include -#endif - -#include "inifile.h" - -/* ret = -1 means that database was opened for read-only - * ret = 0 success - * ret = 1 key already exists - nothing done - */ - -/* {{{ inifile_version */ -char *inifile_version() -{ - return "1.0, $Revision$"; -} -/* }}} */ - -/* {{{ inifile_free_key */ -void inifile_key_free(key_type *key) -{ - if (key->group) { - efree(key->group); - } - if (key->name) { - efree(key->name); - } - memset(key, 0, sizeof(key_type)); -} -/* }}} */ - -/* {{{ inifile_free_val */ -void inifile_val_free(val_type *val) -{ - if (val->value) { - efree(val->value); - } - memset(val, 0, sizeof(val_type)); -} -/* }}} */ - -/* {{{ inifile_free_val */ -void inifile_line_free(line_type *ln) -{ - inifile_key_free(&ln->key); - inifile_val_free(&ln->val); - ln->pos = 0; -} -/* }}} */ - -/* {{{ inifile_alloc */ -inifile * inifile_alloc(php_stream *fp, int readonly, int persistent TSRMLS_DC) -{ - inifile *dba; - - if (!readonly) { - if (!php_stream_truncate_supported(fp)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't truncate this stream"); - return NULL; - } - } - - dba = pemalloc(sizeof(inifile), persistent); - memset(dba, 0, sizeof(inifile)); - dba->fp = fp; - dba->readonly = readonly; - return dba; -} -/* }}} */ - -/* {{{ inifile_free */ -void inifile_free(inifile *dba, int persistent) -{ - if (dba) { - inifile_line_free(&dba->curr); - inifile_line_free(&dba->next); - pefree(dba, persistent); - } -} -/* }}} */ - -/* {{{ inifile_key_split */ -key_type inifile_key_split(const char *group_name) -{ - key_type key; - char *name; - - if (group_name[0] == '[' && (name = strchr(group_name, ']')) != NULL) { - key.group = estrndup(group_name+1, name - (group_name + 1)); - key.name = estrdup(name+1); - } else { - key.group = estrdup(""); - key.name = estrdup(group_name); - } - return key; -} -/* }}} */ - -/* {{{ inifile_key_string */ -char * inifile_key_string(const key_type *key) -{ - if (key->group && *key->group) { - char *result; - spprintf(&result, 0, "[%s]%s", key->group, key->name ? key->name : ""); - return result; - } else if (key->name) { - return estrdup(key->name); - } else { - return NULL; - } -} -/* }}} */ - -/* {{{ etrim */ -static char *etrim(const char *str) -{ - char *val; - size_t l; - - if (!str) { - return NULL; - } - val = (char*)str; - while (*val && strchr(" \t\r\n", *val)) { - val++; - } - l = strlen(val); - while (l && (strchr(" \t\r\n", val[l-1]))) { - l--; - } - return estrndup(val, l); -} -/* }}} */ - -/* {{{ inifile_findkey - */ -static int inifile_read(inifile *dba, line_type *ln TSRMLS_DC) { - char *fline; - char *pos; - - inifile_val_free(&ln->val); - while ((fline = php_stream_gets(dba->fp, NULL_ZSTR, 0)) != NULL) { - if (fline) { - if (fline[0] == '[') { - /* A value name cannot start with '[' - * So either we find a ']' or we found an error - */ - pos = strchr(fline+1, ']'); - if (pos) { - *pos = '\0'; - inifile_key_free(&ln->key); - ln->key.group = etrim(fline+1); - ln->key.name = estrdup(""); - ln->pos = php_stream_tell(dba->fp); - efree(fline); - return 1; - } else { - efree(fline); - continue; - } - } else { - pos = strchr(fline, '='); - if (pos) { - *pos = '\0'; - /* keep group or make empty if not existent */ - if (!ln->key.group) { - ln->key.group = estrdup(""); - } - if (ln->key.name) { - efree(ln->key.name); - } - ln->key.name = etrim(fline); - ln->val.value = etrim(pos+1); - ln->pos = php_stream_tell(dba->fp); - efree(fline); - return 1; - } else { - /* simply ignore lines without '=' - * those should be comments - */ - efree(fline); - continue; - } - } - } - } - inifile_line_free(ln); - return 0; -} -/* }}} */ - -/* {{{ inifile_key_cmp */ -/* 0 = EQUAL - * 1 = GROUP-EQUAL,NAME-DIFFERENT - * 2 = DIFFERENT - */ -static int inifile_key_cmp(const key_type *k1, const key_type *k2 TSRMLS_DC) -{ - assert(k1->group && k1->name && k2->group && k2->name); - - if (!strcasecmp(k1->group, k2->group)) { - if (!strcasecmp(k1->name, k2->name)) { - return 0; - } else { - return 1; - } - } else { - return 2; - } -} -/* }}} */ - -/* {{{ inifile_fetch - */ -val_type inifile_fetch(inifile *dba, const key_type *key, int skip TSRMLS_DC) { - line_type ln = {{NULL,NULL},{NULL}}; - val_type val; - int res, grp_eq = 0; - - if (skip == -1 && dba->next.key.group && dba->next.key.name && !inifile_key_cmp(&dba->next.key, key TSRMLS_CC)) { - /* we got position already from last fetch */ - php_stream_seek(dba->fp, dba->next.pos, SEEK_SET); - } else { - /* specific instance or not same key -> restart search */ - /* the slow way: restart and seacrch */ - php_stream_rewind(dba->fp); - inifile_line_free(&dba->next); - } - if (skip == -1) { - skip = 0; - } - while(inifile_read(dba, &ln TSRMLS_CC)) { - if (!(res=inifile_key_cmp(&ln.key, key TSRMLS_CC))) { - if (!skip) { - val.value = estrdup(ln.val.value ? ln.val.value : ""); - /* allow faster access by updating key read into next */ - inifile_line_free(&dba->next); - dba->next = ln; - dba->next.pos = php_stream_tell(dba->fp); - return val; - } - skip--; - } else if (res == 1) { - grp_eq = 1; - } else if (grp_eq) { - /* we are leaving group now: that means we cannot find the key */ - break; - } - } - inifile_line_free(&ln); - dba->next.pos = php_stream_tell(dba->fp); - return ln.val; -} -/* }}} */ - -/* {{{ inifile_firstkey - */ -int inifile_firstkey(inifile *dba TSRMLS_DC) { - inifile_line_free(&dba->curr); - dba->curr.pos = 0; - return inifile_nextkey(dba TSRMLS_CC); -} -/* }}} */ - -/* {{{ inifile_nextkey - */ -int inifile_nextkey(inifile *dba TSRMLS_DC) { - line_type ln = {{NULL,NULL},{NULL}}; - - /*inifile_line_free(&dba->next); ??? */ - php_stream_seek(dba->fp, dba->curr.pos, SEEK_SET); - ln.key.group = estrdup(dba->curr.key.group ? dba->curr.key.group : ""); - inifile_read(dba, &ln TSRMLS_CC); - inifile_line_free(&dba->curr); - dba->curr = ln; - return ln.key.group || ln.key.name; -} -/* }}} */ - -/* {{{ inifile_truncate - */ -static int inifile_truncate(inifile *dba, size_t size TSRMLS_DC) -{ - int res; - - if ((res=php_stream_truncate_set_size(dba->fp, size)) != 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error in ftruncate: %d", res); - return FAILURE; - } - php_stream_seek(dba->fp, size, SEEK_SET); - return SUCCESS; -} -/* }}} */ - -/* {{{ inifile_find_group - * if found pos_grp_start points to "[group_name]" - */ -static int inifile_find_group(inifile *dba, const key_type *key, size_t *pos_grp_start TSRMLS_DC) -{ - int ret = FAILURE; - - php_stream_flush(dba->fp); - php_stream_seek(dba->fp, 0, SEEK_SET); - inifile_line_free(&dba->curr); - inifile_line_free(&dba->next); - - if (key->group && strlen(key->group)) { - int res; - line_type ln = {{NULL,NULL},{NULL}}; - - res = 1; - while(inifile_read(dba, &ln TSRMLS_CC)) { - if ((res=inifile_key_cmp(&ln.key, key TSRMLS_CC)) < 2) { - ret = SUCCESS; - break; - } - *pos_grp_start = php_stream_tell(dba->fp); - } - inifile_line_free(&ln); - } else { - *pos_grp_start = 0; - ret = SUCCESS; - } - if (ret == FAILURE) { - *pos_grp_start = php_stream_tell(dba->fp); - } - return ret; -} -/* }}} */ - -/* {{{ inifile_next_group - * only valid after a call to inifile_find_group - * if any next group is found pos_grp_start points to "[group_name]" or whitespace before that - */ -static int inifile_next_group(inifile *dba, const key_type *key, size_t *pos_grp_start TSRMLS_DC) -{ - int ret = FAILURE; - line_type ln = {{NULL,NULL},{NULL}}; - - *pos_grp_start = php_stream_tell(dba->fp); - ln.key.group = estrdup(key->group); - while(inifile_read(dba, &ln TSRMLS_CC)) { - if (inifile_key_cmp(&ln.key, key TSRMLS_CC) == 2) { - ret = SUCCESS; - break; - } - *pos_grp_start = php_stream_tell(dba->fp); - } - inifile_line_free(&ln); - return ret; -} -/* }}} */ - -/* {{{ inifile_copy_to - */ -static int inifile_copy_to(inifile *dba, size_t pos_start, size_t pos_end, inifile **ini_copy TSRMLS_DC) -{ - php_stream *fp; - - if (pos_start == pos_end) { - *ini_copy = NULL; - return SUCCESS; - } - if ((fp = php_stream_temp_create(0, 64 * 1024)) == NULL) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not create temporary stream"); - *ini_copy = NULL; - return FAILURE; - } - - if ((*ini_copy = inifile_alloc(fp, 1, 0 TSRMLS_CC)) == NULL) { - /* writes error */ - return FAILURE; - } - php_stream_seek(dba->fp, pos_start, SEEK_SET); - if (!php_stream_copy_to_stream(dba->fp, fp, pos_end - pos_start)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not copy group [%zu - %zu] to temporary stream", pos_start, pos_end); - return FAILURE; - } - return SUCCESS; -} -/* }}} */ - -/* {{{ inifile_filter - * copy from to dba while ignoring key name (group must equal) - */ -static int inifile_filter(inifile *dba, inifile *from, const key_type *key TSRMLS_DC) -{ - size_t pos_start = 0, pos_next = 0, pos_curr; - int ret = SUCCESS; - line_type ln = {{NULL,NULL},{NULL}}; - - php_stream_seek(from->fp, 0, SEEK_SET); - php_stream_seek(dba->fp, 0, SEEK_END); - while(inifile_read(from, &ln TSRMLS_CC)) { - switch(inifile_key_cmp(&ln.key, key TSRMLS_CC)) { - case 0: - pos_curr = php_stream_tell(from->fp); - if (pos_start != pos_next) { - php_stream_seek(from->fp, pos_start, SEEK_SET); - if (!php_stream_copy_to_stream(from->fp, dba->fp, pos_next - pos_start)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not copy [%zu - %zu] from temporary stream", pos_next, pos_start); - ret = FAILURE; - } - php_stream_seek(from->fp, pos_curr, SEEK_SET); - } - pos_next = pos_start = pos_curr; - break; - case 1: - pos_next = php_stream_tell(from->fp); - break; - case 2: - /* the function is meant to process only entries from same group */ - assert(0); - break; - } - } - if (pos_start != pos_next) { - php_stream_seek(from->fp, pos_start, SEEK_SET); - if (!php_stream_copy_to_stream(from->fp, dba->fp, pos_next - pos_start)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not copy [%zu - %zu] from temporary stream", pos_next, pos_start); - ret = FAILURE; - } - } - inifile_line_free(&ln); - return SUCCESS; -} -/* }}} */ - -/* {{{ inifile_delete_replace_append - */ -static int inifile_delete_replace_append(inifile *dba, const key_type *key, const val_type *value, int append TSRMLS_DC) -{ - size_t pos_grp_start, pos_grp_next; - inifile *ini_tmp = NULL; - php_stream *fp_tmp = NULL; - int ret; - - /* 1) Search group start - * 2) Search next group - * 3) If not append: Copy group to ini_tmp - * 4) Open temp_stream and copy remainder - * 5) Truncate stream - * 6) If not append AND key.name given: Filtered copy back from ini_tmp - * to stream. Otherwise the user wanted to delete the group. - * 7) Append value if given - * 8) Append temporary stream - */ - - assert(!append || (key->name && value)); /* missuse */ - - /* 1 - 3 */ - inifile_find_group(dba, key, &pos_grp_start TSRMLS_CC); - inifile_next_group(dba, key, &pos_grp_next TSRMLS_CC); - if (append) { - ret = SUCCESS; - } else { - ret = inifile_copy_to(dba, pos_grp_start, pos_grp_next, &ini_tmp TSRMLS_CC); - } - - /* 4 */ - if (ret == SUCCESS) { - fp_tmp = php_stream_temp_create(0, 64 * 1024); - if (!fp_tmp) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not create temporary stream"); - ret = FAILURE; - } else { - php_stream_seek(dba->fp, 0, SEEK_END); - if (pos_grp_next != (size_t)php_stream_tell(dba->fp)) { - php_stream_seek(dba->fp, pos_grp_next, SEEK_SET); - if (!php_stream_copy_to_stream(dba->fp, fp_tmp, PHP_STREAM_COPY_ALL)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not copy remainder to temporary stream"); - ret = FAILURE; - } - } - } - } - - /* 5 */ - if (ret == SUCCESS) { - ret = inifile_truncate(dba, append ? pos_grp_next : pos_grp_start TSRMLS_CC); /* writes error on fail */ - } - - if (ret == SUCCESS) { - if (key->name && strlen(key->name)) { - /* 6 */ - if (!append && ini_tmp) { - ret = inifile_filter(dba, ini_tmp, key TSRMLS_CC); - } - - /* 7 */ - /* important: do not query ret==SUCCESS again: inifile_filter might fail but - * however next operation must be done. - */ - if (value) { - if (pos_grp_start == pos_grp_next && key->group && strlen(key->group)) { - php_stream_printf(dba->fp TSRMLS_CC, "[%s]\n", key->group); - } - php_stream_printf(dba->fp TSRMLS_CC, "%s=%s\n", key->name, value->value ? value->value : ""); - } - } - - /* 8 */ - /* important: do not query ret==SUCCESS again: inifile_filter might fail but - * however next operation must be done. - */ - if (fp_tmp && php_stream_tell(fp_tmp)) { - php_stream_seek(fp_tmp, 0, SEEK_SET); - php_stream_seek(dba->fp, 0, SEEK_END); - if (!php_stream_copy_to_stream(fp_tmp, dba->fp, PHP_STREAM_COPY_ALL)) { - php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, "Could not copy from temporary stream - ini file truncated"); - ret = FAILURE; - } - } - } - - if (ini_tmp) { - php_stream_close(ini_tmp->fp); - inifile_free(ini_tmp, 0); - } - if (fp_tmp) { - php_stream_close(fp_tmp); - } - php_stream_flush(dba->fp); - php_stream_seek(dba->fp, 0, SEEK_SET); - - return ret; -} -/* }}} */ - -/* {{{ inifile_delete - */ -int inifile_delete(inifile *dba, const key_type *key TSRMLS_DC) -{ - return inifile_delete_replace_append(dba, key, NULL, 0 TSRMLS_CC); -} -/* }}} */ - -/* {{{ inifile_relace - */ -int inifile_replace(inifile *dba, const key_type *key, const val_type *value TSRMLS_DC) -{ - return inifile_delete_replace_append(dba, key, value, 0 TSRMLS_CC); -} -/* }}} */ - -/* {{{ inifile_append - */ -int inifile_append(inifile *dba, const key_type *key, const val_type *value TSRMLS_DC) -{ - return inifile_delete_replace_append(dba, key, value, 1 TSRMLS_CC); -} -/* }}} */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/dba/libinifile/inifile.h b/ext/dba/libinifile/inifile.h deleted file mode 100644 index 91e8c10df0e43..0000000000000 --- a/ext/dba/libinifile/inifile.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Marcus Boerger | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifndef PHP_LIB_INIFILE_H -#define PHP_LIB_INIFILE_H - -typedef struct { - char *group; - char *name; -} key_type; - -typedef struct { - char *value; -} val_type; - -typedef struct { - key_type key; - val_type val; - size_t pos; -} line_type; - -typedef struct { - char *lockfn; - int lockfd; - php_stream *fp; - int readonly; - line_type curr; - line_type next; -} inifile; - -val_type inifile_fetch(inifile *dba, const key_type *key, int skip TSRMLS_DC); -int inifile_firstkey(inifile *dba TSRMLS_DC); -int inifile_nextkey(inifile *dba TSRMLS_DC); -int inifile_delete(inifile *dba, const key_type *key TSRMLS_DC); -int inifile_replace(inifile *dba, const key_type *key, const val_type *val TSRMLS_DC); -int inifile_append(inifile *dba, const key_type *key, const val_type *val TSRMLS_DC); -char *inifile_version(); - -key_type inifile_key_split(const char *group_name); -char * inifile_key_string(const key_type *key); - -void inifile_key_free(key_type *key); -void inifile_val_free(val_type *val); -void inifile_line_free(line_type *ln); - -inifile * inifile_alloc(php_stream *fp, int readonly, int persistent TSRMLS_DC); -void inifile_free(inifile *dba, int persistent); - -#endif diff --git a/ext/dba/php_cdb.h b/ext/dba/php_cdb.h deleted file mode 100644 index a046f0796b378..0000000000000 --- a/ext/dba/php_cdb.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef PHP_CDB_H -#define PHP_CDB_H - -#if DBA_CDB - -#include "php_dba.h" - -DBA_FUNCS(cdb); - -#endif - -#endif diff --git a/ext/dba/php_db1.h b/ext/dba/php_db1.h deleted file mode 100755 index c0bb5f08b4b6c..0000000000000 --- a/ext/dba/php_db1.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef PHP_DB1_H -#define PHP_DB1_H - -#if DBA_DB1 - -#include "php_dba.h" - -DBA_FUNCS(db1); - -#endif - -#endif diff --git a/ext/dba/php_db2.h b/ext/dba/php_db2.h deleted file mode 100644 index 2a95223a85442..0000000000000 --- a/ext/dba/php_db2.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef PHP_DB2_H -#define PHP_DB2_H - -#if DBA_DB2 - -#include "php_dba.h" - -DBA_FUNCS(db2); - -#endif - -#endif diff --git a/ext/dba/php_db3.h b/ext/dba/php_db3.h deleted file mode 100644 index 58bb0b62a08f7..0000000000000 --- a/ext/dba/php_db3.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef PHP_DB3_H -#define PHP_DB3_H - -#if DBA_DB3 - -#include "php_dba.h" - -DBA_FUNCS(db3); - -#endif - -#endif diff --git a/ext/dba/php_db4.h b/ext/dba/php_db4.h deleted file mode 100644 index fa814c3f5ec4b..0000000000000 --- a/ext/dba/php_db4.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef PHP_DB4_H -#define PHP_DB4_H - -#if DBA_DB4 - -#include "php_dba.h" - -DBA_FUNCS(db4); - -#endif - -#endif diff --git a/ext/dba/php_dba.h b/ext/dba/php_dba.h deleted file mode 100644 index 985818af572ac..0000000000000 --- a/ext/dba/php_dba.h +++ /dev/null @@ -1,153 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Sascha Schumann | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifndef PHP_DBA_H -#define PHP_DBA_H - -#if HAVE_DBA - -typedef enum { - /* do not allow 0 here */ - DBA_READER = 1, - DBA_WRITER, - DBA_TRUNC, - DBA_CREAT -} dba_mode_t; - -typedef struct dba_lock { - php_stream *fp; - char *name; - int mode; /* LOCK_EX,LOCK_SH */ -} dba_lock; - -typedef struct dba_info { - /* public */ - void *dbf; /* ptr to private data or whatever */ - char *path; - dba_mode_t mode; - php_stream *fp; /* this is the database stream for builtin handlers */ - int fd; - /* arg[cv] are only available when the dba_open handler is called! */ - int argc; - zval ***argv; - /* private */ - int flags; /* whether and how dba did locking and other flags*/ - struct dba_handler *hnd; - dba_lock lock; -} dba_info; - -#define DBA_LOCK_READER (0x0001) -#define DBA_LOCK_WRITER (0x0002) -#define DBA_LOCK_CREAT (0x0004) -#define DBA_LOCK_TRUNC (0x0008) - -#define DBA_LOCK_EXT (0) -#define DBA_LOCK_ALL (DBA_LOCK_READER|DBA_LOCK_WRITER|DBA_LOCK_CREAT|DBA_LOCK_TRUNC) -#define DBA_LOCK_WCT (DBA_LOCK_WRITER|DBA_LOCK_CREAT|DBA_LOCK_TRUNC) - -#define DBA_STREAM_OPEN (0x0010) -#define DBA_PERSISTENT (0x0020) - -#define DBA_CAST_AS_FD (0x0050) -#define DBA_NO_APPEND (0x00D0) - -extern zend_module_entry dba_module_entry; -#define dba_module_ptr &dba_module_entry - -typedef struct dba_handler { - char *name; /* handler name */ - int flags; /* whether and how dba does locking and other flags*/ - int (*open)(dba_info *, char **error TSRMLS_DC); - void (*close)(dba_info * TSRMLS_DC); - char* (*fetch)(dba_info *, char *, int, int, int * TSRMLS_DC); - int (*update)(dba_info *, char *, int, char *, int, int TSRMLS_DC); - int (*exists)(dba_info *, char *, int TSRMLS_DC); - int (*delete)(dba_info *, char *, int TSRMLS_DC); - char* (*firstkey)(dba_info *, int * TSRMLS_DC); - char* (*nextkey)(dba_info *, int * TSRMLS_DC); - int (*optimize)(dba_info * TSRMLS_DC); - int (*sync)(dba_info * TSRMLS_DC); - char* (*info)(struct dba_handler *hnd, dba_info * TSRMLS_DC); - /* dba_info==NULL: Handler info, dba_info!=NULL: Database info */ -} dba_handler; - -/* common prototypes which must be supplied by modules */ - -#define DBA_OPEN_FUNC(x) \ - int dba_open_##x(dba_info *info, char **error TSRMLS_DC) -#define DBA_CLOSE_FUNC(x) \ - void dba_close_##x(dba_info *info TSRMLS_DC) -#define DBA_FETCH_FUNC(x) \ - char *dba_fetch_##x(dba_info *info, char *key, int keylen, int skip, int *newlen TSRMLS_DC) -#define DBA_UPDATE_FUNC(x) \ - int dba_update_##x(dba_info *info, char *key, int keylen, char *val, int vallen, int mode TSRMLS_DC) -#define DBA_EXISTS_FUNC(x) \ - int dba_exists_##x(dba_info *info, char *key, int keylen TSRMLS_DC) -#define DBA_DELETE_FUNC(x) \ - int dba_delete_##x(dba_info *info, char *key, int keylen TSRMLS_DC) -#define DBA_FIRSTKEY_FUNC(x) \ - char *dba_firstkey_##x(dba_info *info, int *newlen TSRMLS_DC) -#define DBA_NEXTKEY_FUNC(x) \ - char *dba_nextkey_##x(dba_info *info, int *newlen TSRMLS_DC) -#define DBA_OPTIMIZE_FUNC(x) \ - int dba_optimize_##x(dba_info *info TSRMLS_DC) -#define DBA_SYNC_FUNC(x) \ - int dba_sync_##x(dba_info *info TSRMLS_DC) -#define DBA_INFO_FUNC(x) \ - char *dba_info_##x(dba_handler *hnd, dba_info *info TSRMLS_DC) - -#define DBA_FUNCS(x) \ - DBA_OPEN_FUNC(x); \ - DBA_CLOSE_FUNC(x); \ - DBA_FETCH_FUNC(x); \ - DBA_UPDATE_FUNC(x); \ - DBA_DELETE_FUNC(x); \ - DBA_EXISTS_FUNC(x); \ - DBA_FIRSTKEY_FUNC(x); \ - DBA_NEXTKEY_FUNC(x); \ - DBA_OPTIMIZE_FUNC(x); \ - DBA_SYNC_FUNC(x); \ - DBA_INFO_FUNC(x) - -#define VALLEN(p) Z_STRVAL_PP(p), Z_STRLEN_PP(p) - -PHP_FUNCTION(dba_open); -PHP_FUNCTION(dba_popen); -PHP_FUNCTION(dba_close); -PHP_FUNCTION(dba_firstkey); -PHP_FUNCTION(dba_nextkey); -PHP_FUNCTION(dba_replace); -PHP_FUNCTION(dba_insert); -PHP_FUNCTION(dba_delete); -PHP_FUNCTION(dba_exists); -PHP_FUNCTION(dba_fetch); -PHP_FUNCTION(dba_optimize); -PHP_FUNCTION(dba_sync); -PHP_FUNCTION(dba_handlers); -PHP_FUNCTION(dba_list); -PHP_FUNCTION(dba_key_split); - -#else -#define dba_module_ptr NULL -#endif - -#define phpext_dba_ptr dba_module_ptr - -#endif diff --git a/ext/dba/php_dbm.h b/ext/dba/php_dbm.h deleted file mode 100644 index 4c963d18ed91f..0000000000000 --- a/ext/dba/php_dbm.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef PHP_DBM_H -#define PHP_DBM_H - -#if DBA_DBM - -#include "php_dba.h" - -DBA_FUNCS(dbm); - -#endif - -#endif diff --git a/ext/dba/php_flatfile.h b/ext/dba/php_flatfile.h deleted file mode 100644 index afa9f6d5d3920..0000000000000 --- a/ext/dba/php_flatfile.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef PHP_FLATFILE_H -#define PHP_FLATFILE_H - -#if DBA_FLATFILE - -#include "php_dba.h" - -DBA_FUNCS(flatfile); - -#endif - -#endif diff --git a/ext/dba/php_gdbm.h b/ext/dba/php_gdbm.h deleted file mode 100644 index 3068404cfe265..0000000000000 --- a/ext/dba/php_gdbm.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef PHP_GDBM_H -#define PHP_GDBM_H - -#if DBA_GDBM - -#include "php_dba.h" - -DBA_FUNCS(gdbm); - -#endif - -#endif diff --git a/ext/dba/php_inifile.h b/ext/dba/php_inifile.h deleted file mode 100644 index 69444df3c6d48..0000000000000 --- a/ext/dba/php_inifile.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef PHP_INIFILE_H -#define PHP_INIFILE_H - -#if DBA_INIFILE - -#include "php_dba.h" - -DBA_FUNCS(inifile); - -#endif - -#endif diff --git a/ext/dba/php_ndbm.h b/ext/dba/php_ndbm.h deleted file mode 100644 index b1ebf15af32d7..0000000000000 --- a/ext/dba/php_ndbm.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef PHP_NDBM_H -#define PHP_NDBM_H - -#if DBA_NDBM - -#include "php_dba.h" - -DBA_FUNCS(ndbm); - -#endif - -#endif diff --git a/ext/dba/php_qdbm.h b/ext/dba/php_qdbm.h deleted file mode 100644 index c88efcff4cfa1..0000000000000 --- a/ext/dba/php_qdbm.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef PHP_QDBM_H -#define PHP_QDBM_H - -#if DBA_QDBM - -#include "php_dba.h" - -DBA_FUNCS(qdbm); - -#endif - -#endif diff --git a/ext/dba/tests/bug36436.phpt b/ext/dba/tests/bug36436.phpt deleted file mode 100755 index e85cf85282ac8..0000000000000 --- a/ext/dba/tests/bug36436.phpt +++ /dev/null @@ -1,34 +0,0 @@ ---TEST-- -Bug #36436 DBA problem with Berkeley DB4 ---SKIPIF-- - ---FILE-- - -===DONE=== ---EXPECTF-- -resource(%d) of type (dba persistent) -string(3) "XYZ" -string(1) "X" -string(1) "Y" -===DONE=== diff --git a/ext/dba/tests/bug38698.phpt b/ext/dba/tests/bug38698.phpt deleted file mode 100755 index 09f47e3007eab..0000000000000 --- a/ext/dba/tests/bug38698.phpt +++ /dev/null @@ -1,26 +0,0 @@ ---TEST-- -Bug #38698 (Bug #38698 for some keys cdbmake creates corrupted db and cdb can't read valid db) ---SKIPIF-- - ---FILE-- - -===DONE=== ---EXPECTF-- -string(32) "1f34b74bde3744265acfc21e0f30af95" -===DONE=== diff --git a/ext/dba/tests/dba001.phpt b/ext/dba/tests/dba001.phpt deleted file mode 100644 index 3d617fb2c231f..0000000000000 --- a/ext/dba/tests/dba001.phpt +++ /dev/null @@ -1,21 +0,0 @@ ---TEST-- -DBA File Creation Test ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -database handler: %s -database file created \ No newline at end of file diff --git a/ext/dba/tests/dba002.phpt b/ext/dba/tests/dba002.phpt deleted file mode 100644 index 3f862e38c5107..0000000000000 --- a/ext/dba/tests/dba002.phpt +++ /dev/null @@ -1,22 +0,0 @@ ---TEST-- -DBA Insert/Fetch Test ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -database handler: %s -This is a test insert diff --git a/ext/dba/tests/dba003.phpt b/ext/dba/tests/dba003.phpt deleted file mode 100644 index 617ae91891ef6..0000000000000 --- a/ext/dba/tests/dba003.phpt +++ /dev/null @@ -1,24 +0,0 @@ ---TEST-- -DBA Insert/Replace/Fetch Test ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -database handler: %s -This is the replacement text diff --git a/ext/dba/tests/dba004.phpt b/ext/dba/tests/dba004.phpt deleted file mode 100644 index 3b1f29c7dd6e2..0000000000000 --- a/ext/dba/tests/dba004.phpt +++ /dev/null @@ -1,28 +0,0 @@ ---TEST-- -DBA Multiple Insert/Fetch Test ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -database handler: %s -Another Content String Content String 2 diff --git a/ext/dba/tests/dba005.phpt b/ext/dba/tests/dba005.phpt deleted file mode 100644 index 5a933c48f984b..0000000000000 --- a/ext/dba/tests/dba005.phpt +++ /dev/null @@ -1,35 +0,0 @@ ---TEST-- -DBA FirstKey/NextKey Loop Test With 5 Items ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -database handler: %s -5YYYYY diff --git a/ext/dba/tests/dba006.phpt b/ext/dba/tests/dba006.phpt deleted file mode 100644 index efa36a5d0709b..0000000000000 --- a/ext/dba/tests/dba006.phpt +++ /dev/null @@ -1,37 +0,0 @@ ---TEST-- -DBA FirstKey/NextKey with 2 deletes ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -database handler: %s -3NYNYY \ No newline at end of file diff --git a/ext/dba/tests/dba007.phpt b/ext/dba/tests/dba007.phpt deleted file mode 100644 index 577dacc68c153..0000000000000 --- a/ext/dba/tests/dba007.phpt +++ /dev/null @@ -1,45 +0,0 @@ ---TEST-- -DBA Multiple File Creation Test ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -database handler: %s -database file created -database file created -database file created -array(3) { - [%d]=> - string(%d) "%s/dba/tests/test0.dbm" - [%d]=> - string(%d) "%s/dba/tests/test1.dbm" - [%d]=> - string(%d) "%s/dba/tests/test2.dbm" -} \ No newline at end of file diff --git a/ext/dba/tests/dba008.phpt b/ext/dba/tests/dba008.phpt deleted file mode 100644 index 0c0e434fd87c8..0000000000000 --- a/ext/dba/tests/dba008.phpt +++ /dev/null @@ -1,33 +0,0 @@ ---TEST-- -DBA magic_quotes_runtime Test ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -database handler: %s -string(1) """ -string(2) "\"" -string(2) "\"" -string(1) """ diff --git a/ext/dba/tests/dba009.phpt b/ext/dba/tests/dba009.phpt deleted file mode 100755 index 50a50c6bd5a08..0000000000000 --- a/ext/dba/tests/dba009.phpt +++ /dev/null @@ -1,33 +0,0 @@ ---TEST-- -DBA dba_popen Test ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -database handler: %s -Opened -Inserted -Closed -Opened -Inserted diff --git a/ext/dba/tests/dba_cdb.phpt b/ext/dba/tests/dba_cdb.phpt deleted file mode 100644 index 47d66a98980f9..0000000000000 --- a/ext/dba/tests/dba_cdb.phpt +++ /dev/null @@ -1,80 +0,0 @@ ---TEST-- -DBA CDB handler test ---SKIPIF-- - ---FILE-- - -===DONE=== ---EXPECT-- -database handler: cdb -5YYYYY -Content String 2 -array(5) { - ["key1"]=> - string(16) "Content String 1" - ["key2"]=> - string(16) "Content String 2" - ["key3"]=> - string(20) "Third Content String" - ["key4"]=> - string(22) "Another Content String" - ["key5"]=> - string(23) "The last content string" -} ---NO-LOCK-- -5YYYYY -Content String 2 -array(5) { - ["key1"]=> - string(16) "Content String 1" - ["key2"]=> - string(16) "Content String 2" - ["key3"]=> - string(20) "Third Content String" - ["key4"]=> - string(22) "Another Content String" - ["key5"]=> - string(23) "The last content string" -} -===DONE=== ---UEXPECT-- -database handler: cdb -5YYYYY -Content String 2 -array(5) { - [u"key1"]=> - string(16) "Content String 1" - [u"key2"]=> - string(16) "Content String 2" - [u"key3"]=> - string(20) "Third Content String" - [u"key4"]=> - string(22) "Another Content String" - [u"key5"]=> - string(23) "The last content string" -} ---NO-LOCK-- -5YYYYY -Content String 2 -array(5) { - [u"key1"]=> - string(16) "Content String 1" - [u"key2"]=> - string(16) "Content String 2" - [u"key3"]=> - string(20) "Third Content String" - [u"key4"]=> - string(22) "Another Content String" - [u"key5"]=> - string(23) "The last content string" -} -===DONE=== - diff --git a/ext/dba/tests/dba_cdb_make.phpt b/ext/dba/tests/dba_cdb_make.phpt deleted file mode 100644 index 49c8bd28c3d25..0000000000000 --- a/ext/dba/tests/dba_cdb_make.phpt +++ /dev/null @@ -1,41 +0,0 @@ ---TEST-- -DBA CDB_MAKE handler test ---SKIPIF-- - ---FILE-- - ---EXPECT-- -database handler: cdb_make -string(32) "12fc5ba2b9dcfef2480e5324eeb5f3e5" -string(32) "12fc5ba2b9dcfef2480e5324eeb5f3e5" ---UEXPECT-- -database handler: cdb_make -unicode(32) "12fc5ba2b9dcfef2480e5324eeb5f3e5" -unicode(32) "12fc5ba2b9dcfef2480e5324eeb5f3e5" - diff --git a/ext/dba/tests/dba_cdb_read.phpt b/ext/dba/tests/dba_cdb_read.phpt deleted file mode 100644 index a0fbe7bccaee2..0000000000000 --- a/ext/dba/tests/dba_cdb_read.phpt +++ /dev/null @@ -1,65 +0,0 @@ ---TEST-- -DBA CDB handler test (read only) ---SKIPIF-- - ---FILE-- - ---EXPECT-- -database handler: cdb -7YYYYNNN -=1234 -#1122 -?1212314 -#1212314 -=1231324 \ No newline at end of file diff --git a/ext/dba/tests/dba_db1.phpt b/ext/dba/tests/dba_db1.phpt deleted file mode 100755 index 983954b50b165..0000000000000 --- a/ext/dba/tests/dba_db1.phpt +++ /dev/null @@ -1,46 +0,0 @@ ---TEST-- -DBA DB1 handler test ---SKIPIF-- - ---FILE-- - -===DONE=== ---EXPECT-- -database handler: db1 -3NYNYY -Content String 2 -Content 2 replaced -Read during write: not allowed -Content 2 replaced 2nd time -The 6th value -array(3) { - ["key number 6"]=> - string(13) "The 6th value" - ["key2"]=> - string(27) "Content 2 replaced 2nd time" - ["key5"]=> - string(23) "The last content string" -} ---NO-LOCK-- -3NYNYY -Content String 2 -Content 2 replaced -Read during write: not allowed -Content 2 replaced 2nd time -The 6th value -array(3) { - ["key number 6"]=> - string(13) "The 6th value" - ["key2"]=> - string(27) "Content 2 replaced 2nd time" - ["key5"]=> - string(23) "The last content string" -} -===DONE=== diff --git a/ext/dba/tests/dba_db2.phpt b/ext/dba/tests/dba_db2.phpt deleted file mode 100644 index bcc5a9479306c..0000000000000 --- a/ext/dba/tests/dba_db2.phpt +++ /dev/null @@ -1,46 +0,0 @@ ---TEST-- -DBA DB2 handler test ---SKIPIF-- - ---FILE-- - -===DONE=== ---EXPECT-- -database handler: db2 -3NYNYY -Content String 2 -Content 2 replaced -Read during write: not allowed -Content 2 replaced 2nd time -The 6th value -array(3) { - ["key number 6"]=> - string(13) "The 6th value" - ["key2"]=> - string(27) "Content 2 replaced 2nd time" - ["key5"]=> - string(23) "The last content string" -} ---NO-LOCK-- -3NYNYY -Content String 2 -Content 2 replaced -Read during write: not allowed -Content 2 replaced 2nd time -The 6th value -array(3) { - ["key number 6"]=> - string(13) "The 6th value" - ["key2"]=> - string(27) "Content 2 replaced 2nd time" - ["key5"]=> - string(23) "The last content string" -} -===DONE=== diff --git a/ext/dba/tests/dba_db3.phpt b/ext/dba/tests/dba_db3.phpt deleted file mode 100644 index c6d04cf02d084..0000000000000 --- a/ext/dba/tests/dba_db3.phpt +++ /dev/null @@ -1,46 +0,0 @@ ---TEST-- -DBA DB3 handler test ---SKIPIF-- - ---FILE-- - -===DONE=== ---EXPECT-- -database handler: db3 -3NYNYY -Content String 2 -Content 2 replaced -Read during write: not allowed -Content 2 replaced 2nd time -The 6th value -array(3) { - ["key number 6"]=> - string(13) "The 6th value" - ["key2"]=> - string(27) "Content 2 replaced 2nd time" - ["key5"]=> - string(23) "The last content string" -} ---NO-LOCK-- -3NYNYY -Content String 2 -Content 2 replaced -Read during write: not allowed -Content 2 replaced 2nd time -The 6th value -array(3) { - ["key number 6"]=> - string(13) "The 6th value" - ["key2"]=> - string(27) "Content 2 replaced 2nd time" - ["key5"]=> - string(23) "The last content string" -} -===DONE=== diff --git a/ext/dba/tests/dba_db4.phpt b/ext/dba/tests/dba_db4.phpt deleted file mode 100644 index 252797bf41168..0000000000000 --- a/ext/dba/tests/dba_db4.phpt +++ /dev/null @@ -1,32 +0,0 @@ ---TEST-- -DBA DB4 handler test ---SKIPIF-- - ---FILE-- - -===DONE=== ---EXPECT-- -database handler: db4 -3NYNYY -Content String 2 -Content 2 replaced -Read during write: allowed -Content 2 replaced 2nd time -The 6th value -array(3) { - ["key number 6"]=> - string(13) "The 6th value" - ["key2"]=> - string(27) "Content 2 replaced 2nd time" - ["key5"]=> - string(23) "The last content string" -} -===DONE=== diff --git a/ext/dba/tests/dba_dbm.phpt b/ext/dba/tests/dba_dbm.phpt deleted file mode 100644 index fdd7b375f4457..0000000000000 --- a/ext/dba/tests/dba_dbm.phpt +++ /dev/null @@ -1,46 +0,0 @@ ---TEST-- -DBA DBM handler test ---SKIPIF-- - ---FILE-- - -===DONE=== ---EXPECT-- -database handler: dbm -3NYNYY -Content String 2 -Content 2 replaced -Read during write: not allowed -Content 2 replaced 2nd time -The 6th value -array(3) { - ["key number 6"]=> - string(13) "The 6th value" - ["key2"]=> - string(27) "Content 2 replaced 2nd time" - ["key5"]=> - string(23) "The last content string" -} ---NO-LOCK-- -3NYNYY -Content String 2 -Content 2 replaced -Read during write: not allowed -Content 2 replaced 2nd time -The 6th value -array(3) { - ["key number 6"]=> - string(13) "The 6th value" - ["key2"]=> - string(27) "Content 2 replaced 2nd time" - ["key5"]=> - string(23) "The last content string" -} -===DONE=== diff --git a/ext/dba/tests/dba_flatfile.phpt b/ext/dba/tests/dba_flatfile.phpt deleted file mode 100644 index ed1f7373028fb..0000000000000 --- a/ext/dba/tests/dba_flatfile.phpt +++ /dev/null @@ -1,79 +0,0 @@ ---TEST-- -DBA FlatFile handler test ---SKIPIF-- - ---FILE-- - -===DONE=== ---EXPECT-- -database handler: flatfile -3NYNYY -Content String 2 -Content 2 replaced -Read during write: not allowed -Content 2 replaced 2nd time -The 6th value -array(3) { - ["key number 6"]=> - string(13) "The 6th value" - ["key2"]=> - string(27) "Content 2 replaced 2nd time" - ["key5"]=> - string(23) "The last content string" -} ---NO-LOCK-- -3NYNYY -Content String 2 -Content 2 replaced -Read during write: not allowed -Content 2 replaced 2nd time -The 6th value -array(3) { - ["key number 6"]=> - string(13) "The 6th value" - ["key2"]=> - string(27) "Content 2 replaced 2nd time" - ["key5"]=> - string(23) "The last content string" -} -===DONE=== ---UEXPECT-- -database handler: flatfile -3NYNYY -Content String 2 -Content 2 replaced -Read during write: not allowed -Content 2 replaced 2nd time -The 6th value -array(3) { - [u"key number 6"]=> - string(13) "The 6th value" - [u"key2"]=> - string(27) "Content 2 replaced 2nd time" - [u"key5"]=> - string(23) "The last content string" -} ---NO-LOCK-- -3NYNYY -Content String 2 -Content 2 replaced -Read during write: not allowed -Content 2 replaced 2nd time -The 6th value -array(3) { - [u"key number 6"]=> - string(13) "The 6th value" - [u"key2"]=> - string(27) "Content 2 replaced 2nd time" - [u"key5"]=> - string(23) "The last content string" -} -===DONE=== - diff --git a/ext/dba/tests/dba_gdbm.phpt b/ext/dba/tests/dba_gdbm.phpt deleted file mode 100644 index f9b3e3c6067ad..0000000000000 --- a/ext/dba/tests/dba_gdbm.phpt +++ /dev/null @@ -1,34 +0,0 @@ ---TEST-- -DBA GDBM handler test ---SKIPIF-- - ---FILE-- - -===DONE=== ---EXPECTF-- -database handler: gdbm -3NYNYY -Content String 2 -Content 2 replaced -Read during write:%sallowed -Content 2 replaced 2nd time -The 6th value -array(3) { - ["key number 6"]=> - string(13) "The 6th value" - ["key2"]=> - string(27) "Content 2 replaced 2nd time" - ["key5"]=> - string(23) "The last content string" -} -===DONE=== diff --git a/ext/dba/tests/dba_handler.inc b/ext/dba/tests/dba_handler.inc deleted file mode 100644 index 1c3f5127ef384..0000000000000 --- a/ext/dba/tests/dba_handler.inc +++ /dev/null @@ -1,90 +0,0 @@ - \ No newline at end of file diff --git a/ext/dba/tests/dba_inifile.phpt b/ext/dba/tests/dba_inifile.phpt deleted file mode 100644 index c043210c967c4..0000000000000 --- a/ext/dba/tests/dba_inifile.phpt +++ /dev/null @@ -1,79 +0,0 @@ ---TEST-- -DBA INIFILE handler test ---SKIPIF-- - ---FILE-- - -===DONE=== ---EXPECT-- -database handler: inifile -3NYNYY -Content String 2 -Content 2 replaced -Read during write: not allowed -Content 2 replaced 2nd time -The 6th value -array(3) { - ["key number 6"]=> - string(13) "The 6th value" - ["key2"]=> - string(27) "Content 2 replaced 2nd time" - ["key5"]=> - string(23) "The last content string" -} ---NO-LOCK-- -3NYNYY -Content String 2 -Content 2 replaced -Read during write: not allowed -Content 2 replaced 2nd time -The 6th value -array(3) { - ["key number 6"]=> - string(13) "The 6th value" - ["key2"]=> - string(27) "Content 2 replaced 2nd time" - ["key5"]=> - string(23) "The last content string" -} -===DONE=== ---UEXPECT-- -database handler: inifile -3NYNYY -Content String 2 -Content 2 replaced -Read during write: not allowed -Content 2 replaced 2nd time -The 6th value -array(3) { - [u"key number 6"]=> - string(13) "The 6th value" - [u"key2"]=> - string(27) "Content 2 replaced 2nd time" - [u"key5"]=> - string(23) "The last content string" -} ---NO-LOCK-- -3NYNYY -Content String 2 -Content 2 replaced -Read during write: not allowed -Content 2 replaced 2nd time -The 6th value -array(3) { - [u"key number 6"]=> - string(13) "The 6th value" - [u"key2"]=> - string(27) "Content 2 replaced 2nd time" - [u"key5"]=> - string(23) "The last content string" -} -===DONE=== - diff --git a/ext/dba/tests/dba_ndbm.phpt b/ext/dba/tests/dba_ndbm.phpt deleted file mode 100644 index f7955c5813ecd..0000000000000 --- a/ext/dba/tests/dba_ndbm.phpt +++ /dev/null @@ -1,46 +0,0 @@ ---TEST-- -DBA NDBM handler test ---SKIPIF-- - ---FILE-- - -===DONE=== ---EXPECT-- -database handler: ndbm -3NYNYY -Content String 2 -Content 2 replaced -Read during write: not allowed -Content 2 replaced 2nd time -The 6th value -array(3) { - ["key number 6"]=> - string(13) "The 6th value" - ["key2"]=> - string(27) "Content 2 replaced 2nd time" - ["key5"]=> - string(23) "The last content string" -} ---NO-LOCK-- -3NYNYY -Content String 2 -Content 2 replaced -Read during write: not allowed -Content 2 replaced 2nd time -The 6th value -array(3) { - ["key number 6"]=> - string(13) "The 6th value" - ["key2"]=> - string(27) "Content 2 replaced 2nd time" - ["key5"]=> - string(23) "The last content string" -} -===DONE=== diff --git a/ext/dba/tests/dba_qdbm.phpt b/ext/dba/tests/dba_qdbm.phpt deleted file mode 100755 index a7c9ab69e13af..0000000000000 --- a/ext/dba/tests/dba_qdbm.phpt +++ /dev/null @@ -1,34 +0,0 @@ ---TEST-- -DBA QDBM handler test ---SKIPIF-- - ---FILE-- - -===DONE=== ---EXPECTF-- -database handler: qdbm -3NYNYY -Content String 2 -Content 2 replaced -Read during write:%sallowed -Content 2 replaced 2nd time -The 6th value -array(3) { - ["key number 6"]=> - string(13) "The 6th value" - ["key2"]=> - string(27) "Content 2 replaced 2nd time" - ["key5"]=> - string(23) "The last content string" -} - -Warning: dba_popen(%stest0.dbm,r-): Locking cannot be disabled for handler qdbm in %sdba_handler.inc on line %d -===DONE=== diff --git a/ext/dba/tests/skipif.inc b/ext/dba/tests/skipif.inc deleted file mode 100644 index e75000fafdeda..0000000000000 --- a/ext/dba/tests/skipif.inc +++ /dev/null @@ -1,23 +0,0 @@ - diff --git a/ext/dba/tests/test.cdb b/ext/dba/tests/test.cdb deleted file mode 100644 index 21529c6280e7496699eef289964e39490a3b07ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2230 zcmZ?cU;qQRQF=5SfFUrN4o33>Cy$vcp zN&^F9G(1Mr1Bv;85twE`*w7HhGBSd(42@wdBe<+FT+9%z&cp jsN@u&JOfZ3M2kRaBP8|HfZ`fR{OLeG7myF4<&eYywHS$a diff --git a/ext/dba/tests/test.inc b/ext/dba/tests/test.inc deleted file mode 100644 index 04f954541c553..0000000000000 --- a/ext/dba/tests/test.inc +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/ext/dbase/CREDITS b/ext/dbase/CREDITS deleted file mode 100644 index ea6adcaf41d17..0000000000000 --- a/ext/dbase/CREDITS +++ /dev/null @@ -1,2 +0,0 @@ -dBase -Jim Winstead diff --git a/ext/dbase/config.m4 b/ext/dbase/config.m4 deleted file mode 100644 index 84202b320c5da..0000000000000 --- a/ext/dbase/config.m4 +++ /dev/null @@ -1,11 +0,0 @@ -dnl -dnl $Id$ -dnl - -PHP_ARG_ENABLE(dbase,whether to enable dbase support, -[ --enable-dbase Enable the bundled dbase library]) - -if test "$PHP_DBASE" = "yes"; then - AC_DEFINE(DBASE,1,[ ]) - PHP_NEW_EXTENSION(dbase, dbf_head.c dbf_rec.c dbf_misc.c dbf_ndx.c dbase.c, $ext_shared) -fi diff --git a/ext/dbase/config.w32 b/ext/dbase/config.w32 deleted file mode 100644 index 4a424a9926bbe..0000000000000 --- a/ext/dbase/config.w32 +++ /dev/null @@ -1,10 +0,0 @@ -// $Id$ -// vim:ft=javascript - -ARG_ENABLE("dbase", "Enable the bundled dbase library", "no"); - -if (PHP_DBASE != "no") { - EXTENSION("dbase", "dbase.c dbf_head.c dbf_misc.c dbf_ndx.c dbf_rec.c"); - AC_DEFINE('HAVE_DBASE', 1, 'dbase support'); - ADD_FLAG("CFLAGS_DBASE", "/D DBASE=1"); -} diff --git a/ext/dbase/dbase.c b/ext/dbase/dbase.c deleted file mode 100644 index 27cde2723549d..0000000000000 --- a/ext/dbase/dbase.c +++ /dev/null @@ -1,922 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Jim Winstead | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "fopen_wrappers.h" -#include "php_globals.h" - -#include - -#ifdef HAVE_SYS_TYPES_H -#include -#endif - -#if DBASE -#include "php_dbase.h" -#include "dbf.h" -#if defined(THREAD_SAFE) -DWORD DbaseTls; -static int numthreads=0; -void *dbase_mutex; - -typedef struct dbase_global_struct{ - int le_dbhead; -}dbase_global_struct; - -#define DBase_GLOBAL(a) dbase_globals->a - -#define DBase_TLS_VARS \ - dbase_global_struct *dbase_globals; \ - dbase_globals=TlsGetValue(DbaseTls); - -#else -static int le_dbhead; -#define DBase_GLOBAL(a) a -#define DBase_TLS_VARS -#endif - -#include -#include - - -static void _close_dbase(zend_rsrc_list_entry *rsrc TSRMLS_DC) -{ - dbhead_t *dbhead = (dbhead_t *)rsrc->ptr; - - close(dbhead->db_fd); - free_dbf_head(dbhead); -} - - -PHP_MINIT_FUNCTION(dbase) -{ -#if defined(THREAD_SAFE) - dbase_global_struct *dbase_globals; -#ifdef COMPILE_DL_DBASE - CREATE_MUTEX(dbase_mutex, "DBase_TLS"); - SET_MUTEX(dbase_mutex); - numthreads++; - if (numthreads==1){ - if ((DbaseTls=TlsAlloc())==0xFFFFFFFF){ - FREE_MUTEX(dbase_mutex); - return 0; - }} - FREE_MUTEX(dbase_mutex); -#endif - dbase_globals = (dbase_global_struct *) LocalAlloc(LPTR, sizeof(dbase_global_struct)); - TlsSetValue(DbaseTls, (void *) dbase_globals); -#endif - DBase_GLOBAL(le_dbhead) = - zend_register_list_destructors_ex(_close_dbase, NULL, "dbase", module_number); - return SUCCESS; -} - -static PHP_MSHUTDOWN_FUNCTION(dbase) -{ -#if defined(THREAD_SAFE) - dbase_global_struct *dbase_globals; - dbase_globals = TlsGetValue(DbaseTls); - if (dbase_globals != 0) - LocalFree((HLOCAL) dbase_globals); -#ifdef COMPILE_DL_DBASE - SET_MUTEX(dbase_mutex); - numthreads--; - if (!numthreads){ - if (!TlsFree(DbaseTls)){ - FREE_MUTEX(dbase_mutex); - return 0; - }} - FREE_MUTEX(dbase_mutex); -#endif -#endif - return SUCCESS; -} - -/* {{{ proto int dbase_open(string name, int mode) - Opens a dBase-format database file */ -PHP_FUNCTION(dbase_open) -{ - zval **dbf_name, **options; - dbhead_t *dbh; - int handle; - DBase_TLS_VARS; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &dbf_name, &options) == FAILURE) { - WRONG_PARAM_COUNT; - } - convert_to_string_ex(dbf_name); - convert_to_long_ex(options); - - if (!Z_STRLEN_PP(dbf_name)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "The filename cannot be empty."); - RETURN_FALSE; - } - - if (Z_LVAL_PP(options) == 1) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot open %s in write-only mode", Z_STRVAL_PP(dbf_name)); - RETURN_FALSE; - } else if (Z_LVAL_PP(options) < 0 || Z_LVAL_PP(options) > 3) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid access mode %ld", Z_LVAL_PP(options)); - RETURN_FALSE; - } - - if (php_check_open_basedir(Z_STRVAL_PP(dbf_name) TSRMLS_CC)) { - RETURN_FALSE; - } - - dbh = dbf_open(Z_STRVAL_PP(dbf_name), Z_LVAL_PP(options) TSRMLS_CC); - if (dbh == NULL) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to open database %s", Z_STRVAL_PP(dbf_name)); - RETURN_FALSE; - } - - handle = zend_list_insert(dbh, DBase_GLOBAL(le_dbhead)); - RETURN_LONG(handle); -} -/* }}} */ - -/* {{{ proto bool dbase_close(int identifier) - Closes an open dBase-format database file */ -PHP_FUNCTION(dbase_close) -{ - zval **dbh_id; - dbhead_t *dbh; - int dbh_type; - DBase_TLS_VARS; - - if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &dbh_id) == FAILURE)) { - WRONG_PARAM_COUNT; - } - convert_to_long_ex(dbh_id); - dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type); - if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find database for identifier %ld", Z_LVAL_PP(dbh_id)); - RETURN_FALSE; - } - - zend_list_delete(Z_LVAL_PP(dbh_id)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto int dbase_numrecords(int identifier) - Returns the number of records in the database */ -PHP_FUNCTION(dbase_numrecords) -{ - zval **dbh_id; - dbhead_t *dbh; - int dbh_type; - DBase_TLS_VARS; - - if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &dbh_id) == FAILURE)) { - WRONG_PARAM_COUNT; - } - convert_to_long_ex(dbh_id); - dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type); - if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find database for identifier %ld", Z_LVAL_PP(dbh_id)); - RETURN_FALSE; - } - - RETURN_LONG(dbh->db_records); -} -/* }}} */ - -/* {{{ proto int dbase_numfields(int identifier) - Returns the number of fields (columns) in the database */ -PHP_FUNCTION(dbase_numfields) -{ - zval **dbh_id; - dbhead_t *dbh; - int dbh_type; - DBase_TLS_VARS; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &dbh_id) == FAILURE) { - WRONG_PARAM_COUNT; - } - convert_to_long_ex(dbh_id); - dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type); - if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find database for identifier %ld", Z_LVAL_PP(dbh_id)); - RETURN_FALSE; - } - - RETURN_LONG(dbh->db_nfields); -} -/* }}} */ - -/* {{{ proto bool dbase_pack(int identifier) - Packs the database (deletes records marked for deletion) */ -PHP_FUNCTION(dbase_pack) -{ - zval **dbh_id; - dbhead_t *dbh; - int dbh_type; - DBase_TLS_VARS; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &dbh_id) == FAILURE) { - WRONG_PARAM_COUNT; - } - convert_to_long_ex(dbh_id); - dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type); - if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find database for identifier %ld", Z_LVAL_PP(dbh_id)); - RETURN_FALSE; - } - - pack_dbf(dbh); - put_dbf_info(dbh); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto bool dbase_add_record(int identifier, array data) - Adds a record to the database */ -PHP_FUNCTION(dbase_add_record) -{ - zval **dbh_id, **fields, **field; - dbhead_t *dbh; - int dbh_type; - - int num_fields; - dbfield_t *dbf, *cur_f; - char *cp, *t_cp; - int i; - DBase_TLS_VARS; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &dbh_id, &fields) == FAILURE) { - WRONG_PARAM_COUNT; - } - convert_to_long_ex(dbh_id); - - dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type); - if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find database for identifier %ld", Z_LVAL_PP(dbh_id)); - RETURN_FALSE; - } - - num_fields = zend_hash_num_elements(Z_ARRVAL_PP(fields)); - - if (num_fields != dbh->db_nfields) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong number of fields specified"); - RETURN_FALSE; - } - - cp = t_cp = (char *)emalloc(dbh->db_rlen + 1); - *t_cp++ = VALID_RECORD; - - dbf = dbh->db_fields; - for (i = 0, cur_f = dbf; cur_f < &dbf[num_fields]; i++, cur_f++) { - zval tmp; - if (zend_hash_index_find(Z_ARRVAL_PP(fields), i, (void **)&field) == FAILURE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "unexpected error"); - efree(cp); - RETURN_FALSE; - } - - tmp = **field; - zval_copy_ctor(&tmp); - convert_to_string(&tmp); - snprintf(t_cp, cur_f->db_flen+1, cur_f->db_format, Z_STRVAL(tmp)); - zval_dtor(&tmp); - t_cp += cur_f->db_flen; - } - - dbh->db_records++; - if (put_dbf_record(dbh, dbh->db_records, cp) < 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to put record at %ld", dbh->db_records); - efree(cp); - RETURN_FALSE; - } - - put_dbf_info(dbh); - efree(cp); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto bool dbase_replace_record(int identifier, array data, int recnum) - Replaces a record to the database */ -PHP_FUNCTION(dbase_replace_record) -{ - zval **dbh_id, **fields, **field, **recnum; - dbhead_t *dbh; - int dbh_type; - - int num_fields; - dbfield_t *dbf, *cur_f; - char *cp, *t_cp; - int i; - DBase_TLS_VARS; - - if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &dbh_id, &fields, &recnum) == FAILURE) { - WRONG_PARAM_COUNT; - } - convert_to_long_ex(dbh_id); - convert_to_long_ex(recnum); - - dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type); - if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find database for identifier %ld", Z_LVAL_PP(dbh_id)); - RETURN_FALSE; - } - - num_fields = zend_hash_num_elements(Z_ARRVAL_PP(fields)); - - if (num_fields != dbh->db_nfields) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Wrong number of fields specified"); - RETURN_FALSE; - } - - cp = t_cp = (char *)emalloc(dbh->db_rlen + 1); - *t_cp++ = VALID_RECORD; - - dbf = dbh->db_fields; - for (i = 0, cur_f = dbf; cur_f < &dbf[num_fields]; i++, cur_f++) { - if (zend_hash_index_find(Z_ARRVAL_PP(fields), i, (void **)&field) == FAILURE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "unexpected error"); - efree(cp); - RETURN_FALSE; - } - convert_to_string_ex(field); - snprintf(t_cp, cur_f->db_flen+1, cur_f->db_format, Z_STRVAL_PP(field)); - t_cp += cur_f->db_flen; - } - - if (put_dbf_record(dbh, Z_LVAL_PP(recnum), cp) < 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to put record at %ld", dbh->db_records); - efree(cp); - RETURN_FALSE; - } - - put_dbf_info(dbh); - efree(cp); - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto bool dbase_delete_record(int identifier, int record) - Marks a record to be deleted */ -PHP_FUNCTION(dbase_delete_record) -{ - zval **dbh_id, **record; - dbhead_t *dbh; - int dbh_type; - DBase_TLS_VARS; - - if (ZEND_NUM_ARGS() != 2 || (zend_get_parameters_ex(2, &dbh_id, &record) == FAILURE)) { - WRONG_PARAM_COUNT; - } - convert_to_long_ex(dbh_id); - convert_to_long_ex(record); - - dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type); - if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find database for identifier %ld", Z_LVAL_PP(dbh_id)); - RETURN_FALSE; - } - - if (del_dbf_record(dbh, Z_LVAL_PP(record)) < 0) { - if (Z_LVAL_PP(record) > dbh->db_records) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "record %ld out of bounds", Z_LVAL_PP(record)); - } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to delete record %ld", Z_LVAL_PP(record)); - } - RETURN_FALSE; - } - - put_dbf_info(dbh); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ php_dbase_get_record - */ -static void php_dbase_get_record(INTERNAL_FUNCTION_PARAMETERS, int assoc) -{ - zval **dbh_id, **record; - dbhead_t *dbh; - int dbh_type; - dbfield_t *dbf, *cur_f; - char *data, *fnp, *str_value; - size_t cursize = 0; - long overflow_test; - int errno_save; - DBase_TLS_VARS; - - if (ZEND_NUM_ARGS() != 2 || (zend_get_parameters_ex(2, &dbh_id, &record) == FAILURE)) { - WRONG_PARAM_COUNT; - } - convert_to_long_ex(dbh_id); - convert_to_long_ex(record); - - dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type); - if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find database for identifier %ld", Z_LVAL_PP(dbh_id)); - RETURN_FALSE; - } - - if ((data = get_dbf_record(dbh, Z_LVAL_PP(record))) == NULL) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Tried to read bad record %ld", Z_LVAL_PP(record)); - RETURN_FALSE; - } - - dbf = dbh->db_fields; - - array_init(return_value); - - fnp = NULL; - for (cur_f = dbf; cur_f < &dbf[dbh->db_nfields]; cur_f++) { - /* get the value */ - str_value = (char *)emalloc(cur_f->db_flen + 1); - - if(cursize <= (unsigned)cur_f->db_flen) { - cursize = cur_f->db_flen + 1; - fnp = erealloc(fnp, cursize); - } - snprintf(str_value, cursize, cur_f->db_format, get_field_val(data, cur_f, fnp)); - - /* now convert it to the right php internal type */ - switch (cur_f->db_type) { - case 'C': - case 'D': - if (!assoc) { - add_next_index_string(return_value, str_value, 1); - } else { - add_assoc_string(return_value, cur_f->db_fname, str_value, 1); - } - break; - case 'I': /* FALLS THROUGH */ - case 'N': - if (cur_f->db_fdc == 0) { - /* Large integers in dbase can be larger than long */ - errno_save = errno; - overflow_test = strtol(str_value, NULL, 10); - if (errno == ERANGE) { - /* If the integer is too large, keep it as string */ - if (!assoc) { - add_next_index_string(return_value, str_value, 1); - } else { - add_assoc_string(return_value, cur_f->db_fname, str_value, 1); - } - } else { - if (!assoc) { - add_next_index_long(return_value, overflow_test); - } else { - add_assoc_long(return_value, cur_f->db_fname, overflow_test); - } - } - errno = errno_save; - } else { - if (!assoc) { - add_next_index_double(return_value, atof(str_value)); - } else { - add_assoc_double(return_value, cur_f->db_fname, atof(str_value)); - } - } - break; - case 'F': - if (!assoc) { - add_next_index_double(return_value, atof(str_value)); - } else { - add_assoc_double(return_value, cur_f->db_fname, atof(str_value)); - } - break; - case 'L': /* we used to FALL THROUGH, but now we check for T/Y and F/N - and insert 1 or 0, respectively. db_fdc is the number of - decimals, which we don't care about. 3/14/2001 LEW */ - if ((*str_value == 'T') || (*str_value == 'Y')) { - if (!assoc) { - add_next_index_long(return_value, strtol("1", NULL, 10)); - } else { - add_assoc_long(return_value, cur_f->db_fname,strtol("1", NULL, 10)); - } - } else { - if ((*str_value == 'F') || (*str_value == 'N')) { - if (!assoc) { - add_next_index_long(return_value, strtol("0", NULL, 10)); - } else { - add_assoc_long(return_value, cur_f->db_fname,strtol("0", NULL, 10)); - } - } else { - if (!assoc) { - add_next_index_long(return_value, strtol(" ", NULL, 10)); - } else { - add_assoc_long(return_value, cur_f->db_fname,strtol(" ", NULL, 10)); - } - } - } - break; - case 'M': - /* this is a memo field. don't know how to deal with this yet */ - break; - default: - /* should deal with this in some way */ - break; - } - efree(str_value); - } - - efree(fnp); - - /* mark whether this record was deleted */ - if (data[0] == '*') { - add_assoc_long(return_value, "deleted", 1); - } else { - add_assoc_long(return_value, "deleted", 0); - } - - free(data); -} -/* }}} */ - -/* {{{ proto array dbase_get_record(int identifier, int record) - Returns an array representing a record from the database */ -PHP_FUNCTION(dbase_get_record) -{ - php_dbase_get_record(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); -} -/* }}} */ - -/* From Martin Kuba */ -/* {{{ proto array dbase_get_record_with_names(int identifier, int record) - Returns an associative array representing a record from the database */ -PHP_FUNCTION(dbase_get_record_with_names) -{ - php_dbase_get_record(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); -} -/* }}} */ - -/* {{{ proto bool dbase_create(string filename, array fields) - Creates a new dBase-format database file */ -PHP_FUNCTION(dbase_create) -{ - zval **filename, **fields, **field, **value; - int fd; - dbhead_t *dbh; - - int num_fields; - dbfield_t *dbf, *cur_f; - int i, rlen, handle; - DBase_TLS_VARS; - - if (ZEND_NUM_ARGS() != 2 || (zend_get_parameters_ex(2, &filename, &fields) == FAILURE)) { - WRONG_PARAM_COUNT; - } - convert_to_string_ex(filename); - - if (Z_TYPE_PP(fields) != IS_ARRAY) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expected array as second parameter"); - RETURN_FALSE; - } - - if (php_check_open_basedir(Z_STRVAL_PP(filename) TSRMLS_CC)) { - RETURN_FALSE; - } - - if ((fd = VCWD_OPEN_MODE(Z_STRVAL_PP(filename), O_BINARY|O_RDWR|O_CREAT, 0644)) < 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create database (%d): %s", errno, strerror(errno)); - RETURN_FALSE; - } - - num_fields = zend_hash_num_elements(Z_ARRVAL_PP(fields)); - - if (num_fields <= 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create database without fields"); - RETURN_FALSE; - } - - /* have to use regular malloc() because this gets free()d by - code in the dbase library */ - dbh = (dbhead_t *)malloc(sizeof(dbhead_t)); - dbf = (dbfield_t *)malloc(sizeof(dbfield_t) * num_fields); - if (!dbh || !dbf) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to allocate memory for header info"); - RETURN_FALSE; - } - - /* initialize the header structure */ - dbh->db_fields = dbf; - dbh->db_fd = fd; - dbh->db_dbt = DBH_TYPE_NORMAL; - strcpy(dbh->db_date, "19930818"); - dbh->db_records = 0; - dbh->db_nfields = num_fields; - dbh->db_hlen = sizeof(struct dbf_dhead) + 1 + num_fields * sizeof(struct dbf_dfield); - - rlen = 1; - /** - * Patch by greg@darkphoton.com - **/ - /* make sure that the db_format entries for all fields are set to NULL to ensure we - don't seg fault if there's an error and we need to call free_dbf_head() before all - fields have been defined. */ - for (i = 0, cur_f = dbf; i < num_fields; i++, cur_f++) { - cur_f->db_format = NULL; - } - /** - * end patch - */ - - - for (i = 0, cur_f = dbf; i < num_fields; i++, cur_f++) { - /* look up the first field */ - if (zend_hash_index_find(Z_ARRVAL_PP(fields), i, (void **)&field) == FAILURE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to find field %d", i); - free_dbf_head(dbh); - RETURN_FALSE; - } - - /* field name */ - if (zend_hash_index_find(Z_ARRVAL_PP(field), 0, (void **)&value) == FAILURE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "expected field name as first element of list in field %d", i); - free_dbf_head(dbh); - RETURN_FALSE; - } - convert_to_string_ex(value); - if (Z_STRLEN_PP(value) > 10 || Z_STRLEN_PP(value) == 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid field name '%s' (must be non-empty and less than or equal to 10 characters)", Z_STRVAL_PP(value)); - free_dbf_head(dbh); - RETURN_FALSE; - } - copy_crimp(cur_f->db_fname, Z_STRVAL_PP(value), Z_STRLEN_PP(value)); - - /* field type */ - if (zend_hash_index_find(Z_ARRVAL_PP (field), 1, (void **)&value) == FAILURE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "expected field type as second element of list in field %d", i); - RETURN_FALSE; - } - convert_to_string_ex(value); - cur_f->db_type = toupper(*Z_STRVAL_PP(value)); - - cur_f->db_fdc = 0; - - /* verify the field length */ - switch (cur_f->db_type) { - case 'L': - cur_f->db_flen = 1; - break; - case 'M': - cur_f->db_flen = 10; - dbh->db_dbt = DBH_TYPE_MEMO; - /* should create the memo file here, probably */ - break; - case 'D': - cur_f->db_flen = 8; - break; - case 'F': - cur_f->db_flen = 20; - break; - case 'N': - case 'C': - /* field length */ - if (zend_hash_index_find(Z_ARRVAL_PP (field), 2, (void **)&value) == FAILURE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "expected field length as third element of list in field %d", i); - free_dbf_head(dbh); - RETURN_FALSE; - } - convert_to_long_ex(value); - cur_f->db_flen = Z_LVAL_PP(value); - - if (cur_f->db_type == 'N') { - if (zend_hash_index_find(Z_ARRVAL_PP (field), 3, (void **)&value) == FAILURE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "expected field precision as fourth element of list in field %d", i); - free_dbf_head(dbh); - RETURN_FALSE; - } - convert_to_long_ex(value); - cur_f->db_fdc = Z_LVAL_PP(value); - } - break; - default: - php_error_docref(NULL TSRMLS_CC, E_WARNING, "unknown field type '%c'", cur_f->db_type); - free_dbf_head(dbh); - RETURN_FALSE; - } - cur_f->db_foffset = rlen; - rlen += cur_f->db_flen; - - cur_f->db_format = get_dbf_f_fmt(cur_f); - } - - dbh->db_rlen = rlen; - put_dbf_info(dbh); - - handle = zend_list_insert(dbh, DBase_GLOBAL(le_dbhead)); - RETURN_LONG(handle); -} -/* }}} */ - -/* {{{ arginfo */ -static -ZEND_BEGIN_ARG_INFO(arginfo_dbase_open, 0) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, mode) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dbase_close, 0) - ZEND_ARG_INFO(0, identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dbase_numrecords, 0) - ZEND_ARG_INFO(0, identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dbase_numfields, 0) - ZEND_ARG_INFO(0, identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dbase_pack, 0) - ZEND_ARG_INFO(0, identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dbase_add_record, 0) - ZEND_ARG_INFO(0, identifier) - ZEND_ARG_ARRAY_INFO(0, data, 0) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dbase_replace_record, 0) - ZEND_ARG_INFO(0, identifier) - ZEND_ARG_ARRAY_INFO(0, data, 0) - ZEND_ARG_INFO(0, recnum) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dbase_delete_record, 0) - ZEND_ARG_INFO(0, identifier) - ZEND_ARG_INFO(0, record) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dbase_get_record, 0) - ZEND_ARG_INFO(0, identifier) - ZEND_ARG_INFO(0, record) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dbase_get_record_with_names, 0) - ZEND_ARG_INFO(0, identifier) - ZEND_ARG_INFO(0, record) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dbase_create, 0) - ZEND_ARG_INFO(0, filename) - ZEND_ARG_ARRAY_INFO(0, fields, 0) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_dbase_get_header_info, 0) - ZEND_ARG_INFO(0, database_handle) -ZEND_END_ARG_INFO() - -/* }}} */ - -/* {{{ dbase_functions[] - */ -zend_function_entry dbase_functions[] = { - PHP_FE(dbase_open, arginfo_dbase_open) - PHP_FE(dbase_create, arginfo_dbase_create) - PHP_FE(dbase_close, arginfo_dbase_close) - PHP_FE(dbase_numrecords, arginfo_dbase_numrecords) - PHP_FE(dbase_numfields, arginfo_dbase_numfields) - PHP_FE(dbase_add_record, arginfo_dbase_add_record) - PHP_FE(dbase_replace_record, arginfo_dbase_replace_record) - PHP_FE(dbase_get_record, arginfo_dbase_get_record) - PHP_FE(dbase_get_record_with_names, arginfo_dbase_get_record_with_names) - PHP_FE(dbase_delete_record, arginfo_dbase_delete_record) - PHP_FE(dbase_pack, arginfo_dbase_pack) - PHP_FE(dbase_get_header_info, arginfo_dbase_get_header_info) - {NULL, NULL, NULL} -}; -/* }}} */ - -/* Added by Zak Greant */ -/* {{{ proto array dbase_get_header_info(int database_handle) - */ -PHP_FUNCTION(dbase_get_header_info) -{ - zval **dbh_id, *row; - dbfield_t *dbf, *cur_f; - dbhead_t *dbh; - int dbh_type; - DBase_TLS_VARS; - - if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &dbh_id) == FAILURE)) { - WRONG_PARAM_COUNT; - } - convert_to_long_ex(dbh_id); - - dbh = zend_list_find(Z_LVAL_PP(dbh_id), &dbh_type); - if (!dbh || dbh_type != DBase_GLOBAL(le_dbhead)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find database for identifier %ld", Z_LVAL_PP(dbh_id)); - RETURN_FALSE; - } - - array_init(return_value); - - dbf = dbh->db_fields; - for (cur_f = dbf; cur_f < &dbh->db_fields[dbh->db_nfields]; ++cur_f) { - MAKE_STD_ZVAL(row); - array_init(row); - - add_next_index_zval(return_value, row); - - /* field name */ - add_assoc_string(row, "name", cur_f->db_fname, 1); - - /* field type */ - switch (cur_f->db_type) { - case 'C': add_assoc_string(row, "type", "character", 1); break; - case 'D': add_assoc_string(row, "type", "date", 1); break; - case 'I': add_assoc_string(row, "type", "integer", 1); break; - case 'N': add_assoc_string(row, "type", "number", 1); break; - case 'L': add_assoc_string(row, "type", "boolean", 1); break; - case 'M': add_assoc_string(row, "type", "memo", 1); break; - case 'F': add_assoc_string(row, "type", "float", 1); break; - default: add_assoc_string(row, "type", "unknown", 1); break; - } - - /* length of field */ - add_assoc_long(row, "length", cur_f->db_flen); - - /* number of decimals in field */ - switch (cur_f->db_type) { - case 'N': - case 'I': - add_assoc_long(row, "precision", cur_f->db_fdc); - break; - default: - add_assoc_long(row, "precision", 0); - } - - /* format for printing %s etc */ - add_assoc_string(row, "format", cur_f->db_format, 1); - - /* offset within record */ - add_assoc_long(row, "offset", cur_f->db_foffset); - } -} -/* }}} */ - -zend_module_entry dbase_module_entry = { - STANDARD_MODULE_HEADER, - "dbase", dbase_functions, PHP_MINIT(dbase), PHP_MSHUTDOWN(dbase), NULL, NULL, NULL, NO_VERSION_YET, STANDARD_MODULE_PROPERTIES -}; - - -#ifdef COMPILE_DL_DBASE -ZEND_GET_MODULE(dbase) - -#if defined(PHP_WIN32) && defined(THREAD_SAFE) - -/*NOTE: You should have an odbc.def file where you -export DllMain*/ -BOOL WINAPI DllMain(HANDLE hModule, - DWORD ul_reason_for_call, - LPVOID lpReserved) -{ - return 1; -} -#endif -#endif - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/dbase/dbase.dsp b/ext/dbase/dbase.dsp deleted file mode 100644 index 7c75304983e69..0000000000000 --- a/ext/dbase/dbase.dsp +++ /dev/null @@ -1,151 +0,0 @@ -# Microsoft Developer Studio Project File - Name="dbase" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=dbase - Win32 Release_TS -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "dbase.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "dbase.mak" CFG="dbase - Win32 Release_TS" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "dbase - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "dbase - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "dbase - Win32 Release_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_TS" -# PROP BASE Intermediate_Dir "Release_TS" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_TS" -# PROP Intermediate_Dir "Release_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DBASE" /D ZTS=1 /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D "WIN32" /D "DBASE_EXPORTS" /D "COMPILE_DL_DBASE" /D ZTS=1 /D HAVE_DBASE=1 /D ZEND_DEBUG=0 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D DBASE=1 /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x406 /d "NDEBUG" -# ADD RSC /l 0x406 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 -# ADD LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_dbase.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "dbase - Win32 Debug_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Debug_TS" -# PROP BASE Intermediate_Dir "Debug_TS" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Debug_TS" -# PROP Intermediate_Dir "Debug_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DBASE" /D ZTS=1 /YX /FD /c -# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DBASE_EXPORTS" /D "COMPILE_DL_DBASE" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DBASE=1 /D DBASE=1 /FR /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x406 /d "NDEBUG" -# ADD RSC /l 0x406 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 -# ADD LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_dbase.dll" /libpath:"..\..\Debug_TS" -# SUBTRACT LINK32 /pdb:none - -!ENDIF - -# Begin Target - -# Name "dbase - Win32 Release_TS" -# Name "dbase - Win32 Debug_TS" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\dbase.c -# End Source File -# Begin Source File - -SOURCE=.\dbf_head.c -# End Source File -# Begin Source File - -SOURCE=.\dbf_misc.c -# End Source File -# Begin Source File - -SOURCE=.\dbf_ndx.c -# End Source File -# Begin Source File - -SOURCE=.\dbf_rec.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\dbf.h -# End Source File -# Begin Source File - -SOURCE=.\dbf_head.h -# End Source File -# Begin Source File - -SOURCE=.\dbf_misc.h -# End Source File -# Begin Source File - -SOURCE=.\dbf_ndx.h -# End Source File -# Begin Source File - -SOURCE=.\dbf_rec.h -# End Source File -# Begin Source File - -SOURCE=.\php_dbase.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/ext/dbase/dbf.h b/ext/dbase/dbf.h deleted file mode 100644 index c7ee8fde714e3..0000000000000 --- a/ext/dbase/dbf.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (c) 1991, 1992, 1993 Brad Eacker, - * (Music, Intuition, Software, and Computers) - * All Rights Reserved - */ - -/* - * dbf header structure on disk (pc dbase III) - * - * Basic info taken from: - * "File Formats for Popular PC Software" - * Jeff Walden - * (c) 1986 John Wiley & Sons, Inc. - */ - -#ifndef DBF_H_ -#define DBF_H_ - -#include -#include -#ifdef WIN32 -#include -#else -#include -#endif - -/* So we can use O_BINARY on non-Win32 systems. */ -#if !defined(O_BINARY) && !defined(WIN32) -#define O_BINARY (0) -#endif - -struct dbf_dhead { - char dbh_dbt; /* memo (dbt) file present */ - char dbh_date[3]; /* last update YY, MM, DD */ - char dbh_records[4]; /* number of records LE */ - char dbh_hlen[2]; /* header length LE */ - char dbh_rlen[2]; /* record length LE */ - char dbh_res[20]; /* padding */ -}; -#define DBH_DATE_YEAR 0 /* byte offset for year in dbh_date */ -#define DBH_DATE_MONTH 1 -#define DBH_DATE_DAY 2 - -/* - * field description on disk - */ - -#define DBF_NAMELEN 11 - -struct dbf_dfield { - char dbf_name[DBF_NAMELEN]; /* name of field */ - char dbf_type; /* type of field */ - char dbf_fda[4]; /* something for dbase III */ - char dbf_flen[2]; /* field length [and decimal if N] */ - char dbf_res[14]; /* padding */ -}; - -struct db_field { - char db_fname[DBF_NAMELEN+1]; /* 0 terminated */ - char db_type; /* type of field */ - int db_flen; /* length of field */ - int db_fdc; /* number of decimals in field */ - - char *db_format; /* format for printing %s etc */ - int db_foffset; /* offset within record */ -}; -typedef struct db_field dbfield_t; - -struct db_head { - int db_fd; - unsigned char db_dbt; /* dbt present */ - char db_date[9]; /* date of last update in db format */ - long db_records; /* number of records */ - int db_hlen; /* header length */ - int db_rlen; /* record length */ - - int db_nfields; /* number of fields */ - dbfield_t *db_fields; /* field info */ - char *db_name; /* name of dbf file */ - int db_cur_rec; /* current record */ -}; -typedef struct db_head dbhead_t; - -#define DBH_TYPE_NORMAL 0x03 -#define DBH_TYPE_MEMO 0x83 - -#define VALID_RECORD ' ' -#define DELETED_RECORD '*' - -#include "dbf_head.h" -#include "dbf_misc.h" -#include "dbf_rec.h" - -#endif /* DBF_H_ */ diff --git a/ext/dbase/dbf_head.c b/ext/dbase/dbf_head.c deleted file mode 100644 index 9c9363dfbbe31..0000000000000 --- a/ext/dbase/dbf_head.c +++ /dev/null @@ -1,293 +0,0 @@ -/* - * Copyright (c) 1991, 1992, 1993 Brad Eacker, - * (Music, Intuition, Software, and Computers) - * All Rights Reserved - */ - -#include -#include - -#include "php.h" -#include "dbf.h" - -void free_dbf_head(dbhead_t *dbh); -int get_dbf_field(dbhead_t *dbh, dbfield_t *dbf); - -/* - * get the header info from the file - * basic header info & field descriptions - */ -dbhead_t *get_dbf_head(int fd) -{ - dbhead_t *dbh; - struct dbf_dhead dbhead; - dbfield_t *dbf, *cur_f, *tdbf; - int ret, nfields, offset, gf_retval; - - if ((dbh = (dbhead_t *)calloc(1, sizeof(dbhead_t))) == NULL) - return NULL; - if (lseek(fd, 0, 0) < 0) { - free(dbh); - return NULL; - } - if ((ret = read(fd, &dbhead, sizeof(dbhead))) <= 0) { - free(dbh); - return NULL; - } - - /* build in core info */ - dbh->db_fd = fd; - dbh->db_dbt = dbhead.dbh_dbt; - dbh->db_records = get_long(dbhead.dbh_records); - dbh->db_hlen = get_short(dbhead.dbh_hlen); - dbh->db_rlen = get_short(dbhead.dbh_rlen); - - db_set_date(dbh->db_date, dbhead.dbh_date[DBH_DATE_YEAR] + 1900, - dbhead.dbh_date[DBH_DATE_MONTH], - dbhead.dbh_date[DBH_DATE_DAY]); - - /* malloc enough memory for the maximum number of fields: - 32 * 1024 = 32K dBase5 (for Win) seems to allow that many */ - tdbf = (dbfield_t *)calloc(1, sizeof(dbfield_t)*1024); - - offset = 1; - nfields = 0; - gf_retval = 0; - for (cur_f = tdbf; gf_retval < 2 && nfields < 1024; cur_f++) { - gf_retval = get_dbf_field(dbh, cur_f); - - if (gf_retval < 0) { - free_dbf_head(dbh); - free(tdbf); - return NULL; - } - if (gf_retval != 2 ) { - cur_f->db_foffset = offset; - offset += cur_f->db_flen; - nfields++; - } - } - dbh->db_nfields = nfields; - - /* malloc the right amount of space for records, copy and destroy old */ - dbf = (dbfield_t *)malloc(sizeof(dbfield_t)*nfields); - memcpy(dbf, tdbf, sizeof(dbfield_t)*nfields); - free(tdbf); - - dbh->db_fields = dbf; - - return dbh; -} - -/* - * free up the header info built above - */ -void free_dbf_head(dbhead_t *dbh) -{ - dbfield_t *dbf, *cur_f; - int nfields; - - dbf = dbh->db_fields; - nfields = dbh->db_nfields; - for (cur_f = dbf; cur_f < &dbf[nfields]; cur_f++) { - if (cur_f->db_format) { - free(cur_f->db_format); - } - } - - free(dbf); - free(dbh); -} - -/* - * put out the header info - */ -int put_dbf_head(dbhead_t *dbh) -{ - int fd = dbh->db_fd; - struct dbf_dhead dbhead; - int ret; - - memset (&dbhead, 0, sizeof(dbhead)); - - /* build on disk info */ - dbhead.dbh_dbt = dbh->db_dbt; - put_long(dbhead.dbh_records, dbh->db_records); - put_short(dbhead.dbh_hlen, dbh->db_hlen); - put_short(dbhead.dbh_rlen, dbh->db_rlen); - - /* put the date spec'd into the on disk header */ - dbhead.dbh_date[DBH_DATE_YEAR] =(char)(db_date_year(dbh->db_date) - - 1900); - dbhead.dbh_date[DBH_DATE_MONTH]=(char)(db_date_month(dbh->db_date)); - dbhead.dbh_date[DBH_DATE_DAY] =(char)(db_date_day(dbh->db_date)); - - if (lseek(fd, 0, 0) < 0) - return -1; - if ((ret = write(fd, &dbhead, sizeof(dbhead))) <= 0) - return -1; - return ret; -} - -/* - * get a field off the disk from the current file offset - */ -int get_dbf_field(dbhead_t *dbh, dbfield_t *dbf) -{ - struct dbf_dfield dbfield; - int ret; - - if ((ret = read(dbh->db_fd, &dbfield, sizeof(dbfield))) <= 0) { - return ret; - } - - /* Check for the '0Dh' field terminator , if found return '2' - which will tell the loop we are at the end of fields */ - if (dbfield.dbf_name[0]==0x0d) { - return 2; - } - - /* build the field name */ - copy_crimp(dbf->db_fname, dbfield.dbf_name, DBF_NAMELEN); - - dbf->db_type = dbfield.dbf_type; - switch (dbf->db_type) { - case 'N': - case 'F': - dbf->db_flen = dbfield.dbf_flen[0]; - dbf->db_fdc = dbfield.dbf_flen[1]; - break; - default: - dbf->db_flen = get_short(dbfield.dbf_flen); - break; - } - - if ((dbf->db_format = get_dbf_f_fmt(dbf)) == NULL) { - /* something went wrong, most likely this fieldtype is not supported */ - return -1; - } - - return 0; -} - -/* - * put a field out on the disk at the current file offset - */ -int put_dbf_field(dbhead_t *dbh, dbfield_t *dbf) -{ - struct dbf_dfield dbfield; - char *scp, *dcp; - int ret; - - memset (&dbfield, 0, sizeof(dbfield)); - - /* build the on disk field info */ - scp = dbf->db_fname; dcp = dbfield.dbf_name; - - strncpy(dbfield.dbf_name, dbf->db_fname, DBF_NAMELEN); - - dbfield.dbf_type = dbf->db_type; - switch (dbf->db_type) { - case 'N': - dbfield.dbf_flen[0] = dbf->db_flen; - dbfield.dbf_flen[1] = dbf->db_fdc; - break; - default: - put_short(dbfield.dbf_flen, dbf->db_flen); - } - - /* now write it out to disk */ - if ((ret = write(dbh->db_fd, &dbfield, sizeof(dbfield))) <= 0) { - return ret; - } - return 1; -} - -/* - * put out all the info at the top of the file... - */ -static char end_stuff[2] = {0x0d, 0}; - -void put_dbf_info(dbhead_t *dbh) -{ - dbfield_t *dbf; - char *cp; - int fcnt; - - if ((cp = db_cur_date(NULL))) { - strlcpy(dbh->db_date, cp, 8); - free(cp); - } - put_dbf_head(dbh); - dbf = dbh->db_fields; - for (fcnt = dbh->db_nfields; fcnt > 0; fcnt--, dbf++) - put_dbf_field(dbh, dbf); - write(dbh->db_fd, end_stuff, 1); -} - -char *get_dbf_f_fmt(dbfield_t *dbf) -{ - char format[100]; - - /* build the field format for printf */ - switch (dbf->db_type) { - case 'C': - snprintf(format, sizeof(format), "%%-%ds", dbf->db_flen); - break; - case 'N': - case 'L': - case 'D': - case 'F': - snprintf(format, sizeof(format), "%%%ds", dbf->db_flen); - break; - case 'M': - strlcpy(format, "%s", sizeof(format)); - break; - default: - return NULL; - } - return (char *)strdup(format); -} - -dbhead_t *dbf_open(char *dp, int o_flags TSRMLS_DC) -{ - int fd; - char *cp; - dbhead_t *dbh; - - cp = dp; - if ((fd = VCWD_OPEN(cp, o_flags|O_BINARY)) < 0) { - return NULL; - } - - if ((dbh = get_dbf_head(fd)) == NULL) { - return NULL; - } - - dbh->db_cur_rec = 0; - return dbh; -} - -void dbf_head_info(dbhead_t *dbh) -{ - int nfields; - dbfield_t *dbf, *cur_f; - - nfields = dbh->db_nfields; - printf("# fields: %d, record len: %d, total records %ld\n", - nfields, dbh->db_rlen, dbh->db_records); - dbf = dbh->db_fields; - for (cur_f = dbf; cur_f < &dbf[nfields] ; cur_f++) { - printf("# %s, %c, %d, %d\n", cur_f->db_fname, - cur_f->db_type, cur_f->db_flen, cur_f->db_fdc); - } -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/dbase/dbf_head.h b/ext/dbase/dbf_head.h deleted file mode 100644 index 9a17a3a91f39b..0000000000000 --- a/ext/dbase/dbf_head.h +++ /dev/null @@ -1,11 +0,0 @@ -#include "php.h" - -extern dbhead_t *get_dbf_head(int fd); -void free_dbf_head(dbhead_t *dbh); -extern int put_dbf_head(dbhead_t *dbh); -extern int get_dbf_field(dbhead_t *dbh, dbfield_t *dbf); -extern int put_dbf_field(dbhead_t *dbh, dbfield_t *dbf); -void put_dbf_info(dbhead_t *dbh); -extern char *get_dbf_f_fmt(dbfield_t *dbf); -extern dbhead_t *dbf_open(char *dp, int o_flags TSRMLS_DC); -void dbf_head_info(dbhead_t *dbh); diff --git a/ext/dbase/dbf_misc.c b/ext/dbase/dbf_misc.c deleted file mode 100644 index d5727839642f0..0000000000000 --- a/ext/dbase/dbf_misc.c +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright (c) 1991, 1992, 1993 Brad Eacker, - * (Music, Intuition, Software, and Computers) - * All Rights Reserved - */ -#include -#include -#include - -#include "dbf_misc.h" - -#include "php_reentrancy.h" - -/* - * routine to change little endian long to host long - */ -long get_long(char *cp) -{ - int ret; - unsigned char *source = (unsigned char *)cp; - - ret = *source++; - ret += ((*source++)<<8); - ret += ((*source++)<<16); - ret += ((*source++)<<24); - - return ret; -} - -void put_long(char *cp, long lval) -{ - *cp++ = lval & 0xff; - *cp++ = (lval >> 8) & 0xff; - *cp++ = (lval >> 16) & 0xff; - *cp++ = (lval >> 24) & 0xff; -} - -/* - * routine to change little endian short to host short - */ -int get_short(char *cp) -{ - int ret; - unsigned char *source = (unsigned char *)cp; - - ret = *source++; - ret += ((*source++)<<8); - - return ret; -} - -void put_short(char *cp, int sval) -{ - *cp++ = sval & 0xff; - *cp++ = (sval >> 8) & 0xff; -} - -double get_double(char *cp) -{ - double ret; - unsigned char *dp = (unsigned char *)&ret; - - dp[7] = *cp++; - dp[6] = *cp++; - dp[5] = *cp++; - dp[4] = *cp++; - dp[3] = *cp++; - dp[2] = *cp++; - dp[1] = *cp++; - dp[0] = *cp++; - - return ret; -} - -void put_double(char *cp, double fval) -{ - unsigned char *dp = (unsigned char *)&fval; - - cp[7] = *dp++; - cp[6] = *dp++; - cp[5] = *dp++; - cp[4] = *dp++; - cp[3] = *dp++; - cp[2] = *dp++; - cp[1] = *dp++; - cp[0] = *dp++; -} - -void copy_fill(char *dp, char *sp, int len) -{ - while (*sp && len > 0) { - *dp++ = *sp++; - len--; - } - while (len-- > 0) - *dp++ = ' '; -} - -void copy_crimp(char *dp, char *sp, int len) -{ - while (len-- > 0) { - *dp++ = *sp++; - } - *dp = 0; - for (dp-- ; *dp == ' '; dp--) { - *dp = 0; - } - -} - -void db_set_date(char *cp, int year, int month, int day) -{ - if (month > 12) - month = 0; - if (day > 31) - day = 0; - snprintf(cp, 9, "%04d%02d%02d", year, month, day); -} - -int db_date_year(char *cp) -{ - int year, i; - - for (year = 0, i = 0; i < 4; i++) - year = year * 10 + (cp[i] - '0'); - return year; -} - -int db_date_month(char *cp) -{ - int month, i; - - for (month = 0, i = 4; i < 6; i++) - month = month * 10 + (cp[i] - '0'); - return month; -} - -int db_date_day(char *cp) -{ - int day, i; - - for (day = 0, i = 6; i < 8; i++) - day = day * 10 + (cp[i] - '0'); - return day; -} - -#include - -char *db_cur_date(char *cp) -{ - struct tm *ctm, tmbuf; - time_t c_time; - - c_time = time((time_t *)NULL); - ctm = php_localtime_r(&c_time, &tmbuf); - if (cp == NULL) - cp = (char *)malloc(9); - - if (ctm == NULL || cp == NULL) - return NULL; - - db_set_date(cp, ctm->tm_year + 1900, ctm->tm_mon + 1, ctm->tm_mday); - - return cp; -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/dbase/dbf_misc.h b/ext/dbase/dbf_misc.h deleted file mode 100644 index 37fe8b0ea98ae..0000000000000 --- a/ext/dbase/dbf_misc.h +++ /dev/null @@ -1,13 +0,0 @@ -void put_long(char *cp, long lval); -extern long get_long(char *cp); -extern int get_short(char *cp); -void put_short(char *cp, int sval); -void put_double(char *cp, double fval); -extern double get_double(char *cp); -void copy_fill(char *dp, char *sp, int len); -void copy_crimp(char *dp, char *sp, int len); -void db_set_date(char *cp, int year, int month, int day); -extern int db_date_year(char *cp); -extern int db_date_month(char *cp); -extern int db_date_day(char *cp); -extern char *db_cur_date(char *cp); diff --git a/ext/dbase/dbf_ndx.c b/ext/dbase/dbf_ndx.c deleted file mode 100644 index 121a0e81e263f..0000000000000 --- a/ext/dbase/dbf_ndx.c +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright (c) 1991, 1992, 1993 Brad Eacker, - * (Music, Intuition, Software, and Computers) - * All Rights Reserved - */ - -#include -#include - -#include "dbf.h" -#include "dbf_ndx.h" - -/* - * get the ndx header for this file - */ -ndx_header_t *ndx_get_header(int fd) -{ - dndx_header_t *dp; - ndx_header_t *np; - - if ((dp = (dndx_header_t *)malloc(NDX_PAGE_SZ)) == NULL) - return NULL; - if ((np = (ndx_header_t *)malloc(sizeof(ndx_header_t))) == NULL) { - free(dp); - return NULL; - } - if ((lseek(fd, 0, 0) < 0) || (read(fd, dp, NDX_PAGE_SZ) < 0)) { - free(dp); free(np); - return NULL; - } - np->ndx_hpage = dp; - np->ndx_fd = fd; - np->ndx_start_pg = get_long(dp->dndx_st_pg); - np->ndx_total_pgs = get_long(dp->dndx_tot_pg); - np->ndx_key_len = get_short(dp->dndx_key_len); - np->ndx_keys_ppg = get_short(dp->dndx_keys_ppg); - np->ndx_key_type = get_short(dp->dndx_key_type); - np->ndx_key_size = get_long(dp->dndx_size_key); - np->ndx_key_name = dp->dndx_key_name; - np->ndx_unique = dp->dndx_unique; - - np->ndx_fp = NULL; - - return np; -} - -static ndx_page_t *ndx_get_page(ndx_header_t *hp, int pageno) -{ - ndx_page_t *fp; - dndx_page_t *dp; - ndx_record_t *rp; - -#if PHP_DEBUG - printf("getting page %d", pageno); -#endif - if ((fp = (ndx_page_t *)malloc(sizeof(ndx_page_t))) == NULL) - return NULL; - if ((dp = (dndx_page_t *)malloc(NDX_PAGE_SZ)) == NULL) { - free(fp); - return NULL; - } - if ((rp = (ndx_record_t *)malloc(sizeof(ndx_record_t) * hp->ndx_keys_ppg)) == NULL) { - free(dp); free(fp); - return NULL; - } - fp->ndxp_page_data = dp; - if ((lseek(hp->ndx_fd, pageno * NDX_PAGE_SZ, 0) < 0) || - (read(hp->ndx_fd, dp, NDX_PAGE_SZ) < 0)) { - free(fp); free(dp); - return NULL; - } - fp->ndxp_parent = NULL; - fp->ndxp_page_no = pageno; - fp->ndxp_num_keys = get_long(dp->dndxp_num_keys); - memset(rp, 0, sizeof(ndx_record_t) * hp->ndx_keys_ppg); - fp->ndxp_records = rp; - fp->ndxp_header_p = hp; -#if PHP_DEBUG - printf(", n_keys %ld\n", fp->ndxp_num_keys); -#endif - return fp; -} - -/* - * get the first entry for this ndx - */ -static ndx_page_t *ndx_get_first_pg(ndx_header_t *hp) -{ - ndx_page_t *fp; - - if (hp->ndx_fp) - return hp->ndx_fp; - if ((fp = ndx_get_page(hp, hp->ndx_start_pg))) { - hp->ndx_fp = fp; - } - return fp; -} - -static ndx_record_t *ndx_get_record(ndx_page_t *fp, int rec_no) -{ - ndx_record_t *rp; - ndx_header_t *hp = fp->ndxp_header_p; - struct dndx_record *drp; - -#if PHP_DEBUG - printf("page %ld, rec %d: ", fp->ndxp_page_no, rec_no); -#endif - if (rec_no >= fp->ndxp_num_keys) - return NULL; - rp = &(fp->ndxp_records[rec_no]); - if (!rp->ndxr_page) { - rp->ndxr_page = fp; - drp = (dndx_record_t *)((char *)&fp->ndxp_page_data->dndx_rp - + rec_no * hp->ndx_key_size); - rp->ndxr_left = get_long(drp->dndx_left_pg); - rp->ndxr_rec = get_long(drp->dndx_dbf_rec); - rp->ndxr_key_data = &drp->dndx_key_data; - rp->ndxr_p_nrec = rec_no; - } -#if PHP_DEBUG - printf("left %ld, dbf_rec %ld, data '%s'\n", rp->ndxr_left, - rp->ndxr_rec, rp->ndxr_key_data); -#endif - return rp; -} - -static ndx_record_t *ndx_scan_down(ndx_header_t *hp, ndx_page_t *fp, int recno) -{ - ndx_page_t *np; - ndx_record_t *rp; - - while ((rp = ndx_get_record(fp, recno)) && (rp->ndxr_rec == 0)) { - np = ndx_get_page(hp, rp->ndxr_left); - np->ndxp_parent = fp; - np->ndxp_par_rno = recno; - fp = np; - recno = 0; - } - return rp; -} - -static ndx_record_t *ndx_scan_up(ndx_header_t *hp, ndx_page_t *fp, int recno) -{ - ndx_record_t *rp; - - if (fp == NULL) - rp = NULL; - else if (recno < fp->ndxp_num_keys) { - rp = ndx_scan_down(hp, fp, recno); - } else { - rp = ndx_scan_up(hp, fp->ndxp_parent, fp->ndxp_par_rno + 1); - } - return rp; -} - -ndx_record_t *ndx_get_first_rec(ndx_header_t *hp) -{ - ndx_page_t *fp; - ndx_record_t *rp = NULL; - - if ((fp = ndx_get_first_pg(hp))) { - fp->ndxp_last_key = 0; - rp = ndx_scan_down(hp, fp, 0); - } - hp->ndx_cur_rec = rp; - return rp; -} - -ndx_record_t *ndx_get_next_rec(ndx_header_t *hp, ndx_record_t *rp) -{ - ndx_page_t *fp; - int rec_no; - - fp = rp->ndxr_page; - rec_no = rp->ndxr_p_nrec + 1; - if (rec_no < fp->ndxp_num_keys) { - rp = ndx_scan_down(hp, fp, rec_no); - } else { - rp = ndx_scan_up(hp, fp->ndxp_parent, fp->ndxp_par_rno + 1); - } - return rp; -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/dbase/dbf_ndx.h b/ext/dbase/dbf_ndx.h deleted file mode 100644 index 4bc3d29641f36..0000000000000 --- a/ext/dbase/dbf_ndx.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (c) 1993 Brad Eacker, - * (Music, Intuition, Software, and Computers) - * All Rights Reserved - */ - -/* - * dbf .ndx header structure on disk and in memory - * - * Basic info taken from: - * "Clipper Programming Guide, 3rd Edition, Version 5.01" - * by Rick Spence - */ - -#ifndef DBF_NDX_H_ -#define DBF_NDX_H_ - -#include "dbf.h" - -#define NDX_PAGE_SZ 512 - -/* on disk ndx header */ -struct dndx_header { - char dndx_st_pg[4]; /* starting page number */ - char dndx_tot_pg[4]; /* total number of pages */ - char dndx_filler1[4]; /* space */ - char dndx_key_len[2]; /* key length */ - char dndx_keys_ppg[2]; /* number of keys per page */ - char dndx_key_type[2]; /* key type */ - char dndx_size_key[4]; /* size of the key record */ - char dndx_filler2; /* space */ - char dndx_unique; /* whether or not done with unique */ - char dndx_key_name[488]; /* string defining the key */ -}; -typedef struct dndx_header dndx_header_t; - -/* in memory ndx header */ -struct ndx_header { - long ndx_start_pg; - long ndx_total_pgs; - unsigned short ndx_key_len; - unsigned short ndx_keys_ppg; - unsigned short ndx_key_type; - char ndx_unique; - long ndx_key_size; - char *ndx_key_name; - int ndx_fd; - struct ndx_page *ndx_fp; - dndx_header_t *ndx_hpage; - struct ndx_record *ndx_cur_rec; -}; -typedef struct ndx_header ndx_header_t; - -/* these are the possible values in the key type field */ -#define NDX_CHAR_TYPE 00 -#define NDX_NUM_TYPE 01 - -/* on disk key record */ -struct dndx_record { - char dndx_left_pg[4]; /* number of left page */ - char dndx_dbf_rec[4]; /* dbf record number */ - char dndx_key_data; /* key data */ -}; -typedef struct dndx_record dndx_record_t; - -struct ndx_record { - long ndxr_left; - long ndxr_rec; - char *ndxr_key_data; - struct ndx_page *ndxr_page; /* page pointer to where we are from*/ - int ndxr_p_nrec; /* number of the record within page */ -}; -typedef struct ndx_record ndx_record_t; - -struct dndx_page { - char dndxp_num_keys[4]; /* number of keys on this page */ - struct dndx_record dndx_rp; -}; -typedef struct dndx_page dndx_page_t; - -struct ndx_page { - long ndxp_page_no; - long ndxp_num_keys; - dndx_page_t *ndxp_page_data; - ndx_header_t *ndxp_header_p; - long ndxp_last_key; - struct ndx_page *ndxp_parent; /* parent page */ - int ndxp_par_rno; /* record number within parent */ - struct ndx_record *ndxp_records; -}; -typedef struct ndx_page ndx_page_t; - -extern ndx_header_t *ndx_get_header(int); - -extern ndx_record_t *ndx_get_first_rec(ndx_header_t *); -extern ndx_record_t *ndx_get_next_rec(ndx_header_t *, ndx_record_t *); - -#endif /* DBF_NDX_H_ */ diff --git a/ext/dbase/dbf_rec.c b/ext/dbase/dbf_rec.c deleted file mode 100644 index 31a15eded5234..0000000000000 --- a/ext/dbase/dbf_rec.c +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright (c) 1993 Brad Eacker, - * (Music, Intuition, Software, and Computers) - * All Rights Reserved - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#include "ext/standard/flock_compat.h" - -#include -#include - -#include "dbf.h" - -int get_piece(dbhead_t *dbh, long offset, char *cp, int len); -int put_piece(dbhead_t *dbh, long offset, char *cp, int len); - -/* - * get a record off the database - */ -char *get_dbf_record(dbhead_t *dbh, long rec_num) -{ - long offset; - char *cp; - - if (rec_num > dbh->db_records) { - return NULL; - } - if ((cp = (char *)malloc(dbh->db_rlen)) == NULL) { - return NULL; - } - - /* go to the correct spot on the file */ - offset = dbh->db_hlen + (rec_num - 1) * dbh->db_rlen; - if (get_piece(dbh, offset, cp, dbh->db_rlen) != dbh->db_rlen) { - free(cp); - cp = NULL; - } - if (cp) - dbh->db_cur_rec = rec_num; - return cp; -} - -int -get_piece(dbhead_t *dbh, long offset, char *cp, int len) -{ - /* go to the correct spot on the file */ - if ( lseek(dbh->db_fd, offset, 0) < 0 ) { - return -1; - } - - /* read the record into the allocated space */ - return read(dbh->db_fd, cp, len); -} - -/* - * put a record to the database - */ -long put_dbf_record(dbhead_t *dbh, long rec_num, char *cp) -{ - long offset; - - if (rec_num == 0) { - rec_num = dbh->db_records; - } - if (rec_num > dbh->db_records) { - return 0L; - } - /* go to the correct spot on the file */ - offset = dbh->db_hlen + (rec_num - 1) * dbh->db_rlen; - if (put_piece(dbh, offset, cp, dbh->db_rlen) != dbh->db_rlen) { - rec_num = -1; - } - return rec_num; -} - -int put_piece(dbhead_t *dbh, long offset, char *cp, int len) -{ - /* go to the correct spot on the file */ - if ( lseek(dbh->db_fd, offset, 0) < 0 ) { - return -1; - } - - /* write the record into the file */ - return write(dbh->db_fd, cp, len); -} - -int del_dbf_record(dbhead_t *dbh, long rec_num) -{ - int ret = 0; - char *cp; - - if (rec_num > dbh->db_records) - return -1; - if ((cp = get_dbf_record(dbh, rec_num))) { - *cp = DELETED_RECORD; - ret = put_dbf_record(dbh, rec_num, cp); - free(cp); - } - return ret; -} - -void pack_dbf(dbhead_t *dbh) -{ - long out_off, in_off; - int rec_cnt, new_cnt; - char *cp; - - if ((cp = (char *)malloc(dbh->db_rlen)) == NULL) { - return; - } - in_off = out_off = dbh->db_hlen; - - new_cnt = 0; - rec_cnt = dbh->db_records; - while (rec_cnt > 0) { - if (get_piece(dbh, in_off, cp, dbh->db_rlen) < 0) - break; - - if (*cp != DELETED_RECORD) { - /* write the record into the file */ - if (put_piece(dbh, out_off, cp, dbh->db_rlen) < 0) - break; - out_off += dbh->db_rlen; - new_cnt++; - } - in_off += dbh->db_rlen; - rec_cnt--; - } - free(cp); - - /* Try to truncate the file to the right size. */ - if (ftruncate(dbh->db_fd, out_off) != 0) { - TSRMLS_FETCH(); - php_error_docref(NULL TSRMLS_CC, E_WARNING, "dbase_pack() couldn't truncate the file to the right size. Some deleted records may still be left in there"); - } - - if (rec_cnt == 0) - dbh->db_records = new_cnt; -} - -/* routine to get a field from a record */ -char *get_field_val(char *rp, dbfield_t *fldp, char *cp) -{ - int flen = fldp->db_flen; - - if ( !cp ) - cp = (char *)malloc(flen + 1); - if ( cp ) { - strncpy(cp, &rp[fldp->db_foffset], flen); - cp[flen] = 0; - } - return cp; -} - -void put_field_val(char *rp, dbfield_t *fldp, char *cp) -{ - strncpy(&rp[fldp->db_foffset], cp, fldp->db_flen); -} - -/* - * output a record - */ -void out_rec(dbhead_t *dbh, dbfield_t *dbf, char *cp) -{ - dbfield_t *cur_f; - int nfields = dbh->db_nfields; - char *fnp = (char *)malloc(dbh->db_rlen); - - printf("%c", *cp); - for (cur_f = dbf; cur_f < &dbf[nfields] ; cur_f++) { - printf(" "); - printf(cur_f->db_format, get_field_val(cp, cur_f, fnp)); - } - printf("\n"); - free(fnp); -} - -/* check for record validity */ -int is_valid_rec(char *cp) -{ - if (cp && (*cp == VALID_RECORD)) - return 1; - else - return 0; -} - -/* get the next record */ -char *dbf_get_next(dbhead_t *dbh) -{ - return get_dbf_record(dbh, dbh->db_cur_rec + 1); -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/dbase/dbf_rec.h b/ext/dbase/dbf_rec.h deleted file mode 100644 index 6407c702f6672..0000000000000 --- a/ext/dbase/dbf_rec.h +++ /dev/null @@ -1,10 +0,0 @@ -extern char *get_dbf_record(dbhead_t *dbh, long rec_num); -extern long put_dbf_record(dbhead_t *dbh, long rec_num, char *cp); -extern int put_piece(dbhead_t *dbh, long offset, char *cp, int len); -extern int del_dbf_record(dbhead_t *dbh, long rec_num); -void pack_dbf(dbhead_t *dbh); -extern char *get_field_val(char *rp, dbfield_t *fldp, char *cp); -void put_field_val(char *rp, dbfield_t *fldp, char *cp); -void out_rec(dbhead_t *dbh, dbfield_t *dbf, char *cp); -extern int is_valid_rec(char *cp); -extern char *dbf_get_next(dbhead_t *dbh); diff --git a/ext/dbase/package.xml b/ext/dbase/package.xml deleted file mode 100644 index a1c576fa1abf8..0000000000000 --- a/ext/dbase/package.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - dbase - dBase database file access functions - - - jimw - Jim Winstead - jimw@php.net - lead - - - -These functions allow you to access records stored -in dBase-format (dbf) databases. - -There is no support for indexes or memo fields. -There is no support for locking, too. -Two concurrent webserver processes modifying the -same dBase file will very likely ruin your database. - -dBase files are simple sequential files of fixed length records. -Records are appended to the end of the file and delete records -are kept until you call dbase_pack(). - - PHP - - beta - 5.0rc1 - 2004-03-19 - -package.xml added to support installation using pear installer - - - - - - - - - - - - - - - - - - - - - - diff --git a/ext/dbase/php_dbase.h b/ext/dbase/php_dbase.h deleted file mode 100644 index 737ba3d9ec17e..0000000000000 --- a/ext/dbase/php_dbase.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Jim Winstead | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef PHP_DBASE_H -#define PHP_DBASE_H -#if DBASE -extern zend_module_entry dbase_module_entry; -#define dbase_module_ptr &dbase_module_entry - -PHP_MINIT_FUNCTION(dbase); -PHP_FUNCTION(dbase_open); -PHP_FUNCTION(dbase_create); -PHP_FUNCTION(dbase_close); -PHP_FUNCTION(dbase_numrecords); -PHP_FUNCTION(dbase_numfields); -PHP_FUNCTION(dbase_add_record); -PHP_FUNCTION(dbase_get_record); -PHP_FUNCTION(dbase_delete_record); -PHP_FUNCTION(dbase_pack); -PHP_FUNCTION(dbase_get_record_with_names); -PHP_FUNCTION(dbase_get_header_info); -#else -#define dbase_module_ptr NULL -#endif - -#define phpext_dbase_ptr dbase_module_ptr - -#endif /* PHP_DBASE_H */ diff --git a/ext/dbase/tests/001.phpt b/ext/dbase/tests/001.phpt deleted file mode 100644 index a483f5ff7795e..0000000000000 --- a/ext/dbase/tests/001.phpt +++ /dev/null @@ -1,66 +0,0 @@ ---TEST-- -dbase_create() tests ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -int(%d) -string(38) "dbase_create(): unknown field type 'E'" -bool(false) -string(38) "dbase_create(): unknown field type '-'" -bool(false) -int(%d) -string(71) "dbase_create(): expected field name as first element of list in field 0" -bool(false) -string(56) "dbase_create(): Unable to create database without fields" -bool(false) -string(67) "Argument 2 passed to dbase_create() must be an array, integer given" -string(50) "dbase_create(): Expected array as second parameter" -bool(false) -string(%d) "unlink(%s001.dbf): No such file or directory" -string(66) "Argument 2 passed to dbase_create() must be an array, string given" -string(50) "dbase_create(): Expected array as second parameter" -bool(false) -Done diff --git a/ext/dbase/tests/002.phpt b/ext/dbase/tests/002.phpt deleted file mode 100644 index d5dd5c9e02c76..0000000000000 --- a/ext/dbase/tests/002.phpt +++ /dev/null @@ -1,54 +0,0 @@ ---TEST-- -dbase_open() tests ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -Warning: dbase_open(): Invalid access mode -1 in %s on line %d -bool(false) - -Warning: dbase_open(): Invalid access mode 1000 in %s on line %d -bool(false) - -Warning: dbase_open(): unable to open database %s in %s on line %d -bool(false) - -Warning: dbase_open(): unable to open database %s in %s on line %d -bool(false) - -Warning: dbase_open(): The filename cannot be empty. in %s on line %d -bool(false) -int(%d) -int(%d) -Done diff --git a/ext/dbase/tests/bug31754.phpt b/ext/dbase/tests/bug31754.phpt deleted file mode 100644 index 32f802b57bb5b..0000000000000 --- a/ext/dbase/tests/bug31754.phpt +++ /dev/null @@ -1,26 +0,0 @@ ---TEST-- -Bug #31754: (dbase_open() fails for mode = 1) ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -Warning: dbase_open(): Cannot open /tmp/bug31754.dbf in write-only mode in %sbug31754.php on line %d diff --git a/ext/dom/CREDITS b/ext/dom/CREDITS deleted file mode 100644 index b78e376d6edd9..0000000000000 --- a/ext/dom/CREDITS +++ /dev/null @@ -1,2 +0,0 @@ -DOM -Christian Stocker, Rob Richards, Marcus Boerger diff --git a/ext/dom/TODO b/ext/dom/TODO deleted file mode 100644 index 52afb18216e10..0000000000000 --- a/ext/dom/TODO +++ /dev/null @@ -1,4 +0,0 @@ -For 5.1 -1) enhance XPath functionality -2) look at auto encoding support for in/output -3) What DOM object types are really needed (i.e. not currently using DOMString) diff --git a/ext/dom/attr.c b/ext/dom/attr.c deleted file mode 100644 index e82c0d933419f..0000000000000 --- a/ext/dom/attr.c +++ /dev/null @@ -1,280 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if HAVE_LIBXML && HAVE_DOM - -#include "php_dom.h" - - -/* -* class DOMAttr extends DOMNode -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-637646024 -* Since: -*/ - -zend_function_entry php_dom_attr_class_functions[] = { - PHP_FALIAS(isId, dom_attr_is_id, NULL) - PHP_ME(domattr, __construct, NULL, ZEND_ACC_PUBLIC) - {NULL, NULL, NULL} -}; - -/* {{{ proto void DOMAttr::__construct(string name, [string value]) U */ -PHP_METHOD(domattr, __construct) -{ - - zval *id; - xmlAttrPtr nodep = NULL; - xmlNodePtr oldnode = NULL; - dom_object *intern; - char *name, *value = NULL; - int name_len, value_len, name_valid; - - php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC); - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&|s&", &id, dom_attr_class_entry, &name, &name_len, UG(utf8_conv), &value, &value_len, UG(utf8_conv)) == FAILURE) { - php_std_error_handling(); - return; - } - php_std_error_handling(); - - intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); - - name_valid = xmlValidateName((xmlChar *) name, 0); - if (name_valid != 0) { - php_dom_throw_error(INVALID_CHARACTER_ERR, 1 TSRMLS_CC); - RETURN_FALSE; - } - - nodep = xmlNewProp(NULL, (xmlChar *) name, (xmlChar *) value); - - if (!nodep) { - php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC); - RETURN_FALSE; - } - - if (intern != NULL) { - oldnode = dom_object_get_node(intern); - if (oldnode != NULL) { - php_libxml_node_free_resource(oldnode TSRMLS_CC); - } - php_libxml_increment_node_ptr((php_libxml_node_object *)intern, (xmlNodePtr)nodep, (void *)intern TSRMLS_CC); - } -} - -/* }}} end DOMAttr::__construct */ - - -/* {{{ name string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-1112119403 -Since: -*/ -int dom_attr_name_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlAttrPtr attrp; - - attrp = (xmlAttrPtr) dom_object_get_node(obj); - - if (attrp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - ZVAL_XML_STRING(*retval, (char *) (attrp->name), ZSTR_DUPLICATE); - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ specified boolean -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-862529273 -Since: -*/ -int dom_attr_specified_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - /* TODO */ - ALLOC_ZVAL(*retval); - ZVAL_TRUE(*retval); - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ value string -readonly=no -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-221662474 -Since: -*/ -int dom_attr_value_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlAttrPtr attrp; - xmlChar *content; - - attrp = (xmlAttrPtr) dom_object_get_node(obj); - - if (attrp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - - - if ((content = xmlNodeGetContent((xmlNodePtr) attrp)) != NULL) { - ZVAL_XML_STRING(*retval, (char *)content, ZSTR_DUPLICATE); - xmlFree(content); - } else { - ZVAL_EMPTY_TEXT(*retval); - } - - return SUCCESS; - -} - -int dom_attr_value_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - zval value_copy; - xmlAttrPtr attrp; - - attrp = (xmlAttrPtr) dom_object_get_node(obj); - - if (attrp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - if (attrp->children) { - node_list_unlink(attrp->children TSRMLS_CC); - } - - if (newval->type != IS_STRING) { - if(newval->refcount > 1) { - value_copy = *newval; - zval_copy_ctor(&value_copy); - newval = &value_copy; - } - convert_to_string_with_converter(newval, UG(utf8_conv)); - } - - xmlNodeSetContentLen((xmlNodePtr) attrp, (xmlChar *) Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1); - - if (newval == &value_copy) { - zval_dtor(newval); - } - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ ownerElement DOMElement -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Attr-ownerElement -Since: DOM Level 2 -*/ -int dom_attr_owner_element_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNodePtr nodep, nodeparent; - int ret; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - nodeparent = nodep->parent; - if (!nodeparent) { - return FAILURE; - } - - ALLOC_ZVAL(*retval); - - if (NULL == (*retval = php_dom_create_object(nodeparent, &ret, NULL, *retval, obj TSRMLS_CC))) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object"); - return FAILURE; - } - return SUCCESS; - -} - -/* }}} */ - - - -/* {{{ schemaTypeInfo DOMTypeInfo -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Attr-schemaTypeInfo -Since: DOM Level 3 -*/ -int dom_attr_schema_type_info_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not yet implemented"); - ALLOC_ZVAL(*retval); - ZVAL_NULL(*retval); - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ proto boolean dom_attr_is_id() U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Attr-isId -Since: DOM Level 3 -*/ -PHP_FUNCTION(dom_attr_is_id) -{ - zval *id; - dom_object *intern; - xmlAttrPtr attrp; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_attr_class_entry) == FAILURE) { - return; - } - - DOM_GET_OBJ(attrp, id, xmlAttrPtr, intern); - - if (attrp->atype == XML_ATTRIBUTE_ID) { - RETURN_TRUE; - } else { - RETURN_FALSE; - } -} -/* }}} end dom_attr_is_id */ - -#endif diff --git a/ext/dom/cdatasection.c b/ext/dom/cdatasection.c deleted file mode 100644 index 9931cbff29764..0000000000000 --- a/ext/dom/cdatasection.c +++ /dev/null @@ -1,78 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class DOMCdataSection extends DOMText -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-667469212 -* Since: -*/ - -zend_function_entry php_dom_cdatasection_class_functions[] = { - PHP_ME(domcdatasection, __construct, NULL, ZEND_ACC_PUBLIC) - {NULL, NULL, NULL} -}; - -/* {{{ proto void DOMCdataSection::__construct(string value) U */ -PHP_METHOD(domcdatasection, __construct) -{ - - zval *id; - xmlNodePtr nodep = NULL, oldnode = NULL; - dom_object *intern; - char *value = NULL; - int value_len; - - php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC); - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &id, dom_cdatasection_class_entry, &value, &value_len, UG(utf8_conv)) == FAILURE) { - php_std_error_handling(); - return; - } - php_std_error_handling(); - - nodep = xmlNewCDataBlock(NULL, (xmlChar *) value, value_len); - - if (!nodep) { - php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC); - RETURN_FALSE; - } - - intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); - if (intern != NULL) { - oldnode = (xmlNodePtr)intern->ptr; - if (oldnode != NULL) { - php_libxml_node_free_resource(oldnode TSRMLS_CC); - } - php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC); - } -} -/* }}} end DOMCdataSection::__construct */ - -#endif diff --git a/ext/dom/characterdata.c b/ext/dom/characterdata.c deleted file mode 100644 index 448e4eb0b6624..0000000000000 --- a/ext/dom/characterdata.c +++ /dev/null @@ -1,394 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class DOMCharacterData extends DOMNode -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-FF21A306 -* Since: -*/ - -zend_function_entry php_dom_characterdata_class_functions[] = { - PHP_FALIAS(substringData, dom_characterdata_substring_data, NULL) - PHP_FALIAS(appendData, dom_characterdata_append_data, NULL) - PHP_FALIAS(insertData, dom_characterdata_insert_data, NULL) - PHP_FALIAS(deleteData, dom_characterdata_delete_data, NULL) - PHP_FALIAS(replaceData, dom_characterdata_replace_data, NULL) - {NULL, NULL, NULL} -}; - -/* {{{ data string -readonly=no -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-72AB8359 -Since: -*/ -int dom_characterdata_data_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNodePtr nodep; - xmlChar *content; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - - if ((content = xmlNodeGetContent(nodep)) != NULL) { - ZVAL_XML_STRING(*retval, content, ZSTR_DUPLICATE); - xmlFree(content); - } else { - ZVAL_EMPTY_TEXT(*retval); - } - - return SUCCESS; -} - -int dom_characterdata_data_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - zval value_copy; - xmlNode *nodep; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - if (newval->type != IS_STRING) { - if(newval->refcount > 1) { - value_copy = *newval; - zval_copy_ctor(&value_copy); - newval = &value_copy; - } - convert_to_string_with_converter(newval, UG(utf8_conv)); - } - - xmlNodeSetContentLen(nodep, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1); - - if (newval == &value_copy) { - zval_dtor(newval); - } - - return SUCCESS; -} - -/* }}} */ - -/* {{{ length long -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-7D61178C -Since: -*/ -int dom_characterdata_length_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNodePtr nodep; - xmlChar *content; - long length = 0; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - - content = xmlNodeGetContent(nodep); - - if (content) { - length = xmlUTF8Strlen(content); - xmlFree(content); - } - - ZVAL_LONG(*retval, length); - - return SUCCESS; -} - -/* }}} */ - - -/* {{{ proto string dom_characterdata_substring_data(int offset, int count) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6531BCCF -Since: -*/ -PHP_FUNCTION(dom_characterdata_substring_data) -{ - zval *id; - xmlChar *cur; - xmlChar *substring; - xmlNodePtr node; - long offset, count; - int length; - dom_object *intern; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll", &id, dom_characterdata_class_entry, &offset, &count) == FAILURE) { - return; - } - - DOM_GET_OBJ(node, id, xmlNodePtr, intern); - - cur = xmlNodeGetContent(node); - if (cur == NULL) { - RETURN_FALSE; - } - - length = xmlUTF8Strlen(cur); - - if (offset < 0 || count < 0 || offset > length) { - xmlFree(cur); - php_dom_throw_error(INDEX_SIZE_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - - if ((offset + count) > length) { - count = length - offset; - } - - substring = xmlUTF8Strsub(cur, offset, count); - xmlFree(cur); - - if (substring) { - RETVAL_XML_STRING(substring, ZSTR_DUPLICATE); - xmlFree(substring); - } else { - RETVAL_EMPTY_TEXT(); - } -} -/* }}} end dom_characterdata_substring_data */ - - -/* {{{ proto void dom_characterdata_append_data(string arg) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-32791A2F -Since: -*/ -PHP_FUNCTION(dom_characterdata_append_data) -{ - zval *id; - xmlNode *nodep; - dom_object *intern; - char *arg; - int arg_len; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &id, dom_characterdata_class_entry, &arg, &arg_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); -#if LIBXML_VERSION < 20627 -/* Implement logic from libxml xmlTextConcat to add suport for comments and PI */ - if ((nodep->content == (xmlChar *) &(nodep->properties)) || - ((nodep->doc != NULL) && (nodep->doc->dict != NULL) && - xmlDictOwns(nodep->doc->dict, nodep->content))) { - nodep->content = xmlStrncatNew(nodep->content, arg, arg_len); - } else { - nodep->content = xmlStrncat(nodep->content, arg, arg_len); - } - nodep->properties = NULL; -#else - xmlTextConcat(nodep, arg, arg_len); -#endif - RETURN_TRUE; -} -/* }}} end dom_characterdata_append_data */ - - -/* {{{ proto void dom_characterdata_insert_data(int offset, string arg) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3EDB695F -Since: -*/ -PHP_FUNCTION(dom_characterdata_insert_data) -{ - zval *id; - xmlChar *cur, *first, *second; - xmlNodePtr node; - char *arg; - long offset; - int length, arg_len; - dom_object *intern; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ols&", &id, dom_characterdata_class_entry, &offset, &arg, &arg_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(node, id, xmlNodePtr, intern); - - cur = xmlNodeGetContent(node); - if (cur == NULL) { - RETURN_FALSE; - } - - length = xmlUTF8Strlen(cur); - - if (offset < 0 || offset > length) { - xmlFree(cur); - php_dom_throw_error(INDEX_SIZE_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - - first = xmlUTF8Strndup(cur, offset); - second = xmlUTF8Strsub(cur, offset, length - offset); - xmlFree(cur); - - xmlNodeSetContent(node, first); - xmlNodeAddContent(node, arg); - xmlNodeAddContent(node, second); - - xmlFree(first); - xmlFree(second); - - RETURN_TRUE; -} -/* }}} end dom_characterdata_insert_data */ - - -/* {{{ proto void dom_characterdata_delete_data(int offset, int count) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-7C603781 -Since: -*/ -PHP_FUNCTION(dom_characterdata_delete_data) -{ - zval *id; - xmlChar *cur, *substring, *second; - xmlNodePtr node; - long offset, count; - int length; - dom_object *intern; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll", &id, dom_characterdata_class_entry, &offset, &count) == FAILURE) { - return; - } - - DOM_GET_OBJ(node, id, xmlNodePtr, intern); - - cur = xmlNodeGetContent(node); - if (cur == NULL) { - RETURN_FALSE; - } - - length = xmlUTF8Strlen(cur); - - if (offset < 0 || count < 0 || offset > length) { - xmlFree(cur); - php_dom_throw_error(INDEX_SIZE_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - - if (offset > 0) { - substring = xmlUTF8Strsub(cur, 0, offset); - } else { - substring = NULL; - } - - if ((offset + count) > length) { - count = length - offset; - } - - second = xmlUTF8Strsub(cur, offset + count, length - offset); - substring = xmlStrcat(substring, second); - - xmlNodeSetContent(node, substring); - - xmlFree(cur); - xmlFree(second); - xmlFree(substring); - - RETURN_TRUE; -} -/* }}} end dom_characterdata_delete_data */ - - -/* {{{ proto void dom_characterdata_replace_data(int offset, int count, string arg) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-E5CBA7FB -Since: -*/ -PHP_FUNCTION(dom_characterdata_replace_data) -{ - zval *id; - xmlChar *cur, *substring, *second = NULL; - xmlNodePtr node; - char *arg; - long offset, count; - int length, arg_len; - dom_object *intern; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Olls&", &id, dom_characterdata_class_entry, &offset, &count, &arg, &arg_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(node, id, xmlNodePtr, intern); - - cur = xmlNodeGetContent(node); - if (cur == NULL) { - RETURN_FALSE; - } - - length = xmlUTF8Strlen(cur); - - if (offset < 0 || count < 0 || offset > length) { - xmlFree(cur); - php_dom_throw_error(INDEX_SIZE_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - - if (offset > 0) { - substring = xmlUTF8Strsub(cur, 0, offset); - } else { - substring = NULL; - } - - if ((offset + count) > length) { - count = length - offset; - } - - if (offset < length) { - second = xmlUTF8Strsub(cur, offset + count, length - offset); - } - - substring = xmlStrcat(substring, arg); - substring = xmlStrcat(substring, second); - - xmlNodeSetContent(node, substring); - - xmlFree(cur); - if (second) { - xmlFree(second); - } - xmlFree(substring); - - RETURN_TRUE; -} -/* }}} end dom_characterdata_replace_data */ -#endif diff --git a/ext/dom/comment.c b/ext/dom/comment.c deleted file mode 100644 index 4d68ae5a393a1..0000000000000 --- a/ext/dom/comment.c +++ /dev/null @@ -1,77 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class DOMComment extends DOMCharacterData -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-1728279322 -* Since: -*/ - -zend_function_entry php_dom_comment_class_functions[] = { - PHP_ME(domcomment, __construct, NULL, ZEND_ACC_PUBLIC) - {NULL, NULL, NULL} -}; - -/* {{{ proto void DOMComment::__construct([string value]) U */ -PHP_METHOD(domcomment, __construct) -{ - - zval *id; - xmlNodePtr nodep = NULL, oldnode = NULL; - dom_object *intern; - char *value = NULL; - int value_len; - - php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC); - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|s&", &id, dom_comment_class_entry, &value, &value_len, UG(utf8_conv)) == FAILURE) { - php_std_error_handling(); - return; - } - php_std_error_handling(); - - nodep = xmlNewComment((xmlChar *) value); - - if (!nodep) { - php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC); - RETURN_FALSE; - } - - intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); - if (intern != NULL) { - oldnode = (xmlNodePtr)intern->ptr; - if (oldnode != NULL) { - php_libxml_node_free_resource(oldnode TSRMLS_CC); - } - php_libxml_increment_node_ptr((php_libxml_node_object *)intern, (xmlNodePtr)nodep, (void *)intern TSRMLS_CC); - } -} -/* }}} end DOMComment::__construct */ -#endif diff --git a/ext/dom/config.m4 b/ext/dom/config.m4 deleted file mode 100644 index 4a083e4509fbb..0000000000000 --- a/ext/dom/config.m4 +++ /dev/null @@ -1,38 +0,0 @@ -dnl -dnl $Id$ -dnl - -PHP_ARG_ENABLE(dom, whether to enable DOM support, -[ --disable-dom Disable new DOM support], yes) - -if test -z "$PHP_LIBXML_DIR"; then - PHP_ARG_WITH(libxml-dir, libxml2 install dir, - [ --with-libxml-dir[=DIR] DOM: libxml2 install prefix], no, no) -fi - -if test "$PHP_DOM" != "no"; then - - if test "$PHP_LIBXML" = "no"; then - AC_MSG_ERROR([DOM extension requires LIBXML extension, add --enable-libxml]) - fi - - PHP_SETUP_LIBXML(DOM_SHARED_LIBADD, [ - AC_DEFINE(HAVE_DOM,1,[ ]) - PHP_NEW_EXTENSION(dom, [php_dom.c attr.c document.c domerrorhandler.c \ - domstringlist.c domexception.c namelist.c \ - processinginstruction.c cdatasection.c \ - documentfragment.c domimplementation.c \ - element.c node.c string_extend.c characterdata.c \ - documenttype.c domimplementationlist.c entity.c \ - nodelist.c text.c comment.c domconfiguration.c \ - domimplementationsource.c entityreference.c \ - notation.c xpath.c dom_iterators.c \ - typeinfo.c domerror.c domlocator.c namednodemap.c userdatahandler.c], - $ext_shared) - PHP_SUBST(DOM_SHARED_LIBADD) - PHP_INSTALL_HEADERS([ext/dom/xml_common.h]) - PHP_ADD_EXTENSION_DEP(dom, libxml) - ], [ - AC_MSG_ERROR([xml2-config not found. Please check your libxml2 installation.]) - ]) -fi diff --git a/ext/dom/config.w32 b/ext/dom/config.w32 deleted file mode 100644 index 382587ff6e375..0000000000000 --- a/ext/dom/config.w32 +++ /dev/null @@ -1,22 +0,0 @@ -// $Id$ -// vim:ft=javascript - -ARG_WITH("dom", "DOM support", "yes"); - -if (PHP_DOM == "yes" && PHP_LIBXML == "yes") { - EXTENSION("dom", "php_dom.c attr.c document.c domerrorhandler.c \ - domstringlist.c domexception.c namelist.c processinginstruction.c \ - cdatasection.c documentfragment.c domimplementation.c element.c \ - node.c string_extend.c characterdata.c documenttype.c \ - domimplementationlist.c entity.c nodelist.c text.c comment.c \ - domconfiguration.c domimplementationsource.c entityreference.c \ - notation.c xpath.c dom_iterators.c typeinfo.c domerror.c \ - domlocator.c namednodemap.c userdatahandler.c"); - AC_DEFINE("HAVE_DOM", 1, "DOM support"); - if (!PHP_DOM_SHARED) { - ADD_FLAG("CFLAGS_DOM", "/D LIBXML_STATIC "); - } - ADD_EXTENSION_DEP('dom', 'libxml'); -} - - diff --git a/ext/dom/document.c b/ext/dom/document.c deleted file mode 100644 index 46cc9b775a392..0000000000000 --- a/ext/dom/document.c +++ /dev/null @@ -1,2333 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" -#include -#ifdef LIBXML_SCHEMAS_ENABLED -#include -#include -#endif - -typedef struct _idsIterator idsIterator; -struct _idsIterator { - xmlChar *elementId; - xmlNode *element; -}; - -#define DOM_LOAD_STRING 0 -#define DOM_LOAD_FILE 1 - -/* -* class DOMDocument extends DOMNode -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-i-Document -* Since: -*/ - -zend_function_entry php_dom_document_class_functions[] = { - PHP_FALIAS(createElement, dom_document_create_element, NULL) - PHP_FALIAS(createDocumentFragment, dom_document_create_document_fragment, NULL) - PHP_FALIAS(createTextNode, dom_document_create_text_node, NULL) - PHP_FALIAS(createComment, dom_document_create_comment, NULL) - PHP_FALIAS(createCDATASection, dom_document_create_cdatasection, NULL) - PHP_FALIAS(createProcessingInstruction, dom_document_create_processing_instruction, NULL) - PHP_FALIAS(createAttribute, dom_document_create_attribute, NULL) - PHP_FALIAS(createEntityReference, dom_document_create_entity_reference, NULL) - PHP_FALIAS(getElementsByTagName, dom_document_get_elements_by_tag_name, NULL) - PHP_FALIAS(importNode, dom_document_import_node, NULL) - PHP_FALIAS(createElementNS, dom_document_create_element_ns, NULL) - PHP_FALIAS(createAttributeNS, dom_document_create_attribute_ns, NULL) - PHP_FALIAS(getElementsByTagNameNS, dom_document_get_elements_by_tag_name_ns, NULL) - PHP_FALIAS(getElementById, dom_document_get_element_by_id, NULL) - PHP_FALIAS(adoptNode, dom_document_adopt_node, NULL) - PHP_FALIAS(normalizeDocument, dom_document_normalize_document, NULL) - PHP_FALIAS(renameNode, dom_document_rename_node, NULL) - PHP_ME(domdocument, load, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC) - PHP_FALIAS(save, dom_document_save, NULL) - PHP_ME(domdocument, loadXML, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC) - PHP_FALIAS(saveXML, dom_document_savexml, NULL) - PHP_ME(domdocument, __construct, NULL, ZEND_ACC_PUBLIC) - PHP_FALIAS(validate, dom_document_validate, NULL) - PHP_FALIAS(xinclude, dom_document_xinclude, NULL) -#if defined(LIBXML_HTML_ENABLED) - PHP_ME(domdocument, loadHTML, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC) - PHP_ME(domdocument, loadHTMLFile, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC) - PHP_FALIAS(saveHTML, dom_document_save_html, NULL) - PHP_FALIAS(saveHTMLFile, dom_document_save_html_file, NULL) -#endif /* defined(LIBXML_HTML_ENABLED) */ -#if defined(LIBXML_SCHEMAS_ENABLED) - PHP_FALIAS(schemaValidate, dom_document_schema_validate_file, NULL) - PHP_FALIAS(schemaValidateSource, dom_document_schema_validate_xml, NULL) - PHP_FALIAS(relaxNGValidate, dom_document_relaxNG_validate_file, NULL) - PHP_FALIAS(relaxNGValidateSource, dom_document_relaxNG_validate_xml, NULL) -#endif - PHP_ME(domdocument, registerNodeClass, NULL, ZEND_ACC_PUBLIC) - {NULL, NULL, NULL} -}; - -/* {{{ docType DOMDocumentType -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-B63ED1A31 -Since: -*/ -int dom_document_doctype_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlDoc *docp; - xmlDtdPtr dtdptr; - int ret; - - docp = (xmlDocPtr) dom_object_get_node(obj); - - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - dtdptr = xmlGetIntSubset(docp); - if (!dtdptr) { - return FAILURE; - } - - ALLOC_ZVAL(*retval); - if (NULL == (*retval = php_dom_create_object((xmlNodePtr) dtdptr, &ret, NULL, *retval, obj TSRMLS_CC))) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object"); - return FAILURE; - } - return SUCCESS; - -} - -/* }}} */ - - - -/* {{{ implementation DOMImplementation -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1B793EBA -Since: -*/ -int dom_document_implementation_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - php_dom_create_implementation(retval TSRMLS_CC); - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ documentElement DOMElement -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-87CD092 -Since: -*/ -int dom_document_document_element_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlDoc *docp; - xmlNode *root; - int ret; - - docp = (xmlDocPtr) dom_object_get_node(obj); - - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - root = xmlDocGetRootElement(docp); - if (!root) { - return FAILURE; - } - - ALLOC_ZVAL(*retval); - if (NULL == (*retval = php_dom_create_object(root, &ret, NULL, *retval, obj TSRMLS_CC))) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object"); - return FAILURE; - } - return SUCCESS; -} - -/* }}} */ - -/* {{{ encoding string -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-encoding -Since: DOM Level 3 -*/ -int dom_document_encoding_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlDoc *docp; - char *encoding; - - docp = (xmlDocPtr) dom_object_get_node(obj); - - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - encoding = (char *) docp->encoding; - ALLOC_ZVAL(*retval); - - if (encoding != NULL) { - ZVAL_XML_STRING(*retval, encoding, ZSTR_DUPLICATE); - } else { - ZVAL_NULL(*retval); - } - - return SUCCESS; -} - -int dom_document_encoding_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - zval value_copy; - xmlDoc *docp; - xmlCharEncodingHandlerPtr handler; - - docp = (xmlDocPtr) dom_object_get_node(obj); - - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - if (newval->type != IS_STRING) { - if(newval->refcount > 1) { - value_copy = *newval; - zval_copy_ctor(&value_copy); - newval = &value_copy; - } - convert_to_string_with_converter(newval, UG(utf8_conv)); - } - - handler = xmlFindCharEncodingHandler(Z_STRVAL_P(newval)); - - if (handler != NULL) { - xmlCharEncCloseFunc(handler); - if (docp->encoding != NULL) { - xmlFree((xmlChar *)docp->encoding); - } - docp->encoding = xmlStrdup((const xmlChar *) Z_STRVAL_P(newval)); - } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Document Encoding"); - } - - if (newval == &value_copy) { - zval_dtor(newval); - } - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ standalone boolean -readonly=no -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-standalone -Since: DOM Level 3 -*/ -int dom_document_standalone_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlDoc *docp; - int standalone; - - docp = (xmlDocPtr) dom_object_get_node(obj); - - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - standalone = docp->standalone; - ZVAL_BOOL(*retval, standalone); - - return SUCCESS; -} - -int dom_document_standalone_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - zval value_copy; - xmlDoc *docp; - int standalone; - - docp = (xmlDocPtr) dom_object_get_node(obj); - - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - if(newval->refcount > 1) { - value_copy = *newval; - zval_copy_ctor(&value_copy); - newval = &value_copy; - } - convert_to_long(newval); - - standalone = Z_LVAL_P(newval); - if (standalone > 0) { - docp->standalone = 1; - } - else if (standalone < 0) { - docp->standalone = -1; - } - else { - docp->standalone = 0; - } - - if (newval == &value_copy) { - zval_dtor(newval); - } - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ version string -readonly=no -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-version -Since: DOM Level 3 -*/ -int dom_document_version_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlDoc *docp; - char *version; - - docp = (xmlDocPtr) dom_object_get_node(obj); - - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - version = (char *) docp->version; - ALLOC_ZVAL(*retval); - - if (version != NULL) { - ZVAL_XML_STRING(*retval, version, ZSTR_DUPLICATE); - } else { - ZVAL_NULL(*retval); - } - - return SUCCESS; -} - -int dom_document_version_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - zval value_copy; - xmlDoc *docp; - - docp = (xmlDocPtr) dom_object_get_node(obj); - - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - if (docp->version != NULL) { - xmlFree((xmlChar *) docp->version ); - } - - if (newval->type != IS_STRING) { - if(newval->refcount > 1) { - value_copy = *newval; - zval_copy_ctor(&value_copy); - newval = &value_copy; - } - convert_to_string_with_converter(newval, UG(utf8_conv)); - } - - docp->version = xmlStrdup((const xmlChar *) Z_STRVAL_P(newval)); - - if (newval == &value_copy) { - zval_dtor(newval); - } - - return SUCCESS; -} - -/* }}} */ - -/* {{{ strictErrorChecking boolean -readonly=no -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-strictErrorChecking -Since: DOM Level 3 -*/ -int dom_document_strict_error_checking_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - dom_doc_propsptr doc_prop; - - ALLOC_ZVAL(*retval); - if (obj->document) { - doc_prop = dom_get_doc_props(obj->document); - ZVAL_BOOL(*retval, doc_prop->stricterror); - } else { - ZVAL_FALSE(*retval); - } - return SUCCESS; -} - -int dom_document_strict_error_checking_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - zval value_copy; - dom_doc_propsptr doc_prop; - - if(newval->refcount > 1) { - value_copy = *newval; - zval_copy_ctor(&value_copy); - newval = &value_copy; - } - convert_to_boolean(newval); - - if (obj->document) { - doc_prop = dom_get_doc_props(obj->document); - doc_prop->stricterror = Z_LVAL_P(newval); - } - - if (newval == &value_copy) { - zval_dtor(newval); - } - - return SUCCESS; -} - -/* }}} */ - -/* {{{ formatOutput boolean -readonly=no -*/ -int dom_document_format_output_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - dom_doc_propsptr doc_prop; - - ALLOC_ZVAL(*retval); - if (obj->document) { - doc_prop = dom_get_doc_props(obj->document); - ZVAL_BOOL(*retval, doc_prop->formatoutput); - } else { - ZVAL_FALSE(*retval); - } - return SUCCESS; -} - -int dom_document_format_output_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - zval value_copy; - dom_doc_propsptr doc_prop; - - if(newval->refcount > 1) { - value_copy = *newval; - zval_copy_ctor(&value_copy); - newval = &value_copy; - } - convert_to_boolean(newval); - - if (obj->document) { - doc_prop = dom_get_doc_props(obj->document); - doc_prop->formatoutput = Z_LVAL_P(newval); - } - - if (newval == &value_copy) { - zval_dtor(newval); - } - - return SUCCESS; -} -/* }}} */ - -/* {{{ validateOnParse boolean -readonly=no -*/ -int dom_document_validate_on_parse_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - dom_doc_propsptr doc_prop; - - ALLOC_ZVAL(*retval); - if (obj->document) { - doc_prop = dom_get_doc_props(obj->document); - ZVAL_BOOL(*retval, doc_prop->validateonparse); - } else { - ZVAL_FALSE(*retval); - } - return SUCCESS; -} - -int dom_document_validate_on_parse_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - zval value_copy; - dom_doc_propsptr doc_prop; - - if(newval->refcount > 1) { - value_copy = *newval; - zval_copy_ctor(&value_copy); - newval = &value_copy; - } - convert_to_boolean(newval); - - if (obj->document) { - doc_prop = dom_get_doc_props(obj->document); - doc_prop->validateonparse = Z_LVAL_P(newval); - } - - if (newval == &value_copy) { - zval_dtor(newval); - } - - return SUCCESS; -} -/* }}} */ - - -/* {{{ resolveExternals boolean -readonly=no -*/ -int dom_document_resolve_externals_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - dom_doc_propsptr doc_prop; - - ALLOC_ZVAL(*retval); - if (obj->document) { - doc_prop = dom_get_doc_props(obj->document); - ZVAL_BOOL(*retval, doc_prop->resolveexternals); - } else { - ZVAL_FALSE(*retval); - } - return SUCCESS; -} - -int dom_document_resolve_externals_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - zval value_copy; - dom_doc_propsptr doc_prop; - - if(newval->refcount > 1) { - value_copy = *newval; - zval_copy_ctor(&value_copy); - newval = &value_copy; - } - convert_to_boolean(newval); - - if (obj->document) { - doc_prop = dom_get_doc_props(obj->document); - doc_prop->resolveexternals = Z_LVAL_P(newval); - } - - if (newval == &value_copy) { - zval_dtor(newval); - } - - return SUCCESS; -} -/* }}} */ - - -/* {{{ preserveWhiteSpace boolean -readonly=no -*/ -int dom_document_preserve_whitespace_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - dom_doc_propsptr doc_prop; - - ALLOC_ZVAL(*retval); - if (obj->document) { - doc_prop = dom_get_doc_props(obj->document); - ZVAL_BOOL(*retval, doc_prop->preservewhitespace); - } else { - ZVAL_FALSE(*retval); - } - return SUCCESS; -} - -int dom_document_preserve_whitespace_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - zval value_copy; - dom_doc_propsptr doc_prop; - - if(newval->refcount > 1) { - value_copy = *newval; - zval_copy_ctor(&value_copy); - newval = &value_copy; - } - convert_to_boolean(newval); - - if (obj->document) { - doc_prop = dom_get_doc_props(obj->document); - doc_prop->preservewhitespace = Z_LVAL_P(newval); - } - - if (newval == &value_copy) { - zval_dtor(newval); - } - - return SUCCESS; -} -/* }}} */ - -/* {{{ recover boolean -readonly=no -*/ -int dom_document_recover_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - dom_doc_propsptr doc_prop; - - ALLOC_ZVAL(*retval); - if (obj->document) { - doc_prop = dom_get_doc_props(obj->document); - ZVAL_BOOL(*retval, doc_prop->recover); - } else { - ZVAL_FALSE(*retval); - } - return SUCCESS; -} - -int dom_document_recover_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - zval value_copy; - dom_doc_propsptr doc_prop; - - if(newval->refcount > 1) { - value_copy = *newval; - zval_copy_ctor(&value_copy); - newval = &value_copy; - } - convert_to_boolean(newval); - - if (obj->document) { - doc_prop = dom_get_doc_props(obj->document); - doc_prop->recover = Z_LVAL_P(newval); - } - - if (newval == &value_copy) { - zval_dtor(newval); - } - - return SUCCESS; -} -/* }}} */ - - -/* {{{ substituteEntities boolean -readonly=no -*/ -int dom_document_substitue_entities_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - dom_doc_propsptr doc_prop; - - ALLOC_ZVAL(*retval); - if (obj->document) { - doc_prop = dom_get_doc_props(obj->document); - ZVAL_BOOL(*retval, doc_prop->substituteentities); - } else { - ZVAL_FALSE(*retval); - } - return SUCCESS; -} - -int dom_document_substitue_entities_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - zval value_copy; - dom_doc_propsptr doc_prop; - - if(newval->refcount > 1) { - value_copy = *newval; - zval_copy_ctor(&value_copy); - newval = &value_copy; - } - convert_to_boolean(newval); - - if (obj->document) { - doc_prop = dom_get_doc_props(obj->document); - doc_prop->substituteentities = Z_LVAL_P(newval); - } - - if (newval == &value_copy) { - zval_dtor(newval); - } - - return SUCCESS; -} -/* }}} */ - - -/* {{{ documentURI string -readonly=no -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-documentURI -Since: DOM Level 3 -*/ -int dom_document_document_uri_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlDoc *docp; - char *url; - - docp = (xmlDocPtr) dom_object_get_node(obj); - - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - url = (char *) docp->URL; - if (url != NULL) { - ZVAL_XML_STRING(*retval, url, ZSTR_DUPLICATE); - } else { - ZVAL_NULL(*retval); - } - - return SUCCESS; -} - -int dom_document_document_uri_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - zval value_copy; - xmlDoc *docp; - - docp = (xmlDocPtr) dom_object_get_node(obj); - - if (docp == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - if (docp->URL != NULL) { - xmlFree((xmlChar *) docp->URL); - } - - if (newval->type != IS_STRING) { - if(newval->refcount > 1) { - value_copy = *newval; - zval_copy_ctor(&value_copy); - newval = &value_copy; - } - convert_to_string_with_converter(newval, UG(utf8_conv)); - } - - docp->URL = xmlStrdup((const xmlChar *) Z_STRVAL_P(newval)); - - if (newval == &value_copy) { - zval_dtor(newval); - } - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ config DOMConfiguration -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-config -Since: DOM Level 3 -*/ -int dom_document_config_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_NULL(*retval); - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ proto DOMElement dom_document_create_element(string tagName [, string value]) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-2141741547 -Since: -*/ -PHP_FUNCTION(dom_document_create_element) -{ - zval *id, *rv = NULL; - xmlNode *node; - xmlDocPtr docp; - dom_object *intern; - int ret, name_len, value_len; - char *name, *value = NULL; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&|s&", &id, dom_document_class_entry, &name, &name_len, UG(utf8_conv), &value, &value_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - if (xmlValidateName((xmlChar *) name, 0) != 0) { - php_dom_throw_error(INVALID_CHARACTER_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - - node = xmlNewDocNode(docp, NULL, name, value); - if (!node) { - RETURN_FALSE; - } - - DOM_RET_OBJ(rv, node, &ret, intern); -} -/* }}} end dom_document_create_element */ - - -/* {{{ proto DOMDocumentFragment dom_document_create_document_fragment() U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-35CB04B5 -Since: -*/ -PHP_FUNCTION(dom_document_create_document_fragment) -{ - zval *id, *rv = NULL; - xmlNode *node; - xmlDocPtr docp; - dom_object *intern; - int ret; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_document_class_entry) == FAILURE) { - return; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - node = xmlNewDocFragment(docp); - if (!node) { - RETURN_FALSE; - } - - DOM_RET_OBJ(rv, node, &ret, intern); -} -/* }}} end dom_document_create_document_fragment */ - - -/* {{{ proto DOMText dom_document_create_text_node(string data) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1975348127 -Since: -*/ -PHP_FUNCTION(dom_document_create_text_node) -{ - zval *id, *rv = NULL; - xmlNode *node; - xmlDocPtr docp; - int ret, value_len; - dom_object *intern; - char *value; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &id, dom_document_class_entry, &value, &value_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - node = xmlNewDocText(docp, (xmlChar *) value); - if (!node) { - RETURN_FALSE; - } - - DOM_RET_OBJ(rv, node, &ret, intern); -} -/* }}} end dom_document_create_text_node */ - - -/* {{{ proto DOMComment dom_document_create_comment(string data) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1334481328 -Since: -*/ -PHP_FUNCTION(dom_document_create_comment) -{ - zval *id, *rv = NULL; - xmlNode *node; - xmlDocPtr docp; - int ret, value_len; - dom_object *intern; - char *value; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &id, dom_document_class_entry, &value, &value_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - node = xmlNewDocComment(docp, (xmlChar *) value); - if (!node) { - RETURN_FALSE; - } - - DOM_RET_OBJ(rv, node, &ret, intern); -} -/* }}} end dom_document_create_comment */ - - -/* {{{ proto DOMCdataSection dom_document_create_cdatasection(string data) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D26C0AF8 -Since: -*/ -PHP_FUNCTION(dom_document_create_cdatasection) -{ - zval *id, *rv = NULL; - xmlNode *node; - xmlDocPtr docp; - int ret, value_len; - dom_object *intern; - char *value; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &id, dom_document_class_entry, &value, &value_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - node = xmlNewCDataBlock(docp, (xmlChar *) value, value_len); - if (!node) { - RETURN_FALSE; - } - - DOM_RET_OBJ(rv, node, &ret, intern); -} -/* }}} end dom_document_create_cdatasection */ - - -/* {{{ proto DOMProcessingInstruction dom_document_create_processing_instruction(string target, string data) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-135944439 -Since: -*/ -PHP_FUNCTION(dom_document_create_processing_instruction) -{ - zval *id, *rv = NULL; - xmlNode *node; - xmlDocPtr docp; - int ret, value_len, name_len = 0; - dom_object *intern; - char *name, *value = NULL; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&|s&", &id, dom_document_class_entry, &name, &name_len, UG(utf8_conv), &value, &value_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - if (xmlValidateName((xmlChar *) name, 0) != 0) { - php_dom_throw_error(INVALID_CHARACTER_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - - node = xmlNewPI((xmlChar *) name, (xmlChar *) value); - if (!node) { - RETURN_FALSE; - } - - node->doc = docp; - - DOM_RET_OBJ(rv, node, &ret, intern); -} -/* }}} end dom_document_create_processing_instruction */ - - -/* {{{ proto DOMAttr dom_document_create_attribute(string name) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1084891198 -Since: -*/ -PHP_FUNCTION(dom_document_create_attribute) -{ - zval *id, *rv = NULL; - xmlAttrPtr node; - xmlDocPtr docp; - int ret, name_len; - dom_object *intern; - char *name; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &id, dom_document_class_entry, &name, &name_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - if (xmlValidateName((xmlChar *) name, 0) != 0) { - php_dom_throw_error(INVALID_CHARACTER_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - - node = xmlNewDocProp(docp, (xmlChar *) name, NULL); - if (!node) { - RETURN_FALSE; - } - - DOM_RET_OBJ(rv, (xmlNodePtr) node, &ret, intern); - -} -/* }}} end dom_document_create_attribute */ - - -/* {{{ proto DOMEntityReference dom_document_create_entity_reference(string name) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-392B75AE -Since: -*/ -PHP_FUNCTION(dom_document_create_entity_reference) -{ - zval *id, *rv = NULL; - xmlNode *node; - xmlDocPtr docp = NULL; - dom_object *intern; - int ret, name_len; - char *name; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &id, dom_document_class_entry, &name, &name_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - if (xmlValidateName((xmlChar *) name, 0) != 0) { - php_dom_throw_error(INVALID_CHARACTER_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - - node = xmlNewReference(docp, name); - if (!node) { - RETURN_FALSE; - } - - DOM_RET_OBJ(rv, (xmlNodePtr) node, &ret, intern); -} -/* }}} end dom_document_create_entity_reference */ - - -/* {{{ proto DOMNodeList dom_document_get_elements_by_tag_name(string tagname) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C9094 -Since: -*/ -PHP_FUNCTION(dom_document_get_elements_by_tag_name) -{ - zval *id; - xmlDocPtr docp; - int name_len; - dom_object *intern, *namednode; - char *name; - xmlChar *local; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &id, dom_document_class_entry, &name, &name_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC); - namednode = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC); - local = xmlCharStrndup(name, name_len); - dom_namednode_iter(intern, 0, namednode, NULL, local, NULL TSRMLS_CC); -} -/* }}} end dom_document_get_elements_by_tag_name */ - - -/* {{{ proto DOMNode dom_document_import_node(DOMNode importedNode, boolean deep) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Core-Document-importNode -Since: DOM Level 2 -*/ -PHP_FUNCTION(dom_document_import_node) -{ - zval *rv = NULL; - zval *id, *node; - xmlDocPtr docp; - xmlNodePtr nodep, retnodep; - dom_object *intern, *nodeobj; - int ret; - long recursive = 0; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO|l", &id, dom_document_class_entry, &node, dom_node_class_entry, &recursive) == FAILURE) { - return; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - DOM_GET_OBJ(nodep, node, xmlNodePtr, nodeobj); - - if (nodep->type == XML_HTML_DOCUMENT_NODE || nodep->type == XML_DOCUMENT_NODE - || nodep->type == XML_DOCUMENT_TYPE_NODE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot import: Node Type Not Supported"); - RETURN_FALSE; - } - - if (nodep->doc == docp) { - retnodep = nodep; - } else { - retnodep = xmlDocCopyNode(nodep, docp, recursive); - if (!retnodep) { - RETURN_FALSE; - } - - } - - DOM_RET_OBJ(rv, (xmlNodePtr) retnodep, &ret, intern); -} -/* }}} end dom_document_import_node */ - - -/* {{{ proto DOMElement dom_document_create_element_ns(string namespaceURI, string qualifiedName [,string value]) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-DocCrElNS -Since: DOM Level 2 -*/ -PHP_FUNCTION(dom_document_create_element_ns) -{ - zval *id, *rv = NULL; - xmlDocPtr docp; - xmlNodePtr nodep = NULL; - xmlNsPtr nsptr = NULL; - int ret, uri_len = 0, name_len = 0, value_len = 0; - char *uri, *name, *value = NULL; - char *localname = NULL, *prefix = NULL; - int errorcode; - dom_object *intern; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os!&s&|s&", &id, dom_document_class_entry, &uri, &uri_len, UG(utf8_conv), &name, &name_len, UG(utf8_conv), &value, &value_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - errorcode = dom_check_qname(name, &localname, &prefix, uri_len, name_len); - - if (errorcode == 0) { - if (xmlValidateName((xmlChar *) localname, 0) == 0) { - nodep = xmlNewDocNode (docp, NULL, localname, value); - if (nodep != NULL && uri != NULL) { - nsptr = xmlSearchNsByHref (nodep->doc, nodep, uri); - if (nsptr == NULL) { - nsptr = dom_get_ns(nodep, uri, &errorcode, prefix); - } - xmlSetNs(nodep, nsptr); - } - } else { - errorcode = INVALID_CHARACTER_ERR; - } - } - - xmlFree(localname); - if (prefix != NULL) { - xmlFree(prefix); - } - - if (errorcode != 0) { - if (nodep != NULL) { - xmlFreeNode(nodep); - } - php_dom_throw_error(errorcode, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - - if (nodep == NULL) { - RETURN_FALSE; - } - - - nodep->ns = nsptr; - - DOM_RET_OBJ(rv, nodep, &ret, intern); -} -/* }}} end dom_document_create_element_ns */ - - -/* {{{ proto DOMAttr dom_document_create_attribute_ns(string namespaceURI, string qualifiedName) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-DocCrAttrNS -Since: DOM Level 2 -*/ -PHP_FUNCTION(dom_document_create_attribute_ns) -{ - zval *id, *rv = NULL; - xmlDocPtr docp; - xmlNodePtr nodep = NULL, root; - xmlNsPtr nsptr; - int ret, uri_len = 0, name_len = 0; - char *uri, *name; - char *localname = NULL, *prefix = NULL; - dom_object *intern; - int errorcode; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os!&s&", &id, dom_document_class_entry, &uri, &uri_len, UG(utf8_conv), &name, &name_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - root = xmlDocGetRootElement(docp); - if (root != NULL) { - errorcode = dom_check_qname(name, &localname, &prefix, uri_len, name_len); - if (errorcode == 0) { - if (xmlValidateName((xmlChar *) localname, 0) == 0) { - nodep = (xmlNodePtr) xmlNewDocProp(docp, localname, NULL); - if (nodep != NULL && uri_len > 0) { - nsptr = xmlSearchNsByHref (nodep->doc, root, uri); - if (nsptr == NULL) { - nsptr = dom_get_ns(root, uri, &errorcode, prefix); - } - xmlSetNs(nodep, nsptr); - } - } else { - errorcode = INVALID_CHARACTER_ERR; - } - } - } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Document Missing Root Element"); - RETURN_FALSE; - } - - xmlFree(localname); - if (prefix != NULL) { - xmlFree(prefix); - } - - if (errorcode != 0) { - if (nodep != NULL) { - xmlFreeProp((xmlAttrPtr) nodep); - } - php_dom_throw_error(errorcode, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - - if (nodep == NULL) { - RETURN_FALSE; - } - - DOM_RET_OBJ(rv, nodep, &ret, intern); -} -/* }}} end dom_document_create_attribute_ns */ - - -/* {{{ proto DOMNodeList dom_document_get_elements_by_tag_name_ns(string namespaceURI, string localName) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getElBTNNS -Since: DOM Level 2 -*/ -PHP_FUNCTION(dom_document_get_elements_by_tag_name_ns) -{ - zval *id; - xmlDocPtr docp; - int uri_len, name_len; - dom_object *intern, *namednode; - char *uri, *name; - xmlChar *local, *nsuri; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&s&", &id, dom_document_class_entry, &uri, &uri_len, UG(utf8_conv), &name, &name_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC); - namednode = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC); - local = xmlCharStrndup(name, name_len); - nsuri = xmlCharStrndup(uri, uri_len); - dom_namednode_iter(intern, 0, namednode, NULL, local, nsuri TSRMLS_CC); -} -/* }}} end dom_document_get_elements_by_tag_name_ns */ - - -/* {{{ proto DOMElement dom_document_get_element_by_id(string elementId) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getElBId -Since: DOM Level 2 -*/ -PHP_FUNCTION(dom_document_get_element_by_id) -{ - zval *id, *rv = NULL; - xmlDocPtr docp; - xmlAttrPtr attrp; - int ret, idname_len; - dom_object *intern; - char *idname; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &id, dom_document_class_entry, &idname, &idname_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - attrp = xmlGetID(docp, (xmlChar *) idname); - - if (attrp && attrp->parent) { - DOM_RET_OBJ(rv, (xmlNodePtr) attrp->parent, &ret, intern); - } else { - RETVAL_NULL(); - } - -} -/* }}} end dom_document_get_element_by_id */ - - -/* {{{ proto DOMNode dom_document_adopt_node(DOMNode source) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-adoptNode -Since: DOM Level 3 -*/ -PHP_FUNCTION(dom_document_adopt_node) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_document_adopt_node */ - - -/* {{{ proto void dom_document_normalize_document() U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-normalizeDocument -Since: DOM Level 3 -*/ -PHP_FUNCTION(dom_document_normalize_document) -{ - zval *id; - xmlDocPtr docp; - dom_object *intern; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_document_class_entry) == FAILURE) { - return; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - dom_normalize((xmlNodePtr) docp TSRMLS_CC); -} -/* }}} end dom_document_normalize_document */ - - -/* {{{ proto DOMNode dom_document_rename_node(node n, string namespaceURI, string qualifiedName) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-renameNode -Since: DOM Level 3 -*/ -PHP_FUNCTION(dom_document_rename_node) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_document_rename_node */ - -/* {{{ proto void DOMDocument::__construct([string version], [string encoding]) U */ -PHP_METHOD(domdocument, __construct) -{ - - zval *id; - xmlDoc *docp = NULL, *olddoc; - dom_object *intern; - char *encoding, *version = NULL; - int encoding_len = 0, version_len = 0, refcount; - - php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC); - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|s&s&", &id, dom_document_class_entry, &version, &version_len, UG(utf8_conv), &encoding, &encoding_len, UG(utf8_conv)) == FAILURE) { - php_std_error_handling(); - return; - } - php_std_error_handling(); - - docp = xmlNewDoc(version); - - if (!docp) { - php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC); - RETURN_FALSE; - } - - if (encoding_len > 0) { - docp->encoding = (const xmlChar*)xmlStrdup(encoding); - } - - intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); - if (intern != NULL) { - olddoc = (xmlDocPtr) dom_object_get_node(intern); - if (olddoc != NULL) { - php_libxml_decrement_node_ptr((php_libxml_node_object *) intern TSRMLS_CC); - refcount = php_libxml_decrement_doc_ref((php_libxml_node_object *)intern TSRMLS_CC); - if (refcount != 0) { - olddoc->_private = NULL; - } - } - intern->document = NULL; - if (php_libxml_increment_doc_ref((php_libxml_node_object *)intern, docp TSRMLS_CC) == -1) { - RETURN_FALSE; - } - php_libxml_increment_node_ptr((php_libxml_node_object *)intern, (xmlNodePtr)docp, (void *)intern TSRMLS_CC); - } -} -/* }}} end DOMDocument::__construct */ - -char *_dom_get_valid_file_path(char *source, char *resolved_path, int resolved_path_len TSRMLS_DC) { - xmlURI *uri; - xmlChar *escsource; - char *file_dest; - int isFileUri = 0; - - uri = xmlCreateURI(); - escsource = xmlURIEscapeStr(source, ":"); - xmlParseURIReference(uri, escsource); - xmlFree(escsource); - - if (uri->scheme != NULL) { - /* absolute file uris - libxml only supports localhost or empty host */ - if (strncasecmp(source, "file:///",8) == 0) { - isFileUri = 1; -#ifdef PHP_WIN32 - source += 8; -#else - source += 7; -#endif - } else if (strncasecmp(source, "file://localhost/",17) == 0) { - isFileUri = 1; -#ifdef PHP_WIN32 - source += 17; -#else - source += 16; -#endif - } - } - - file_dest = source; - - if ((uri->scheme == NULL || isFileUri)) { - /* XXX possible buffer overflow if VCWD_REALPATH does not know size of resolved_path */ - if (!VCWD_REALPATH(source, resolved_path) && !expand_filepath(source, resolved_path TSRMLS_CC)) { - xmlFreeURI(uri); - return NULL; - } - file_dest = resolved_path; - } - - xmlFreeURI(uri); - - return file_dest; -} - - -/* {{{ */ -static xmlDocPtr dom_document_parser(zval *id, int mode, char *source, int options TSRMLS_DC) { - xmlDocPtr ret; - xmlParserCtxtPtr ctxt = NULL; - dom_doc_propsptr doc_props; - dom_object *intern; - php_libxml_ref_obj *document = NULL; - int validate, recover, resolve_externals, keep_blanks, substitute_ent; - int resolved_path_len; - int old_error_reporting = 0; - char *directory=NULL, resolved_path[MAXPATHLEN]; - - if (id != NULL) { - intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); - document = intern->document; - } - - doc_props = dom_get_doc_props(document); - validate = doc_props->validateonparse; - resolve_externals = doc_props->resolveexternals; - keep_blanks = doc_props->preservewhitespace; - substitute_ent = doc_props->substituteentities; - recover = doc_props->recover; - - if (document == NULL) { - efree(doc_props); - } - - xmlInitParser(); - - if (mode == DOM_LOAD_FILE) { - char *file_dest = _dom_get_valid_file_path(source, resolved_path, MAXPATHLEN TSRMLS_CC); - if (file_dest) { - ctxt = xmlCreateFileParserCtxt(file_dest); - } - - } else { - ctxt = xmlCreateDocParserCtxt(source); - } - - if (ctxt == NULL) { - return(NULL); - } - - /* If loading from memory, we need to set the base directory for the document */ - if (mode != DOM_LOAD_FILE) { -#if HAVE_GETCWD - directory = VCWD_GETCWD(resolved_path, MAXPATHLEN); -#elif HAVE_GETWD - directory = VCWD_GETWD(resolved_path); -#endif - if (directory) { - if(ctxt->directory != NULL) { - xmlFree((char *) ctxt->directory); - } - resolved_path_len = strlen(resolved_path); - if (resolved_path[resolved_path_len - 1] != DEFAULT_SLASH) { - resolved_path[resolved_path_len] = DEFAULT_SLASH; - resolved_path[++resolved_path_len] = '\0'; - } - ctxt->directory = (char *) xmlCanonicPath((const xmlChar *) resolved_path); - } - } - - ctxt->vctxt.error = php_libxml_ctx_error; - ctxt->vctxt.warning = php_libxml_ctx_warning; - - if (ctxt->sax != NULL) { - ctxt->sax->error = php_libxml_ctx_error; - ctxt->sax->warning = php_libxml_ctx_warning; - } - - if (validate && ! (options & XML_PARSE_DTDVALID)) { - options |= XML_PARSE_DTDVALID; - } - if (resolve_externals && ! (options & XML_PARSE_DTDATTR)) { - options |= XML_PARSE_DTDATTR; - } - if (substitute_ent && ! (options & XML_PARSE_NOENT)) { - options |= XML_PARSE_NOENT; - } - if (keep_blanks == 0 && ! (options & XML_PARSE_NOBLANKS)) { - options |= XML_PARSE_NOBLANKS; - } - - xmlCtxtUseOptions(ctxt, options); - - ctxt->recovery = recover; - if (recover) { - old_error_reporting = EG(error_reporting); - EG(error_reporting) = old_error_reporting | E_WARNING; - } - - xmlParseDocument(ctxt); - - if (ctxt->wellFormed || recover) { - ret = ctxt->myDoc; - if (ctxt->recovery) { - EG(error_reporting) = old_error_reporting; - } - /* If loading from memory, set the base reference uri for the document */ - if (ret->URL == NULL && ctxt->directory != NULL) { - ret->URL = xmlStrdup(ctxt->directory); - } - } else { - ret = NULL; - xmlFreeDoc(ctxt->myDoc); - ctxt->myDoc = NULL; - } - - xmlFreeParserCtxt(ctxt); - - return(ret); -} -/* }}} */ - -/* {{{ static void dom_parse_document(INTERNAL_FUNCTION_PARAMETERS, int mode) */ -static void dom_parse_document(INTERNAL_FUNCTION_PARAMETERS, int mode) { - zval *id, *rv = NULL; - xmlDoc *docp = NULL, *newdoc; - dom_doc_propsptr doc_prop; - dom_object *intern; - char *source; - int source_len, refcount, ret; - zend_uchar source_type = IS_STRING; - long options = 0; - - id = getThis(); - if (id != NULL && ! instanceof_function(Z_OBJCE_P(id), dom_document_class_entry TSRMLS_CC)) { - id = NULL; - } - - if (mode == DOM_LOAD_FILE) { - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t|l", &source, &source_len, &source_type, &options) == FAILURE) { - return; - } - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S|l", &source, &source_len, &options) == FAILURE) { - return; - } - } - - if (!source_len) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty string supplied as input"); - RETURN_FALSE; - } - - if (source_type == IS_UNICODE) { - if (php_stream_path_encode(NULL, &source, &source_len, (UChar*)source, source_len, REPORT_ERRORS, NULL) == FAILURE) { - RETURN_FALSE; - } - } - - newdoc = dom_document_parser(id, mode, source, options TSRMLS_CC); - - if (source_type == IS_UNICODE) { - efree(source); - } - - if (!newdoc) - RETURN_FALSE; - - if (id != NULL) { - intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); - if (intern != NULL) { - docp = (xmlDocPtr) dom_object_get_node(intern); - doc_prop = NULL; - if (docp != NULL) { - php_libxml_decrement_node_ptr((php_libxml_node_object *) intern TSRMLS_CC); - doc_prop = intern->document->doc_props; - intern->document->doc_props = NULL; - refcount = php_libxml_decrement_doc_ref((php_libxml_node_object *)intern TSRMLS_CC); - if (refcount != 0) { - docp->_private = NULL; - } - } - intern->document = NULL; - if (php_libxml_increment_doc_ref((php_libxml_node_object *)intern, newdoc TSRMLS_CC) == -1) { - RETURN_FALSE; - } - intern->document->doc_props = doc_prop; - } - - php_libxml_increment_node_ptr((php_libxml_node_object *)intern, (xmlNodePtr)newdoc, (void *)intern TSRMLS_CC); - - RETURN_TRUE; - } else { - DOM_RET_OBJ(rv, (xmlNodePtr) newdoc, &ret, NULL); - } -} -/* }}} end dom_parser_document */ - -/* {{{ proto DOMNode dom_document_load(string source [, int options]) U -URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-load -Since: DOM Level 3 -*/ -PHP_METHOD(domdocument, load) -{ - dom_parse_document(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); -} -/* }}} end dom_document_load */ - -/* {{{ proto DOMNode dom_document_loadxml(string source [, int options]) U -URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-loadXML -Since: DOM Level 3 -*/ -PHP_METHOD(domdocument, loadXML) -{ - dom_parse_document(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); -} -/* }}} end dom_document_loadxml */ - -/* {{{ proto int dom_document_save(string file) U -Convenience method to save to file -*/ -PHP_FUNCTION(dom_document_save) -{ - zval *id; - xmlDoc *docp; - int file_len = 0, bytes, format, saveempty = 0; - dom_object *intern; - dom_doc_propsptr doc_props; - char *file; - zend_uchar file_type; - long options = 0; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ot|l", &id, dom_document_class_entry, &file, &file_len, &file_type, &options) == FAILURE) { - return; - } - - if (file_len == 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Filename"); - RETURN_FALSE; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - /* encoding handled by property on doc */ - - doc_props = dom_get_doc_props(intern->document); - format = doc_props->formatoutput; - if (options & LIBXML_SAVE_NOEMPTYTAG) { - saveempty = xmlSaveNoEmptyTags; - xmlSaveNoEmptyTags = 1; - } - - if (file_type == IS_UNICODE) { - if (php_stream_path_encode(NULL, &file, &file_len, (UChar*)file, file_len, REPORT_ERRORS, NULL) == FAILURE) { - RETURN_FALSE; - } - } - - bytes = xmlSaveFormatFileEnc(file, docp, NULL, format); - - if (file_type == IS_UNICODE) { - efree(file); - } - - if (options & LIBXML_SAVE_NOEMPTYTAG) { - xmlSaveNoEmptyTags = saveempty; - } - if (bytes == -1) { - RETURN_FALSE; - } - RETURN_LONG(bytes); -} -/* }}} end dom_document_save */ - -/* {{{ proto string dom_document_savexml([node n]) U -URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-saveXML -Since: DOM Level 3 -*/ -PHP_FUNCTION(dom_document_savexml) -{ - zval *id, *nodep = NULL; - xmlDoc *docp; - xmlNode *node; - xmlBufferPtr buf; - xmlChar *mem; - dom_object *intern, *nodeobj; - dom_doc_propsptr doc_props; - int size, format, saveempty = 0; - long options = 0; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|O!l", &id, dom_document_class_entry, &nodep, dom_node_class_entry, &options) == FAILURE) { - return; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - doc_props = dom_get_doc_props(intern->document); - format = doc_props->formatoutput; - - if (nodep != NULL) { - /* Dump contents of Node */ - DOM_GET_OBJ(node, nodep, xmlNodePtr, nodeobj); - if (node->doc != docp) { - php_dom_throw_error(WRONG_DOCUMENT_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - buf = xmlBufferCreate(); - if (!buf) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not fetch buffer"); - RETURN_FALSE; - } - if (options & LIBXML_SAVE_NOEMPTYTAG) { - saveempty = xmlSaveNoEmptyTags; - xmlSaveNoEmptyTags = 1; - } - xmlNodeDump(buf, docp, node, 0, format); - if (options & LIBXML_SAVE_NOEMPTYTAG) { - xmlSaveNoEmptyTags = saveempty; - } - mem = (xmlChar*) xmlBufferContent(buf); - if (!mem) { - xmlBufferFree(buf); - RETURN_FALSE; - } - RETVAL_STRING(mem, 1); - xmlBufferFree(buf); - } else { - if (options & LIBXML_SAVE_NOEMPTYTAG) { - saveempty = xmlSaveNoEmptyTags; - xmlSaveNoEmptyTags = 1; - } - /* Encoding is handled from the encoding property set on the document */ - xmlDocDumpFormatMemory(docp, &mem, &size, format); - if (options & LIBXML_SAVE_NOEMPTYTAG) { - xmlSaveNoEmptyTags = saveempty; - } - if (!size) { - RETURN_FALSE; - } - RETVAL_STRINGL(mem, size, 1); - xmlFree(mem); - } -} -/* }}} end dom_document_savexml */ - -static xmlNodePtr php_dom_free_xinclude_node(xmlNodePtr cur TSRMLS_DC) { - xmlNodePtr xincnode; - - xincnode = cur; - cur = cur->next; - xmlUnlinkNode(xincnode); - php_libxml_node_free_resource(xincnode TSRMLS_CC); - - return cur; -} - -static void php_dom_remove_xinclude_nodes(xmlNodePtr cur TSRMLS_DC) { - while(cur) { - if (cur->type == XML_XINCLUDE_START) { - cur = php_dom_free_xinclude_node(cur TSRMLS_CC); - - /* XML_XINCLUDE_END node will be a sibling of XML_XINCLUDE_START */ - while(cur && cur->type != XML_XINCLUDE_END) { - cur = cur->next; - } - - if (cur && cur->type == XML_XINCLUDE_END) { - cur = php_dom_free_xinclude_node(cur TSRMLS_CC); - } - } else { - if (cur->type == XML_ELEMENT_NODE) { - php_dom_remove_xinclude_nodes(cur->children TSRMLS_CC); - } - cur = cur->next; - } - } -} - -/* {{{ proto int dom_document_xinclude([int options]) U - Substitutues xincludes in a DomDocument */ -PHP_FUNCTION(dom_document_xinclude) -{ - zval *id; - xmlDoc *docp; - xmlNodePtr root; - long flags = 0; - int err; - dom_object *intern; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|l", &id, dom_document_class_entry, &flags) == FAILURE) { - return; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - err = xmlXIncludeProcessFlags(docp, flags); - - /* XML_XINCLUDE_START and XML_XINCLUDE_END nodes need to be removed as these - are added via xmlXIncludeProcess to mark beginning and ending of xincluded document - but are not wanted in resulting document - must be done even if err as it could fail after - having processed some xincludes */ - root = (xmlNodePtr) docp->children; - while(root && root->type != XML_ELEMENT_NODE && root->type != XML_XINCLUDE_START) { - root = root->next; - } - if (root) { - php_dom_remove_xinclude_nodes(root TSRMLS_CC); - } - - if (err) { - RETVAL_LONG(err); - } else { - RETVAL_FALSE; - } - -} - - -/* {{{ proto boolean dom_document_validate() U -Since: DOM extended -*/ -PHP_FUNCTION(dom_document_validate) -{ - zval *id; - xmlDoc *docp; - dom_object *intern; - xmlValidCtxt *cvp; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_document_class_entry) == FAILURE) { - return; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - if (docp->intSubset == NULL) { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "No DTD given in XML-Document"); - } - - cvp = xmlNewValidCtxt(); - - cvp->userData = NULL; - cvp->error = (xmlValidityErrorFunc) php_libxml_error_handler; - cvp->warning = (xmlValidityErrorFunc) php_libxml_error_handler; - - if (xmlValidateDocument(cvp, docp)) { - RETVAL_TRUE; - } else { - RETVAL_FALSE; - } - - xmlFreeValidCtxt(cvp); - -} - - -#if defined(LIBXML_SCHEMAS_ENABLED) -static void -_dom_document_schema_validate(INTERNAL_FUNCTION_PARAMETERS, int type) -{ - zval *id; - xmlDoc *docp; - dom_object *intern; - char *source = NULL, *valid_file = NULL; - int source_len = 0; - xmlSchemaParserCtxtPtr parser; - xmlSchemaPtr sptr; - xmlSchemaValidCtxtPtr vptr; - int is_valid; - char resolved_path[MAXPATHLEN + 1]; - zend_uchar source_type = IS_STRING; - - if (type == DOM_LOAD_FILE) { - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ot", &id, dom_document_class_entry, &source, &source_len, &source_type) == FAILURE) { - return; - } - } else { - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OS", &id, dom_document_class_entry, &source, &source_len) == FAILURE) { - return; - } - } - - if (source_len == 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Schema source"); - RETURN_FALSE; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - switch (type) { - case DOM_LOAD_FILE: - if (source_type == IS_UNICODE) { - if (php_stream_path_encode(NULL, &source, &source_len, (UChar*)source, source_len, REPORT_ERRORS, NULL) == FAILURE) { - RETURN_FALSE; - } - } - - valid_file = _dom_get_valid_file_path(source, resolved_path, MAXPATHLEN TSRMLS_CC); - if (!valid_file) { - if (source_type == IS_UNICODE) { - efree(source); - } - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Schema file source"); - RETURN_FALSE; - } - parser = xmlSchemaNewParserCtxt(valid_file); - - if (source_type == IS_UNICODE) { - efree(source); - } - break; - case DOM_LOAD_STRING: - parser = xmlSchemaNewMemParserCtxt(source, source_len); - /* If loading from memory, we need to set the base directory for the document - but it is not apparent how to do that for schema's */ - break; - default: - return; - } - - xmlSchemaSetParserErrors(parser, - (xmlSchemaValidityErrorFunc) php_libxml_error_handler, - (xmlSchemaValidityWarningFunc) php_libxml_error_handler, - parser); - sptr = xmlSchemaParse(parser); - xmlSchemaFreeParserCtxt(parser); - if (!sptr) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Schema"); - RETURN_FALSE; - } - - docp = (xmlDocPtr) dom_object_get_node(intern); - - vptr = xmlSchemaNewValidCtxt(sptr); - if (!vptr) { - xmlSchemaFree(sptr); - php_error(E_ERROR, "Invalid Schema Validation Context"); - RETURN_FALSE; - } - - xmlSchemaSetValidErrors(vptr, php_libxml_error_handler, php_libxml_error_handler, vptr); - is_valid = xmlSchemaValidateDoc(vptr, docp); - xmlSchemaFree(sptr); - xmlSchemaFreeValidCtxt(vptr); - - if (is_valid == 0) { - RETURN_TRUE; - } else { - RETURN_FALSE; - } -} - -/* {{{ proto boolean dom_document_schema_validate_file(string filename) U */ -PHP_FUNCTION(dom_document_schema_validate_file) -{ - _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); -} -/* }}} end dom_document_schema_validate_file */ - -/* {{{ proto boolean dom_document_schema_validate(string source) U */ -PHP_FUNCTION(dom_document_schema_validate_xml) -{ - _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); -} -/* }}} end dom_document_schema_validate */ - - -static void -_dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAMETERS, int type) -{ - zval *id; - xmlDoc *docp; - dom_object *intern; - char *source = NULL, *valid_file = NULL; - int source_len = 0; - xmlRelaxNGParserCtxtPtr parser; - xmlRelaxNGPtr sptr; - xmlRelaxNGValidCtxtPtr vptr; - int is_valid; - char resolved_path[MAXPATHLEN + 1]; - zend_uchar source_type = IS_STRING; - - if (type == DOM_LOAD_FILE) { - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ot", &id, dom_document_class_entry, &source, &source_len, &source_type) == FAILURE) { - return; - } - } else { - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OS", &id, dom_document_class_entry, &source, &source_len) == FAILURE) { - return; - } - } - - if (source_len == 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Schema source"); - RETURN_FALSE; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - switch (type) { - case DOM_LOAD_FILE: - if (source_type == IS_UNICODE) { - if (php_stream_path_encode(NULL, &source, &source_len, (UChar*)source, source_len, REPORT_ERRORS, NULL) == FAILURE) { - RETURN_FALSE; - } - } - valid_file = _dom_get_valid_file_path(source, resolved_path, MAXPATHLEN TSRMLS_CC); - if (!valid_file) { - if (source_type == IS_UNICODE) { - efree(source); - } - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid RelaxNG file source"); - RETURN_FALSE; - } - parser = xmlRelaxNGNewParserCtxt(valid_file); - if (source_type == IS_UNICODE) { - efree(source); - } - break; - case DOM_LOAD_STRING: - parser = xmlRelaxNGNewMemParserCtxt(source, source_len); - /* If loading from memory, we need to set the base directory for the document - but it is not apparent how to do that for schema's */ - break; - default: - return; - } - - xmlRelaxNGSetParserErrors(parser, - (xmlRelaxNGValidityErrorFunc) php_libxml_error_handler, - (xmlRelaxNGValidityWarningFunc) php_libxml_error_handler, - parser); - sptr = xmlRelaxNGParse(parser); - xmlRelaxNGFreeParserCtxt(parser); - if (!sptr) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid RelaxNG"); - RETURN_FALSE; - } - - docp = (xmlDocPtr) dom_object_get_node(intern); - - vptr = xmlRelaxNGNewValidCtxt(sptr); - if (!vptr) { - xmlRelaxNGFree(sptr); - php_error(E_ERROR, "Invalid RelaxNG Validation Context"); - RETURN_FALSE; - } - - xmlRelaxNGSetValidErrors(vptr, php_libxml_error_handler, php_libxml_error_handler, vptr); - is_valid = xmlRelaxNGValidateDoc(vptr, docp); - xmlRelaxNGFree(sptr); - xmlRelaxNGFreeValidCtxt(vptr); - - if (is_valid == 0) { - RETURN_TRUE; - } else { - RETURN_FALSE; - } -} - -/* {{{ proto boolean dom_document_relaxNG_validate_file(string filename) U */ -PHP_FUNCTION(dom_document_relaxNG_validate_file) -{ - _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); -} -/* }}} end dom_document_relaxNG_validate_file */ - -/* {{{ proto boolean dom_document_relaxNG_validate_xml(string source) U */ -PHP_FUNCTION(dom_document_relaxNG_validate_xml) -{ - _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); -} -/* }}} end dom_document_relaxNG_validate_xml */ - -#endif - -#if defined(LIBXML_HTML_ENABLED) - -static void dom_load_html(INTERNAL_FUNCTION_PARAMETERS, int mode) -{ - zval *id, *rv = NULL; - xmlDoc *docp = NULL, *newdoc; - dom_object *intern; - dom_doc_propsptr doc_prop; - char *source; - int source_len, refcount, ret; - htmlParserCtxtPtr ctxt; - zend_uchar source_type = IS_STRING; - - id = getThis(); - - if (mode == DOM_LOAD_FILE) { - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t", &source, &source_len, &source_type) == FAILURE) { - return; - } - } else { - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S", &source, &source_len) == FAILURE) { - return; - } - } - - if (!source_len) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty string supplied as input"); - RETURN_FALSE; - } - - if (mode == DOM_LOAD_FILE) { - if (source_type == IS_UNICODE) { - if (php_stream_path_encode(NULL, &source, &source_len, (UChar*)source, source_len, REPORT_ERRORS, NULL) == FAILURE) { - RETURN_FALSE; - } - } - - ctxt = htmlCreateFileParserCtxt(source, NULL); - - if (source_type == IS_UNICODE) { - efree(source); - } - } else { - source_len = xmlStrlen(source); - ctxt = htmlCreateMemoryParserCtxt(source, source_len); - } - - if (!ctxt) { - RETURN_FALSE; - } - - ctxt->vctxt.error = php_libxml_ctx_error; - ctxt->vctxt.warning = php_libxml_ctx_warning; - if (ctxt->sax != NULL) { - ctxt->sax->error = php_libxml_ctx_error; - ctxt->sax->warning = php_libxml_ctx_warning; - } - htmlParseDocument(ctxt); - newdoc = ctxt->myDoc; - htmlFreeParserCtxt(ctxt); - - if (!newdoc) - RETURN_FALSE; - - if (id != NULL && instanceof_function(Z_OBJCE_P(id), dom_document_class_entry TSRMLS_CC)) { - intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); - if (intern != NULL) { - docp = (xmlDocPtr) dom_object_get_node(intern); - doc_prop = NULL; - if (docp != NULL) { - php_libxml_decrement_node_ptr((php_libxml_node_object *) intern TSRMLS_CC); - doc_prop = intern->document->doc_props; - intern->document->doc_props = NULL; - refcount = php_libxml_decrement_doc_ref((php_libxml_node_object *)intern TSRMLS_CC); - if (refcount != 0) { - docp->_private = NULL; - } - } - intern->document = NULL; - if (php_libxml_increment_doc_ref((php_libxml_node_object *)intern, newdoc TSRMLS_CC) == -1) { - RETURN_FALSE; - } - intern->document->doc_props = doc_prop; - } - - php_libxml_increment_node_ptr((php_libxml_node_object *)intern, (xmlNodePtr)newdoc, (void *)intern TSRMLS_CC); - - RETURN_TRUE; - } else { - DOM_RET_OBJ(rv, (xmlNodePtr) newdoc, &ret, NULL); - } -} - -/* {{{ proto DOMNode dom_document_load_html_file(string source) U -Since: DOM extended -*/ -PHP_METHOD(domdocument, loadHTMLFile) -{ - dom_load_html(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); -} -/* }}} end dom_document_load_html_file */ - -/* {{{ proto DOMNode dom_document_load_html(string source) U -Since: DOM extended -*/ -PHP_METHOD(domdocument, loadHTML) -{ - dom_load_html(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); -} -/* }}} end dom_document_load_html */ - -/* {{{ proto int dom_document_save_html_file(string file) U -Convenience method to save to file as html -*/ -PHP_FUNCTION(dom_document_save_html_file) -{ - zval *id; - xmlDoc *docp; - int file_len, bytes, format; - dom_object *intern; - dom_doc_propsptr doc_props; - char *file; - zend_uchar file_type; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ot", &id, dom_document_class_entry, &file, &file_len, &file_type) == FAILURE) { - return; - } - - if (file_len == 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Filename"); - RETURN_FALSE; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - if (file_type == IS_UNICODE) { - if (php_stream_path_encode(NULL, &file, &file_len, (UChar*)file, file_len, REPORT_ERRORS, NULL) == FAILURE) { - RETURN_FALSE; - } - } - - /* encoding handled by property on doc */ - - doc_props = dom_get_doc_props(intern->document); - format = doc_props->formatoutput; - - bytes = htmlSaveFileFormat(file, docp, NULL, format); - - if (file_type == IS_UNICODE) { - efree(file); - } - - if (bytes == -1) { - RETURN_FALSE; - } - RETURN_LONG(bytes); -} -/* }}} end dom_document_save_html_file */ - -/* {{{ proto string dom_document_save_html() U -Convenience method to output as html -*/ -PHP_FUNCTION(dom_document_save_html) -{ - zval *id; - xmlDoc *docp; - dom_object *intern; - xmlChar *mem; - int size, format; - dom_doc_propsptr doc_props; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_document_class_entry) == FAILURE) { - return; - } - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - -#if LIBXML_VERSION >= 20623 - doc_props = dom_get_doc_props(intern->document); - format = doc_props->formatoutput; - - htmlDocDumpMemoryFormat(docp, &mem, &size, format); -#else - htmlDocDumpMemory(docp, &mem, &size); -#endif - - if (!size) { - if (mem) - xmlFree(mem); - RETURN_FALSE; - } - RETVAL_STRINGL(mem, size, 1); - xmlFree(mem); -} -/* }}} end dom_document_save_html */ - -#endif /* defined(LIBXML_HTML_ENABLED) */ - -/* {{{ proto boolean DOMDocument::registerNodeClass(string baseclass, string extendedclass) U - Register extended class used to create base node type */ -PHP_METHOD(domdocument, registerNodeClass) -{ - zval *id; - xmlDoc *docp; - char *baseclass = NULL, *extendedclass = NULL; - int baseclass_len = 0, extendedclass_len = 0; - zend_class_entry *basece = NULL, *ce = NULL; - dom_object *intern; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oss!", &id, dom_document_class_entry, &baseclass, &baseclass_len, &extendedclass, &extendedclass_len) == FAILURE) { - return; - } - - if (baseclass_len) { - zend_class_entry **pce; - if (zend_lookup_class(baseclass, baseclass_len, &pce TSRMLS_CC) == FAILURE) { - php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s does not exist", baseclass); - return; - } - basece = *pce; - } - - if (basece == NULL || ! instanceof_function(basece, dom_node_class_entry TSRMLS_CC)) { - php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s is not derived from DOMNode", baseclass); - return; - } - - if (extendedclass_len) { - zend_class_entry **pce; - if (zend_lookup_class(extendedclass, extendedclass_len, &pce TSRMLS_CC) == FAILURE) { - php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s does not exist", extendedclass); - } - ce = *pce; - } - - if (ce == NULL || instanceof_function(ce, basece TSRMLS_CC)) { - - DOM_GET_OBJ(docp, id, xmlDocPtr, intern); - - if (dom_set_doc_classmap(intern->document, basece, ce TSRMLS_CC) == FAILURE) { - php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s could not be registered", extendedclass); - } - RETURN_TRUE; - } else { - php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s is not derived from %s", extendedclass, baseclass); - } - - RETURN_FALSE; -} -/* }}} */ - -#endif /* HAVE_LIBXML && HAVE_DOM */ diff --git a/ext/dom/documentfragment.c b/ext/dom/documentfragment.c deleted file mode 100644 index caca6f9239088..0000000000000 --- a/ext/dom/documentfragment.c +++ /dev/null @@ -1,147 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class DOMDocumentFragment extends DOMNode -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-B63ED1A3 -* Since: -*/ - -zend_function_entry php_dom_documentfragment_class_functions[] = { - PHP_ME(domdocumentfragment, __construct, NULL, ZEND_ACC_PUBLIC) - PHP_ME(domdocumentfragment, appendXML, NULL, ZEND_ACC_PUBLIC) - {NULL, NULL, NULL} -}; - -/* {{{ proto void DOMDocumentFragment::__construct() U */ -PHP_METHOD(domdocumentfragment, __construct) -{ - - zval *id; - xmlNodePtr nodep = NULL, oldnode = NULL; - dom_object *intern; - - php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC); - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_documentfragment_class_entry) == FAILURE) { - php_std_error_handling(); - return; - } - - php_std_error_handling(); - nodep = xmlNewDocFragment(NULL); - - if (!nodep) { - php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC); - RETURN_FALSE; - } - - intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); - if (intern != NULL) { - oldnode = (xmlNodePtr)intern->ptr; - if (oldnode != NULL) { - php_libxml_node_free_resource(oldnode TSRMLS_CC); - } - /* php_dom_set_object(intern, nodep TSRMLS_CC); */ - php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC); - } -} -/* }}} end DOMDocumentFragment::__construct */ - -/* php_dom_xmlSetTreeDoc is a custom implementation of xmlSetTreeDoc - needed for hack in appendXML due to libxml bug - no need to share this function */ -static void php_dom_xmlSetTreeDoc(xmlNodePtr tree, xmlDocPtr doc) { - xmlAttrPtr prop; - xmlNodePtr cur; - - if (tree) { - if(tree->type == XML_ELEMENT_NODE) { - prop = tree->properties; - while (prop != NULL) { - prop->doc = doc; - if (prop->children) { - cur = prop->children; - while (cur != NULL) { - php_dom_xmlSetTreeDoc(cur, doc); - cur = cur->next; - } - } - prop = prop->next; - } - } - if (tree->children != NULL) { - cur = tree->children; - while (cur != NULL) { - php_dom_xmlSetTreeDoc(cur, doc); - cur = cur->next; - } - } - tree->doc = doc; - } -} - -/* {{{ proto void DOMDocumentFragment::appendXML(string data) U */ -PHP_METHOD(domdocumentfragment, appendXML) { - zval *id; - xmlNode *nodep; - dom_object *intern; - char *data = NULL; - int data_len = 0; - int err; - xmlNodePtr lst; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &id, dom_documentfragment_class_entry, &data, &data_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - if (dom_node_is_read_only(nodep) == SUCCESS) { - php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - - if (data) { - err = xmlParseBalancedChunkMemory(nodep->doc, NULL, NULL, 0, data, &lst); - if (err != 0) { - RETURN_FALSE; - } - /* Following needed due to bug in libxml2 <= 2.6.14 - ifdef after next libxml release as bug is fixed in their cvs */ - php_dom_xmlSetTreeDoc(lst, nodep->doc); - /* End stupid hack */ - - xmlAddChildList(nodep,lst); - } - - RETURN_TRUE; -} - -#endif diff --git a/ext/dom/documenttype.c b/ext/dom/documenttype.c deleted file mode 100644 index ffeda243a44d9..0000000000000 --- a/ext/dom/documenttype.c +++ /dev/null @@ -1,234 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - -/* -* class DOMDocumentType extends DOMNode -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-412266927 -* Since: -*/ - -zend_function_entry php_dom_documenttype_class_functions[] = { - {NULL, NULL, NULL} -}; - -/* {{{ name string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1844763134 -Since: -*/ -int dom_documenttype_name_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlDtdPtr dtdptr; - - dtdptr = (xmlDtdPtr) dom_object_get_node(obj); - - if (dtdptr == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - ZVAL_STRING(*retval, (char *) (dtdptr->name), 1); - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ entities DOMNamedNodeMap -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1788794630 -Since: -*/ -int dom_documenttype_entities_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlDtdPtr doctypep; - xmlHashTable *entityht; - dom_object *intern; - - doctypep = (xmlDtdPtr) dom_object_get_node(obj); - - if (doctypep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - MAKE_STD_ZVAL(*retval); - php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC); - - entityht = (xmlHashTable *) doctypep->entities; - - intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC); - dom_namednode_iter(obj, XML_ENTITY_NODE, intern, entityht, NULL, NULL TSRMLS_CC); - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ notations DOMNamedNodeMap -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D46829EF -Since: -*/ -int dom_documenttype_notations_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlDtdPtr doctypep; - xmlHashTable *notationht; - dom_object *intern; - - doctypep = (xmlDtdPtr) dom_object_get_node(obj); - - if (doctypep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - MAKE_STD_ZVAL(*retval); - php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC); - - notationht = (xmlHashTable *) doctypep->notations; - - intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC); - dom_namednode_iter(obj, XML_NOTATION_NODE, intern, notationht, NULL, NULL TSRMLS_CC); - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ publicId string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-publicId -Since: DOM Level 2 -*/ -int dom_documenttype_public_id_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlDtdPtr dtdptr; - - dtdptr = (xmlDtdPtr) dom_object_get_node(obj); - - if (dtdptr == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - if (dtdptr->ExternalID) { - ZVAL_STRING(*retval, (char *) (dtdptr->ExternalID), 1); - } else { - ZVAL_EMPTY_STRING(*retval); - } - return SUCCESS; - -} - -/* }}} */ - - - -/* {{{ systemId string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-systemId -Since: DOM Level 2 -*/ -int dom_documenttype_system_id_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlDtdPtr dtdptr; - - dtdptr = (xmlDtdPtr) dom_object_get_node(obj); - - if (dtdptr == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - if (dtdptr->SystemID) { - ZVAL_STRING(*retval, (char *) (dtdptr->SystemID), 1); - } else { - ZVAL_EMPTY_STRING(*retval); - } - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ internalSubset string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-internalSubset -Since: DOM Level 2 -*/ -int dom_documenttype_internal_subset_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - - xmlDtdPtr dtdptr; - xmlDtd *intsubset; - xmlOutputBuffer *buff = NULL; - xmlChar *strintsubset; - - dtdptr = (xmlDtdPtr) dom_object_get_node(obj); - - if (dtdptr == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - - if (dtdptr->doc != NULL && ((intsubset = dtdptr->doc->intSubset) != NULL)) { - buff = xmlAllocOutputBuffer(NULL); - if (buff != NULL) { - xmlNodeDumpOutput (buff, NULL, (xmlNodePtr) intsubset, 0, 0, NULL); - xmlOutputBufferFlush(buff); - strintsubset = xmlStrndup(buff->buffer->content, buff->buffer->use); - (void)xmlOutputBufferClose(buff); - ZVAL_STRING(*retval, (char *) strintsubset, 1); - return SUCCESS; - } - } - - ZVAL_EMPTY_STRING(*retval); - - return SUCCESS; - -} - -/* }}} */ - -#endif diff --git a/ext/dom/dom.dsp b/ext/dom/dom.dsp deleted file mode 100644 index f2ae5b1a76759..0000000000000 --- a/ext/dom/dom.dsp +++ /dev/null @@ -1,250 +0,0 @@ -# Microsoft Developer Studio Project File - Name="dom" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=dom - Win32 Release_TS -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "dom.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "dom.mak" CFG="dom - Win32 Release_TS" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "dom - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "dom - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "dom - Win32 Release_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_TS" -# PROP BASE Intermediate_Dir "Release_TS" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_TS" -# PROP Intermediate_Dir "Release_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DOM" /D ZTS=1 /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DOM_EXPORTS" /D "COMPILE_DL_DOM" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DOM=1 /D "LIBXML_THREAD_ENABLED" /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x406 /d "NDEBUG" -# ADD RSC /l 0x406 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 -# ADD LINK32 wsock32.lib php5ts.lib resolv.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /machine:I386 /out:"..\..\Release_TS/php_dom.dll" /implib:"..\..\Release_TS/php_dom.lib" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" /libpath:"..\..\..\bindlib_w32\Release" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "dom - Win32 Debug_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Debug_TS" -# PROP BASE Intermediate_Dir "Debug_TS" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Debug_TS" -# PROP Intermediate_Dir "Debug_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "mssql-70" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_DOM" /D ZTS=1 /YX /FD /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DOM_EXPORTS" /D "COMPILE_DL_DOM" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_DOM=1 /D LIBXML_THREAD_ENABLED=1 /FR /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x406 /d "NDEBUG" -# ADD RSC /l 0x406 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 -# ADD LINK32 php5ts_debug.lib ws2_32.lib resolv.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /nodefaultlib:"msvcrt" /out:"..\..\Debug_TS\php_dom.dll" /implib:"..\..\Debug_TS/php_dom.lib" /libpath:"..\..\Debug_TS" /libpath:"..\..\..\bindlib_w32\Release" - -!ENDIF - -# Begin Target - -# Name "dom - Win32 Release_TS" -# Name "dom - Win32 Debug_TS" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\attr.c -# End Source File -# Begin Source File - -SOURCE=.\cdatasection.c -# End Source File -# Begin Source File - -SOURCE=.\characterdata.c -# End Source File -# Begin Source File - -SOURCE=.\comment.c -# End Source File -# Begin Source File - -SOURCE=.\document.c -# End Source File -# Begin Source File - -SOURCE=.\documentfragment.c -# End Source File -# Begin Source File - -SOURCE=.\documenttype.c -# End Source File -# Begin Source File - -SOURCE=.\domconfiguration.c -# End Source File -# Begin Source File - -SOURCE=.\domerror.c -# End Source File -# Begin Source File - -SOURCE=.\domerrorhandler.c -# End Source File -# Begin Source File - -SOURCE=.\domexception.c -# End Source File -# Begin Source File - -SOURCE=.\domimplementation.c -# End Source File -# Begin Source File - -SOURCE=.\domimplementationlist.c -# End Source File -# Begin Source File - -SOURCE=.\domimplementationsource.c -# End Source File -# Begin Source File - -SOURCE=.\domlocator.c -# End Source File -# Begin Source File - -SOURCE=.\domstringlist.c -# End Source File -# Begin Source File - -SOURCE=.\element.c -# End Source File -# Begin Source File - -SOURCE=.\entity.c -# End Source File -# Begin Source File - -SOURCE=.\entityreference.c -# End Source File -# Begin Source File - -SOURCE=.\namednodemap.c -# End Source File -# Begin Source File - -SOURCE=.\namelist.c -# End Source File -# Begin Source File - -SOURCE=.\node.c -# End Source File -# Begin Source File - -SOURCE=.\nodelist.c -# End Source File -# Begin Source File - -SOURCE=.\notation.c -# End Source File -# Begin Source File - -SOURCE=.\php_dom.c -# End Source File -# Begin Source File - -SOURCE=.\processinginstruction.c -# End Source File -# Begin Source File - -SOURCE=.\string_extend.c -# End Source File -# Begin Source File - -SOURCE=.\text.c -# End Source File -# Begin Source File - -SOURCE=.\typeinfo.c -# End Source File -# Begin Source File - -SOURCE=.\userdatahandler.c -# End Source File -# Begin Source File - -SOURCE=.\xpath.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\dom_ce.h -# End Source File -# Begin Source File - -SOURCE=.\dom_fe.h -# End Source File -# Begin Source File - -SOURCE=.\dom_properties.h -# End Source File -# Begin Source File - -SOURCE=.\php_dom.h -# End Source File -# Begin Source File - -SOURCE=.\xml_common.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/ext/dom/dom_ce.h b/ext/dom/dom_ce.h deleted file mode 100644 index cc4b5d03d352c..0000000000000 --- a/ext/dom/dom_ce.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ -#ifndef DOM_CE_H -#define DOM_CE_H - -extern zend_class_entry *dom_domexception_class_entry; -extern zend_class_entry *dom_domstringlist_class_entry; -extern zend_class_entry *dom_namelist_class_entry; -extern zend_class_entry *dom_domimplementationlist_class_entry; -extern zend_class_entry *dom_domimplementationsource_class_entry; -extern zend_class_entry *dom_domimplementation_class_entry; -extern zend_class_entry *dom_documentfragment_class_entry; -extern zend_class_entry *dom_document_class_entry; -extern zend_class_entry *dom_nodelist_class_entry; -extern zend_class_entry *dom_namednodemap_class_entry; -extern zend_class_entry *dom_characterdata_class_entry; -extern zend_class_entry *dom_attr_class_entry; -extern zend_class_entry *dom_element_class_entry; -extern zend_class_entry *dom_text_class_entry; -extern zend_class_entry *dom_comment_class_entry; -extern zend_class_entry *dom_typeinfo_class_entry; -extern zend_class_entry *dom_userdatahandler_class_entry; -extern zend_class_entry *dom_domerror_class_entry; -extern zend_class_entry *dom_domerrorhandler_class_entry; -extern zend_class_entry *dom_domlocator_class_entry; -extern zend_class_entry *dom_domconfiguration_class_entry; -extern zend_class_entry *dom_cdatasection_class_entry; -extern zend_class_entry *dom_documenttype_class_entry; -extern zend_class_entry *dom_notation_class_entry; -extern zend_class_entry *dom_entity_class_entry; -extern zend_class_entry *dom_entityreference_class_entry; -extern zend_class_entry *dom_processinginstruction_class_entry; -extern zend_class_entry *dom_string_extend_class_entry; -#if defined(LIBXML_XPATH_ENABLED) -extern zend_class_entry *dom_xpath_class_entry; -#endif -extern zend_class_entry *dom_namespace_node_class_entry; - -#endif /* DOM_CE_H */ diff --git a/ext/dom/dom_fe.h b/ext/dom/dom_fe.h deleted file mode 100644 index 06dc8c917e717..0000000000000 --- a/ext/dom/dom_fe.h +++ /dev/null @@ -1,270 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ -#ifndef DOM_FE_H -#define DOM_FE_H - -extern zend_function_entry php_dom_domexception_class_functions[]; -extern zend_function_entry php_dom_domstringlist_class_functions[]; -extern zend_function_entry php_dom_namelist_class_functions[]; -extern zend_function_entry php_dom_domimplementationlist_class_functions[]; -extern zend_function_entry php_dom_domimplementationsource_class_functions[]; -extern zend_function_entry php_dom_domimplementation_class_functions[]; -extern zend_function_entry php_dom_documentfragment_class_functions[]; -extern zend_function_entry php_dom_document_class_functions[]; -extern zend_function_entry php_dom_node_class_functions[]; -extern zend_function_entry php_dom_nodelist_class_functions[]; -extern zend_function_entry php_dom_namednodemap_class_functions[]; -extern zend_function_entry php_dom_characterdata_class_functions[]; -extern zend_function_entry php_dom_attr_class_functions[]; -extern zend_function_entry php_dom_element_class_functions[]; -extern zend_function_entry php_dom_text_class_functions[]; -extern zend_function_entry php_dom_comment_class_functions[]; -extern zend_function_entry php_dom_typeinfo_class_functions[]; -extern zend_function_entry php_dom_userdatahandler_class_functions[]; -extern zend_function_entry php_dom_domerror_class_functions[]; -extern zend_function_entry php_dom_domerrorhandler_class_functions[]; -extern zend_function_entry php_dom_domlocator_class_functions[]; -extern zend_function_entry php_dom_domconfiguration_class_functions[]; -extern zend_function_entry php_dom_cdatasection_class_functions[]; -extern zend_function_entry php_dom_documenttype_class_functions[]; -extern zend_function_entry php_dom_notation_class_functions[]; -extern zend_function_entry php_dom_entity_class_functions[]; -extern zend_function_entry php_dom_entityreference_class_functions[]; -extern zend_function_entry php_dom_processinginstruction_class_functions[]; -extern zend_function_entry php_dom_string_extend_class_functions[]; -extern zend_function_entry php_dom_xpath_class_functions[]; - -/* domexception errors */ -typedef enum { -/* PHP_ERR is non-spec code for PHP errors: */ - PHP_ERR = 0, - INDEX_SIZE_ERR = 1, - DOMSTRING_SIZE_ERR = 2, - HIERARCHY_REQUEST_ERR = 3, - WRONG_DOCUMENT_ERR = 4, - INVALID_CHARACTER_ERR = 5, - NO_DATA_ALLOWED_ERR = 6, - NO_MODIFICATION_ALLOWED_ERR = 7, - NOT_FOUND_ERR = 8, - NOT_SUPPORTED_ERR = 9, - INUSE_ATTRIBUTE_ERR = 10, -/* Introduced in DOM Level 2: */ - INVALID_STATE_ERR = 11, -/* Introduced in DOM Level 2: */ - SYNTAX_ERR = 12, -/* Introduced in DOM Level 2: */ - INVALID_MODIFICATION_ERR = 13, -/* Introduced in DOM Level 2: */ - NAMESPACE_ERR = 14, -/* Introduced in DOM Level 2: */ - INVALID_ACCESS_ERR = 15, -/* Introduced in DOM Level 3: */ - VALIDATION_ERR = 16 -} dom_exception_code; - -/* domstringlist methods */ -PHP_FUNCTION(dom_domstringlist_item); - -/* domnamelist methods */ -PHP_FUNCTION(dom_namelist_get_name); -PHP_FUNCTION(dom_namelist_get_namespace_uri); - -/* domimplementationlist methods */ -PHP_FUNCTION(dom_domimplementationlist_item); - -/* domimplementationsource methods */ -PHP_FUNCTION(dom_domimplementationsource_get_domimplementation); -PHP_FUNCTION(dom_domimplementationsource_get_domimplementations); - -/* domimplementation methods */ -PHP_METHOD(domimplementation, hasFeature); -PHP_METHOD(domimplementation, createDocumentType); -PHP_METHOD(domimplementation, createDocument); -PHP_METHOD(domimplementation, getFeature); - -/* domdocumentfragment methods */ -PHP_METHOD(domdocumentfragment, __construct); -PHP_METHOD(domdocumentfragment, appendXML); - -/* domdocument methods */ -PHP_FUNCTION(dom_document_create_element); -PHP_FUNCTION(dom_document_create_document_fragment); -PHP_FUNCTION(dom_document_create_text_node); -PHP_FUNCTION(dom_document_create_comment); -PHP_FUNCTION(dom_document_create_cdatasection); -PHP_FUNCTION(dom_document_create_processing_instruction); -PHP_FUNCTION(dom_document_create_attribute); -PHP_FUNCTION(dom_document_create_entity_reference); -PHP_FUNCTION(dom_document_get_elements_by_tag_name); -PHP_FUNCTION(dom_document_import_node); -PHP_FUNCTION(dom_document_create_element_ns); -PHP_FUNCTION(dom_document_create_attribute_ns); -PHP_FUNCTION(dom_document_get_elements_by_tag_name_ns); -PHP_FUNCTION(dom_document_get_element_by_id); -PHP_FUNCTION(dom_document_adopt_node); -PHP_FUNCTION(dom_document_normalize_document); -PHP_FUNCTION(dom_document_rename_node); -PHP_METHOD(domdocument, __construct); - /* convienience methods */ -PHP_METHOD(domdocument, load); -PHP_FUNCTION(dom_document_save); -PHP_METHOD(domdocument, loadXML); -PHP_FUNCTION(dom_document_savexml); -PHP_FUNCTION(dom_document_validate); -PHP_FUNCTION(dom_document_xinclude); -PHP_METHOD(domdocument, registerNodeClass); - -#if defined(LIBXML_HTML_ENABLED) -PHP_METHOD(domdocument, loadHTML); -PHP_METHOD(domdocument, loadHTMLFile); -PHP_FUNCTION(dom_document_save_html); -PHP_FUNCTION(dom_document_save_html_file); -#endif /* defined(LIBXML_HTML_ENABLED) */ - -#if defined(LIBXML_SCHEMAS_ENABLED) -PHP_FUNCTION(dom_document_schema_validate_file); -PHP_FUNCTION(dom_document_schema_validate_xml); -PHP_FUNCTION(dom_document_relaxNG_validate_file); -PHP_FUNCTION(dom_document_relaxNG_validate_xml); -#endif - -/* domnode methods */ -PHP_FUNCTION(dom_node_insert_before); -PHP_FUNCTION(dom_node_replace_child); -PHP_FUNCTION(dom_node_remove_child); -PHP_FUNCTION(dom_node_append_child); -PHP_FUNCTION(dom_node_has_child_nodes); -PHP_FUNCTION(dom_node_clone_node); -PHP_FUNCTION(dom_node_normalize); -PHP_FUNCTION(dom_node_is_supported); -PHP_FUNCTION(dom_node_has_attributes); -PHP_FUNCTION(dom_node_compare_document_position); -PHP_FUNCTION(dom_node_is_same_node); -PHP_FUNCTION(dom_node_lookup_prefix); -PHP_FUNCTION(dom_node_is_default_namespace); -PHP_FUNCTION(dom_node_lookup_namespace_uri); -PHP_FUNCTION(dom_node_is_equal_node); -PHP_FUNCTION(dom_node_get_feature); -PHP_FUNCTION(dom_node_set_user_data); -PHP_FUNCTION(dom_node_get_user_data); -PHP_METHOD(domnode, C14N); -PHP_METHOD(domnode, C14NFile); -PHP_METHOD(domnode, getNodePath); - -/* domnodelist methods */ -PHP_FUNCTION(dom_nodelist_item); - -/* domnamednodemap methods */ -PHP_FUNCTION(dom_namednodemap_get_named_item); -PHP_FUNCTION(dom_namednodemap_set_named_item); -PHP_FUNCTION(dom_namednodemap_remove_named_item); -PHP_FUNCTION(dom_namednodemap_item); -PHP_FUNCTION(dom_namednodemap_get_named_item_ns); -PHP_FUNCTION(dom_namednodemap_set_named_item_ns); -PHP_FUNCTION(dom_namednodemap_remove_named_item_ns); - -/* domcharacterdata methods */ -PHP_FUNCTION(dom_characterdata_substring_data); -PHP_FUNCTION(dom_characterdata_append_data); -PHP_FUNCTION(dom_characterdata_insert_data); -PHP_FUNCTION(dom_characterdata_delete_data); -PHP_FUNCTION(dom_characterdata_replace_data); - -/* domattr methods */ -PHP_FUNCTION(dom_attr_is_id); -PHP_METHOD(domattr, __construct); - -/* domelement methods */ -PHP_FUNCTION(dom_element_get_attribute); -PHP_FUNCTION(dom_element_set_attribute); -PHP_FUNCTION(dom_element_remove_attribute); -PHP_FUNCTION(dom_element_get_attribute_node); -PHP_FUNCTION(dom_element_set_attribute_node); -PHP_FUNCTION(dom_element_remove_attribute_node); -PHP_FUNCTION(dom_element_get_elements_by_tag_name); -PHP_FUNCTION(dom_element_get_attribute_ns); -PHP_FUNCTION(dom_element_set_attribute_ns); -PHP_FUNCTION(dom_element_remove_attribute_ns); -PHP_FUNCTION(dom_element_get_attribute_node_ns); -PHP_FUNCTION(dom_element_set_attribute_node_ns); -PHP_FUNCTION(dom_element_get_elements_by_tag_name_ns); -PHP_FUNCTION(dom_element_has_attribute); -PHP_FUNCTION(dom_element_has_attribute_ns); -PHP_FUNCTION(dom_element_set_id_attribute); -PHP_FUNCTION(dom_element_set_id_attribute_ns); -PHP_FUNCTION(dom_element_set_id_attribute_node); -PHP_METHOD(domelement, __construct); - -/* domtext methods */ -PHP_FUNCTION(dom_text_split_text); -PHP_FUNCTION(dom_text_is_whitespace_in_element_content); -PHP_FUNCTION(dom_text_replace_whole_text); -PHP_METHOD(domtext, __construct); - -/* domcomment methods */ -PHP_METHOD(domcomment, __construct); - -/* domtypeinfo methods */ - -/* domuserdatahandler methods */ -PHP_FUNCTION(dom_userdatahandler_handle); - -/* domdomerror methods */ - -/* domerrorhandler methods */ -PHP_FUNCTION(dom_domerrorhandler_handle_error); - -/* domlocator methods */ - -/* domconfiguration methods */ -PHP_FUNCTION(dom_domconfiguration_set_parameter); -PHP_FUNCTION(dom_domconfiguration_get_parameter); -PHP_FUNCTION(dom_domconfiguration_can_set_parameter); - -/* domcdatasection methods */ -PHP_METHOD(domcdatasection, __construct); - -/* domdocumenttype methods */ - -/* domnotation methods */ - -/* domentity methods */ - -/* domentityreference methods */ -PHP_METHOD(domentityreference, __construct); - -/* domprocessinginstruction methods */ -PHP_METHOD(domprocessinginstruction, __construct); - -/* string_extend methods */ -PHP_FUNCTION(dom_string_extend_find_offset16); -PHP_FUNCTION(dom_string_extend_find_offset32); - -#if defined(LIBXML_XPATH_ENABLED) -/* xpath methods */ -PHP_METHOD(domxpath, __construct); -PHP_FUNCTION(dom_xpath_register_ns); -PHP_FUNCTION(dom_xpath_query); -PHP_FUNCTION(dom_xpath_evaluate); -PHP_FUNCTION(dom_xpath_register_php_functions); -#endif - -#endif /* DOM_FE_H */ diff --git a/ext/dom/dom_iterators.c b/ext/dom/dom_iterators.c deleted file mode 100644 index 518af2188856c..0000000000000 --- a/ext/dom/dom_iterators.c +++ /dev/null @@ -1,332 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" -#include "dom_ce.h" - -typedef struct _nodeIterator nodeIterator; -struct _nodeIterator { - int cur; - int index; - xmlNode *node; -}; - -typedef struct _notationIterator notationIterator; -struct _notationIterator { - int cur; - int index; - xmlNotation *notation; -}; - -static void itemHashScanner (void *payload, void *data, xmlChar *name) { - nodeIterator *priv = (nodeIterator *)data; - - if(priv->cur < priv->index) { - priv->cur++; - } else { - if(priv->node == NULL) { - priv->node = (xmlNode *)payload; - } - } -} - -xmlNodePtr create_notation(const xmlChar *name, - const xmlChar *ExternalID, const xmlChar *SystemID) { - xmlEntityPtr ret; - - ret = (xmlEntityPtr) xmlMalloc(sizeof(xmlEntity)); - memset(ret, 0, sizeof(xmlEntity)); - ret->type = XML_NOTATION_NODE; - ret->name = xmlStrdup(name); - ret->ExternalID = xmlStrdup(ExternalID); - ret->SystemID = xmlStrdup(SystemID); - ret->length = 0; - ret->content = NULL; - ret->URI = NULL; - ret->orig = NULL; - ret->children = NULL; - ret->parent = NULL; - ret->doc = NULL; - ret->_private = NULL; - ret->last = NULL; - ret->prev = NULL; - return((xmlNodePtr) ret); -} - -xmlNode *php_dom_libxml_hash_iter(xmlHashTable *ht, int index) -{ - xmlNode *nodep = NULL; - nodeIterator *iter; - int htsize; - - if ((htsize = xmlHashSize(ht)) > 0 && index < htsize) { - iter = emalloc(sizeof(nodeIterator)); - iter->cur = 0; - iter->index = index; - iter->node = NULL; - xmlHashScan(ht, itemHashScanner, iter); - nodep = iter->node; - efree(iter); - return nodep; - } else { - return NULL; - } -} - -xmlNode *php_dom_libxml_notation_iter(xmlHashTable *ht, int index) -{ - notationIterator *iter; - xmlNotation *notep = NULL; - int htsize; - - if ((htsize = xmlHashSize(ht)) > 0 && index < htsize) { - iter = emalloc(sizeof(notationIterator)); - iter->cur = 0; - iter->index = index; - iter->notation = NULL; - xmlHashScan(ht, itemHashScanner, iter); - notep = iter->notation; - efree(iter); - return create_notation(notep->name, notep->PublicID, notep->SystemID); - } else { - return NULL; - } -} - -static void php_dom_iterator_dtor(zend_object_iterator *iter TSRMLS_DC) -{ - php_dom_iterator *iterator = (php_dom_iterator *)iter; - - zval_ptr_dtor((zval**)&iterator->intern.data); - - if (iterator->curobj) { - zval_ptr_dtor((zval**)&iterator->curobj); - } - - efree(iterator); -} - -static int php_dom_iterator_valid(zend_object_iterator *iter TSRMLS_DC) -{ - - php_dom_iterator *iterator = (php_dom_iterator *)iter; - - if (iterator->curobj) { - return SUCCESS; - } else { - return FAILURE; - } -} - -static void php_dom_iterator_current_data(zend_object_iterator *iter, zval ***data TSRMLS_DC) -{ - php_dom_iterator *iterator = (php_dom_iterator *)iter; - - *data = &iterator->curobj; -} - -static int php_dom_iterator_current_key(zend_object_iterator *iter, zstr *str_key, uint *str_key_len, ulong *int_key TSRMLS_DC) -{ - zval *curobj; - xmlNodePtr curnode = NULL; - dom_object *intern; - zval *object; - int namelen; - - php_dom_iterator *iterator = (php_dom_iterator *)iter; - - object = (zval *)iterator->intern.data; - - if (instanceof_function(Z_OBJCE_P(object), dom_nodelist_class_entry TSRMLS_CC)) { - *int_key = iter->index; - return HASH_KEY_IS_LONG; - } else { - curobj = iterator->curobj; - - intern = (dom_object *)zend_object_store_get_object(curobj TSRMLS_CC); - if (intern != NULL && intern->ptr != NULL) { - curnode = (xmlNodePtr)((php_libxml_node_ptr *)intern->ptr)->node; - } else { - return HASH_KEY_NON_EXISTANT; - } - - namelen = xmlStrlen(curnode->name); - str_key->s = estrndup(curnode->name, namelen); - *str_key_len = namelen + 1; - return HASH_KEY_IS_STRING; - } -} - -static void php_dom_iterator_move_forward(zend_object_iterator *iter TSRMLS_DC) -{ - zval *curobj, *curattr = NULL; - zval *object; - xmlNodePtr curnode = NULL, basenode; - dom_object *intern; - dom_object *nnmap; - dom_nnodemap_object *objmap; - int ret, previndex=0; - HashTable *nodeht; - zval **entry; - - php_dom_iterator *iterator = (php_dom_iterator *)iter; - - object = (zval *)iterator->intern.data; - nnmap = (dom_object *)zend_object_store_get_object(object TSRMLS_CC); - objmap = (dom_nnodemap_object *)nnmap->ptr; - - curobj = iterator->curobj; - intern = (dom_object *)zend_object_store_get_object(curobj TSRMLS_CC); - if (intern != NULL && intern->ptr != NULL) { - if (objmap->nodetype != XML_ENTITY_NODE && - objmap->nodetype != XML_NOTATION_NODE) { - if (objmap->nodetype == DOM_NODESET) { - nodeht = HASH_OF(objmap->baseobjptr); - zend_hash_move_forward(nodeht); - if (zend_hash_get_current_data(nodeht, (void **) &entry)==SUCCESS) { - curattr = *entry; - curattr->refcount++; - } - } else { - curnode = (xmlNodePtr)((php_libxml_node_ptr *)intern->ptr)->node; - if (objmap->nodetype == XML_ATTRIBUTE_NODE || - objmap->nodetype == XML_ELEMENT_NODE) { - curnode = curnode->next; - } else { - /* Nav the tree evey time as this is LIVE */ - basenode = dom_object_get_node(objmap->baseobj); - if (basenode && (basenode->type == XML_DOCUMENT_NODE || - basenode->type == XML_HTML_DOCUMENT_NODE)) { - basenode = xmlDocGetRootElement((xmlDoc *) basenode); - } else if (basenode) { - basenode = basenode->children; - } else { - goto err; - } - curnode = dom_get_elements_by_tag_name_ns_raw(basenode, objmap->ns, objmap->local, &previndex, iter->index); - } - } - } else { - if (objmap->nodetype == XML_ENTITY_NODE) { - curnode = php_dom_libxml_hash_iter(objmap->ht, iter->index); - } else { - curnode = php_dom_libxml_notation_iter(objmap->ht, iter->index); - } - } - } -err: - zval_ptr_dtor((zval**)&curobj); - if (curnode) { - MAKE_STD_ZVAL(curattr); - curattr = php_dom_create_object(curnode, &ret, NULL, curattr, objmap->baseobj TSRMLS_CC); - } - - iterator->curobj = curattr; -} - -zend_object_iterator_funcs php_dom_iterator_funcs = { - php_dom_iterator_dtor, - php_dom_iterator_valid, - php_dom_iterator_current_data, - php_dom_iterator_current_key, - php_dom_iterator_move_forward, - NULL -}; - -zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC) -{ - dom_object *intern; - dom_nnodemap_object *objmap; - xmlNodePtr nodep, curnode=NULL; - zval *curattr = NULL; - int ret, curindex = 0; - HashTable *nodeht; - zval **entry; - php_dom_iterator *iterator; - - if (by_ref) { - zend_error(E_ERROR, "An iterator cannot be used with foreach by reference"); - } - - iterator = emalloc(sizeof(php_dom_iterator)); - - object->refcount++; - iterator->intern.data = (void*)object; - iterator->intern.funcs = &php_dom_iterator_funcs; - - intern = (dom_object *)zend_object_store_get_object(object TSRMLS_CC); - objmap = (dom_nnodemap_object *)intern->ptr; - if (objmap != NULL) { - if (objmap->nodetype != XML_ENTITY_NODE && - objmap->nodetype != XML_NOTATION_NODE) { - if (objmap->nodetype == DOM_NODESET) { - nodeht = HASH_OF(objmap->baseobjptr); - zend_hash_internal_pointer_reset(nodeht); - if (zend_hash_get_current_data(nodeht, (void **) &entry)==SUCCESS) { - curattr = *entry; - curattr->refcount++; - } - } else { - nodep = (xmlNode *)dom_object_get_node(objmap->baseobj); - if (!nodep) { - goto err; - } - if (objmap->nodetype == XML_ATTRIBUTE_NODE || objmap->nodetype == XML_ELEMENT_NODE) { - if (objmap->nodetype == XML_ATTRIBUTE_NODE) { - curnode = (xmlNodePtr) nodep->properties; - } else { - curnode = (xmlNodePtr) nodep->children; - } - } else { - if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) { - nodep = xmlDocGetRootElement((xmlDoc *) nodep); - } else { - nodep = nodep->children; - } - curnode = dom_get_elements_by_tag_name_ns_raw(nodep, objmap->ns, objmap->local, &curindex, 0); - } - } - } else { - if (objmap->nodetype == XML_ENTITY_NODE) { - curnode = php_dom_libxml_hash_iter(objmap->ht, 0); - } else { - curnode = php_dom_libxml_notation_iter(objmap->ht, 0); - } - } - } -err: - if (curnode) { - MAKE_STD_ZVAL(curattr); - curattr = php_dom_create_object(curnode, &ret, NULL, curattr, objmap->baseobj TSRMLS_CC); - } - - iterator->curobj = curattr; - - return (zend_object_iterator*)iterator; -} - -#endif diff --git a/ext/dom/dom_properties.h b/ext/dom/dom_properties.h deleted file mode 100644 index d1da62850135a..0000000000000 --- a/ext/dom/dom_properties.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ -#ifndef DOM_PROPERTIES_H -#define DOM_PROPERTIES_H - -/* attr properties */ -int dom_attr_name_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_attr_specified_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_attr_value_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_attr_value_write(dom_object *obj, zval *newval TSRMLS_DC); -int dom_attr_owner_element_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_attr_schema_type_info_read(dom_object *obj, zval **retval TSRMLS_DC); - -/* characterdata properties */ -int dom_characterdata_data_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_characterdata_data_write(dom_object *obj, zval *newval TSRMLS_DC); -int dom_characterdata_length_read(dom_object *obj, zval **retval TSRMLS_DC); - -/* document properties */ -int dom_document_doctype_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_document_implementation_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_document_document_element_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_document_actual_encoding_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_document_actual_encoding_write(dom_object *obj, zval *newval TSRMLS_DC); -int dom_document_encoding_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_document_encoding_write(dom_object *obj, zval *newval TSRMLS_DC); -int dom_document_standalone_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_document_standalone_write(dom_object *obj, zval *newval TSRMLS_DC); -int dom_document_version_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_document_version_write(dom_object *obj, zval *newval TSRMLS_DC); -int dom_document_strict_error_checking_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_document_strict_error_checking_write(dom_object *obj, zval *newval TSRMLS_DC); -int dom_document_document_uri_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_document_document_uri_write(dom_object *obj, zval *newval TSRMLS_DC); -int dom_document_config_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_document_format_output_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_document_format_output_write(dom_object *obj, zval *newval TSRMLS_DC); -int dom_document_validate_on_parse_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_document_validate_on_parse_write(dom_object *obj, zval *newval TSRMLS_DC); -int dom_document_resolve_externals_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_document_resolve_externals_write(dom_object *obj, zval *newval TSRMLS_DC); -int dom_document_preserve_whitespace_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_document_preserve_whitespace_write(dom_object *obj, zval *newval TSRMLS_DC); -int dom_document_recover_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_document_recover_write(dom_object *obj, zval *newval TSRMLS_DC); -int dom_document_substitue_entities_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_document_substitue_entities_write(dom_object *obj, zval *newval TSRMLS_DC); - -/* documenttype properties */ -int dom_documenttype_name_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_documenttype_entities_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_documenttype_notations_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_documenttype_public_id_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_documenttype_system_id_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_documenttype_internal_subset_read(dom_object *obj, zval **retval TSRMLS_DC); - -/* domerror properties */ -int dom_domerror_severity_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_domerror_message_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_domerror_type_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_domerror_related_exception_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_domerror_related_data_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_domerror_location_read(dom_object *obj, zval **retval TSRMLS_DC); - -/* domimplementationlist properties */ -int dom_domimplementationlist_length_read(dom_object *obj, zval **retval TSRMLS_DC); - -/* domlocator properties */ -int dom_domlocator_line_number_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_domlocator_column_number_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_domlocator_offset_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_domlocator_related_node_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_domlocator_uri_read(dom_object *obj, zval **retval TSRMLS_DC); - -/* domstringlist properties */ -int dom_domstringlist_length_read(dom_object *obj, zval **retval TSRMLS_DC); - -/* element properties */ -int dom_element_tag_name_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_element_schema_type_info_read(dom_object *obj, zval **retval TSRMLS_DC); - -/* entity properties */ -int dom_entity_public_id_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_entity_system_id_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_entity_notation_name_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_entity_actual_encoding_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_entity_actual_encoding_write(dom_object *obj, zval *newval TSRMLS_DC); -int dom_entity_encoding_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_entity_encoding_write(dom_object *obj, zval *newval TSRMLS_DC); -int dom_entity_version_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_entity_version_write(dom_object *obj, zval *newval TSRMLS_DC); - -/* namednodemap properties */ -int dom_namednodemap_length_read(dom_object *obj, zval **retval TSRMLS_DC); - -/* namelist properties */ -int dom_namelist_length_read(dom_object *obj, zval **retval TSRMLS_DC); - -/* node properties */ -int dom_node_node_name_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_node_node_value_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_node_node_value_write(dom_object *obj, zval *newval TSRMLS_DC); -int dom_node_node_type_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_node_parent_node_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_node_child_nodes_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_node_first_child_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_node_last_child_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_node_previous_sibling_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_node_next_sibling_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_node_attributes_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_node_owner_document_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_node_namespace_uri_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_node_prefix_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_node_prefix_write(dom_object *obj, zval *newval TSRMLS_DC); -int dom_node_local_name_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_node_base_uri_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_node_text_content_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_node_text_content_write(dom_object *obj, zval *newval TSRMLS_DC); - -/* nodelist properties */ -int dom_nodelist_length_read(dom_object *obj, zval **retval TSRMLS_DC); - -/* notation properties */ -int dom_notation_public_id_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_notation_system_id_read(dom_object *obj, zval **retval TSRMLS_DC); - -/* processinginstruction properties */ -int dom_processinginstruction_target_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_processinginstruction_data_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_processinginstruction_data_write(dom_object *obj, zval *newval TSRMLS_DC); - -/* text properties */ -int dom_text_whole_text_read(dom_object *obj, zval **retval TSRMLS_DC); - -/* typeinfo properties */ -int dom_typeinfo_type_name_read(dom_object *obj, zval **retval TSRMLS_DC); -int dom_typeinfo_type_namespace_read(dom_object *obj, zval **retval TSRMLS_DC); - -#if defined(LIBXML_XPATH_ENABLED) -/* xpath properties */ -int dom_xpath_document_read(dom_object *obj, zval **retval TSRMLS_DC); -#endif - -#endif /* DOM_PROPERTIERS_H */ diff --git a/ext/dom/domconfiguration.c b/ext/dom/domconfiguration.c deleted file mode 100644 index 727cd086293fc..0000000000000 --- a/ext/dom/domconfiguration.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class domdomconfiguration -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration -* Since: DOM Level 3 -*/ - -zend_function_entry php_dom_domconfiguration_class_functions[] = { - PHP_FALIAS(setParameter, dom_domconfiguration_set_parameter, NULL) - PHP_FALIAS(getParameter, dom_domconfiguration_get_parameter, NULL) - PHP_FALIAS(canSetParameter, dom_domconfiguration_can_set_parameter, NULL) - {NULL, NULL, NULL} -}; - -/* {{{ attribute protos, not implemented yet */ - - -/* {{{ proto dom_void dom_domconfiguration_set_parameter(string name, domuserdata value) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-property -Since: -*/ -PHP_FUNCTION(dom_domconfiguration_set_parameter) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_domconfiguration_set_parameter */ - - -/* {{{ proto domdomuserdata dom_domconfiguration_get_parameter(string name) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-getParameter -Since: -*/ -PHP_FUNCTION(dom_domconfiguration_get_parameter) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_domconfiguration_get_parameter */ - - -/* {{{ proto boolean dom_domconfiguration_can_set_parameter(string name, domuserdata value) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-canSetParameter -Since: -*/ -PHP_FUNCTION(dom_domconfiguration_can_set_parameter) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_domconfiguration_can_set_parameter */ -#endif diff --git a/ext/dom/domerror.c b/ext/dom/domerror.c deleted file mode 100644 index 8bce0cda4aded..0000000000000 --- a/ext/dom/domerror.c +++ /dev/null @@ -1,138 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class domerror -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-Interfaces-DOMError -* Since: DOM Level 3 -*/ - -zend_function_entry php_dom_domerror_class_functions[] = { - {NULL, NULL, NULL} -}; - -/* {{{ attribute protos, not implemented yet */ - -/* {{{ severity unsigned short -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-severity -Since: -*/ -int dom_domerror_severity_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_STRING(*retval, "TEST", 1); - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ message string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-message -Since: -*/ -int dom_domerror_message_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_STRING(*retval, "TEST", 1); - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ type string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-type -Since: -*/ -int dom_domerror_type_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_STRING(*retval, "TEST", 1); - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ relatedException object -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-relatedException -Since: -*/ -int dom_domerror_related_exception_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_STRING(*retval, "TEST", 1); - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ relatedData domobject -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-relatedData -Since: -*/ -int dom_domerror_related_data_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_STRING(*retval, "TEST", 1); - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ location domlocator -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-location -Since: -*/ -int dom_domerror_location_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_STRING(*retval, "TEST", 1); - return SUCCESS; -} - -/* }}} */ - -#endif diff --git a/ext/dom/domerrorhandler.c b/ext/dom/domerrorhandler.c deleted file mode 100644 index be2594217acf0..0000000000000 --- a/ext/dom/domerrorhandler.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class domerrorhandler -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-Interfaces-DOMErrorHandler -* Since: DOM Level 3 -*/ - -zend_function_entry php_dom_domerrorhandler_class_functions[] = { - PHP_FALIAS(handleError, dom_domerrorhandler_handle_error, NULL) - {NULL, NULL, NULL} -}; - -/* {{{ attribute protos, not implemented yet */ - - -/* {{{ proto dom_boolean dom_domerrorhandler_handle_error(domerror error) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-ERRORS-DOMErrorHandler-handleError -Since: -*/ -PHP_FUNCTION(dom_domerrorhandler_handle_error) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_domerrorhandler_handle_error */ -#endif diff --git a/ext/dom/domexception.c b/ext/dom/domexception.c deleted file mode 100644 index 42aa341ada9ee..0000000000000 --- a/ext/dom/domexception.c +++ /dev/null @@ -1,117 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class DOMException -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-17189187 -* Since: -*/ - -extern zend_class_entry *dom_domexception_class_entry; - -zend_function_entry php_dom_domexception_class_functions[] = { - {NULL, NULL, NULL} -}; - -/* {{{ php_dom_throw_error_with_message */ -void php_dom_throw_error_with_message(int error_code, char *error_message, int strict_error TSRMLS_DC) -{ - if (strict_error == 1) { - zend_throw_exception(dom_domexception_class_entry, error_message, error_code TSRMLS_CC); - } else { - php_libxml_issue_error(E_WARNING, error_message TSRMLS_CC); - } -} - -/* {{{ php_dom_throw_error */ -void php_dom_throw_error(int error_code, int strict_error TSRMLS_DC) -{ - char *error_message; - - switch (error_code) - { - case INDEX_SIZE_ERR: - error_message = "Index Size Error"; - break; - case DOMSTRING_SIZE_ERR: - error_message = "DOM String Size Error"; - break; - case HIERARCHY_REQUEST_ERR: - error_message = "Hierarchy Request Error"; - break; - case WRONG_DOCUMENT_ERR: - error_message = "Wrong Document Error"; - break; - case INVALID_CHARACTER_ERR: - error_message = "Invalid Character Error"; - break; - case NO_DATA_ALLOWED_ERR: - error_message = "No Data Allowed Error"; - break; - case NO_MODIFICATION_ALLOWED_ERR: - error_message = "No Modification Allowed Error"; - break; - case NOT_FOUND_ERR: - error_message = "Not Found Error"; - break; - case NOT_SUPPORTED_ERR: - error_message = "Not Supported Error"; - break; - case INUSE_ATTRIBUTE_ERR: - error_message = "Inuse Attribute Error"; - break; - case INVALID_STATE_ERR: - error_message = "Invalid State Error"; - break; - case SYNTAX_ERR: - error_message = "Syntax Error"; - break; - case INVALID_MODIFICATION_ERR: - error_message = "Invalid Modification Error"; - break; - case NAMESPACE_ERR: - error_message = "Namespace Error"; - break; - case INVALID_ACCESS_ERR: - error_message = "Invalid Access Error"; - break; - case VALIDATION_ERR: - error_message = "Validation Error"; - break; - default: - error_message = "Unhandled Error"; - } - - php_dom_throw_error_with_message(error_code, error_message, strict_error TSRMLS_CC); -} -/* }}} end php_dom_throw_error */ - -#endif /* HAVE_LIBXML && HAVE_DOM */ diff --git a/ext/dom/domimplementation.c b/ext/dom/domimplementation.c deleted file mode 100644 index 7f9ec43048ec9..0000000000000 --- a/ext/dom/domimplementation.c +++ /dev/null @@ -1,240 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - -/* -* class DOMImplementation -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-102161490 -* Since: -*/ - -zend_function_entry php_dom_domimplementation_class_functions[] = { - PHP_ME(domimplementation, getFeature, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC) - PHP_ME(domimplementation, hasFeature, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC) - PHP_ME(domimplementation, createDocumentType, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC) - PHP_ME(domimplementation, createDocument, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC) - {NULL, NULL, NULL} -}; - -/* {{{ proto boolean dom_domimplementation_has_feature(string feature, string version) -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-5CED94D7 -Since: -*/ -PHP_METHOD(domimplementation, hasFeature) -{ - int feature_len, version_len; - char *feature, *version; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &feature, &feature_len, &version, &version_len) == FAILURE) { - return; - } - - if (dom_has_feature(feature, version)) { - RETURN_TRUE; - } else { - RETURN_FALSE; - } -} -/* }}} end dom_domimplementation_has_feature */ - - -/* {{{ proto DOMDocumentType dom_domimplementation_create_document_type(string qualifiedName, string publicId, string systemId) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocType -Since: DOM Level 2 -*/ -PHP_METHOD(domimplementation, createDocumentType) -{ - zval *rv = NULL; - xmlDtd *doctype; - int ret, name_len = 0, publicid_len = 0, systemid_len = 0; - char *name, *publicid, *systemid; - xmlChar *pch1 = NULL, *pch2 = NULL, *localname = NULL; - xmlURIPtr uri; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s&s&s&", &name, &name_len, UG(utf8_conv), &publicid, &publicid_len, UG(utf8_conv), &systemid, &systemid_len, UG(utf8_conv)) == FAILURE) { - return; - } - - if (name_len == 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "qualifiedName is required"); - RETURN_FALSE; - } - - if (publicid_len > 0) - pch1 = publicid; - if (systemid_len > 0) - pch2 = systemid; - - uri = xmlParseURI(name); - if (uri != NULL && uri->opaque != NULL) { - localname = xmlStrdup(uri->opaque); - if (xmlStrchr(localname, (xmlChar) ':') != NULL) { - php_dom_throw_error(NAMESPACE_ERR, 1 TSRMLS_CC); - xmlFreeURI(uri); - xmlFree(localname); - RETURN_FALSE; - } - } else { - localname = xmlStrdup(name); - } - - /* TODO: Test that localname has no invalid chars - php_dom_throw_error(INVALID_CHARACTER_ERR, TSRMLS_CC); - */ - - if (uri) { - xmlFreeURI(uri); - } - - doctype = xmlCreateIntSubset(NULL, localname, pch1, pch2); - xmlFree(localname); - - if (doctype == NULL) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create DocumentType"); - RETURN_FALSE; - } - - DOM_RET_OBJ(rv, (xmlNodePtr) doctype, &ret, NULL); -} -/* }}} end dom_domimplementation_create_document_type */ - - -/* {{{ proto DOMDocument dom_domimplementation_create_document(string namespaceURI, string qualifiedName, DOMDocumentType doctype) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocument -Since: DOM Level 2 -*/ -PHP_METHOD(domimplementation, createDocument) -{ - zval *node = NULL, *rv = NULL; - xmlDoc *docp; - xmlNode *nodep; - xmlDtdPtr doctype = NULL; - xmlNsPtr nsptr = NULL; - int ret, uri_len = 0, name_len = 0, errorcode = 0; - char *uri, *name; - char *prefix = NULL, *localname = NULL; - dom_object *doctobj; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s&s&O", &uri, &uri_len, UG(utf8_conv), &name, &name_len, UG(utf8_conv), &node, dom_documenttype_class_entry) == FAILURE) { - return; - } - - if (node != NULL) { - DOM_GET_OBJ(doctype, node, xmlDtdPtr, doctobj); - if (doctype->type == XML_DOCUMENT_TYPE_NODE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid DocumentType object"); - RETURN_FALSE; - } - if (doctype->doc != NULL) { - php_dom_throw_error(WRONG_DOCUMENT_ERR, 1 TSRMLS_CC); - RETURN_FALSE; - } - } else { - doctobj = NULL; - } - - if (name_len > 0) { - errorcode = dom_check_qname(name, &localname, &prefix, 1, name_len); - if (errorcode == 0 && uri_len > 0 && ((nsptr = xmlNewNs(NULL, uri, prefix)) == NULL)) { - errorcode = NAMESPACE_ERR; - } - } - - if (prefix != NULL) { - xmlFree(prefix); - } - - if (errorcode != 0) { - if (localname != NULL) { - xmlFree(localname); - } - php_dom_throw_error(errorcode, 1 TSRMLS_CC); - RETURN_FALSE; - } - - /* currently letting libxml2 set the version string */ - docp = xmlNewDoc(NULL); - if (!docp) { - if (localname != NULL) { - xmlFree(localname); - } - RETURN_FALSE; - } - - if (doctype != NULL) { - docp->intSubset = doctype; - doctype->parent = docp; - doctype->doc = docp; - docp->children = (xmlNodePtr) doctype; - docp->last = (xmlNodePtr) doctype; - } - - if (localname != NULL) { - nodep = xmlNewDocNode (docp, nsptr, localname, NULL); - if (!nodep) { - if (doctype != NULL) { - docp->intSubset = NULL; - doctype->parent = NULL; - doctype->doc = NULL; - docp->children = NULL; - docp->last = NULL; - } - xmlFreeDoc(docp); - xmlFree(localname); - /* Need some type of error here */ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unexpected Error"); - RETURN_FALSE; - } - - nodep->nsDef = nsptr; - - xmlDocSetRootElement(docp, nodep); - xmlFree(localname); - } - - DOM_RET_OBJ(rv, (xmlNodePtr) docp, &ret, NULL); - - if (doctobj != NULL) { - doctobj->document = ((dom_object *)((php_libxml_node_ptr *)docp->_private)->_private)->document; - php_libxml_increment_doc_ref((php_libxml_node_object *)doctobj, docp TSRMLS_CC); - } -} -/* }}} end dom_domimplementation_create_document */ - - -/* {{{ proto DOMNode dom_domimplementation_get_feature(string feature, string version) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementation3-getFeature -Since: DOM Level 3 -*/ -PHP_METHOD(domimplementation, getFeature) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_domimplementation_get_feature */ -#endif diff --git a/ext/dom/domimplementationlist.c b/ext/dom/domimplementationlist.c deleted file mode 100644 index afc2fd288b247..0000000000000 --- a/ext/dom/domimplementationlist.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class domimplementationlist -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList -* Since: DOM Level 3 -*/ - -zend_function_entry php_dom_domimplementationlist_class_functions[] = { - PHP_FALIAS(item, dom_domimplementationlist_item, NULL) - {NULL, NULL, NULL} -}; - -/* {{{ attribute protos, not implemented yet */ - -/* {{{ length unsigned long -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-length -Since: -*/ -int dom_domimplementationlist_length_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_STRING(*retval, "TEST", 1); - return SUCCESS; -} - -/* }}} */ - - - - -/* {{{ proto domdomimplementation dom_domimplementationlist_item(int index) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-item -Since: -*/ -PHP_FUNCTION(dom_domimplementationlist_item) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_domimplementationlist_item */ -#endif diff --git a/ext/dom/domimplementationsource.c b/ext/dom/domimplementationsource.c deleted file mode 100644 index a9fb1913532ae..0000000000000 --- a/ext/dom/domimplementationsource.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class domimplementationsource -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationSource -* Since: DOM Level 3 -*/ - -zend_function_entry php_dom_domimplementationsource_class_functions[] = { - PHP_FALIAS(getDomimplementation, dom_domimplementationsource_get_domimplementation, NULL) - PHP_FALIAS(getDomimplementations, dom_domimplementationsource_get_domimplementations, NULL) - {NULL, NULL, NULL} -}; - -/* {{{ attribute protos, not implemented yet */ - - -/* {{{ proto domdomimplementation dom_domimplementationsource_get_domimplementation(string features) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpl -Since: -*/ -PHP_FUNCTION(dom_domimplementationsource_get_domimplementation) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_domimplementationsource_get_domimplementation */ - - -/* {{{ proto domimplementationlist dom_domimplementationsource_get_domimplementations(string features) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpls -Since: -*/ -PHP_FUNCTION(dom_domimplementationsource_get_domimplementations) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_domimplementationsource_get_domimplementations */ -#endif diff --git a/ext/dom/domlocator.c b/ext/dom/domlocator.c deleted file mode 100644 index c98067106cbc0..0000000000000 --- a/ext/dom/domlocator.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class domlocator -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Interfaces-DOMLocator -* Since: DOM Level 3 -*/ - -zend_function_entry php_dom_domlocator_class_functions[] = { - {NULL, NULL, NULL} -}; - -/* {{{ attribute protos, not implemented yet */ - -/* {{{ line_number long -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-line-number -Since: -*/ -int dom_domlocator_line_number_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_STRING(*retval, "TEST", 1); - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ column_number long -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-column-number -Since: -*/ -int dom_domlocator_column_number_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_STRING(*retval, "TEST", 1); - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ offset long -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-offset -Since: -*/ -int dom_domlocator_offset_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_STRING(*retval, "TEST", 1); - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ related_node node -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-node -Since: -*/ -int dom_domlocator_related_node_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_STRING(*retval, "TEST", 1); - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ uri string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-uri -Since: -*/ -int dom_domlocator_uri_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_STRING(*retval, "TEST", 1); - return SUCCESS; -} - -/* }}} */ - - -#endif diff --git a/ext/dom/domstringlist.c b/ext/dom/domstringlist.c deleted file mode 100644 index 6ade1dd2e30db..0000000000000 --- a/ext/dom/domstringlist.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class domstringlist -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList -* Since: DOM Level 3 -*/ - -zend_function_entry php_dom_domstringlist_class_functions[] = { - PHP_FALIAS(item, dom_domstringlist_item, NULL) - {NULL, NULL, NULL} -}; - -/* {{{ attribute protos, not implemented yet */ - -/* {{{ length unsigned long -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-length -Since: -*/ -int dom_domstringlist_length_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_STRING(*retval, "TEST", 1); - return SUCCESS; -} - -/* }}} */ - - - - -/* {{{ proto domstring dom_domstringlist_item(int index) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-item -Since: -*/ -PHP_FUNCTION(dom_domstringlist_item) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_domstringlist_item */ -#endif diff --git a/ext/dom/element.c b/ext/dom/element.c deleted file mode 100644 index 6ba7a95344bbb..0000000000000 --- a/ext/dom/element.c +++ /dev/null @@ -1,1132 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class DOMElement extends DOMNode -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-745549614 -* Since: -*/ - -zend_function_entry php_dom_element_class_functions[] = { - PHP_FALIAS(getAttribute, dom_element_get_attribute, NULL) - PHP_FALIAS(setAttribute, dom_element_set_attribute, NULL) - PHP_FALIAS(removeAttribute, dom_element_remove_attribute, NULL) - PHP_FALIAS(getAttributeNode, dom_element_get_attribute_node, NULL) - PHP_FALIAS(setAttributeNode, dom_element_set_attribute_node, NULL) - PHP_FALIAS(removeAttributeNode, dom_element_remove_attribute_node, NULL) - PHP_FALIAS(getElementsByTagName, dom_element_get_elements_by_tag_name, NULL) - PHP_FALIAS(getAttributeNS, dom_element_get_attribute_ns, NULL) - PHP_FALIAS(setAttributeNS, dom_element_set_attribute_ns, NULL) - PHP_FALIAS(removeAttributeNS, dom_element_remove_attribute_ns, NULL) - PHP_FALIAS(getAttributeNodeNS, dom_element_get_attribute_node_ns, NULL) - PHP_FALIAS(setAttributeNodeNS, dom_element_set_attribute_node_ns, NULL) - PHP_FALIAS(getElementsByTagNameNS, dom_element_get_elements_by_tag_name_ns, NULL) - PHP_FALIAS(hasAttribute, dom_element_has_attribute, NULL) - PHP_FALIAS(hasAttributeNS, dom_element_has_attribute_ns, NULL) - PHP_FALIAS(setIdAttribute, dom_element_set_id_attribute, NULL) - PHP_FALIAS(setIdAttributeNS, dom_element_set_id_attribute_ns, NULL) - PHP_FALIAS(setIdAttributeNode, dom_element_set_id_attribute_node, NULL) - PHP_ME(domelement, __construct, NULL, ZEND_ACC_PUBLIC) - {NULL, NULL, NULL} -}; - -/* {{{ proto void DOMElement::__construct(string name, [string value], [string uri]) U */ -PHP_METHOD(domelement, __construct) -{ - - zval *id; - xmlNodePtr nodep = NULL, oldnode = NULL; - dom_object *intern; - char *name, *value = NULL, *uri = NULL; - char *localname = NULL, *prefix = NULL; - int errorcode = 0, uri_len = 0; - int name_len, value_len = 0, name_valid; - xmlNsPtr nsptr = NULL; - - php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC); - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&|s!&s&", &id, dom_element_class_entry, &name, &name_len, UG(utf8_conv), &value, &value_len, UG(utf8_conv), &uri, &uri_len, UG(utf8_conv)) == FAILURE) { - php_std_error_handling(); - return; - } - php_std_error_handling(); - - name_valid = xmlValidateName((xmlChar *) name, 0); - if (name_valid != 0) { - php_dom_throw_error(INVALID_CHARACTER_ERR, 1 TSRMLS_CC); - RETURN_FALSE; - } - - /* Namespace logic is seperate and only when uri passed in to insure no BC breakage */ - if (uri_len > 0) { - errorcode = dom_check_qname(name, &localname, &prefix, uri_len, name_len); - if (errorcode == 0) { - nodep = xmlNewNode (NULL, (xmlChar *)localname); - if (nodep != NULL && uri != NULL) { - nsptr = dom_get_ns(nodep, uri, &errorcode, prefix); - xmlSetNs(nodep, nsptr); - } - } - xmlFree(localname); - if (prefix != NULL) { - xmlFree(prefix); - } - if (errorcode != 0) { - if (nodep != NULL) { - xmlFreeNode(nodep); - } - php_dom_throw_error(errorcode, 1 TSRMLS_CC); - RETURN_FALSE; - } - } else { - /* If you don't pass a namespace uri, then you can't set a prefix */ - localname = xmlSplitQName2((xmlChar *)name, (xmlChar **) &prefix); - if (prefix != NULL) { - xmlFree(localname); - xmlFree(prefix); - php_dom_throw_error(NAMESPACE_ERR, 1 TSRMLS_CC); - RETURN_FALSE; - } - nodep = xmlNewNode(NULL, (xmlChar *) name); - } - - if (!nodep) { - php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC); - RETURN_FALSE; - } - - if (value_len > 0) { - xmlNodeSetContentLen(nodep, (xmlChar *) value, value_len); - } - - intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); - if (intern != NULL) { - oldnode = dom_object_get_node(intern); - if (oldnode != NULL) { - php_libxml_node_free_resource(oldnode TSRMLS_CC); - } - php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC); - } -} -/* }}} end DOMElement::__construct */ - -/* {{{ tagName string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-104682815 -Since: -*/ -int dom_element_tag_name_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNodePtr nodep; - xmlNsPtr ns; - xmlChar *qname; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - ns = nodep->ns; - if (ns != NULL && ns->prefix) { - qname = xmlStrdup(ns->prefix); - qname = xmlStrcat(qname, ":"); - qname = xmlStrcat(qname, nodep->name); - ZVAL_XML_STRING(*retval, (char *)qname, ZSTR_DUPLICATE); - xmlFree(qname); - } else { - ZVAL_XML_STRING(*retval, (char *) nodep->name, ZSTR_DUPLICATE); - } - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ schemaTypeInfo typeinfo -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Element-schemaTypeInfo -Since: DOM Level 3 -*/ -int dom_element_schema_type_info_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_NULL(*retval); - return SUCCESS; -} - -/* }}} */ - -static xmlNodePtr dom_get_dom1_attribute(xmlNodePtr elem, xmlChar *name) { - int len; - const xmlChar *nqname; - - nqname = xmlSplitQName3(name, &len); - if (nqname != NULL) { - xmlNsPtr ns; - xmlChar *prefix = xmlStrndup(name, len); - if (prefix && xmlStrEqual(prefix, "xmlns")) { - ns = elem->nsDef; - while (ns) { - if (xmlStrEqual(ns->prefix, nqname)) { - break; - } - ns = ns->next; - } - xmlFree(prefix); - return (xmlNodePtr)ns; - } - ns = xmlSearchNs(elem->doc, elem, prefix); - if (prefix != NULL) { - xmlFree(prefix); - } - if (ns != NULL) { - return (xmlNodePtr)xmlHasNsProp(elem, nqname, ns->href); - } - } else { - if (xmlStrEqual(name, "xmlns")) { - xmlNsPtr nsPtr = elem->nsDef; - while (nsPtr) { - if (nsPtr->prefix == NULL) { - return (xmlNodePtr)nsPtr; - } - nsPtr = nsPtr->next; - } - return NULL; - } - } - return (xmlNodePtr)xmlHasNsProp(elem, name, NULL); -} - -/* {{{ proto string dom_element_get_attribute(string name) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-666EE0F9 -Since: -*/ -PHP_FUNCTION(dom_element_get_attribute) -{ - zval *id; - xmlNode *nodep; - char *name, *value = NULL; - dom_object *intern; - xmlNodePtr attr; - int name_len; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &id, dom_element_class_entry, &name, &name_len) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - attr = dom_get_dom1_attribute(nodep, (xmlChar *)name); - if (attr) { - switch (attr->type) { - case XML_ATTRIBUTE_NODE: - value = xmlNodeListGetString(attr->doc, attr->children, 1); - break; - case XML_NAMESPACE_DECL: - value = xmlStrdup(((xmlNsPtr)attr)->href); - break; - default: - value = xmlStrdup(((xmlAttributePtr)attr)->defaultValue); - } - } - - if (value == NULL) { - RETURN_EMPTY_TEXT(); - } else { - RETVAL_XML_STRING(value, ZSTR_DUPLICATE); - xmlFree(value); - } -} -/* }}} end dom_element_get_attribute */ - - -/* {{{ proto void dom_element_set_attribute(string name, string value) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082 -Since: -*/ -PHP_FUNCTION(dom_element_set_attribute) -{ - zval *id, *rv = NULL; - xmlNode *nodep; - xmlNodePtr attr = NULL; - int ret, name_len, value_len; - dom_object *intern; - char *name, *value; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&s&", &id, dom_element_class_entry, &name, &name_len, UG(utf8_conv), &value, &value_len, UG(utf8_conv)) == FAILURE) { - return; - } - - if (name_len == 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attribute Name is required"); - RETURN_FALSE; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - if (dom_node_is_read_only(nodep) == SUCCESS) { - php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - - attr = dom_get_dom1_attribute(nodep, (xmlChar *)name); - if (attr != NULL) { - switch (attr->type) { - case XML_ATTRIBUTE_NODE: - node_list_unlink(attr->children TSRMLS_CC); - break; - case XML_NAMESPACE_DECL: - RETURN_FALSE; - default: - break; - } - - } - - if (xmlStrEqual((xmlChar *)name, "xmlns")) { - if (xmlNewNs(nodep, (xmlChar *)value, NULL)) { - RETURN_TRUE; - } - } else { - attr = (xmlNodePtr)xmlSetProp(nodep, (xmlChar *) name, value); - } - if (!attr) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "No such attribute '%s'", name); - RETURN_FALSE; - } - - DOM_RET_OBJ(rv, attr, &ret, intern); - -} -/* }}} end dom_element_set_attribute */ - - -/* {{{ proto void dom_element_remove_attribute(string name) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9 -Since: -*/ -PHP_FUNCTION(dom_element_remove_attribute) -{ - zval *id; - xmlNodePtr nodep, attrp; - dom_object *intern; - int name_len; - char *name; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &id, dom_element_class_entry, &name, &name_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - if (dom_node_is_read_only(nodep) == SUCCESS) { - php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - - attrp = dom_get_dom1_attribute(nodep, (xmlChar *)name); - if (attrp == NULL) { - RETURN_FALSE; - } - - switch (attrp->type) { - case XML_ATTRIBUTE_NODE: - if (php_dom_object_get_data(attrp) == NULL) { - node_list_unlink(attrp->children TSRMLS_CC); - xmlUnlinkNode(attrp); - xmlFreeProp((xmlAttrPtr)attrp); - } else { - xmlUnlinkNode(attrp); - } - break; - case XML_NAMESPACE_DECL: - RETURN_FALSE; - default: - break; - } - - RETURN_TRUE; -} -/* }}} end dom_element_remove_attribute */ - - -/* {{{ proto DOMAttr dom_element_get_attribute_node(string name) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-217A91B8 -Since: -*/ -PHP_FUNCTION(dom_element_get_attribute_node) -{ - zval *id, *rv = NULL; - xmlNodePtr nodep, attrp; - int name_len, ret; - dom_object *intern; - char *name; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &id, dom_element_class_entry, &name, &name_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - attrp = dom_get_dom1_attribute(nodep, (xmlChar *)name); - if (attrp == NULL) { - RETURN_FALSE; - } - - if (attrp->type == XML_NAMESPACE_DECL) { - xmlNsPtr curns; - xmlNodePtr nsparent; - - nsparent = attrp->_private; - curns = xmlNewNs(NULL, attrp->name, NULL); - if (attrp->children) { - curns->prefix = xmlStrdup((xmlChar *) attrp->children); - } - if (attrp->children) { - attrp = xmlNewDocNode(nodep->doc, NULL, (xmlChar *) attrp->children, attrp->name); - } else { - attrp = xmlNewDocNode(nodep->doc, NULL, "xmlns", attrp->name); - } - attrp->type = XML_NAMESPACE_DECL; - attrp->parent = nsparent; - attrp->ns = curns; - } - - DOM_RET_OBJ(rv, (xmlNodePtr) attrp, &ret, intern); -} -/* }}} end dom_element_get_attribute_node */ - - -/* {{{ proto DOMAttr dom_element_set_attribute_node(DOMAttr newAttr) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-887236154 -Since: -*/ -PHP_FUNCTION(dom_element_set_attribute_node) -{ - zval *id, *node, *rv = NULL; - xmlNode *nodep; - xmlAttr *attrp, *existattrp = NULL; - dom_object *intern, *attrobj, *oldobj; - int ret; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &id, dom_element_class_entry, &node, dom_attr_class_entry) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - if (dom_node_is_read_only(nodep) == SUCCESS) { - php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - - DOM_GET_OBJ(attrp, node, xmlAttrPtr, attrobj); - - if (attrp->type != XML_ATTRIBUTE_NODE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attribute node is required"); - RETURN_FALSE; - } - - if (!(attrp->doc == NULL || attrp->doc == nodep->doc)) { - php_dom_throw_error(WRONG_DOCUMENT_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - - existattrp = xmlHasProp(nodep, attrp->name); - if (existattrp != NULL && existattrp->type != XML_ATTRIBUTE_DECL) { - if ((oldobj = php_dom_object_get_data((xmlNodePtr) existattrp)) != NULL && - ((php_libxml_node_ptr *)oldobj->ptr)->node == (xmlNodePtr) attrp) - { - RETURN_NULL(); - } - xmlUnlinkNode((xmlNodePtr) existattrp); - } - - if (attrp->doc == NULL && nodep->doc != NULL) { - attrobj->document = intern->document; - php_libxml_increment_doc_ref((php_libxml_node_object *)attrobj, NULL TSRMLS_CC); - } - - xmlAddChild(nodep, (xmlNodePtr) attrp); - - /* Returns old property if removed otherwise NULL */ - if (existattrp != NULL) { - DOM_RET_OBJ(rv, (xmlNodePtr) existattrp, &ret, intern); - } else { - RETVAL_NULL(); - } - -} -/* }}} end dom_element_set_attribute_node */ - - -/* {{{ proto DOMAttr dom_element_remove_attribute_node(DOMAttr oldAttr) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D589198 -Since: -*/ -PHP_FUNCTION(dom_element_remove_attribute_node) -{ - zval *id, *node, *rv = NULL; - xmlNode *nodep; - xmlAttr *attrp; - dom_object *intern, *attrobj; - int ret; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &id, dom_element_class_entry, &node, dom_attr_class_entry) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - if (dom_node_is_read_only(nodep) == SUCCESS) { - php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - - DOM_GET_OBJ(attrp, node, xmlAttrPtr, attrobj); - - if (attrp->type != XML_ATTRIBUTE_NODE || attrp->parent != nodep) { - php_dom_throw_error(NOT_FOUND_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - - xmlUnlinkNode((xmlNodePtr) attrp); - - DOM_RET_OBJ(rv, (xmlNodePtr) attrp, &ret, intern); - -} -/* }}} end dom_element_remove_attribute_node */ - - -/* {{{ proto DOMNodeList dom_element_get_elements_by_tag_name(string name) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1938918D -Since: -*/ -PHP_FUNCTION(dom_element_get_elements_by_tag_name) -{ - zval *id; - xmlNodePtr elemp; - int name_len; - dom_object *intern, *namednode; - char *name; - xmlChar *local; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &id, dom_element_class_entry, &name, &name_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(elemp, id, xmlNodePtr, intern); - - php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC); - namednode = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC); - local = xmlCharStrndup(name, name_len); - dom_namednode_iter(intern, 0, namednode, NULL, local, NULL TSRMLS_CC); -} -/* }}} end dom_element_get_elements_by_tag_name */ - - -/* {{{ proto string dom_element_get_attribute_ns(string namespaceURI, string localName) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAttrNS -Since: DOM Level 2 -*/ -PHP_FUNCTION(dom_element_get_attribute_ns) -{ - zval *id; - xmlNodePtr elemp; - xmlNsPtr nsptr; - dom_object *intern; - int uri_len = 0, name_len = 0; - char *uri, *name, *strattr; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os!&s&", &id, dom_element_class_entry, &uri, &uri_len, UG(utf8_conv), &name, &name_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(elemp, id, xmlNodePtr, intern); - - strattr = xmlGetNsProp(elemp, (xmlChar *) name, (xmlChar *) uri); - - if (strattr != NULL) { - RETVAL_XML_STRING(strattr, ZSTR_DUPLICATE); - xmlFree(strattr); - } else { - if (xmlStrEqual((xmlChar *) uri, DOM_XMLNS_NAMESPACE)) { - nsptr = dom_get_nsdecl(elemp, name); - if (nsptr != NULL) { - RETVAL_XML_STRING((char *) nsptr->href, ZSTR_DUPLICATE); - } else { - RETVAL_EMPTY_TEXT(); - } - } else { - RETVAL_EMPTY_TEXT(); - } - } - -} -/* }}} end dom_element_get_attribute_ns */ - -static xmlNsPtr _dom_new_reconNs(xmlDocPtr doc, xmlNodePtr tree, xmlNsPtr ns) { - xmlNsPtr def; - xmlChar prefix[50]; - int counter = 1; - - if ((tree == NULL) || (ns == NULL) || (ns->type != XML_NAMESPACE_DECL)) { - return NULL; - } - - /* Code taken from libxml2 (2.6.20) xmlNewReconciliedNs - * - * Find a close prefix which is not already in use. - * Let's strip namespace prefixes longer than 20 chars ! - */ - if (ns->prefix == NULL) - snprintf((char *) prefix, sizeof(prefix), "default"); - else - snprintf((char *) prefix, sizeof(prefix), "%.20s", (char *)ns->prefix); - - def = xmlSearchNs(doc, tree, prefix); - while (def != NULL) { - if (counter > 1000) return(NULL); - if (ns->prefix == NULL) - snprintf((char *) prefix, sizeof(prefix), "default%d", counter++); - else - snprintf((char *) prefix, sizeof(prefix), "%.20s%d", - (char *)ns->prefix, counter++); - def = xmlSearchNs(doc, tree, prefix); - } - - /* - * OK, now we are ready to create a new one. - */ - def = xmlNewNs(tree, ns->href, prefix); - return(def); -} - -/* {{{ proto void dom_element_set_attribute_ns(string namespaceURI, string qualifiedName, string value) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAttrNS -Since: DOM Level 2 -*/ -PHP_FUNCTION(dom_element_set_attribute_ns) -{ - zval *id; - xmlNodePtr elemp, nodep = NULL; - xmlNsPtr nsptr; - xmlAttr *attr; - int uri_len = 0, name_len = 0, value_len = 0; - char *uri, *name, *value; - char *localname = NULL, *prefix = NULL; - dom_object *intern; - int errorcode = 0, stricterror, is_xmlns = 0; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os!&s&s&", &id, dom_element_class_entry, &uri, &uri_len, UG(utf8_conv), &name, &name_len, UG(utf8_conv), &value, &value_len, UG(utf8_conv)) == FAILURE) { - return; - } - - if (name_len == 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attribute Name is required"); - RETURN_FALSE; - } - - DOM_GET_OBJ(elemp, id, xmlNodePtr, intern); - - stricterror = dom_get_strict_error(intern->document); - - if (dom_node_is_read_only(elemp) == SUCCESS) { - php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, stricterror TSRMLS_CC); - RETURN_NULL(); - } - - errorcode = dom_check_qname(name, &localname, &prefix, uri_len, name_len); - - if (errorcode == 0) { - if (uri_len > 0) { - nodep = (xmlNodePtr) xmlHasNsProp(elemp, (xmlChar *) localname, (xmlChar *) uri); - if (nodep != NULL && nodep->type != XML_ATTRIBUTE_DECL) { - node_list_unlink(nodep->children TSRMLS_CC); - } - - if (xmlStrEqual((xmlChar *) prefix,"xmlns") && xmlStrEqual((xmlChar *) uri, DOM_XMLNS_NAMESPACE)) { - is_xmlns = 1; - nsptr = dom_get_nsdecl(elemp, localname); - } else { - nsptr = xmlSearchNsByHref(elemp->doc, elemp, uri); - if (nsptr && nsptr->prefix == NULL) { - xmlNsPtr tmpnsptr; - - tmpnsptr = nsptr->next; - while (tmpnsptr) { - if ((tmpnsptr->prefix != NULL) && (tmpnsptr->href != NULL) && - (xmlStrEqual(tmpnsptr->href, (xmlChar *) uri))) { - nsptr = tmpnsptr; - break; - } - tmpnsptr = tmpnsptr->next; - } - if (tmpnsptr == NULL) { - nsptr = _dom_new_reconNs(elemp->doc, elemp, nsptr); - } - } - } - - if (nsptr == NULL) { - if (prefix == NULL) { - errorcode = NAMESPACE_ERR; - } else { - if (is_xmlns == 1) { - xmlNewNs(elemp, value, localname); - } else { - nsptr = dom_get_ns(elemp, uri, &errorcode, prefix); - } - } - } else { - if (is_xmlns == 1) { - if (nsptr->href) { - xmlFree((xmlChar *) nsptr->href); - } - nsptr->href = xmlStrdup(value); - } - } - - if (errorcode == 0 && is_xmlns == 0) { - attr = xmlSetNsProp(elemp, nsptr, localname, value); - } - } else { - attr = xmlHasProp(elemp, localname); - if (attr != NULL && attr->type != XML_ATTRIBUTE_DECL) { - node_list_unlink(attr->children TSRMLS_CC); - } - attr = xmlSetProp(elemp, localname, value); - } - } - - xmlFree(localname); - if (prefix != NULL) { - xmlFree(prefix); - } - - if (errorcode != 0) { - php_dom_throw_error(errorcode, stricterror TSRMLS_CC); - } - - RETURN_NULL(); -} -/* }}} end dom_element_set_attribute_ns */ - - -/* {{{ proto void dom_element_remove_attribute_ns(string namespaceURI, string localName) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElRemAtNS -Since: DOM Level 2 -*/ -PHP_FUNCTION(dom_element_remove_attribute_ns) -{ - zval *id; - xmlNode *nodep; - xmlAttr *attrp; - xmlNsPtr nsptr; - dom_object *intern; - int name_len, uri_len; - char *name, *uri; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os!&s&", &id, dom_element_class_entry, &uri, &uri_len, UG(utf8_conv), &name, &name_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - if (dom_node_is_read_only(nodep) == SUCCESS) { - php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_NULL(); - } - - attrp = xmlHasNsProp(nodep, (xmlChar *)name, (xmlChar *)uri); - - nsptr = dom_get_nsdecl(nodep, (xmlChar *)name); - if (nsptr != NULL) { - if (xmlStrEqual((xmlChar *)uri, nsptr->href)) { - if (nsptr->href != NULL) { - xmlFree((char *) nsptr->href); - nsptr->href = NULL; - } - if (nsptr->prefix != NULL) { - xmlFree((char *) nsptr->prefix); - nsptr->prefix = NULL; - } - } else { - RETURN_NULL(); - } - } - - if (attrp && attrp->type != XML_ATTRIBUTE_DECL) { - if (php_dom_object_get_data((xmlNodePtr) attrp) == NULL) { - node_list_unlink(attrp->children TSRMLS_CC); - xmlUnlinkNode((xmlNodePtr) attrp); - xmlFreeProp(attrp); - } else { - xmlUnlinkNode((xmlNodePtr) attrp); - } - } - - RETURN_NULL(); -} -/* }}} end dom_element_remove_attribute_ns */ - - -/* {{{ proto DOMAttr dom_element_get_attribute_node_ns(string namespaceURI, string localName) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAtNodeNS -Since: DOM Level 2 -*/ -PHP_FUNCTION(dom_element_get_attribute_node_ns) -{ - zval *id, *rv = NULL; - xmlNodePtr elemp; - xmlAttrPtr attrp; - dom_object *intern; - int uri_len, name_len, ret; - char *uri, *name; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os!&s&", &id, dom_element_class_entry, &uri, &uri_len, UG(utf8_conv), &name, &name_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(elemp, id, xmlNodePtr, intern); - - attrp = xmlHasNsProp(elemp, (xmlChar *)name, (xmlChar *)uri); - - if (attrp == NULL) { - RETURN_NULL(); - } - - DOM_RET_OBJ(rv, (xmlNodePtr) attrp, &ret, intern); - -} -/* }}} end dom_element_get_attribute_node_ns */ - - -/* {{{ proto DOMAttr dom_element_set_attribute_node_ns(DOMAttr newAttr) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAtNodeNS -Since: DOM Level 2 -*/ -PHP_FUNCTION(dom_element_set_attribute_node_ns) -{ - zval *id, *node, *rv = NULL; - xmlNode *nodep; - xmlNs *nsp; - xmlAttr *attrp, *existattrp = NULL; - dom_object *intern, *attrobj, *oldobj; - int ret; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &id, dom_element_class_entry, &node, dom_attr_class_entry) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - if (dom_node_is_read_only(nodep) == SUCCESS) { - php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - - DOM_GET_OBJ(attrp, node, xmlAttrPtr, attrobj); - - if (attrp->type != XML_ATTRIBUTE_NODE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attribute node is required"); - RETURN_FALSE; - } - - if (!(attrp->doc == NULL || attrp->doc == nodep->doc)) { - php_dom_throw_error(WRONG_DOCUMENT_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } - - nsp = attrp->ns; - if (nsp != NULL) { - existattrp = xmlHasNsProp(nodep, nsp->href, attrp->name); - } else { - existattrp = xmlHasProp(nodep, attrp->name); - } - - if (existattrp != NULL && existattrp->type != XML_ATTRIBUTE_DECL) { - if ((oldobj = php_dom_object_get_data((xmlNodePtr) existattrp)) != NULL && - ((php_libxml_node_ptr *)oldobj->ptr)->node == (xmlNodePtr) attrp) - { - RETURN_NULL(); - } - xmlUnlinkNode((xmlNodePtr) existattrp); - } - - if (attrp->doc == NULL && nodep->doc != NULL) { - attrobj->document = intern->document; - php_libxml_increment_doc_ref((php_libxml_node_object *)attrobj, NULL TSRMLS_CC); - } - - xmlAddChild(nodep, (xmlNodePtr) attrp); - - /* Returns old property if removed otherwise NULL */ - if (existattrp != NULL) { - DOM_RET_OBJ(rv, (xmlNodePtr) existattrp, &ret, intern); - } else { - RETVAL_NULL(); - } - -} -/* }}} end dom_element_set_attribute_node_ns */ - - - -/* {{{ proto DOMNodeList dom_element_get_elements_by_tag_name_ns(string namespaceURI, string localName) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C90942 -Since: DOM Level 2 -*/ -PHP_FUNCTION(dom_element_get_elements_by_tag_name_ns) -{ - zval *id; - xmlNodePtr elemp; - int uri_len, name_len; - dom_object *intern, *namednode; - char *uri, *name; - xmlChar *local, *nsuri; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&s&", &id, dom_element_class_entry, &uri, &uri_len, UG(utf8_conv), &name, &name_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(elemp, id, xmlNodePtr, intern); - - php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC); - namednode = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC); - local = xmlCharStrndup(name, name_len); - nsuri = xmlCharStrndup(uri, uri_len); - dom_namednode_iter(intern, 0, namednode, NULL, local, nsuri TSRMLS_CC); - -} -/* }}} end dom_element_get_elements_by_tag_name_ns */ - - -/* {{{ proto boolean dom_element_has_attribute(string name) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttr -Since: DOM Level 2 -*/ -PHP_FUNCTION(dom_element_has_attribute) -{ - zval *id; - xmlNode *nodep; - dom_object *intern; - char *name; - int name_len; - xmlNodePtr attr; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &id, dom_element_class_entry, &name, &name_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - attr = dom_get_dom1_attribute(nodep, (xmlChar *)name); - if (attr == NULL) { - RETURN_FALSE; - } else { - RETURN_TRUE; - } -} -/* }}} end dom_element_has_attribute */ - - -/* {{{ proto boolean dom_element_has_attribute_ns(string namespaceURI, string localName) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttrNS -Since: DOM Level 2 -*/ -PHP_FUNCTION(dom_element_has_attribute_ns) -{ - zval *id; - xmlNodePtr elemp; - xmlNs *nsp; - dom_object *intern; - int uri_len, name_len; - char *uri, *name; - xmlChar *value; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os!&s&", &id, dom_element_class_entry, &uri, &uri_len, UG(utf8_conv), &name, &name_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(elemp, id, xmlNodePtr, intern); - - value = xmlGetNsProp(elemp, (xmlChar *)name, (xmlChar *)uri); - - if (value != NULL) { - xmlFree(value); - RETURN_TRUE; - } else { - if (xmlStrEqual(uri, DOM_XMLNS_NAMESPACE)) { - nsp = dom_get_nsdecl(elemp, name); - if (nsp != NULL) { - RETURN_TRUE; - } - } - } - - RETURN_FALSE; -} -/* }}} end dom_element_has_attribute_ns */ - - -static void php_set_attribute_id(xmlAttrPtr attrp, zend_bool is_id) -{ - if (is_id == 1 && attrp->atype != XML_ATTRIBUTE_ID) { - xmlChar *id_val; - - id_val = xmlNodeListGetString(attrp->doc, attrp->children, 1); - if (id_val != NULL) { - xmlAddID(NULL, attrp->doc, id_val, attrp); - xmlFree(id_val); - } - } else { - if (attrp->atype == XML_ATTRIBUTE_ID) { - xmlRemoveID(attrp->doc, attrp); - attrp->atype = 0; - } - } -} - -/* {{{ proto void dom_element_set_id_attribute(string name, boolean isId) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttr -Since: DOM Level 3 -*/ -PHP_FUNCTION(dom_element_set_id_attribute) -{ - zval *id; - xmlNode *nodep; - xmlAttrPtr attrp; - dom_object *intern; - char *name; - int name_len; - zend_bool is_id; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&b", &id, dom_element_class_entry, &name, &name_len, UG(utf8_conv), &is_id) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - if (dom_node_is_read_only(nodep) == SUCCESS) { - php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_NULL(); - } - - attrp = xmlHasNsProp(nodep, name, NULL); - if (attrp == NULL || attrp->type == XML_ATTRIBUTE_DECL) { - php_dom_throw_error(NOT_FOUND_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - } else { - php_set_attribute_id(attrp, is_id); - } - - RETURN_NULL(); -} -/* }}} end dom_element_set_id_attribute */ - - -/* {{{ proto void dom_element_set_id_attribute_ns(string namespaceURI, string localName, boolean isId) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNS -Since: DOM Level 3 -*/ -PHP_FUNCTION(dom_element_set_id_attribute_ns) -{ - zval *id; - xmlNodePtr elemp; - xmlAttrPtr attrp; - dom_object *intern; - int uri_len, name_len; - char *uri, *name; - zend_bool is_id; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&s&b", &id, dom_element_class_entry, &uri, &uri_len, UG(utf8_conv), &name, &name_len, UG(utf8_conv), &is_id) == FAILURE) { - return; - } - - DOM_GET_OBJ(elemp, id, xmlNodePtr, intern); - - if (dom_node_is_read_only(elemp) == SUCCESS) { - php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_NULL(); - } - - attrp = xmlHasNsProp(elemp, (xmlChar *)name, (xmlChar *)uri); - if (attrp == NULL || attrp->type == XML_ATTRIBUTE_DECL) { - php_dom_throw_error(NOT_FOUND_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - } else { - php_set_attribute_id(attrp, is_id); - } - - RETURN_NULL(); -} -/* }}} end dom_element_set_id_attribute_ns */ - - -/* {{{ proto void dom_element_set_id_attribute_node(attr idAttr, boolean isId) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNode -Since: DOM Level 3 -*/ -PHP_FUNCTION(dom_element_set_id_attribute_node) -{ - zval *id, *node; - xmlNode *nodep; - xmlAttrPtr attrp; - dom_object *intern, *attrobj; - zend_bool is_id; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OOb", &id, dom_element_class_entry, &node, dom_attr_class_entry, &is_id) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - if (dom_node_is_read_only(nodep) == SUCCESS) { - php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_NULL(); - } - - DOM_GET_OBJ(attrp, node, xmlAttrPtr, attrobj); - - if (attrp->parent != nodep) { - php_dom_throw_error(NOT_FOUND_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - } else { - php_set_attribute_id(attrp, is_id); - } - - RETURN_NULL(); -} -/* }}} end dom_element_set_id_attribute_node */ - -#endif diff --git a/ext/dom/entity.c b/ext/dom/entity.c deleted file mode 100644 index adc6b54d82f14..0000000000000 --- a/ext/dom/entity.c +++ /dev/null @@ -1,196 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class DOMEntity extends DOMNode -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-527DCFF2 -* Since: -*/ - -zend_function_entry php_dom_entity_class_functions[] = { - {NULL, NULL, NULL} -}; - -/* {{{ publicId string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-D7303025 -Since: -*/ -int dom_entity_public_id_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlEntity *nodep; - - nodep = (xmlEntity *) dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) { - ZVAL_NULL(*retval); - } else { - ZVAL_XML_STRING(*retval, (char *) (nodep->ExternalID), ZSTR_DUPLICATE); - } - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ systemId string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-D7C29F3E -Since: -*/ -int dom_entity_system_id_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlEntity *nodep; - - nodep = (xmlEntity *) dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) { - ZVAL_NULL(*retval); - } else { - ZVAL_XML_STRING(*retval, (char *) (nodep->SystemID), ZSTR_DUPLICATE); - } - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ notationName string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-6ABAEB38 -Since: -*/ -int dom_entity_notation_name_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlEntity *nodep; - char *content; - - nodep = (xmlEntity *) dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) { - ZVAL_NULL(*retval); - } else { - content = xmlNodeGetContent((xmlNodePtr) nodep); - ZVAL_XML_STRING(*retval, content, ZSTR_DUPLICATE); - xmlFree(content); - } - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ actualEncoding string -readonly=no -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Entity3-actualEncoding -Since: DOM Level 3 -*/ -int dom_entity_actual_encoding_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_NULL(*retval); - return SUCCESS; -} - -int dom_entity_actual_encoding_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ encoding string -readonly=no -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Entity3-encoding -Since: DOM Level 3 -*/ -int dom_entity_encoding_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_NULL(*retval); - return SUCCESS; -} - -int dom_entity_encoding_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ version string -readonly=no -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Entity3-version -Since: DOM Level 3 -*/ -int dom_entity_version_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_NULL(*retval); - return SUCCESS; -} - -int dom_entity_version_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - return SUCCESS; -} - -/* }}} */ - -#endif diff --git a/ext/dom/entityreference.c b/ext/dom/entityreference.c deleted file mode 100644 index ba1de0a97fb9b..0000000000000 --- a/ext/dom/entityreference.c +++ /dev/null @@ -1,84 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class DOMEntityReference extends DOMNode -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-11C98490 -* Since: -*/ - -zend_function_entry php_dom_entityreference_class_functions[] = { - PHP_ME(domentityreference, __construct, NULL, ZEND_ACC_PUBLIC) - {NULL, NULL, NULL} -}; - -/* {{{ proto void DOMEntityReference::__construct(string name) U */ -PHP_METHOD(domentityreference, __construct) -{ - zval *id; - xmlNode *node; - xmlNodePtr oldnode = NULL; - dom_object *intern; - char *name; - int name_len, name_valid; - - php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC); - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &id, dom_entityreference_class_entry, &name, &name_len, UG(utf8_conv)) == FAILURE) { - php_std_error_handling(); - return; - } - php_std_error_handling(); - - name_valid = xmlValidateName((xmlChar *) name, 0); - if (name_valid != 0) { - php_dom_throw_error(INVALID_CHARACTER_ERR, 1 TSRMLS_CC); - RETURN_FALSE; - } - - node = xmlNewReference(NULL, name); - - if (!node) { - php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC); - RETURN_FALSE; - } - - intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); - if (intern != NULL) { - oldnode = dom_object_get_node(intern); - if (oldnode != NULL) { - php_libxml_node_free_resource(oldnode TSRMLS_CC); - } - php_libxml_increment_node_ptr((php_libxml_node_object *)intern, node, (void *)intern TSRMLS_CC); - } -} - -/* }}} end DOMEntityReference::__construct */ -#endif diff --git a/ext/dom/examples/dom1.inc b/ext/dom/examples/dom1.inc deleted file mode 100644 index 792d6f2dbc481..0000000000000 --- a/ext/dom/examples/dom1.inc +++ /dev/null @@ -1,43 +0,0 @@ - - -]> - -Title - -&sp; - - - - -a1b1c1 -a2c2 -a3b3c3 - - - - - "; - -function print_node($node) -{ - print "Node Name: " . $node->nodeName; - print "\nNode Type: " . $node->nodeType; - $child_count = $node->childNodes->length; - print "\nNum Children: " . $child_count; - if($child_count <= 1){ - print "\nNode Content: " . $node->nodeValue; - } - print "\n\n"; -} - -function print_node_list($nodelist) -{ - foreach($nodelist as $node) - { - print_node($node); - } -} - -?> diff --git a/ext/dom/examples/dom1.php b/ext/dom/examples/dom1.php deleted file mode 100644 index 8ea367458d6f6..0000000000000 --- a/ext/dom/examples/dom1.php +++ /dev/null @@ -1,94 +0,0 @@ -loadxml($xmlstr); -if(!$dom) { - echo "Error while parsing the document\n"; - exit; -} - -// children() of of document would result in a memleak -//$children = $dom->children(); -//print_node_list($children); - -echo "--------- root\n"; -$rootnode = $dom->documentElement; -print_node($rootnode); - -echo "--------- children of root\n"; -$children = $rootnode->childNodes; -print_node_list($children); - -// The last node should be identical with the last entry in the children array -echo "--------- last\n"; -$last = $rootnode->lastChild; -print_node($last); - -// The parent of this last node is the root again -echo "--------- parent\n"; -$parent = $last->parentNode; -print_node($parent); - -// The children of this parent are the same children as one above -echo "--------- children of parent\n"; -$children = $parent->childNodes; -print_node_list($children); - -echo "--------- creating a new attribute\n"; -//This is worthless -//$attr = $dom->createAttribute("src", "picture.gif"); -//print_r($attr); - -//$rootnode->set_attributeNode($attr); -$attr = $rootnode->setAttribute("src", "picture.gif"); -$attr = $rootnode->getAttribute("src"); -print_r($attr); -print "\n"; - -echo "--------- Get Attribute Node\n"; -$attr = $rootnode->getAttributeNode("src"); -print_node($attr); - -echo "--------- Remove Attribute Node\n"; -$attr = $rootnode->removeAttribute("src"); -print "Removed " . $attr . " attributes.\n"; - -echo "--------- attributes of rootnode\n"; -$attrs = $rootnode->attributes; -print_node_list($attrs); - -echo "--------- children of an attribute\n"; -$children = $attrs->item(0)->childNodes; -print_node_list($children); - -echo "--------- Add child to root\n"; -$myelement = new domElement("Silly", "Symphony"); -$newchild = $rootnode->appendChild($myelement); -print_node($newchild); -print $dom->saveXML(); -print "\n"; - -echo "--------- Find element by tagname\n"; -echo " Using dom\n"; -$children = $dom->getElementsByTagname("Silly"); -print_node_list($children); - -echo " Using elem\n"; -$children = $rootnode->getElementsByTagName("Silly"); -print_node_list($children); - -echo "--------- Unlink Node\n"; -print_node($children->item(0)); -$rootnode->removeChild($children->item(0)); -print_node_list($rootnode->childNodes); -print $dom->savexml(); - -echo "--------- Find element by id\n"; -print ("Not implemented\n"); - -echo "--------- Check various node_name return values\n"; -print ("Not needed\n"); - -?> diff --git a/ext/dom/examples/note-invalid.xml b/ext/dom/examples/note-invalid.xml deleted file mode 100644 index 58d4e650441bb..0000000000000 --- a/ext/dom/examples/note-invalid.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - -PHP User Group -Shane -Reminder -Don't forget the meeting tonight! -
Or I'll clobber you!
-
diff --git a/ext/dom/examples/note.dtd b/ext/dom/examples/note.dtd deleted file mode 100644 index 4016eb58111cd..0000000000000 --- a/ext/dom/examples/note.dtd +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/ext/dom/examples/note.php b/ext/dom/examples/note.php deleted file mode 100644 index a8695f3664442..0000000000000 --- a/ext/dom/examples/note.php +++ /dev/null @@ -1,19 +0,0 @@ -load('note.xml'); -if (!$dom->validate('note.dtd')) { - print "Document note.dtd is not valid\n"; -} else { - print "Document note.dtd is valid\n"; -} - -$dom = new domDocument; -$dom->load('note-invalid.xml'); -if (!$dom->validate('note.dtd')) { - print "Document note-invalid.xml is not valid\n"; -} else { - print "Document note-invalid.xml is valid\n"; -} - -?> diff --git a/ext/dom/examples/note.xml b/ext/dom/examples/note.xml deleted file mode 100644 index 49614a1b5256c..0000000000000 --- a/ext/dom/examples/note.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - -PHP User Group -Shane -Reminder -Don't forget the meeting tonight! - diff --git a/ext/dom/examples/relaxNG.php b/ext/dom/examples/relaxNG.php deleted file mode 100644 index d265fd988e185..0000000000000 --- a/ext/dom/examples/relaxNG.php +++ /dev/null @@ -1,11 +0,0 @@ -load('relaxNG.xml'); -if (!$dom->relaxNGValidate('relaxNG.rng')) { - print "Document is not valid"; -} else { - print "Document is valid"; -} - -?> \ No newline at end of file diff --git a/ext/dom/examples/relaxNG.rng b/ext/dom/examples/relaxNG.rng deleted file mode 100644 index f4357e04ef8ab..0000000000000 --- a/ext/dom/examples/relaxNG.rng +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - diff --git a/ext/dom/examples/relaxNG.xml b/ext/dom/examples/relaxNG.xml deleted file mode 100644 index 6b0cac1225050..0000000000000 --- a/ext/dom/examples/relaxNG.xml +++ /dev/null @@ -1 +0,0 @@ -hello \ No newline at end of file diff --git a/ext/dom/examples/relaxNG2.rng b/ext/dom/examples/relaxNG2.rng deleted file mode 100644 index 4adae7b15113d..0000000000000 --- a/ext/dom/examples/relaxNG2.rng +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ext/dom/examples/relaxNG3.rng b/ext/dom/examples/relaxNG3.rng deleted file mode 100644 index 73e1eb6165102..0000000000000 --- a/ext/dom/examples/relaxNG3.rng +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/ext/dom/examples/shipping.php b/ext/dom/examples/shipping.php deleted file mode 100644 index 5205fd2014cb6..0000000000000 --- a/ext/dom/examples/shipping.php +++ /dev/null @@ -1,11 +0,0 @@ -load('shipping.xml'); -if (!$dom->schemaValidate('shipping.xsd')) { - print "Document is not valid"; -} else { - print "Document is valid"; -} - -?> \ No newline at end of file diff --git a/ext/dom/examples/shipping.xml b/ext/dom/examples/shipping.xml deleted file mode 100644 index dc8a09e301768..0000000000000 --- a/ext/dom/examples/shipping.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Tove Svendson - Ragnhildvei 2 -
4000 Stavanger
- Norway -
- - - Empire Burlesque - 1 - 10.90 - - - Hide your heart - 1 - 9.90 - - -
\ No newline at end of file diff --git a/ext/dom/examples/shipping.xsd b/ext/dom/examples/shipping.xsd deleted file mode 100644 index 8b16b7c03a621..0000000000000 --- a/ext/dom/examples/shipping.xsd +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ext/dom/namednodemap.c b/ext/dom/namednodemap.c deleted file mode 100644 index f2b0cad4380a3..0000000000000 --- a/ext/dom/namednodemap.c +++ /dev/null @@ -1,305 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class DOMNamedNodeMap -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1780488922 -* Since: -*/ - -zend_function_entry php_dom_namednodemap_class_functions[] = { - PHP_FALIAS(getNamedItem, dom_namednodemap_get_named_item, NULL) - PHP_FALIAS(setNamedItem, dom_namednodemap_set_named_item, NULL) - PHP_FALIAS(removeNamedItem, dom_namednodemap_remove_named_item, NULL) - PHP_FALIAS(item, dom_namednodemap_item, NULL) - PHP_FALIAS(getNamedItemNS, dom_namednodemap_get_named_item_ns, NULL) - PHP_FALIAS(setNamedItemNS, dom_namednodemap_set_named_item_ns, NULL) - PHP_FALIAS(removeNamedItemNS, dom_namednodemap_remove_named_item_ns, NULL) - {NULL, NULL, NULL} -}; - -/* {{{ length int -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D0FB19E -Since: -*/ -int dom_namednodemap_length_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - dom_nnodemap_object *objmap; - xmlAttrPtr curnode; - xmlNodePtr nodep; - int count = 0; - - objmap = (dom_nnodemap_object *)obj->ptr; - - if (objmap != NULL) { - if ((objmap->nodetype == XML_NOTATION_NODE) || - objmap->nodetype == XML_ENTITY_NODE) { - if (objmap->ht) { - count = xmlHashSize(objmap->ht); - } - } else { - nodep = dom_object_get_node(objmap->baseobj); - if (nodep) { - curnode = nodep->properties; - if (curnode) { - count++; - while (curnode->next != NULL) { - count++; - curnode = curnode->next; - } - } - } - } - } - - MAKE_STD_ZVAL(*retval); - ZVAL_LONG(*retval, count); - return SUCCESS; -} - -/* }}} */ - - - - -/* {{{ proto DOMNode dom_namednodemap_get_named_item(string name) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549 -Since: -*/ -PHP_FUNCTION(dom_namednodemap_get_named_item) -{ - zval *id, *rv = NULL; - int ret, namedlen=0; - dom_object *intern; - xmlNodePtr itemnode = NULL; - char *named; - - dom_nnodemap_object *objmap; - xmlNodePtr nodep; - xmlNotation *notep = NULL; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &id, dom_namednodemap_class_entry, &named, &namedlen, UG(utf8_conv)) == FAILURE) { - return; - } - - intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); - - objmap = (dom_nnodemap_object *)intern->ptr; - - if (objmap != NULL) { - if ((objmap->nodetype == XML_NOTATION_NODE) || - objmap->nodetype == XML_ENTITY_NODE) { - if (objmap->ht) { - if (objmap->nodetype == XML_ENTITY_NODE) { - itemnode = (xmlNodePtr)xmlHashLookup(objmap->ht, named); - } else { - notep = (xmlNotation *)xmlHashLookup(objmap->ht, named); - if (notep) { - itemnode = create_notation(notep->name, notep->PublicID, notep->SystemID); - } - } - } - } else { - nodep = dom_object_get_node(objmap->baseobj); - if (nodep) { - itemnode = (xmlNodePtr)xmlHasProp(nodep, named); - } - } - } - - if (itemnode) { - DOM_RET_OBJ(rv, itemnode, &ret, objmap->baseobj); - return; - } else { - RETVAL_NULL(); - } -} -/* }}} end dom_namednodemap_get_named_item */ - - -/* {{{ proto DOMNode dom_namednodemap_set_named_item(DOMNode arg) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1025163788 -Since: -*/ -PHP_FUNCTION(dom_namednodemap_set_named_item) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_namednodemap_set_named_item */ - - -/* {{{ proto DOMNode dom_namednodemap_remove_named_item(string name) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D58B193 -Since: -*/ -PHP_FUNCTION(dom_namednodemap_remove_named_item) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_namednodemap_remove_named_item */ - - -/* {{{ proto DOMNode dom_namednodemap_item(int index) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9 -Since: -*/ -PHP_FUNCTION(dom_namednodemap_item) -{ - zval *id, *rv = NULL; - long index; - int ret; - dom_object *intern; - xmlNodePtr itemnode = NULL; - - dom_nnodemap_object *objmap; - xmlNodePtr nodep, curnode; - int count; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &id, dom_namednodemap_class_entry, &index) == FAILURE) { - return; - } - if (index >= 0) { - intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); - - objmap = (dom_nnodemap_object *)intern->ptr; - - if (objmap != NULL) { - if ((objmap->nodetype == XML_NOTATION_NODE) || - objmap->nodetype == XML_ENTITY_NODE) { - if (objmap->ht) { - if (objmap->nodetype == XML_ENTITY_NODE) { - itemnode = php_dom_libxml_hash_iter(objmap->ht, index); - } else { - itemnode = php_dom_libxml_notation_iter(objmap->ht, index); - } - } - } else { - nodep = dom_object_get_node(objmap->baseobj); - if (nodep) { - curnode = (xmlNodePtr)nodep->properties; - count = 0; - while (count < index && curnode != NULL) { - count++; - curnode = (xmlNodePtr)curnode->next; - } - itemnode = curnode; - } - } - } - - if (itemnode) { - DOM_RET_OBJ(rv, itemnode, &ret, objmap->baseobj); - return; - } - } - - RETVAL_NULL(); -} -/* }}} end dom_namednodemap_item */ - - -/* {{{ proto DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS -Since: DOM Level 2 -*/ -PHP_FUNCTION(dom_namednodemap_get_named_item_ns) -{ - zval *id, *rv = NULL; - int ret, namedlen=0, urilen=0; - dom_object *intern; - xmlNodePtr itemnode = NULL; - char *uri, *named; - - dom_nnodemap_object *objmap; - xmlNodePtr nodep; - xmlNotation *notep = NULL; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os!&s&", &id, dom_namednodemap_class_entry, &uri, &urilen, UG(utf8_conv), &named, &namedlen, UG(utf8_conv)) == FAILURE) { - return; - } - - intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); - - objmap = (dom_nnodemap_object *)intern->ptr; - - if (objmap != NULL) { - if ((objmap->nodetype == XML_NOTATION_NODE) || - objmap->nodetype == XML_ENTITY_NODE) { - if (objmap->ht) { - if (objmap->nodetype == XML_ENTITY_NODE) { - itemnode = (xmlNodePtr)xmlHashLookup(objmap->ht, named); - } else { - notep = (xmlNotation *)xmlHashLookup(objmap->ht, named); - if (notep) { - itemnode = create_notation(notep->name, notep->PublicID, notep->SystemID); - } - } - } - } else { - nodep = dom_object_get_node(objmap->baseobj); - if (nodep) { - itemnode = (xmlNodePtr)xmlHasNsProp(nodep, named, uri); - } - } - } - - if (itemnode) { - DOM_RET_OBJ(rv, itemnode, &ret, objmap->baseobj); - return; - } else { - RETVAL_NULL(); - } -} -/* }}} end dom_namednodemap_get_named_item_ns */ - - -/* {{{ proto DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS -Since: DOM Level 2 -*/ -PHP_FUNCTION(dom_namednodemap_set_named_item_ns) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_namednodemap_set_named_item_ns */ - - -/* {{{ proto DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS -Since: DOM Level 2 -*/ -PHP_FUNCTION(dom_namednodemap_remove_named_item_ns) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_namednodemap_remove_named_item_ns */ -#endif diff --git a/ext/dom/namelist.c b/ext/dom/namelist.c deleted file mode 100644 index 4e49f08ddfbdc..0000000000000 --- a/ext/dom/namelist.c +++ /dev/null @@ -1,81 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class DOMNameList -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList -* Since: DOM Level 3 -*/ - -zend_function_entry php_dom_namelist_class_functions[] = { - PHP_FALIAS(getName, dom_namelist_get_name, NULL) - PHP_FALIAS(getNamespaceURI, dom_namelist_get_namespace_uri, NULL) - {NULL, NULL, NULL} -}; - -/* {{{ length int -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-length -Since: -*/ -int dom_namelist_length_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_STRING(*retval, "TEST", 1); - return SUCCESS; -} - -/* }}} */ - - - - -/* {{{ proto string dom_namelist_get_name(int index) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getName -Since: -*/ -PHP_FUNCTION(dom_namelist_get_name) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_namelist_get_name */ - - -/* {{{ proto string dom_namelist_get_namespace_uri(int index) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getNamespaceURI -Since: -*/ -PHP_FUNCTION(dom_namelist_get_namespace_uri) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_namelist_get_namespace_uri */ -#endif diff --git a/ext/dom/node.c b/ext/dom/node.c deleted file mode 100644 index 0a1ab0a5f2ea0..0000000000000 --- a/ext/dom/node.c +++ /dev/null @@ -1,1962 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - -/* -* class DOMNode -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1950641247 -* Since: -*/ - -zend_function_entry php_dom_node_class_functions[] = { - PHP_FALIAS(insertBefore, dom_node_insert_before, NULL) - PHP_FALIAS(replaceChild, dom_node_replace_child, NULL) - PHP_FALIAS(removeChild, dom_node_remove_child, NULL) - PHP_FALIAS(appendChild, dom_node_append_child, NULL) - PHP_FALIAS(hasChildNodes, dom_node_has_child_nodes, NULL) - PHP_FALIAS(cloneNode, dom_node_clone_node, NULL) - PHP_FALIAS(normalize, dom_node_normalize, NULL) - PHP_FALIAS(isSupported, dom_node_is_supported, NULL) - PHP_FALIAS(hasAttributes, dom_node_has_attributes, NULL) - PHP_FALIAS(compareDocumentPosition, dom_node_compare_document_position, NULL) - PHP_FALIAS(isSameNode, dom_node_is_same_node, NULL) - PHP_FALIAS(lookupPrefix, dom_node_lookup_prefix, NULL) - PHP_FALIAS(isDefaultNamespace, dom_node_is_default_namespace, NULL) - PHP_FALIAS(lookupNamespaceUri, dom_node_lookup_namespace_uri, NULL) - PHP_FALIAS(isEqualNode, dom_node_is_equal_node, NULL) - PHP_FALIAS(getFeature, dom_node_get_feature, NULL) - PHP_FALIAS(setUserData, dom_node_set_user_data, NULL) - PHP_FALIAS(getUserData, dom_node_get_user_data, NULL) - PHP_ME(domnode, getNodePath, NULL, ZEND_ACC_PUBLIC) - PHP_ME(domnode, C14N, NULL, ZEND_ACC_PUBLIC) - PHP_ME(domnode, C14NFile, NULL, ZEND_ACC_PUBLIC) - {NULL, NULL, NULL} -}; - -static void dom_reconcile_ns(xmlDocPtr doc, xmlNodePtr nodep) { - xmlNsPtr nsptr; - - if (nodep->type == XML_ELEMENT_NODE) { - /* Following if block primarily used for inserting nodes created via createElementNS */ - if (nodep->nsDef != NULL && nodep->nsDef->href != NULL) { - if((nsptr = xmlSearchNsByHref(doc, nodep->parent, nodep->nsDef->href)) && - (nodep->nsDef->prefix == NULL || xmlStrEqual(nsptr->prefix, nodep->nsDef->prefix))) { - dom_set_old_ns(doc, nodep->nsDef); - nodep->nsDef = NULL; - } - } - xmlReconciliateNs(doc, nodep); - } -} - -/* {{{ nodeName string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68D095 -Since: -*/ -int dom_node_node_name_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNode *nodep; - xmlNsPtr ns; - char *str = NULL; - xmlChar *qname = NULL; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - switch (nodep->type) { - case XML_ATTRIBUTE_NODE: - case XML_ELEMENT_NODE: - ns = nodep->ns; - if (ns != NULL && ns->prefix) { - qname = xmlStrdup(ns->prefix); - qname = xmlStrcat(qname, ":"); - qname = xmlStrcat(qname, nodep->name); - str = qname; - } else { - str = (char *) nodep->name; - } - break; - case XML_NAMESPACE_DECL: - ns = nodep->ns; - if (ns != NULL && ns->prefix) { - qname = xmlStrdup("xmlns"); - qname = xmlStrcat(qname, ":"); - qname = xmlStrcat(qname, nodep->name); - str = qname; - } else { - str = (char *) nodep->name; - } - break; - case XML_DOCUMENT_TYPE_NODE: - case XML_DTD_NODE: - case XML_PI_NODE: - case XML_ENTITY_DECL: - case XML_ENTITY_REF_NODE: - case XML_NOTATION_NODE: - str = (char *) nodep->name; - break; - case XML_CDATA_SECTION_NODE: - str = "#cdata-section"; - break; - case XML_COMMENT_NODE: - str = "#comment"; - break; - case XML_HTML_DOCUMENT_NODE: - case XML_DOCUMENT_NODE: - str = "#document"; - break; - case XML_DOCUMENT_FRAG_NODE: - str = "#document-fragment"; - break; - case XML_TEXT_NODE: - str = "#text"; - break; - default: - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Node Type"); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - - if(str != NULL) { - ZVAL_XML_STRING(*retval, str, ZSTR_DUPLICATE); - } else { - ZVAL_EMPTY_TEXT(*retval); - } - - if (qname != NULL) { - xmlFree(qname); - } - - return SUCCESS; - -} - -/* }}} */ - - - -/* {{{ nodeValue string -readonly=no -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68D080 -Since: -*/ -int dom_node_node_value_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNode *nodep; - char *str = NULL; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - /* Access to Element node is implemented as a convience method */ - switch (nodep->type) { - case XML_ATTRIBUTE_NODE: - case XML_TEXT_NODE: - case XML_ELEMENT_NODE: - case XML_COMMENT_NODE: - case XML_CDATA_SECTION_NODE: - case XML_PI_NODE: - str = xmlNodeGetContent(nodep); - break; - case XML_NAMESPACE_DECL: - str = xmlNodeGetContent(nodep->children); - break; - default: - str = NULL; - break; - } - - ALLOC_ZVAL(*retval); - - if(str != NULL) { - ZVAL_XML_STRING(*retval, str, ZSTR_DUPLICATE); - xmlFree(str); - } else { - ZVAL_NULL(*retval); - } - - - return SUCCESS; - -} - -int dom_node_node_value_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - xmlNode *nodep; - zval value_copy; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - /* Access to Element node is implemented as a convience method */ - switch (nodep->type) { - case XML_ELEMENT_NODE: - case XML_ATTRIBUTE_NODE: - if (nodep->children) { - node_list_unlink(nodep->children TSRMLS_CC); - } - case XML_TEXT_NODE: - case XML_COMMENT_NODE: - case XML_CDATA_SECTION_NODE: - case XML_PI_NODE: - if (newval->type != IS_STRING) { - if(newval->refcount > 1) { - value_copy = *newval; - zval_copy_ctor(&value_copy); - newval = &value_copy; - } - convert_to_string_with_converter(newval, UG(utf8_conv)); - } - xmlNodeSetContentLen(nodep, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1); - if (newval == &value_copy) { - zval_dtor(newval); - } - break; - default: - break; - } - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ nodeType int -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-111237558 -Since: -*/ -int dom_node_node_type_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNode *nodep; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - - /* Specs dictate that they are both type XML_DOCUMENT_TYPE_NODE */ - if (nodep->type == XML_DTD_NODE) { - ZVAL_LONG(*retval, XML_DOCUMENT_TYPE_NODE); - } else { - ZVAL_LONG(*retval, nodep->type); - } - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ parentNode DomNode -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1060184317 -Since: -*/ -int dom_node_parent_node_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNode *nodep, *nodeparent; - int ret; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - nodeparent = nodep->parent; - if (!nodeparent) { - return FAILURE; - } - - ALLOC_ZVAL(*retval); - - if (NULL == (*retval = php_dom_create_object(nodeparent, &ret, NULL, *retval, obj TSRMLS_CC))) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object"); - return FAILURE; - } - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ childNodes DomNodeList -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1451460987 -Since: -*/ -int dom_node_child_nodes_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNode *nodep; - dom_object *intern; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - - if (dom_node_children_valid(nodep) == FAILURE) { - ZVAL_NULL(*retval); - } else { - php_dom_create_interator(*retval, DOM_NODELIST TSRMLS_CC); - intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC); - dom_namednode_iter(obj, XML_ELEMENT_NODE, intern, NULL, NULL, NULL TSRMLS_CC); - } - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ firstChild DomNode -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-169727388 -Since: -*/ -int dom_node_first_child_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNode *nodep, *first = NULL; - int ret; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - if (dom_node_children_valid(nodep) == SUCCESS) { - first = nodep->children; - } - - if (!first) { - return FAILURE; - } - - ALLOC_ZVAL(*retval); - - if (NULL == (*retval = php_dom_create_object(first, &ret, NULL, *retval, obj TSRMLS_CC))) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object"); - return FAILURE; - } - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ lastChild DomNode -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-61AD09FB -Since: -*/ -int dom_node_last_child_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNode *nodep, *last = NULL; - int ret; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - if (dom_node_children_valid(nodep) == SUCCESS) { - last = nodep->last; - } - - if (!last) { - return FAILURE; - } - - ALLOC_ZVAL(*retval); - - if (NULL == (*retval = php_dom_create_object(last, &ret, NULL, *retval, obj TSRMLS_CC))) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object"); - return FAILURE; - } - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ previousSibling DomNode -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-640FB3C8 -Since: -*/ -int dom_node_previous_sibling_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNode *nodep, *prevsib; - int ret; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - prevsib = nodep->prev; - if (!prevsib) { - return FAILURE; - } - - ALLOC_ZVAL(*retval); - - if (NULL == (*retval = php_dom_create_object(prevsib, &ret, NULL, *retval, obj TSRMLS_CC))) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object"); - return FAILURE; - } - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ nextSibling DomNode -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6AC54C2F -Since: -*/ -int dom_node_next_sibling_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNode *nodep, *nextsib; - int ret; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - nextsib = nodep->next; - if (!nextsib) { - return FAILURE; - } - - ALLOC_ZVAL(*retval); - - if (NULL == (*retval = php_dom_create_object(nextsib, &ret, NULL, *retval, obj TSRMLS_CC))) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object"); - return FAILURE; - } - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ attributes DomNamedNodeMap -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-84CF096 -Since: -*/ -int dom_node_attributes_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNode *nodep; - dom_object *intern; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - - if (nodep->type == XML_ELEMENT_NODE) { - php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC); - intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC); - dom_namednode_iter(obj, XML_ATTRIBUTE_NODE, intern, NULL, NULL, NULL TSRMLS_CC); - } else { - ZVAL_NULL(*retval); - } - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ ownerDocument DomDocument -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-node-ownerDoc -Since: -*/ -int dom_node_owner_document_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNode *nodep; - xmlDocPtr docp; - int ret; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) { - ALLOC_ZVAL(*retval); - ZVAL_NULL(*retval); - return SUCCESS; - } - - docp = nodep->doc; - if (!docp) { - return FAILURE; - } - - ALLOC_ZVAL(*retval); - - if (NULL == (*retval = php_dom_create_object((xmlNodePtr) docp, &ret, NULL, *retval, obj TSRMLS_CC))) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object"); - return FAILURE; - } - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ namespaceUri string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeNSname -Since: DOM Level 2 -*/ -int dom_node_namespace_uri_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNode *nodep; - char *str = NULL; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - switch (nodep->type) { - case XML_ELEMENT_NODE: - case XML_ATTRIBUTE_NODE: - case XML_NAMESPACE_DECL: - if (nodep->ns != NULL) { - str = (char *) nodep->ns->href; - } - break; - default: - str = NULL; - break; - } - - ALLOC_ZVAL(*retval); - - if(str != NULL) { - ZVAL_XML_STRING(*retval, str, ZSTR_DUPLICATE); - } else { - ZVAL_NULL(*retval); - } - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ prefix string -readonly=no -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeNSPrefix -Since: DOM Level 2 -*/ -int dom_node_prefix_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNode *nodep; - xmlNsPtr ns; - char *str = NULL; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - switch (nodep->type) { - case XML_ELEMENT_NODE: - case XML_ATTRIBUTE_NODE: - case XML_NAMESPACE_DECL: - ns = nodep->ns; - if (ns != NULL && ns->prefix) { - str = (char *) ns->prefix; - } - break; - default: - str = NULL; - break; - } - - ALLOC_ZVAL(*retval); - - if (str == NULL) { - ZVAL_EMPTY_TEXT(*retval); - } else { - ZVAL_XML_STRING(*retval, str, ZSTR_DUPLICATE); - } - return SUCCESS; - -} - -int dom_node_prefix_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - zval value_copy; - xmlNode *nodep, *nsnode = NULL; - xmlNsPtr ns = NULL, curns; - char *strURI; - char *prefix; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - switch (nodep->type) { - case XML_ELEMENT_NODE: - nsnode = nodep; - case XML_ATTRIBUTE_NODE: - if (nsnode == NULL) { - nsnode = nodep->parent; - if (nsnode == NULL) { - nsnode = xmlDocGetRootElement(nodep->doc); - } - } - if (newval->type != IS_STRING) { - if(newval->refcount > 1) { - value_copy = *newval; - zval_copy_ctor(&value_copy); - newval = &value_copy; - } - convert_to_string_with_converter(newval, UG(utf8_conv)); - } - prefix = Z_STRVAL_P(newval); - if (nsnode && nodep->ns != NULL && !xmlStrEqual(nodep->ns->prefix, (xmlChar *)prefix)) { - strURI = (char *) nodep->ns->href; - if (strURI == NULL || - (!strcmp (prefix, "xml") && strcmp(strURI, XML_XML_NAMESPACE)) || - (nodep->type == XML_ATTRIBUTE_NODE && !strcmp (prefix, "xmlns") && - strcmp (strURI, DOM_XMLNS_NAMESPACE)) || - (nodep->type == XML_ATTRIBUTE_NODE && !strcmp (nodep->name, "xmlns"))) { - ns = NULL; - } else { - curns = nsnode->nsDef; - while (curns != NULL) { - if (xmlStrEqual((xmlChar *)prefix, curns->prefix) && xmlStrEqual(nodep->ns->href, curns->href)) { - ns = curns; - break; - } - curns = curns->next; - } - if (ns == NULL) { - ns = xmlNewNs(nsnode, nodep->ns->href, (xmlChar *)prefix); - } - } - - if (ns == NULL) { - if (newval == &value_copy) { - zval_dtor(newval); - } - php_dom_throw_error(NAMESPACE_ERR, dom_get_strict_error(obj->document) TSRMLS_CC); - return FAILURE; - } - - xmlSetNs(nodep, ns); - } - if (newval == &value_copy) { - zval_dtor(newval); - } - break; - default: - break; - } - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ localName string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeNSLocalN -Since: DOM Level 2 -*/ -int dom_node_local_name_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNode *nodep; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - - if (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE || nodep->type == XML_NAMESPACE_DECL) { - ZVAL_XML_STRING(*retval, (char *) (nodep->name), ZSTR_DUPLICATE); - } else { - ZVAL_NULL(*retval); - } - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ baseURI string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-baseURI -Since: DOM Level 3 -*/ -int dom_node_base_uri_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNode *nodep; - xmlChar *baseuri; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - - baseuri = xmlNodeGetBase(nodep->doc, nodep); - if (baseuri) { - ZVAL_XML_STRING(*retval, (char *) (baseuri), ZSTR_DUPLICATE); - xmlFree(baseuri); - } else { - ZVAL_NULL(*retval); - } - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ textContent string -readonly=no -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-textContent -Since: DOM Level 3 -*/ -int dom_node_text_content_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNode *nodep; - char *str = NULL; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - str = xmlNodeGetContent(nodep); - - ALLOC_ZVAL(*retval); - - if(str != NULL) { - ZVAL_XML_STRING(*retval, str, ZSTR_DUPLICATE); - xmlFree(str); - } else { - ZVAL_EMPTY_TEXT(*retval); - } - - return SUCCESS; -} - -int dom_node_text_content_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - return SUCCESS; -} - -/* }}} */ - - -static xmlNodePtr _php_dom_insert_fragment(xmlNodePtr nodep, xmlNodePtr prevsib, - xmlNodePtr nextsib, xmlNodePtr fragment, - dom_object *intern, dom_object *childobj TSRMLS_DC) -{ - xmlNodePtr newchild, node; - - newchild = fragment->children; - - if (newchild) { - if (prevsib == NULL) { - nodep->children = newchild; - } else { - prevsib->next = newchild; - } - newchild->prev = prevsib; - if (nextsib == NULL) { - nodep->last = fragment->last; - } else { - fragment->last->next = nextsib; - nextsib->prev = fragment->last; - } - - node = newchild; - while (node != NULL) { - node->parent = nodep; - if (node->doc != nodep->doc) { - xmlSetTreeDoc(node, nodep->doc); - if (node->_private != NULL) { - childobj = node->_private; - childobj->document = intern->document; - php_libxml_increment_doc_ref((php_libxml_node_object *)childobj, NULL TSRMLS_CC); - } - } - if (node == fragment->last) { - break; - } - node = node->next; - } - - fragment->children = NULL; - fragment->last = NULL; - } - - return newchild; -} - -/* {{{ proto domnode dom_node_insert_before(DomNode newChild, DomNode refChild) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727 -Since: -*/ -PHP_FUNCTION(dom_node_insert_before) -{ - zval *id, *node, *ref = NULL, *rv = NULL; - xmlNodePtr child, new_child, parentp, refp; - dom_object *intern, *childobj, *refpobj; - int ret, stricterror; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO|O!", &id, dom_node_class_entry, &node, dom_node_class_entry, &ref, dom_node_class_entry) == FAILURE) { - return; - } - - DOM_GET_OBJ(parentp, id, xmlNodePtr, intern); - - if (dom_node_children_valid(parentp) == FAILURE) { - RETURN_FALSE; - } - - DOM_GET_OBJ(child, node, xmlNodePtr, childobj); - - new_child = NULL; - - stricterror = dom_get_strict_error(intern->document); - - if (dom_node_is_read_only(parentp) == SUCCESS || - (child->parent != NULL && dom_node_is_read_only(child->parent) == SUCCESS)) { - php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, stricterror TSRMLS_CC); - RETURN_FALSE; - } - - if (dom_hierarchy(parentp, child) == FAILURE) { - php_dom_throw_error(HIERARCHY_REQUEST_ERR, stricterror TSRMLS_CC); - RETURN_FALSE; - } - - if (child->doc != parentp->doc && child->doc != NULL) { - php_dom_throw_error(WRONG_DOCUMENT_ERR, stricterror TSRMLS_CC); - RETURN_FALSE; - } - - if (child->type == XML_DOCUMENT_FRAG_NODE && child->children == NULL) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Document Fragment is empty"); - RETURN_FALSE; - } - - if (child->doc == NULL && parentp->doc != NULL) { - childobj->document = intern->document; - php_libxml_increment_doc_ref((php_libxml_node_object *)childobj, NULL TSRMLS_CC); - } - - if (ref != NULL) { - DOM_GET_OBJ(refp, ref, xmlNodePtr, refpobj); - if (refp->parent != parentp) { - php_dom_throw_error(NOT_FOUND_ERR, stricterror TSRMLS_CC); - RETURN_FALSE; - } - - if (child->parent != NULL) { - xmlUnlinkNode(child); - } - - if (child->type == XML_TEXT_NODE && (refp->type == XML_TEXT_NODE || - (refp->prev != NULL && refp->prev->type == XML_TEXT_NODE))) { - if (child->doc == NULL) { - xmlSetTreeDoc(child, parentp->doc); - } - new_child = child; - new_child->parent = refp->parent; - new_child->next = refp; - new_child->prev = refp->prev; - refp->prev = new_child; - if (new_child->prev != NULL) { - new_child->prev->next = new_child; - } - if (new_child->parent != NULL) { - if (new_child->parent->children == refp) { - new_child->parent->children = new_child; - } - } - - } else if (child->type == XML_ATTRIBUTE_NODE) { - xmlAttrPtr lastattr; - - if (child->ns == NULL) - lastattr = xmlHasProp(refp->parent, child->name); - else - lastattr = xmlHasNsProp(refp->parent, child->name, child->ns->href); - if (lastattr != NULL && lastattr->type != XML_ATTRIBUTE_DECL) { - if (lastattr != (xmlAttrPtr) child) { - xmlUnlinkNode((xmlNodePtr) lastattr); - php_libxml_node_free_resource((xmlNodePtr) lastattr TSRMLS_CC); - } else { - DOM_RET_OBJ(rv, child, &ret, intern); - return; - } - } - } else if (child->type == XML_DOCUMENT_FRAG_NODE) { - new_child = _php_dom_insert_fragment(parentp, refp->prev, refp, child, intern, childobj TSRMLS_CC); - } - - if (new_child == NULL) { - new_child = xmlAddPrevSibling(refp, child); - } - } else { - if (child->parent != NULL){ - xmlUnlinkNode(child); - } - if (child->type == XML_TEXT_NODE && parentp->last != NULL && parentp->last->type == XML_TEXT_NODE) { - child->parent = parentp; - if (child->doc == NULL) { - xmlSetTreeDoc(child, parentp->doc); - } - new_child = child; - if (parentp->children == NULL) { - parentp->children = child; - parentp->last = child; - } else { - child = parentp->last; - child->next = new_child; - new_child->prev = child; - parentp->last = new_child; - } - } else if (child->type == XML_ATTRIBUTE_NODE) { - xmlAttrPtr lastattr; - - if (child->ns == NULL) - lastattr = xmlHasProp(parentp, child->name); - else - lastattr = xmlHasNsProp(parentp, child->name, child->ns->href); - if (lastattr != NULL && lastattr->type != XML_ATTRIBUTE_DECL) { - if (lastattr != (xmlAttrPtr) child) { - xmlUnlinkNode((xmlNodePtr) lastattr); - php_libxml_node_free_resource((xmlNodePtr) lastattr TSRMLS_CC); - } else { - DOM_RET_OBJ(rv, child, &ret, intern); - return; - } - } - } else if (child->type == XML_DOCUMENT_FRAG_NODE) { - new_child = _php_dom_insert_fragment(parentp, parentp->last, NULL, child, intern, childobj TSRMLS_CC); - } - if (new_child == NULL) { - new_child = xmlAddChild(parentp, child); - } - } - - if (NULL == new_child) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't add newnode as the previous sibling of refnode"); - RETURN_FALSE; - } - - dom_reconcile_ns(parentp->doc, new_child); - - DOM_RET_OBJ(rv, new_child, &ret, intern); - -} -/* }}} end dom_node_insert_before */ - - -/* {{{ proto DomNode dom_node_replace_child(DomNode newChild, DomNode oldChild) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-785887307 -Since: -*/ -PHP_FUNCTION(dom_node_replace_child) -{ - zval *id, *newnode, *oldnode; - xmlNodePtr children, newchild, oldchild, nodep; - dom_object *intern, *newchildobj, *oldchildobj; - int foundoldchild = 0, stricterror; - - int ret; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OOO", &id, dom_node_class_entry, &newnode, dom_node_class_entry, &oldnode, dom_node_class_entry) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - if (dom_node_children_valid(nodep) == FAILURE) { - RETURN_FALSE; - } - - DOM_GET_OBJ(newchild, newnode, xmlNodePtr, newchildobj); - DOM_GET_OBJ(oldchild, oldnode, xmlNodePtr, oldchildobj); - - children = nodep->children; - if (!children) { - RETURN_FALSE; - } - - stricterror = dom_get_strict_error(intern->document); - - if (dom_node_is_read_only(nodep) == SUCCESS || - (newchild->parent != NULL && dom_node_is_read_only(newchild->parent) == SUCCESS)) { - php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, stricterror TSRMLS_CC); - RETURN_FALSE; - } - - if (newchild->doc != nodep->doc && newchild->doc != NULL) { - php_dom_throw_error(WRONG_DOCUMENT_ERR, stricterror TSRMLS_CC); - RETURN_FALSE; - } - - if (dom_hierarchy(nodep, newchild) == FAILURE) { - php_dom_throw_error(HIERARCHY_REQUEST_ERR, stricterror TSRMLS_CC); - RETURN_FALSE; - } - - /* check for the old child and whether the new child is already a child */ - while (children) { - if (children == oldchild) { - foundoldchild = 1; - break; - } - children = children->next; - } - - if (foundoldchild) { - xmlNodePtr node; - zval *rv = NULL; - - if (newchild->type == XML_DOCUMENT_FRAG_NODE) { - xmlNodePtr prevsib, nextsib; - prevsib = oldchild->prev; - nextsib = oldchild->next; - - xmlUnlinkNode(oldchild); - - newchild = _php_dom_insert_fragment(nodep, prevsib, nextsib, newchild, intern, newchildobj TSRMLS_CC); - if (newchild) { - dom_reconcile_ns(nodep->doc, newchild); - } - } else if (oldchild != newchild) { - if (newchild->doc == NULL && nodep->doc != NULL) { - xmlSetTreeDoc(newchild, nodep->doc); - newchildobj->document = intern->document; - php_libxml_increment_doc_ref((php_libxml_node_object *)newchildobj, NULL TSRMLS_CC); - } - node = xmlReplaceNode(oldchild, newchild); - dom_reconcile_ns(nodep->doc, newchild); - } - DOM_RET_OBJ(rv, oldchild, &ret, intern); - return; - } else { - php_dom_throw_error(NOT_FOUND_ERR, dom_get_strict_error(intern->document) TSRMLS_CC); - RETURN_FALSE; - } -} -/* }}} end dom_node_replace_child */ - - -/* {{{ proto DomNode dom_node_remove_child(DomNode oldChild) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1734834066 -Since: -*/ -PHP_FUNCTION(dom_node_remove_child) -{ - zval *id, *node; - xmlNodePtr children, child, nodep; - dom_object *intern, *childobj; - int ret, stricterror; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &id, dom_node_class_entry, &node, dom_node_class_entry) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - if (dom_node_children_valid(nodep) == FAILURE) { - RETURN_FALSE; - } - - DOM_GET_OBJ(child, node, xmlNodePtr, childobj); - - stricterror = dom_get_strict_error(intern->document); - - if (dom_node_is_read_only(nodep) == SUCCESS || - (child->parent != NULL && dom_node_is_read_only(child->parent) == SUCCESS)) { - php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, stricterror TSRMLS_CC); - RETURN_FALSE; - } - - children = nodep->children; - if (!children) { - php_dom_throw_error(NOT_FOUND_ERR, stricterror TSRMLS_CC); - RETURN_FALSE; - } - - while (children) { - if (children == child) { - zval *rv = NULL; - xmlUnlinkNode(child); - DOM_RET_OBJ(rv, child, &ret, intern); - return; - } - children = children->next; - } - - php_dom_throw_error(NOT_FOUND_ERR, stricterror TSRMLS_CC); - RETURN_FALSE -} -/* }}} end dom_node_remove_child */ - - -/* {{{ proto DomNode dom_node_append_child(DomNode newChild) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-184E7107 -Since: -*/ -PHP_FUNCTION(dom_node_append_child) -{ - zval *id, *node, *rv = NULL; - xmlNodePtr child, nodep, new_child = NULL; - dom_object *intern, *childobj; - int ret, stricterror; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &id, dom_node_class_entry, &node, dom_node_class_entry) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - if (dom_node_children_valid(nodep) == FAILURE) { - RETURN_FALSE; - } - - DOM_GET_OBJ(child, node, xmlNodePtr, childobj); - - stricterror = dom_get_strict_error(intern->document); - - if (dom_node_is_read_only(nodep) == SUCCESS || - (child->parent != NULL && dom_node_is_read_only(child->parent) == SUCCESS)) { - php_dom_throw_error(NO_MODIFICATION_ALLOWED_ERR, stricterror TSRMLS_CC); - RETURN_FALSE; - } - - if (dom_hierarchy(nodep, child) == FAILURE) { - php_dom_throw_error(HIERARCHY_REQUEST_ERR, stricterror TSRMLS_CC); - RETURN_FALSE; - } - - if (!(child->doc == NULL || child->doc == nodep->doc)) { - php_dom_throw_error(WRONG_DOCUMENT_ERR, stricterror TSRMLS_CC); - RETURN_FALSE; - } - - if (child->type == XML_DOCUMENT_FRAG_NODE && child->children == NULL) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Document Fragment is empty"); - RETURN_FALSE; - } - - if (child->doc == NULL && nodep->doc != NULL) { - childobj->document = intern->document; - php_libxml_increment_doc_ref((php_libxml_node_object *)childobj, NULL TSRMLS_CC); - } - - if (child->parent != NULL){ - xmlUnlinkNode(child); - } - - if (child->type == XML_TEXT_NODE && nodep->last != NULL && nodep->last->type == XML_TEXT_NODE) { - child->parent = nodep; - if (child->doc == NULL) { - xmlSetTreeDoc(child, nodep->doc); - } - new_child = child; - if (nodep->children == NULL) { - nodep->children = child; - nodep->last = child; - } else { - child = nodep->last; - child->next = new_child; - new_child->prev = child; - nodep->last = new_child; - } - } else if (child->type == XML_ATTRIBUTE_NODE) { - xmlAttrPtr lastattr; - - if (child->ns == NULL) - lastattr = xmlHasProp(nodep, child->name); - else - lastattr = xmlHasNsProp(nodep, child->name, child->ns->href); - if (lastattr != NULL && lastattr->type != XML_ATTRIBUTE_DECL) { - if (lastattr != (xmlAttrPtr) child) { - xmlUnlinkNode((xmlNodePtr) lastattr); - php_libxml_node_free_resource((xmlNodePtr) lastattr TSRMLS_CC); - } - } - } else if (child->type == XML_DOCUMENT_FRAG_NODE) { - new_child = _php_dom_insert_fragment(nodep, nodep->last, NULL, child, intern, childobj TSRMLS_CC); - } - - if (new_child == NULL) { - new_child = xmlAddChild(nodep, child); - if (new_child == NULL) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't append node"); - RETURN_FALSE; - } - } - - dom_reconcile_ns(nodep->doc, new_child); - - DOM_RET_OBJ(rv, new_child, &ret, intern); -} -/* }}} end dom_node_append_child */ - - -/* {{{ proto boolean dom_node_has_child_nodes() U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-810594187 -Since: -*/ -PHP_FUNCTION(dom_node_has_child_nodes) -{ - zval *id; - xmlNode *nodep; - dom_object *intern; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_node_class_entry) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - if (dom_node_children_valid(nodep) == FAILURE) { - RETURN_FALSE; - } - - if (nodep->children) { - RETURN_TRUE; - } else { - RETURN_FALSE; - } -} -/* }}} end dom_node_has_child_nodes */ - - -/* {{{ proto DomNode dom_node_clone_node(boolean deep) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3A0ED0A4 -Since: -*/ -PHP_FUNCTION(dom_node_clone_node) -{ - zval *rv = NULL; - zval *id; - xmlNode *n, *node; - int ret; - dom_object *intern; - long recursive = 0; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|l", &id, dom_node_class_entry, &recursive) == FAILURE) { - return; - } - - DOM_GET_OBJ(n, id, xmlNodePtr, intern); - - node = xmlDocCopyNode(n, n->doc, recursive); - - if (!node) { - RETURN_FALSE; - } - - /* When deep is false Element nodes still require the attributes - Following taken from libxml as xmlDocCopyNode doesnt do this */ - if (n->type == XML_ELEMENT_NODE && recursive == 0) { - if (n->nsDef != NULL) { - node->nsDef = xmlCopyNamespaceList(n->nsDef); - } - if (n->ns != NULL) { - xmlNsPtr ns; - ns = xmlSearchNs(n->doc, node, n->ns->prefix); - if (ns == NULL) { - ns = xmlSearchNs(n->doc, n, n->ns->prefix); - if (ns != NULL) { - xmlNodePtr root = node; - - while (root->parent != NULL) { - root = root->parent; - } - node->ns = xmlNewNs(root, ns->href, ns->prefix); - } - } else { - node->ns = ns; - } - } - if (n->properties != NULL) { - node->properties = xmlCopyPropList(node, n->properties); - } - } - - /* If document cloned we want a new document proxy */ - if (node->doc != n->doc) { - intern = NULL; - } - - DOM_RET_OBJ(rv, node, &ret, intern); -} -/* }}} end dom_node_clone_node */ - - - -/* {{{ proto void dom_node_normalize() U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-normalize -Since: -*/ -PHP_FUNCTION(dom_node_normalize) -{ - zval *id; - xmlNode *nodep; - dom_object *intern; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_node_class_entry) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - dom_normalize(nodep TSRMLS_CC); - -} -/* }}} end dom_node_normalize */ - - -/* {{{ proto boolean dom_node_is_supported(string feature, string version); -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Level-2-Core-Node-supports -Since: DOM Level 2 -*/ -PHP_FUNCTION(dom_node_is_supported) -{ - zval *id; - int feature_len, version_len; - char *feature, *version; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oss", &id, dom_node_class_entry, &feature, &feature_len, &version, &version_len) == FAILURE) { - return; - } - - if (dom_has_feature(feature, version)) { - RETURN_TRUE; - } else { - RETURN_FALSE; - } -} -/* }}} end dom_node_is_supported */ - - -/* {{{ proto boolean dom_node_has_attributes() U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeHasAttrs -Since: DOM Level 2 -*/ -PHP_FUNCTION(dom_node_has_attributes) -{ - zval *id; - xmlNode *nodep; - dom_object *intern; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_node_class_entry) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - if (nodep->type != XML_ELEMENT_NODE) - RETURN_FALSE; - - if (nodep->properties) { - RETURN_TRUE; - } else { - RETURN_FALSE; - } -} -/* }}} end dom_node_has_attributes */ - -/* {{{ proto short dom_node_compare_document_position(DomNode other) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-compareDocumentPosition -Since: DOM Level 3 -*/ -PHP_FUNCTION(dom_node_compare_document_position) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_node_compare_document_position */ - - -/* {{{ proto boolean dom_node_is_same_node(DomNode other) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isSameNode -Since: DOM Level 3 -*/ -PHP_FUNCTION(dom_node_is_same_node) -{ - zval *id, *node; - xmlNodePtr nodeotherp, nodep; - dom_object *intern, *nodeotherobj; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &id, dom_node_class_entry, &node, dom_node_class_entry) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - DOM_GET_OBJ(nodeotherp, node, xmlNodePtr, nodeotherobj); - - if (nodep == nodeotherp) { - RETURN_TRUE; - } else { - RETURN_FALSE; - } -} -/* }}} end dom_node_is_same_node */ - - -/* {{{ proto string dom_node_lookup_prefix(string namespaceURI) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-lookupNamespacePrefix -Since: DOM Level 3 -*/ -PHP_FUNCTION(dom_node_lookup_prefix) -{ - zval *id; - xmlNodePtr nodep, lookupp = NULL; - dom_object *intern; - xmlNsPtr nsptr; - int uri_len = 0; - char *uri; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &id, dom_node_class_entry, &uri, &uri_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - if (uri_len > 0) { - switch (nodep->type) { - case XML_ELEMENT_NODE: - lookupp = nodep; - break; - case XML_DOCUMENT_NODE: - case XML_HTML_DOCUMENT_NODE: - lookupp = xmlDocGetRootElement((xmlDocPtr) nodep); - break; - case XML_ENTITY_NODE : - case XML_NOTATION_NODE: - case XML_DOCUMENT_FRAG_NODE: - case XML_DOCUMENT_TYPE_NODE: - case XML_DTD_NODE: - RETURN_NULL(); - break; - default: - lookupp = nodep->parent; - } - - if (lookupp != NULL && (nsptr = xmlSearchNsByHref(lookupp->doc, lookupp, uri))) { - if (nsptr->prefix != NULL) { - RETVAL_XML_STRING((char *) nsptr->prefix, ZSTR_DUPLICATE); - return; - } - } - } - - RETURN_NULL(); -} -/* }}} end dom_node_lookup_prefix */ - - -/* {{{ proto boolean dom_node_is_default_namespace(string namespaceURI) U -URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace -Since: DOM Level 3 -*/ -PHP_FUNCTION(dom_node_is_default_namespace) -{ - zval *id; - xmlNodePtr nodep; - dom_object *intern; - xmlNsPtr nsptr; - int uri_len = 0; - char *uri; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&", &id, dom_node_class_entry, &uri, &uri_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - if (uri_len > 0) { - nsptr = xmlSearchNs(nodep->doc, nodep, NULL); - if (nsptr && xmlStrEqual(nsptr->href, uri)) { - RETURN_TRUE; - } - } - - RETURN_FALSE; -} -/* }}} end dom_node_is_default_namespace */ - - -/* {{{ proto string dom_node_lookup_namespace_uri(string prefix) U -URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI -Since: DOM Level 3 -*/ -PHP_FUNCTION(dom_node_lookup_namespace_uri) -{ - zval *id; - xmlNodePtr nodep; - dom_object *intern; - xmlNsPtr nsptr; - int prefix_len = 0; - char *prefix=NULL; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os!&", &id, dom_node_class_entry, &prefix, &prefix_len, UG(utf8_conv)) == FAILURE) { - return; - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - nsptr = xmlSearchNs(nodep->doc, nodep, prefix); - if (nsptr && nsptr->href != NULL) { - RETVAL_XML_STRING((char *) nsptr->href, ZSTR_DUPLICATE); - return; - } - - RETURN_NULL(); -} -/* }}} end dom_node_lookup_namespace_uri */ - - -/* {{{ proto boolean dom_node_is_equal_node(DomNode arg) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isEqualNode -Since: DOM Level 3 -*/ -PHP_FUNCTION(dom_node_is_equal_node) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_node_is_equal_node */ - - -/* {{{ proto DomNode dom_node_get_feature(string feature, string version) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getFeature -Since: DOM Level 3 -*/ -PHP_FUNCTION(dom_node_get_feature) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_node_get_feature */ - - -/* {{{ proto DomUserData dom_node_set_user_data(string key, DomUserData data, userdatahandler handler) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-setUserData -Since: DOM Level 3 -*/ -PHP_FUNCTION(dom_node_set_user_data) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_node_set_user_data */ - - -/* {{{ proto DomUserData dom_node_get_user_data(string key) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getUserData -Since: DOM Level 3 -*/ -PHP_FUNCTION(dom_node_get_user_data) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_node_get_user_data */ - - -static void dom_canonicalization(INTERNAL_FUNCTION_PARAMETERS, int mode) -{ - zval *id; - zval *xpath_array=NULL, *ns_prefixes=NULL; - xmlNodePtr nodep; - xmlDocPtr docp; - xmlNodeSetPtr nodeset = NULL; - dom_object *intern; - zend_bool exclusive=0, with_comments=0; - xmlChar **inclusive_ns_prefixes = NULL; - char *file = NULL; - int ret = -1, file_len = 0; - xmlOutputBufferPtr buf; - xmlXPathContextPtr ctxp=NULL; - xmlXPathObjectPtr xpathobjp=NULL; - zend_uchar file_type = IS_STRING; - - if (mode == 0) { - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), - "O|bba!a!", &id, dom_node_class_entry, &exclusive, &with_comments, - &xpath_array, &ns_prefixes) == FAILURE) { - return; - } - } else { - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), - "Ot|bba!a!", &id, dom_node_class_entry, &file, &file_len, &file_type, &exclusive, - &with_comments, &xpath_array, &ns_prefixes) == FAILURE) { - return; - } - } - - DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); - - docp = nodep->doc; - - if (! docp) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Node must be associated with a document"); - RETURN_FALSE; - } - - if (file_type == IS_UNICODE) { - if (php_stream_path_encode(NULL, &file, &file_len, (UChar*)file, file_len, REPORT_ERRORS, NULL) == FAILURE) { - RETURN_FALSE; - } - } - - if (xpath_array == NULL) { - if (nodep->type != XML_DOCUMENT_NODE) { - ctxp = xmlXPathNewContext(docp); - ctxp->node = nodep; - xpathobjp = xmlXPathEvalExpression("(.//. | .//@* | .//namespace::*)", ctxp); - ctxp->node = NULL; - if (xpathobjp && xpathobjp->type == XPATH_NODESET) { - nodeset = xpathobjp->nodesetval; - } else { - if (xpathobjp) { - xmlXPathFreeObject(xpathobjp); - } - xmlXPathFreeContext(ctxp); - if (file_type == IS_UNICODE) { - efree(file); - } - php_error_docref(NULL TSRMLS_CC, E_WARNING, "XPath query did not return a nodeset"); - RETURN_FALSE; - } - } - } else { - /*xpath query from xpath_array */ - HashTable *ht = Z_ARRVAL_P(xpath_array); - zval **tmp, **zxquery; - char *xquery; - int xquery_len; - - if (zend_ascii_hash_find(ht, "query", sizeof("query"), (void**)&tmp) == SUCCESS && - (Z_TYPE_PP(tmp) == IS_STRING || Z_TYPE_PP(tmp) == IS_UNICODE)) { - zxquery = tmp; -/* - if (Z_TYPE_PP(tmp) == IS_STRING) { - xquery = Z_STRVAL_PP(tmp); - } else { - - } -*/ - } else { - if (file_type == IS_UNICODE) { - efree(file); - } - php_error_docref(NULL TSRMLS_CC, E_WARNING, "'query' missing from xpath array or is not a string"); - RETURN_FALSE; - } - - ctxp = xmlXPathNewContext(docp); - ctxp->node = nodep; - - if (zend_ascii_hash_find(ht, "namespaces", sizeof("namespaces"), (void**)&tmp) == SUCCESS && - Z_TYPE_PP(tmp) == IS_ARRAY) { - zval **tmpns; - char *nschar; - int nschar_len; - - while (zend_hash_get_current_data(Z_ARRVAL_PP(tmp), (void **)&tmpns) == SUCCESS) { - if (Z_TYPE_PP(tmpns) == IS_STRING || Z_TYPE_PP(tmpns) == IS_UNICODE) { - zstr prefix = NULL_ZSTR; - ulong idx; - uint prefix_key_len; - zend_uchar htype; - UErrorCode errCode = 0; - - if (Z_TYPE_PP(tmpns) == IS_UNICODE) { - zend_unicode_to_string_ex(UG(utf8_conv), &nschar, &nschar_len, Z_USTRVAL_PP(tmpns), Z_USTRLEN_PP(tmpns), &errCode); - } else { - nschar = Z_STRVAL_PP(tmpns); - } - - htype = zend_hash_get_current_key_ex(Z_ARRVAL_PP(tmp), - &prefix, &prefix_key_len, &idx, 0, NULL); - if (htype == HASH_KEY_IS_STRING) { - xmlXPathRegisterNs(ctxp, (xmlChar *)prefix.s, (xmlChar *)nschar); - } else - if (htype == HASH_KEY_IS_UNICODE) { - char *tmp_prefix; - int tmp_prefix_len; - errCode = 0; - - zend_unicode_to_string_ex(UG(utf8_conv), &tmp_prefix, &tmp_prefix_len, prefix.u, prefix_key_len, &errCode); - xmlXPathRegisterNs(ctxp, (xmlChar *)tmp_prefix, (xmlChar *)nschar); - efree(tmp_prefix); - } - - if (Z_TYPE_PP(tmpns) == IS_UNICODE) { - efree(nschar); - } - } - zend_hash_move_forward(Z_ARRVAL_PP(tmp)); - } - } - - if (Z_TYPE_PP(zxquery) == IS_UNICODE) { - UErrorCode errCode = 0; - zend_unicode_to_string_ex(UG(utf8_conv), &xquery, &xquery_len, Z_USTRVAL_PP(zxquery), Z_USTRLEN_PP(zxquery), &errCode); - } else { - xquery = Z_STRVAL_PP(zxquery); - } - - xpathobjp = xmlXPathEvalExpression(xquery, ctxp); - - if (Z_TYPE_PP(zxquery) == IS_UNICODE) { - efree(xquery); - } - - ctxp->node = NULL; - if (xpathobjp && xpathobjp->type == XPATH_NODESET) { - nodeset = xpathobjp->nodesetval; - } else { - if (file_type == IS_UNICODE) { - efree(file); - } - if (xpathobjp) { - xmlXPathFreeObject(xpathobjp); - } - xmlXPathFreeContext(ctxp); - php_error_docref(NULL TSRMLS_CC, E_WARNING, "XPath query did not return a nodeset"); - RETURN_FALSE; - } - } - - if (ns_prefixes != NULL) { - if (exclusive) { - zval **tmpns; - int nscount = 0; - - inclusive_ns_prefixes = safe_emalloc(zend_hash_num_elements(Z_ARRVAL_P(ns_prefixes)) + 1, - sizeof(xmlChar *), 0); - while (zend_hash_get_current_data(Z_ARRVAL_P(ns_prefixes), (void **)&tmpns) == SUCCESS) { - if (Z_TYPE_PP(tmpns) == IS_STRING) { - inclusive_ns_prefixes[nscount++] = estrndup(Z_STRVAL_PP(tmpns), strlen(Z_STRVAL_PP(tmpns))); - } else { - UErrorCode errCode = 0; - char *prefix; - int prfeix_len; - - zend_unicode_to_string_ex(UG(utf8_conv), &prefix, &prfeix_len, Z_USTRVAL_PP(tmpns), Z_USTRLEN_PP(tmpns), &errCode); - inclusive_ns_prefixes[nscount++] = prefix; - } - zend_hash_move_forward(Z_ARRVAL_P(ns_prefixes)); - } - inclusive_ns_prefixes[nscount] = NULL; - } else { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, - "Inclusive namespace prefixes only allowed in exlcusive mode."); - } - } - - if (mode == 1) { - buf = xmlOutputBufferCreateFilename(file, NULL, 0); - } else { - buf = xmlAllocOutputBuffer(NULL); - } - - if (buf != NULL) { - ret = xmlC14NDocSaveTo(docp, nodeset, exclusive, inclusive_ns_prefixes, - with_comments, buf); - } - - if (file_type == IS_UNICODE) { - efree(file); - } - - if (inclusive_ns_prefixes != NULL) { - int nscount = 0; - while(inclusive_ns_prefixes[nscount] != NULL) { - efree(inclusive_ns_prefixes[nscount++]); - } - efree(inclusive_ns_prefixes); - } - if (xpathobjp != NULL) { - xmlXPathFreeObject(xpathobjp); - } - if (ctxp != NULL) { - xmlXPathFreeContext(ctxp); - } - - if (buf == NULL || ret < 0) { - RETVAL_FALSE; - } else { - if (mode == 0) { - ret = buf->buffer->use; - if (ret > 0) { - RETVAL_STRINGL((char *) buf->buffer->content, ret, 1); - } else { - RETVAL_EMPTY_STRING(); - } - } - } - - if (buf) { - int bytes; - - bytes = xmlOutputBufferClose(buf); - if (mode == 1 && (ret >= 0)) { - RETURN_LONG(bytes); - } - } -} - -/* {{{ proto string DOMNode::C14N([bool exclusive [, bool with_comments [, array xpath [, array ns_prefixes]]]]) U - Canonicalize nodes to a string */ -PHP_METHOD(domnode, C14N) -{ - dom_canonicalization(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); -} - -/* {{{ proto int DOMNode::C14NFile(string uri [, bool exclusive [, bool with_comments [, array xpath [, array ns_prefixes]]]]) U - Canonicalize nodes to a file */ -PHP_METHOD(domnode, C14NFile) -{ - dom_canonicalization(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); -} - -#endif - -/* {{{ proto int DOMNode::getNodePath() U - Gets an xpath for a node */ - -PHP_METHOD(domnode, getNodePath) -{ - zval *id; - xmlNode *nodep; - dom_object *intern; - char *value; - - - - DOM_GET_THIS_OBJ(nodep, id, xmlNodePtr, intern); - - value = (char *)xmlGetNodePath(nodep); - if (value == NULL) { - RETURN_NULL(); - } else { - RETVAL_XML_STRING(value, ZSTR_DUPLICATE); - xmlFree(value); - } - - -} - diff --git a/ext/dom/nodelist.c b/ext/dom/nodelist.c deleted file mode 100644 index 4c36e2c6ca583..0000000000000 --- a/ext/dom/nodelist.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class DOMNodeList -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-536297177 -* Since: -*/ - -zend_function_entry php_dom_nodelist_class_functions[] = { - PHP_FALIAS(item, dom_nodelist_item, NULL) - {NULL, NULL, NULL} -}; - -/* {{{ length int -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-203510337 -Since: -*/ -int dom_nodelist_length_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - dom_nnodemap_object *objmap; - xmlNodePtr nodep, curnode; - int count = 0; - HashTable *nodeht; - - objmap = (dom_nnodemap_object *)obj->ptr; - if (objmap != NULL) { - if (objmap->ht) { - count = xmlHashSize(objmap->ht); - } else { - if (objmap->nodetype == DOM_NODESET) { - nodeht = HASH_OF(objmap->baseobjptr); - count = zend_hash_num_elements(nodeht); - } else { - nodep = dom_object_get_node(objmap->baseobj); - if (nodep) { - if (objmap->nodetype == XML_ATTRIBUTE_NODE || objmap->nodetype == XML_ELEMENT_NODE) { - curnode = nodep->children; - if (curnode) { - count++; - while (curnode->next != NULL) { - count++; - curnode = curnode->next; - } - } - } else { - if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) { - nodep = xmlDocGetRootElement((xmlDoc *) nodep); - } else { - nodep = nodep->children; - } - curnode = dom_get_elements_by_tag_name_ns_raw(nodep, objmap->ns, objmap->local, &count, -1); - } - } - } - } - } - - MAKE_STD_ZVAL(*retval); - ZVAL_LONG(*retval, count); - return SUCCESS; -} - -/* }}} */ - - -/* {{{ proto DOMNode dom_nodelist_item(int index) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-844377136 -Since: -*/ -PHP_FUNCTION(dom_nodelist_item) -{ - zval *id, *rv = NULL; - long index; - int ret; - dom_object *intern; - xmlNodePtr itemnode = NULL; - - dom_nnodemap_object *objmap; - xmlNodePtr nodep, curnode; - int count = 0; - HashTable *nodeht; - zval **entry; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &id, dom_nodelist_class_entry, &index) == FAILURE) { - return; - } - - if (index >= 0) { - intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); - - objmap = (dom_nnodemap_object *)intern->ptr; - if (objmap != NULL) { - if (objmap->ht) { - if (objmap->nodetype == XML_ENTITY_NODE) { - itemnode = php_dom_libxml_hash_iter(objmap->ht, index); - } else { - itemnode = php_dom_libxml_notation_iter(objmap->ht, index); - } - } else { - if (objmap->nodetype == DOM_NODESET) { - nodeht = HASH_OF(objmap->baseobjptr); - if (zend_hash_index_find(nodeht, index, (void **) &entry)==SUCCESS) { - *return_value = **entry; - zval_copy_ctor(return_value); - return; - } - } else if (objmap->baseobj) { - nodep = dom_object_get_node(objmap->baseobj); - if (nodep) { - if (objmap->nodetype == XML_ATTRIBUTE_NODE || objmap->nodetype == XML_ELEMENT_NODE) { - curnode = nodep->children; - while (count < index && curnode != NULL) { - count++; - curnode = curnode->next; - } - itemnode = curnode; - } else { - if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) { - nodep = xmlDocGetRootElement((xmlDoc *) nodep); - } else { - nodep = nodep->children; - } - itemnode = dom_get_elements_by_tag_name_ns_raw(nodep, objmap->ns, objmap->local, &count, index); - } - } - } - } - } - - if (itemnode) { - DOM_RET_OBJ(rv, itemnode, &ret, objmap->baseobj); - return; - } - } - - RETVAL_NULL(); -} -/* }}} end dom_nodelist_item */ -#endif diff --git a/ext/dom/notation.c b/ext/dom/notation.c deleted file mode 100644 index c045e4254a3a1..0000000000000 --- a/ext/dom/notation.c +++ /dev/null @@ -1,102 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class DOMNotation extends DOMNode -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-5431D1B9 -* Since: -*/ - -zend_function_entry php_dom_notation_class_functions[] = { - {NULL, NULL, NULL} -}; - -/* {{{ attribute protos, not implemented yet */ - -/* {{{ publicId string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-54F2B4D0 -Since: -*/ -int dom_notation_public_id_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlEntityPtr nodep; - - nodep = (xmlEntityPtr) dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - if (nodep->ExternalID) { - ZVAL_XML_STRING(*retval, (char *) (nodep->ExternalID), ZSTR_DUPLICATE); - } else { - ZVAL_EMPTY_TEXT(*retval); - } - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ systemId string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-E8AAB1D0 -Since: -*/ -int dom_notation_system_id_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlEntityPtr nodep; - - nodep = (xmlEntityPtr) dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - if (nodep->SystemID) { - ZVAL_XML_STRING(*retval, (char *) (nodep->SystemID), ZSTR_DUPLICATE); - } else { - ZVAL_EMPTY_TEXT(*retval); - } - - return SUCCESS; -} - -/* }}} */ - -#endif diff --git a/ext/dom/php_dom.c b/ext/dom/php_dom.c deleted file mode 100644 index 50a57ea520257..0000000000000 --- a/ext/dom/php_dom.c +++ /dev/null @@ -1,1534 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - | Marcus Borger | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "ext/standard/php_rand.h" -#include "php_dom.h" -#include "dom_properties.h" - -#include "ext/standard/info.h" -#define PHP_XPATH 1 -#define PHP_XPTR 2 - -zend_class_entry *dom_node_class_entry; -zend_class_entry *dom_domexception_class_entry; -zend_class_entry *dom_domstringlist_class_entry; -zend_class_entry *dom_namelist_class_entry; -zend_class_entry *dom_domimplementationlist_class_entry; -zend_class_entry *dom_domimplementationsource_class_entry; -zend_class_entry *dom_domimplementation_class_entry; -zend_class_entry *dom_documentfragment_class_entry; -zend_class_entry *dom_document_class_entry; -zend_class_entry *dom_nodelist_class_entry; -zend_class_entry *dom_namednodemap_class_entry; -zend_class_entry *dom_characterdata_class_entry; -zend_class_entry *dom_attr_class_entry; -zend_class_entry *dom_element_class_entry; -zend_class_entry *dom_text_class_entry; -zend_class_entry *dom_comment_class_entry; -zend_class_entry *dom_typeinfo_class_entry; -zend_class_entry *dom_userdatahandler_class_entry; -zend_class_entry *dom_domerror_class_entry; -zend_class_entry *dom_domerrorhandler_class_entry; -zend_class_entry *dom_domlocator_class_entry; -zend_class_entry *dom_domconfiguration_class_entry; -zend_class_entry *dom_cdatasection_class_entry; -zend_class_entry *dom_documenttype_class_entry; -zend_class_entry *dom_notation_class_entry; -zend_class_entry *dom_entity_class_entry; -zend_class_entry *dom_entityreference_class_entry; -zend_class_entry *dom_processinginstruction_class_entry; -zend_class_entry *dom_string_extend_class_entry; -#if defined(LIBXML_XPATH_ENABLED) -zend_class_entry *dom_xpath_class_entry; -#endif -zend_class_entry *dom_namespace_node_class_entry; - -zend_object_handlers dom_object_handlers; - -static HashTable classes; - -typedef int (*dom_read_t)(dom_object *obj, zval **retval TSRMLS_DC); -typedef int (*dom_write_t)(dom_object *obj, zval *newval TSRMLS_DC); - -typedef struct _dom_prop_handler { - dom_read_t read_func; - dom_write_t write_func; -} dom_prop_handler; - -/* {{{ int dom_node_is_read_only(xmlNodePtr node) */ -int dom_node_is_read_only(xmlNodePtr node) { - switch (node->type) { - case XML_ENTITY_REF_NODE: - case XML_ENTITY_NODE: - case XML_DOCUMENT_TYPE_NODE: - case XML_NOTATION_NODE: - case XML_DTD_NODE: - case XML_ELEMENT_DECL: - case XML_ATTRIBUTE_DECL: - case XML_ENTITY_DECL: - case XML_NAMESPACE_DECL: - return SUCCESS; - break; - default: - if (node->doc == NULL) { - return SUCCESS; - } else { - return FAILURE; - } - } -} -/* }}} end dom_node_is_read_only */ - -/* {{{ int dom_node_children_valid(xmlNodePtr node) */ -int dom_node_children_valid(xmlNodePtr node) { - switch (node->type) { - case XML_DOCUMENT_TYPE_NODE: - case XML_DTD_NODE: - case XML_PI_NODE: - case XML_COMMENT_NODE: - case XML_TEXT_NODE: - case XML_CDATA_SECTION_NODE: - case XML_NOTATION_NODE: - return FAILURE; - break; - default: - return SUCCESS; - } -} -/* }}} end dom_node_children_valid */ - -/* {{{ dom_get_doc_props() */ -dom_doc_propsptr dom_get_doc_props(php_libxml_ref_obj *document) -{ - dom_doc_propsptr doc_props; - - if (document && document->doc_props) { - return document->doc_props; - } else { - doc_props = emalloc(sizeof(libxml_doc_props)); - doc_props->formatoutput = 0; - doc_props->validateonparse = 0; - doc_props->resolveexternals = 0; - doc_props->preservewhitespace = 1; - doc_props->substituteentities = 0; - doc_props->stricterror = 1; - doc_props->recover = 0; - doc_props->classmap = NULL; - if (document) { - document->doc_props = doc_props; - } - return doc_props; - } -} - -int dom_set_doc_classmap(php_libxml_ref_obj *document, zend_class_entry *basece, zend_class_entry *ce TSRMLS_DC) -{ - dom_doc_propsptr doc_props; - - if (document) { - doc_props = dom_get_doc_props(document); - if (doc_props->classmap == NULL) { - if (ce == NULL) { - return SUCCESS; - } - ALLOC_HASHTABLE(doc_props->classmap); - zend_u_hash_init(doc_props->classmap, 0, NULL, NULL, 0, UG(unicode)); - } - if (ce) { - return zend_u_hash_add(doc_props->classmap, UG(unicode)?IS_UNICODE:IS_STRING, basece->name, basece->name_length + 1, &ce, sizeof(ce), NULL); - } else { - return zend_u_hash_del(doc_props->classmap, UG(unicode)?IS_UNICODE:IS_STRING, basece->name, basece->name_length + 1); - } - } - return SUCCESS; -} - -zend_class_entry *dom_get_doc_classmap(php_libxml_ref_obj *document, zend_class_entry *basece TSRMLS_DC) -{ - dom_doc_propsptr doc_props; - zend_class_entry **ce = NULL; - - if (document) { - doc_props = dom_get_doc_props(document); - if (doc_props->classmap) { - if (zend_u_hash_find(doc_props->classmap, UG(unicode)?IS_UNICODE:IS_STRING, basece->name, basece->name_length + 1, (void**) &ce) == SUCCESS) { - return *ce; - } - } - } - - return basece; -} -/* }}} */ - -/* {{{ dom_get_strict_error() */ -int dom_get_strict_error(php_libxml_ref_obj *document) { - int stricterror; - dom_doc_propsptr doc_props; - - doc_props = dom_get_doc_props(document); - stricterror = doc_props->stricterror; - if (document == NULL) { - efree(doc_props); - } - - return stricterror; -} -/* }}} */ - -/* {{{ xmlNodePtr dom_object_get_node(dom_object *obj) */ -PHP_DOM_EXPORT xmlNodePtr dom_object_get_node(dom_object *obj) -{ - if (obj && obj->ptr != NULL) { - return ((php_libxml_node_ptr *)obj->ptr)->node; - } else { - return NULL; - } -} -/* }}} end dom_object_get_node */ - -/* {{{ dom_object *php_dom_object_get_data(xmlNodePtr obj) */ -PHP_DOM_EXPORT dom_object *php_dom_object_get_data(xmlNodePtr obj) -{ - if (obj && obj->_private != NULL) { - return (dom_object *) ((php_libxml_node_ptr *) obj->_private)->_private; - } else { - return NULL; - } -} -/* }}} end php_dom_object_get_data */ - -/* {{{ dom_read_na */ -static int dom_read_na(dom_object *obj, zval **retval TSRMLS_DC) -{ - *retval = NULL; - php_error_docref(NULL TSRMLS_CC, E_ERROR, "Cannot read property"); - return FAILURE; -} -/* }}} */ - -/* {{{ dom_write_na */ -static int dom_write_na(dom_object *obj, zval *newval TSRMLS_DC) -{ - php_error_docref(NULL TSRMLS_CC, E_ERROR, "Cannot write property"); - return FAILURE; -} -/* }}} */ - -/* {{{ dom_register_prop_handler */ -static void dom_register_prop_handler(HashTable *prop_handler, char *name, dom_read_t read_func, dom_write_t write_func TSRMLS_DC) -{ - dom_prop_handler hnd; - - hnd.read_func = read_func ? read_func : dom_read_na; - hnd.write_func = write_func ? write_func : dom_write_na; - zend_ascii_hash_add(prop_handler, name, strlen(name)+1, &hnd, sizeof(dom_prop_handler), NULL); -} -/* }}} */ - -static zval **dom_get_property_ptr_ptr(zval *object, zval *member TSRMLS_DC) -{ - dom_object *obj; - zval tmp_member; - zval **retval = NULL; - dom_prop_handler *hnd; - zend_object_handlers *std_hnd; - int ret = FAILURE; - - if (member->type != IS_STRING && member->type != IS_UNICODE) { - tmp_member = *member; - zval_copy_ctor(&tmp_member); - convert_to_text(&tmp_member); - member = &tmp_member; - } - - obj = (dom_object *)zend_objects_get_address(object TSRMLS_CC); - - if (obj->prop_handler != NULL) { - ret = zend_u_hash_find(obj->prop_handler, Z_TYPE_P(member), Z_UNIVAL_P(member), Z_UNILEN_P(member)+1, (void **) &hnd); - } - if (ret == FAILURE) { - std_hnd = zend_get_std_object_handlers(); - retval = std_hnd->get_property_ptr_ptr(object, member TSRMLS_CC); - } - - if (member == &tmp_member) { - zval_dtor(member); - } - return retval; -} - -/* {{{ dom_read_property */ -zval *dom_read_property(zval *object, zval *member, int type TSRMLS_DC) -{ - dom_object *obj; - zval tmp_member; - zval *retval; - dom_prop_handler *hnd; - zend_object_handlers *std_hnd; - int ret; - - if (member->type != IS_STRING && member->type != IS_UNICODE) { - tmp_member = *member; - zval_copy_ctor(&tmp_member); - convert_to_text(&tmp_member); - member = &tmp_member; - } - - ret = FAILURE; - obj = (dom_object *)zend_objects_get_address(object TSRMLS_CC); - - if (obj->prop_handler != NULL) { - ret = zend_u_hash_find(obj->prop_handler, Z_TYPE_P(member), Z_UNIVAL_P(member), Z_UNILEN_P(member)+1, (void **) &hnd); - } else if (instanceof_function(obj->std.ce, dom_node_class_entry TSRMLS_CC)) { - php_error(E_WARNING, "Couldn't fetch %v. Node no longer exists", obj->std.ce->name); - } - if (ret == SUCCESS) { - ret = hnd->read_func(obj, &retval TSRMLS_CC); - if (ret == SUCCESS) { - /* ensure we're creating a temporary variable */ - retval->refcount = 0; - retval->is_ref = 0; - } else { - retval = EG(uninitialized_zval_ptr); - } - } else { - std_hnd = zend_get_std_object_handlers(); - retval = std_hnd->read_property(object, member, type TSRMLS_CC); - } - - if (member == &tmp_member) { - zval_dtor(member); - } - return retval; -} -/* }}} */ - -/* {{{ dom_write_property */ -void dom_write_property(zval *object, zval *member, zval *value TSRMLS_DC) -{ - dom_object *obj; - zval tmp_member; - dom_prop_handler *hnd; - zend_object_handlers *std_hnd; - int ret; - - if (member->type != IS_STRING && member->type != IS_UNICODE) { - tmp_member = *member; - zval_copy_ctor(&tmp_member); - convert_to_text(&tmp_member); - member = &tmp_member; - } - - ret = FAILURE; - obj = (dom_object *)zend_objects_get_address(object TSRMLS_CC); - - if (obj->prop_handler != NULL) { - ret = zend_u_hash_find((HashTable *)obj->prop_handler, Z_TYPE_P(member), Z_UNIVAL_P(member), Z_UNILEN_P(member)+1, (void **) &hnd); - } - if (ret == SUCCESS) { - hnd->write_func(obj, value TSRMLS_CC); - } else { - std_hnd = zend_get_std_object_handlers(); - std_hnd->write_property(object, member, value TSRMLS_CC); - } - - if (member == &tmp_member) { - zval_dtor(member); - } -} -/* }}} */ - -/* {{{ dom_property_exists */ -static int dom_property_exists(zval *object, zval *member, int check_empty TSRMLS_DC) -{ - dom_object *obj; - zval tmp_member; - dom_prop_handler *hnd; - zend_object_handlers *std_hnd; - int ret, retval=0; - - if (member->type != IS_STRING && member->type != IS_UNICODE) { - tmp_member = *member; - zval_copy_ctor(&tmp_member); - convert_to_text(&tmp_member); - member = &tmp_member; - } - - ret = FAILURE; - obj = (dom_object *)zend_objects_get_address(object TSRMLS_CC); - - if (obj->prop_handler != NULL) { - ret = zend_u_hash_find(obj->prop_handler, Z_TYPE_P(member), Z_UNIVAL_P(member), Z_UNILEN_P(member)+1, (void **) &hnd); - } - if (ret == SUCCESS) { - retval = 1; - } else { - std_hnd = zend_get_std_object_handlers(); - retval = std_hnd->has_property(object, member, check_empty TSRMLS_CC); - } - - if (member == &tmp_member) { - zval_dtor(member); - } - return retval; -} -/* }}} */ - -void *php_dom_export_node(zval *object TSRMLS_DC) -{ - php_libxml_node_object *intern; - xmlNodePtr nodep = NULL; - - intern = (php_libxml_node_object *)zend_object_store_get_object(object TSRMLS_CC); - if (intern && intern->node) { - nodep = intern->node->node; - } - - return nodep; -} - -/* {{{ proto somNode dom_import_simplexml(sxeobject node) U - Get a simplexml_element object from dom to allow for processing */ -PHP_FUNCTION(dom_import_simplexml) -{ - zval *rv = NULL; - zval *node; - xmlNodePtr nodep = NULL; - php_libxml_node_object *nodeobj; - int ret; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &node) == FAILURE) { - return; - } - - nodeobj = (php_libxml_node_object *)zend_object_store_get_object(node TSRMLS_CC); - nodep = php_libxml_import_node(node TSRMLS_CC); - - if (nodep && nodeobj && (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE)) { - DOM_RET_OBJ(rv, (xmlNodePtr) nodep, &ret, (dom_object *)nodeobj); - } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Nodetype to import"); - RETURN_NULL(); - } -} -/* }}} */ - -zend_object_value dom_objects_store_clone_obj(zval *zobject TSRMLS_DC) -{ - zend_object_value retval; - void *new_object; - dom_object *intern; - dom_object *old_object; - struct _store_object *obj; - zend_object_handle handle = Z_OBJ_HANDLE_P(zobject); - - obj = &EG(objects_store).object_buckets[handle].bucket.obj; - - if (obj->clone == NULL) { - php_error(E_ERROR, "Trying to clone an uncloneable object of class %v", Z_OBJCE_P(zobject)->name); - } - - obj->clone(obj->object, &new_object TSRMLS_CC); - - retval.handle = zend_objects_store_put(new_object, obj->dtor, obj->free_storage, obj->clone TSRMLS_CC); - intern = (dom_object *) new_object; - intern->handle = retval.handle; - retval.handlers = Z_OBJ_HT_P(zobject); - - old_object = (dom_object *) obj->object; - zend_objects_clone_members(&intern->std, retval, &old_object->std, intern->handle TSRMLS_CC); - - return retval; -} - -static zend_function_entry dom_functions[] = { - PHP_FE(dom_import_simplexml, NULL) - {NULL, NULL, NULL} -}; - -static zend_object_handlers* dom_get_obj_handlers(TSRMLS_D) { - return &dom_object_handlers; -} - -static zend_module_dep dom_deps[] = { - ZEND_MOD_REQUIRED("libxml") - ZEND_MOD_CONFLICTS("domxml") - {NULL, NULL, NULL} -}; - -zend_module_entry dom_module_entry = { - STANDARD_MODULE_HEADER_EX, NULL, - dom_deps, - "dom", - dom_functions, - PHP_MINIT(dom), - PHP_MSHUTDOWN(dom), - NULL, - NULL, - PHP_MINFO(dom), - DOM_API_VERSION, /* Extension versionnumber */ - STANDARD_MODULE_PROPERTIES -}; - -#ifdef COMPILE_DL_DOM -ZEND_GET_MODULE(dom) -#endif - -static void dom_prop_handlers_dtor(HashTable *ht) -{ - zend_hash_destroy(ht); -} - -/* {{{ PHP_MINIT_FUNCTION(dom) */ -PHP_MINIT_FUNCTION(dom) -{ - zend_class_entry ce; - HashTable dom_domstringlist_prop_handlers; - HashTable dom_namelist_prop_handlers; - HashTable dom_domimplementationlist_prop_handlers; - HashTable dom_document_prop_handlers; - HashTable dom_node_prop_handlers; - HashTable dom_document_fragment_prop_handlers; - HashTable dom_nodelist_prop_handlers; - HashTable dom_namednodemap_prop_handlers; - HashTable dom_characterdata_prop_handlers; - HashTable dom_attr_prop_handlers; - HashTable dom_element_prop_handlers; - HashTable dom_text_prop_handlers; - HashTable dom_cdata_prop_handlers; - HashTable dom_comment_prop_handlers; - HashTable dom_typeinfo_prop_handlers; - HashTable dom_domerror_prop_handlers; - HashTable dom_domlocator_prop_handlers; - HashTable dom_documenttype_prop_handlers; - HashTable dom_notation_prop_handlers; - HashTable dom_entity_prop_handlers; - HashTable dom_processinginstruction_prop_handlers; - HashTable dom_namespace_node_prop_handlers; - HashTable dom_entity_reference_prop_handlers; -#if defined(LIBXML_XPATH_ENABLED) - HashTable dom_xpath_prop_handlers; -#endif - - memcpy(&dom_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); - dom_object_handlers.read_property = dom_read_property; - dom_object_handlers.write_property = dom_write_property; - dom_object_handlers.get_property_ptr_ptr = dom_get_property_ptr_ptr; - dom_object_handlers.clone_obj = dom_objects_store_clone_obj; - dom_object_handlers.has_property = dom_property_exists; - - zend_hash_init(&classes, 0, NULL, (void (*)(void *))dom_prop_handlers_dtor, 1); - - INIT_CLASS_ENTRY(ce, "DOMException", php_dom_domexception_class_functions); - dom_domexception_class_entry = zend_register_internal_class_ex(&ce, zend_exception_get_default(TSRMLS_C), NULL TSRMLS_CC); - dom_domexception_class_entry->ce_flags |= ZEND_ACC_FINAL; - zend_declare_property_long(dom_domexception_class_entry, "code", sizeof("code")-1, 0, ZEND_ACC_PUBLIC TSRMLS_CC); - - REGISTER_DOM_CLASS(ce, "DOMStringList", NULL, php_dom_domstringlist_class_functions, dom_domstringlist_class_entry); - - zend_hash_init(&dom_domstringlist_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_domstringlist_prop_handlers, "length", dom_domstringlist_length_read, NULL TSRMLS_CC); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_domstringlist_prop_handlers, sizeof(dom_domstringlist_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMNameList", NULL, php_dom_namelist_class_functions, dom_namelist_class_entry); - - zend_hash_init(&dom_namelist_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_namelist_prop_handlers, "length", dom_namelist_length_read, NULL TSRMLS_CC); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_namelist_prop_handlers, sizeof(dom_namelist_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMImplementationList", NULL, php_dom_domimplementationlist_class_functions, dom_domimplementationlist_class_entry); - - zend_hash_init(&dom_domimplementationlist_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_domimplementationlist_prop_handlers, "length", dom_domimplementationlist_length_read, NULL TSRMLS_CC); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_domimplementationlist_prop_handlers, sizeof(dom_domimplementationlist_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMImplementationSource", NULL, php_dom_domimplementationsource_class_functions, dom_domimplementationsource_class_entry); - REGISTER_DOM_CLASS(ce, "DOMImplementation", NULL, php_dom_domimplementation_class_functions, dom_domimplementation_class_entry); - - REGISTER_DOM_CLASS(ce, "DOMNode", NULL, php_dom_node_class_functions, dom_node_class_entry); - - zend_hash_init(&dom_node_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_node_prop_handlers, "nodeName", dom_node_node_name_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_node_prop_handlers, "nodeValue", dom_node_node_value_read, dom_node_node_value_write TSRMLS_CC); - dom_register_prop_handler(&dom_node_prop_handlers, "nodeType", dom_node_node_type_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_node_prop_handlers, "parentNode", dom_node_parent_node_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_node_prop_handlers, "childNodes", dom_node_child_nodes_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_node_prop_handlers, "firstChild", dom_node_first_child_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_node_prop_handlers, "lastChild", dom_node_last_child_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_node_prop_handlers, "previousSibling", dom_node_previous_sibling_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_node_prop_handlers, "nextSibling", dom_node_next_sibling_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_node_prop_handlers, "attributes", dom_node_attributes_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_node_prop_handlers, "ownerDocument", dom_node_owner_document_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_node_prop_handlers, "namespaceURI", dom_node_namespace_uri_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_node_prop_handlers, "prefix", dom_node_prefix_read, dom_node_prefix_write TSRMLS_CC); - dom_register_prop_handler(&dom_node_prop_handlers, "localName", dom_node_local_name_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_node_prop_handlers, "baseURI", dom_node_base_uri_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_node_prop_handlers, "textContent", dom_node_text_content_read, dom_node_text_content_write TSRMLS_CC); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_node_prop_handlers, sizeof(dom_node_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMNameSpaceNode", NULL, NULL, dom_namespace_node_class_entry); - - zend_hash_init(&dom_namespace_node_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_namespace_node_prop_handlers, "nodeName", dom_node_node_name_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_namespace_node_prop_handlers, "nodeValue", dom_node_node_value_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_namespace_node_prop_handlers, "nodeType", dom_node_node_type_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_namespace_node_prop_handlers, "prefix", dom_node_prefix_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_namespace_node_prop_handlers, "localName", dom_node_local_name_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_namespace_node_prop_handlers, "namespaceURI", dom_node_namespace_uri_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_namespace_node_prop_handlers, "ownerDocument", dom_node_owner_document_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_namespace_node_prop_handlers, "parentNode", dom_node_parent_node_read, NULL TSRMLS_CC); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_namespace_node_prop_handlers, sizeof(dom_namespace_node_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMDocumentFragment", dom_node_class_entry, php_dom_documentfragment_class_functions, dom_documentfragment_class_entry); - zend_hash_init(&dom_document_fragment_prop_handlers, 0, NULL, NULL, 1); - zend_hash_copy(&dom_document_fragment_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler)); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_document_fragment_prop_handlers, sizeof(dom_node_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMDocument", dom_node_class_entry, php_dom_document_class_functions, dom_document_class_entry); - zend_hash_init(&dom_document_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_document_prop_handlers, "doctype", dom_document_doctype_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_document_prop_handlers, "implementation", dom_document_implementation_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_document_prop_handlers, "documentElement", dom_document_document_element_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_document_prop_handlers, "actualEncoding", dom_document_encoding_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_document_prop_handlers, "encoding", dom_document_encoding_read, dom_document_encoding_write TSRMLS_CC); - dom_register_prop_handler(&dom_document_prop_handlers, "xmlEncoding", dom_document_encoding_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_document_prop_handlers, "standalone", dom_document_standalone_read, dom_document_standalone_write TSRMLS_CC); - dom_register_prop_handler(&dom_document_prop_handlers, "xmlStandalone", dom_document_standalone_read, dom_document_standalone_write TSRMLS_CC); - dom_register_prop_handler(&dom_document_prop_handlers, "version", dom_document_version_read, dom_document_version_write TSRMLS_CC); - dom_register_prop_handler(&dom_document_prop_handlers, "xmlVersion", dom_document_version_read, dom_document_version_write TSRMLS_CC); - dom_register_prop_handler(&dom_document_prop_handlers, "strictErrorChecking", dom_document_strict_error_checking_read, dom_document_strict_error_checking_write TSRMLS_CC); - dom_register_prop_handler(&dom_document_prop_handlers, "documentURI", dom_document_document_uri_read, dom_document_document_uri_write TSRMLS_CC); - dom_register_prop_handler(&dom_document_prop_handlers, "config", dom_document_config_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_document_prop_handlers, "formatOutput", dom_document_format_output_read, dom_document_format_output_write TSRMLS_CC); - dom_register_prop_handler(&dom_document_prop_handlers, "validateOnParse", dom_document_validate_on_parse_read, dom_document_validate_on_parse_write TSRMLS_CC); - dom_register_prop_handler(&dom_document_prop_handlers, "resolveExternals", dom_document_resolve_externals_read, dom_document_resolve_externals_write TSRMLS_CC); - dom_register_prop_handler(&dom_document_prop_handlers, "preserveWhiteSpace", dom_document_preserve_whitespace_read, dom_document_preserve_whitespace_write TSRMLS_CC); - dom_register_prop_handler(&dom_document_prop_handlers, "recover", dom_document_recover_read, dom_document_recover_write TSRMLS_CC); - dom_register_prop_handler(&dom_document_prop_handlers, "substituteEntities", dom_document_substitue_entities_read, dom_document_substitue_entities_write TSRMLS_CC); - - zend_hash_merge(&dom_document_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_document_prop_handlers, sizeof(dom_document_prop_handlers), NULL); - - INIT_CLASS_ENTRY(ce, "DOMNodeList", php_dom_nodelist_class_functions); - ce.create_object = dom_nnodemap_objects_new; - dom_nodelist_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC); - dom_nodelist_class_entry->get_iterator = php_dom_get_iterator; - - zend_hash_init(&dom_nodelist_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_nodelist_prop_handlers, "length", dom_nodelist_length_read, NULL TSRMLS_CC); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_nodelist_prop_handlers, sizeof(dom_nodelist_prop_handlers), NULL); - - INIT_CLASS_ENTRY(ce, "DOMNamedNodeMap", php_dom_namednodemap_class_functions); - ce.create_object = dom_nnodemap_objects_new; - dom_namednodemap_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC); - dom_namednodemap_class_entry->get_iterator = php_dom_get_iterator; - - zend_hash_init(&dom_namednodemap_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_namednodemap_prop_handlers, "length", dom_namednodemap_length_read, NULL TSRMLS_CC); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_namednodemap_prop_handlers, sizeof(dom_namednodemap_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMCharacterData", dom_node_class_entry, php_dom_characterdata_class_functions, dom_characterdata_class_entry); - - zend_hash_init(&dom_characterdata_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_characterdata_prop_handlers, "data", dom_characterdata_data_read, dom_characterdata_data_write TSRMLS_CC); - dom_register_prop_handler(&dom_characterdata_prop_handlers, "length", dom_characterdata_length_read, NULL TSRMLS_CC); - zend_hash_merge(&dom_characterdata_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_characterdata_prop_handlers, sizeof(dom_characterdata_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMAttr", dom_node_class_entry, php_dom_attr_class_functions, dom_attr_class_entry); - - zend_hash_init(&dom_attr_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_attr_prop_handlers, "name", dom_attr_name_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_attr_prop_handlers, "specified", dom_attr_specified_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_attr_prop_handlers, "value", dom_attr_value_read, dom_attr_value_write TSRMLS_CC); - dom_register_prop_handler(&dom_attr_prop_handlers, "ownerElement", dom_attr_owner_element_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_attr_prop_handlers, "schemaTypeInfo", dom_attr_schema_type_info_read, NULL TSRMLS_CC); - zend_hash_merge(&dom_attr_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_attr_prop_handlers, sizeof(dom_attr_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMElement", dom_node_class_entry, php_dom_element_class_functions, dom_element_class_entry); - - zend_hash_init(&dom_element_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_element_prop_handlers, "tagName", dom_element_tag_name_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_element_prop_handlers, "schemaTypeInfo", dom_element_schema_type_info_read, NULL TSRMLS_CC); - zend_hash_merge(&dom_element_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_element_prop_handlers, sizeof(dom_element_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMText", dom_characterdata_class_entry, php_dom_text_class_functions, dom_text_class_entry); - - zend_hash_init(&dom_text_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_text_prop_handlers, "wholeText", dom_text_whole_text_read, NULL TSRMLS_CC); - zend_hash_merge(&dom_text_prop_handlers, &dom_characterdata_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_text_prop_handlers, sizeof(dom_text_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMComment", dom_characterdata_class_entry, php_dom_comment_class_functions, dom_comment_class_entry); - zend_hash_init(&dom_comment_prop_handlers, 0, NULL, NULL, 1); - zend_hash_copy(&dom_comment_prop_handlers, &dom_characterdata_prop_handlers, NULL, NULL, sizeof(dom_prop_handler)); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_comment_prop_handlers, sizeof(dom_comment_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMTypeinfo", NULL, php_dom_typeinfo_class_functions, dom_typeinfo_class_entry); - - zend_hash_init(&dom_typeinfo_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_typeinfo_prop_handlers, "typeName", dom_typeinfo_type_name_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_typeinfo_prop_handlers, "typeNamespace", dom_typeinfo_type_namespace_read, NULL TSRMLS_CC); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_typeinfo_prop_handlers, sizeof(dom_typeinfo_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMUserDataHandler", NULL, php_dom_userdatahandler_class_functions, dom_userdatahandler_class_entry); - REGISTER_DOM_CLASS(ce, "DOMDomError", NULL, php_dom_domerror_class_functions, dom_domerror_class_entry); - - zend_hash_init(&dom_domerror_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_domerror_prop_handlers, "severity", dom_domerror_severity_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_domerror_prop_handlers, "message", dom_domerror_message_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_domerror_prop_handlers, "type", dom_domerror_type_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_domerror_prop_handlers, "relatedException", dom_domerror_related_exception_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_domerror_prop_handlers, "related_data", dom_domerror_related_data_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_domerror_prop_handlers, "location", dom_domerror_location_read, NULL TSRMLS_CC); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_domerror_prop_handlers, sizeof(dom_domerror_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMErrorHandler", NULL, php_dom_domerrorhandler_class_functions, dom_domerrorhandler_class_entry); - REGISTER_DOM_CLASS(ce, "DOMLocator", NULL, php_dom_domlocator_class_functions, dom_domlocator_class_entry); - - zend_hash_init(&dom_domlocator_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_domlocator_prop_handlers, "lineNumber", dom_domlocator_line_number_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_domlocator_prop_handlers, "columnNumber", dom_domlocator_column_number_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_domlocator_prop_handlers, "offset", dom_domlocator_offset_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_domlocator_prop_handlers, "relatedNode", dom_domlocator_related_node_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_domlocator_prop_handlers, "uri", dom_domlocator_uri_read, NULL TSRMLS_CC); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_domlocator_prop_handlers, sizeof(dom_domlocator_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMConfiguration", NULL, php_dom_domconfiguration_class_functions, dom_domconfiguration_class_entry); - REGISTER_DOM_CLASS(ce, "DOMCdataSection", dom_text_class_entry, php_dom_cdatasection_class_functions, dom_cdatasection_class_entry); - zend_hash_init(&dom_cdata_prop_handlers, 0, NULL, NULL, 1); - zend_hash_copy(&dom_cdata_prop_handlers, &dom_text_prop_handlers, NULL, NULL, sizeof(dom_prop_handler)); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_cdata_prop_handlers, sizeof(dom_documenttype_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMDocumentType", dom_node_class_entry, php_dom_documenttype_class_functions, dom_documenttype_class_entry); - - zend_hash_init(&dom_documenttype_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_documenttype_prop_handlers, "name", dom_documenttype_name_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_documenttype_prop_handlers, "entities", dom_documenttype_entities_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_documenttype_prop_handlers, "notations", dom_documenttype_notations_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_documenttype_prop_handlers, "publicId", dom_documenttype_public_id_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_documenttype_prop_handlers, "systemId", dom_documenttype_system_id_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_documenttype_prop_handlers, "internalSubset", dom_documenttype_internal_subset_read, NULL TSRMLS_CC); - zend_hash_merge(&dom_documenttype_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_documenttype_prop_handlers, sizeof(dom_documenttype_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMNotation", NULL, php_dom_notation_class_functions, dom_notation_class_entry); - - zend_hash_init(&dom_notation_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_notation_prop_handlers, "publicId", dom_notation_public_id_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_notation_prop_handlers, "systemId", dom_notation_system_id_read, NULL TSRMLS_CC); - /* Notation nodes are special */ - dom_register_prop_handler(&dom_notation_prop_handlers, "nodeName", dom_node_node_name_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_notation_prop_handlers, "nodeValue", dom_node_node_value_read, dom_node_node_value_write TSRMLS_CC); - dom_register_prop_handler(&dom_notation_prop_handlers, "attributes", dom_node_attributes_read, NULL TSRMLS_CC); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_notation_prop_handlers, sizeof(dom_notation_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMEntity", dom_node_class_entry, php_dom_entity_class_functions, dom_entity_class_entry); - - zend_hash_init(&dom_entity_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_entity_prop_handlers, "publicId", dom_entity_public_id_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_entity_prop_handlers, "systemId", dom_entity_system_id_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_entity_prop_handlers, "notationName", dom_entity_notation_name_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_entity_prop_handlers, "actualEncoding", dom_entity_actual_encoding_read, dom_entity_actual_encoding_write TSRMLS_CC); - dom_register_prop_handler(&dom_entity_prop_handlers, "encoding", dom_entity_encoding_read, dom_entity_encoding_write TSRMLS_CC); - dom_register_prop_handler(&dom_entity_prop_handlers, "version", dom_entity_version_read, dom_entity_version_write TSRMLS_CC); - zend_hash_merge(&dom_entity_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0); - - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_entity_prop_handlers, sizeof(dom_entity_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMEntityReference", dom_node_class_entry, php_dom_entityreference_class_functions, dom_entityreference_class_entry); - zend_hash_init(&dom_entity_reference_prop_handlers, 0, NULL, NULL, 1); - zend_hash_copy(&dom_entity_reference_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler)); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_entity_reference_prop_handlers, sizeof(dom_entity_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMProcessingInstruction", dom_node_class_entry, php_dom_processinginstruction_class_functions, dom_processinginstruction_class_entry); - - zend_hash_init(&dom_processinginstruction_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_processinginstruction_prop_handlers, "target", dom_processinginstruction_target_read, NULL TSRMLS_CC); - dom_register_prop_handler(&dom_processinginstruction_prop_handlers, "data", dom_processinginstruction_data_read, dom_processinginstruction_data_write TSRMLS_CC); - zend_hash_merge(&dom_processinginstruction_prop_handlers, &dom_node_prop_handlers, NULL, NULL, sizeof(dom_prop_handler), 0); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_processinginstruction_prop_handlers, sizeof(dom_processinginstruction_prop_handlers), NULL); - - REGISTER_DOM_CLASS(ce, "DOMStringExtend", NULL, php_dom_string_extend_class_functions, dom_string_extend_class_entry); - -#if defined(LIBXML_XPATH_ENABLED) - INIT_CLASS_ENTRY(ce, "DOMXPath", php_dom_xpath_class_functions); - ce.create_object = dom_xpath_objects_new; - dom_xpath_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC); - - zend_hash_init(&dom_xpath_prop_handlers, 0, NULL, NULL, 1); - dom_register_prop_handler(&dom_xpath_prop_handlers, "document", dom_xpath_document_read, NULL TSRMLS_CC); - zend_u_hash_add(&classes, ZEND_STR_TYPE, ce.name, ce.name_length + 1, &dom_xpath_prop_handlers, sizeof(dom_xpath_prop_handlers), NULL); -#endif - - REGISTER_LONG_CONSTANT("XML_ELEMENT_NODE", XML_ELEMENT_NODE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NODE", XML_ATTRIBUTE_NODE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_TEXT_NODE", XML_TEXT_NODE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_CDATA_SECTION_NODE", XML_CDATA_SECTION_NODE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_ENTITY_REF_NODE", XML_ENTITY_REF_NODE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_ENTITY_NODE", XML_ENTITY_NODE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_PI_NODE", XML_PI_NODE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_COMMENT_NODE", XML_COMMENT_NODE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_DOCUMENT_NODE", XML_DOCUMENT_NODE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_DOCUMENT_TYPE_NODE", XML_DOCUMENT_TYPE_NODE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_DOCUMENT_FRAG_NODE", XML_DOCUMENT_FRAG_NODE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_NOTATION_NODE", XML_NOTATION_NODE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_HTML_DOCUMENT_NODE", XML_HTML_DOCUMENT_NODE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_DTD_NODE", XML_DTD_NODE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_ELEMENT_DECL_NODE", XML_ELEMENT_DECL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_DECL_NODE", XML_ATTRIBUTE_DECL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_ENTITY_DECL_NODE", XML_ENTITY_DECL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_NAMESPACE_DECL_NODE", XML_NAMESPACE_DECL, CONST_CS | CONST_PERSISTENT); -#ifdef XML_GLOBAL_NAMESPACE - REGISTER_LONG_CONSTANT("XML_GLOBAL_NAMESPACE", XML_GLOBAL_NAMESPACE, CONST_CS | CONST_PERSISTENT); -#endif - REGISTER_LONG_CONSTANT("XML_LOCAL_NAMESPACE", XML_LOCAL_NAMESPACE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_CDATA", XML_ATTRIBUTE_CDATA, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_ID", XML_ATTRIBUTE_ID, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_IDREF", XML_ATTRIBUTE_IDREF, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_IDREFS", XML_ATTRIBUTE_IDREFS, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_ENTITY", XML_ATTRIBUTE_ENTITIES, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NMTOKEN", XML_ATTRIBUTE_NMTOKEN, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NMTOKENS", XML_ATTRIBUTE_NMTOKENS, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_ENUMERATION", XML_ATTRIBUTE_ENUMERATION, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("XML_ATTRIBUTE_NOTATION", XML_ATTRIBUTE_NOTATION, CONST_CS | CONST_PERSISTENT); - - /* DOMException Codes */ - REGISTER_LONG_CONSTANT("DOM_PHP_ERR", PHP_ERR, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DOM_INDEX_SIZE_ERR", INDEX_SIZE_ERR, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DOMSTRING_SIZE_ERR", DOMSTRING_SIZE_ERR, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DOM_HIERARCHY_REQUEST_ERR", HIERARCHY_REQUEST_ERR, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DOM_WRONG_DOCUMENT_ERR", WRONG_DOCUMENT_ERR, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DOM_INVALID_CHARACTER_ERR", INVALID_CHARACTER_ERR, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DOM_NO_DATA_ALLOWED_ERR", NO_DATA_ALLOWED_ERR, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DOM_NO_MODIFICATION_ALLOWED_ERR", NO_MODIFICATION_ALLOWED_ERR, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DOM_NOT_FOUND_ERR", NOT_FOUND_ERR, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DOM_NOT_SUPPORTED_ERR", NOT_SUPPORTED_ERR, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DOM_INUSE_ATTRIBUTE_ERR", INUSE_ATTRIBUTE_ERR, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DOM_INVALID_STATE_ERR", INVALID_STATE_ERR, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DOM_SYNTAX_ERR", SYNTAX_ERR, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DOM_INVALID_MODIFICATION_ERR", INVALID_MODIFICATION_ERR, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DOM_NAMESPACE_ERR", NAMESPACE_ERR, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DOM_INVALID_ACCESS_ERR", INVALID_ACCESS_ERR, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DOM_VALIDATION_ERR", VALIDATION_ERR, CONST_CS | CONST_PERSISTENT); - - php_libxml_register_export(dom_node_class_entry, php_dom_export_node); - - return SUCCESS; -} -/* }}} */ - -/* {{{ */ -PHP_MINFO_FUNCTION(dom) -{ - php_info_print_table_start(); - php_info_print_table_row(2, "DOM/XML", "enabled"); - php_info_print_table_row(2, "DOM/XML API Version", DOM_API_VERSION); - php_info_print_table_row(2, "libxml Version", LIBXML_DOTTED_VERSION); -#if defined(LIBXML_HTML_ENABLED) - php_info_print_table_row(2, "HTML Support", "enabled"); -#endif -#if defined(LIBXML_XPATH_ENABLED) - php_info_print_table_row(2, "XPath Support", "enabled"); -#endif -#if defined(LIBXML_XPTR_ENABLED) - php_info_print_table_row(2, "XPointer Support", "enabled"); -#endif -#ifdef LIBXML_SCHEMAS_ENABLED - php_info_print_table_row(2, "Schema Support", "enabled"); - php_info_print_table_row(2, "RelaxNG Support", "enabled"); -#endif - php_info_print_table_end(); -} -/* }}} */ - -PHP_MSHUTDOWN_FUNCTION(dom) -{ - zend_hash_destroy(&classes); - -/* If you want do find memleaks in this module, compile libxml2 with --with-mem-debug and - uncomment the following line, this will tell you the amount of not freed memory - and the total used memory into apaches error_log */ -/* xmlMemoryDump();*/ - - return SUCCESS; -} - -/* {{{ node_list_unlink */ -void node_list_unlink(xmlNodePtr node TSRMLS_DC) -{ - dom_object *wrapper; - - while (node != NULL) { - - wrapper = php_dom_object_get_data(node); - - if (wrapper != NULL ) { - xmlUnlinkNode(node); - } else { - if (node->type == XML_ENTITY_REF_NODE) - break; - - node_list_unlink(node->children TSRMLS_CC); - - switch (node->type) { - case XML_ATTRIBUTE_DECL: - case XML_DTD_NODE: - case XML_DOCUMENT_TYPE_NODE: - case XML_ENTITY_DECL: - case XML_ATTRIBUTE_NODE: - break; - default: - node_list_unlink((xmlNodePtr) node->properties TSRMLS_CC); - } - - } - - node = node->next; - } -} -/* }}} end node_list_unlink */ - -#if defined(LIBXML_XPATH_ENABLED) -/* {{{ dom_xpath_objects_free_storage */ -void dom_xpath_objects_free_storage(void *object TSRMLS_DC) -{ - dom_xpath_object *intern = (dom_xpath_object *)object; - - zend_object_std_dtor(&intern->std TSRMLS_CC); - - if (intern->ptr != NULL) { - xmlXPathFreeContext((xmlXPathContextPtr) intern->ptr); - php_libxml_decrement_doc_ref((php_libxml_node_object *) intern TSRMLS_CC); - intern->ptr = NULL; - } - - zend_hash_destroy(intern->registered_phpfunctions); - FREE_HASHTABLE(intern->registered_phpfunctions); - - if (intern->node_list) { - zend_hash_destroy(intern->node_list); - FREE_HASHTABLE(intern->node_list); - } - - efree(object); -} -/* }}} */ -#endif - -/* {{{ dom_objects_free_storage */ -void dom_objects_free_storage(void *object TSRMLS_DC) -{ - dom_object *intern = (dom_object *)object; - int retcount; - - zend_object_std_dtor(&intern->std TSRMLS_CC); - - if (intern->ptr != NULL && ((php_libxml_node_ptr *)intern->ptr)->node != NULL) { - if (((xmlNodePtr) ((php_libxml_node_ptr *)intern->ptr)->node)->type != XML_DOCUMENT_NODE && ((xmlNodePtr) ((php_libxml_node_ptr *)intern->ptr)->node)->type != XML_HTML_DOCUMENT_NODE) { - php_libxml_node_decrement_resource((php_libxml_node_object *) intern TSRMLS_CC); - } else { - php_libxml_decrement_node_ptr((php_libxml_node_object *) intern TSRMLS_CC); - retcount = php_libxml_decrement_doc_ref((php_libxml_node_object *)intern TSRMLS_CC); - } - intern->ptr = NULL; - } - - efree(object); -} -/* }}} */ - -void dom_namednode_iter(dom_object *basenode, int ntype, dom_object *intern, xmlHashTablePtr ht, xmlChar *local, xmlChar *ns TSRMLS_DC) -{ - dom_nnodemap_object *mapptr; - zval *baseobj = NULL; - - mapptr = (dom_nnodemap_object *)intern->ptr; - if (basenode) { - MAKE_STD_ZVAL(baseobj); - baseobj->type = IS_OBJECT; - baseobj->is_ref = 1; - baseobj->value.obj.handle = basenode->handle; - baseobj->value.obj.handlers = dom_get_obj_handlers(TSRMLS_C); - zval_copy_ctor(baseobj); - } - mapptr->baseobjptr = baseobj; - mapptr->baseobj = basenode; - mapptr->nodetype = ntype; - mapptr->ht = ht; - mapptr->local = local; - mapptr->ns = ns; - -} - -static dom_object* dom_objects_set_class(zend_class_entry *class_type, zend_bool hash_copy TSRMLS_DC) -{ - zend_class_entry *base_class; - zval *tmp; - dom_object *intern; - - if (instanceof_function(class_type, dom_xpath_class_entry TSRMLS_CC)) { - intern = emalloc(sizeof(dom_xpath_object)); - memset(intern, 0, sizeof(dom_xpath_object)); - } else { - intern = emalloc(sizeof(dom_object)); - } - intern->ptr = NULL; - intern->prop_handler = NULL; - intern->document = NULL; - - base_class = class_type; - while(base_class->type != ZEND_INTERNAL_CLASS && base_class->parent != NULL) { - base_class = base_class->parent; - } - - zend_u_hash_find(&classes, UG(unicode)?IS_UNICODE:IS_STRING, base_class->name, base_class->name_length + 1, (void **) &intern->prop_handler); - - zend_object_std_init(&intern->std, class_type TSRMLS_CC); - if (hash_copy) { - zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *)); - } - - return intern; -} - -/* {{{ dom_objects_clone */ -void dom_objects_clone(void *object, void **object_clone TSRMLS_DC) -{ - dom_object *intern = (dom_object *) object; - dom_object *clone; - xmlNodePtr node; - xmlNodePtr cloned_node; - - clone = dom_objects_set_class(intern->std.ce, 0 TSRMLS_CC); - - if (instanceof_function(intern->std.ce, dom_node_class_entry TSRMLS_CC)) { - node = (xmlNodePtr)dom_object_get_node((dom_object *) object); - if (node != NULL) { - cloned_node = xmlDocCopyNode(node, node->doc, 1); - if (cloned_node != NULL) { - /* If we cloned a document then we must create new doc proxy */ - if (cloned_node->doc == node->doc) { - clone->document = intern->document; - } - php_libxml_increment_doc_ref((php_libxml_node_object *)clone, cloned_node->doc TSRMLS_CC); - php_libxml_increment_node_ptr((php_libxml_node_object *)clone, cloned_node, (void *)clone TSRMLS_CC); - } - - } - } - - *object_clone = (void *) clone; -} -/* }}} */ - -/* {{{ dom_objects_new */ -zend_object_value dom_objects_new(zend_class_entry *class_type TSRMLS_DC) -{ - zend_object_value retval; - dom_object *intern; - - intern = dom_objects_set_class(class_type, 1 TSRMLS_CC); - - retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t)dom_objects_free_storage, dom_objects_clone TSRMLS_CC); - intern->handle = retval.handle; - retval.handlers = dom_get_obj_handlers(TSRMLS_C); - - return retval; -} -/* }}} */ - -#if defined(LIBXML_XPATH_ENABLED) -/* {{{ zend_object_value dom_xpath_objects_new(zend_class_entry *class_type TSRMLS_DC) */ -zend_object_value dom_xpath_objects_new(zend_class_entry *class_type TSRMLS_DC) -{ - zend_object_value retval; - dom_xpath_object *intern; - - intern = (dom_xpath_object *)dom_objects_set_class(class_type, 1 TSRMLS_CC); - intern->registerPhpFunctions = 0; - intern->registered_phpfunctions = NULL; - intern->node_list = NULL; - - ALLOC_HASHTABLE(intern->registered_phpfunctions); - zend_u_hash_init(intern->registered_phpfunctions, 0, NULL, ZVAL_PTR_DTOR, 0, UG(unicode)); - - retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t)dom_xpath_objects_free_storage, dom_objects_clone TSRMLS_CC); - intern->handle = retval.handle; - retval.handlers = dom_get_obj_handlers(TSRMLS_C); - - return retval; -} -/* }}} */ -#endif - -static void dom_nnodemap_object_dtor(void *object, zend_object_handle handle TSRMLS_DC) -{ - zval *baseobj; - dom_object *intern; - dom_nnodemap_object *objmap; - - intern = (dom_object *)object; - objmap = (dom_nnodemap_object *)intern->ptr; - - if (objmap) { - if (objmap->local) { - xmlFree(objmap->local); - } - if (objmap->ns) { - xmlFree(objmap->ns); - } - if (objmap->baseobjptr) { - baseobj = objmap->baseobjptr; - zval_ptr_dtor((zval **)&baseobj); - } - efree(objmap); - intern->ptr = NULL; - } - - -} - -void dom_nnodemap_objects_free_storage(void *object TSRMLS_DC) -{ - dom_object *intern = (dom_object *)object; - - php_libxml_decrement_doc_ref((php_libxml_node_object *)intern TSRMLS_CC); - - zend_object_std_dtor(&intern->std TSRMLS_CC); - - efree(object); -} - -zend_object_value dom_nnodemap_objects_new(zend_class_entry *class_type TSRMLS_DC) -{ - zend_object_value retval; - dom_object *intern; - dom_nnodemap_object *objmap; - - intern = dom_objects_set_class(class_type, 1 TSRMLS_CC); - intern->ptr = emalloc(sizeof(dom_nnodemap_object)); - objmap = (dom_nnodemap_object *)intern->ptr; - objmap->baseobj = NULL; - objmap->baseobjptr = NULL; - objmap->nodetype = 0; - objmap->ht = NULL; - objmap->local = NULL; - objmap->ns = NULL; - - retval.handle = zend_objects_store_put(intern, dom_nnodemap_object_dtor, (zend_objects_free_object_storage_t)dom_nnodemap_objects_free_storage, dom_objects_clone TSRMLS_CC); - intern->handle = retval.handle; - retval.handlers = dom_get_obj_handlers(TSRMLS_C); - - return retval; -} - -void php_dom_create_interator(zval *return_value, int ce_type TSRMLS_DC) -{ - zend_class_entry *ce; - - if (ce_type == DOM_NAMEDNODEMAP) { - ce = dom_namednodemap_class_entry; - } else { - ce = dom_nodelist_class_entry; - } - - object_init_ex(return_value, ce); -} - -/* {{{ php_dom_create_object */ -PHP_DOM_EXPORT zval *php_dom_create_object(xmlNodePtr obj, int *found, zval *wrapper_in, zval *return_value, dom_object *domobj TSRMLS_DC) -{ - zval *wrapper; - zend_class_entry *ce; - dom_object *intern; - - *found = 0; - - if (!obj) { - ALLOC_ZVAL(wrapper); - ZVAL_NULL(wrapper); - return wrapper; - } - - if ((intern = (dom_object *) php_dom_object_get_data((void *) obj))) { - return_value->type = IS_OBJECT; - return_value->is_ref = 1; - return_value->value.obj.handle = intern->handle; - return_value->value.obj.handlers = dom_get_obj_handlers(TSRMLS_C); - zval_copy_ctor(return_value); - *found = 1; - return return_value; - } - - wrapper = return_value; - - switch (obj->type) { - case XML_DOCUMENT_NODE: - case XML_HTML_DOCUMENT_NODE: - { - ce = dom_document_class_entry; - break; - } - case XML_DTD_NODE: - case XML_DOCUMENT_TYPE_NODE: - { - ce = dom_documenttype_class_entry; - break; - } - case XML_ELEMENT_NODE: - { - ce = dom_element_class_entry; - break; - } - case XML_ATTRIBUTE_NODE: - { - ce = dom_attr_class_entry; - break; - } - case XML_TEXT_NODE: - { - ce = dom_text_class_entry; - break; - } - case XML_COMMENT_NODE: - { - ce = dom_comment_class_entry; - break; - } - case XML_PI_NODE: - { - ce = dom_processinginstruction_class_entry; - break; - } - case XML_ENTITY_REF_NODE: - { - ce = dom_entityreference_class_entry; - break; - } - case XML_ENTITY_DECL: - case XML_ELEMENT_DECL: - { - ce = dom_entity_class_entry; - break; - } - case XML_CDATA_SECTION_NODE: - { - ce = dom_cdatasection_class_entry; - break; - } - case XML_DOCUMENT_FRAG_NODE: - { - ce = dom_documentfragment_class_entry; - break; - } - case XML_NOTATION_NODE: - { - ce = dom_notation_class_entry; - break; - } - case XML_NAMESPACE_DECL: - { - ce = dom_namespace_node_class_entry; - break; - } - default: - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported node type: %d", Z_TYPE_P(obj)); - ZVAL_NULL(wrapper); - return wrapper; - } - - if (domobj && domobj->document) { - ce = dom_get_doc_classmap(domobj->document, ce TSRMLS_CC); - } - object_init_ex(wrapper, ce); - - intern = (dom_object *)zend_objects_get_address(wrapper TSRMLS_CC); - if (obj->doc != NULL) { - if (domobj != NULL) { - intern->document = domobj->document; - } - php_libxml_increment_doc_ref((php_libxml_node_object *)intern, obj->doc TSRMLS_CC); - } - - php_libxml_increment_node_ptr((php_libxml_node_object *)intern, obj, (void *)intern TSRMLS_CC); - return (wrapper); -} -/* }}} end php_domobject_new */ - - -void php_dom_create_implementation(zval **retval TSRMLS_DC) { - object_init_ex(*retval, dom_domimplementation_class_entry); -} - -/* {{{ int dom_hierarchy(xmlNodePtr parent, xmlNodePtr child) */ -int dom_hierarchy(xmlNodePtr parent, xmlNodePtr child) -{ - xmlNodePtr nodep; - - if (parent == NULL || child == NULL || child->doc != parent->doc) { - return SUCCESS; - } - - nodep = parent; - - while (nodep) { - if (nodep == child) { - return FAILURE; - } - nodep = nodep->parent; - } - - return SUCCESS; -} -/* }}} end dom_hierarchy */ - -/* {{{ dom_has_feature(char *feature, char *version) */ -int dom_has_feature(char *feature, char *version) -{ - int retval = 0; - - if (!(strcmp (version, "1.0") && strcmp (version,"2.0") && strcmp(version, ""))) { - if ((!strcasecmp(feature, "Core") && !strcmp (version, "1.0")) || !strcasecmp(feature, "XML")) - retval = 1; - } - - return retval; -} -/* }}} end dom_has_feature */ - -xmlNode *dom_get_elements_by_tag_name_ns_raw(xmlNodePtr nodep, char *ns, char *local, int *cur, int index) -{ - xmlNodePtr ret = NULL; - - while (nodep != NULL && (*cur <= index || index == -1)) { - if (nodep->type == XML_ELEMENT_NODE) { - if (xmlStrEqual(nodep->name, local) || xmlStrEqual("*", local)) { - if (ns == NULL || (nodep->ns != NULL && (xmlStrEqual(nodep->ns->href, ns) || xmlStrEqual("*", ns)))) { - if (*cur == index) { - ret = nodep; - break; - } - (*cur)++; - } - } - ret = dom_get_elements_by_tag_name_ns_raw(nodep->children, ns, local, cur, index); - if (ret != NULL) { - break; - } - } - nodep = nodep->next; - } - return ret; -} -/* }}} end dom_element_get_elements_by_tag_name_ns_raw */ - - -/* {{{ void dom_normalize (xmlNodePtr nodep TSRMLS_DC) */ -void dom_normalize (xmlNodePtr nodep TSRMLS_DC) -{ - xmlNodePtr child, nextp, newnextp; - xmlAttrPtr attr; - xmlChar *strContent; - - child = nodep->children; - while(child != NULL) { - switch (child->type) { - case XML_TEXT_NODE: - nextp = child->next; - while (nextp != NULL) { - if (nextp->type == XML_TEXT_NODE) { - newnextp = nextp->next; - strContent = xmlNodeGetContent(nextp); - xmlNodeAddContent(child, strContent); - xmlFree(strContent); - xmlUnlinkNode(nextp); - php_libxml_node_free_resource(nextp TSRMLS_CC); - nextp = newnextp; - } else { - break; - } - } - break; - case XML_ELEMENT_NODE: - dom_normalize (child TSRMLS_CC); - attr = child->properties; - while (attr != NULL) { - dom_normalize((xmlNodePtr) attr TSRMLS_CC); - attr = attr->next; - } - break; - case XML_ATTRIBUTE_NODE: - dom_normalize (child TSRMLS_CC); - break; - default: - break; - } - child = child->next; - } -} -/* }}} end dom_normalize */ - - -/* {{{ void dom_set_old_ns(xmlDoc *doc, xmlNs *ns) */ -void dom_set_old_ns(xmlDoc *doc, xmlNs *ns) { - xmlNs *cur; - - if (doc == NULL) - return; - - if (doc->oldNs == NULL) { - doc->oldNs = (xmlNsPtr) xmlMalloc(sizeof(xmlNs)); - if (doc->oldNs == NULL) { - return; - } - memset(doc->oldNs, 0, sizeof(xmlNs)); - doc->oldNs->type = XML_LOCAL_NAMESPACE; - doc->oldNs->href = xmlStrdup(XML_XML_NAMESPACE); - doc->oldNs->prefix = xmlStrdup((const xmlChar *)"xml"); - } - - cur = doc->oldNs; - while (cur->next != NULL) { - cur = cur->next; - } - cur->next = ns; -} -/* }}} end dom_set_old_ns */ - -/* -http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#ID-DocCrElNS - -NAMESPACE_ERR: Raised if - -1. the qualifiedName is a malformed qualified name -2. the qualifiedName has a prefix and the namespaceURI is null -*/ - -/* {{{ int dom_check_qname(char *qname, char **localname, char **prefix, int uri_len, int name_len) */ -int dom_check_qname(char *qname, char **localname, char **prefix, int uri_len, int name_len) { - if (name_len == 0) { - return NAMESPACE_ERR; - } - - *localname = xmlSplitQName2(qname, (xmlChar **) prefix); - if (*localname == NULL) { - *localname = xmlStrdup(qname); - if (*prefix == NULL && uri_len == 0) { - return 0; - } - } - - /* 1 */ - if (xmlValidateQName((xmlChar *) qname, 0) != 0) { - return NAMESPACE_ERR; - } - - /* 2 */ - if (*prefix != NULL && uri_len == 0) { - return NAMESPACE_ERR; - } - - return 0; -} - - -/* -http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#ID-DocCrElNS - -NAMESPACE_ERR: Raised if - -3. the qualifiedName has a prefix that is "xml" and the namespaceURI is different from "http://www.w3.org/XML/1998/namespace" [XML Namespaces] -4. the qualifiedName or its prefix is "xmlns" and the namespaceURI is different from "http://www.w3.org/2000/xmlns/" -5. the namespaceURI is "http://www.w3.org/2000/xmlns/" and neither the qualifiedName nor its prefix is "xmlns". -*/ - -/* {{{ xmlNsPtr dom_get_ns(xmlNodePtr nodep, char *uri, int *errorcode, char *prefix) */ -xmlNsPtr dom_get_ns(xmlNodePtr nodep, char *uri, int *errorcode, char *prefix) { - xmlNsPtr nsptr = NULL; - - *errorcode = 0; - - if (! ((prefix && !strcmp (prefix, "xml" ) && strcmp(uri, XML_XML_NAMESPACE)) || - (prefix && !strcmp (prefix, "xmlns") && strcmp(uri, DOM_XMLNS_NAMESPACE)) || - (prefix && !strcmp(uri, DOM_XMLNS_NAMESPACE) && strcmp (prefix, "xmlns")))) { - nsptr = xmlNewNs(nodep, uri, prefix); - } - - if (nsptr == NULL) { - *errorcode = NAMESPACE_ERR; - } - - return nsptr; - -} -/* }}} end dom_get_ns */ - -/* {{{ xmlNsPtr dom_get_nsdecl(xmlNode *node, xmlChar *localName) */ -xmlNsPtr dom_get_nsdecl(xmlNode *node, xmlChar *localName) { - xmlNsPtr cur; - xmlNs *ret = NULL; - if (node == NULL) - return NULL; - - if (localName == NULL || xmlStrEqual(localName, "")) { - cur = node->nsDef; - while (cur != NULL) { - if (cur->prefix == NULL && cur->href != NULL) { - ret = cur; - break; - } - cur = cur->next; - } - } else { - cur = node->nsDef; - while (cur != NULL) { - if (cur->prefix != NULL && xmlStrEqual(localName, cur->prefix)) { - ret = cur; - break; - } - cur = cur->next; - } - } - return ret; -} -/* }}} end dom_get_nsdecl */ - -#endif /* HAVE_DOM */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: noet sw=4 ts=4 fdm=marker - * vim<600: noet sw=4 ts=4 - */ diff --git a/ext/dom/php_dom.h b/ext/dom/php_dom.h deleted file mode 100644 index acab4e1e19c5c..0000000000000 --- a/ext/dom/php_dom.h +++ /dev/null @@ -1,157 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - | Marcus Borger | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef PHP_DOM_H -#define PHP_DOM_H - -extern zend_module_entry dom_module_entry; -#define phpext_dom_ptr &dom_module_entry - -#ifdef ZTS -#include "TSRM.h" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#if defined(LIBXML_HTML_ENABLED) -#include -#include -#endif -#if defined(LIBXML_XPATH_ENABLED) -#include -#include -#endif -#if defined(LIBXML_XPTR_ENABLED) -#include -#endif -#ifdef PHP_WIN32 -#ifndef DOM_EXPORTS -#define DOM_EXPORTS -#endif -#endif - -#include "xml_common.h" -#include "ext/libxml/php_libxml.h" -#include "zend_exceptions.h" -#include "dom_ce.h" -/* DOM API_VERSION, please bump it up, if you change anything in the API - therefore it's easier for the script-programmers to check, what's working how - Can be checked with phpversion("dom"); -*/ -#define DOM_API_VERSION "20031129" -/* Define a custom type for iterating using an unused nodetype */ -#define DOM_NODESET XML_XINCLUDE_START - -typedef struct _dom_xpath_object { - zend_object std; - void *ptr; - php_libxml_ref_obj *document; - HashTable *prop_handler; - zend_object_handle handle; - int registerPhpFunctions; - HashTable *registered_phpfunctions; - HashTable *node_list; -} dom_xpath_object; - -typedef struct _dom_nnodemap_object { - dom_object *baseobj; - int nodetype; - xmlHashTable *ht; - xmlChar *local; - xmlChar *ns; - zval *baseobjptr; -} dom_nnodemap_object; - -typedef struct { - zend_object_iterator intern; - zval *curobj; -} php_dom_iterator; - -#include "dom_fe.h" - -dom_object *dom_object_get_data(xmlNodePtr obj); -dom_doc_propsptr dom_get_doc_props(php_libxml_ref_obj *document); -zend_object_value dom_objects_new(zend_class_entry *class_type TSRMLS_DC); -zend_object_value dom_nnodemap_objects_new(zend_class_entry *class_type TSRMLS_DC); -#if defined(LIBXML_XPATH_ENABLED) -zend_object_value dom_xpath_objects_new(zend_class_entry *class_type TSRMLS_DC); -#endif -int dom_get_strict_error(php_libxml_ref_obj *document); -void php_dom_throw_error(int error_code, int strict_error TSRMLS_DC); -void php_dom_throw_error_with_message(int error_code, char *error_message, int strict_error TSRMLS_DC); -void node_list_unlink(xmlNodePtr node TSRMLS_DC); -int dom_check_qname(char *qname, char **localname, char **prefix, int uri_len, int name_len); -xmlNsPtr dom_get_ns(xmlNodePtr node, char *uri, int *errorcode, char *prefix); -void dom_set_old_ns(xmlDoc *doc, xmlNs *ns); -xmlNsPtr dom_get_nsdecl(xmlNode *node, xmlChar *localName); -void dom_normalize (xmlNodePtr nodep TSRMLS_DC); -xmlNode *dom_get_elements_by_tag_name_ns_raw(xmlNodePtr nodep, char *ns, char *local, int *cur, int index); -void php_dom_create_implementation(zval **retval TSRMLS_DC); -int dom_hierarchy(xmlNodePtr parent, xmlNodePtr child); -int dom_has_feature(char *feature, char *version); -int dom_node_is_read_only(xmlNodePtr node); -int dom_node_children_valid(xmlNodePtr node); -void php_dom_create_interator(zval *return_value, int ce_type TSRMLS_DC); -void dom_namednode_iter(dom_object *basenode, int ntype, dom_object *intern, xmlHashTablePtr ht, xmlChar *local, xmlChar *ns TSRMLS_DC); -xmlNodePtr create_notation(const xmlChar *name, const xmlChar *ExternalID, const xmlChar *SystemID); -xmlNode *php_dom_libxml_hash_iter(xmlHashTable *ht, int index); -xmlNode *php_dom_libxml_notation_iter(xmlHashTable *ht, int index); -zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC); -int dom_set_doc_classmap(php_libxml_ref_obj *document, zend_class_entry *basece, zend_class_entry *ce TSRMLS_DC); - -#define REGISTER_DOM_CLASS(ce, name, parent_ce, funcs, entry) \ -INIT_CLASS_ENTRY(ce, name, funcs); \ -ce.create_object = dom_objects_new; \ -entry = zend_register_internal_class_ex(&ce, parent_ce, NULL TSRMLS_CC); - -#define DOM_GET_OBJ(__ptr, __id, __prtype, __intern) { \ - __intern = (dom_object *)zend_object_store_get_object(__id TSRMLS_CC); \ - if (__intern->ptr == NULL || !(__ptr = (__prtype)((php_libxml_node_ptr *)__intern->ptr)->node)) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %v", __intern->std.ce->name);\ - RETURN_NULL();\ - } \ -} - -#define DOM_NO_ARGS() \ - if (ZEND_NUM_ARGS() != 0) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Expects exactly 0 parameters, %d given", ZEND_NUM_ARGS()); \ - return; \ - } - -#define DOM_NOT_IMPLEMENTED() \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not yet implemented"); \ - return; - -#define DOM_NODELIST 0 -#define DOM_NAMEDNODEMAP 1 - -PHP_MINIT_FUNCTION(dom); -PHP_MSHUTDOWN_FUNCTION(dom); -PHP_MINFO_FUNCTION(dom); - -#endif /* PHP_DOM_H */ diff --git a/ext/dom/processinginstruction.c b/ext/dom/processinginstruction.c deleted file mode 100644 index 19b4213b31fb5..0000000000000 --- a/ext/dom/processinginstruction.c +++ /dev/null @@ -1,172 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class DOMProcessingInstruction extends DOMNode -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-1004215813 -* Since: -*/ - -zend_function_entry php_dom_processinginstruction_class_functions[] = { - PHP_ME(domprocessinginstruction, __construct, NULL, ZEND_ACC_PUBLIC) - {NULL, NULL, NULL} -}; - -/* {{{ proto void DOMProcessingInstruction::__construct(string name, [string value]) U */ -PHP_METHOD(domprocessinginstruction, __construct) -{ - - zval *id; - xmlNodePtr nodep = NULL, oldnode = NULL; - dom_object *intern; - char *name, *value = NULL; - int name_len, value_len, name_valid; - - php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC); - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&|s&", &id, dom_processinginstruction_class_entry, &name, &name_len, UG(utf8_conv), &value, &value_len, UG(utf8_conv)) == FAILURE) { - php_std_error_handling(); - return; - } - php_std_error_handling(); - - name_valid = xmlValidateName((xmlChar *) name, 0); - if (name_valid != 0) { - php_dom_throw_error(INVALID_CHARACTER_ERR, 1 TSRMLS_CC); - RETURN_FALSE; - } - - nodep = xmlNewPI((xmlChar *) name, (xmlChar *) value); - - if (!nodep) { - php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC); - RETURN_FALSE; - } - - intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); - if (intern != NULL) { - oldnode = (xmlNodePtr)intern->ptr; - if (oldnode != NULL) { - php_libxml_node_free_resource(oldnode TSRMLS_CC); - } - php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC); - } -} -/* }}} end DOMProcessingInstruction::__construct */ - -/* {{{ target string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-1478689192 -Since: -*/ -int dom_processinginstruction_target_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNodePtr nodep; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - ZVAL_XML_STRING(*retval, (char *) (nodep->name), ZSTR_DUPLICATE); - - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ data string -readonly=no -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-837822393 -Since: -*/ -int dom_processinginstruction_data_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNodePtr nodep; - xmlChar *content; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - - - if ((content = xmlNodeGetContent(nodep)) != NULL) { - ZVAL_XML_STRING(*retval, content, ZSTR_DUPLICATE); - xmlFree(content); - } else { - ZVAL_EMPTY_TEXT(*retval); - } - - return SUCCESS; -} - -int dom_processinginstruction_data_write(dom_object *obj, zval *newval TSRMLS_DC) -{ - zval value_copy; - xmlNode *nodep; - - nodep = dom_object_get_node(obj); - - if (nodep == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - if (newval->type != IS_STRING) { - if(newval->refcount > 1) { - value_copy = *newval; - zval_copy_ctor(&value_copy); - newval = &value_copy; - } - convert_to_string_with_converter(newval, UG(utf8_conv)); - } - - xmlNodeSetContentLen(nodep, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1); - - if (newval == &value_copy) { - zval_dtor(newval); - } - - return SUCCESS; -} - -/* }}} */ - -#endif diff --git a/ext/dom/string_extend.c b/ext/dom/string_extend.c deleted file mode 100644 index fd758764f0c07..0000000000000 --- a/ext/dom/string_extend.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class domstringextend -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend -* Since: -*/ - -zend_function_entry php_dom_string_extend_class_functions[] = { - PHP_FALIAS(findOffset16, dom_string_extend_find_offset16, NULL) - PHP_FALIAS(findOffset32, dom_string_extend_find_offset32, NULL) - {NULL, NULL, NULL} -}; - -/* {{{ attribute protos, not implemented yet */ - - -/* {{{ proto int dom_string_extend_find_offset16(int offset32) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset16 -Since: -*/ -PHP_FUNCTION(dom_string_extend_find_offset16) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_string_extend_find_offset16 */ - - -/* {{{ proto int dom_string_extend_find_offset32(int offset16) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset32 -Since: -*/ -PHP_FUNCTION(dom_string_extend_find_offset32) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_string_extend_find_offset32 */ -#endif diff --git a/ext/dom/tests/book.xml b/ext/dom/tests/book.xml deleted file mode 100644 index 95de0da86649e..0000000000000 --- a/ext/dom/tests/book.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - The Grapes of Wrath - John Steinbeck - - - The Pearl - John Steinbeck - - diff --git a/ext/dom/tests/book.xml.gz b/ext/dom/tests/book.xml.gz deleted file mode 100644 index 2c97807a59fbe65a0dce669be105c7a3e0e0668b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119 zcmV--0Eqt|iwFpA0G&So17dG)Yc6@4MGE*3jja~9VE8^003c;D2V_7 diff --git a/ext/dom/tests/bug28721.phpt b/ext/dom/tests/bug28721.phpt deleted file mode 100644 index e8e7d867d8995..0000000000000 --- a/ext/dom/tests/bug28721.phpt +++ /dev/null @@ -1,485 +0,0 @@ ---TEST-- -Bug # 28721: (appendChild() and insertBefore() unset DOMText) ---SKIPIF-- - ---FILE-- -nodeName . " (" . $node->nodeValue . ")\n"; -} - -function print_node_r(DomNode $node) { - static $indent = ""; - echo "\n" . $indent; - print_node($node); - - echo $indent . "parent: "; - if ( $node->parentNode ) - print_node($node->parentNode); - else - echo "NULL\n"; - - echo $indent . "previousSibling: "; - if ( $node->previousSibling ) - print_node($node->previousSibling); - else - echo "NULL\n"; - - echo $indent . "nextSibling: "; - if ( $node->nextSibling ) - print_node($node->nextSibling); - else - echo "NULL\n"; - - if ( !$node->hasChildNodes() ) - return; - - foreach ($node->childNodes as $child) { - - $old_indent = $indent; - $indent .= " "; - print_node_r($child); - $indent = $old_indent; - } -} - -function err_handler($errno, $errstr, $errfile, $errline) { - echo "Error ($errno) on line $errline: $errstr\n"; -} - -// Record 'DocumentFragment is empty' warnings -set_error_handler("err_handler", E_WARNING); - -$xml = new DomDocument(); - -$p = $xml->createElement("p"); - -$p->appendChild($t1 = $xml->createTextNode(" t1 ")); -$p->appendChild($b = $xml->createElement("b")); -$b->appendChild($xml->createTextNode("X")); -$p->appendChild($t2 = $xml->createTextNode(" t2 ")); -$p->appendChild($xml->createTextNode(" xxx ")); - -print_node_r($p); - -echo "\nAppend t1 to p:\n"; -$ret = $p->appendChild($t1); - -print_node_r($p); -echo "\n"; - -echo "t1 == ret: "; -var_dump( $t1 === $ret ); - - -$d = $xml->createElement("div"); -$d->appendChild($t3 = $xml->createTextNode(" t3 ")); -$d->appendChild($b = $xml->createElement("b")); -$b->appendChild($xml->createElement("X")); -$d->appendChild($t4 = $xml->createTextNode(" t4 ")); -$d->appendChild($xml->createTextNode(" xxx ")); - -echo "\ndiv:\n"; -print_node_r($d); - -echo "\nInsert t4 before t3:\n"; - -$ret = $d->insertBefore($t4, $t3); - -print_node_r($d); -echo "\n"; - -$frag = $xml->createDocumentFragment(); - -$t5 = $frag->appendChild($xml->createTextNode(" t5 ")); -$frag->appendChild($i = $xml->createElement("i")); -$i->appendChild($xml->createTextNode(" frob ")); -$frag->appendChild($xml->createTextNOde(" t6 ")); - -echo "\np:\n"; -print_node_r($p); -echo "\nFragment:\n"; -print_node_r($frag); - -echo "\nAppending fragment to p:\n"; -$p->appendChild($frag); - -print_node_r($p); -echo "\nFragment:\n"; -print_node_r($frag); - -echo "\ndiv:\n"; -print_node_r($d); -echo "\nInserting fragment before t4\n"; -$d->insertBefore($frag, $t4); -print_node_r($d); - -echo "\np:\n"; -print_node_r($p); - -?> ---EXPECT-- - -name (value): p ( t1 X t2 xxx ) -parent: NULL -previousSibling: NULL -nextSibling: NULL - - name (value): #text ( t1 ) - parent: name (value): p ( t1 X t2 xxx ) - previousSibling: NULL - nextSibling: name (value): b (X) - - name (value): b (X) - parent: name (value): p ( t1 X t2 xxx ) - previousSibling: name (value): #text ( t1 ) - nextSibling: name (value): #text ( t2 ) - - name (value): #text (X) - parent: name (value): b (X) - previousSibling: NULL - nextSibling: NULL - - name (value): #text ( t2 ) - parent: name (value): p ( t1 X t2 xxx ) - previousSibling: name (value): b (X) - nextSibling: name (value): #text ( xxx ) - - name (value): #text ( xxx ) - parent: name (value): p ( t1 X t2 xxx ) - previousSibling: name (value): #text ( t2 ) - nextSibling: NULL - -Append t1 to p: - -name (value): p (X t2 xxx t1 ) -parent: NULL -previousSibling: NULL -nextSibling: NULL - - name (value): b (X) - parent: name (value): p (X t2 xxx t1 ) - previousSibling: NULL - nextSibling: name (value): #text ( t2 ) - - name (value): #text (X) - parent: name (value): b (X) - previousSibling: NULL - nextSibling: NULL - - name (value): #text ( t2 ) - parent: name (value): p (X t2 xxx t1 ) - previousSibling: name (value): b (X) - nextSibling: name (value): #text ( xxx ) - - name (value): #text ( xxx ) - parent: name (value): p (X t2 xxx t1 ) - previousSibling: name (value): #text ( t2 ) - nextSibling: name (value): #text ( t1 ) - - name (value): #text ( t1 ) - parent: name (value): p (X t2 xxx t1 ) - previousSibling: name (value): #text ( xxx ) - nextSibling: NULL - -t1 == ret: bool(true) - -div: - -name (value): div ( t3 t4 xxx ) -parent: NULL -previousSibling: NULL -nextSibling: NULL - - name (value): #text ( t3 ) - parent: name (value): div ( t3 t4 xxx ) - previousSibling: NULL - nextSibling: name (value): b () - - name (value): b () - parent: name (value): div ( t3 t4 xxx ) - previousSibling: name (value): #text ( t3 ) - nextSibling: name (value): #text ( t4 ) - - name (value): X () - parent: name (value): b () - previousSibling: NULL - nextSibling: NULL - - name (value): #text ( t4 ) - parent: name (value): div ( t3 t4 xxx ) - previousSibling: name (value): b () - nextSibling: name (value): #text ( xxx ) - - name (value): #text ( xxx ) - parent: name (value): div ( t3 t4 xxx ) - previousSibling: name (value): #text ( t4 ) - nextSibling: NULL - -Insert t4 before t3: - -name (value): div ( t4 t3 xxx ) -parent: NULL -previousSibling: NULL -nextSibling: NULL - - name (value): #text ( t4 ) - parent: name (value): div ( t4 t3 xxx ) - previousSibling: NULL - nextSibling: name (value): #text ( t3 ) - - name (value): #text ( t3 ) - parent: name (value): div ( t4 t3 xxx ) - previousSibling: name (value): #text ( t4 ) - nextSibling: name (value): b () - - name (value): b () - parent: name (value): div ( t4 t3 xxx ) - previousSibling: name (value): #text ( t3 ) - nextSibling: name (value): #text ( xxx ) - - name (value): X () - parent: name (value): b () - previousSibling: NULL - nextSibling: NULL - - name (value): #text ( xxx ) - parent: name (value): div ( t4 t3 xxx ) - previousSibling: name (value): b () - nextSibling: NULL - - -p: - -name (value): p (X t2 xxx t1 ) -parent: NULL -previousSibling: NULL -nextSibling: NULL - - name (value): b (X) - parent: name (value): p (X t2 xxx t1 ) - previousSibling: NULL - nextSibling: name (value): #text ( t2 ) - - name (value): #text (X) - parent: name (value): b (X) - previousSibling: NULL - nextSibling: NULL - - name (value): #text ( t2 ) - parent: name (value): p (X t2 xxx t1 ) - previousSibling: name (value): b (X) - nextSibling: name (value): #text ( xxx ) - - name (value): #text ( xxx ) - parent: name (value): p (X t2 xxx t1 ) - previousSibling: name (value): #text ( t2 ) - nextSibling: name (value): #text ( t1 ) - - name (value): #text ( t1 ) - parent: name (value): p (X t2 xxx t1 ) - previousSibling: name (value): #text ( xxx ) - nextSibling: NULL - -Fragment: - -name (value): #document-fragment () -parent: NULL -previousSibling: NULL -nextSibling: NULL - - name (value): #text ( t5 ) - parent: name (value): #document-fragment () - previousSibling: NULL - nextSibling: name (value): i ( frob ) - - name (value): i ( frob ) - parent: name (value): #document-fragment () - previousSibling: name (value): #text ( t5 ) - nextSibling: name (value): #text ( t6 ) - - name (value): #text ( frob ) - parent: name (value): i ( frob ) - previousSibling: NULL - nextSibling: NULL - - name (value): #text ( t6 ) - parent: name (value): #document-fragment () - previousSibling: name (value): i ( frob ) - nextSibling: NULL - -Appending fragment to p: - -name (value): p (X t2 xxx t1 t5 frob t6 ) -parent: NULL -previousSibling: NULL -nextSibling: NULL - - name (value): b (X) - parent: name (value): p (X t2 xxx t1 t5 frob t6 ) - previousSibling: NULL - nextSibling: name (value): #text ( t2 ) - - name (value): #text (X) - parent: name (value): b (X) - previousSibling: NULL - nextSibling: NULL - - name (value): #text ( t2 ) - parent: name (value): p (X t2 xxx t1 t5 frob t6 ) - previousSibling: name (value): b (X) - nextSibling: name (value): #text ( xxx ) - - name (value): #text ( xxx ) - parent: name (value): p (X t2 xxx t1 t5 frob t6 ) - previousSibling: name (value): #text ( t2 ) - nextSibling: name (value): #text ( t1 ) - - name (value): #text ( t1 ) - parent: name (value): p (X t2 xxx t1 t5 frob t6 ) - previousSibling: name (value): #text ( xxx ) - nextSibling: name (value): #text ( t5 ) - - name (value): #text ( t5 ) - parent: name (value): p (X t2 xxx t1 t5 frob t6 ) - previousSibling: name (value): #text ( t1 ) - nextSibling: name (value): i ( frob ) - - name (value): i ( frob ) - parent: name (value): p (X t2 xxx t1 t5 frob t6 ) - previousSibling: name (value): #text ( t5 ) - nextSibling: name (value): #text ( t6 ) - - name (value): #text ( frob ) - parent: name (value): i ( frob ) - previousSibling: NULL - nextSibling: NULL - - name (value): #text ( t6 ) - parent: name (value): p (X t2 xxx t1 t5 frob t6 ) - previousSibling: name (value): i ( frob ) - nextSibling: NULL - -Fragment: - -name (value): #document-fragment () -parent: NULL -previousSibling: NULL -nextSibling: NULL - -div: - -name (value): div ( t4 t3 xxx ) -parent: NULL -previousSibling: NULL -nextSibling: NULL - - name (value): #text ( t4 ) - parent: name (value): div ( t4 t3 xxx ) - previousSibling: NULL - nextSibling: name (value): #text ( t3 ) - - name (value): #text ( t3 ) - parent: name (value): div ( t4 t3 xxx ) - previousSibling: name (value): #text ( t4 ) - nextSibling: name (value): b () - - name (value): b () - parent: name (value): div ( t4 t3 xxx ) - previousSibling: name (value): #text ( t3 ) - nextSibling: name (value): #text ( xxx ) - - name (value): X () - parent: name (value): b () - previousSibling: NULL - nextSibling: NULL - - name (value): #text ( xxx ) - parent: name (value): div ( t4 t3 xxx ) - previousSibling: name (value): b () - nextSibling: NULL - -Inserting fragment before t4 -Error (2) on line 109: DOMNode::insertBefore(): Document Fragment is empty - -name (value): div ( t4 t3 xxx ) -parent: NULL -previousSibling: NULL -nextSibling: NULL - - name (value): #text ( t4 ) - parent: name (value): div ( t4 t3 xxx ) - previousSibling: NULL - nextSibling: name (value): #text ( t3 ) - - name (value): #text ( t3 ) - parent: name (value): div ( t4 t3 xxx ) - previousSibling: name (value): #text ( t4 ) - nextSibling: name (value): b () - - name (value): b () - parent: name (value): div ( t4 t3 xxx ) - previousSibling: name (value): #text ( t3 ) - nextSibling: name (value): #text ( xxx ) - - name (value): X () - parent: name (value): b () - previousSibling: NULL - nextSibling: NULL - - name (value): #text ( xxx ) - parent: name (value): div ( t4 t3 xxx ) - previousSibling: name (value): b () - nextSibling: NULL - -p: - -name (value): p (X t2 xxx t1 t5 frob t6 ) -parent: NULL -previousSibling: NULL -nextSibling: NULL - - name (value): b (X) - parent: name (value): p (X t2 xxx t1 t5 frob t6 ) - previousSibling: NULL - nextSibling: name (value): #text ( t2 ) - - name (value): #text (X) - parent: name (value): b (X) - previousSibling: NULL - nextSibling: NULL - - name (value): #text ( t2 ) - parent: name (value): p (X t2 xxx t1 t5 frob t6 ) - previousSibling: name (value): b (X) - nextSibling: name (value): #text ( xxx ) - - name (value): #text ( xxx ) - parent: name (value): p (X t2 xxx t1 t5 frob t6 ) - previousSibling: name (value): #text ( t2 ) - nextSibling: name (value): #text ( t1 ) - - name (value): #text ( t1 ) - parent: name (value): p (X t2 xxx t1 t5 frob t6 ) - previousSibling: name (value): #text ( xxx ) - nextSibling: name (value): #text ( t5 ) - - name (value): #text ( t5 ) - parent: name (value): p (X t2 xxx t1 t5 frob t6 ) - previousSibling: name (value): #text ( t1 ) - nextSibling: name (value): i ( frob ) - - name (value): i ( frob ) - parent: name (value): p (X t2 xxx t1 t5 frob t6 ) - previousSibling: name (value): #text ( t5 ) - nextSibling: name (value): #text ( t6 ) - - name (value): #text ( frob ) - parent: name (value): i ( frob ) - previousSibling: NULL - nextSibling: NULL - - name (value): #text ( t6 ) - parent: name (value): p (X t2 xxx t1 t5 frob t6 ) - previousSibling: name (value): i ( frob ) - nextSibling: NULL diff --git a/ext/dom/tests/bug28817.phpt b/ext/dom/tests/bug28817.phpt deleted file mode 100644 index 1d04ff3f1cad7..0000000000000 --- a/ext/dom/tests/bug28817.phpt +++ /dev/null @@ -1,50 +0,0 @@ ---TEST-- -Bug # 28817: (properties in extended class) ---SKIPIF-- - ---FILE-- -p_array[] = 'bonus'; - $this->p_array[] = 'vir'; - $this->p_array[] = 'semper'; - $this->p_array[] = 'tiro'; - - $this->p_variable = 'Cessante causa cessat effectus'; - } -} - -$z=new z(); -var_dump($z->p_array); -var_dump($z->p_variable); -?> ---EXPECTF-- -array(4) { - [0]=> - string(5) "bonus" - [1]=> - string(3) "vir" - [2]=> - string(6) "semper" - [3]=> - string(4) "tiro" -} -string(30) "Cessante causa cessat effectus" ---UEXPECTF-- -array(4) { - [0]=> - unicode(5) "bonus" - [1]=> - unicode(3) "vir" - [2]=> - unicode(6) "semper" - [3]=> - unicode(4) "tiro" -} -unicode(30) "Cessante causa cessat effectus" diff --git a/ext/dom/tests/bug32615.phpt b/ext/dom/tests/bug32615.phpt deleted file mode 100644 index e48973429a77d..0000000000000 --- a/ext/dom/tests/bug32615.phpt +++ /dev/null @@ -1,84 +0,0 @@ ---TEST-- -Bug # 32615: (Replacing and inserting Fragments) ---SKIPIF-- - ---FILE-- -createDocumentFragment(); -$frag->appendChild(new DOMElement('root')); -$dom->appendChild($frag); -$root = $dom->documentElement; - -$frag->appendChild(new DOMElement('first')); -$root->appendChild($frag); - -$frag->appendChild(new DOMElement('second')); -$root->appendChild($frag); - -$node = $dom->createElement('newfirst'); -$frag->appendChild($node); -$root->replaceChild($frag, $root->firstChild); - -unset($frag); -$frag = $dom->createDocumentFragment(); - -$frag->appendChild(new DOMElement('newsecond')); -$root->replaceChild($frag, $root->lastChild); - -$node = $frag->appendChild(new DOMElement('fourth')); -$root->insertBefore($frag, NULL); - -$frag->appendChild(new DOMElement('third')); -$node = $root->insertBefore($frag, $node); - -$frag->appendChild(new DOMElement('start')); -$root->insertBefore($frag, $root->firstChild); - -$frag->appendChild(new DOMElement('newthird')); -$root->replaceChild($frag, $node); - -$frag->appendChild(new DOMElement('newfourth')); -$root->replaceChild($frag, $root->lastChild); - -$frag->appendChild(new DOMElement('first')); -$root->replaceChild($frag, $root->firstChild->nextSibling); - -$root->removeChild($root->firstChild); - -echo $dom->saveXML()."\n"; - -while ($root->hasChildNodes()) { - $root->removeChild($root->firstChild); -} - -$frag->appendChild(new DOMElement('first')); -$root->insertBefore($frag, $root->firstChild); - -$node = $frag->appendChild(new DOMElement('fourth')); -$root->appendChild($frag); - -$frag->appendChild(new DOMElement('second')); -$frag->appendChild(new DOMElement('third')); -$root->insertBefore($frag, $node); - -echo $dom->saveXML()."\n"; - -$frag = $dom->createDocumentFragment(); -$root = $dom->documentElement; -$root->replaceChild($frag, $root->firstChild); - -echo $dom->saveXML(); - -?> ---EXPECT-- - - - - - - - - - - diff --git a/ext/dom/tests/bug34276.phpt b/ext/dom/tests/bug34276.phpt deleted file mode 100644 index 2ffc061cd6d53..0000000000000 --- a/ext/dom/tests/bug34276.phpt +++ /dev/null @@ -1,51 +0,0 @@ ---TEST-- -Bug # 34276: setAttributeNS and default namespace ---SKIPIF-- - ---FILE-- - - -HERE; - -function dump($elems) { - foreach ($elems as $elem) { - var_dump($elem->nodeName); - dump($elem->childNodes); - } -} - -$dom = new DOMDocument(); -$dom->loadXML($xml); -$foo = $dom->documentElement; -var_dump($foo->hasAttributeNS('http://www.example.com/ns/foo', 'attra')); -var_dump($foo->getAttributeNS('http://www.example.com/ns/foo', 'attra')); - -$foo->setAttributeNS('http://www.example.com/ns/foo', 'attra', 'attranew'); -$foo->setAttributeNS('http://www.example.com/ns/fubar', 'attrb', 'attrbnew'); -$foo->setAttributeNS('http://www.example.com/ns/foo', 'attrc', 'attrc'); - -var_dump($foo->getAttributeNS('http://www.example.com/ns/foo', 'attra')); -var_dump($foo->getAttributeNS('http://www.example.com/ns/fubar', 'attrb')); -var_dump($foo->getAttributeNS('http://www.example.com/ns/foo', 'attrc')); - -print $dom->saveXML(); -?> ---EXPECT-- -bool(false) -string(0) "" -string(8) "attranew" -string(8) "attrbnew" -string(5) "attrc" - - ---UEXPECT-- -bool(false) -unicode(0) "" -unicode(8) "attranew" -unicode(8) "attrbnew" -unicode(5) "attrc" - - diff --git a/ext/dom/tests/bug35342.phpt b/ext/dom/tests/bug35342.phpt deleted file mode 100644 index b32a3eb3755ea..0000000000000 --- a/ext/dom/tests/bug35342.phpt +++ /dev/null @@ -1,17 +0,0 @@ ---TEST-- -Bug # 35342: isset(DOMNodeList->length) returns false ---SKIPIF-- - ---FILE-- -loadXML(b"foobarfoobar#2"); - -$nodelist = $dom->getElementsByTagName("foo"); - -var_dump($nodelist->length, isset($nodelist->length), isset($nodelist->foo)); -?> ---EXPECT-- -int(2) -bool(true) -bool(false) diff --git a/ext/dom/tests/bug36756.phpt b/ext/dom/tests/bug36756.phpt deleted file mode 100644 index c7423fccd3aa2..0000000000000 --- a/ext/dom/tests/bug36756.phpt +++ /dev/null @@ -1,35 +0,0 @@ ---TEST-- -Bug #36756: (DOMDocument::removeChild corrupts node) ---SKIPIF-- - ---FILE-- -loadXML(b''); -$xpath = new DOMXpath($dom); -$node = $xpath->query('/root')->item(0); -echo $node->nodeName . "\n"; -$dom->removeChild($GLOBALS['dom']->firstChild); -echo "nodeType: " . $node->nodeType . "\n"; - -/* Node gets destroyed during removeChild */ -$dom->loadXML(b''); -$xpath = new DOMXpath($dom); -$node = $xpath->query('//child')->item(0); -echo $node->nodeName . "\n"; -$GLOBALS['dom']->removeChild($GLOBALS['dom']->firstChild); - -echo "nodeType: " . $node->nodeType . "\n"; - -?> ---EXPECTF-- -root -nodeType: 1 -child - -Warning: Couldn't fetch DOMElement. Node no longer exists in %sbug36756.php on line %d - -Notice: Undefined property: DOMElement::$nodeType in %sbug36756.php on line %d -nodeType: diff --git a/ext/dom/tests/bug37277.phpt b/ext/dom/tests/bug37277.phpt deleted file mode 100644 index 4c3b907196ab6..0000000000000 --- a/ext/dom/tests/bug37277.phpt +++ /dev/null @@ -1,25 +0,0 @@ ---TEST-- -Bug # 37277 (cloning Dom Documents or Nodes does not work) ---SKIPIF-- - ---FILE-- -'; -$dom1->loadXml($xml); - -$node = clone $dom1->documentElement; - -$dom2 = new DomDocument('1.0', 'UTF-8'); -$dom2->appendChild($dom2->importNode($node->cloneNode(true), TRUE)); - -print $dom2->saveXML(); - - -?> ---EXPECT-- - - - - diff --git a/ext/dom/tests/bug37456.phpt b/ext/dom/tests/bug37456.phpt deleted file mode 100644 index 904712f4b1baa..0000000000000 --- a/ext/dom/tests/bug37456.phpt +++ /dev/null @@ -1,22 +0,0 @@ ---TEST-- -Bug # 37456 (DOMElement->setAttribute() loops forever) ---SKIPIF-- - ---FILE-- -resolveExternals = true; -$doc->load(dirname(__FILE__)."/dom.xml"); - -$root = $doc->getElementsByTagName('foo')->item(0); -$root->setAttribute('bar', '>'); -$attr = $root->setAttribute('bar', 'newval'); -print $attr->nodeValue; - - -?> ---EXPECT-- - -newval - diff --git a/ext/dom/tests/bug38438.phpt b/ext/dom/tests/bug38438.phpt deleted file mode 100644 index f51252832c664..0000000000000 --- a/ext/dom/tests/bug38438.phpt +++ /dev/null @@ -1,13 +0,0 @@ ---TEST-- -Bug #38438 (DOMNodeList->item(0) segfault on empty NodeList) ---SKIPIF-- - ---FILE-- -item(0)); -echo "OK\n"; -?> ---EXPECT-- -NULL -OK diff --git a/ext/dom/tests/bug38474.phpt b/ext/dom/tests/bug38474.phpt deleted file mode 100644 index e8fef5ca7ea1b..0000000000000 --- a/ext/dom/tests/bug38474.phpt +++ /dev/null @@ -1,41 +0,0 @@ ---TEST-- -Bug #38474 (getAttribute select attribute by order, even when prefixed) (OK to fail with libxml2 < 2.6.2x) ---SKIPIF-- - ---FILE-- -'; -$dom = new DomDocument(); -$dom->loadXML($xml); -echo $dom->firstChild->getAttribute('type')."\n"; -echo $dom->firstChild->getAttribute('pre:type')."\n"; - -$dom->firstChild->setAttribute('pre:type', 'bar2'); -$dom->firstChild->setAttribute('type', 'foo2'); -$dom->firstChild->setAttribute('post:type', 'baz'); -$dom->firstChild->setAttribute('new:type', 'baz2'); - -echo $dom->firstChild->getAttribute('type')."\n"; -echo $dom->firstChild->getAttribute('pre:type')."\n"; -echo $dom->firstChild->getAttribute('post:type')."\n"; - -$dom->firstChild->removeAttribute('pre:type'); -$dom->firstChild->removeAttribute('type'); - -echo $dom->firstChild->getAttribute('type')."\n"; -echo $dom->firstChild->getAttribute('pre:type')."\n"; -echo $dom->firstChild->getAttribute('post:type')."\n"; -echo $dom->firstChild->getAttribute('new:type'); -?> ---EXPECT-- -foo -bar -foo2 -bar2 -baz - - -baz -baz2 diff --git a/ext/dom/tests/bug38850.phpt b/ext/dom/tests/bug38850.phpt deleted file mode 100644 index 2f5d84eb2b3b4..0000000000000 --- a/ext/dom/tests/bug38850.phpt +++ /dev/null @@ -1,22 +0,0 @@ ---TEST-- -Bug # 38850 (lookupNamespaceURI does not return default namespace) ---SKIPIF-- - ---FILE-- - - -HERE; - -$doc = new DOMDocument(); -$doc->loadXML($xml); - -$root = $doc->documentElement; - -print $root->lookupNamespaceURI(NULL); - - -?> ---EXPECT-- -http://www.example.com/ns/foo diff --git a/ext/dom/tests/bug38949.phpt b/ext/dom/tests/bug38949.phpt deleted file mode 100644 index ba9c8dfe36bf6..0000000000000 --- a/ext/dom/tests/bug38949.phpt +++ /dev/null @@ -1,27 +0,0 @@ ---TEST-- -Bug # 38949: (Cannot get xmlns value attribute) ---SKIPIF-- - ---FILE-- -load(dirname(__FILE__)."/nsdoc.xml"); - -$root = $doc->documentElement; - -echo $root->getAttribute("xmlns")."\n"; -echo $root->getAttribute("xmlns:ns2")."\n"; - -$child = $root->firstChild->nextSibling; -echo $child->getAttribute("xmlns")."\n"; -echo $child->getAttribute("xmlns:ns2")."\n"; - -echo "DONE\n"; -?> ---EXPECT-- -http://ns -http://ns2 - - -DONE diff --git a/ext/dom/tests/bug40836.phpt b/ext/dom/tests/bug40836.phpt deleted file mode 100644 index 5f454c85e0b56..0000000000000 --- a/ext/dom/tests/bug40836.phpt +++ /dev/null @@ -1,29 +0,0 @@ ---TEST-- -Bug # 40836 (Segfault in insertBefore) ---SKIPIF-- - ---FILE-- -preserveWhiteSpace = false; -$xml = (binary)' - - - 2007-02-14T00:00:00+01:00 - -
-

paragraph

-
-
-
-
'; -$dom->loadXML($xml); -$entry = $dom->getElementsByTagNameNS("http://www.w3.org/2005/Atom", "entry")->item(0); -$contentNode = $entry->getElementsByTagName("content")->item(0)->firstChild; -$dateNode = $entry->getElementsByTagName("updated")->item(0)->firstChild; -$contentNode->firstChild->insertBefore($dateNode); -echo $dom->saveXML(); -?> ---EXPECT-- - -

paragraph2007-02-14T00:00:00+01:00

diff --git a/ext/dom/tests/canonicalization.phpt b/ext/dom/tests/canonicalization.phpt deleted file mode 100644 index b550d01c89358..0000000000000 --- a/ext/dom/tests/canonicalization.phpt +++ /dev/null @@ -1,102 +0,0 @@ ---TEST-- -Test: Canonicalization - C14N() ---SKIPIF-- - ---FILE-- - - - - - - - - - -EOXML; - -$dom = new DOMDocument(); -$dom->loadXML($xml); -$doc = $dom->documentElement->firstChild; - -/* inclusive/without comments first child element of doc element is context. */ -echo $doc->C14N()."\n\n"; - -/* exclusive/without comments first child element of doc element is context. */ -echo $doc->c14N(TRUE)."\n\n"; - -/* inclusive/with comments first child element of doc element is context. */ -echo $doc->C14N(FALSE, TRUE)."\n\n"; - -/* exclusive/with comments first child element of doc element is context. */ -echo $doc->C14N(TRUE, TRUE)."\n\n"; - -/* exclusive/without comments using xpath query. */ -echo $doc->c14N(TRUE, FALSE, array('query'=>'(//. | //@* | //namespace::*)'))."\n\n"; - -/* exclusive/without comments first child element of doc element is context. - using xpath query with registered namespace. - test namespace prefix is also included. */ -echo $doc->c14N(TRUE, FALSE, - array('query'=>'(//a:contain | //a:bar | .//namespace::*)', - 'namespaces'=>array('a'=>'http://www.example.com/ns/foo')), - array('test'))."\n\n"; - -/* exclusive/without comments first child element of doc element is context. - test namespace prefix is also included */ -echo $doc->C14N(TRUE, FALSE, NULL, array('test')); -?> ---EXPECTF-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ext/dom/tests/dom.ent b/ext/dom/tests/dom.ent deleted file mode 100644 index 987ff9dc0fab6..0000000000000 --- a/ext/dom/tests/dom.ent +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/ext/dom/tests/dom.xml b/ext/dom/tests/dom.xml deleted file mode 100644 index 09ac674e55d83..0000000000000 --- a/ext/dom/tests/dom.xml +++ /dev/null @@ -1,8 +0,0 @@ - - -%incent; -]> - - - \ No newline at end of file diff --git a/ext/dom/tests/dom001.phpt b/ext/dom/tests/dom001.phpt deleted file mode 100644 index a0c78fbb0a19f..0000000000000 --- a/ext/dom/tests/dom001.phpt +++ /dev/null @@ -1,275 +0,0 @@ ---TEST-- -Test 1: Accessing single node ---SKIPIF-- - ---FILE-- -loadxml($xmlstr); -if(!$dom) { - echo "Error while parsing the document\n"; - exit; -} - -// children() of of document would result in a memleak -//$children = $dom->children(); -//print_node_list($children); - -echo "--------- root\n"; -$rootnode = $dom->documentElement; -print_node($rootnode); - -echo "--------- children of root\n"; -$children = $rootnode->childNodes; -print_node_list($children); - -// The last node should be identical with the last entry in the children array -echo "--------- last\n"; -$last = $rootnode->lastChild; -print_node($last); - -// The parent of this last node is the root again -echo "--------- parent\n"; -$parent = $last->parentNode; -print_node($parent); - -// The children of this parent are the same children as one above -echo "--------- children of parent\n"; -$children = $parent->childNodes; -print_node_list($children); - -echo "--------- creating a new attribute\n"; -//This is worthless -//$attr = $dom->createAttribute("src", "picture.gif"); -//print_r($attr); - -//$rootnode->set_attributeNode($attr); -$attr = $rootnode->setAttribute("src", "picture.gif"); -$attr = $rootnode->getAttribute("src"); -print_r($attr); -print "\n"; - -echo "--------- Get Attribute Node\n"; -$attr = $rootnode->getAttributeNode("src"); -print_node($attr); - -echo "--------- Remove Attribute Node\n"; -$attr = $rootnode->removeAttribute("src"); -print "Removed " . $attr . " attributes.\n"; - -echo "--------- attributes of rootnode\n"; -$attrs = $rootnode->attributes; -print_node_list($attrs); - -echo "--------- children of an attribute\n"; -$children = $attrs->item(0)->childNodes; -print_node_list($children); - -echo "--------- Add child to root\n"; -$myelement = new domElement("Silly", "Symphony"); -$newchild = $rootnode->appendChild($myelement); -print_node($newchild); -print $dom->saveXML(); -print "\n"; - -echo "--------- Find element by tagname\n"; -echo " Using dom\n"; -$children = $dom->getElementsByTagname("Silly"); -print_node_list($children); - -echo " Using elem\n"; -$children = $rootnode->getElementsByTagName("Silly"); -print_node_list($children); - -echo "--------- Unlink Node\n"; -print_node($children->item(0)); -$rootnode->removeChild($children->item(0)); -print_node_list($rootnode->childNodes); -print $dom->savexml(); - -echo "--------- Find element by id\n"; -print ("Not implemented\n"); - -echo "--------- Check various node_name return values\n"; -print ("Not needed\n"); - -?> ---EXPECT-- -Test 1: accessing single nodes from php ---------- root -Node Name: chapter -Node Type: 1 -Num Children: 4 - ---------- children of root -Node Name: title -Node Type: 1 -Num Children: 1 -Node Content: Title - -Node Name: #text -Node Type: 3 -Num Children: 0 -Node Content: - - -Node Name: para -Node Type: 1 -Num Children: 7 - -Node Name: #text -Node Type: 3 -Num Children: 0 -Node Content: - - ---------- last -Node Name: #text -Node Type: 3 -Num Children: 0 -Node Content: - - ---------- parent -Node Name: chapter -Node Type: 1 -Num Children: 4 - ---------- children of parent -Node Name: title -Node Type: 1 -Num Children: 1 -Node Content: Title - -Node Name: #text -Node Type: 3 -Num Children: 0 -Node Content: - - -Node Name: para -Node Type: 1 -Num Children: 7 - -Node Name: #text -Node Type: 3 -Num Children: 0 -Node Content: - - ---------- creating a new attribute -picture.gif ---------- Get Attribute Node -Node Name: src -Node Type: 2 -Num Children: 1 -Node Content: picture.gif - ---------- Remove Attribute Node -Removed 1 attributes. ---------- attributes of rootnode -Node Name: language -Node Type: 2 -Num Children: 1 -Node Content: en - ---------- children of an attribute -Node Name: #text -Node Type: 3 -Num Children: 0 -Node Content: en - ---------- Add child to root -Node Name: Silly -Node Type: 1 -Num Children: 1 -Node Content: Symphony - - - -]> - -Title - -&sp; - - - - -a1b1c1 -a2c2 -a3b3c3 - - - - -Symphony - ---------- Find element by tagname - Using dom -Node Name: Silly -Node Type: 1 -Num Children: 1 -Node Content: Symphony - - Using elem -Node Name: Silly -Node Type: 1 -Num Children: 1 -Node Content: Symphony - ---------- Unlink Node -Node Name: Silly -Node Type: 1 -Num Children: 1 -Node Content: Symphony - -Node Name: title -Node Type: 1 -Num Children: 1 -Node Content: Title - -Node Name: #text -Node Type: 3 -Num Children: 0 -Node Content: - - -Node Name: para -Node Type: 1 -Num Children: 7 - -Node Name: #text -Node Type: 3 -Num Children: 0 -Node Content: - - - - -]> - -Title - -&sp; - - - - -a1b1c1 -a2c2 -a3b3c3 - - - - - ---------- Find element by id -Not implemented ---------- Check various node_name return values -Not needed diff --git a/ext/dom/tests/dom002.phpt b/ext/dom/tests/dom002.phpt deleted file mode 100644 index 3c6819ce0371e..0000000000000 --- a/ext/dom/tests/dom002.phpt +++ /dev/null @@ -1,82 +0,0 @@ ---TEST-- -Test 2: getElementsByTagName() / getElementsByTagNameNS() ---SKIPIF-- - ---FILE-- - - - - - - - -HERE; - -function dump($elems) { - foreach ($elems as $elem) { - var_dump($elem->nodeName); - dump($elem->childNodes); - } -} - -$dom = new DOMDocument(); -$dom->loadXML($xml); -$doc = $dom->documentElement; -dump($dom->getElementsByTagName('bar')); -dump($doc->getElementsByTagName('bar')); -dump($dom->getElementsByTagNameNS('http://www.example.com/ns/fubar', 'bar')); -dump($doc->getElementsByTagNameNS('http://www.example.com/ns/fubar', 'bar')); -?> ---EXPECT-- -string(3) "bar" -string(5) "test1" -string(3) "bar" -string(5) "test2" -string(9) "fubar:bar" -string(5) "test3" -string(9) "fubar:bar" -string(5) "test4" -string(3) "bar" -string(5) "test1" -string(3) "bar" -string(5) "test2" -string(9) "fubar:bar" -string(5) "test3" -string(9) "fubar:bar" -string(5) "test4" -string(9) "fubar:bar" -string(5) "test3" -string(9) "fubar:bar" -string(5) "test4" -string(9) "fubar:bar" -string(5) "test3" -string(9) "fubar:bar" -string(5) "test4" ---UEXPECT-- -unicode(3) "bar" -unicode(5) "test1" -unicode(3) "bar" -unicode(5) "test2" -unicode(9) "fubar:bar" -unicode(5) "test3" -unicode(9) "fubar:bar" -unicode(5) "test4" -unicode(3) "bar" -unicode(5) "test1" -unicode(3) "bar" -unicode(5) "test2" -unicode(9) "fubar:bar" -unicode(5) "test3" -unicode(9) "fubar:bar" -unicode(5) "test4" -unicode(9) "fubar:bar" -unicode(5) "test3" -unicode(9) "fubar:bar" -unicode(5) "test4" -unicode(9) "fubar:bar" -unicode(5) "test3" -unicode(9) "fubar:bar" -unicode(5) "test4" diff --git a/ext/dom/tests/dom003.phpt b/ext/dom/tests/dom003.phpt deleted file mode 100644 index c1f4d22082943..0000000000000 --- a/ext/dom/tests/dom003.phpt +++ /dev/null @@ -1,107 +0,0 @@ ---TEST-- -Test 3: Exception Test ---SKIPIF-- - ---FILE-- -load(dirname(__FILE__)."/book.xml"); -$rootNode = $dom->documentElement; -print "--- Catch exception with try/catch\n"; -try { - $rootNode->appendChild($rootNode); -} catch (domexception $e) { - var_dump($e); -} -print "--- Don't catch exception with try/catch\n"; -$rootNode->appendChild($rootNode); - - -?> ---EXPECTF-- ---- Catch exception with try/catch -object(DOMException)#%d (6) { - ["message":protected]=> - string(23) "Hierarchy Request Error" - ["string":"Exception":private]=> - string(0) "" - ["file":protected]=> - string(%d) "%sdom003.php" - ["line":protected]=> - int(8) - ["trace":"Exception":private]=> - array(1) { - [0]=> - array(6) { - ["file"]=> - string(%d) "%sdom003.php" - ["line"]=> - int(8) - ["function"]=> - string(11) "appendChild" - ["class"]=> - string(7) "DOMNode" - ["type"]=> - string(2) "->" - ["args"]=> - array(1) { - [0]=> - object(DOMElement)#%d (0) { - } - } - } - } - ["code"]=> - int(3) -} ---- Don't catch exception with try/catch - -Fatal error: Uncaught exception 'DOMException' with message 'Hierarchy Request Error' in %sdom003.php:%d -Stack trace: -#0 %sdom003.php(13): DOMNode->appendChild(Object(DOMElement)) -#1 {main} - thrown in %sdom003.php on line %d ---UEXPECTF-- ---- Catch exception with try/catch -object(DOMException)#%d (6) { - [u"message":protected]=> - unicode(23) "Hierarchy Request Error" - [u"string":u"Exception":private]=> - unicode(0) "" - [u"file":protected]=> - unicode(%d) "%sdom003.php" - [u"line":protected]=> - int(8) - [u"trace":u"Exception":private]=> - array(1) { - [0]=> - array(6) { - [u"file"]=> - unicode(%d) "%sdom003.php" - [u"line"]=> - int(8) - [u"function"]=> - unicode(11) "appendChild" - [u"class"]=> - unicode(7) "DOMNode" - [u"type"]=> - unicode(2) "->" - [u"args"]=> - array(1) { - [0]=> - object(DOMElement)#%d (0) { - } - } - } - } - [u"code"]=> - int(3) -} ---- Don't catch exception with try/catch - -Fatal error: Uncaught exception 'DOMException' with message 'Hierarchy Request Error' in %sdom003.php:%d -Stack trace: -#0 %sdom003.php(13): DOMNode->appendChild(Object(DOMElement)) -#1 {main} - thrown in %sdom003.php on line %d diff --git a/ext/dom/tests/dom004.phpt b/ext/dom/tests/dom004.phpt deleted file mode 100644 index 82b7915f6f630..0000000000000 --- a/ext/dom/tests/dom004.phpt +++ /dev/null @@ -1,25 +0,0 @@ ---TEST-- -Test 4: Streams Test ---SKIPIF-- - ---FILE-- -load("compress.zlib://".dirname(__FILE__)."/book.xml.gz"); -print $dom->saveXML(); - ---EXPECT-- - - - - The Grapes of Wrath - John Steinbeck - - - The Pearl - John Steinbeck - - diff --git a/ext/dom/tests/dom005.phpt b/ext/dom/tests/dom005.phpt deleted file mode 100644 index 249869eff2f25..0000000000000 --- a/ext/dom/tests/dom005.phpt +++ /dev/null @@ -1,36 +0,0 @@ ---TEST-- -Test 5: HTML Test ---SKIPIF-- - ---FILE-- -loadHTMLFile(dirname(__FILE__)."/test.html"); -print "--- save as XML\n"; - -print adjustDoctype($dom->saveXML()); -print "--- save as HTML\n"; - -print adjustDoctype($dom->saveHTML()); - -function adjustDoctype($xml) { - return str_replace(array("DOCTYPE HTML",'

','

'),array("DOCTYPE html",'',''),$xml); -} - ---EXPECT-- ---- save as XML - - -Hello world -This is a not well-formed
-html files with undeclared entities  - ---- save as HTML - - -Hello world - -This is a not well-formed
-html files with undeclared entities  - - diff --git a/ext/dom/tests/dom006.phpt b/ext/dom/tests/dom006.phpt deleted file mode 100644 index b8e8ed172440a..0000000000000 --- a/ext/dom/tests/dom006.phpt +++ /dev/null @@ -1,40 +0,0 @@ ---TEST-- -Test 6: Extends Test ---SKIPIF-- - ---FILE-- -createElement("title"); - $titleElement->appendChild($this->createTextNode($title)); - $authorElement = $this->createElement("author"); - $authorElement->appendChild($this->createTextNode($author)); - - $bookElement = $this->createElement("book"); - - $bookElement->appendChild($titleElement); - $bookElement->appendChild($authorElement); - $this->documentElement->appendChild($bookElement); - } - -} - -$dom = new books; - -$dom->load(dirname(__FILE__)."/book.xml"); -$dom->addBook("PHP de Luxe", "Richard Samar, Christian Stocker"); -print $dom->saveXML(); ---EXPECT-- - - - - The Grapes of Wrath - John Steinbeck - - - The Pearl - John Steinbeck - -PHP de LuxeRichard Samar, Christian Stocker diff --git a/ext/dom/tests/dom007.phpt b/ext/dom/tests/dom007.phpt deleted file mode 100644 index 8966ca49520e3..0000000000000 --- a/ext/dom/tests/dom007.phpt +++ /dev/null @@ -1,99 +0,0 @@ ---TEST-- -Test 7: DTD tests ---SKIPIF-- - ---FILE-- - - - - - - - - - - - - -]> - - - Basic Languages - Introduction to Languages - - - French I - Introduction to French - - - - -EOXML; - -$dom = new DOMDocument(); -$dom->loadXML($xml); - -$dtd = $dom->doctype; - -/* Notation Tests */ -$nots = $dtd->notations; - -$length = $nots->length; -echo "Length: ".$length."\n"; - -foreach ($nots AS $key=>$node) { - echo "Key $key: ".$node->nodeName." (".$node->systemId.") (".$node->publicId.")\n"; -} -print "\n"; -for($x=0; $x < $length; $x++) { - echo "Index $x: ".$nots->item($x)->nodeName." (".$nots->item($x)->systemId.") (".$nots->item($x)->publicId.")\n"; -} - -echo "\n"; -$node = $nots->getNamedItem('xxx'); -var_dump($node); - -echo "\n"; -/* Entity Decl Tests */ -$ents = $dtd->entities; -$length = $ents->length; -echo "Length: ".$length."\n"; -foreach ($ents AS $key=>$node) { - echo "Key: $key Name: ".$node->nodeName."\n"; -} -echo "\n"; -for($x=0; $x < $length; $x++) { - echo "Index $x: ".$ents->item($x)->nodeName."\n"; -} - -echo "\n"; -$node = $ents->item(3); -var_dump($node); -$node = $ents->getNamedItem('xxx'); -var_dump($node); - - ---EXPECT-- -Length: 1 -Key GIF: GIF (image/gif) (-) - -Index 0: GIF (image/gif) (-) - -NULL - -Length: 3 -Key: test Name: test -Key: rdf Name: rdf -Key: myimage Name: myimage - -Index 0: test -Index 1: rdf -Index 2: myimage - -NULL -NULL diff --git a/ext/dom/tests/dom_create_element.phpt b/ext/dom/tests/dom_create_element.phpt deleted file mode 100644 index 3f307099bb12b..0000000000000 --- a/ext/dom/tests/dom_create_element.phpt +++ /dev/null @@ -1,394 +0,0 @@ ---TEST-- -Test 1: Creating Elements with and without Namespaces ---SKIPIF-- - ---FILE-- -createElement('valid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print " 2 DOMDocument::createElement('-invalid')\n"; -try { - $dom = new domDocument; - $dom->createElement('-invalid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print " 3 DOMDocument::createElement(' ')\n"; -try { - $dom = new domDocument; - $dom->createElement(' '); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print " 4 DOMDocument::createElement('prefix:valid')\n"; -try { - $dom = new domDocument; - $dom->createElement('prefix:valid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print " 5 DOMDocument::createElementNS('http://valid.com', 'valid')\n"; -try { - $dom = new domDocument; - $dom->createElementNS('http://valid.com', 'valid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print " 6 DOMDocument::createElementNS('http://valid.com', 'prefix:valid')\n"; -try { - $dom = new domDocument; - $dom->createElementNS('http://valid.com', 'prefix:valid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print " 7 DOMDocument::createElementNS('http://valid.com', '-invalid')\n"; -try { - $dom = new domDocument; - $dom->createElementNS('http://valid.com', '-invalid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print " 8 DOMDocument::createElementNS('http://valid.com', 'prefix:-invalid')\n"; -try { - $dom = new domDocument; - $dom->createElementNS('http://valid.com', 'prefix:-invalid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print " 9 DOMDocument::createElementNS('', 'prefix:invalid')\n"; -try { - $dom = new domDocument; - $dom->createElementNS('', 'prefix:invalid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print "10 DOMDocument::createElementNS('http://valid.com', 'prefix:valid:invalid')\n"; -try { - $dom = new domDocument; - $dom->createElementNS('http://valid.com', 'prefix:valid:invalid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print "11 DOMDocument::createElementNS('http://valid.com', '-prefix:valid')\n"; -try { - $dom = new domDocument; - $dom->createElementNS('http://valid.com', '-prefix:valid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print "12 DOMDocument::createElementNS('-', 'prefix:valid')\n"; -try { - $dom = new domDocument; - $dom->createElementNS('-', 'prefix:valid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - - -print "13 DOMElement::__construct('valid')\n"; -try { - $element = new DomElement('valid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print "14 DOMElement::__construct('-invalid')\n"; -try { - $element = new DomElement('-invalid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print "15 DOMElement::__construct(' ')\n"; -try { - $element = new DomElement(' '); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print "16 DOMElement::__construct('prefix:valid')\n"; -try { - $element = new DomElement('prefix:valid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print "17 DOMElement::__construct('valid', '', 'http://valid.com')\n"; -try { - $element = new DomElement('valid', '', 'http://valid.com'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print "18 DOMElement::__construct('prefix:valid', '', 'http://valid.com')\n"; -try { - $element = new DomElement('prefix:valid', '', 'http://valid.com'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print "19 DOMElement::__construct('-invalid', '', 'http://valid.com')\n"; -try { - $element = new DomElement('-invalid', '', 'http://valid.com'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print "20 DOMElement::__construct('prefix:-invalid', '', 'http://valid.com')\n"; -try { - $element = new DomElement('prefix:-invalid', '', 'http://valid.com'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print "21 DOMElement::__construct('prefix:invalid', '', '')\n"; -try { - $element = new DomElement('prefix:invalid', '', ''); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print "22 DOMElement::__construct('prefix:valid:invalid', '', 'http://valid.com')\n"; -try { - $element = new DomElement('prefix:valid:invalid', '', 'http://valid.com'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print "23 DOMElement::__construct('-prefix:valid', '', 'http://valid.com')\n"; -try { - $element = new DomElement('-prefix:valid', '', 'http://valid.com'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print "24 DOMElement::__construct('prefix:valid', '', '-')\n"; -try { - $element = new DomElement('prefix:valid', '', '-'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -/* the qualifiedName has a prefix and the namespaceURI is null */ - -print "25 DOMDocument::createElementNS('', 'prefix:valid')\n"; -try { - $dom = new domDocument; - $dom->createElementNS('', 'prefix:valid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -/* the qualifiedName has a prefix that is "xml" and the namespaceURI - is different from "http://www.w3.org/XML/1998/namespace" [XML Namespaces] */ - -print "26 DOMDocument::createElementNS('http://wrong.namespaceURI.com', 'xml:valid')\n"; -try { - $dom = new domDocument; - $dom->createElementNS('http://wrong.namespaceURI.com', 'xml:valid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print "27 DOMElement::__construct('xml:valid', '', 'http://wrong.namespaceURI.com')\n"; -try { - $element = new DomElement('xml:valid', '', 'http://wrong.namespaceURI.com'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -/* This is okay because we reuse the xml namespace from the document */ -print "28 DOMDocument::createElementNS('http://www.w3.org/XML/1998/namespace', 'xml:valid')\n"; -try { - $dom = new domDocument; - $dom->createElementNS('http://www.w3.org/XML/1998/namespace', 'xml:valid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -/* This isn't because the xml namespace isn't there and we can't create it */ -print "29 DOMElement::__construct('xml:valid', '', 'http://www.w3.org/XML/1998/namespace')\n"; -try { - $element = new DomElement('xml:valid', '', 'http://www.w3.org/XML/1998/namespace'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - - -/* the qualifiedName or its prefix is "xmlns" and the namespaceURI is - different from "http://www.w3.org/2000/xmlns/" */ - -print "30 DOMDocument::createElementNS('http://wrong.namespaceURI.com', 'xmlns:valid')\n"; -try { - $dom = new domDocument; - $dom->createElementNS('http://wrong.namespaceURI.com', 'xmlns:valid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print "31 DOMElement::__construct('xmlns:valid', '', 'http://wrong.namespaceURI.com')\n"; -try { - $element = new DomElement('xmlns:valid', '', 'http://wrong.namespaceURI.com'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print "32 DOMDocument::createElementNS('http://www.w3.org/2000/xmlns/', 'xmlns:valid')\n"; -try { - $dom = new domDocument; - $dom->createElementNS('http://www.w3.org/2000/xmlns/', 'xmlns:valid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print "33 DOMElement::__construct('xmlns:valid', '', 'http://www.w3.org/2000/xmlns/')\n"; -try { - $element = new DomElement('xmlns:valid', '', 'http://www.w3.org/2000/xmlns/'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -/* the namespaceURI is "http://www.w3.org/2000/xmlns/" and neither the - qualifiedName nor its prefix is "xmlns". */ - -print "34 DOMDocument::createElementNS('http://www.w3.org/2000/xmlns/', 'wrongprefix:valid')\n"; -try { - $dom = new domDocument; - $dom->createElementNS('http://www.w3.org/2000/xmlns/', 'wrongprefix:valid'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - -print "35 DOMElement::__construct('wrongprefix:valid', '', 'http://www.w3.org/2000/xmlns/')\n"; -try { - $element = new DomElement('wrongprefix:valid', '', 'http://www.w3.org/2000/xmlns/'); - print "valid\n"; -} catch (Exception $e) { - print $e->getMessage() . "\n"; -} - - - -?> ---EXPECT-- - 1 DOMDocument::createElement('valid') -valid - 2 DOMDocument::createElement('-invalid') -Invalid Character Error - 3 DOMDocument::createElement(' ') -Invalid Character Error - 4 DOMDocument::createElement('prefix:valid') -valid - 5 DOMDocument::createElementNS('http://valid.com', 'valid') -valid - 6 DOMDocument::createElementNS('http://valid.com', 'prefix:valid') -valid - 7 DOMDocument::createElementNS('http://valid.com', '-invalid') -Namespace Error - 8 DOMDocument::createElementNS('http://valid.com', 'prefix:-invalid') -Namespace Error - 9 DOMDocument::createElementNS('', 'prefix:invalid') -Namespace Error -10 DOMDocument::createElementNS('http://valid.com', 'prefix:valid:invalid') -Namespace Error -11 DOMDocument::createElementNS('http://valid.com', '-prefix:valid') -Namespace Error -12 DOMDocument::createElementNS('-', 'prefix:valid') -valid -13 DOMElement::__construct('valid') -valid -14 DOMElement::__construct('-invalid') -Invalid Character Error -15 DOMElement::__construct(' ') -Invalid Character Error -16 DOMElement::__construct('prefix:valid') -Namespace Error -17 DOMElement::__construct('valid', '', 'http://valid.com') -valid -18 DOMElement::__construct('prefix:valid', '', 'http://valid.com') -valid -19 DOMElement::__construct('-invalid', '', 'http://valid.com') -Invalid Character Error -20 DOMElement::__construct('prefix:-invalid', '', 'http://valid.com') -Namespace Error -21 DOMElement::__construct('prefix:invalid', '', '') -Namespace Error -22 DOMElement::__construct('prefix:valid:invalid', '', 'http://valid.com') -Namespace Error -23 DOMElement::__construct('-prefix:valid', '', 'http://valid.com') -Invalid Character Error -24 DOMElement::__construct('prefix:valid', '', '-') -valid -25 DOMDocument::createElementNS('', 'prefix:valid') -Namespace Error -26 DOMDocument::createElementNS('http://wrong.namespaceURI.com', 'xml:valid') -Namespace Error -27 DOMElement::__construct('xml:valid', '', 'http://wrong.namespaceURI.com') -Namespace Error -28 DOMDocument::createElementNS('http://www.w3.org/XML/1998/namespace', 'xml:valid') -valid -29 DOMElement::__construct('xml:valid', '', 'http://www.w3.org/XML/1998/namespace') -Namespace Error -30 DOMDocument::createElementNS('http://wrong.namespaceURI.com', 'xmlns:valid') -Namespace Error -31 DOMElement::__construct('xmlns:valid', '', 'http://wrong.namespaceURI.com') -Namespace Error -32 DOMDocument::createElementNS('http://www.w3.org/2000/xmlns/', 'xmlns:valid') -valid -33 DOMElement::__construct('xmlns:valid', '', 'http://www.w3.org/2000/xmlns/') -valid -34 DOMDocument::createElementNS('http://www.w3.org/2000/xmlns/', 'wrongprefix:valid') -Namespace Error -35 DOMElement::__construct('wrongprefix:valid', '', 'http://www.w3.org/2000/xmlns/') -Namespace Error diff --git a/ext/dom/tests/dom_import_simplexml.phpt b/ext/dom/tests/dom_import_simplexml.phpt deleted file mode 100644 index 81744aa260085..0000000000000 --- a/ext/dom/tests/dom_import_simplexml.phpt +++ /dev/null @@ -1,27 +0,0 @@ ---TEST-- -Interop Test: Import from SimpleXML ---SKIPIF-- - - ---FILE-- -ownerDocument->saveXML(); -?> ---EXPECT-- - - - - The Grapes of Wrath - John Steinbeck - - - The Pearl - John Steinbeck - - diff --git a/ext/dom/tests/dom_set_attr_node.phpt b/ext/dom/tests/dom_set_attr_node.phpt deleted file mode 100644 index 0d24892ea44b0..0000000000000 --- a/ext/dom/tests/dom_set_attr_node.phpt +++ /dev/null @@ -1,102 +0,0 @@ ---TEST-- -Test: setAttributeNode() ---SKIPIF-- - ---FILE-- - - -HERE; - -$xml2 = b<< - -HERE; - -$dom = new DOMDocument(); -$dom->loadXML($xml); -$root = $dom->documentElement; -$attr = $root->getAttributeNode('a'); - -$dom2 = new DOMDocument(); -$dom2->loadXML($xml2); -$root2 = $dom2->documentElement; -try { - $root2->setAttributeNode($attr); -} catch (domexception $e) { - var_dump($e); -} - -?> ---EXPECTF-- -object(DOMException)#%d (6) { - ["message":protected]=> - string(20) "Wrong Document Error" - ["string":"Exception":private]=> - string(0) "" - ["file":protected]=> - string(%d) "%sdom_set_attr_node.php" - ["line":protected]=> - int(%d) - ["trace":"Exception":private]=> - array(1) { - [0]=> - array(6) { - ["file"]=> - string(%d) "%sdom_set_attr_node.php" - ["line"]=> - int(%d) - ["function"]=> - string(16) "setAttributeNode" - ["class"]=> - string(10) "DOMElement" - ["type"]=> - string(2) "->" - ["args"]=> - array(1) { - [0]=> - object(DOMAttr)#%d (0) { - } - } - } - } - ["code"]=> - int(4) -} ---UEXPECTF-- -object(DOMException)#%d (6) { - [u"message":protected]=> - unicode(20) "Wrong Document Error" - [u"string":u"Exception":private]=> - unicode(0) "" - [u"file":protected]=> - unicode(%d) "%sdom_set_attr_node.php" - [u"line":protected]=> - int(%d) - [u"trace":u"Exception":private]=> - array(1) { - [0]=> - array(6) { - [u"file"]=> - unicode(%d) "%sdom_set_attr_node.php" - [u"line"]=> - int(%d) - [u"function"]=> - unicode(16) "setAttributeNode" - [u"class"]=> - unicode(10) "DOMElement" - [u"type"]=> - unicode(2) "->" - [u"args"]=> - array(1) { - [0]=> - object(DOMAttr)#%d (0) { - } - } - } - } - [u"code"]=> - int(4) -} diff --git a/ext/dom/tests/dom_test.inc b/ext/dom/tests/dom_test.inc deleted file mode 100644 index e626de686b8bd..0000000000000 --- a/ext/dom/tests/dom_test.inc +++ /dev/null @@ -1,47 +0,0 @@ - - -]> - -Title - -&sp; - - - - -a1b1c1 -a2c2 -a3b3c3 - - - - - "; - -function print_node($node) -{ - print "Node Name: " . $node->nodeName; - print "\nNode Type: " . $node->nodeType; - if ($node->nodeType != 3) { - $child_count = $node->childNodes->length; - } else { - $child_count = 0; - } - print "\nNum Children: " . $child_count; - if($child_count <= 1){ - print "\nNode Content: " . $node->nodeValue; - } - print "\n\n"; -} - -function print_node_list($nodelist) -{ - foreach($nodelist as $node) - { - print_node($node); - } -} - -?> diff --git a/ext/dom/tests/dom_xinclude.phpt b/ext/dom/tests/dom_xinclude.phpt deleted file mode 100644 index f9a3dd761ede6..0000000000000 --- a/ext/dom/tests/dom_xinclude.phpt +++ /dev/null @@ -1,38 +0,0 @@ ---TEST-- -Test: Xinclude and Streams ---SKIPIF-- - ---FILE-- -loadXML($data); - -$dom->xinclude(); -print $dom->saveXML()."\n"; -foreach ($dom->documentElement->childNodes as $node) { - print $node->nodeName."\n"; -} -?> ---EXPECTF-- - - - - The Grapes of Wrath - John Steinbeck - - The Pearl - John Steinbeck - - - -#text -book -book -#text diff --git a/ext/dom/tests/domattributes.phpt b/ext/dom/tests/domattributes.phpt deleted file mode 100644 index 10a553843199c..0000000000000 --- a/ext/dom/tests/domattributes.phpt +++ /dev/null @@ -1,56 +0,0 @@ ---TEST-- -Attributes: DOMAttribute functionality ---SKIPIF-- - ---FILE-- -loadXML($xmlstr); -if(!$dom) { - echo "Error while parsing the document\n"; - exit; -} - -$node = $dom->documentElement; -if ($node->hasAttributes()) { - $lang = $node->getAttributeNode('language'); - echo "Language: ".$lang->value."\n"; -} - -$lang->value = 'en-US'; -echo "Language: ".$lang->value."\n"; - -$parent = $lang->ownerElement; - -$chapter = new DOMAttr("num", "1"); -$parent->setAttributeNode($chapter); - -echo "Is ID?: ".($chapter->isId()?'YES':'NO')."\n"; - -$top_element = $node->cloneNode(); - -print $dom->saveXML($top_element); - -$dom->loadXML(b''); -$root = $dom->documentElement; -$nmap = $root->attributes; - -print "\n\n"; - -if ($attr = $nmap->getNamedItemNS(NULL, 'att1')) { - print $attr->nodeValue."\n"; -} -if ($attr = $nmap->getNamedItemNS("urn::atest", 'att1')) { - print $attr->nodeValue."\n"; -} -?> ---EXPECT-- - -Language: en -Language: en-US -Is ID?: NO - - -1 diff --git a/ext/dom/tests/domchardata.phpt b/ext/dom/tests/domchardata.phpt deleted file mode 100644 index 6baff6d148c17..0000000000000 --- a/ext/dom/tests/domchardata.phpt +++ /dev/null @@ -1,76 +0,0 @@ ---TEST-- -CharData: DOMCharacterData and related functionality ---SKIPIF-- - ---FILE-- -loadXML($xmlstr); -if(!$dom) { - echo "Error while parsing the document\n"; - exit; -} - -$node = $dom->documentElement; - -$charnode = $dom->createElement('charnode'); -$node->appendChild($charnode); - -/* DOMComment */ -$comment = new DOMComment('Testing character data and extending nodes'); -$charnode->appendChild($comment); - -echo "Comment Length: ".$comment->length."\n"; - -$comment->data = 'Updated comment'; -echo "New Comment Length: ".$comment->length."\n"; -echo "New Comment Data: ".$comment->data."\n"; - -/* DOMCDataSection */ -$cdata = new DOMCDataSection('Chars: <>&"'); -$charnode->appendChild($cdata); - -echo "Substring: ".$cdata->substringData(7, 4)."\n"; -$cdata->replaceData(10, 1, "'"); -echo "New Substring: ".$cdata->substringData(7, 4)."\n"; - -/* DOMCharacterData using DOMComment */ -$comment = new DOMComment('instructions'); -echo "Comment Value: ".$comment->data."\n"; -$comment->data = 'some more instructions'; -echo "New Comment Value: ".$comment->data."\n"; - -$comment->insertData(10, 'pi '); -$comment->replaceData(18, 5, 'i'); -$comment->insertData(20, 'g'); -$comment->deleteData(13, 2); -$comment->deleteData(10, 3); -$comment->insertData(10, 'comment '); -echo "Updated Comment Value: ".$comment->data."\n"; - -/* DOMText */ -$text = new DOMText('some text characters'); - -echo "Whole Text: ".$text->wholeText."\n"; -$text2 = $text->splitText(9); - -echo "Split text: ".$text2->wholeText."\n"; -$text3 = $text2->splitText(1); - -echo "Is Whitespace?: ".($text2->isElementContentWhitespace()?'YES':'NO'); -?> ---EXPECT-- - -Comment Length: 42 -New Comment Length: 15 -New Comment Data: Updated comment -Substring: <>&" -New Substring: <>&' -Comment Value: instructions -New Comment Value: some more instructions -Updated Comment Value: some more comment strings -Whole Text: some text characters -Split text: characters -Is Whitespace?: YES diff --git a/ext/dom/tests/domdocument.phpt b/ext/dom/tests/domdocument.phpt deleted file mode 100644 index fb643cfceec87..0000000000000 --- a/ext/dom/tests/domdocument.phpt +++ /dev/null @@ -1,99 +0,0 @@ ---TEST-- -CharData: DOMCharacterData and related functionality ---SKIPIF-- - ---FILE-- -createElement('root'); -$dom->appendChild($root); - -$dom2 = new DOMDocument("1.0"); -$dom2->loadXML(b'data'); -$root2 = $dom2->documentElement; - -$imported = $dom->importNode($root2->firstChild, TRUE); - -$root->appendChild($imported); - -$att = $dom->createAttribute('imported'); -$attval = $dom->createTextNode('1'); -$att->appendChild($attval); -$imported->setAttributeNode($att); - -$comment = $dom->createComment('testing DOMDocument functionality'); -$dom->insertBefore($comment, $root); - -for ($x=1; $x < 3; $x++) { - if ($x == 2) { - $node = $dom->createElementNS('urn::foo', 'foo:child', 'data '); - $entity = $dom->createEntityReference('amp'); - $node->appendChild($entity); - $node->appendChild(new DOMText(' stuff')); - } else { - $node = $dom->createElementNS('urn::foo', 'foo:child'); - $data = $dom->createCDATASection('cdata'); - $node->appendChild($data); - } - $root->appendChild($node); - - $att = $dom->createAttributeNS('urn::foo', 'foo:bar'); - $att->appendChild($dom->createTextNode($x)); - $node->setAttributeNode($att); - $att = $dom->createAttribute('xml:id'); - $att->appendChild($dom->createTextNode('id'.$x)); - $node->setAttributeNode($att); -} - -$nodes = $dom->getElementsByTagName('child1'); -$node = $nodes->item(0); -$value = $dom->createProcessingInstruction('php', "echo 'Hello World'; "); -$node->replaceChild($value, $node->firstChild); - -$nodes = $dom->getElementsByTagNameNS('urn::foo', 'child'); -$node = $nodes->item(1); -$frag = $dom->createDocumentFragment(); -$frag->appendChild($node); - -var_dump($dom->saveXML($frag)); - -$file = dirname(__FILE__).'/dom.tmp'; -$dom->save($file); - -$doc = new DOMDocument(); -$doc->load($file); - -$node = $doc->getElementById('id1'); -$node->parentNode->removeChild($node); - -print "\n".$doc->saveXML(); - -unlink($file); - -$file = dirname(__FILE__).'/html.tmp'; -$doc->loadHTMLFile(dirname(__FILE__).'/test.html'); -$doc->saveHTMLFile($file); -$output = $doc->saveHTML(); -$dom->loadHTMLFile($file); -$output2 = $dom->saveHTML(); - -if ($output === $output2) { - print "\nOutput is identical\n"; -} else { - print "\nOutput is different\n"; -} - -unlink($file); -?> ---EXPECT-- - -string(85) "data & stuff" - - - - - -Output is identical - diff --git a/ext/dom/tests/domelement.phpt b/ext/dom/tests/domelement.phpt deleted file mode 100644 index bae0baa96455b..0000000000000 --- a/ext/dom/tests/domelement.phpt +++ /dev/null @@ -1,118 +0,0 @@ ---TEST-- -Elements: DOMElement functionality ---SKIPIF-- - ---FILE-- -loadXML($xmlstr); -if(!$dom) { - echo "Error while parsing the document\n"; - exit; -} - -$node = $dom->documentElement; -$node2 = $node->firstChild->parentNode; - -if ($node2->isSameNode($node)) { - echo "Tag Name: ".$node->tagName."\n"; -} - - -$node->setAttribute('num', '1'); -echo "Chapter: ".$node->getAttribute('num')."\n"; -echo 'Attribute num exists?: '.($node->hasAttribute('num')?'Yes':'No')."\n"; -$node->removeAttribute('num'); -echo "Chapter: ".$node->getAttribute('num')."\n"; -echo 'Attribute num exists?: '.($node->hasAttribute('num')?'Yes':'No')."\n"; - -echo "Language: ".$node->getAttribute('language')."\n"; -$lang = $node->getAttributeNode('language'); -$lang->nodeValue = 'en-US'; -$node->setAttributeNode($lang); -echo "Language: ".$node->getAttribute('language')."\n"; -$node->removeAttributeNode($lang); -echo "Language: ".$node->getAttribute('language')."\n"; - -echo "\n-- xml:lang --\n"; -$node->setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:lang', 'en'); -echo "Language: ".$node->getAttributeNS('http://www.w3.org/XML/1998/namespace', 'lang')."\n"; -echo 'Attribute xml:lang exists?: '.($node->hasAttributeNS('http://www.w3.org/XML/1998/namespace', 'lang')?'Yes':'No')."\n"; - -$node->removeAttributeNS('http://www.w3.org/XML/1998/namespace', 'lang'); -echo "Language: ".$node->getAttributeNS('http://www.w3.org/XML/1998/namespace', 'lang')."\n"; -echo 'Attribute xml:lang exists?: '.($node->hasAttributeNS('http://www.w3.org/XML/1998/namespace', 'lang')?'Yes':'No')."\n"; - -$lang = $dom->createAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:lang'); -$lang->nodeValue = 'en-GB'; -$node->setAttributeNodeNS($lang); -unset($lang); -echo "Language: ".$node->getAttributeNS('http://www.w3.org/XML/1998/namespace', 'lang')."\n"; -$lang = $node->getAttributeNodeNS('http://www.w3.org/XML/1998/namespace', 'lang'); -echo "Language: ".$lang->value."\n"; - -echo "\n-- Elements --\n"; -$rows = $node->getElementsByTagName('row'); -echo "Row Count: ".$rows->length."\n"; - -$element_ns = new DOMElement('newns:myelement', 'default content', 'urn::dummyns'); -$node->appendChild($element_ns); -$element_ns = new DOMElement('newns2:myelement', 'second default content', 'urn::dummyns'); -$node->appendChild($element_ns); - -$myelements = $node->getElementsByTagNameNS('urn::dummyns', 'myelement'); -$mylen = $myelements->length; -echo "myelements Count: ".$mylen."\n"; - -echo "\n-- IDs --\n"; -$node->setAttribute('idatt', 'n1'); -$node->setIdAttribute('idatt', TRUE); - -for ($x = 0; $x < $mylen; $x++) { - $current = $myelements->item($x); - $current->setAttributeNS('urn::dummyns', 'newns:idatt', 'n'.($x+2))."\n"; - $current->setIdAttributeNS('urn::dummyns', 'idatt', TRUE); -} - -echo 'Element Name: '.(($elem = $dom->getElementByID('n1'))?$elem->localName:'Not Found')."\n"; -$idatt = $node->getAttributeNode('idatt'); -$node->setIdAttributeNode($idatt, FALSE); -echo 'Element Name: '.(($elem = $dom->getElementByID('n1'))?$elem->localName:'Not Found')."\n"; - -echo 'Element Name: '.(($elem = $dom->getElementByID('n3'))?$elem->nodeName:'Not Found')."\n"; -for ($x = 0; $x < $mylen; $x++) { - $node = $myelements->item($x); - $node->setIdAttributeNS('urn::dummyns', 'idatt', FALSE); -} -echo 'Element Name: '.(($elem = $dom->getElementByID('n3'))?$elem->nodeName:'Not Found')."\n"; -?> ---EXPECT-- - -Tag Name: chapter -Chapter: 1 -Attribute num exists?: Yes -Chapter: -Attribute num exists?: No -Language: en -Language: en-US -Language: - --- xml:lang -- -Language: en -Attribute xml:lang exists?: Yes -Language: -Attribute xml:lang exists?: No -Language: en-GB -Language: en-GB - --- Elements -- -Row Count: 3 -myelements Count: 2 - --- IDs -- -Element Name: chapter -Element Name: Not Found -Element Name: newns2:myelement -Element Name: Not Found diff --git a/ext/dom/tests/domfragment.phpt b/ext/dom/tests/domfragment.phpt deleted file mode 100644 index 391cb6b70710e..0000000000000 --- a/ext/dom/tests/domfragment.phpt +++ /dev/null @@ -1,36 +0,0 @@ ---TEST-- -DOMDocumentFragment Tests ---SKIPIF-- - ---FILE-- -loadXML(b''); -if(!$dom) { - echo "Error while parsing the document\n"; - exit; -} - -$node = $dom->documentElement; - -try { - $frag1 = new DOMDocumentFragment(); - $frag1->appendXML('1'); - $node->appendXML($frag1); -} catch (DOMException $e) { - print "Read Only!\n\n"; -} - -$frag2 = $dom->createDocumentFragment(); -$frag2->appendXML('2'); -$node->appendChild($frag2); - -print $dom->saveXML(); -?> ---EXPECT-- -Read Only! - - -2 diff --git a/ext/dom/tests/domimplementation.phpt b/ext/dom/tests/domimplementation.phpt deleted file mode 100644 index 3ec69d677c556..0000000000000 --- a/ext/dom/tests/domimplementation.phpt +++ /dev/null @@ -1,27 +0,0 @@ ---TEST-- -DOMImplementation Tests ---SKIPIF-- - ---FILE-- -hasFeature("1.0", "Core")); - -$doctype = $domimp->createDocumentType("HTML", "-//W3C//DTD HTML 4.01//EN", "http://www.w3.org/TR/html4/strict.dtd"); - -$dom = $domimp->createDocument(NULL, "HTML", $doctype); - -$html = $dom->documentElement; - -$html->appendChild(new DOMElement("body", "hello world")); -$html->firstChild->appendChild(new DOMEntityReference("preformatted")); - -print $dom->saveXML(); -?> ---EXPECT-- -bool(false) - - -hello world&preformatted; diff --git a/ext/dom/tests/dompi.phpt b/ext/dom/tests/dompi.phpt deleted file mode 100644 index db26e346de252..0000000000000 --- a/ext/dom/tests/dompi.phpt +++ /dev/null @@ -1,26 +0,0 @@ ---TEST-- -DOMProcessingInstruction Tests ---SKIPIF-- - ---FILE-- -loadXML(b''); - -$pi = new DOMProcessingInstruction("mypi", "my instructions"); - -$dom->documentElement->appendChild($pi); - -print $pi->target."\n"; -print $pi->data."\n"; -$pi->data = "my new instructions"; - -print $dom->saveXML(); -?> ---EXPECT-- -mypi -my instructions - - diff --git a/ext/dom/tests/domxpath.phpt b/ext/dom/tests/domxpath.phpt deleted file mode 100644 index 82396b5218162..0000000000000 --- a/ext/dom/tests/domxpath.phpt +++ /dev/null @@ -1,58 +0,0 @@ ---TEST-- -DOMXPath Tests ---SKIPIF-- - ---FILE-- -textContent; - } - if ($val > 0) { - return $val/$count; - } else { - return 0; - } -} - -$dom = new DOMDocument; -$dom->loadXML(b'myval'); - -$xpath = new DOMXPath($dom); - -$xpath->registerPHPFunctions('MyAverage'); -$xpath->registerNamespace("php", "http://php.net/xpath"); - -$xpath->registerNamespace("def", "urn::default"); -$nodelist = $xpath->query("//def:child"); -if ($node = $nodelist->item(0)) { - print $node->textContent."\n"; -} - -$count = $xpath->evaluate("count(//def:child)"); - -var_dump($count); - -$xpathdoc = $xpath->document; - -var_dump($xpathdoc instanceof DOMDocument); - -$root = $dom->documentElement; -$root->appendChild($dom->createElementNS("urn::default", "testnode", 3)); -$root->appendChild($dom->createElementNS("urn::default", "testnode", 4)); -$root->appendChild($dom->createElementNS("urn::default", "testnode", 4)); -$root->appendChild($dom->createElementNS("urn::default", "testnode", 5)); - -$avg = $xpath->evaluate('number(php:function("MyAverage", //def:testnode))'); -var_dump($avg); -?> ---EXPECT-- -myval -float(1) -bool(true) -float(4) \ No newline at end of file diff --git a/ext/dom/tests/nsdoc.xml b/ext/dom/tests/nsdoc.xml deleted file mode 100644 index 9503fd8c5b1ad..0000000000000 --- a/ext/dom/tests/nsdoc.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/ext/dom/tests/regsiter_node_class.phpt b/ext/dom/tests/regsiter_node_class.phpt deleted file mode 100644 index 5444cc4b9ea82..0000000000000 --- a/ext/dom/tests/regsiter_node_class.phpt +++ /dev/null @@ -1,43 +0,0 @@ ---TEST-- -Test: registerNodeClass() ---SKIPIF-- - ---FILE-- -registerNodeClass('DOMAttr', 'myAttribute'); -$doc->registerNodeClass('DOMElement', 'myElement'); -$doc->appendChild(new DOMElement('root')); -$root = $doc->documentElement; -$root->setAttribute('a', 'a1'); -var_dump($root); -print $root->testit()."\n"; -$attr = $root->getAttributeNode('a'); -var_dump($attr); -print $attr->testit()."\n"; -unset($attr); -$doc->registerNodeClass('DOMAttr', NULL); -$attr = $root->getAttributeNode('a'); -var_dump($attr); -print $attr->testit()."\n"; -?> ---EXPECTF-- - -object(myElement)#%d (0) { -} -HELLO Element -object(myAttribute)#%d (0) { -} -HELLO Attribute -object(DOMAttr)#%d (0) { -} - -Fatal error: Call to undefined method DOMAttr::testit() in %s on line 25 diff --git a/ext/dom/tests/skipif.inc b/ext/dom/tests/skipif.inc deleted file mode 100644 index 08fd695d97eba..0000000000000 --- a/ext/dom/tests/skipif.inc +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ext/dom/tests/test.html b/ext/dom/tests/test.html deleted file mode 100644 index fe6d0d3dbc1cc..0000000000000 --- a/ext/dom/tests/test.html +++ /dev/null @@ -1,9 +0,0 @@ - - -Hello world - - -This is a not well-formed
-html files with undeclared entities  - - diff --git a/ext/dom/tests/xinclude.xml b/ext/dom/tests/xinclude.xml deleted file mode 100644 index 27efa91aee06c..0000000000000 --- a/ext/dom/tests/xinclude.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/ext/dom/text.c b/ext/dom/text.c deleted file mode 100644 index 73fdd612c4bd9..0000000000000 --- a/ext/dom/text.c +++ /dev/null @@ -1,207 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" -#include "dom_ce.h" - -/* -* class DOMText extends DOMCharacterData -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-1312295772 -* Since: -*/ - -zend_function_entry php_dom_text_class_functions[] = { - PHP_FALIAS(splitText, dom_text_split_text, NULL) - PHP_FALIAS(isWhitespaceInElementContent, dom_text_is_whitespace_in_element_content, NULL) - PHP_FALIAS(isElementContentWhitespace, dom_text_is_whitespace_in_element_content, NULL) - PHP_FALIAS(replaceWholeText, dom_text_replace_whole_text, NULL) - PHP_ME(domtext, __construct, NULL, ZEND_ACC_PUBLIC) - {NULL, NULL, NULL} -}; - -/* {{{ proto void DOMText::__construct([string value]) U */ -PHP_METHOD(domtext, __construct) -{ - - zval *id; - xmlNodePtr nodep = NULL, oldnode = NULL; - dom_object *intern; - char *value = NULL; - int value_len; - - php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC); - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|s&", &id, dom_text_class_entry, &value, &value_len, UG(utf8_conv)) == FAILURE) { - php_std_error_handling(); - return; - } - php_std_error_handling(); - - nodep = xmlNewText((xmlChar *) value); - - if (!nodep) { - php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC); - RETURN_FALSE; - } - - intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); - if (intern != NULL) { - oldnode = (xmlNodePtr)intern->ptr; - if (oldnode != NULL) { - php_libxml_node_free_resource(oldnode TSRMLS_CC); - } - php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC); - } -} -/* }}} end DOMText::__construct */ - -/* {{{ wholeText string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-wholeText -Since: DOM Level 3 -*/ -int dom_text_whole_text_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlNodePtr node; - xmlChar *wholetext; - - node = dom_object_get_node(obj); - - if (node == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC); - return FAILURE; - } - - ALLOC_ZVAL(*retval); - wholetext = xmlNodeListGetString(node->doc, node, 1); - ZVAL_XML_STRING(*retval, wholetext, ZSTR_DUPLICATE); - - xmlFree(wholetext); - - return SUCCESS; -} - -/* }}} */ - - -/* {{{ proto DOMText dom_text_split_text(int offset) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-38853C1D -Since: -*/ -PHP_FUNCTION(dom_text_split_text) -{ - zval *id; - xmlChar *cur; - xmlChar *first; - xmlChar *second; - xmlNodePtr node; - xmlNodePtr nnode; - long offset; - int ret; - int length; - dom_object *intern; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &id, dom_text_class_entry, &offset) == FAILURE) { - return; - } - DOM_GET_OBJ(node, id, xmlNodePtr, intern); - - if (node->type != XML_TEXT_NODE) { - RETURN_FALSE; - } - - cur = xmlNodeGetContent(node); - if (cur == NULL) { - RETURN_FALSE; - } - length = xmlStrlen(cur); - - if (offset > length || offset < 0) { - xmlFree(cur); - RETURN_FALSE; - } - - first = xmlStrndup(cur, offset); - second = xmlStrdup(cur + offset); - - xmlFree(cur); - - xmlNodeSetContentLen(node, first, offset); - nnode = xmlNewDocText(node->doc, second); - - xmlFree(first); - xmlFree(second); - - if (nnode == NULL) { - RETURN_FALSE; - } - - if (node->parent != NULL) { - nnode->type = XML_ELEMENT_NODE; - xmlAddNextSibling(node, nnode); - nnode->type = XML_TEXT_NODE; - } - - return_value = php_dom_create_object(nnode, &ret, NULL, return_value, intern TSRMLS_CC); -} -/* }}} end dom_text_split_text */ - - -/* {{{ proto boolean dom_text_is_whitespace_in_element_content() U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-isWhitespaceInElementContent -Since: DOM Level 3 -*/ -PHP_FUNCTION(dom_text_is_whitespace_in_element_content) -{ - zval *id; - xmlNodePtr node; - dom_object *intern; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &id, dom_text_class_entry) == FAILURE) { - return; - } - DOM_GET_OBJ(node, id, xmlNodePtr, intern); - - if (xmlIsBlankNode(node)) { - RETURN_TRUE; - } else { - RETURN_FALSE; - } -} -/* }}} end dom_text_is_whitespace_in_element_content */ - - -/* {{{ proto DOMText dom_text_replace_whole_text(string content) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-replaceWholeText -Since: DOM Level 3 -*/ -PHP_FUNCTION(dom_text_replace_whole_text) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_text_replace_whole_text */ -#endif diff --git a/ext/dom/typeinfo.c b/ext/dom/typeinfo.c deleted file mode 100644 index 338e58dd28631..0000000000000 --- a/ext/dom/typeinfo.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class domtypeinfo -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#TypeInfo -* Since: DOM Level 3 -*/ - -zend_function_entry php_dom_typeinfo_class_functions[] = { - {NULL, NULL, NULL} -}; - -/* {{{ attribute protos, not implemented yet */ - -/* {{{ type_name string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#TypeInfo-typeName -Since: -*/ -int dom_typeinfo_type_name_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_NULL(*retval); - return SUCCESS; -} - -/* }}} */ - - - -/* {{{ type_namespace string -readonly=yes -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#TypeInfo-typeNamespace -Since: -*/ -int dom_typeinfo_type_namespace_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - ALLOC_ZVAL(*retval); - ZVAL_NULL(*retval); - return SUCCESS; -} - -/* }}} */ - -#endif diff --git a/ext/dom/userdatahandler.c b/ext/dom/userdatahandler.c deleted file mode 100644 index 8f5bdc00498ed..0000000000000 --- a/ext/dom/userdatahandler.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - - -/* -* class domuserdatahandler -* -* URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#UserDataHandler -* Since: DOM Level 3 -*/ - -zend_function_entry php_dom_userdatahandler_class_functions[] = { - PHP_FALIAS(handle, dom_userdatahandler_handle, NULL) - {NULL, NULL, NULL} -}; - -/* {{{ attribute protos, not implemented yet */ - - -/* {{{ proto dom_void dom_userdatahandler_handle(short operation, string key, domobject data, node src, node dst) U -URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-handleUserDataEvent -Since: -*/ -PHP_FUNCTION(dom_userdatahandler_handle) -{ - DOM_NOT_IMPLEMENTED(); -} -/* }}} end dom_userdatahandler_handle */ -#endif diff --git a/ext/dom/xml_common.h b/ext/dom/xml_common.h deleted file mode 100644 index 4f1f6c1811760..0000000000000 --- a/ext/dom/xml_common.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef PHP_XML_COMMON_H -#define PHP_XML_COMMON_H - -#include "ext/libxml/php_libxml.h" - -typedef libxml_doc_props *dom_doc_propsptr; - -typedef struct _dom_object { - zend_object std; - void *ptr; - php_libxml_ref_obj *document; - HashTable *prop_handler; - zend_object_handle handle; -} dom_object; - -#ifdef PHP_WIN32 -#ifdef PHPAPI -#undef PHPAPI -#endif -#ifdef DOM_EXPORTS -#define PHPAPI __declspec(dllexport) -#else -#define PHPAPI __declspec(dllimport) -#endif /* DOM_EXPORTS */ -#endif /* PHP_WIN32 */ - -#define PHP_DOM_EXPORT PHPAPI - -PHP_DOM_EXPORT extern zend_class_entry *dom_node_class_entry; -PHP_DOM_EXPORT dom_object *php_dom_object_get_data(xmlNodePtr obj); -PHP_DOM_EXPORT zval *php_dom_create_object(xmlNodePtr obj, int *found, zval *in, zval* return_value, dom_object *domobj TSRMLS_DC); -PHP_DOM_EXPORT xmlNodePtr dom_object_get_node(dom_object *obj); - -#define DOM_XMLNS_NAMESPACE \ - (const xmlChar *) "http://www.w3.org/2000/xmlns/" - -#define NODE_GET_OBJ(__ptr, __id, __prtype, __intern) { \ - __intern = (php_libxml_node_object *)zend_object_store_get_object(__id TSRMLS_CC); \ - if (__intern->node == NULL || !(__ptr = (__prtype)__intern->node->node)) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %v", __intern->std.ce->name);\ - RETURN_NULL();\ - } \ -} - -#define DOC_GET_OBJ(__ptr, __id, __prtype, __intern) { \ - __intern = (php_libxml_node_object *)zend_object_store_get_object(__id TSRMLS_CC); \ - if (__intern->document != NULL) { \ - if (!(__ptr = (__prtype)__intern->document->ptr)) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't fetch %v", __intern->std.ce->name);\ - RETURN_NULL();\ - } \ - } \ -} - -#define DOM_RET_OBJ(zval, obj, ret, domobject) \ - if (NULL == (zval = php_dom_create_object(obj, ret, zval, return_value, domobject TSRMLS_CC))) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object"); \ - RETURN_FALSE; \ - } - -#define DOM_GET_THIS(zval) \ - if (NULL == (zval = getThis())) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Underlying object missing"); \ - RETURN_FALSE; \ - } - -#define DOM_GET_THIS_OBJ(__ptr, __id, __prtype, __intern) \ - DOM_GET_THIS(__id); \ - DOM_GET_OBJ(__ptr, __id, __prtype, __intern); - -#endif diff --git a/ext/dom/xpath.c b/ext/dom/xpath.c deleted file mode 100644 index 2862e4a32f630..0000000000000 --- a/ext/dom/xpath.c +++ /dev/null @@ -1,547 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Christian Stocker | - | Rob Richards | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#if HAVE_LIBXML && HAVE_DOM -#include "php_dom.h" - -#define PHP_DOM_XPATH_QUERY 0 -#define PHP_DOM_XPATH_EVALUATE 1 - -/* -* class DOMXPath -*/ - -#if defined(LIBXML_XPATH_ENABLED) - -zend_function_entry php_dom_xpath_class_functions[] = { - PHP_ME(domxpath, __construct, NULL, ZEND_ACC_PUBLIC) - PHP_FALIAS(registerNamespace, dom_xpath_register_ns, NULL) - PHP_FALIAS(query, dom_xpath_query, NULL) - PHP_FALIAS(evaluate, dom_xpath_evaluate, NULL) - PHP_FALIAS(registerPhpFunctions, dom_xpath_register_php_functions, NULL) - {NULL, NULL, NULL} -}; - - -static void dom_xpath_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs, int type) -{ - zval **args; - zval *retval; - int result, i, ret; - int error = 0; - zend_fcall_info fci; - zval handler; - xmlXPathObjectPtr obj; - char *str; - zval callable; - dom_xpath_object *intern; - - TSRMLS_FETCH(); - - if (! zend_is_executing(TSRMLS_C)) { - xmlGenericError(xmlGenericErrorContext, - "xmlExtFunctionTest: Function called from outside of PHP\n"); - error = 1; - } else { - intern = (dom_xpath_object *) ctxt->context->userData; - if (intern == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlExtFunctionTest: failed to get the internal object\n"); - error = 1; - } - else if (intern->registerPhpFunctions == 0) { - xmlGenericError(xmlGenericErrorContext, - "xmlExtFunctionTest: PHP Object did not register PHP functions\n"); - error = 1; - } - } - - if (error == 1) { - for (i = nargs - 1; i >= 0; i--) { - obj = valuePop(ctxt); - xmlXPathFreeObject(obj); - } - return; - } - - fci.param_count = nargs - 1; - if (fci.param_count > 0) { - fci.params = safe_emalloc(fci.param_count, sizeof(zval**), 0); - args = safe_emalloc(fci.param_count, sizeof(zval *), 0); - } - /* Reverse order to pop values off ctxt stack */ - for (i = nargs - 2; i >= 0; i--) { - obj = valuePop(ctxt); - MAKE_STD_ZVAL(args[i]); - switch (obj->type) { - case XPATH_STRING: - ZVAL_STRING(args[i], (char *)obj->stringval, 1); - break; - case XPATH_BOOLEAN: - ZVAL_BOOL(args[i], obj->boolval); - break; - case XPATH_NUMBER: - ZVAL_DOUBLE(args[i], obj->floatval); - break; - case XPATH_NODESET: - if (type == 1) { - str = (char *)xmlXPathCastToString(obj); - ZVAL_STRING(args[i], str, 1); - xmlFree(str); - } else if (type == 2) { - int j; - array_init(args[i]); - if (obj->nodesetval && obj->nodesetval->nodeNr > 0) { - for (j = 0; j < obj->nodesetval->nodeNr; j++) { - xmlNodePtr node = obj->nodesetval->nodeTab[j]; - zval *child; - MAKE_STD_ZVAL(child); - /* not sure, if we need this... it's copied from xpath.c */ - if (node->type == XML_NAMESPACE_DECL) { - xmlNsPtr curns; - xmlNodePtr nsparent; - - nsparent = node->_private; - curns = xmlNewNs(NULL, node->name, NULL); - if (node->children) { - curns->prefix = xmlStrdup((xmlChar *) node->children); - } - if (node->children) { - node = xmlNewDocNode(node->doc, NULL, (xmlChar *) node->children, node->name); - } else { - node = xmlNewDocNode(node->doc, NULL, (xmlChar *) "xmlns", node->name); - } - node->type = XML_NAMESPACE_DECL; - node->parent = nsparent; - node->ns = curns; - } - child = php_dom_create_object(node, &ret, NULL, child, (dom_object *)intern TSRMLS_CC); - add_next_index_zval(args[i], child); - } - } - } - break; - default: - ZVAL_STRING(args[i], (char *)xmlXPathCastToString(obj), 1); - } - xmlXPathFreeObject(obj); - fci.params[i] = &args[i]; - } - - fci.size = sizeof(fci); - fci.function_table = EG(function_table); - - obj = valuePop(ctxt); - if (obj->stringval == NULL) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Handler name must be a string"); - xmlXPathFreeObject(obj); - if (fci.param_count > 0) { - for (i = 0; i < nargs - 1; i++) { - zval_ptr_dtor(&args[i]); - } - efree(args); - efree(fci.params); - } - return; - } - INIT_PZVAL(&handler); - ZVAL_XML_STRING(&handler, (char *)obj->stringval, 1); - xmlXPathFreeObject(obj); - - fci.function_name = &handler; - fci.symbol_table = NULL; - fci.object_pp = NULL; - fci.retval_ptr_ptr = &retval; - fci.no_separation = 0; - /*fci.function_handler_cache = &function_ptr;*/ - if (!zend_make_callable(&handler, &callable TSRMLS_CC)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call handler %R()", Z_TYPE(callable), Z_UNIVAL(callable)); - - } else if ( intern->registerPhpFunctions == 2 && zend_u_hash_exists(intern->registered_phpfunctions, Z_TYPE(callable), Z_UNIVAL(callable), Z_UNILEN(callable) + 1) == 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not allowed to call handler '%R()'", Z_TYPE(callable), Z_UNIVAL(callable)); - // Push an empty string, so that we at least have a result... - valuePush(ctxt, xmlXPathNewString((xmlChar *)"")); - } else { - result = zend_call_function(&fci, NULL TSRMLS_CC); - if (result == FAILURE) { - if (Z_TYPE(callable) == IS_STRING || Z_TYPE(callable) == IS_UNICODE) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call handler '%R()'", Z_TYPE(callable), Z_UNIVAL(callable)); - } - /* retval is == NULL, when an exception occured, don't report anything, because PHP itself will handle that */ - } else if (retval == NULL) { - } else { - if (retval->type == IS_OBJECT && instanceof_function( Z_OBJCE_P(retval), dom_node_class_entry TSRMLS_CC)) { - xmlNode *nodep; - dom_object *obj; - if (intern->node_list == NULL) { - ALLOC_HASHTABLE(intern->node_list); - zend_hash_init(intern->node_list, 0, NULL, ZVAL_PTR_DTOR, 0); - } - zval_add_ref(&retval); - zend_hash_next_index_insert(intern->node_list, &retval, sizeof(zval *), NULL); - obj = (dom_object *)zend_object_store_get_object(retval TSRMLS_CC); - nodep = dom_object_get_node(obj); - valuePush(ctxt, xmlXPathNewNodeSet(nodep)); - } else if (retval->type == IS_BOOL) { - valuePush(ctxt, xmlXPathNewBoolean(retval->value.lval)); - } else if (retval->type == IS_OBJECT) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "A PHP Object can not be converted to a XPath-string"); - valuePush(ctxt, xmlXPathNewString((xmlChar *)"")); - } else { - convert_to_string_with_converter(retval, UG(utf8_conv)); - valuePush(ctxt, xmlXPathNewString((xmlChar *) Z_STRVAL_P(retval))); - } - zval_ptr_dtor(&retval); - } - } - zval_dtor(&callable); - zval_dtor(&handler); - if (fci.param_count > 0) { - for (i = 0; i < nargs - 1; i++) { - zval_ptr_dtor(&args[i]); - } - efree(args); - efree(fci.params); - } -} - -static void dom_xpath_ext_function_string_php(xmlXPathParserContextPtr ctxt, int nargs) -{ - dom_xpath_ext_function_php(ctxt, nargs, 1); -} - -static void dom_xpath_ext_function_object_php(xmlXPathParserContextPtr ctxt, int nargs) -{ - dom_xpath_ext_function_php(ctxt, nargs, 2); -} - -/* {{{ proto void DOMXPath::__construct(DOMDocument doc) U */ -PHP_METHOD(domxpath, __construct) -{ - zval *id, *doc; - xmlDocPtr docp = NULL; - dom_object *docobj; - dom_xpath_object *intern; - xmlXPathContextPtr ctx, oldctx; - - php_set_error_handling(EH_THROW, dom_domexception_class_entry TSRMLS_CC); - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &id, dom_xpath_class_entry, &doc, dom_document_class_entry) == FAILURE) { - php_std_error_handling(); - return; - } - - php_std_error_handling(); - DOM_GET_OBJ(docp, doc, xmlDocPtr, docobj); - - ctx = xmlXPathNewContext(docp); - if (ctx == NULL) { - php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC); - RETURN_FALSE; - } - - intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); - if (intern != NULL) { - oldctx = (xmlXPathContextPtr)intern->ptr; - if (oldctx != NULL) { - php_libxml_decrement_doc_ref((php_libxml_node_object *)intern TSRMLS_CC); - xmlXPathFreeContext(oldctx); - } - - xmlXPathRegisterFuncNS (ctx, (const xmlChar *) "functionString", - (const xmlChar *) "http://php.net/xpath", - dom_xpath_ext_function_string_php); - xmlXPathRegisterFuncNS (ctx, (const xmlChar *) "function", - (const xmlChar *) "http://php.net/xpath", - dom_xpath_ext_function_object_php); - - intern->ptr = ctx; - ctx->userData = (void *)intern; - intern->document = docobj->document; - php_libxml_increment_doc_ref((php_libxml_node_object *)intern, docp TSRMLS_CC); - } -} -/* }}} end DOMXPath::__construct */ - -/* {{{ document DOMDocument*/ -int dom_xpath_document_read(dom_object *obj, zval **retval TSRMLS_DC) -{ - xmlDoc *docp = NULL; - xmlXPathContextPtr ctx; - int ret; - - ctx = (xmlXPathContextPtr) obj->ptr; - - if (ctx) { - docp = (xmlDocPtr) ctx->doc; - } - - ALLOC_ZVAL(*retval); - if (NULL == (*retval = php_dom_create_object((xmlNodePtr) docp, &ret, NULL, *retval, obj TSRMLS_CC))) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object"); - return FAILURE; - } - return SUCCESS; -} - -/* {{{ proto boolean dom_xpath_register_ns(string prefix, string uri) U */ -PHP_FUNCTION(dom_xpath_register_ns) -{ - zval *id; - xmlXPathContextPtr ctxp; - int prefix_len, ns_uri_len; - dom_xpath_object *intern; - unsigned char *prefix, *ns_uri; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&s&", &id, dom_xpath_class_entry, &prefix, &prefix_len, UG(utf8_conv), &ns_uri, &ns_uri_len, UG(utf8_conv)) == FAILURE) { - return; - } - - intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); - - ctxp = (xmlXPathContextPtr) intern->ptr; - if (ctxp == NULL) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid XPath Context"); - RETURN_FALSE; - } - - if (xmlXPathRegisterNs(ctxp, prefix, ns_uri) != 0) { - RETURN_FALSE - } - RETURN_TRUE; -} - -static void dom_xpath_iter(zval *baseobj, dom_object *intern) -{ - dom_nnodemap_object *mapptr; - - mapptr = (dom_nnodemap_object *)intern->ptr; - mapptr->baseobjptr = baseobj; - mapptr->nodetype = DOM_NODESET; - -} - -static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) { - zval *id, *retval, *context = NULL; - xmlXPathContextPtr ctxp; - xmlNodePtr nodep = NULL; - xmlXPathObjectPtr xpathobjp; - int expr_len, ret, nsnbr = 0, xpath_type; - dom_xpath_object *intern; - dom_object *nodeobj; - char *expr; - xmlDoc *docp = NULL; - xmlNsPtr *ns; - - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os&|O", &id, dom_xpath_class_entry, &expr, &expr_len, UG(utf8_conv), &context, dom_node_class_entry) == FAILURE) { - return; - } - - intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); - - ctxp = (xmlXPathContextPtr) intern->ptr; - if (ctxp == NULL) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid XPath Context"); - RETURN_FALSE; - } - - docp = (xmlDocPtr) ctxp->doc; - if (docp == NULL) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid XPath Document Pointer"); - RETURN_FALSE; - } - - if (context != NULL) { - DOM_GET_OBJ(nodep, context, xmlNodePtr, nodeobj); - } - - if (!nodep) { - nodep = xmlDocGetRootElement(docp); - } - - if (nodep && docp != nodep->doc) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Node From Wrong Document"); - RETURN_FALSE; - } - - ctxp->node = nodep; - - /* Register namespaces in the node */ - ns = xmlGetNsList(docp, nodep); - - if (ns != NULL) { - while (ns[nsnbr] != NULL) - nsnbr++; - } - - - ctxp->namespaces = ns; - ctxp->nsNr = nsnbr; - - xpathobjp = xmlXPathEvalExpression(expr, ctxp); - ctxp->node = NULL; - - if (ns != NULL) { - xmlFree(ns); - ctxp->namespaces = NULL; - ctxp->nsNr = 0; - } - - if (! xpathobjp) { - RETURN_FALSE; - } - - if (type == PHP_DOM_XPATH_QUERY) { - xpath_type = XPATH_NODESET; - } else { - xpath_type = xpathobjp->type; - } - - switch (xpath_type) { - - case XPATH_NODESET: - { - int i; - xmlNodeSetPtr nodesetp; - - MAKE_STD_ZVAL(retval); - array_init(retval); - - if (xpathobjp->type == XPATH_NODESET && NULL != (nodesetp = xpathobjp->nodesetval)) { - - for (i = 0; i < nodesetp->nodeNr; i++) { - xmlNodePtr node = nodesetp->nodeTab[i]; - zval *child; - - MAKE_STD_ZVAL(child); - - if (node->type == XML_NAMESPACE_DECL) { - xmlNsPtr curns; - xmlNodePtr nsparent; - - nsparent = node->_private; - curns = xmlNewNs(NULL, node->name, NULL); - if (node->children) { - curns->prefix = xmlStrdup((char *) node->children); - } - if (node->children) { - node = xmlNewDocNode(docp, NULL, (char *) node->children, node->name); - } else { - node = xmlNewDocNode(docp, NULL, "xmlns", node->name); - } - node->type = XML_NAMESPACE_DECL; - node->parent = nsparent; - node->ns = curns; - } - child = php_dom_create_object(node, &ret, NULL, child, (dom_object *)intern TSRMLS_CC); - add_next_index_zval(retval, child); - } - } - php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC); - nodeobj = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC); - dom_xpath_iter(retval, nodeobj); - break; - } - - case XPATH_BOOLEAN: - RETVAL_BOOL(xpathobjp->boolval); - break; - - case XPATH_NUMBER: - RETVAL_DOUBLE(xpathobjp->floatval) - break; - - case XPATH_STRING: - RETVAL_STRING(xpathobjp->stringval, 1); - break; - - default: - RETVAL_NULL(); - break; - } - - xmlXPathFreeObject(xpathobjp); -} - -/* {{{ proto DOMNodeList dom_xpath_query(string expr [,DOMNode context]) U */ -PHP_FUNCTION(dom_xpath_query) -{ - php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_QUERY); -} -/* }}} end dom_xpath_query */ - -/* {{{ proto mixed dom_xpath_evaluate(string expr [,DOMNode context]) U */ -PHP_FUNCTION(dom_xpath_evaluate) -{ - php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_EVALUATE); -} -/* }}} end dom_xpath_evaluate */ - -/* {{{ proto void dom_xpath_register_php_functions() U */ -PHP_FUNCTION(dom_xpath_register_php_functions) -{ - zval *id; - dom_xpath_object *intern; - zval *array_value, **entry, *new_string; - int name_len = 0; - zstr name; - zend_uchar name_type; - - DOM_GET_THIS(id); - - if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "a", &array_value) == SUCCESS) { - intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); - zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value)); - - while (zend_hash_get_current_data(Z_ARRVAL_P(array_value), (void **)&entry) == SUCCESS) { - MAKE_STD_ZVAL(new_string); - ZVAL_LONG(new_string,1); - - zend_u_hash_update(intern->registered_phpfunctions, Z_TYPE_PP(entry), Z_UNIVAL_PP(entry), Z_UNILEN_PP(entry) + 1, &new_string, sizeof(zval*), NULL); - zend_hash_move_forward(Z_ARRVAL_P(array_value)); - } - intern->registerPhpFunctions = 2; - RETURN_TRUE; - - } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "t", &name, &name_len, &name_type) == SUCCESS) { - intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); - - MAKE_STD_ZVAL(new_string); - ZVAL_LONG(new_string,1); - zend_u_hash_update(intern->registered_phpfunctions, name_type, name, name_len + 1, &new_string, sizeof(zval*), NULL); - intern->registerPhpFunctions = 2; - - } else { - intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); - intern->registerPhpFunctions = 1; - } - -} -/* }}} end dom_xpath_register_php_functions */ - -#endif /* LIBXML_XPATH_ENABLED */ - -/* }}} */ -#endif diff --git a/ext/enchant/CREDITS b/ext/enchant/CREDITS deleted file mode 100644 index 481febbfc286b..0000000000000 --- a/ext/enchant/CREDITS +++ /dev/null @@ -1,2 +0,0 @@ -enchant -Pierre-Alain Joye, Ilia Alshanetsky diff --git a/ext/enchant/config.m4 b/ext/enchant/config.m4 deleted file mode 100755 index b59cd8fb3cb85..0000000000000 --- a/ext/enchant/config.m4 +++ /dev/null @@ -1,36 +0,0 @@ -dnl -dnl $Id$ -dnl - -PHP_ARG_WITH(enchant,for ENCHANT support, -[ --with-enchant[=DIR] Include enchant support. - GNU Aspell version 1.1.3 or higher required.]) - -if test "$PHP_ENCHANT" != "no"; then - PHP_NEW_EXTENSION(enchant, enchant.c, $ext_shared) - if test "$PHP_ENCHANT" != "yes"; then - ENCHANT_SEARCH_DIRS=$PHP_ENCHANT - else - ENCHANT_SEARCH_DIRS="/usr/local /usr" - fi - for i in $ENCHANT_SEARCH_DIRS; do - if test -f $i/include/enchant/enchant.h; then - ENCHANT_DIR=$i - ENCHANT_INCDIR=$i/include/enchant - elif test -f $i/include/enchant.h; then - ENCHANT_DIR=$i - ENCHANT_INCDIR=$i/include - fi - done - - if test -z "$ENCHANT_DIR"; then - AC_MSG_ERROR(Cannot find enchant) - fi - - ENCHANT_LIBDIR=$ENCHANT_DIR/lib - - AC_DEFINE(HAVE_ENCHANT,1,[ ]) - PHP_SUBST(ENCHANT_SHARED_LIBADD) - PHP_ADD_LIBRARY_WITH_PATH(enchant, $ENCHANT_LIBDIR, ENCHANT_SHARED_LIBADD) - PHP_ADD_INCLUDE($ENCHANT_INCDIR) -fi diff --git a/ext/enchant/config.w32 b/ext/enchant/config.w32 deleted file mode 100644 index f9ba6beafc332..0000000000000 --- a/ext/enchant/config.w32 +++ /dev/null @@ -1,13 +0,0 @@ -// $Id$ -// vim:ft=javascript - -ARG_ENABLE("enchant", "Enchant Support", "no"); - -if (PHP_ENCHANT == "yes") { - if (CHECK_HEADER_ADD_INCLUDE("enchant.h", "CFLAGS_ENCHANT", PHP_ENCHANT)) { - EXTENSION("enchant", "enchant.c"); - AC_DEFINE('HAVE_ENCHANT', 1, 'Have Enchant support', false); - } else { - WARNING('Could not find enchant.h; skipping'); - } -} diff --git a/ext/enchant/docs/examples/example1.php b/ext/enchant/docs/examples/example1.php deleted file mode 100644 index 9d503f74e66d3..0000000000000 --- a/ext/enchant/docs/examples/example1.php +++ /dev/null @@ -1,25 +0,0 @@ - diff --git a/ext/enchant/enchant.c b/ext/enchant/enchant.c deleted file mode 100755 index 07ae10207c364..0000000000000 --- a/ext/enchant/enchant.c +++ /dev/null @@ -1,776 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2004 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 3.0 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/3_0.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Pierre-Alain Joye | - | Ilia Alshanetsky | - +----------------------------------------------------------------------+ - - $Id$ -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include "enchant.h" -#include "php.h" -#include "php_ini.h" -#include "ext/standard/info.h" -#include "php_enchant.h" - - -typedef EnchantBroker * EnchantBrokerPtr; -typedef struct _broker_struct enchant_broker; -typedef struct _dict_struct enchant_dict; - -typedef enchant_broker * enchant_brokerPtr; -typedef enchant_dict * enchant_dictPtr; - -typedef struct _broker_struct { - EnchantBroker *pbroker; - enchant_dict **dict; - unsigned int dictcnt; - zval *rsrc_id; -} _enchant_broker; - -typedef struct _dict_struct { - unsigned int id; - EnchantDict *pdict; - enchant_broker *pbroker; - zval *rsrc_id; - enchant_dict *next; - enchant_dict *prev; -} _enchant_dict; - - -/* True global resources - no need for thread safety here */ -static int le_enchant_broker; -static int le_enchant_dict; - -/* If you declare any globals in php_enchant.h uncomment this:*/ -/*ZEND_DECLARE_MODULE_GLOBALS(enchant)*/ - -/* {{{ enchant_functions[] - * - * Every user visible function must have an entry in enchant_functions[]. - */ -function_entry enchant_functions[] = { - PHP_FE(enchant_broker_init, NULL) - PHP_FE(enchant_broker_free, NULL) - PHP_FE(enchant_broker_get_error, NULL) - PHP_FE(enchant_broker_list_dicts, NULL) - PHP_FE(enchant_broker_request_dict, NULL) - PHP_FE(enchant_broker_request_pwl_dict, NULL) - PHP_FE(enchant_broker_free_dict, NULL) - PHP_FE(enchant_broker_dict_exists, NULL) - PHP_FE(enchant_broker_set_ordering, NULL) - PHP_FE(enchant_broker_describe, NULL) - PHP_FE(enchant_dict_check, NULL) - PHP_FE(enchant_dict_suggest, NULL) - PHP_FE(enchant_dict_add_to_personal, NULL) - PHP_FE(enchant_dict_add_to_session, NULL) - PHP_FE(enchant_dict_is_in_session, NULL) - PHP_FE(enchant_dict_store_replacement, NULL) - PHP_FE(enchant_dict_get_error, NULL) - PHP_FE(enchant_dict_describe, NULL) - PHP_FE(enchant_dict_quick_check, third_arg_force_ref) - - {NULL, NULL, NULL} /* Must be the last line in enchant_functions[] */ -}; -/* }}} */ - -/* {{{ enchant_module_entry - */ -zend_module_entry enchant_module_entry = { -#if ZEND_MODULE_API_NO >= 20010901 - STANDARD_MODULE_HEADER, -#endif - "enchant", - enchant_functions, - PHP_MINIT(enchant), - PHP_MSHUTDOWN(enchant), - NULL, /* Replace with NULL if there's nothing to do at request start */ - NULL, /* Replace with NULL if there's nothing to do at request end */ - PHP_MINFO(enchant), -#if ZEND_MODULE_API_NO >= 20010901 - "0.1", /* Replace with version number for your extension */ -#endif - STANDARD_MODULE_PROPERTIES -}; -/* }}} */ - -#ifdef COMPILE_DL_ENCHANT -ZEND_GET_MODULE(enchant) -#endif - -static void -enumerate_providers_fn (const char * const name, - const char * const desc, - const char * const file, - void * ud) /* {{{ */ -{ - zval *zdesc = (zval *) ud; - zval *tmp_array; - - MAKE_STD_ZVAL(tmp_array); - array_init(tmp_array); - - add_assoc_string(tmp_array, "name", (char *)name, 1); - add_assoc_string(tmp_array, "desc", (char *)desc, 1); - add_assoc_string(tmp_array, "file", (char *)file, 1); - - if (Z_TYPE_P(zdesc)!=IS_ARRAY) { - array_init(zdesc); - } - - add_next_index_zval(zdesc, tmp_array); -} -/* }}} */ - -static void -describe_dict_fn (const char * const lang, - const char * const name, - const char * const desc, - const char * const file, - void * ud) /* {{{ */ -{ - zval *zdesc = (zval *) ud; - array_init(zdesc); - add_assoc_string(zdesc, "lang", (char *)lang, 1); - add_assoc_string(zdesc, "name", (char *)name, 1); - add_assoc_string(zdesc, "desc", (char *)desc, 1); - add_assoc_string(zdesc, "file", (char *)file, 1); -} -/* }}} */ - -static void php_enchant_list_dicts_fn( const char * const lang_tag, - const char * const provider_name, const char * const provider_desc, - const char * const provider_file, void * ud) /* {{{ */ -{ - zval *zdesc = (zval *) ud; - zval *tmp_array; - - MAKE_STD_ZVAL(tmp_array); - array_init(tmp_array); - add_assoc_string(tmp_array, "lang_tag", (char *)lang_tag, 1); - add_assoc_string(tmp_array, "provider_name", (char *)provider_name, 1); - add_assoc_string(tmp_array, "provider_desc", (char *)provider_desc, 1); - add_assoc_string(tmp_array, "provider_file", (char *)provider_file, 1); - - if (Z_TYPE_P(zdesc) != IS_ARRAY) { - array_init(zdesc); - } - add_next_index_zval(zdesc, tmp_array); - -} -/* }}} */ - -static void php_enchant_broker_free(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */ -{ - if (rsrc->ptr) { - enchant_broker *broker = (enchant_broker *)rsrc->ptr; - if (broker) { - if (broker->pbroker) { - if (broker->dictcnt && broker->dict) { - if (broker->dict) { - int total, tofree; - tofree = total = broker->dictcnt-1; - do { - zend_list_delete(Z_RESVAL_P(broker->dict[total]->rsrc_id)); - efree(broker->dict[total]); - total--; - } while (total>=0); - } - efree(broker->dict); - broker->dict = NULL; - } - enchant_broker_free(broker->pbroker); - } - efree(broker); - } - } -} -/* }}} */ - -static void php_enchant_dict_free(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */ - -{ - if (rsrc->ptr) { - enchant_dict *pdict = (enchant_dict *)rsrc->ptr; - if (pdict) { - if (pdict->pdict && pdict->pbroker) { - enchant_broker_free_dict(pdict->pbroker->pbroker, pdict->pdict); - } - if (pdict->id) { - pdict->pbroker->dict[pdict->id-1]->next = NULL; - } - } - } -} -/* }}} */ - -/* {{{ PHP_MINIT_FUNCTION - */ -PHP_MINIT_FUNCTION(enchant) -{ - le_enchant_broker = zend_register_list_destructors_ex(php_enchant_broker_free, NULL, "enchant broker", module_number); - le_enchant_dict = zend_register_list_destructors_ex(php_enchant_dict_free, NULL, "enchant dict", module_number); - - return SUCCESS; -} -/* }}} */ - -/* {{{ PHP_MSHUTDOWN_FUNCTION - */ -PHP_MSHUTDOWN_FUNCTION(enchant) -{ - return SUCCESS; -} -/* }}} */ - -static void __enumerate_providers_fn (const char * const name, - const char * const desc, - const char * const file, - void * ud) /* {{{ */ -{ - php_info_print_table_row(3, name, desc, file); -} -/* }}} */ - -/* {{{ PHP_MINFO_FUNCTION - */ -PHP_MINFO_FUNCTION(enchant) -{ - EnchantBroker *pbroker; - - pbroker = enchant_broker_init(); - php_info_print_table_start(); - php_info_print_table_header(2, "enchant support", "enabled"); - php_info_print_table_row(2, "Version", "@package_version@"); - php_info_print_table_row(2, "Revision", "$Revision$"); - php_info_print_table_end(); - - php_info_print_table_start(); - enchant_broker_describe(pbroker, __enumerate_providers_fn, NULL); - php_info_print_table_end(); - enchant_broker_free(pbroker); -} -/* }}} */ - -#define PHP_ENCHANT_GET_BROKER \ - ZEND_FETCH_RESOURCE(pbroker, enchant_broker *, &broker, -1, "enchant_broker", le_enchant_broker); \ - if (!pbroker || !pbroker->pbroker) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", "Resource broker invalid"); \ - RETURN_FALSE; \ - } - -#define PHP_ENCHANT_GET_DICT \ - ZEND_FETCH_RESOURCE(pdict, enchant_dict *, &dict, -1, "enchant dict", le_enchant_dict); \ - if (!pdict || !pdict->pdict) { \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", "Invalid dictionary resource."); \ - RETURN_FALSE; \ - } - -/* {{{ proto resource enchant_broker_init() - create a new broker object capable of requesting */ -PHP_FUNCTION(enchant_broker_init) -{ - enchant_broker *broker; - EnchantBroker *pbroker; - - if (ZEND_NUM_ARGS()) { - ZEND_WRONG_PARAM_COUNT(); - } - - pbroker = enchant_broker_init(); - - if (pbroker) { - broker = (enchant_broker *) emalloc(sizeof(enchant_broker)); - broker->pbroker = pbroker; - broker->dict = NULL; - broker->dictcnt = 0; - ZEND_REGISTER_RESOURCE(return_value, broker, le_enchant_broker); - broker->rsrc_id = return_value; - } else { - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto boolean enchant_broker_free(resource broker) - Destroys the broker object and its dictionnaries */ -PHP_FUNCTION(enchant_broker_free) -{ - zval *broker; - enchant_broker *pbroker; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &broker) == FAILURE) { - RETURN_FALSE; - } - PHP_ENCHANT_GET_BROKER; - - zend_list_delete(Z_RESVAL_P(broker)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto string enchant_broker_get_error(resource broker) - Returns the last error of the broker */ -PHP_FUNCTION(enchant_broker_get_error) -{ - zval *broker; - enchant_broker *pbroker; - char *msg; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &broker) == FAILURE) { - RETURN_FALSE; - } - - PHP_ENCHANT_GET_BROKER; - - msg = enchant_broker_get_error(pbroker->pbroker); - if (msg) { - RETURN_STRING((char *)msg, 1); - } - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto string enchant_broker_list_dicts(resource broker) - Returns the last error of the broker */ -PHP_FUNCTION(enchant_broker_list_dicts) -{ - zval *broker; - enchant_broker *pbroker; - EnchantDictDescribeFn describetozval = php_enchant_list_dicts_fn; - - char *msg; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &broker) == FAILURE) { - RETURN_FALSE; - } - - PHP_ENCHANT_GET_BROKER; - - enchant_broker_list_dicts(pbroker->pbroker, php_enchant_list_dicts_fn, (void *)return_value); -} -/* }}} */ - -/* {{{ proto resource enchant_broker_request_dict(resource broker, string tag) - create a new dictionary using tag, the non-empty language tag you wish to request - a dictionary for ("en_US", "de_DE", ...) */ -PHP_FUNCTION(enchant_broker_request_dict) -{ - zval *broker; - enchant_broker *pbroker; - enchant_dict *dict; - EnchantDict *d; - char *tag; - int taglen; - int pos; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &broker, &tag, &taglen) == FAILURE) { - RETURN_FALSE; - } - - PHP_ENCHANT_GET_BROKER; - - d = enchant_broker_request_dict(pbroker->pbroker, (const char *)tag); - if (d) { - if (pbroker->dictcnt) { - pbroker->dict = (enchant_dict **)erealloc(pbroker->dict, sizeof(enchant_dict *) * pbroker->dictcnt); - pos = pbroker->dictcnt++; - } else { - pbroker->dict = (enchant_dict **)emalloc(sizeof(enchant_dict *)); - pos = 0; - pbroker->dictcnt++; - } - - dict = pbroker->dict[pos] = (enchant_dict *)emalloc(sizeof(enchant_dict)); - dict->id = pos; - dict->pbroker = pbroker; - dict->pdict = d; - dict->rsrc_id = return_value; - dict->prev = pos ? pbroker->dict[pos-1] : NULL; - dict->next = NULL; - pbroker->dict[pos] = dict; - - if (pos) { - pbroker->dict[pos-1]->next = dict; - } - - ZEND_REGISTER_RESOURCE(return_value, dict, le_enchant_dict); - } else { - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto resource enchant_broker_request_pwl_dict(resource dict, string filename) - creates a dictionary using a PWL file. A PWL file is personal word file one word per line. - It must exist before the call.*/ -PHP_FUNCTION(enchant_broker_request_pwl_dict) -{ - zval *broker; - enchant_broker *pbroker; - enchant_dict *dict; - EnchantDict *d; - char *pwl; - int pwllen; - int pos; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &broker, &pwl, &pwllen) == FAILURE) { - RETURN_FALSE; - } - - if ((PG(safe_mode) && (!php_checkuid(pwl, NULL, CHECKUID_CHECK_FILE_AND_DIR))) || php_check_open_basedir(pwl TSRMLS_CC)) { - RETURN_FALSE; - } - - PHP_ENCHANT_GET_BROKER; - - d = enchant_broker_request_pwl_dict(pbroker->pbroker, (const char *)pwl); - if (d) { - if (pbroker->dictcnt) { - pos = pbroker->dictcnt++; - pbroker->dict = (enchant_dict **)erealloc(pbroker->dict, sizeof(enchant_dict *) * pbroker->dictcnt); - } else { - pbroker->dict = (enchant_dict **)emalloc(sizeof(enchant_dict *)); - pos = 0; - pbroker->dictcnt++; - } - dict = pbroker->dict[pos] = (enchant_dict *)emalloc(sizeof(enchant_dict)); - dict->id = pos; - dict->pbroker = pbroker; - dict->pdict = d; - dict->rsrc_id = return_value; - dict->prev = pos?pbroker->dict[pos-1]:NULL; - dict->next = NULL; - pbroker->dict[pos] = dict; - if (pos) { - pbroker->dict[pos-1]->next = dict; - } - ZEND_REGISTER_RESOURCE(return_value, dict, le_enchant_dict); - } else { - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto resource enchant_broker_free_dict(resource dict) - Free the dictionary resource */ -PHP_FUNCTION(enchant_broker_free_dict) -{ - zval *dict; - enchant_dict *pdict; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &dict) == FAILURE) { - RETURN_FALSE; - } - - PHP_ENCHANT_GET_DICT; - - zend_list_delete(Z_RESVAL_P(dict)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto bool enchant_broker_dict_exists(resource broker, string tag) - Wether a dictionary exists or not. Using non-empty tag */ -PHP_FUNCTION(enchant_broker_dict_exists) -{ - zval *broker; - char *tag; - int taglen; - enchant_broker * pbroker; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &broker, &tag, &taglen) == FAILURE) { - RETURN_FALSE; - } - - PHP_ENCHANT_GET_BROKER; - - RETURN_BOOL(enchant_broker_dict_exists(pbroker->pbroker, tag)); -} -/* }}} */ - -/* {{{ proto bool enchant_broker_set_ordering(resource broker, string tag, string ordering) - Declares a preference of dictionaries to use for the language - described/referred to by 'tag'. The ordering is a comma delimited - list of provider names. As a special exception, the "*" tag can - be used as a language tag to declare a default ordering for any - language that does not explictly declare an ordering. */ - -PHP_FUNCTION(enchant_broker_set_ordering) -{ - zval *broker; - char *pordering; - int porderinglen; - char *ptag; - int ptaglen; - enchant_broker * pbroker; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &broker, &ptag, &ptaglen, &pordering, &porderinglen) == FAILURE) { - RETURN_FALSE; - } - - PHP_ENCHANT_GET_BROKER; - - enchant_broker_set_ordering(pbroker->pbroker, ptag, pordering); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto array enchant_broker_describe(resource broker) - Enumerates the Enchant providers and tells - you some rudimentary information about them. The same info is provided through phpinfo() */ -PHP_FUNCTION(enchant_broker_describe) -{ - EnchantBrokerDescribeFn describetozval = enumerate_providers_fn; - zval *broker; - enchant_broker * pbroker; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &broker) == FAILURE) { - RETURN_FALSE; - } - - PHP_ENCHANT_GET_BROKER; - - enchant_broker_describe(pbroker->pbroker, describetozval, (void *)return_value); -} -/* }}} */ - -/* {{{ proto bool enchant_dict_quick_check(resource dict, string word [, array &suggestions]) - If the word is correctly spelled return true, otherwise return false, if suggestions variable - is provided, fill it with spelling alternatives. */ -PHP_FUNCTION(enchant_dict_quick_check) -{ - zval *dict, *sugg = NULL; - char *word; - int wordlen; - enchant_dict *pdict; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|z/", &dict, &word, &wordlen, &sugg) == FAILURE) { - RETURN_FALSE; - } - - if (sugg) { - zval_dtor(sugg); - } - - PHP_ENCHANT_GET_DICT; - - if (enchant_dict_check(pdict->pdict, word, wordlen) > 0) { - if (!sugg && ZEND_NUM_ARGS() == 2) { - RETURN_FALSE; - } - - int n_sugg; - char **suggs; - - array_init(sugg); - - suggs = enchant_dict_suggest(pdict->pdict, word, wordlen, (size_t *) &n_sugg); - if (suggs && n_sugg) { - int i; - for (i = 0; i < n_sugg; i++) { - add_next_index_string(sugg, suggs[i], 1); - } - enchant_dict_free_suggestions(pdict->pdict, suggs); - } - - - RETURN_FALSE; - } - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto bool enchant_dict_check(resource dict, string word) - If the word is correctly spelled return true, otherwise return false */ -PHP_FUNCTION(enchant_dict_check) -{ - zval *dict; - char *word; - int wordlen; - enchant_dict *pdict; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &dict, &word, &wordlen) == FAILURE) { - RETURN_FALSE; - } - - PHP_ENCHANT_GET_DICT; - - RETURN_BOOL(!enchant_dict_check(pdict->pdict, word, wordlen)); -} -/* }}} */ - -/* {{{ proto array enchant_dict_suggest(resource dict, string word) - Will return a list of values if any of those pre-conditions are not met.*/ -PHP_FUNCTION(enchant_dict_suggest) -{ - zval *dict; - char *word; - int wordlen; - char **suggs; - enchant_dict *pdict; - int n_sugg; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &dict, &word, &wordlen) == FAILURE) { - RETURN_FALSE; - } - - PHP_ENCHANT_GET_DICT; - - suggs = enchant_dict_suggest(pdict->pdict, word, wordlen, (size_t *)&n_sugg); - if (suggs && n_sugg) { - int i; - - array_init(return_value); - for (i = 0; i < n_sugg; i++) { - add_next_index_string(return_value, suggs[i], 1); - } - - enchant_dict_free_suggestions(pdict->pdict, suggs); - } -} -/* }}} */ - -/* {{{ proto void enchant_dict_add_to_personal(resource dict, string word) - add 'word' to personal word list */ -PHP_FUNCTION(enchant_dict_add_to_personal) -{ - zval *dict; - char *word; - int wordlen; - enchant_dict *pdict; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &dict, &word, &wordlen) == FAILURE) { - RETURN_FALSE; - } - - PHP_ENCHANT_GET_DICT; - - enchant_dict_add_to_personal(pdict->pdict, word, wordlen); -} -/* }}} */ - -/* {{{ proto void enchant_dict_add_to_session(resource dict, string word) - add 'word' to this spell-checking session */ -PHP_FUNCTION(enchant_dict_add_to_session) -{ - zval *dict; - char *word; - int wordlen; - enchant_dict *pdict; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &dict, &word, &wordlen) == FAILURE) { - RETURN_FALSE; - } - - PHP_ENCHANT_GET_DICT; - - enchant_dict_add_to_session(pdict->pdict, word, wordlen); -} -/* }}} */ - -/* {{{ proto bool enchant_dict_is_in_session(resource dict, string word) - whether or not 'word' exists in this spelling-session */ -PHP_FUNCTION(enchant_dict_is_in_session) -{ - zval *dict; - char *word; - int wordlen; - enchant_dict *pdict; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &dict, &word, &wordlen) == FAILURE) { - RETURN_FALSE; - } - - PHP_ENCHANT_GET_DICT; - - RETURN_BOOL(enchant_dict_is_in_session(pdict->pdict, word, wordlen)); -} -/* }}} */ - -/* {{{ proto void enchant_dict_store_replacement(resource dict, string mis, string cor) - add a correction for 'mis' using 'cor'. - Notes that you replaced @mis with @cor, so it's possibly more likely - that future occurrences of @mis will be replaced with @cor. So it might - bump @cor up in the suggestion list.*/ -PHP_FUNCTION(enchant_dict_store_replacement) -{ - zval *dict; - char *mis, *cor; - int mislen, corlen; - - enchant_dict *pdict; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &dict, &mis, &mislen, &cor, &corlen) == FAILURE) { - RETURN_FALSE; - } - - PHP_ENCHANT_GET_DICT; - - enchant_dict_store_replacement(pdict->pdict, mis, mislen, cor, corlen); -} -/* }}} */ - -/* {{{ proto string enchant_dict_get_error(resource dict) - Returns the last error of the current spelling-session */ -PHP_FUNCTION(enchant_dict_get_error) -{ - zval *dict; - enchant_dict *pdict; - char *msg; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &dict) == FAILURE) { - RETURN_FALSE; - } - - PHP_ENCHANT_GET_DICT; - - msg = enchant_dict_get_error(pdict->pdict); - if (msg) { - RETURN_STRING((char *)msg, 1); - } - - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto array enchant_dict_describe(resource dict) - Describes an individual dictionary 'dict' */ -PHP_FUNCTION(enchant_dict_describe) -{ - zval *dict; - enchant_dict *pdict; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &dict) == FAILURE) { - RETURN_FALSE; - } - - PHP_ENCHANT_GET_DICT; - - enchant_dict_describe(pdict->pdict, describe_dict_fn, (void *)return_value); -} -/* }}} */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: noet sw=4 ts=4 fdm=marker - * vim<600: noet sw=4 ts=4 - */ diff --git a/ext/enchant/package.xml b/ext/enchant/package.xml deleted file mode 100755 index 01826fbbcf27f..0000000000000 --- a/ext/enchant/package.xml +++ /dev/null @@ -1,148 +0,0 @@ - - - enchant - pecl.php.net - libenchant binder, support near all spelling tools - Enchant is a binder for libenchant. Libenchant provides a common -API for many spell libraries: -- aspell/pspell (intended to replace ispell) -- hspell (hebrew) -- ispell -- myspell/hunspell (OpenOffice project, mozilla) -- uspell (primarily Yiddish, Hebrew, and Eastern European languages) -A plugin system allows to add custom spell support. -see www.abisource.com/enchant/ - - - Pierre-Alain Joye - pajoye - paj@pearfr.org - yes - - - Ilia Alshanetsky - iliaa - ilia@php.net - yes - - 2006-03-21 - - 1.0.1 - 1.1.0 - - - stable - stable - - PHP - - add enchant_broker_list_dicts to get a list of available dictionaries -- fix compilation warnings -- add examples -- add tests - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - - - 1.4.0b1 - - - - enchant - - - - - - 2004-08-11 - - 1.0 - 1.0 - - - stable - stable - - PHP - - Fixed leak inside MINFO function. -- Fixed crash inside enchant_dict_suggest() when there are no suggestions. -- Added missing safe_mode/open_basedir check inside enchant_broker_request_pwl_dict(). -- Fixed various function prototypes. -- Fixed possible leak in suggestions result. - - - - - 0.2.1 - 0.2.1 - - - beta - beta - - 2004-03-11 - PHP - - Fix possible leak in suggestions result -- Move to beta status - - - - - 0.2.0 - 0.2.0 - - - alpha - alpha - - 2006-03-21 - PHP - - Add Ilia Alshanetsky as maintainer -- Cleanup sources codes (ilia) -- Add enchant_dict_quick_check (ilia) - - - - - 0.1 - 0.1 - - - alpha - alpha - - 2003-03-08 - PHP - Initial release - - - - diff --git a/ext/enchant/php_enchant.h b/ext/enchant/php_enchant.h deleted file mode 100644 index 33f24415192dc..0000000000000 --- a/ext/enchant/php_enchant.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 4 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2003 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 3.0 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/3_0.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Pierre-Alain Joye | - +----------------------------------------------------------------------+ - - $Id$ -*/ - -#ifndef PHP_ENCHANT_H -#define PHP_ENCHANT_H - -extern zend_module_entry enchant_module_entry; -#define phpext_enchant_ptr &enchant_module_entry - -#ifdef PHP_WIN32 -#define PHP_ENCHANT_API __declspec(dllexport) -#else -#define PHP_ENCHANT_API -#endif - -#ifdef ZTS -#include "TSRM.h" -#endif - -static void php_enchant_broker_free(zend_rsrc_list_entry *rsrc TSRMLS_DC); -static void php_enchant_dict_free(zend_rsrc_list_entry *rsrc TSRMLS_DC); - -PHP_MINIT_FUNCTION(enchant); -PHP_MSHUTDOWN_FUNCTION(enchant); -PHP_MINFO_FUNCTION(enchant); - -PHP_FUNCTION(enchant_broker_init); -PHP_FUNCTION(enchant_broker_free); -PHP_FUNCTION(enchant_broker_get_error); -PHP_FUNCTION(enchant_broker_list_dicts); -PHP_FUNCTION(enchant_broker_request_dict); -PHP_FUNCTION(enchant_broker_request_pwl_dict); -PHP_FUNCTION(enchant_broker_free_dict); -PHP_FUNCTION(enchant_broker_dict_exists); -PHP_FUNCTION(enchant_broker_set_ordering); -PHP_FUNCTION(enchant_broker_describe); - -PHP_FUNCTION(enchant_dict_check); -PHP_FUNCTION(enchant_dict_suggest); -PHP_FUNCTION(enchant_dict_add_to_personal); -PHP_FUNCTION(enchant_dict_add_to_session); -PHP_FUNCTION(enchant_dict_is_in_session); -PHP_FUNCTION(enchant_dict_store_replacement); -PHP_FUNCTION(enchant_dict_get_error); -PHP_FUNCTION(enchant_dict_describe); -PHP_FUNCTION(enchant_dict_quick_check); - -#ifdef ZTS -#define ENCHANT_G(v) TSRMG(enchant_globals_id, zend_enchant_globals *, v) -#else -#define ENCHANT_G(v) (enchant_globals.v) -#endif - -#endif /* PHP_ENCHANT_H */ - - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * indent-tabs-mode: t - * End: - */ - diff --git a/ext/enchant/tests/broker_describe.phpt b/ext/enchant/tests/broker_describe.phpt deleted file mode 100644 index 4c03f6f4dd914..0000000000000 --- a/ext/enchant/tests/broker_describe.phpt +++ /dev/null @@ -1,28 +0,0 @@ ---TEST-- -enchant_broker_describe() function ---SKIPIF-- - ---FILE-- - ---EXPECTF-- -OK diff --git a/ext/enchant/tests/broker_free.phpt b/ext/enchant/tests/broker_free.phpt deleted file mode 100644 index d00c22a9742cb..0000000000000 --- a/ext/enchant/tests/broker_free.phpt +++ /dev/null @@ -1,21 +0,0 @@ ---TEST-- -enchant_broker_free() function ---SKIPIF-- - ---FILE-- - ---EXPECT-- -OK -OK diff --git a/ext/enchant/tests/broker_init.phpt b/ext/enchant/tests/broker_init.phpt deleted file mode 100644 index 359a653359e85..0000000000000 --- a/ext/enchant/tests/broker_init.phpt +++ /dev/null @@ -1,15 +0,0 @@ ---TEST-- -enchant_broker_init() function ---SKIPIF-- - ---FILE-- - ---EXPECT-- -OK diff --git a/ext/enchant/tests/broker_request_dict.phpt b/ext/enchant/tests/broker_request_dict.phpt deleted file mode 100644 index 5744da6747ea9..0000000000000 --- a/ext/enchant/tests/broker_request_dict.phpt +++ /dev/null @@ -1,31 +0,0 @@ ---TEST-- -enchant_broker_request_dict() function ---SKIPIF-- - ---FILE-- - ---EXPECT-- -OK -OK diff --git a/ext/enchant/tests/hindi_correct.txt b/ext/enchant/tests/hindi_correct.txt deleted file mode 100644 index cced6b86fadb0..0000000000000 --- a/ext/enchant/tests/hindi_correct.txt +++ /dev/null @@ -1 +0,0 @@ -इस पृषà¥à¤  में à¤à¤• लिंक बनाने के लिये इस पà¥à¤°à¤¤à¥€à¤• को खीचें व छोड़ें diff --git a/ext/enchant/tests/hindi_incorrect.txt b/ext/enchant/tests/hindi_incorrect.txt deleted file mode 100644 index 1f7353c958f38..0000000000000 --- a/ext/enchant/tests/hindi_incorrect.txt +++ /dev/null @@ -1 +0,0 @@ -इस पृषà¥à¤  में à¤à¤• लिंक बनाने के लिये इस पà¥à¤°à¤¤à¥€à¤• को खच व छड diff --git a/ext/ereg/ereg.c b/ext/ereg/ereg.c deleted file mode 100644 index e54da40d5861c..0000000000000 --- a/ext/ereg/ereg.c +++ /dev/null @@ -1,668 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Rasmus Lerdorf | - | Jim Winstead | - | Jaakko Hyvätti | - +----------------------------------------------------------------------+ - */ -/* $Id$ */ - -#include -#include -#include "php.h" -#include "php_string.h" -#include "reg.h" -#include "ext/standard/info.h" - -ZEND_DECLARE_MODULE_GLOBALS(reg) - -typedef struct { - regex_t preg; - int cflags; -} reg_cache; - -static int reg_magic = 0; - -/* {{{ _php_regcomp - */ -static int _php_regcomp(regex_t *preg, const char *pattern, int cflags) -{ - int r = 0; - int patlen = strlen(pattern); - reg_cache *rc = NULL; - TSRMLS_FETCH(); - - if(zend_hash_find(®(ht_rc), (char *) pattern, patlen+1, (void **) &rc) == SUCCESS - && rc->cflags == cflags) { -#ifdef HAVE_REGEX_T_RE_MAGIC - /* - * We use a saved magic number to see whether cache is corrupted, and if it - * is, we flush it and compile the pattern from scratch. - */ - if (rc->preg.re_magic != reg_magic) { - zend_hash_clean(®(ht_rc)); - } else { - memcpy(preg, &rc->preg, sizeof(*preg)); - return r; - } - } - - r = regcomp(preg, pattern, cflags); - if(!r) { - reg_cache rcp; - - rcp.cflags = cflags; - memcpy(&rcp.preg, preg, sizeof(*preg)); - /* - * Since we don't have access to the actual MAGIC1 definition in the private - * header file, we save the magic value immediately after compilation. Hopefully, - * it's good. - */ - if (!reg_magic) reg_magic = preg->re_magic; - zend_hash_update(®(ht_rc), (char *) pattern, patlen+1, - (void *) &rcp, sizeof(rcp), NULL); - } -#else - memcpy(preg, &rc->preg, sizeof(*preg)); - } else { - r = regcomp(preg, pattern, cflags); - if(!r) { - reg_cache rcp; - - rcp.cflags = cflags; - memcpy(&rcp.preg, preg, sizeof(*preg)); - zend_hash_update(®(ht_rc), (char *) pattern, patlen+1, - (void *) &rcp, sizeof(rcp), NULL); - } - } -#endif - return r; -} -/* }}} */ - -static void _free_reg_cache(reg_cache *rc) -{ - regfree(&rc->preg); -} - -#undef regfree -#define regfree(a); -#undef regcomp -#define regcomp(a, b, c) _php_regcomp(a, b, c) - -static void php_reg_init_globals(zend_reg_globals *reg_globals TSRMLS_DC) -{ - zend_hash_init(®_globals->ht_rc, 0, NULL, (void (*)(void *)) _free_reg_cache, 1); -} - -static void php_reg_destroy_globals(zend_reg_globals *reg_globals TSRMLS_DC) -{ - zend_hash_destroy(®_globals->ht_rc); -} - -PHP_MINIT_FUNCTION(regex) -{ - ZEND_INIT_MODULE_GLOBALS(reg, php_reg_init_globals, php_reg_destroy_globals); - return SUCCESS; -} - -PHP_MSHUTDOWN_FUNCTION(regex) -{ -#ifndef ZTS - php_reg_destroy_globals(®_globals TSRMLS_CC); -#endif - - return SUCCESS; -} - -PHP_MINFO_FUNCTION(regex) -{ -#if HSREGEX - php_info_print_table_row(2, "Regex Library", "Bundled library enabled"); -#else - php_info_print_table_row(2, "Regex Library", "System library enabled"); -#endif -} - - -/* {{{ php_reg_eprint - * php_reg_eprint - convert error number to name - */ -static void php_reg_eprint(int err, regex_t *re) { - char *buf = NULL, *message = NULL; - size_t len; - size_t buf_len; - -#ifdef REG_ITOA - /* get the length of the message */ - buf_len = regerror(REG_ITOA | err, re, NULL, 0); - if (buf_len) { - buf = (char *)safe_emalloc(buf_len, sizeof(char), 0); - if (!buf) return; /* fail silently */ - /* finally, get the error message */ - regerror(REG_ITOA | err, re, buf, buf_len); - } -#else - buf_len = 0; -#endif - len = regerror(err, re, NULL, 0); - if (len) { - TSRMLS_FETCH(); - - message = (char *)safe_emalloc((buf_len + len + 2), sizeof(char), 0); - if (!message) { - return; /* fail silently */ - } - if (buf_len) { - snprintf(message, buf_len, "%s: ", buf); - buf_len += 1; /* so pointer math below works */ - } - /* drop the message into place */ - regerror(err, re, message + buf_len, len); - - php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", message); - } - - STR_FREE(buf); - STR_FREE(message); -} -/* }}} */ - -/* {{{ php_ereg - */ -static void php_ereg(INTERNAL_FUNCTION_PARAMETERS, int icase) -{ - zval **regex, /* Regular expression */ - **findin, /* String to apply expression to */ - **array = NULL; /* Optional register array */ - regex_t re; - regmatch_t *subs; - int err, match_len, string_len; - uint i; - int copts = 0; - off_t start, end; - char *buf = NULL; - char *string = NULL; - int argc = ZEND_NUM_ARGS(); - - if (argc < 2 || argc > 3 || - zend_get_parameters_ex(argc, ®ex, &findin, &array) == FAILURE) { - WRONG_PARAM_COUNT; - } - - if (icase) - copts |= REG_ICASE; - - if (argc == 2) - copts |= REG_NOSUB; - - /* compile the regular expression from the supplied regex */ - if (Z_TYPE_PP(regex) == IS_STRING) { - err = regcomp(&re, Z_STRVAL_PP(regex), REG_EXTENDED | copts); - } else { - /* we convert numbers to integers and treat them as a string */ - if (Z_TYPE_PP(regex) == IS_DOUBLE) - convert_to_long_ex(regex); /* get rid of decimal places */ - convert_to_string_ex(regex); - /* don't bother doing an extended regex with just a number */ - err = regcomp(&re, Z_STRVAL_PP(regex), copts); - } - - if (err) { - php_reg_eprint(err, &re); - RETURN_FALSE; - } - - /* make a copy of the string we're looking in */ - convert_to_string_ex(findin); - string = estrndup(Z_STRVAL_PP(findin), Z_STRLEN_PP(findin)); - - /* allocate storage for (sub-)expression-matches */ - subs = (regmatch_t *)ecalloc(sizeof(regmatch_t),re.re_nsub+1); - - /* actually execute the regular expression */ - err = regexec(&re, string, re.re_nsub+1, subs, 0); - if (err && err != REG_NOMATCH) { - php_reg_eprint(err, &re); - regfree(&re); - efree(subs); - RETURN_FALSE; - } - match_len = 1; - - if (array && err != REG_NOMATCH) { - match_len = (int) (subs[0].rm_eo - subs[0].rm_so); - string_len = Z_STRLEN_PP(findin) + 1; - - buf = emalloc(string_len); - - zval_dtor(*array); /* start with clean array */ - array_init(*array); - - for (i = 0; i <= re.re_nsub; i++) { - start = subs[i].rm_so; - end = subs[i].rm_eo; - if (start != -1 && end > 0 && start < string_len && end < string_len && start < end) { - add_index_stringl(*array, i, string+start, end-start, 1); - } else { - add_index_bool(*array, i, 0); - } - } - efree(buf); - } - - efree(subs); - efree(string); - if (err == REG_NOMATCH) { - RETVAL_FALSE; - } else { - if (match_len == 0) - match_len = 1; - RETVAL_LONG(match_len); - } - regfree(&re); -} -/* }}} */ - -/* {{{ proto int ereg(string pattern, string string [, array registers]) - Regular expression match */ -PHP_FUNCTION(ereg) -{ - php_ereg(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); -} -/* }}} */ - -/* {{{ proto int eregi(string pattern, string string [, array registers]) - Case-insensitive regular expression match */ -PHP_FUNCTION(eregi) -{ - php_ereg(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); -} -/* }}} */ - -/* {{{ php_reg_replace - * this is the meat and potatoes of regex replacement! */ -PHPAPI char *php_reg_replace(const char *pattern, const char *replace, const char *string, int icase, int extended) -{ - regex_t re; - regmatch_t *subs; - - char *buf, /* buf is where we build the replaced string */ - *nbuf, /* nbuf is used when we grow the buffer */ - *walkbuf; /* used to walk buf when replacing backrefs */ - const char *walk; /* used to walk replacement string for backrefs */ - int buf_len; - int pos, tmp, string_len, new_l; - int err, copts = 0; - - string_len = strlen(string); - - if (icase) { - copts = REG_ICASE; - } - if (extended) { - copts |= REG_EXTENDED; - } - - err = regcomp(&re, pattern, copts); - if (err) { - php_reg_eprint(err, &re); - return ((char *) -1); - } - - - /* allocate storage for (sub-)expression-matches */ - subs = (regmatch_t *)ecalloc(sizeof(regmatch_t),re.re_nsub+1); - - /* start with a buffer that is twice the size of the stringo - we're doing replacements in */ - buf_len = 2 * string_len + 1; - buf = safe_emalloc(buf_len, sizeof(char), 0); - - err = pos = 0; - buf[0] = '\0'; - while (!err) { - err = regexec(&re, &string[pos], re.re_nsub+1, subs, (pos ? REG_NOTBOL : 0)); - - if (err && err != REG_NOMATCH) { - php_reg_eprint(err, &re); - efree(subs); - efree(buf); - regfree(&re); - return ((char *) -1); - } - - if (!err) { - /* backref replacement is done in two passes: - 1) find out how long the string will be, and allocate buf - 2) copy the part before match, replacement and backrefs to buf - - Jaakko Hyvätti - */ - - new_l = strlen(buf) + subs[0].rm_so; /* part before the match */ - walk = replace; - while (*walk) { - if ('\\' == *walk && isdigit((unsigned char)walk[1]) && ((unsigned char)walk[1]) - '0' <= re.re_nsub) { - if (subs[walk[1] - '0'].rm_so > -1 && subs[walk[1] - '0'].rm_eo > -1) { - new_l += subs[walk[1] - '0'].rm_eo - subs[walk[1] - '0'].rm_so; - } - walk += 2; - } else { - new_l++; - walk++; - } - } - if (new_l + 1 > buf_len) { - buf_len = 1 + buf_len + 2 * new_l; - nbuf = emalloc(buf_len); - strcpy(nbuf, buf); - efree(buf); - buf = nbuf; - } - tmp = strlen(buf); - /* copy the part of the string before the match */ - strncat(buf, &string[pos], subs[0].rm_so); - - /* copy replacement and backrefs */ - walkbuf = &buf[tmp + subs[0].rm_so]; - walk = replace; - while (*walk) { - if ('\\' == *walk && isdigit(walk[1]) && walk[1] - '0' <= (int)re.re_nsub) { - if (subs[walk[1] - '0'].rm_so > -1 && subs[walk[1] - '0'].rm_eo > -1 - /* this next case shouldn't happen. it does. */ - && subs[walk[1] - '0'].rm_so <= subs[walk[1] - '0'].rm_eo) { - - tmp = subs[walk[1] - '0'].rm_eo - subs[walk[1] - '0'].rm_so; - memcpy (walkbuf, &string[pos + subs[walk[1] - '0'].rm_so], tmp); - walkbuf += tmp; - } - walk += 2; - } else { - *walkbuf++ = *walk++; - } - } - *walkbuf = '\0'; - - /* and get ready to keep looking for replacements */ - if (subs[0].rm_so == subs[0].rm_eo) { - if (subs[0].rm_so + pos >= string_len) { - break; - } - new_l = strlen (buf) + 1; - if (new_l + 1 > buf_len) { - buf_len = 1 + buf_len + 2 * new_l; - nbuf = safe_emalloc(buf_len, sizeof(char), 0); - strcpy(nbuf, buf); - efree(buf); - buf = nbuf; - } - pos += subs[0].rm_eo + 1; - buf [new_l-1] = string [pos-1]; - buf [new_l] = '\0'; - } else { - pos += subs[0].rm_eo; - } - } else { /* REG_NOMATCH */ - new_l = strlen(buf) + strlen(&string[pos]); - if (new_l + 1 > buf_len) { - buf_len = new_l + 1; /* now we know exactly how long it is */ - nbuf = safe_emalloc(buf_len, sizeof(char), 0); - strcpy(nbuf, buf); - efree(buf); - buf = nbuf; - } - /* stick that last bit of string on our output */ - strlcat(buf, &string[pos], buf_len); - } - } - - /* don't want to leak memory .. */ - efree(subs); - regfree(&re); - - /* whew. */ - return (buf); -} -/* }}} */ - -/* {{{ php_ereg_replace - */ -static void php_ereg_replace(INTERNAL_FUNCTION_PARAMETERS, int icase) -{ - zval **arg_pattern, - **arg_replace, - **arg_string; - char *pattern; - char *string; - char *replace; - char *ret; - - if (ZEND_NUM_ARGS() != 3 || - zend_get_parameters_ex(3, &arg_pattern, &arg_replace, &arg_string) == FAILURE) { - WRONG_PARAM_COUNT; - } - - if (Z_TYPE_PP(arg_pattern) == IS_STRING) { - if (Z_STRVAL_PP(arg_pattern) && Z_STRLEN_PP(arg_pattern)) - pattern = estrndup(Z_STRVAL_PP(arg_pattern), Z_STRLEN_PP(arg_pattern)); - else - pattern = STR_EMPTY_ALLOC(); - } else { - convert_to_long_ex(arg_pattern); - pattern = emalloc(2); - pattern[0] = (char) Z_LVAL_PP(arg_pattern); - pattern[1] = '\0'; - } - - if (Z_TYPE_PP(arg_replace) == IS_STRING) { - if (Z_STRVAL_PP(arg_replace) && Z_STRLEN_PP(arg_replace)) - replace = estrndup(Z_STRVAL_PP(arg_replace), Z_STRLEN_PP(arg_replace)); - else - replace = STR_EMPTY_ALLOC(); - } else { - convert_to_long_ex(arg_replace); - replace = emalloc(2); - replace[0] = (char) Z_LVAL_PP(arg_replace); - replace[1] = '\0'; - } - - convert_to_string_ex(arg_string); - if (Z_STRVAL_PP(arg_string) && Z_STRLEN_PP(arg_string)) - string = estrndup(Z_STRVAL_PP(arg_string), Z_STRLEN_PP(arg_string)); - else - string = STR_EMPTY_ALLOC(); - - /* do the actual work */ - ret = php_reg_replace(pattern, replace, string, icase, 1); - if (ret == (char *) -1) { - RETVAL_FALSE; - } else { - RETVAL_STRING(ret, 1); - STR_FREE(ret); - } - - STR_FREE(string); - STR_FREE(replace); - STR_FREE(pattern); -} -/* }}} */ - -/* {{{ proto string ereg_replace(string pattern, string replacement, string string) - Replace regular expression */ -PHP_FUNCTION(ereg_replace) -{ - php_ereg_replace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); -} -/* }}} */ - -/* {{{ proto string eregi_replace(string pattern, string replacement, string string) - Case insensitive replace regular expression */ -PHP_FUNCTION(eregi_replace) -{ - php_ereg_replace(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); -} -/* }}} */ - -/* {{{ php_split - */ -static void php_split(INTERNAL_FUNCTION_PARAMETERS, int icase) -{ - zval **spliton, **str, **arg_count = NULL; - regex_t re; - regmatch_t subs[1]; - char *strp, *endp; - int err, size, count = -1, copts = 0; - int argc = ZEND_NUM_ARGS(); - - if (argc < 2 || argc > 3 || - zend_get_parameters_ex(argc, &spliton, &str, &arg_count) == FAILURE) { - WRONG_PARAM_COUNT; - } - - if (argc > 2) { - convert_to_long_ex(arg_count); - count = Z_LVAL_PP(arg_count); - } - - if (icase) - copts = REG_ICASE; - - convert_to_string_ex(spliton); - convert_to_string_ex(str); - - strp = Z_STRVAL_PP(str); - endp = strp + Z_STRLEN_PP(str); - - err = regcomp(&re, Z_STRVAL_PP(spliton), REG_EXTENDED | copts); - if (err) { - php_reg_eprint(err, &re); - RETURN_FALSE; - } - - array_init(return_value); - - /* churn through str, generating array entries as we go */ - while ((count == -1 || count > 1) && !(err = regexec(&re, strp, 1, subs, 0))) { - if (subs[0].rm_so == 0 && subs[0].rm_eo) { - /* match is at start of string, return empty string */ - add_next_index_stringl(return_value, "", 0, 1); - /* skip ahead the length of the regex match */ - strp += subs[0].rm_eo; - } else if (subs[0].rm_so == 0 && subs[0].rm_eo == 0) { - /* No more matches */ - regfree(&re); - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Regular Expression to split()"); - zend_hash_destroy(Z_ARRVAL_P(return_value)); - efree(Z_ARRVAL_P(return_value)); - RETURN_FALSE; - } else { - /* On a real match */ - - /* make a copy of the substring */ - size = subs[0].rm_so; - - /* add it to the array */ - add_next_index_stringl(return_value, strp, size, 1); - - /* point at our new starting point */ - strp = strp + subs[0].rm_eo; - } - - /* if we're only looking for a certain number of points, - stop looking once we hit it */ - if (count != -1) { - count--; - } - } - - /* see if we encountered an error */ - if (err && err != REG_NOMATCH) { - php_reg_eprint(err, &re); - regfree(&re); - zend_hash_destroy(Z_ARRVAL_P(return_value)); - efree(Z_ARRVAL_P(return_value)); - RETURN_FALSE; - } - - /* otherwise we just have one last element to add to the array */ - size = endp - strp; - - add_next_index_stringl(return_value, strp, size, 1); - - regfree(&re); -} -/* }}} */ - -/* {{{ proto array split(string pattern, string string [, int limit]) - Split string into array by regular expression */ -PHP_FUNCTION(split) -{ - php_split(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); -} -/* }}} */ - -/* {{{ proto array spliti(string pattern, string string [, int limit]) - Split string into array by regular expression case-insensitive */ - -PHP_FUNCTION(spliti) -{ - php_split(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); -} - -/* }}} */ - -/* {{{ proto string sql_regcase(string string) - Make regular expression for case insensitive match */ -PHPAPI PHP_FUNCTION(sql_regcase) -{ - zval **string; - char *tmp; - unsigned char c; - register int i, j; - - if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &string)==FAILURE) { - WRONG_PARAM_COUNT; - } - convert_to_string_ex(string); - - tmp = safe_emalloc(Z_STRLEN_PP(string), 4, 1); - - for (i = j = 0; i < Z_STRLEN_PP(string); i++) { - c = (unsigned char) Z_STRVAL_PP(string)[i]; - if(isalpha(c)) { - tmp[j++] = '['; - tmp[j++] = toupper(c); - tmp[j++] = tolower(c); - tmp[j++] = ']'; - } else { - tmp[j++] = c; - } - } - tmp[j] = 0; - - RETVAL_STRINGL(tmp, j, 1); - efree(tmp); -} -/* }}} */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: noet sw=4 ts=4 fdm=marker - * vim<600: noet sw=4 ts=4 - */ diff --git a/ext/ereg/php_ereg.h b/ext/ereg/php_ereg.h deleted file mode 100644 index a577db8a96ba1..0000000000000 --- a/ext/ereg/php_ereg.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Rasmus Lerdorf | - +----------------------------------------------------------------------+ -*/ - - -/* $Id$ */ - -#ifndef REG_H -#define REG_H - -PHPAPI char *php_reg_replace(const char *pattern, const char *replace, const char *string, int icase, int extended); - -PHP_FUNCTION(ereg); -PHP_FUNCTION(eregi); -PHP_FUNCTION(eregi_replace); -PHP_FUNCTION(ereg_replace); -PHP_FUNCTION(split); -PHP_FUNCTION(spliti); -PHPAPI PHP_FUNCTION(sql_regcase); - -ZEND_BEGIN_MODULE_GLOBALS(reg) - HashTable ht_rc; -ZEND_END_MODULE_GLOBALS(reg) - -PHP_MINIT_FUNCTION(regex); -PHP_MSHUTDOWN_FUNCTION(regex); -PHP_MINFO_FUNCTION(regex); - - -#ifdef ZTS -#define REG(v) TSRMG(reg_globals_id, zend_reg_globals *, v) -#else -#define REG(v) (reg_globals.v) -#endif - -#endif /* REG_H */ diff --git a/ext/ereg/php_regex.h b/ext/ereg/php_regex.h deleted file mode 100644 index 3537d6ab87221..0000000000000 --- a/ext/ereg/php_regex.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef PHP_REGEX_H -#define PHP_REGEX_H - -/* - * REGEX means: - * 0.. system regex - * 1.. bundled regex - */ - -#if REGEX -/* get aliases */ -#include "regex/regex_extra.h" -#include "regex/regex.h" - -/* get rid of aliases */ -#define PHP_NO_ALIASES -#include "regex/regex_extra.h" -#undef PHP_NO_ALIASES - -#undef _PCREPOSIX_H -#define _PCREPOSIX_H 1 - -#ifndef _REGEX_H -#define _REGEX_H 1 /* this should stop Apache from loading the system version of regex.h */ -#endif -#ifndef _REGEX_H_ -#define _REGEX_H_ 1 -#endif -#ifndef _RX_H -#define _RX_H 1 /* Try defining these for Linux to */ -#endif -#ifndef __REGEXP_LIBRARY_H__ -#define __REGEXP_LIBRARY_H__ 1 /* avoid Apache including regex.h */ -#endif -#ifndef _H_REGEX -#define _H_REGEX 1 /* This one is for AIX */ -#endif -#elif REGEX == 0 -#include -#ifndef _REGEX_H_ -#define _REGEX_H_ 1 -#endif -#endif - -#endif /* PHP_REGEX_H */ diff --git a/ext/ereg/regex/COPYRIGHT b/ext/ereg/regex/COPYRIGHT deleted file mode 100644 index d43362fbfc9a7..0000000000000 --- a/ext/ereg/regex/COPYRIGHT +++ /dev/null @@ -1,20 +0,0 @@ -Copyright 1992, 1993, 1994 Henry Spencer. All rights reserved. -This software is not subject to any license of the American Telephone -and Telegraph Company or of the Regents of the University of California. - -Permission is granted to anyone to use this software for any purpose on -any computer system, and to alter it and redistribute it, subject -to the following restrictions: - -1. The author is not responsible for the consequences of use of this - software, no matter how awful, even if they arise from flaws in it. - -2. The origin of this software must not be misrepresented, either by - explicit claim or by omission. Since few users ever read sources, - credits must appear in the documentation. - -3. Altered versions must be plainly marked as such, and must not be - misrepresented as being the original software. Since few users - ever read sources, credits must appear in the documentation. - -4. This notice may not be removed or altered. diff --git a/ext/ereg/regex/README b/ext/ereg/regex/README deleted file mode 100644 index cea9b67b6665d..0000000000000 --- a/ext/ereg/regex/README +++ /dev/null @@ -1,32 +0,0 @@ -alpha3.4 release. -Thu Mar 17 23:17:18 EST 1994 -henry@zoo.toronto.edu - -See WHATSNEW for change listing. - -installation notes: --------- -Read the comments at the beginning of Makefile before running. - -Utils.h contains some things that just might have to be modified on -some systems, as well as a nested include (ugh) of . - -The "fake" directory contains quick-and-dirty fakes for some header -files and routines that old systems may not have. Note also that --DUSEBCOPY will make utils.h substitute bcopy() for memmove(). - -After that, "make r" will build regcomp.o, regexec.o, regfree.o, -and regerror.o (the actual routines), bundle them together into a test -program, and run regression tests on them. No output is good output. - -"make lib" builds just the .o files for the actual routines (when -you're happy with testing and have adjusted CFLAGS for production), -and puts them together into libregex.a. You can pick up either the -library or *.o ("make lib" makes sure there are no other .o files left -around to confuse things). - -Main.c, debug.c, split.c are used for regression testing but are not part -of the RE routines themselves. - -Regex.h goes in /usr/include. All other .h files are internal only. --------- diff --git a/ext/ereg/regex/WHATSNEW b/ext/ereg/regex/WHATSNEW deleted file mode 100644 index 6e82e1dae0cd2..0000000000000 --- a/ext/ereg/regex/WHATSNEW +++ /dev/null @@ -1,92 +0,0 @@ -New in alpha3.4: The complex bug alluded to below has been fixed (in a -slightly kludgey temporary way that may hurt efficiency a bit; this is -another "get it out the door for 4.4" release). The tests at the end of -the tests file have accordingly been uncommented. The primary sign of -the bug was that something like a?b matching ab matched b rather than ab. -(The bug was essentially specific to this exact situation, else it would -have shown up earlier.) - -New in alpha3.3: The definition of word boundaries has been altered -slightly, to more closely match the usual programming notion that "_" -is an alphabetic. Stuff used for pre-ANSI systems is now in a subdir, -and the makefile no longer alludes to it in mysterious ways. The -makefile has generally been cleaned up some. Fixes have been made -(again!) so that the regression test will run without -DREDEBUG, at -the cost of weaker checking. A workaround for a bug in some folks' - has been added. And some more things have been added to -tests, including a couple right at the end which are commented out -because the code currently flunks them (complex bug; fix coming). -Plus the usual minor cleanup. - -New in alpha3.2: Assorted bits of cleanup and portability improvement -(the development base is now a BSDI system using GCC instead of an ancient -Sun system, and the newer compiler exposed some glitches). Fix for a -serious bug that affected REs using many [] (including REG_ICASE REs -because of the way they are implemented), *sometimes*, depending on -memory-allocation patterns. The header-file prototypes no longer name -the parameters, avoiding possible name conflicts. The possibility that -some clot has defined CHAR_MIN as (say) `-128' instead of `(-128)' is -now handled gracefully. "uchar" is no longer used as an internal type -name (too many people have the same idea). Still the same old lousy -performance, alas. - -New in alpha3.1: Basically nothing, this release is just a bookkeeping -convenience. Stay tuned. - -New in alpha3.0: Performance is no better, alas, but some fixes have been -made and some functionality has been added. (This is basically the "get -it out the door in time for 4.4" release.) One bug fix: regfree() didn't -free the main internal structure (how embarrassing). It is now possible -to put NULs in either the RE or the target string, using (resp.) a new -REG_PEND flag and the old REG_STARTEND flag. The REG_NOSPEC flag to -regcomp() makes all characters ordinary, so you can match a literal -string easily (this will become more useful when performance improves!). -There are now primitives to match beginnings and ends of words, although -the syntax is disgusting and so is the implementation. The REG_ATOI -debugging interface has changed a bit. And there has been considerable -internal cleanup of various kinds. - -New in alpha2.3: Split change list out of README, and moved flags notes -into Makefile. Macro-ized the name of regex(7) in regex(3), since it has -to change for 4.4BSD. Cleanup work in engine.c, and some new regression -tests to catch tricky cases thereof. - -New in alpha2.2: Out-of-date manpages updated. Regerror() acquires two -small extensions -- REG_ITOA and REG_ATOI -- which avoid debugging kludges -in my own test program and might be useful to others for similar purposes. -The regression test will now compile (and run) without REDEBUG. The -BRE \$ bug is fixed. Most uses of "uchar" are gone; it's all chars now. -Char/uchar parameters are now written int/unsigned, to avoid possible -portability problems with unpromoted parameters. Some unsigned casts have -been introduced to minimize portability problems with shifting into sign -bits. - -New in alpha2.1: Lots of little stuff, cleanup and fixes. The one big -thing is that regex.h is now generated, using mkh, rather than being -supplied in the distribution; due to circularities in dependencies, -you have to build regex.h explicitly by "make h". The two known bugs -have been fixed (and the regression test now checks for them), as has a -problem with assertions not being suppressed in the absence of REDEBUG. -No performance work yet. - -New in alpha2: Backslash-anything is an ordinary character, not an -error (except, of course, for the handful of backslashed metacharacters -in BREs), which should reduce script breakage. The regression test -checks *where* null strings are supposed to match, and has generally -been tightened up somewhat. Small bug fixes in parameter passing (not -harmful, but technically errors) and some other areas. Debugging -invoked by defining REDEBUG rather than not defining NDEBUG. - -New in alpha+3: full prototyping for internal routines, using a little -helper program, mkh, which extracts prototypes given in stylized comments. -More minor cleanup. Buglet fix: it's CHAR_BIT, not CHAR_BITS. Simple -pre-screening of input when a literal string is known to be part of the -RE; this does wonders for performance. - -New in alpha+2: minor bits of cleanup. Notably, the number "32" for the -word width isn't hardwired into regexec.c any more, the public header -file prototypes the functions if __STDC__ is defined, and some small typos -in the manpages have been fixed. - -New in alpha+1: improvements to the manual pages, and an important -extension, the REG_STARTEND option to regexec(). diff --git a/ext/ereg/regex/cclass.h b/ext/ereg/regex/cclass.h deleted file mode 100644 index df41694b0403b..0000000000000 --- a/ext/ereg/regex/cclass.h +++ /dev/null @@ -1,30 +0,0 @@ -/* character-class table */ -static struct cclass { - unsigned char *name; - unsigned char *chars; - unsigned char *multis; -} cclasses[] = { - {"alnum", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", ""}, - {"alpha", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", - ""}, - {"blank", " \t", ""}, - {"cntrl", "\007\b\t\n\v\f\r\1\2\3\4\5\6\16\17\20\21\22\23\24\ -\25\26\27\30\31\32\33\34\35\36\37\177", ""}, - {"digit", "0123456789", ""}, - {"graph", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\ -0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", - ""}, - {"lower", "abcdefghijklmnopqrstuvwxyz", - ""}, - {"print", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\ -0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ ", - ""}, - {"punct", "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", - ""}, - {"space", "\t\n\v\f\r ", ""}, - {"upper", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", - ""}, - {"xdigit", "0123456789ABCDEFabcdef", - ""}, - {NULL, 0, ""} -}; diff --git a/ext/ereg/regex/cname.h b/ext/ereg/regex/cname.h deleted file mode 100644 index 670b273882817..0000000000000 --- a/ext/ereg/regex/cname.h +++ /dev/null @@ -1,102 +0,0 @@ -/* character-name table */ -static struct cname { - char *name; - char code; -} cnames[] = { - {"NUL", '\0'}, - {"SOH", '\001'}, - {"STX", '\002'}, - {"ETX", '\003'}, - {"EOT", '\004'}, - {"ENQ", '\005'}, - {"ACK", '\006'}, - {"BEL", '\007'}, - {"alert", '\007'}, - {"BS", '\010'}, - {"backspace", '\b'}, - {"HT", '\011'}, - {"tab", '\t'}, - {"LF", '\012'}, - {"newline", '\n'}, - {"VT", '\013'}, - {"vertical-tab", '\v'}, - {"FF", '\014'}, - {"form-feed", '\f'}, - {"CR", '\015'}, - {"carriage-return", '\r'}, - {"SO", '\016'}, - {"SI", '\017'}, - {"DLE", '\020'}, - {"DC1", '\021'}, - {"DC2", '\022'}, - {"DC3", '\023'}, - {"DC4", '\024'}, - {"NAK", '\025'}, - {"SYN", '\026'}, - {"ETB", '\027'}, - {"CAN", '\030'}, - {"EM", '\031'}, - {"SUB", '\032'}, - {"ESC", '\033'}, - {"IS4", '\034'}, - {"FS", '\034'}, - {"IS3", '\035'}, - {"GS", '\035'}, - {"IS2", '\036'}, - {"RS", '\036'}, - {"IS1", '\037'}, - {"US", '\037'}, - {"space", ' '}, - {"exclamation-mark", '!'}, - {"quotation-mark", '"'}, - {"number-sign", '#'}, - {"dollar-sign", '$'}, - {"percent-sign", '%'}, - {"ampersand", '&'}, - {"apostrophe", '\''}, - {"left-parenthesis", '('}, - {"right-parenthesis", ')'}, - {"asterisk", '*'}, - {"plus-sign", '+'}, - {"comma", ','}, - {"hyphen", '-'}, - {"hyphen-minus", '-'}, - {"period", '.'}, - {"full-stop", '.'}, - {"slash", '/'}, - {"solidus", '/'}, - {"zero", '0'}, - {"one", '1'}, - {"two", '2'}, - {"three", '3'}, - {"four", '4'}, - {"five", '5'}, - {"six", '6'}, - {"seven", '7'}, - {"eight", '8'}, - {"nine", '9'}, - {"colon", ':'}, - {"semicolon", ';'}, - {"less-than-sign", '<'}, - {"equals-sign", '='}, - {"greater-than-sign", '>'}, - {"question-mark", '?'}, - {"commercial-at", '@'}, - {"left-square-bracket", '['}, - {"backslash", '\\'}, - {"reverse-solidus", '\\'}, - {"right-square-bracket", ']'}, - {"circumflex", '^'}, - {"circumflex-accent", '^'}, - {"underscore", '_'}, - {"low-line", '_'}, - {"grave-accent", '`'}, - {"left-brace", '{'}, - {"left-curly-bracket", '{'}, - {"vertical-line", '|'}, - {"right-brace", '}'}, - {"right-curly-bracket", '}'}, - {"tilde", '~'}, - {"DEL", '\177'}, - {NULL, 0}, -}; diff --git a/ext/ereg/regex/debug.c b/ext/ereg/regex/debug.c deleted file mode 100644 index 3db93ef293ae0..0000000000000 --- a/ext/ereg/regex/debug.c +++ /dev/null @@ -1,242 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#include "utils.h" -#include "regex2.h" -#include "debug.ih" - -/* - - regprint - print a regexp for debugging - == void regprint(regex_t *r, FILE *d); - */ -void -regprint(r, d) -regex_t *r; -FILE *d; -{ - register struct re_guts *g = r->re_g; - register int i; - register int c; - register int last; - int nincat[NC]; - - fprintf(d, "%ld states, %d categories", (long)g->nstates, - g->ncategories); - fprintf(d, ", first %ld last %ld", (long)g->firststate, - (long)g->laststate); - if (g->iflags&USEBOL) - fprintf(d, ", USEBOL"); - if (g->iflags&USEEOL) - fprintf(d, ", USEEOL"); - if (g->iflags&BAD) - fprintf(d, ", BAD"); - if (g->nsub > 0) - fprintf(d, ", nsub=%ld", (long)g->nsub); - if (g->must != NULL) - fprintf(d, ", must(%ld) `%*s'", (long)g->mlen, (int)g->mlen, - g->must); - if (g->backrefs) - fprintf(d, ", backrefs"); - if (g->nplus > 0) - fprintf(d, ", nplus %ld", (long)g->nplus); - fprintf(d, "\n"); - s_print(g, d); - for (i = 0; i < g->ncategories; i++) { - nincat[i] = 0; - for (c = CHAR_MIN; c <= CHAR_MAX; c++) - if (g->categories[c] == i) - nincat[i]++; - } - fprintf(d, "cc0#%d", nincat[0]); - for (i = 1; i < g->ncategories; i++) - if (nincat[i] == 1) { - for (c = CHAR_MIN; c <= CHAR_MAX; c++) - if (g->categories[c] == i) - break; - fprintf(d, ", %d=%s", i, regchar(c)); - } - fprintf(d, "\n"); - for (i = 1; i < g->ncategories; i++) - if (nincat[i] != 1) { - fprintf(d, "cc%d\t", i); - last = -1; - for (c = CHAR_MIN; c <= CHAR_MAX+1; c++) /* +1 does flush */ - if (c <= CHAR_MAX && g->categories[c] == i) { - if (last < 0) { - fprintf(d, "%s", regchar(c)); - last = c; - } - } else { - if (last >= 0) { - if (last != c-1) - fprintf(d, "-%s", - regchar(c-1)); - last = -1; - } - } - fprintf(d, "\n"); - } -} - -/* - - s_print - print the strip for debugging - == static void s_print(register struct re_guts *g, FILE *d); - */ -static void -s_print(g, d) -register struct re_guts *g; -FILE *d; -{ - register sop *s; - register cset *cs; - register int i; - register int done = 0; - register sop opnd; - register int col = 0; - register int last; - register sopno offset = 2; -# define GAP() { if (offset % 5 == 0) { \ - if (col > 40) { \ - fprintf(d, "\n\t"); \ - col = 0; \ - } else { \ - fprintf(d, " "); \ - col++; \ - } \ - } else \ - col++; \ - offset++; \ - } - - if (OP(g->strip[0]) != OEND) - fprintf(d, "missing initial OEND!\n"); - for (s = &g->strip[1]; !done; s++) { - opnd = OPND(*s); - switch (OP(*s)) { - case OEND: - fprintf(d, "\n"); - done = 1; - break; - case OCHAR: - if (strchr("\\|()^$.[+*?{}!<> ", (char)opnd) != NULL) - fprintf(d, "\\%c", (unsigned char)opnd); - else - fprintf(d, "%s", regchar((unsigned char)opnd)); - break; - case OBOL: - fprintf(d, "^"); - break; - case OEOL: - fprintf(d, "$"); - break; - case OBOW: - fprintf(d, "\\{"); - break; - case OEOW: - fprintf(d, "\\}"); - break; - case OANY: - fprintf(d, "."); - break; - case OANYOF: - fprintf(d, "[(%ld)", (long)opnd); - cs = &g->sets[opnd]; - last = -1; - for (i = 0; i < g->csetsize+1; i++) /* +1 flushes */ - if (CHIN(cs, i) && i < g->csetsize) { - if (last < 0) { - fprintf(d, "%s", regchar(i)); - last = i; - } - } else { - if (last >= 0) { - if (last != i-1) - fprintf(d, "-%s", - regchar(i-1)); - last = -1; - } - } - fprintf(d, "]"); - break; - case OBACK_: - fprintf(d, "(\\<%ld>", (long)opnd); - break; - case O_BACK: - fprintf(d, "<%ld>\\)", (long)opnd); - break; - case OPLUS_: - fprintf(d, "(+"); - if (OP(*(s+opnd)) != O_PLUS) - fprintf(d, "<%ld>", (long)opnd); - break; - case O_PLUS: - if (OP(*(s-opnd)) != OPLUS_) - fprintf(d, "<%ld>", (long)opnd); - fprintf(d, "+)"); - break; - case OQUEST_: - fprintf(d, "(?"); - if (OP(*(s+opnd)) != O_QUEST) - fprintf(d, "<%ld>", (long)opnd); - break; - case O_QUEST: - if (OP(*(s-opnd)) != OQUEST_) - fprintf(d, "<%ld>", (long)opnd); - fprintf(d, "?)"); - break; - case OLPAREN: - fprintf(d, "((<%ld>", (long)opnd); - break; - case ORPAREN: - fprintf(d, "<%ld>))", (long)opnd); - break; - case OCH_: - fprintf(d, "<"); - if (OP(*(s+opnd)) != OOR2) - fprintf(d, "<%ld>", (long)opnd); - break; - case OOR1: - if (OP(*(s-opnd)) != OOR1 && OP(*(s-opnd)) != OCH_) - fprintf(d, "<%ld>", (long)opnd); - fprintf(d, "|"); - break; - case OOR2: - fprintf(d, "|"); - if (OP(*(s+opnd)) != OOR2 && OP(*(s+opnd)) != O_CH) - fprintf(d, "<%ld>", (long)opnd); - break; - case O_CH: - if (OP(*(s-opnd)) != OOR1) - fprintf(d, "<%ld>", (long)opnd); - fprintf(d, ">"); - break; - default: - fprintf(d, "!%ld(%ld)!", OP(*s), opnd); - break; - } - if (!done) - GAP(); - } -} - -/* - - regchar - make a character printable - == static char *regchar(int ch); - */ -static unsigned char * /* -> representation */ -regchar(ch) -int ch; -{ - static unsigned char buf[10]; - - if (isprint(ch) || ch == ' ') - sprintf(buf, "%c", ch); - else - sprintf(buf, "\\%o", ch); - return(buf); -} diff --git a/ext/ereg/regex/debug.ih b/ext/ereg/regex/debug.ih deleted file mode 100644 index 5f40ff7917876..0000000000000 --- a/ext/ereg/regex/debug.ih +++ /dev/null @@ -1,14 +0,0 @@ -/* ========= begin header generated by ./mkh ========= */ -#ifdef __cplusplus -extern "C" { -#endif - -/* === debug.c === */ -void regprint(regex_t *r, FILE *d); -static void s_print(register struct re_guts *g, FILE *d); -static char *regchar(int ch); - -#ifdef __cplusplus -} -#endif -/* ========= end header generated by ./mkh ========= */ diff --git a/ext/ereg/regex/engine.c b/ext/ereg/regex/engine.c deleted file mode 100644 index 0682267f61801..0000000000000 --- a/ext/ereg/regex/engine.c +++ /dev/null @@ -1,1019 +0,0 @@ -/* - * The matching engine and friends. This file is #included by regexec.c - * after suitable #defines of a variety of macros used herein, so that - * different state representations can be used without duplicating masses - * of code. - */ - -#ifdef SNAMES -#define matcher smatcher -#define fast sfast -#define slow sslow -#define dissect sdissect -#define backref sbackref -#define step sstep -#define print sprint -#define at sat -#define match smat -#endif -#ifdef LNAMES -#define matcher lmatcher -#define fast lfast -#define slow lslow -#define dissect ldissect -#define backref lbackref -#define step lstep -#define print lprint -#define at lat -#define match lmat -#endif - -/* another structure passed up and down to avoid zillions of parameters */ -struct match { - struct re_guts *g; - int eflags; - regmatch_t *pmatch; /* [nsub+1] (0 element unused) */ - unsigned char *offp; /* offsets work from here */ - unsigned char *beginp; /* start of string -- virtual NUL precedes */ - unsigned char *endp; /* end of string -- virtual NUL here */ - unsigned char *coldp; /* can be no match starting before here */ - unsigned char **lastpos; /* [nplus+1] */ - STATEVARS; - states st; /* current states */ - states fresh; /* states for a fresh start */ - states tmp; /* temporary */ - states empty; /* empty set of states */ -}; - -#include "engine.ih" - -#ifdef REDEBUG -#define SP(t, s, c) print(m, t, s, c, stdout) -#define AT(t, p1, p2, s1, s2) at(m, t, p1, p2, s1, s2) -#define NOTE(str) { if (m->eflags®_TRACE) printf("=%s\n", (str)); } -#else -#define SP(t, s, c) /* nothing */ -#define AT(t, p1, p2, s1, s2) /* nothing */ -#define NOTE(s) /* nothing */ -#endif - -/* - - matcher - the actual matching engine - == static int matcher(register struct re_guts *g, char *string, \ - == size_t nmatch, regmatch_t pmatch[], int eflags); - */ -static int /* 0 success, REG_NOMATCH failure */ -matcher(g, string, nmatch, pmatch, eflags) -register struct re_guts *g; -unsigned char *string; -size_t nmatch; -regmatch_t pmatch[]; -int eflags; -{ - register unsigned char *endp; - register size_t i; - struct match mv; - register struct match *m = &mv; - register unsigned char *dp; - const register sopno gf = g->firststate+1; /* +1 for OEND */ - const register sopno gl = g->laststate; - unsigned char *start; - unsigned char *stop; - - /* simplify the situation where possible */ - if (g->cflags®_NOSUB) - nmatch = 0; - if (eflags®_STARTEND) { - start = string + pmatch[0].rm_so; - stop = string + pmatch[0].rm_eo; - } else { - start = string; - stop = start + strlen(start); - } - if (stop < start) - return(REG_INVARG); - - /* prescreening; this does wonders for this rather slow code */ - if (g->must != NULL) { - for (dp = start; dp < stop; dp++) - if (*dp == g->must[0] && stop - dp >= g->mlen && - memcmp(dp, g->must, (size_t)g->mlen) == 0) - break; - if (dp == stop) /* we didn't find g->must */ - return(REG_NOMATCH); - } - - /* match struct setup */ - m->g = g; - m->eflags = eflags; - m->pmatch = NULL; - m->lastpos = NULL; - m->offp = string; - m->beginp = start; - m->endp = stop; - STATESETUP(m, 4); - SETUP(m->st); - SETUP(m->fresh); - SETUP(m->tmp); - SETUP(m->empty); - CLEAR(m->empty); - - /* this loop does only one repetition except for backrefs */ - for (;;) { - endp = fast(m, start, stop, gf, gl); - if (endp == NULL) { /* a miss */ - STATETEARDOWN(m); - return(REG_NOMATCH); - } - if (nmatch == 0 && !g->backrefs) - break; /* no further info needed */ - - /* where? */ - assert(m->coldp != NULL); - for (;;) { - NOTE("finding start"); - endp = slow(m, m->coldp, stop, gf, gl); - if (endp != NULL) - break; - assert(m->coldp < m->endp); - m->coldp++; - } - if (nmatch == 1 && !g->backrefs) - break; /* no further info needed */ - - /* oh my, he wants the subexpressions... */ - if (m->pmatch == NULL) - m->pmatch = (regmatch_t *)malloc((m->g->nsub + 1) * - sizeof(regmatch_t)); - if (m->pmatch == NULL) { - STATETEARDOWN(m); - return(REG_ESPACE); - } - for (i = 1; i <= m->g->nsub; i++) - m->pmatch[i].rm_so = m->pmatch[i].rm_eo = -1; - if (!g->backrefs && !(m->eflags®_BACKR)) { - NOTE("dissecting"); - dp = dissect(m, m->coldp, endp, gf, gl); - } else { - if (g->nplus > 0 && m->lastpos == NULL) - m->lastpos = (unsigned char **)malloc((g->nplus+1) * - sizeof(unsigned char *)); - if (g->nplus > 0 && m->lastpos == NULL) { - free((char *)m->pmatch); - STATETEARDOWN(m); - return(REG_ESPACE); - } - NOTE("backref dissect"); - dp = backref(m, m->coldp, endp, gf, gl, (sopno)0); - } - if (dp != NULL) - break; - - /* uh-oh... we couldn't find a subexpression-level match */ - assert(g->backrefs); /* must be back references doing it */ - assert(g->nplus == 0 || m->lastpos != NULL); - for (;;) { - if (dp != NULL || endp <= m->coldp) - break; /* defeat */ - NOTE("backoff"); - endp = slow(m, m->coldp, endp-1, gf, gl); - if (endp == NULL) - break; /* defeat */ - /* try it on a shorter possibility */ -#ifndef NDEBUG - for (i = 1; i <= m->g->nsub; i++) { - assert(m->pmatch[i].rm_so == -1); - assert(m->pmatch[i].rm_eo == -1); - } -#endif - NOTE("backoff dissect"); - dp = backref(m, m->coldp, endp, gf, gl, (sopno)0); - } - assert(dp == NULL || dp == endp); - if (dp != NULL) /* found a shorter one */ - break; - - /* despite initial appearances, there is no match here */ - NOTE("false alarm"); - start = m->coldp + 1; /* recycle starting later */ - assert(start <= stop); - } - - /* fill in the details if requested */ - if (nmatch > 0) { - pmatch[0].rm_so = m->coldp - m->offp; - pmatch[0].rm_eo = endp - m->offp; - } - if (nmatch > 1) { - assert(m->pmatch != NULL); - for (i = 1; i < nmatch; i++) - if (i <= m->g->nsub) - pmatch[i] = m->pmatch[i]; - else { - pmatch[i].rm_so = -1; - pmatch[i].rm_eo = -1; - } - } - - if (m->pmatch != NULL) - free((char *)m->pmatch); - if (m->lastpos != NULL) - free((char *)m->lastpos); - STATETEARDOWN(m); - return(0); -} - -/* - - dissect - figure out what matched what, no back references - == static unsigned char *dissect(register struct match *m, unsigned char *start, \ - == unsigned char *stop, sopno startst, sopno stopst); - */ -static unsigned char * /* == stop (success) always */ -dissect(m, start, stop, startst, stopst) -register struct match *m; -unsigned char *start; -unsigned char *stop; -sopno startst; -sopno stopst; -{ - register int i; - register sopno ss; /* start sop of current subRE */ - register sopno es; /* end sop of current subRE */ - register unsigned char *sp; /* start of string matched by it */ - register unsigned char *stp; /* string matched by it cannot pass here */ - register unsigned char *rest; /* start of rest of string */ - register unsigned char *tail; /* string unmatched by rest of RE */ - register sopno ssub; /* start sop of subsubRE */ - register sopno esub; /* end sop of subsubRE */ - register unsigned char *ssp; /* start of string matched by subsubRE */ - register unsigned char *sep; /* end of string matched by subsubRE */ - register unsigned char *oldssp; /* previous ssp */ - register unsigned char *dp; - - AT("diss", start, stop, startst, stopst); - sp = start; - for (ss = startst; ss < stopst; ss = es) { - /* identify end of subRE */ - es = ss; - switch (OP(m->g->strip[es])) { - case OPLUS_: - case OQUEST_: - es += OPND(m->g->strip[es]); - break; - case OCH_: - while (OP(m->g->strip[es]) != O_CH) - es += OPND(m->g->strip[es]); - break; - } - es++; - - /* figure out what it matched */ - switch (OP(m->g->strip[ss])) { - case OEND: - assert(PHP_REGEX_NOPE); - break; - case OCHAR: - sp++; - break; - case OBOL: - case OEOL: - case OBOW: - case OEOW: - break; - case OANY: - case OANYOF: - sp++; - break; - case OBACK_: - case O_BACK: - assert(PHP_REGEX_NOPE); - break; - /* cases where length of match is hard to find */ - case OQUEST_: - stp = stop; - for (;;) { - /* how long could this one be? */ - rest = slow(m, sp, stp, ss, es); - assert(rest != NULL); /* it did match */ - /* could the rest match the rest? */ - tail = slow(m, rest, stop, es, stopst); - if (tail == stop) - break; /* yes! */ - /* no -- try a shorter match for this one */ - stp = rest - 1; - assert(stp >= sp); /* it did work */ - } - ssub = ss + 1; - esub = es - 1; - /* did innards match? */ - if (slow(m, sp, rest, ssub, esub) != NULL) { - dp = dissect(m, sp, rest, ssub, esub); - assert(dp == rest); - } else /* no */ - assert(sp == rest); - sp = rest; - break; - case OPLUS_: - stp = stop; - for (;;) { - /* how long could this one be? */ - rest = slow(m, sp, stp, ss, es); - assert(rest != NULL); /* it did match */ - /* could the rest match the rest? */ - tail = slow(m, rest, stop, es, stopst); - if (tail == stop) - break; /* yes! */ - /* no -- try a shorter match for this one */ - stp = rest - 1; - assert(stp >= sp); /* it did work */ - } - ssub = ss + 1; - esub = es - 1; - ssp = sp; - oldssp = ssp; - for (;;) { /* find last match of innards */ - sep = slow(m, ssp, rest, ssub, esub); - if (sep == NULL || sep == ssp) - break; /* failed or matched null */ - oldssp = ssp; /* on to next try */ - ssp = sep; - } - if (sep == NULL) { - /* last successful match */ - sep = ssp; - ssp = oldssp; - } - assert(sep == rest); /* must exhaust substring */ - assert(slow(m, ssp, sep, ssub, esub) == rest); - dp = dissect(m, ssp, sep, ssub, esub); - assert(dp == sep); - sp = rest; - break; - case OCH_: - stp = stop; - for (;;) { - /* how long could this one be? */ - rest = slow(m, sp, stp, ss, es); - assert(rest != NULL); /* it did match */ - /* could the rest match the rest? */ - tail = slow(m, rest, stop, es, stopst); - if (tail == stop) - break; /* yes! */ - /* no -- try a shorter match for this one */ - stp = rest - 1; - assert(stp >= sp); /* it did work */ - } - ssub = ss + 1; - esub = ss + OPND(m->g->strip[ss]) - 1; - assert(OP(m->g->strip[esub]) == OOR1); - for (;;) { /* find first matching branch */ - if (slow(m, sp, rest, ssub, esub) == rest) - break; /* it matched all of it */ - /* that one missed, try next one */ - assert(OP(m->g->strip[esub]) == OOR1); - esub++; - assert(OP(m->g->strip[esub]) == OOR2); - ssub = esub + 1; - esub += OPND(m->g->strip[esub]); - if (OP(m->g->strip[esub]) == OOR2) - esub--; - else - assert(OP(m->g->strip[esub]) == O_CH); - } - dp = dissect(m, sp, rest, ssub, esub); - assert(dp == rest); - sp = rest; - break; - case O_PLUS: - case O_QUEST: - case OOR1: - case OOR2: - case O_CH: - assert(PHP_REGEX_NOPE); - break; - case OLPAREN: - i = OPND(m->g->strip[ss]); - assert(0 < i && i <= m->g->nsub); - m->pmatch[i].rm_so = sp - m->offp; - break; - case ORPAREN: - i = OPND(m->g->strip[ss]); - assert(0 < i && i <= m->g->nsub); - m->pmatch[i].rm_eo = sp - m->offp; - break; - default: /* uh oh */ - assert(PHP_REGEX_NOPE); - break; - } - } - - assert(sp == stop); - return(sp); -} - -/* - - backref - figure out what matched what, figuring in back references - == static unsigned char *backref(register struct match *m, unsigned char *start, \ - == unsigned char *stop, sopno startst, sopno stopst, sopno lev); - */ -static unsigned char * /* == stop (success) or NULL (failure) */ -backref(m, start, stop, startst, stopst, lev) -register struct match *m; -unsigned char *start; -unsigned char *stop; -sopno startst; -sopno stopst; -sopno lev; /* PLUS nesting level */ -{ - register int i; - register sopno ss; /* start sop of current subRE */ - register unsigned char *sp; /* start of string matched by it */ - register sopno ssub; /* start sop of subsubRE */ - register sopno esub; /* end sop of subsubRE */ - register unsigned char *ssp; /* start of string matched by subsubRE */ - register unsigned char *dp; - register size_t len; - register int hard; - register sop s; - register regoff_t offsave; - register cset *cs; - - AT("back", start, stop, startst, stopst); - sp = start; - - /* get as far as we can with easy stuff */ - hard = 0; - for (ss = startst; !hard && ss < stopst; ss++) - switch (OP(s = m->g->strip[ss])) { - case OCHAR: - if (sp == stop || *sp++ != (unsigned char)OPND(s)) - return(NULL); - break; - case OANY: - if (sp == stop) - return(NULL); - sp++; - break; - case OANYOF: - cs = &m->g->sets[OPND(s)]; - if (sp == stop || !CHIN(cs, *sp++)) - return(NULL); - break; - case OBOL: - if ( (sp == m->beginp && !(m->eflags®_NOTBOL)) || - (sp < m->endp && *(sp-1) == '\n' && - (m->g->cflags®_NEWLINE)) ) - { /* yes */ } - else - return(NULL); - break; - case OEOL: - if ( (sp == m->endp && !(m->eflags®_NOTEOL)) || - (sp < m->endp && *sp == '\n' && - (m->g->cflags®_NEWLINE)) ) - { /* yes */ } - else - return(NULL); - break; - case OBOW: - if (( (sp == m->beginp && !(m->eflags®_NOTBOL)) || - (sp < m->endp && *(sp-1) == '\n' && - (m->g->cflags®_NEWLINE)) || - (sp > m->beginp && - !ISWORD(*(sp-1))) ) && - (sp < m->endp && ISWORD(*sp)) ) - { /* yes */ } - else - return(NULL); - break; - case OEOW: - if (( (sp == m->endp && !(m->eflags®_NOTEOL)) || - (sp < m->endp && *sp == '\n' && - (m->g->cflags®_NEWLINE)) || - (sp < m->endp && !ISWORD(*sp)) ) && - (sp > m->beginp && ISWORD(*(sp-1))) ) - { /* yes */ } - else - return(NULL); - break; - case O_QUEST: - break; - case OOR1: /* matches null but needs to skip */ - ss++; - s = m->g->strip[ss]; - do { - assert(OP(s) == OOR2); - ss += OPND(s); - } while (OP(s = m->g->strip[ss]) != O_CH); - /* note that the ss++ gets us past the O_CH */ - break; - default: /* have to make a choice */ - hard = 1; - break; - } - if (!hard) { /* that was it! */ - if (sp != stop) - return(NULL); - return(sp); - } - ss--; /* adjust for the for's final increment */ - - /* the hard stuff */ - AT("hard", sp, stop, ss, stopst); - s = m->g->strip[ss]; - switch (OP(s)) { - case OBACK_: /* the vilest depths */ - i = OPND(s); - assert(0 < i && i <= m->g->nsub); - if (m->pmatch[i].rm_eo == -1) - return(NULL); - assert(m->pmatch[i].rm_so != -1); - len = m->pmatch[i].rm_eo - m->pmatch[i].rm_so; - assert(stop - m->beginp >= len); - if (sp > stop - len) - return(NULL); /* not enough left to match */ - ssp = m->offp + m->pmatch[i].rm_so; - if (memcmp(sp, ssp, len) != 0) - return(NULL); - while (m->g->strip[ss] != SOP(O_BACK, i)) - ss++; - return(backref(m, sp+len, stop, ss+1, stopst, lev)); - break; - case OQUEST_: /* to null or not */ - dp = backref(m, sp, stop, ss+1, stopst, lev); - if (dp != NULL) - return(dp); /* not */ - return(backref(m, sp, stop, ss+OPND(s)+1, stopst, lev)); - break; - case OPLUS_: - assert(m->lastpos != NULL); - assert(lev+1 <= m->g->nplus); - m->lastpos[lev+1] = sp; - return(backref(m, sp, stop, ss+1, stopst, lev+1)); - break; - case O_PLUS: - if (sp == m->lastpos[lev]) /* last pass matched null */ - return(backref(m, sp, stop, ss+1, stopst, lev-1)); - /* try another pass */ - m->lastpos[lev] = sp; - dp = backref(m, sp, stop, ss-OPND(s)+1, stopst, lev); - if (dp == NULL) - return(backref(m, sp, stop, ss+1, stopst, lev-1)); - else - return(dp); - break; - case OCH_: /* find the right one, if any */ - ssub = ss + 1; - esub = ss + OPND(s) - 1; - assert(OP(m->g->strip[esub]) == OOR1); - for (;;) { /* find first matching branch */ - dp = backref(m, sp, stop, ssub, esub, lev); - if (dp != NULL) - return(dp); - /* that one missed, try next one */ - if (OP(m->g->strip[esub]) == O_CH) - return(NULL); /* there is none */ - esub++; - assert(OP(m->g->strip[esub]) == OOR2); - ssub = esub + 1; - esub += OPND(m->g->strip[esub]); - if (OP(m->g->strip[esub]) == OOR2) - esub--; - else - assert(OP(m->g->strip[esub]) == O_CH); - } - break; - case OLPAREN: /* must undo assignment if rest fails */ - i = OPND(s); - assert(0 < i && i <= m->g->nsub); - offsave = m->pmatch[i].rm_so; - m->pmatch[i].rm_so = sp - m->offp; - dp = backref(m, sp, stop, ss+1, stopst, lev); - if (dp != NULL) - return(dp); - m->pmatch[i].rm_so = offsave; - return(NULL); - break; - case ORPAREN: /* must undo assignment if rest fails */ - i = OPND(s); - assert(0 < i && i <= m->g->nsub); - offsave = m->pmatch[i].rm_eo; - m->pmatch[i].rm_eo = sp - m->offp; - dp = backref(m, sp, stop, ss+1, stopst, lev); - if (dp != NULL) - return(dp); - m->pmatch[i].rm_eo = offsave; - return(NULL); - break; - default: /* uh oh */ - assert(PHP_REGEX_NOPE); - break; - } - - /* "can't happen" */ - assert(PHP_REGEX_NOPE); - /* NOTREACHED */ - return((unsigned char *)NULL); /* dummy */ -} - -/* - - fast - step through the string at top speed - == static unsigned char *fast(register struct match *m, unsigned char *start, \ - == unsigned char *stop, sopno startst, sopno stopst); - */ -static unsigned char * /* where tentative match ended, or NULL */ -fast(m, start, stop, startst, stopst) -register struct match *m; -unsigned char *start; -unsigned char *stop; -sopno startst; -sopno stopst; -{ - register states st = m->st; - register states fresh = m->fresh; - register states tmp = m->tmp; - register unsigned char *p = start; - register int c = (start == m->beginp) ? OUT : *(start-1); - register int lastc; /* previous c */ - register int flagch; - register int i; - register unsigned char *coldp; /* last p after which no match was underway */ - - CLEAR(st); - SET1(st, startst); - st = step(m->g, startst, stopst, st, NOTHING, st); - ASSIGN(fresh, st); - SP("start", st, *p); - coldp = NULL; - for (;;) { - /* next character */ - lastc = c; - c = (p == m->endp) ? OUT : *p; - if (EQ(st, fresh)) - coldp = p; - - /* is there an EOL and/or BOL between lastc and c? */ - flagch = '\0'; - i = 0; - if ( (lastc == '\n' && m->g->cflags®_NEWLINE) || - (lastc == OUT && !(m->eflags®_NOTBOL)) ) { - flagch = BOL; - i = m->g->nbol; - } - if ( (c == '\n' && m->g->cflags®_NEWLINE) || - (c == OUT && !(m->eflags®_NOTEOL)) ) { - flagch = (flagch == BOL) ? BOLEOL : EOL; - i += m->g->neol; - } - if (i != 0) { - for (; i > 0; i--) - st = step(m->g, startst, stopst, st, flagch, st); - SP("boleol", st, c); - } - - /* how about a word boundary? */ - if ( (flagch == BOL || (lastc != OUT && !ISWORD(lastc))) && - (c != OUT && ISWORD(c)) ) { - flagch = BOW; - } - if ( (lastc != OUT && ISWORD(lastc)) && - (flagch == EOL || (c != OUT && !ISWORD(c))) ) { - flagch = EOW; - } - if (flagch == BOW || flagch == EOW) { - st = step(m->g, startst, stopst, st, flagch, st); - SP("boweow", st, c); - } - - /* are we done? */ - if (ISSET(st, stopst) || p == stop) - break; /* NOTE BREAK OUT */ - - /* no, we must deal with this character */ - ASSIGN(tmp, st); - ASSIGN(st, fresh); - assert(c != OUT); - st = step(m->g, startst, stopst, tmp, c, st); - SP("aft", st, c); - assert(EQ(step(m->g, startst, stopst, st, NOTHING, st), st)); - p++; - } - - assert(coldp != NULL); - m->coldp = coldp; - if (ISSET(st, stopst)) - return(p+1); - else - return(NULL); -} - -/* - - slow - step through the string more deliberately - == static unsigned char *slow(register struct match *m, unsigned char *start, \ - == unsigned char *stop, sopno startst, sopno stopst); - */ -static unsigned char * /* where it ended */ -slow(m, start, stop, startst, stopst) -register struct match *m; -unsigned char *start; -unsigned char *stop; -sopno startst; -sopno stopst; -{ - register states st = m->st; - register states empty = m->empty; - register states tmp = m->tmp; - register unsigned char *p = start; - register int c = (start == m->beginp) ? OUT : *(start-1); - register int lastc; /* previous c */ - register int flagch; - register int i; - register unsigned char *matchp; /* last p at which a match ended */ - - AT("slow", start, stop, startst, stopst); - CLEAR(st); - SET1(st, startst); - SP("sstart", st, *p); - st = step(m->g, startst, stopst, st, NOTHING, st); - matchp = NULL; - for (;;) { - /* next character */ - lastc = c; - c = (p == m->endp) ? OUT : *p; - - /* is there an EOL and/or BOL between lastc and c? */ - flagch = '\0'; - i = 0; - if ( (lastc == '\n' && m->g->cflags®_NEWLINE) || - (lastc == OUT && !(m->eflags®_NOTBOL)) ) { - flagch = BOL; - i = m->g->nbol; - } - if ( (c == '\n' && m->g->cflags®_NEWLINE) || - (c == OUT && !(m->eflags®_NOTEOL)) ) { - flagch = (flagch == BOL) ? BOLEOL : EOL; - i += m->g->neol; - } - if (i != 0) { - for (; i > 0; i--) - st = step(m->g, startst, stopst, st, flagch, st); - SP("sboleol", st, c); - } - - /* how about a word boundary? */ - if ( (flagch == BOL || (lastc != OUT && !ISWORD(lastc))) && - (c != OUT && ISWORD(c)) ) { - flagch = BOW; - } - if ( (lastc != OUT && ISWORD(lastc)) && - (flagch == EOL || (c != OUT && !ISWORD(c))) ) { - flagch = EOW; - } - if (flagch == BOW || flagch == EOW) { - st = step(m->g, startst, stopst, st, flagch, st); - SP("sboweow", st, c); - } - - /* are we done? */ - if (ISSET(st, stopst)) - matchp = p; - if (EQ(st, empty) || p == stop) - break; /* NOTE BREAK OUT */ - - /* no, we must deal with this character */ - ASSIGN(tmp, st); - ASSIGN(st, empty); - assert(c != OUT); - st = step(m->g, startst, stopst, tmp, c, st); - SP("saft", st, c); - assert(EQ(step(m->g, startst, stopst, st, NOTHING, st), st)); - p++; - } - - return(matchp); -} - - -/* - - step - map set of states reachable before char to set reachable after - == static states step(register struct re_guts *g, sopno start, sopno stop, \ - == register states bef, int ch, register states aft); - == #define BOL (OUT+1) - == #define EOL (BOL+1) - == #define BOLEOL (BOL+2) - == #define NOTHING (BOL+3) - == #define BOW (BOL+4) - == #define EOW (BOL+5) - == #define CODEMAX (BOL+5) // highest code used - == #define NONCHAR(c) ((c) > UCHAR_MAX) - == #define NNONCHAR (CODEMAX-UCHAR_MAX) - */ -static states -step(g, start, stop, bef, ch, aft) -register struct re_guts *g; -sopno start; /* start state within strip */ -sopno stop; /* state after stop state within strip */ -register states bef; /* states reachable before */ -int ch; /* character or NONCHAR code */ -register states aft; /* states already known reachable after */ -{ - register cset *cs; - register sop s; - register sopno pc; - register onestate here; /* note, macros know this name */ - register sopno look; - register long i; - - for (pc = start, INIT(here, pc); pc != stop; pc++, INC(here)) { - s = g->strip[pc]; - switch (OP(s)) { - case OEND: - assert(pc == stop-1); - break; - case OCHAR: - /* only characters can match */ - assert(!NONCHAR(ch) || ch != (unsigned char)OPND(s)); - if (ch == (unsigned char)OPND(s)) - FWD(aft, bef, 1); - break; - case OBOL: - if (ch == BOL || ch == BOLEOL) - FWD(aft, bef, 1); - break; - case OEOL: - if (ch == EOL || ch == BOLEOL) - FWD(aft, bef, 1); - break; - case OBOW: - if (ch == BOW) - FWD(aft, bef, 1); - break; - case OEOW: - if (ch == EOW) - FWD(aft, bef, 1); - break; - case OANY: - if (!NONCHAR(ch)) - FWD(aft, bef, 1); - break; - case OANYOF: - cs = &g->sets[OPND(s)]; - if (!NONCHAR(ch) && CHIN(cs, ch)) - FWD(aft, bef, 1); - break; - case OBACK_: /* ignored here */ - case O_BACK: - FWD(aft, aft, 1); - break; - case OPLUS_: /* forward, this is just an empty */ - FWD(aft, aft, 1); - break; - case O_PLUS: /* both forward and back */ - FWD(aft, aft, 1); - i = ISSETBACK(aft, OPND(s)); - BACK(aft, aft, OPND(s)); - if (!i && ISSETBACK(aft, OPND(s))) { - /* oho, must reconsider loop body */ - pc -= OPND(s) + 1; - INIT(here, pc); - } - break; - case OQUEST_: /* two branches, both forward */ - FWD(aft, aft, 1); - FWD(aft, aft, OPND(s)); - break; - case O_QUEST: /* just an empty */ - FWD(aft, aft, 1); - break; - case OLPAREN: /* not significant here */ - case ORPAREN: - FWD(aft, aft, 1); - break; - case OCH_: /* mark the first two branches */ - FWD(aft, aft, 1); - assert(OP(g->strip[pc+OPND(s)]) == OOR2); - FWD(aft, aft, OPND(s)); - break; - case OOR1: /* done a branch, find the O_CH */ - if (ISSTATEIN(aft, here)) { - for (look = 1; - OP(s = g->strip[pc+look]) != O_CH; - look += OPND(s)) - assert(OP(s) == OOR2); - FWD(aft, aft, look); - } - break; - case OOR2: /* propagate OCH_'s marking */ - FWD(aft, aft, 1); - if (OP(g->strip[pc+OPND(s)]) != O_CH) { - assert(OP(g->strip[pc+OPND(s)]) == OOR2); - FWD(aft, aft, OPND(s)); - } - break; - case O_CH: /* just empty */ - FWD(aft, aft, 1); - break; - default: /* ooooops... */ - assert(PHP_REGEX_NOPE); - break; - } - } - - return(aft); -} - -#ifdef REDEBUG -/* - - print - print a set of states - == #ifdef REDEBUG - == static void print(struct match *m, unsigned char *caption, states st, \ - == int ch, FILE *d); - == #endif - */ -static void -print(m, caption, st, ch, d) -struct match *m; -unsigned char *caption; -states st; -int ch; -FILE *d; -{ - register struct re_guts *g = m->g; - register int i; - register int first = 1; - - if (!(m->eflags®_TRACE)) - return; - - fprintf(d, "%s", caption); - if (ch != '\0') - fprintf(d, " %s", pchar(ch)); - for (i = 0; i < g->nstates; i++) - if (ISSET(st, i)) { - fprintf(d, "%s%d", (first) ? "\t" : ", ", i); - first = 0; - } - fprintf(d, "\n"); -} - -/* - - at - print current situation - == #ifdef REDEBUG - == static void at(struct match *m, unsigned char *title, unsigned char *start, unsigned char *stop, \ - == sopno startst, sopno stopst); - == #endif - */ -static void -at(m, title, start, stop, startst, stopst) -struct match *m; -unsigned char *title; -unsigned char *start; -unsigned char *stop; -sopno startst; -sopno stopst; -{ - if (!(m->eflags®_TRACE)) - return; - - printf("%s %s-", title, pchar(*start)); - printf("%s ", pchar(*stop)); - printf("%ld-%ld\n", (long)startst, (long)stopst); -} - -#ifndef PCHARDONE -#define PCHARDONE /* never again */ -/* - - pchar - make a character printable - == #ifdef REDEBUG - == static unsigned char *pchar(int ch); - == #endif - * - * Is this identical to regchar() over in debug.c? Well, yes. But a - * duplicate here avoids having a debugging-capable regexec.o tied to - * a matching debug.o, and this is convenient. It all disappears in - * the non-debug compilation anyway, so it doesn't matter much. - */ -static unsigned char * /* -> representation */ -pchar(ch) -int ch; -{ - static unsigned char pbuf[10]; - - if (isprint(ch) || ch == ' ') - sprintf(pbuf, "%c", ch); - else - sprintf(pbuf, "\\%o", ch); - return(pbuf); -} -#endif -#endif - -#undef matcher -#undef fast -#undef slow -#undef dissect -#undef backref -#undef step -#undef print -#undef at -#undef match diff --git a/ext/ereg/regex/engine.ih b/ext/ereg/regex/engine.ih deleted file mode 100644 index 9a301838bcd90..0000000000000 --- a/ext/ereg/regex/engine.ih +++ /dev/null @@ -1,35 +0,0 @@ -/* ========= begin header generated by ./mkh ========= */ -#ifdef __cplusplus -extern "C" { -#endif - -/* === engine.c === */ -static int matcher(register struct re_guts *g, unsigned char *string, size_t nmatch, regmatch_t pmatch[], int eflags); -static unsigned char *dissect(register struct match *m, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst); -static unsigned char *backref(register struct match *m, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst, sopno lev); -static unsigned char *fast(register struct match *m, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst); -static unsigned char *slow(register struct match *m, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst); -static states step(register struct re_guts *g, sopno start, sopno stop, register states bef, int ch, register states aft); -#define BOL (OUT+1) -#define EOL (BOL+1) -#define BOLEOL (BOL+2) -#define NOTHING (BOL+3) -#define BOW (BOL+4) -#define EOW (BOL+5) -#define CODEMAX (BOL+5) /* highest code used */ -#define NONCHAR(c) ((c) > UCHAR_MAX) -#define NNONCHAR (CODEMAX-UCHAR_MAX) -#ifdef REDEBUG -static void print(struct match *m, unsigned char *caption, states st, int ch, FILE *d); -#endif -#ifdef REDEBUG -static void at(struct match *m, unsigned char *title, unsigned char *start, unsigned char *stop, sopno startst, sopno stopst); -#endif -#ifdef REDEBUG -static unsigned char *pchar(int ch); -#endif - -#ifdef __cplusplus -} -#endif -/* ========= end header generated by ./mkh ========= */ diff --git a/ext/ereg/regex/main.c b/ext/ereg/regex/main.c deleted file mode 100644 index 657338a2c1998..0000000000000 --- a/ext/ereg/regex/main.c +++ /dev/null @@ -1,510 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "main.ih" - -char *progname; -int debug = 0; -int line = 0; -int status = 0; - -int copts = REG_EXTENDED; -int eopts = 0; -regoff_t startoff = 0; -regoff_t endoff = 0; - - -extern int split(); -extern void regprint(); - -/* - - main - do the simple case, hand off to regress() for regression - */ -int main(argc, argv) -int argc; -char *argv[]; -{ - regex_t re; -# define NS 10 - regmatch_t subs[NS]; - char erbuf[100]; - int err; - size_t len; - int c; - int errflg = 0; - register int i; - extern int optind; - extern char *optarg; - - progname = argv[0]; - - while ((c = getopt(argc, argv, "c:e:S:E:x")) != EOF) - switch (c) { - case 'c': /* compile options */ - copts = options('c', optarg); - break; - case 'e': /* execute options */ - eopts = options('e', optarg); - break; - case 'S': /* start offset */ - startoff = (regoff_t)atoi(optarg); - break; - case 'E': /* end offset */ - endoff = (regoff_t)atoi(optarg); - break; - case 'x': /* Debugging. */ - debug++; - break; - case '?': - default: - errflg++; - break; - } - if (errflg) { - fprintf(stderr, "usage: %s ", progname); - fprintf(stderr, "[-c copt][-C][-d] [re]\n"); - exit(2); - } - - if (optind >= argc) { - regress(stdin); - exit(status); - } - - err = regcomp(&re, argv[optind++], copts); - if (err) { - len = regerror(err, &re, erbuf, sizeof(erbuf)); - fprintf(stderr, "error %s, %d/%d `%s'\n", - eprint(err), len, sizeof(erbuf), erbuf); - exit(status); - } - regprint(&re, stdout); - - if (optind >= argc) { - regfree(&re); - exit(status); - } - - if (eopts®_STARTEND) { - subs[0].rm_so = startoff; - subs[0].rm_eo = strlen(argv[optind]) - endoff; - } - err = regexec(&re, argv[optind], (size_t)NS, subs, eopts); - if (err) { - len = regerror(err, &re, erbuf, sizeof(erbuf)); - fprintf(stderr, "error %s, %d/%d `%s'\n", - eprint(err), len, sizeof(erbuf), erbuf); - exit(status); - } - if (!(copts®_NOSUB)) { - len = (int)(subs[0].rm_eo - subs[0].rm_so); - if (subs[0].rm_so != -1) { - if (len != 0) - printf("match `%.*s'\n", (int)len, - argv[optind] + subs[0].rm_so); - else - printf("match `'@%.1s\n", - argv[optind] + subs[0].rm_so); - } - for (i = 1; i < NS; i++) - if (subs[i].rm_so != -1) - printf("(%d) `%.*s'\n", i, - (int)(subs[i].rm_eo - subs[i].rm_so), - argv[optind] + subs[i].rm_so); - } - exit(status); -} - -/* - - regress - main loop of regression test - == void regress(FILE *in); - */ -void -regress(in) -FILE *in; -{ - char inbuf[1000]; -# define MAXF 10 - char *f[MAXF]; - int nf; - int i; - char erbuf[100]; - size_t ne; - char *badpat = "invalid regular expression"; -# define SHORT 10 - char *bpname = "REG_BADPAT"; - regex_t re; - - while (fgets(inbuf, sizeof(inbuf), in) != NULL) { - line++; - if (inbuf[0] == '#' || inbuf[0] == '\n') - continue; /* NOTE CONTINUE */ - inbuf[strlen(inbuf)-1] = '\0'; /* get rid of stupid \n */ - if (debug) - fprintf(stdout, "%d:\n", line); - nf = split(inbuf, f, MAXF, "\t\t"); - if (nf < 3) { - fprintf(stderr, "bad input, line %d\n", line); - exit(1); - } - for (i = 0; i < nf; i++) - if (strcmp(f[i], "\"\"") == 0) - f[i] = ""; - if (nf <= 3) - f[3] = NULL; - if (nf <= 4) - f[4] = NULL; - try(f[0], f[1], f[2], f[3], f[4], options('c', f[1])); - if (opt('&', f[1])) /* try with either type of RE */ - try(f[0], f[1], f[2], f[3], f[4], - options('c', f[1]) &~ REG_EXTENDED); - } - - ne = regerror(REG_BADPAT, (regex_t *)NULL, erbuf, sizeof(erbuf)); - if (strcmp(erbuf, badpat) != 0 || ne != strlen(badpat)+1) { - fprintf(stderr, "end: regerror() test gave `%s' not `%s'\n", - erbuf, badpat); - status = 1; - } - ne = regerror(REG_BADPAT, (regex_t *)NULL, erbuf, (size_t)SHORT); - if (strncmp(erbuf, badpat, SHORT-1) != 0 || erbuf[SHORT-1] != '\0' || - ne != strlen(badpat)+1) { - fprintf(stderr, "end: regerror() short test gave `%s' not `%.*s'\n", - erbuf, SHORT-1, badpat); - status = 1; - } - ne = regerror(REG_ITOA|REG_BADPAT, (regex_t *)NULL, erbuf, sizeof(erbuf)); - if (strcmp(erbuf, bpname) != 0 || ne != strlen(bpname)+1) { - fprintf(stderr, "end: regerror() ITOA test gave `%s' not `%s'\n", - erbuf, bpname); - status = 1; - } - re.re_endp = bpname; - ne = regerror(REG_ATOI, &re, erbuf, sizeof(erbuf)); - if (atoi(erbuf) != (int)REG_BADPAT) { - fprintf(stderr, "end: regerror() ATOI test gave `%s' not `%ld'\n", - erbuf, (long)REG_BADPAT); - status = 1; - } else if (ne != strlen(erbuf)+1) { - fprintf(stderr, "end: regerror() ATOI test len(`%s') = %ld\n", - erbuf, (long)REG_BADPAT); - status = 1; - } -} - -/* - - try - try it, and report on problems - == void try(char *f0, char *f1, char *f2, char *f3, char *f4, int opts); - */ -void -try(f0, f1, f2, f3, f4, opts) -char *f0; -char *f1; -char *f2; -char *f3; -char *f4; -int opts; /* may not match f1 */ -{ - regex_t re; -# define NSUBS 10 - regmatch_t subs[NSUBS]; -# define NSHOULD 15 - char *should[NSHOULD]; - int nshould; - char erbuf[100]; - int err; - int len; - char *type = (opts & REG_EXTENDED) ? "ERE" : "BRE"; - register int i; - char *grump; - char f0copy[1000]; - char f2copy[1000]; - - strcpy(f0copy, f0); - re.re_endp = (opts®_PEND) ? f0copy + strlen(f0copy) : NULL; - fixstr(f0copy); - err = regcomp(&re, f0copy, opts); - if (err != 0 && (!opt('C', f1) || err != efind(f2))) { - /* unexpected error or wrong error */ - len = regerror(err, &re, erbuf, sizeof(erbuf)); - fprintf(stderr, "%d: %s error %s, %d/%d `%s'\n", - line, type, eprint(err), len, - sizeof(erbuf), erbuf); - status = 1; - } else if (err == 0 && opt('C', f1)) { - /* unexpected success */ - fprintf(stderr, "%d: %s should have given REG_%s\n", - line, type, f2); - status = 1; - err = 1; /* so we won't try regexec */ - } - - if (err != 0) { - regfree(&re); - return; - } - - strcpy(f2copy, f2); - fixstr(f2copy); - - if (options('e', f1)®_STARTEND) { - if (strchr(f2, '(') == NULL || strchr(f2, ')') == NULL) - fprintf(stderr, "%d: bad STARTEND syntax\n", line); - subs[0].rm_so = strchr(f2, '(') - f2 + 1; - subs[0].rm_eo = strchr(f2, ')') - f2; - } - err = regexec(&re, f2copy, NSUBS, subs, options('e', f1)); - - if (err != 0 && (f3 != NULL || err != REG_NOMATCH)) { - /* unexpected error or wrong error */ - len = regerror(err, &re, erbuf, sizeof(erbuf)); - fprintf(stderr, "%d: %s exec error %s, %d/%d `%s'\n", - line, type, eprint(err), len, - sizeof(erbuf), erbuf); - status = 1; - } else if (err != 0) { - /* nothing more to check */ - } else if (f3 == NULL) { - /* unexpected success */ - fprintf(stderr, "%d: %s exec should have failed\n", - line, type); - status = 1; - err = 1; /* just on principle */ - } else if (opts®_NOSUB) { - /* nothing more to check */ - } else if ((grump = check(f2, subs[0], f3)) != NULL) { - fprintf(stderr, "%d: %s %s\n", line, type, grump); - status = 1; - err = 1; - } - - if (err != 0 || f4 == NULL) { - regfree(&re); - return; - } - - for (i = 1; i < NSHOULD; i++) - should[i] = NULL; - nshould = split(f4, should+1, NSHOULD-1, ","); - if (nshould == 0) { - nshould = 1; - should[1] = ""; - } - for (i = 1; i < NSUBS; i++) { - grump = check(f2, subs[i], should[i]); - if (grump != NULL) { - fprintf(stderr, "%d: %s $%d %s\n", line, - type, i, grump); - status = 1; - err = 1; - } - } - - regfree(&re); -} - -/* - - options - pick options out of a regression-test string - == int options(int type, char *s); - */ -int -options(type, s) -int type; /* 'c' compile, 'e' exec */ -char *s; -{ - register char *p; - register int o = (type == 'c') ? copts : eopts; - register char *legal = (type == 'c') ? "bisnmp" : "^$#tl"; - - for (p = s; *p != '\0'; p++) - if (strchr(legal, *p) != NULL) - switch (*p) { - case 'b': - o &= ~REG_EXTENDED; - break; - case 'i': - o |= REG_ICASE; - break; - case 's': - o |= REG_NOSUB; - break; - case 'n': - o |= REG_NEWLINE; - break; - case 'm': - o &= ~REG_EXTENDED; - o |= REG_NOSPEC; - break; - case 'p': - o |= REG_PEND; - break; - case '^': - o |= REG_NOTBOL; - break; - case '$': - o |= REG_NOTEOL; - break; - case '#': - o |= REG_STARTEND; - break; - case 't': /* trace */ - o |= REG_TRACE; - break; - case 'l': /* force long representation */ - o |= REG_LARGE; - break; - case 'r': /* force backref use */ - o |= REG_BACKR; - break; - } - return(o); -} - -/* - - opt - is a particular option in a regression string? - == int opt(int c, char *s); - */ -int /* predicate */ -opt(c, s) -int c; -char *s; -{ - return(strchr(s, c) != NULL); -} - -/* - - fixstr - transform magic characters in strings - == void fixstr(register char *p); - */ -void -fixstr(p) -register char *p; -{ - if (p == NULL) - return; - - for (; *p != '\0'; p++) - if (*p == 'N') - *p = '\n'; - else if (*p == 'T') - *p = '\t'; - else if (*p == 'S') - *p = ' '; - else if (*p == 'Z') - *p = '\0'; -} - -/* - - check - check a substring match - == char *check(char *str, regmatch_t sub, char *should); - */ -char * /* NULL or complaint */ -check(str, sub, should) -char *str; -regmatch_t sub; -char *should; -{ - register int len; - register int shlen; - register char *p; - static char grump[500]; - register char *at = NULL; - - if (should != NULL && strcmp(should, "-") == 0) - should = NULL; - if (should != NULL && should[0] == '@') { - at = should + 1; - should = ""; - } - - /* check rm_so and rm_eo for consistency */ - if (sub.rm_so > sub.rm_eo || (sub.rm_so == -1 && sub.rm_eo != -1) || - (sub.rm_so != -1 && sub.rm_eo == -1) || - (sub.rm_so != -1 && sub.rm_so < 0) || - (sub.rm_eo != -1 && sub.rm_eo < 0) ) { - sprintf(grump, "start %ld end %ld", (long)sub.rm_so, - (long)sub.rm_eo); - return(grump); - } - - /* check for no match */ - if (sub.rm_so == -1 && should == NULL) - return(NULL); - if (sub.rm_so == -1) - return("did not match"); - - /* check for in range */ - if (sub.rm_eo > strlen(str)) { - sprintf(grump, "start %ld end %ld, past end of string", - (long)sub.rm_so, (long)sub.rm_eo); - return(grump); - } - - len = (int)(sub.rm_eo - sub.rm_so); - shlen = (int)strlen(should); - p = str + sub.rm_so; - - /* check for not supposed to match */ - if (should == NULL) { - sprintf(grump, "matched `%.*s'", len, p); - return(grump); - } - - /* check for wrong match */ - if (len != shlen || strncmp(p, should, (size_t)shlen) != 0) { - sprintf(grump, "matched `%.*s' instead", len, p); - return(grump); - } - if (shlen > 0) - return(NULL); - - /* check null match in right place */ - if (at == NULL) - return(NULL); - shlen = strlen(at); - if (shlen == 0) - shlen = 1; /* force check for end-of-string */ - if (strncmp(p, at, shlen) != 0) { - sprintf(grump, "matched null at `%.20s'", p); - return(grump); - } - return(NULL); -} - -/* - - eprint - convert error number to name - == static char *eprint(int err); - */ -static char * -eprint(err) -int err; -{ - static char epbuf[100]; - size_t len; - - len = regerror(REG_ITOA|err, (regex_t *)NULL, epbuf, sizeof(epbuf)); - assert(len <= sizeof(epbuf)); - return(epbuf); -} - -/* - - efind - convert error name to number - == static int efind(char *name); - */ -static int -efind(name) -char *name; -{ - static char efbuf[100]; - regex_t re; - - sprintf(efbuf, "REG_%s", name); - assert(strlen(efbuf) < sizeof(efbuf)); - re.re_endp = efbuf; - (void) regerror(REG_ATOI, &re, efbuf, sizeof(efbuf)); - return(atoi(efbuf)); -} diff --git a/ext/ereg/regex/main.ih b/ext/ereg/regex/main.ih deleted file mode 100644 index 5a0118ac44167..0000000000000 --- a/ext/ereg/regex/main.ih +++ /dev/null @@ -1,19 +0,0 @@ -/* ========= begin header generated by ./mkh ========= */ -#ifdef __cplusplus -extern "C" { -#endif - -/* === main.c === */ -void regress(FILE *in); -void try(char *f0, char *f1, char *f2, char *f3, char *f4, int opts); -int options(int type, char *s); -int opt(int c, char *s); -void fixstr(register char *p); -char *check(char *str, regmatch_t sub, char *should); -static char *eprint(int err); -static int efind(char *name); - -#ifdef __cplusplus -} -#endif -/* ========= end header generated by ./mkh ========= */ diff --git a/ext/ereg/regex/mkh b/ext/ereg/regex/mkh deleted file mode 100644 index 252b246c7bd25..0000000000000 --- a/ext/ereg/regex/mkh +++ /dev/null @@ -1,76 +0,0 @@ -#! /bin/sh -# mkh - pull headers out of C source -PATH=/bin:/usr/bin ; export PATH - -# egrep pattern to pick out marked lines -egrep='^ =([ ]|$)' - -# Sed program to process marked lines into lines for the header file. -# The markers have already been removed. Two things are done here: removal -# of backslashed newlines, and some fudging of comments. The first is done -# because -o needs to have prototypes on one line to strip them down. -# Getting comments into the output is tricky; we turn C++-style // comments -# into /* */ comments, after altering any existing */'s to avoid trouble. -peel=' /\\$/N - /\\\n[ ]*/s///g - /\/\//s;\*/;* /;g - /\/\//s;//\(.*\);/*\1 */;' - -for a -do - case "$a" in - -o) # old (pre-function-prototype) compiler - # add code to comment out argument lists - peel="$peel - "'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1(/*\2*/);' - shift - ;; - -b) # funny Berkeley __P macro - peel="$peel - "'/^\([^#\/][^\/]*[a-zA-Z0-9_)]\)(\(.*\))/s;;\1 __P((\2));' - shift - ;; - -s) # compiler doesn't like `static foo();' - # add code to get rid of the `static' - peel="$peel - "'/^static[ ][^\/]*[a-zA-Z0-9_)](.*)/s;static.;;' - shift - ;; - -p) # private declarations - egrep='^ ==([ ]|$)' - shift - ;; - -i) # wrap in #ifndef, argument is name - ifndef="$2" - shift ; shift - ;; - *) break - ;; - esac -done - -if test " $ifndef" != " " -then - echo "#ifndef $ifndef" - echo "#define $ifndef /* never again */" -fi -echo "/* ========= begin header generated by $0 ========= */" -echo '#ifdef __cplusplus' -echo 'extern "C" {' -echo '#endif' -for f -do - echo - echo "/* === $f === */" - egrep "$egrep" $f | sed 's/^ ==*[ ]//;s/^ ==*$//' | sed "$peel" - echo -done -echo '#ifdef __cplusplus' -echo '}' -echo '#endif' -echo "/* ========= end header generated by $0 ========= */" -if test " $ifndef" != " " -then - echo "#endif" -fi -exit 0 diff --git a/ext/ereg/regex/regcomp.c b/ext/ereg/regex/regcomp.c deleted file mode 100644 index d72cc829403be..0000000000000 --- a/ext/ereg/regex/regcomp.c +++ /dev/null @@ -1,1613 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#define POSIX_MISTAKE - -#include "utils.h" -#include "regex.h" -#include "regex2.h" - -#include "cclass.h" -#include "cname.h" - -/* - * parse structure, passed up and down to avoid global variables and - * other clumsinesses - */ -struct parse { - unsigned char *next; /* next character in RE */ - unsigned char *end; /* end of string (-> NUL normally) */ - int error; /* has an error been seen? */ - sop *strip; /* malloced strip */ - sopno ssize; /* malloced strip size (allocated) */ - sopno slen; /* malloced strip length (used) */ - int ncsalloc; /* number of csets allocated */ - struct re_guts *g; -# define NPAREN 10 /* we need to remember () 1-9 for back refs */ - sopno pbegin[NPAREN]; /* -> ( ([0] unused) */ - sopno pend[NPAREN]; /* -> ) ([0] unused) */ -}; - -#include "regcomp.ih" - -static unsigned char nuls[10]; /* place to point scanner in event of error */ - -/* - * macros for use with parse structure - * BEWARE: these know that the parse structure is named `p' !!! - */ -#define PEEK() (*p->next) -#define PEEK2() (*(p->next+1)) -#define MORE() (p->next < p->end) -#define MORE2() (p->next+1 < p->end) -#define SEE(c) (MORE() && PEEK() == (c)) -#define SEETWO(a, b) (MORE() && MORE2() && PEEK() == (a) && PEEK2() == (b)) -#define EAT(c) ((SEE(c)) ? (NEXT(), 1) : 0) -#define EATTWO(a, b) ((SEETWO(a, b)) ? (NEXT2(), 1) : 0) -#define NEXT() (p->next++) -#define NEXT2() (p->next += 2) -#define NEXTn(n) (p->next += (n)) -#define GETNEXT() (*p->next++) -#define SETERROR(e) seterr(p, (e)) -#define REQUIRE(co, e) (void) ((co) || SETERROR(e)) -#define MUSTSEE(c, e) (REQUIRE(MORE() && PEEK() == (c), e)) -#define MUSTEAT(c, e) (REQUIRE(MORE() && GETNEXT() == (c), e)) -#define MUSTNOTSEE(c, e) (REQUIRE(!MORE() || PEEK() != (c), e)) -#define EMIT(op, sopnd) doemit(p, (sop)(op), (size_t)(sopnd)) -#define INSERT(op, pos) doinsert(p, (sop)(op), HERE()-(pos)+1, pos) -#define AHEAD(pos) dofwd(p, pos, HERE()-(pos)) -#define ASTERN(sop, pos) EMIT(sop, HERE()-pos) -#define HERE() (p->slen) -#define THERE() (p->slen - 1) -#define THERETHERE() (p->slen - 2) -#define DROP(n) (p->slen -= (n)) - -#ifndef NDEBUG -static int never = 0; /* for use in asserts; shuts lint up */ -#else -#define never 0 /* some s have bugs too */ -#endif - -/* - - regcomp - interface for parser and compilation - = API_EXPORT(int) regcomp(regex_t *, const char *, int); - = #define REG_BASIC 0000 - = #define REG_EXTENDED 0001 - = #define REG_ICASE 0002 - = #define REG_NOSUB 0004 - = #define REG_NEWLINE 0010 - = #define REG_NOSPEC 0020 - = #define REG_PEND 0040 - = #define REG_DUMP 0200 - */ -API_EXPORT(int) /* 0 success, otherwise REG_something */ -regcomp(preg, pattern, cflags) -regex_t *preg; -const char *pattern; -int cflags; -{ - struct parse pa; - register struct re_guts *g; - register struct parse *p = &pa; - register int i; - register size_t len; -#ifdef REDEBUG -# define GOODFLAGS(f) (f) -#else -# define GOODFLAGS(f) ((f)&~REG_DUMP) -#endif - - cflags = GOODFLAGS(cflags); - if ((cflags®_EXTENDED) && (cflags®_NOSPEC)) - return(REG_INVARG); - - if (cflags®_PEND) { - if (preg->re_endp < pattern) - return(REG_INVARG); - len = preg->re_endp - pattern; - } else - len = strlen((char *)pattern); - - /* do the mallocs early so failure handling is easy */ - g = (struct re_guts *)malloc(sizeof(struct re_guts) + - (NC-1)*sizeof(cat_t)); - if (g == NULL) - return(REG_ESPACE); - p->ssize = len/(size_t)2*(size_t)3 + (size_t)1; /* ugh */ - p->strip = (sop *)malloc(p->ssize * sizeof(sop)); - p->slen = 0; - if (p->strip == NULL) { - free((char *)g); - return(REG_ESPACE); - } - - /* set things up */ - p->g = g; - p->next = (unsigned char *)pattern; /* convenience; we do not modify it */ - p->end = p->next + len; - p->error = 0; - p->ncsalloc = 0; - for (i = 0; i < NPAREN; i++) { - p->pbegin[i] = 0; - p->pend[i] = 0; - } - g->csetsize = NC; - g->sets = NULL; - g->setbits = NULL; - g->ncsets = 0; - g->cflags = cflags; - g->iflags = 0; - g->nbol = 0; - g->neol = 0; - g->must = NULL; - g->mlen = 0; - g->nsub = 0; - g->ncategories = 1; /* category 0 is "everything else" */ - g->categories = &g->catspace[0]; - (void) memset((char *)g->catspace, 0, NC*sizeof(cat_t)); - g->backrefs = 0; - - /* do it */ - EMIT(OEND, 0); - g->firststate = THERE(); - if (cflags®_EXTENDED) - p_ere(p, OUT); - else if (cflags®_NOSPEC) - p_str(p); - else - p_bre(p, OUT, OUT); - EMIT(OEND, 0); - g->laststate = THERE(); - - /* tidy up loose ends and fill things in */ - categorize(p, g); - stripsnug(p, g); - findmust(p, g); - g->nplus = pluscount(p, g); - g->magic = MAGIC2; - preg->re_nsub = g->nsub; - preg->re_g = g; - preg->re_magic = MAGIC1; -#ifndef REDEBUG - /* not debugging, so can't rely on the assert() in regexec() */ - if (g->iflags&BAD) - SETERROR(REG_ASSERT); -#endif - - /* win or lose, we're done */ - if (p->error != 0) /* lose */ - regfree(preg); - return(p->error); -} - -/* - - p_ere - ERE parser top level, concatenation and alternation - == static void p_ere(register struct parse *p, int stop); - */ -static void -p_ere(p, stop) -register struct parse *p; -int stop; /* character this ERE should end at */ -{ - register unsigned char c; - register sopno prevback = 0; - register sopno prevfwd = 0; - register sopno conc; - register int first = 1; /* is this the first alternative? */ - - for (;;) { - /* do a bunch of concatenated expressions */ - conc = HERE(); - while (MORE() && (c = PEEK()) != '|' && c != stop) - p_ere_exp(p); - (void) REQUIRE(HERE() != conc, REG_EMPTY); /* require nonempty */ - - if (!EAT('|')) - break; /* NOTE BREAK OUT */ - - if (first) { - INSERT(OCH_, conc); /* offset is wrong */ - prevfwd = conc; - prevback = conc; - first = 0; - } - ASTERN(OOR1, prevback); - prevback = THERE(); - AHEAD(prevfwd); /* fix previous offset */ - prevfwd = HERE(); - EMIT(OOR2, 0); /* offset is very wrong */ - } - - if (!first) { /* tail-end fixups */ - AHEAD(prevfwd); - ASTERN(O_CH, prevback); - } - - assert(!MORE() || SEE(stop)); -} - -/* - - p_ere_exp - parse one subERE, an atom possibly followed by a repetition op - == static void p_ere_exp(register struct parse *p); - */ -static void -p_ere_exp(p) -register struct parse *p; -{ - register unsigned char c; - register sopno pos; - register int count; - register int count2; - register sopno subno; - int wascaret = 0; - - assert(MORE()); /* caller should have ensured this */ - c = GETNEXT(); - - pos = HERE(); - switch (c) { - case '(': - REQUIRE(MORE(), REG_EPAREN); - p->g->nsub++; - subno = p->g->nsub; - if (subno < NPAREN) - p->pbegin[subno] = HERE(); - EMIT(OLPAREN, subno); - if (!SEE(')')) - p_ere(p, ')'); - if (subno < NPAREN) { - p->pend[subno] = HERE(); - assert(p->pend[subno] != 0); - } - EMIT(ORPAREN, subno); - MUSTEAT(')', REG_EPAREN); - break; -#ifndef POSIX_MISTAKE - case ')': /* happens only if no current unmatched ( */ - /* - * You may ask, why the ifndef? Because I didn't notice - * this until slightly too late for 1003.2, and none of the - * other 1003.2 regular-expression reviewers noticed it at - * all. So an unmatched ) is legal POSIX, at least until - * we can get it fixed. - */ - SETERROR(REG_EPAREN); - break; -#endif - case '^': - EMIT(OBOL, 0); - p->g->iflags |= USEBOL; - p->g->nbol++; - wascaret = 1; - break; - case '$': - EMIT(OEOL, 0); - p->g->iflags |= USEEOL; - p->g->neol++; - break; - case '|': - SETERROR(REG_EMPTY); - break; - case '*': - case '+': - case '?': - SETERROR(REG_BADRPT); - break; - case '.': - if (p->g->cflags®_NEWLINE) - nonnewline(p); - else - EMIT(OANY, 0); - break; - case '[': - p_bracket(p); - break; - case '\\': - REQUIRE(MORE(), REG_EESCAPE); - c = GETNEXT(); - ordinary(p, c); - break; - case '{': /* okay as ordinary except if digit follows */ - REQUIRE(!MORE() || !isdigit(PEEK()), REG_BADRPT); - /* FALLTHROUGH */ - default: - ordinary(p, c); - break; - } - - if (!MORE()) - return; - c = PEEK(); - /* we call { a repetition if followed by a digit */ - if (!( c == '*' || c == '+' || c == '?' || - (c == '{' && MORE2() && isdigit(PEEK2())) )) - return; /* no repetition, we're done */ - NEXT(); - - REQUIRE(!wascaret, REG_BADRPT); - switch (c) { - case '*': /* implemented as +? */ - /* this case does not require the (y|) trick, noKLUDGE */ - INSERT(OPLUS_, pos); - ASTERN(O_PLUS, pos); - INSERT(OQUEST_, pos); - ASTERN(O_QUEST, pos); - break; - case '+': - INSERT(OPLUS_, pos); - ASTERN(O_PLUS, pos); - break; - case '?': - /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */ - INSERT(OCH_, pos); /* offset slightly wrong */ - ASTERN(OOR1, pos); /* this one's right */ - AHEAD(pos); /* fix the OCH_ */ - EMIT(OOR2, 0); /* offset very wrong... */ - AHEAD(THERE()); /* ...so fix it */ - ASTERN(O_CH, THERETHERE()); - break; - case '{': - count = p_count(p); - if (EAT(',')) { - if (isdigit(PEEK())) { - count2 = p_count(p); - REQUIRE(count <= count2, REG_BADBR); - } else /* single number with comma */ - count2 = INFINITY; - } else /* just a single number */ - count2 = count; - repeat(p, pos, count, count2); - if (!EAT('}')) { /* error heuristics */ - while (MORE() && PEEK() != '}') - NEXT(); - REQUIRE(MORE(), REG_EBRACE); - SETERROR(REG_BADBR); - } - break; - } - - if (!MORE()) - return; - c = PEEK(); - if (!( c == '*' || c == '+' || c == '?' || - (c == '{' && MORE2() && isdigit(PEEK2())) ) ) - return; - SETERROR(REG_BADRPT); -} - -/* - - p_str - string (no metacharacters) "parser" - == static void p_str(register struct parse *p); - */ -static void -p_str(p) -register struct parse *p; -{ - REQUIRE(MORE(), REG_EMPTY); - while (MORE()) - ordinary(p, GETNEXT()); -} - -/* - - p_bre - BRE parser top level, anchoring and concatenation - == static void p_bre(register struct parse *p, register int end1, \ - == register int end2); - * Giving end1 as OUT essentially eliminates the end1/end2 check. - * - * This implementation is a bit of a kludge, in that a trailing $ is first - * taken as an ordinary character and then revised to be an anchor. The - * only undesirable side effect is that '$' gets included as a character - * category in such cases. This is fairly harmless; not worth fixing. - * The amount of lookahead needed to avoid this kludge is excessive. - */ -static void -p_bre(p, end1, end2) -register struct parse *p; -register int end1; /* first terminating character */ -register int end2; /* second terminating character */ -{ - register sopno start = HERE(); - register int first = 1; /* first subexpression? */ - register int wasdollar = 0; - - if (EAT('^')) { - EMIT(OBOL, 0); - p->g->iflags |= USEBOL; - p->g->nbol++; - } - while (MORE() && !SEETWO(end1, end2)) { - wasdollar = p_simp_re(p, first); - first = 0; - } - if (wasdollar) { /* oops, that was a trailing anchor */ - DROP(1); - EMIT(OEOL, 0); - p->g->iflags |= USEEOL; - p->g->neol++; - } - - REQUIRE(HERE() != start, REG_EMPTY); /* require nonempty */ -} - -/* - - p_simp_re - parse a simple RE, an atom possibly followed by a repetition - == static int p_simp_re(register struct parse *p, int starordinary); - */ -static int /* was the simple RE an unbackslashed $? */ -p_simp_re(p, starordinary) -register struct parse *p; -int starordinary; /* is a leading * an ordinary character? */ -{ - register int c; - register int count; - register int count2; - register sopno pos; - register int i; - register sopno subno; -# define BACKSL (1<g->cflags®_NEWLINE) - nonnewline(p); - else - EMIT(OANY, 0); - break; - case '[': - p_bracket(p); - break; - case BACKSL|'{': - SETERROR(REG_BADRPT); - break; - case BACKSL|'(': - p->g->nsub++; - subno = p->g->nsub; - if (subno < NPAREN) - p->pbegin[subno] = HERE(); - EMIT(OLPAREN, subno); - /* the MORE here is an error heuristic */ - if (MORE() && !SEETWO('\\', ')')) - p_bre(p, '\\', ')'); - if (subno < NPAREN) { - p->pend[subno] = HERE(); - assert(p->pend[subno] != 0); - } - EMIT(ORPAREN, subno); - REQUIRE(EATTWO('\\', ')'), REG_EPAREN); - break; - case BACKSL|')': /* should not get here -- must be user */ - case BACKSL|'}': - SETERROR(REG_EPAREN); - break; - case BACKSL|'1': - case BACKSL|'2': - case BACKSL|'3': - case BACKSL|'4': - case BACKSL|'5': - case BACKSL|'6': - case BACKSL|'7': - case BACKSL|'8': - case BACKSL|'9': - i = (c&~BACKSL) - '0'; - assert(i < NPAREN); - if (p->pend[i] != 0) { - assert(i <= p->g->nsub); - EMIT(OBACK_, i); - assert(p->pbegin[i] != 0); - assert(OP(p->strip[p->pbegin[i]]) == OLPAREN); - assert(OP(p->strip[p->pend[i]]) == ORPAREN); - (void) dupl(p, p->pbegin[i]+1, p->pend[i]); - EMIT(O_BACK, i); - } else - SETERROR(REG_ESUBREG); - p->g->backrefs = 1; - break; - case '*': - REQUIRE(starordinary, REG_BADRPT); - /* FALLTHROUGH */ - default: - ordinary(p, (unsigned char)c); /* takes off BACKSL, if any */ - break; - } - - if (EAT('*')) { /* implemented as +? */ - /* this case does not require the (y|) trick, noKLUDGE */ - INSERT(OPLUS_, pos); - ASTERN(O_PLUS, pos); - INSERT(OQUEST_, pos); - ASTERN(O_QUEST, pos); - } else if (EATTWO('\\', '{')) { - count = p_count(p); - if (EAT(',')) { - if (MORE() && isdigit(PEEK())) { - count2 = p_count(p); - REQUIRE(count <= count2, REG_BADBR); - } else /* single number with comma */ - count2 = INFINITY; - } else /* just a single number */ - count2 = count; - repeat(p, pos, count, count2); - if (!EATTWO('\\', '}')) { /* error heuristics */ - while (MORE() && !SEETWO('\\', '}')) - NEXT(); - REQUIRE(MORE(), REG_EBRACE); - SETERROR(REG_BADBR); - } - } else if (c == (unsigned char)'$') /* $ (but not \$) ends it */ - return(1); - - return(0); -} - -/* - - p_count - parse a repetition count - == static int p_count(register struct parse *p); - */ -static int /* the value */ -p_count(p) -register struct parse *p; -{ - register int count = 0; - register int ndigits = 0; - - while (MORE() && isdigit(PEEK()) && count <= DUPMAX) { - count = count*10 + (GETNEXT() - '0'); - ndigits++; - } - - REQUIRE(ndigits > 0 && count <= DUPMAX, REG_BADBR); - return(count); -} - -/* - - p_bracket - parse a bracketed character list - == static void p_bracket(register struct parse *p); - * - * Note a significant property of this code: if the allocset() did SETERROR, - * no set operations are done. - */ -static void -p_bracket(p) -register struct parse *p; -{ - register cset *cs = allocset(p); - register int invert = 0; - - /* Dept of Truly Sickening Special-Case Kludges */ - if (p->next + 5 < p->end && strncmp(p->next, "[:<:]]", 6) == 0) { - EMIT(OBOW, 0); - NEXTn(6); - return; - } - if (p->next + 5 < p->end && strncmp(p->next, "[:>:]]", 6) == 0) { - EMIT(OEOW, 0); - NEXTn(6); - return; - } - - if (EAT('^')) - invert++; /* make note to invert set at end */ - if (EAT(']')) - CHadd(cs, ']'); - else if (EAT('-')) - CHadd(cs, '-'); - while (MORE() && PEEK() != ']' && !SEETWO('-', ']')) - p_b_term(p, cs); - if (EAT('-')) - CHadd(cs, '-'); - MUSTEAT(']', REG_EBRACK); - - if (p->error != 0) /* don't mess things up further */ - return; - - if (p->g->cflags®_ICASE) { - register int i; - register int ci; - - for (i = p->g->csetsize - 1; i >= 0; i--) - if (CHIN(cs, i) && isalpha(i)) { - ci = othercase(i); - if (ci != i) - CHadd(cs, ci); - } - if (cs->multis != NULL) - mccase(p, cs); - } - if (invert) { - register int i; - - for (i = p->g->csetsize - 1; i >= 0; i--) - if (CHIN(cs, i)) - CHsub(cs, i); - else - CHadd(cs, i); - if (p->g->cflags®_NEWLINE) - CHsub(cs, '\n'); - if (cs->multis != NULL) - mcinvert(p, cs); - } - - assert(cs->multis == NULL); /* xxx */ - - if (nch(p, cs) == 1) { /* optimize singleton sets */ - ordinary(p, firstch(p, cs)); - freeset(p, cs); - } else - EMIT(OANYOF, freezeset(p, cs)); -} - -/* - - p_b_term - parse one term of a bracketed character list - == static void p_b_term(register struct parse *p, register cset *cs); - */ -static void -p_b_term(p, cs) -register struct parse *p; -register cset *cs; -{ - register unsigned char c; - register unsigned char start, finish; - register int i; - - /* classify what we've got */ - switch ((MORE()) ? PEEK() : '\0') { - case '[': - c = (MORE2()) ? PEEK2() : '\0'; - break; - case '-': - SETERROR(REG_ERANGE); - return; /* NOTE RETURN */ - break; - default: - c = '\0'; - break; - } - - switch (c) { - case ':': /* character class */ - NEXT2(); - REQUIRE(MORE(), REG_EBRACK); - c = PEEK(); - REQUIRE(c != '-' && c != ']', REG_ECTYPE); - p_b_cclass(p, cs); - REQUIRE(MORE(), REG_EBRACK); - REQUIRE(EATTWO(':', ']'), REG_ECTYPE); - break; - case '=': /* equivalence class */ - NEXT2(); - REQUIRE(MORE(), REG_EBRACK); - c = PEEK(); - REQUIRE(c != '-' && c != ']', REG_ECOLLATE); - p_b_eclass(p, cs); - REQUIRE(MORE(), REG_EBRACK); - REQUIRE(EATTWO('=', ']'), REG_ECOLLATE); - break; - default: /* symbol, ordinary character, or range */ -/* xxx revision needed for multichar stuff */ - start = p_b_symbol(p); - if (SEE('-') && MORE2() && PEEK2() != ']') { - /* range */ - NEXT(); - if (EAT('-')) - finish = '-'; - else - finish = p_b_symbol(p); - } else - finish = start; -/* xxx what about signed chars here... */ - REQUIRE(start <= finish, REG_ERANGE); - for (i = start; i <= finish; i++) - CHadd(cs, i); - break; - } -} - -/* - - p_b_cclass - parse a character-class name and deal with it - == static void p_b_cclass(register struct parse *p, register cset *cs); - */ -static void -p_b_cclass(p, cs) -register struct parse *p; -register cset *cs; -{ - register unsigned char *sp = p->next; - register struct cclass *cp; - register size_t len; - register unsigned char *u; - register unsigned char c; - - while (MORE() && isalpha(PEEK())) - NEXT(); - len = p->next - sp; - for (cp = cclasses; cp->name != NULL; cp++) - if (strncmp(cp->name, sp, len) == 0 && cp->name[len] == '\0') - break; - if (cp->name == NULL) { - /* oops, didn't find it */ - SETERROR(REG_ECTYPE); - return; - } - - u = cp->chars; - while ((c = *u++) != '\0') - CHadd(cs, c); - for (u = cp->multis; *u != '\0'; u += strlen(u) + 1) - MCadd(p, cs, u); -} - -/* - - p_b_eclass - parse an equivalence-class name and deal with it - == static void p_b_eclass(register struct parse *p, register cset *cs); - * - * This implementation is incomplete. xxx - */ -static void -p_b_eclass(p, cs) -register struct parse *p; -register cset *cs; -{ - register unsigned char c; - - c = p_b_coll_elem(p, '='); - CHadd(cs, c); -} - -/* - - p_b_symbol - parse a character or [..]ed multicharacter collating symbol - == static char p_b_symbol(register struct parse *p); - */ -static unsigned char /* value of symbol */ -p_b_symbol(p) -register struct parse *p; -{ - register unsigned char value; - - REQUIRE(MORE(), REG_EBRACK); - if (!EATTWO('[', '.')) - return(GETNEXT()); - - /* collating symbol */ - value = p_b_coll_elem(p, '.'); - REQUIRE(EATTWO('.', ']'), REG_ECOLLATE); - return(value); -} - -/* - - p_b_coll_elem - parse a collating-element name and look it up - == static char p_b_coll_elem(register struct parse *p, int endc); - */ -static unsigned char /* value of collating element */ -p_b_coll_elem(p, endc) -register struct parse *p; -int endc; /* name ended by endc,']' */ -{ - register unsigned char *sp = p->next; - register struct cname *cp; - register int len; - - while (MORE() && !SEETWO(endc, ']')) - NEXT(); - if (!MORE()) { - SETERROR(REG_EBRACK); - return(0); - } - len = p->next - sp; - for (cp = cnames; cp->name != NULL; cp++) - if (strncmp(cp->name, sp, len) == 0 && cp->name[len] == '\0') - return(cp->code); /* known name */ - if (len == 1) - return(*sp); /* single character */ - SETERROR(REG_ECOLLATE); /* neither */ - return(0); -} - -/* - - othercase - return the case counterpart of an alphabetic - == static char othercase(int ch); - */ -static unsigned char /* if no counterpart, return ch */ -othercase(ch) -int ch; -{ - assert(isalpha(ch)); - if (isupper(ch)) - return(tolower(ch)); - else if (islower(ch)) - return(toupper(ch)); - else /* peculiar, but could happen */ - return(ch); -} - -/* - - bothcases - emit a dualcase version of a two-case character - == static void bothcases(register struct parse *p, int ch); - * - * Boy, is this implementation ever a kludge... - */ -static void -bothcases(p, ch) -register struct parse *p; -int ch; -{ - register unsigned char *oldnext = p->next; - register unsigned char *oldend = p->end; - unsigned char bracket[3]; - - assert(othercase(ch) != ch); /* p_bracket() would recurse */ - p->next = bracket; - p->end = bracket+2; - bracket[0] = ch; - bracket[1] = ']'; - bracket[2] = '\0'; - p_bracket(p); - assert(p->next == bracket+2); - p->next = oldnext; - p->end = oldend; -} - -/* - - ordinary - emit an ordinary character - == static void ordinary(register struct parse *p, register int ch); - */ -static void -ordinary(p, ch) -register struct parse *p; -register int ch; -{ - register cat_t *cap = p->g->categories; - - if ((p->g->cflags®_ICASE) && isalpha(ch) && othercase(ch) != ch) - bothcases(p, ch); - else { - EMIT(OCHAR, (unsigned char)ch); - if (cap[ch] == 0) - cap[ch] = p->g->ncategories++; - } -} - -/* - - nonnewline - emit REG_NEWLINE version of OANY - == static void nonnewline(register struct parse *p); - * - * Boy, is this implementation ever a kludge... - */ -static void -nonnewline(p) -register struct parse *p; -{ - register unsigned char *oldnext = p->next; - register unsigned char *oldend = p->end; - unsigned char bracket[4]; - - p->next = bracket; - p->end = bracket+3; - bracket[0] = '^'; - bracket[1] = '\n'; - bracket[2] = ']'; - bracket[3] = '\0'; - p_bracket(p); - assert(p->next == bracket+3); - p->next = oldnext; - p->end = oldend; -} - -/* - - repeat - generate code for a bounded repetition, recursively if needed - == static void repeat(register struct parse *p, sopno start, int from, int to); - */ -static void -repeat(p, start, from, to) -register struct parse *p; -sopno start; /* operand from here to end of strip */ -int from; /* repeated from this number */ -int to; /* to this number of times (maybe INFINITY) */ -{ - register sopno finish = HERE(); -# define N 2 -# define INF 3 -# define REP(f, t) ((f)*8 + (t)) -# define MAP(n) (((n) <= 1) ? (n) : ((n) == INFINITY) ? INF : N) - register sopno copy; - - if (p->error != 0) /* head off possible runaway recursion */ - return; - - assert(from <= to); - - switch (REP(MAP(from), MAP(to))) { - case REP(0, 0): /* must be user doing this */ - DROP(finish-start); /* drop the operand */ - break; - case REP(0, 1): /* as x{1,1}? */ - case REP(0, N): /* as x{1,n}? */ - case REP(0, INF): /* as x{1,}? */ - /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */ - INSERT(OCH_, start); /* offset is wrong... */ - repeat(p, start+1, 1, to); - ASTERN(OOR1, start); - AHEAD(start); /* ... fix it */ - EMIT(OOR2, 0); - AHEAD(THERE()); - ASTERN(O_CH, THERETHERE()); - break; - case REP(1, 1): /* trivial case */ - /* done */ - break; - case REP(1, N): /* as x?x{1,n-1} */ - /* KLUDGE: emit y? as (y|) until subtle bug gets fixed */ - INSERT(OCH_, start); - ASTERN(OOR1, start); - AHEAD(start); - EMIT(OOR2, 0); /* offset very wrong... */ - AHEAD(THERE()); /* ...so fix it */ - ASTERN(O_CH, THERETHERE()); - copy = dupl(p, start+1, finish+1); - assert(copy == finish+4); - repeat(p, copy, 1, to-1); - break; - case REP(1, INF): /* as x+ */ - INSERT(OPLUS_, start); - ASTERN(O_PLUS, start); - break; - case REP(N, N): /* as xx{m-1,n-1} */ - copy = dupl(p, start, finish); - repeat(p, copy, from-1, to-1); - break; - case REP(N, INF): /* as xx{n-1,INF} */ - copy = dupl(p, start, finish); - repeat(p, copy, from-1, to); - break; - default: /* "can't happen" */ - SETERROR(REG_ASSERT); /* just in case */ - break; - } -} - -/* - - seterr - set an error condition - == static int seterr(register struct parse *p, int e); - */ -static int /* useless but makes type checking happy */ -seterr(p, e) -register struct parse *p; -int e; -{ - if (p->error == 0) /* keep earliest error condition */ - p->error = e; - p->next = nuls; /* try to bring things to a halt */ - p->end = nuls; - return(0); /* make the return value well-defined */ -} - -/* - - allocset - allocate a set of characters for [] - == static cset *allocset(register struct parse *p); - */ -static cset * -allocset(p) -register struct parse *p; -{ - register int no = p->g->ncsets++; - register size_t nc; - register size_t nbytes; - register cset *cs; - register size_t css = (size_t)p->g->csetsize; - register int i; - - if (no >= p->ncsalloc) { /* need another column of space */ - p->ncsalloc += CHAR_BIT; - nc = p->ncsalloc; - assert(nc % CHAR_BIT == 0); - nbytes = nc / CHAR_BIT * css; - if (p->g->sets == NULL) - p->g->sets = (cset *)malloc(nc * sizeof(cset)); - else - p->g->sets = (cset *)realloc((unsigned char *)p->g->sets, - nc * sizeof(cset)); - if (p->g->setbits == NULL) - p->g->setbits = (uch *)malloc(nbytes); - else { - p->g->setbits = (uch *)realloc((unsigned char *)p->g->setbits, - nbytes); - /* xxx this isn't right if setbits is now NULL */ - for (i = 0; i < no; i++) - p->g->sets[i].ptr = p->g->setbits + css*(i/CHAR_BIT); - } - if (p->g->sets != NULL && p->g->setbits != NULL) - (void) memset((unsigned char *)p->g->setbits + (nbytes - css), - 0, css); - else { - no = 0; - SETERROR(REG_ESPACE); - /* caller's responsibility not to do set ops */ - } - } - - assert(p->g->sets != NULL); /* xxx */ - cs = &p->g->sets[no]; - cs->ptr = p->g->setbits + css*((no)/CHAR_BIT); - cs->mask = 1 << ((no) % CHAR_BIT); - cs->hash = 0; - cs->smultis = 0; - cs->multis = NULL; - - return(cs); -} - -/* - - freeset - free a now-unused set - == static void freeset(register struct parse *p, register cset *cs); - */ -static void -freeset(p, cs) -register struct parse *p; -register cset *cs; -{ - register size_t i; - register cset *top = &p->g->sets[p->g->ncsets]; - register size_t css = (size_t)p->g->csetsize; - - for (i = 0; i < css; i++) - CHsub(cs, i); - if (cs == top-1) /* recover only the easy case */ - p->g->ncsets--; -} - -/* - - freezeset - final processing on a set of characters - == static int freezeset(register struct parse *p, register cset *cs); - * - * The main task here is merging identical sets. This is usually a waste - * of time (although the hash code minimizes the overhead), but can win - * big if REG_ICASE is being used. REG_ICASE, by the way, is why the hash - * is done using addition rather than xor -- all ASCII [aA] sets xor to - * the same value! - */ -static int /* set number */ -freezeset(p, cs) -register struct parse *p; -register cset *cs; -{ - register uch h = cs->hash; - register size_t i; - register cset *top = &p->g->sets[p->g->ncsets]; - register cset *cs2; - register size_t css = (size_t)p->g->csetsize; - - /* look for an earlier one which is the same */ - for (cs2 = &p->g->sets[0]; cs2 < top; cs2++) - if (cs2->hash == h && cs2 != cs) { - /* maybe */ - for (i = 0; i < css; i++) - if (!!CHIN(cs2, i) != !!CHIN(cs, i)) - break; /* no */ - if (i == css) - break; /* yes */ - } - - if (cs2 < top) { /* found one */ - freeset(p, cs); - cs = cs2; - } - - return((int)(cs - p->g->sets)); -} - -/* - - firstch - return first character in a set (which must have at least one) - == static int firstch(register struct parse *p, register cset *cs); - */ -static int /* character; there is no "none" value */ -firstch(p, cs) -register struct parse *p; -register cset *cs; -{ - register size_t i; - register size_t css = (size_t)p->g->csetsize; - - for (i = 0; i < css; i++) - if (CHIN(cs, i)) - return((unsigned char)i); - assert(never); - return(0); /* arbitrary */ -} - -/* - - nch - number of characters in a set - == static int nch(register struct parse *p, register cset *cs); - */ -static int -nch(p, cs) -register struct parse *p; -register cset *cs; -{ - register size_t i; - register size_t css = (size_t)p->g->csetsize; - register int n = 0; - - for (i = 0; i < css; i++) - if (CHIN(cs, i)) - n++; - return(n); -} - -/* - - mcadd - add a collating element to a cset - == static void mcadd(register struct parse *p, register cset *cs, \ - == register char *cp); - */ -static void -mcadd(p, cs, cp) -register struct parse *p; -register cset *cs; -register unsigned char *cp; -{ - register size_t oldend = cs->smultis; - - cs->smultis += strlen(cp) + 1; - if (cs->multis == NULL) - cs->multis = malloc(cs->smultis); - else - cs->multis = realloc(cs->multis, cs->smultis); - if (cs->multis == NULL) { - SETERROR(REG_ESPACE); - return; - } - - (void) strcpy(cs->multis + oldend - 1, cp); - cs->multis[cs->smultis - 1] = '\0'; -} - -#if 0 -/* - - mcsub - subtract a collating element from a cset - == static void mcsub(register cset *cs, register unsigned char *cp); - */ -static void -mcsub(cs, cp) -register unsigned cset *cs; -register unsigned char *cp; -{ - register unsigned char *fp = mcfind(cs, cp); - register size_t len = strlen(fp); - - assert(fp != NULL); - (void) memmove(fp, fp + len + 1, - cs->smultis - (fp + len + 1 - cs->multis)); - cs->smultis -= len; - - if (cs->smultis == 0) { - free(cs->multis); - cs->multis = NULL; - return; - } - - cs->multis = realloc(cs->multis, cs->smultis); - assert(cs->multis != NULL); -} - -/* - - mcin - is a collating element in a cset? - == static int mcin(register cset *cs, register unsigned char *cp); - */ -static int -mcin(cs, cp) -register cset *cs; -register unsigned char *cp; -{ - return(mcfind(cs, cp) != NULL); -} - - -/* - - mcfind - find a collating element in a cset - == static unsigned char *mcfind(register cset *cs, register unsigned char *cp); - */ -static unsigned char * -mcfind(cs, cp) -register cset *cs; -register unsigned char *cp; -{ - register unsigned char *p; - - if (cs->multis == NULL) - return(NULL); - for (p = cs->multis; *p != '\0'; p += strlen(p) + 1) - if (strcmp(cp, p) == 0) - return(p); - return(NULL); -} -#endif - -/* - - mcinvert - invert the list of collating elements in a cset - == static void mcinvert(register struct parse *p, register cset *cs); - * - * This would have to know the set of possibilities. Implementation - * is deferred. - */ -static void -mcinvert(p, cs) -register struct parse *p; -register cset *cs; -{ - assert(cs->multis == NULL); /* xxx */ -} - -/* - - mccase - add case counterparts of the list of collating elements in a cset - == static void mccase(register struct parse *p, register cset *cs); - * - * This would have to know the set of possibilities. Implementation - * is deferred. - */ -static void -mccase(p, cs) -register struct parse *p; -register cset *cs; -{ - assert(cs->multis == NULL); /* xxx */ -} - -/* - - isinsets - is this character in any sets? - == static int isinsets(register struct re_guts *g, int c); - */ -static int /* predicate */ -isinsets(g, c) -register struct re_guts *g; -int c; -{ - register uch *col; - register int i; - register int ncols = (g->ncsets+(CHAR_BIT-1)) / CHAR_BIT; - register unsigned uc = (unsigned char)c; - - for (i = 0, col = g->setbits; i < ncols; i++, col += g->csetsize) - if (col[uc] != 0) - return(1); - return(0); -} - -/* - - samesets - are these two characters in exactly the same sets? - == static int samesets(register struct re_guts *g, int c1, int c2); - */ -static int /* predicate */ -samesets(g, c1, c2) -register struct re_guts *g; -int c1; -int c2; -{ - register uch *col; - register int i; - register int ncols = (g->ncsets+(CHAR_BIT-1)) / CHAR_BIT; - register unsigned uc1 = (unsigned char)c1; - register unsigned uc2 = (unsigned char)c2; - - for (i = 0, col = g->setbits; i < ncols; i++, col += g->csetsize) - if (col[uc1] != col[uc2]) - return(0); - return(1); -} - -/* - - categorize - sort out character categories - == static void categorize(struct parse *p, register struct re_guts *g); - */ -static void -categorize(p, g) -struct parse *p; -register struct re_guts *g; -{ - register cat_t *cats = g->categories; - register int c; - register int c2; - register cat_t cat; - - /* avoid making error situations worse */ - if (p->error != 0) - return; - - for (c = 0; c <= UCHAR_MAX; c++) - if (cats[c] == 0 && isinsets(g, c)) { - cat = g->ncategories++; - cats[c] = cat; - for (c2 = c+1; c2 <= UCHAR_MAX; c2++) - if (cats[c2] == 0 && samesets(g, c, c2)) - cats[c2] = cat; - } -} - -/* - - dupl - emit a duplicate of a bunch of sops - == static sopno dupl(register struct parse *p, sopno start, sopno finish); - */ -static sopno /* start of duplicate */ -dupl(p, start, finish) -register struct parse *p; -sopno start; /* from here */ -sopno finish; /* to this less one */ -{ - register sopno ret = HERE(); - register sopno len = finish - start; - - assert(finish >= start); - if (len == 0) - return(ret); - enlarge(p, p->ssize + len); /* this many unexpected additions */ - assert(p->ssize >= p->slen + len); - (void) memcpy((char *)(p->strip + p->slen), - (char *)(p->strip + start), (size_t)len*sizeof(sop)); - p->slen += len; - return(ret); -} - -/* - - doemit - emit a strip operator - == static void doemit(register struct parse *p, sop op, size_t opnd); - * - * It might seem better to implement this as a macro with a function as - * hard-case backup, but it's just too big and messy unless there are - * some changes to the data structures. Maybe later. - */ -static void -doemit(p, op, opnd) -register struct parse *p; -sop op; -size_t opnd; -{ - /* avoid making error situations worse */ - if (p->error != 0) - return; - - /* deal with oversize operands ("can't happen", more or less) */ - assert(opnd < 1<slen >= p->ssize) - enlarge(p, (p->ssize+1) / 2 * 3); /* +50% */ - assert(p->slen < p->ssize); - - /* finally, it's all reduced to the easy case */ - p->strip[p->slen++] = SOP(op, opnd); -} - -/* - - doinsert - insert a sop into the strip - == static void doinsert(register struct parse *p, sop op, size_t opnd, sopno pos); - */ -static void -doinsert(p, op, opnd, pos) -register struct parse *p; -sop op; -size_t opnd; -sopno pos; -{ - register sopno sn; - register sop s; - register int i; - - /* avoid making error situations worse */ - if (p->error != 0) - return; - - sn = HERE(); - EMIT(op, opnd); /* do checks, ensure space */ - assert(HERE() == sn+1); - s = p->strip[sn]; - - /* adjust paren pointers */ - assert(pos > 0); - for (i = 1; i < NPAREN; i++) { - if (p->pbegin[i] >= pos) { - p->pbegin[i]++; - } - if (p->pend[i] >= pos) { - p->pend[i]++; - } - } - - memmove((char *)&p->strip[pos+1], (char *)&p->strip[pos], - (HERE()-pos-1)*sizeof(sop)); - p->strip[pos] = s; -} - -/* - - dofwd - complete a forward reference - == static void dofwd(register struct parse *p, sopno pos, sop value); - */ -static void -dofwd(p, pos, value) -register struct parse *p; -register sopno pos; -sop value; -{ - /* avoid making error situations worse */ - if (p->error != 0) - return; - - assert(value < 1<strip[pos] = OP(p->strip[pos]) | value; -} - -/* - - enlarge - enlarge the strip - == static void enlarge(register struct parse *p, sopno size); - */ -static void -enlarge(p, size) -register struct parse *p; -register sopno size; -{ - register sop *sp; - - if (p->ssize >= size) - return; - - sp = (sop *)realloc(p->strip, size*sizeof(sop)); - if (sp == NULL) { - SETERROR(REG_ESPACE); - return; - } - p->strip = sp; - p->ssize = size; -} - -/* - - stripsnug - compact the strip - == static void stripsnug(register struct parse *p, register struct re_guts *g); - */ -static void -stripsnug(p, g) -register struct parse *p; -register struct re_guts *g; -{ - g->nstates = p->slen; - g->strip = (sop *)realloc((unsigned char *)p->strip, p->slen * sizeof(sop)); - if (g->strip == NULL) { - SETERROR(REG_ESPACE); - g->strip = p->strip; - } -} - -/* - - findmust - fill in must and mlen with longest mandatory literal string - == static void findmust(register struct parse *p, register struct re_guts *g); - * - * This algorithm could do fancy things like analyzing the operands of | - * for common subsequences. Someday. This code is simple and finds most - * of the interesting cases. - * - * Note that must and mlen got initialized during setup. - */ -static void -findmust(p, g) -struct parse *p; -register struct re_guts *g; -{ - register sop *scan; - sop *start = NULL; - register sop *newstart = NULL; - register sopno newlen; - register sop s; - register unsigned char *cp; - register sopno i; - - /* avoid making error situations worse */ - if (p->error != 0) - return; - - /* find the longest OCHAR sequence in strip */ - newlen = 0; - scan = g->strip + 1; - do { - s = *scan++; - switch (OP(s)) { - case OCHAR: /* sequence member */ - if (newlen == 0) /* new sequence */ - newstart = scan - 1; - newlen++; - break; - case OPLUS_: /* things that don't break one */ - case OLPAREN: - case ORPAREN: - break; - case OQUEST_: /* things that must be skipped */ - case OCH_: - scan--; - do { - scan += OPND(s); - s = *scan; - /* assert() interferes w debug printouts */ - if (OP(s) != O_QUEST && OP(s) != O_CH && - OP(s) != OOR2) { - g->iflags |= BAD; - return; - } - } while (OP(s) != O_QUEST && OP(s) != O_CH); - /* fallthrough */ - default: /* things that break a sequence */ - if (newlen > g->mlen) { /* ends one */ - start = newstart; - g->mlen = newlen; - } - newlen = 0; - break; - } - } while (OP(s) != OEND); - - if (g->mlen == 0) /* there isn't one */ - return; - - if (!start) { - g->mlen = 0; - return; - } - - /* turn it into a character string */ - g->must = malloc((size_t)g->mlen + 1); - if (g->must == NULL) { /* argh; just forget it */ - g->mlen = 0; - return; - } - cp = g->must; - scan = start; - for (i = g->mlen; i > 0; i--) { - while (OP(s = *scan++) != OCHAR) - continue; - assert(cp < g->must + g->mlen); - *cp++ = (unsigned char)OPND(s); - } - assert(cp == g->must + g->mlen); - *cp++ = '\0'; /* just on general principles */ -} - -/* - - pluscount - count + nesting - == static sopno pluscount(register struct parse *p, register struct re_guts *g); - */ -static sopno /* nesting depth */ -pluscount(p, g) -struct parse *p; -register struct re_guts *g; -{ - register sop *scan; - register sop s; - register sopno plusnest = 0; - register sopno maxnest = 0; - - if (p->error != 0) - return(0); /* there may not be an OEND */ - - scan = g->strip + 1; - do { - s = *scan++; - switch (OP(s)) { - case OPLUS_: - plusnest++; - break; - case O_PLUS: - if (plusnest > maxnest) - maxnest = plusnest; - plusnest--; - break; - } - } while (OP(s) != OEND); - if (plusnest != 0) - g->iflags |= BAD; - return(maxnest); -} diff --git a/ext/ereg/regex/regcomp.ih b/ext/ereg/regex/regcomp.ih deleted file mode 100644 index c93d32e51d32e..0000000000000 --- a/ext/ereg/regex/regcomp.ih +++ /dev/null @@ -1,53 +0,0 @@ -/* ========= begin header generated by ./mkh ========= */ -#ifdef __cplusplus -extern "C" { -#endif - -/* === regcomp.c === */ -static void p_ere(register struct parse *p, int stop); -static void p_ere_exp(register struct parse *p); -static void p_str(register struct parse *p); -static void p_bre(register struct parse *p, register int end1, register int end2); -static int p_simp_re(register struct parse *p, int starordinary); -static int p_count(register struct parse *p); -static void p_bracket(register struct parse *p); -static void p_b_term(register struct parse *p, register cset *cs); -static void p_b_cclass(register struct parse *p, register cset *cs); -static void p_b_eclass(register struct parse *p, register cset *cs); -static unsigned char p_b_symbol(register struct parse *p); -static unsigned char p_b_coll_elem(register struct parse *p, int endc); -static unsigned char othercase(int ch); -static void bothcases(register struct parse *p, int ch); -static void ordinary(register struct parse *p, register int ch); -static void nonnewline(register struct parse *p); -static void repeat(register struct parse *p, sopno start, int from, int to); -static int seterr(register struct parse *p, int e); -static cset *allocset(register struct parse *p); -static void freeset(register struct parse *p, register cset *cs); -static int freezeset(register struct parse *p, register cset *cs); -static int firstch(register struct parse *p, register cset *cs); -static int nch(register struct parse *p, register cset *cs); -static void mcadd(register struct parse *p, register cset *cs, register unsigned char *cp); -#if 0 -static void mcsub(register cset *cs, register unsigned char *cp); -static int mcin(register cset *cs, register unsigned char *cp); -static unsigned char *mcfind(register cset *cs, register unsigned char *cp); -#endif -static void mcinvert(register struct parse *p, register cset *cs); -static void mccase(register struct parse *p, register cset *cs); -static int isinsets(register struct re_guts *g, int c); -static int samesets(register struct re_guts *g, int c1, int c2); -static void categorize(struct parse *p, register struct re_guts *g); -static sopno dupl(register struct parse *p, sopno start, sopno finish); -static void doemit(register struct parse *p, sop op, size_t opnd); -static void doinsert(register struct parse *p, sop op, size_t opnd, sopno pos); -static void dofwd(register struct parse *p, sopno pos, sop value); -static void enlarge(register struct parse *p, sopno size); -static void stripsnug(register struct parse *p, register struct re_guts *g); -static void findmust(register struct parse *p, register struct re_guts *g); -static sopno pluscount(register struct parse *p, register struct re_guts *g); - -#ifdef __cplusplus -} -#endif -/* ========= end header generated by ./mkh ========= */ diff --git a/ext/ereg/regex/regerror.c b/ext/ereg/regex/regerror.c deleted file mode 100644 index 6c8e064c4a57a..0000000000000 --- a/ext/ereg/regex/regerror.c +++ /dev/null @@ -1,126 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#include "utils.h" -#include "regerror.ih" - -/* - = #define REG_OKAY 0 - = #define REG_NOMATCH 1 - = #define REG_BADPAT 2 - = #define REG_ECOLLATE 3 - = #define REG_ECTYPE 4 - = #define REG_EESCAPE 5 - = #define REG_ESUBREG 6 - = #define REG_EBRACK 7 - = #define REG_EPAREN 8 - = #define REG_EBRACE 9 - = #define REG_BADBR 10 - = #define REG_ERANGE 11 - = #define REG_ESPACE 12 - = #define REG_BADRPT 13 - = #define REG_EMPTY 14 - = #define REG_ASSERT 15 - = #define REG_INVARG 16 - = #define REG_ATOI 255 // convert name to number (!) - = #define REG_ITOA 0400 // convert number to name (!) - */ -static struct rerr { - int code; - char *name; - char *explain; -} rerrs[] = { - {REG_OKAY, "REG_OKAY", "no errors detected"}, - {REG_NOMATCH, "REG_NOMATCH", "regexec() failed to match"}, - {REG_BADPAT, "REG_BADPAT", "invalid regular expression"}, - {REG_ECOLLATE, "REG_ECOLLATE", "invalid collating element"}, - {REG_ECTYPE, "REG_ECTYPE", "invalid character class"}, - {REG_EESCAPE, "REG_EESCAPE", "trailing backslash (\\)"}, - {REG_ESUBREG, "REG_ESUBREG", "invalid backreference number"}, - {REG_EBRACK, "REG_EBRACK", "brackets ([ ]) not balanced"}, - {REG_EPAREN, "REG_EPAREN", "parentheses not balanced"}, - {REG_EBRACE, "REG_EBRACE", "braces not balanced"}, - {REG_BADBR, "REG_BADBR", "invalid repetition count(s)"}, - {REG_ERANGE, "REG_ERANGE", "invalid character range"}, - {REG_ESPACE, "REG_ESPACE", "out of memory"}, - {REG_BADRPT, "REG_BADRPT", "repetition-operator operand invalid"}, - {REG_EMPTY, "REG_EMPTY", "empty (sub)expression"}, - {REG_ASSERT, "REG_ASSERT", "\"can't happen\" -- you found a bug"}, - {REG_INVARG, "REG_INVARG", "invalid argument to regex routine"}, - {-1, "", "*** unknown regexp error code ***"}, -}; - -/* - - regerror - the interface to error numbers - = API_EXPORT(size_t) regerror(int, const regex_t *, char *, size_t); - */ -/* ARGSUSED */ -API_EXPORT(size_t) -regerror( -int errcode, -const regex_t *preg, -char *errbuf, -size_t errbuf_size) -{ - register struct rerr *r; - register size_t len; - register int target = errcode &~ REG_ITOA; - register char *s; - char convbuf[50]; - - if (errcode == REG_ATOI) - s = regatoi(preg, convbuf); - else { - for (r = rerrs; r->code >= 0; r++) - if (r->code == target) - break; - - if (errcode®_ITOA) { - if (r->code >= 0) - (void) strcpy(convbuf, r->name); - else - sprintf(convbuf, "REG_0x%x", target); - assert(strlen(convbuf) < sizeof(convbuf)); - s = convbuf; - } else - s = r->explain; - } - - len = strlen(s) + 1; - if (errbuf_size > 0) { - if (errbuf_size > len) - (void) strcpy(errbuf, s); - else { - (void) strncpy(errbuf, s, errbuf_size-1); - errbuf[errbuf_size-1] = '\0'; - } - } - - return(len); -} - -/* - - regatoi - internal routine to implement REG_ATOI - == static char *regatoi(const regex_t *preg, char *localbuf); - */ -static char * -regatoi(preg, localbuf) -const regex_t *preg; -char *localbuf; -{ - register struct rerr *r; - - for (r = rerrs; r->code >= 0; r++) - if (strcmp(r->name, preg->re_endp) == 0) - break; - if (r->code < 0) - return("0"); - - sprintf(localbuf, "%d", r->code); - return(localbuf); -} diff --git a/ext/ereg/regex/regerror.ih b/ext/ereg/regex/regerror.ih deleted file mode 100644 index 2cb668c24f07e..0000000000000 --- a/ext/ereg/regex/regerror.ih +++ /dev/null @@ -1,12 +0,0 @@ -/* ========= begin header generated by ./mkh ========= */ -#ifdef __cplusplus -extern "C" { -#endif - -/* === regerror.c === */ -static char *regatoi(const regex_t *preg, char *localbuf); - -#ifdef __cplusplus -} -#endif -/* ========= end header generated by ./mkh ========= */ diff --git a/ext/ereg/regex/regex.3 b/ext/ereg/regex/regex.3 deleted file mode 100644 index 100c8a7f71c72..0000000000000 --- a/ext/ereg/regex/regex.3 +++ /dev/null @@ -1,502 +0,0 @@ -.TH REGEX 3 "17 May 1993" -.BY "Henry Spencer" -.de ZR -.\" one other place knows this name: the SEE ALSO section -.IR regex (7) \\$1 -.. -.SH NAME -regcomp, regexec, regerror, regfree \- regular-expression library -.SH SYNOPSIS -.ft B -.\".na -#include -.br -#include -.HP 10 -int regcomp(regex_t\ *preg, const\ char\ *pattern, int\ cflags); -.HP -int\ regexec(const\ regex_t\ *preg, const\ char\ *string, -size_t\ nmatch, regmatch_t\ pmatch[], int\ eflags); -.HP -size_t\ regerror(int\ errcode, const\ regex_t\ *preg, -char\ *errbuf, size_t\ errbuf_size); -.HP -void\ regfree(regex_t\ *preg); -.\".ad -.ft -.SH DESCRIPTION -These routines implement POSIX 1003.2 regular expressions (``RE''s); -see -.ZR . -.I Regcomp -compiles an RE written as a string into an internal form, -.I regexec -matches that internal form against a string and reports results, -.I regerror -transforms error codes from either into human-readable messages, -and -.I regfree -frees any dynamically-allocated storage used by the internal form -of an RE. -.PP -The header -.I -declares two structure types, -.I regex_t -and -.IR regmatch_t , -the former for compiled internal forms and the latter for match reporting. -It also declares the four functions, -a type -.IR regoff_t , -and a number of constants with names starting with ``REG_''. -.PP -.I Regcomp -compiles the regular expression contained in the -.I pattern -string, -subject to the flags in -.IR cflags , -and places the results in the -.I regex_t -structure pointed to by -.IR preg . -.I Cflags -is the bitwise OR of zero or more of the following flags: -.IP REG_EXTENDED \w'REG_EXTENDED'u+2n -Compile modern (``extended'') REs, -rather than the obsolete (``basic'') REs that -are the default. -.IP REG_BASIC -This is a synonym for 0, -provided as a counterpart to REG_EXTENDED to improve readability. -.IP REG_NOSPEC -Compile with recognition of all special characters turned off. -All characters are thus considered ordinary, -so the ``RE'' is a literal string. -This is an extension, -compatible with but not specified by POSIX 1003.2, -and should be used with -caution in software intended to be portable to other systems. -REG_EXTENDED and REG_NOSPEC may not be used -in the same call to -.IR regcomp . -.IP REG_ICASE -Compile for matching that ignores upper/lower case distinctions. -See -.ZR . -.IP REG_NOSUB -Compile for matching that need only report success or failure, -not what was matched. -.IP REG_NEWLINE -Compile for newline-sensitive matching. -By default, newline is a completely ordinary character with no special -meaning in either REs or strings. -With this flag, -`[^' bracket expressions and `.' never match newline, -a `^' anchor matches the null string after any newline in the string -in addition to its normal function, -and the `$' anchor matches the null string before any newline in the -string in addition to its normal function. -.IP REG_PEND -The regular expression ends, -not at the first NUL, -but just before the character pointed to by the -.I re_endp -member of the structure pointed to by -.IR preg . -The -.I re_endp -member is of type -.IR const\ char\ * . -This flag permits inclusion of NULs in the RE; -they are considered ordinary characters. -This is an extension, -compatible with but not specified by POSIX 1003.2, -and should be used with -caution in software intended to be portable to other systems. -.PP -When successful, -.I regcomp -returns 0 and fills in the structure pointed to by -.IR preg . -One member of that structure -(other than -.IR re_endp ) -is publicized: -.IR re_nsub , -of type -.IR size_t , -contains the number of parenthesized subexpressions within the RE -(except that the value of this member is undefined if the -REG_NOSUB flag was used). -If -.I regcomp -fails, it returns a non-zero error code; -see DIAGNOSTICS. -.PP -.I Regexec -matches the compiled RE pointed to by -.I preg -against the -.IR string , -subject to the flags in -.IR eflags , -and reports results using -.IR nmatch , -.IR pmatch , -and the returned value. -The RE must have been compiled by a previous invocation of -.IR regcomp . -The compiled form is not altered during execution of -.IR regexec , -so a single compiled RE can be used simultaneously by multiple threads. -.PP -By default, -the NUL-terminated string pointed to by -.I string -is considered to be the text of an entire line, minus any terminating -newline. -The -.I eflags -argument is the bitwise OR of zero or more of the following flags: -.IP REG_NOTBOL \w'REG_STARTEND'u+2n -The first character of -the string -is not the beginning of a line, so the `^' anchor should not match before it. -This does not affect the behavior of newlines under REG_NEWLINE. -.IP REG_NOTEOL -The NUL terminating -the string -does not end a line, so the `$' anchor should not match before it. -This does not affect the behavior of newlines under REG_NEWLINE. -.IP REG_STARTEND -The string is considered to start at -\fIstring\fR\ + \fIpmatch\fR[0].\fIrm_so\fR -and to have a terminating NUL located at -\fIstring\fR\ + \fIpmatch\fR[0].\fIrm_eo\fR -(there need not actually be a NUL at that location), -regardless of the value of -.IR nmatch . -See below for the definition of -.IR pmatch -and -.IR nmatch . -This is an extension, -compatible with but not specified by POSIX 1003.2, -and should be used with -caution in software intended to be portable to other systems. -Note that a non-zero \fIrm_so\fR does not imply REG_NOTBOL; -REG_STARTEND affects only the location of the string, -not how it is matched. -.PP -See -.ZR -for a discussion of what is matched in situations where an RE or a -portion thereof could match any of several substrings of -.IR string . -.PP -Normally, -.I regexec -returns 0 for success and the non-zero code REG_NOMATCH for failure. -Other non-zero error codes may be returned in exceptional situations; -see DIAGNOSTICS. -.PP -If REG_NOSUB was specified in the compilation of the RE, -or if -.I nmatch -is 0, -.I regexec -ignores the -.I pmatch -argument (but see below for the case where REG_STARTEND is specified). -Otherwise, -.I pmatch -points to an array of -.I nmatch -structures of type -.IR regmatch_t . -Such a structure has at least the members -.I rm_so -and -.IR rm_eo , -both of type -.I regoff_t -(a signed arithmetic type at least as large as an -.I off_t -and a -.IR ssize_t ), -containing respectively the offset of the first character of a substring -and the offset of the first character after the end of the substring. -Offsets are measured from the beginning of the -.I string -argument given to -.IR regexec . -An empty substring is denoted by equal offsets, -both indicating the character following the empty substring. -.PP -The 0th member of the -.I pmatch -array is filled in to indicate what substring of -.I string -was matched by the entire RE. -Remaining members report what substring was matched by parenthesized -subexpressions within the RE; -member -.I i -reports subexpression -.IR i , -with subexpressions counted (starting at 1) by the order of their opening -parentheses in the RE, left to right. -Unused entries in the array\(emcorresponding either to subexpressions that -did not participate in the match at all, or to subexpressions that do not -exist in the RE (that is, \fIi\fR\ > \fIpreg\fR\->\fIre_nsub\fR)\(emhave both -.I rm_so -and -.I rm_eo -set to \-1. -If a subexpression participated in the match several times, -the reported substring is the last one it matched. -(Note, as an example in particular, that when the RE `(b*)+' matches `bbb', -the parenthesized subexpression matches each of the three `b's and then -an infinite number of empty strings following the last `b', -so the reported substring is one of the empties.) -.PP -If REG_STARTEND is specified, -.I pmatch -must point to at least one -.I regmatch_t -(even if -.I nmatch -is 0 or REG_NOSUB was specified), -to hold the input offsets for REG_STARTEND. -Use for output is still entirely controlled by -.IR nmatch ; -if -.I nmatch -is 0 or REG_NOSUB was specified, -the value of -.IR pmatch [0] -will not be changed by a successful -.IR regexec . -.PP -.I Regerror -maps a non-zero -.I errcode -from either -.I regcomp -or -.I regexec -to a human-readable, printable message. -If -.I preg -is non-NULL, -the error code should have arisen from use of -the -.I regex_t -pointed to by -.IR preg , -and if the error code came from -.IR regcomp , -it should have been the result from the most recent -.I regcomp -using that -.IR regex_t . -.RI ( Regerror -may be able to supply a more detailed message using information -from the -.IR regex_t .) -.I Regerror -places the NUL-terminated message into the buffer pointed to by -.IR errbuf , -limiting the length (including the NUL) to at most -.I errbuf_size -bytes. -If the whole message won't fit, -as much of it as will fit before the terminating NUL is supplied. -In any case, -the returned value is the size of buffer needed to hold the whole -message (including terminating NUL). -If -.I errbuf_size -is 0, -.I errbuf -is ignored but the return value is still correct. -.PP -If the -.I errcode -given to -.I regerror -is first ORed with REG_ITOA, -the ``message'' that results is the printable name of the error code, -e.g. ``REG_NOMATCH'', -rather than an explanation thereof. -If -.I errcode -is REG_ATOI, -then -.I preg -shall be non-NULL and the -.I re_endp -member of the structure it points to -must point to the printable name of an error code; -in this case, the result in -.I errbuf -is the decimal digits of -the numeric value of the error code -(0 if the name is not recognized). -REG_ITOA and REG_ATOI are intended primarily as debugging facilities; -they are extensions, -compatible with but not specified by POSIX 1003.2, -and should be used with -caution in software intended to be portable to other systems. -Be warned also that they are considered experimental and changes are possible. -.PP -.I Regfree -frees any dynamically-allocated storage associated with the compiled RE -pointed to by -.IR preg . -The remaining -.I regex_t -is no longer a valid compiled RE -and the effect of supplying it to -.I regexec -or -.I regerror -is undefined. -.PP -None of these functions references global variables except for tables -of constants; -all are safe for use from multiple threads if the arguments are safe. -.SH IMPLEMENTATION CHOICES -There are a number of decisions that 1003.2 leaves up to the implementor, -either by explicitly saying ``undefined'' or by virtue of them being -forbidden by the RE grammar. -This implementation treats them as follows. -.PP -See -.ZR -for a discussion of the definition of case-independent matching. -.PP -There is no particular limit on the length of REs, -except insofar as memory is limited. -Memory usage is approximately linear in RE size, and largely insensitive -to RE complexity, except for bounded repetitions. -See BUGS for one short RE using them -that will run almost any system out of memory. -.PP -A backslashed character other than one specifically given a magic meaning -by 1003.2 (such magic meanings occur only in obsolete [``basic''] REs) -is taken as an ordinary character. -.PP -Any unmatched [ is a REG_EBRACK error. -.PP -Equivalence classes cannot begin or end bracket-expression ranges. -The endpoint of one range cannot begin another. -.PP -RE_DUP_MAX, the limit on repetition counts in bounded repetitions, is 255. -.PP -A repetition operator (?, *, +, or bounds) cannot follow another -repetition operator. -A repetition operator cannot begin an expression or subexpression -or follow `^' or `|'. -.PP -`|' cannot appear first or last in a (sub)expression or after another `|', -i.e. an operand of `|' cannot be an empty subexpression. -An empty parenthesized subexpression, `()', is legal and matches an -empty (sub)string. -An empty string is not a legal RE. -.PP -A `{' followed by a digit is considered the beginning of bounds for a -bounded repetition, which must then follow the syntax for bounds. -A `{' \fInot\fR followed by a digit is considered an ordinary character. -.PP -`^' and `$' beginning and ending subexpressions in obsolete (``basic'') -REs are anchors, not ordinary characters. -.SH SEE ALSO -grep(1), regex(7) -.PP -POSIX 1003.2, sections 2.8 (Regular Expression Notation) -and -B.5 (C Binding for Regular Expression Matching). -.SH DIAGNOSTICS -Non-zero error codes from -.I regcomp -and -.I regexec -include the following: -.PP -.nf -.ta \w'REG_ECOLLATE'u+3n -REG_NOMATCH regexec() failed to match -REG_BADPAT invalid regular expression -REG_ECOLLATE invalid collating element -REG_ECTYPE invalid character class -REG_EESCAPE \e applied to unescapable character -REG_ESUBREG invalid backreference number -REG_EBRACK brackets [ ] not balanced -REG_EPAREN parentheses ( ) not balanced -REG_EBRACE braces { } not balanced -REG_BADBR invalid repetition count(s) in { } -REG_ERANGE invalid character range in [ ] -REG_ESPACE ran out of memory -REG_BADRPT ?, *, or + operand invalid -REG_EMPTY empty (sub)expression -REG_ASSERT ``can't happen''\(emyou found a bug -REG_INVARG invalid argument, e.g. negative-length string -.fi -.SH HISTORY -Written by Henry Spencer at University of Toronto, -henry@zoo.toronto.edu. -.SH BUGS -This is an alpha release with known defects. -Please report problems. -.PP -There is one known functionality bug. -The implementation of internationalization is incomplete: -the locale is always assumed to be the default one of 1003.2, -and only the collating elements etc. of that locale are available. -.PP -The back-reference code is subtle and doubts linger about its correctness -in complex cases. -.PP -.I Regexec -performance is poor. -This will improve with later releases. -.I Nmatch -exceeding 0 is expensive; -.I nmatch -exceeding 1 is worse. -.I Regexec -is largely insensitive to RE complexity \fIexcept\fR that back -references are massively expensive. -RE length does matter; in particular, there is a strong speed bonus -for keeping RE length under about 30 characters, -with most special characters counting roughly double. -.PP -.I Regcomp -implements bounded repetitions by macro expansion, -which is costly in time and space if counts are large -or bounded repetitions are nested. -An RE like, say, -`((((a{1,100}){1,100}){1,100}){1,100}){1,100}' -will (eventually) run almost any existing machine out of swap space. -.PP -There are suspected problems with response to obscure error conditions. -Notably, -certain kinds of internal overflow, -produced only by truly enormous REs or by multiply nested bounded repetitions, -are probably not handled well. -.PP -Due to a mistake in 1003.2, things like `a)b' are legal REs because `)' is -a special character only in the presence of a previous unmatched `('. -This can't be fixed until the spec is fixed. -.PP -The standard's definition of back references is vague. -For example, does -`a\e(\e(b\e)*\e2\e)*d' match `abbbd'? -Until the standard is clarified, -behavior in such cases should not be relied on. -.PP -The implementation of word-boundary matching is a bit of a kludge, -and bugs may lurk in combinations of word-boundary matching and anchoring. diff --git a/ext/ereg/regex/regex.7 b/ext/ereg/regex/regex.7 deleted file mode 100644 index d89012bda1dcd..0000000000000 --- a/ext/ereg/regex/regex.7 +++ /dev/null @@ -1,233 +0,0 @@ -.TH REGEX 7 "7 Feb 1994" -.BY "Henry Spencer" -.SH NAME -regex \- POSIX 1003.2 regular expressions -.SH DESCRIPTION -Regular expressions (``RE''s), -as defined in POSIX 1003.2, come in two forms: -modern REs (roughly those of -.IR egrep ; -1003.2 calls these ``extended'' REs) -and obsolete REs (roughly those of -.IR ed ; -1003.2 ``basic'' REs). -Obsolete REs mostly exist for backward compatibility in some old programs; -they will be discussed at the end. -1003.2 leaves some aspects of RE syntax and semantics open; -`\(dg' marks decisions on these aspects that -may not be fully portable to other 1003.2 implementations. -.PP -A (modern) RE is one\(dg or more non-empty\(dg \fIbranches\fR, -separated by `|'. -It matches anything that matches one of the branches. -.PP -A branch is one\(dg or more \fIpieces\fR, concatenated. -It matches a match for the first, followed by a match for the second, etc. -.PP -A piece is an \fIatom\fR possibly followed -by a single\(dg `*', `+', `?', or \fIbound\fR. -An atom followed by `*' matches a sequence of 0 or more matches of the atom. -An atom followed by `+' matches a sequence of 1 or more matches of the atom. -An atom followed by `?' matches a sequence of 0 or 1 matches of the atom. -.PP -A \fIbound\fR is `{' followed by an unsigned decimal integer, -possibly followed by `,' -possibly followed by another unsigned decimal integer, -always followed by `}'. -The integers must lie between 0 and RE_DUP_MAX (255\(dg) inclusive, -and if there are two of them, the first may not exceed the second. -An atom followed by a bound containing one integer \fIi\fR -and no comma matches -a sequence of exactly \fIi\fR matches of the atom. -An atom followed by a bound -containing one integer \fIi\fR and a comma matches -a sequence of \fIi\fR or more matches of the atom. -An atom followed by a bound -containing two integers \fIi\fR and \fIj\fR matches -a sequence of \fIi\fR through \fIj\fR (inclusive) matches of the atom. -.PP -An atom is a regular expression enclosed in `()' (matching a match for the -regular expression), -an empty set of `()' (matching the null string)\(dg, -a \fIbracket expression\fR (see below), `.' -(matching any single character), `^' (matching the null string at the -beginning of a line), `$' (matching the null string at the -end of a line), a `\e' followed by one of the characters -`^.[$()|*+?{\e' -(matching that character taken as an ordinary character), -a `\e' followed by any other character\(dg -(matching that character taken as an ordinary character, -as if the `\e' had not been present\(dg), -or a single character with no other significance (matching that character). -A `{' followed by a character other than a digit is an ordinary -character, not the beginning of a bound\(dg. -It is illegal to end an RE with `\e'. -.PP -A \fIbracket expression\fR is a list of characters enclosed in `[]'. -It normally matches any single character from the list (but see below). -If the list begins with `^', -it matches any single character -(but see below) \fInot\fR from the rest of the list. -If two characters in the list are separated by `\-', this is shorthand -for the full \fIrange\fR of characters between those two (inclusive) in the -collating sequence, -e.g. `[0-9]' in ASCII matches any decimal digit. -It is illegal\(dg for two ranges to share an -endpoint, e.g. `a-c-e'. -Ranges are very collating-sequence-dependent, -and portable programs should avoid relying on them. -.PP -To include a literal `]' in the list, make it the first character -(following a possible `^'). -To include a literal `\-', make it the first or last character, -or the second endpoint of a range. -To use a literal `\-' as the first endpoint of a range, -enclose it in `[.' and `.]' to make it a collating element (see below). -With the exception of these and some combinations using `[' (see next -paragraphs), all other special characters, including `\e', lose their -special significance within a bracket expression. -.PP -Within a bracket expression, a collating element (a character, -a multi-character sequence that collates as if it were a single character, -or a collating-sequence name for either) -enclosed in `[.' and `.]' stands for the -sequence of characters of that collating element. -The sequence is a single element of the bracket expression's list. -A bracket expression containing a multi-character collating element -can thus match more than one character, -e.g. if the collating sequence includes a `ch' collating element, -then the RE `[[.ch.]]*c' matches the first five characters -of `chchcc'. -.PP -Within a bracket expression, a collating element enclosed in `[=' and -`=]' is an equivalence class, standing for the sequences of characters -of all collating elements equivalent to that one, including itself. -(If there are no other equivalent collating elements, -the treatment is as if the enclosing delimiters were `[.' and `.]'.) -For example, if o and \o'o^' are the members of an equivalence class, -then `[[=o=]]', `[[=\o'o^'=]]', and `[o\o'o^']' are all synonymous. -An equivalence class may not\(dg be an endpoint -of a range. -.PP -Within a bracket expression, the name of a \fIcharacter class\fR enclosed -in `[:' and `:]' stands for the list of all characters belonging to that -class. -Standard character class names are: -.PP -.RS -.nf -.ta 3c 6c 9c -alnum digit punct -alpha graph space -blank lower upper -cntrl print xdigit -.fi -.RE -.PP -These stand for the character classes defined in -.IR ctype (3). -A locale may provide others. -A character class may not be used as an endpoint of a range. -.PP -There are two special cases\(dg of bracket expressions: -the bracket expressions `[[:<:]]' and `[[:>:]]' match the null string at -the beginning and end of a word respectively. -A word is defined as a sequence of -word characters -which is neither preceded nor followed by -word characters. -A word character is an -.I alnum -character (as defined by -.IR ctype (3)) -or an underscore. -This is an extension, -compatible with but not specified by POSIX 1003.2, -and should be used with -caution in software intended to be portable to other systems. -.PP -In the event that an RE could match more than one substring of a given -string, -the RE matches the one starting earliest in the string. -If the RE could match more than one substring starting at that point, -it matches the longest. -Subexpressions also match the longest possible substrings, subject to -the constraint that the whole match be as long as possible, -with subexpressions starting earlier in the RE taking priority over -ones starting later. -Note that higher-level subexpressions thus take priority over -their lower-level component subexpressions. -.PP -Match lengths are measured in characters, not collating elements. -A null string is considered longer than no match at all. -For example, -`bb*' matches the three middle characters of `abbbc', -`(wee|week)(knights|nights)' matches all ten characters of `weeknights', -when `(.*).*' is matched against `abc' the parenthesized subexpression -matches all three characters, and -when `(a*)*' is matched against `bc' both the whole RE and the parenthesized -subexpression match the null string. -.PP -If case-independent matching is specified, -the effect is much as if all case distinctions had vanished from the -alphabet. -When an alphabetic that exists in multiple cases appears as an -ordinary character outside a bracket expression, it is effectively -transformed into a bracket expression containing both cases, -e.g. `x' becomes `[xX]'. -When it appears inside a bracket expression, all case counterparts -of it are added to the bracket expression, so that (e.g.) `[x]' -becomes `[xX]' and `[^x]' becomes `[^xX]'. -.PP -No particular limit is imposed on the length of REs\(dg. -Programs intended to be portable should not employ REs longer -than 256 bytes, -as an implementation can refuse to accept such REs and remain -POSIX-compliant. -.PP -Obsolete (``basic'') regular expressions differ in several respects. -`|', `+', and `?' are ordinary characters and there is no equivalent -for their functionality. -The delimiters for bounds are `\e{' and `\e}', -with `{' and `}' by themselves ordinary characters. -The parentheses for nested subexpressions are `\e(' and `\e)', -with `(' and `)' by themselves ordinary characters. -`^' is an ordinary character except at the beginning of the -RE or\(dg the beginning of a parenthesized subexpression, -`$' is an ordinary character except at the end of the -RE or\(dg the end of a parenthesized subexpression, -and `*' is an ordinary character if it appears at the beginning of the -RE or the beginning of a parenthesized subexpression -(after a possible leading `^'). -Finally, there is one new type of atom, a \fIback reference\fR: -`\e' followed by a non-zero decimal digit \fId\fR -matches the same sequence of characters -matched by the \fId\fRth parenthesized subexpression -(numbering subexpressions by the positions of their opening parentheses, -left to right), -so that (e.g.) `\e([bc]\e)\e1' matches `bb' or `cc' but not `bc'. -.SH SEE ALSO -regex(3) -.PP -POSIX 1003.2, section 2.8 (Regular Expression Notation). -.SH BUGS -Having two kinds of REs is a botch. -.PP -The current 1003.2 spec says that `)' is an ordinary character in -the absence of an unmatched `('; -this was an unintentional result of a wording error, -and change is likely. -Avoid relying on it. -.PP -Back references are a dreadful botch, -posing major problems for efficient implementations. -They are also somewhat vaguely defined -(does -`a\e(\e(b\e)*\e2\e)*d' match `abbbd'?). -Avoid using them. -.PP -1003.2's specification of case-independent matching is vague. -The ``one case implies all cases'' definition given above -is current consensus among implementors as to the right interpretation. -.PP -The syntax for word boundaries is incredibly ugly. diff --git a/ext/ereg/regex/regex.dsp b/ext/ereg/regex/regex.dsp deleted file mode 100644 index e8f1ad42995e4..0000000000000 --- a/ext/ereg/regex/regex.dsp +++ /dev/null @@ -1,106 +0,0 @@ -# Microsoft Developer Studio Project File - Name="regex" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 5.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=regex - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "regex.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "regex.mak" CFG="regex - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "regex - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "regex - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "regex - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 - -!ELSEIF "$(CFG)" == "regex - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "regex - Win32 Release" -# Name "regex - Win32 Debug" -# Begin Source File - -SOURCE=.\regcomp.c -# End Source File -# Begin Source File - -SOURCE=.\regerror.c -# End Source File -# Begin Source File - -SOURCE=.\regexec.c -# End Source File -# Begin Source File - -SOURCE=.\regfree.c -# End Source File -# End Target -# End Project diff --git a/ext/ereg/regex/regex.dsw b/ext/ereg/regex/regex.dsw deleted file mode 100644 index 7b7df8126c4b5..0000000000000 --- a/ext/ereg/regex/regex.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 5.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "regex"=.\regex.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/ext/ereg/regex/regex.h b/ext/ereg/regex/regex.h deleted file mode 100644 index b39c5e178c6b7..0000000000000 --- a/ext/ereg/regex/regex.h +++ /dev/null @@ -1,83 +0,0 @@ -#ifndef _HSREGEX_H_ -#define _HSREGEX_H_ -#ifndef _HSREGEX_H -#define _HSREGEX_H /* never again */ -/* ========= begin header generated by ././mkh ========= */ -#ifdef __cplusplus -extern "C" { -#endif - -/* === regex2.h === */ -#ifdef WIN32 -#define API_EXPORT(type) __declspec(dllexport) type __stdcall -#else -#define API_EXPORT(type) type -#endif - -typedef off_t regoff_t; -typedef struct { - int re_magic; - size_t re_nsub; /* number of parenthesized subexpressions */ - const char *re_endp; /* end pointer for REG_PEND */ - struct re_guts *re_g; /* none of your business :-) */ -} regex_t; -typedef struct { - regoff_t rm_so; /* start of match */ - regoff_t rm_eo; /* end of match */ -} regmatch_t; - - -/* === regcomp.c === */ -API_EXPORT(int) regcomp(regex_t *, const char *, int); -#define REG_BASIC 0000 -#define REG_EXTENDED 0001 -#define REG_ICASE 0002 -#define REG_NOSUB 0004 -#define REG_NEWLINE 0010 -#define REG_NOSPEC 0020 -#define REG_PEND 0040 -#define REG_DUMP 0200 - - -/* === regerror.c === */ -#define REG_OKAY 0 -#define REG_NOMATCH 1 -#define REG_BADPAT 2 -#define REG_ECOLLATE 3 -#define REG_ECTYPE 4 -#define REG_EESCAPE 5 -#define REG_ESUBREG 6 -#define REG_EBRACK 7 -#define REG_EPAREN 8 -#define REG_EBRACE 9 -#define REG_BADBR 10 -#define REG_ERANGE 11 -#define REG_ESPACE 12 -#define REG_BADRPT 13 -#define REG_EMPTY 14 -#define REG_ASSERT 15 -#define REG_INVARG 16 -#define REG_ATOI 255 /* convert name to number (!) */ -#define REG_ITOA 0400 /* convert number to name (!) */ -API_EXPORT(size_t) regerror(int, const regex_t *, char *, size_t); - - -/* === regexec.c === */ -API_EXPORT(int) regexec(const regex_t *, const char *, size_t, regmatch_t [], int); -#define REG_NOTBOL 00001 -#define REG_NOTEOL 00002 -#define REG_STARTEND 00004 -#define REG_TRACE 00400 /* tracing of execution */ -#define REG_LARGE 01000 /* force large representation */ -#define REG_BACKR 02000 /* force use of backref code */ - - -/* === regfree.c === */ -API_EXPORT(void) regfree(regex_t *); - -#ifdef __cplusplus -} -#endif -/* ========= end header generated by ././mkh ========= */ -#endif -#endif diff --git a/ext/ereg/regex/regex.mak b/ext/ereg/regex/regex.mak deleted file mode 100644 index b87ded340b396..0000000000000 --- a/ext/ereg/regex/regex.mak +++ /dev/null @@ -1,304 +0,0 @@ -# Microsoft Developer Studio Generated NMAKE File, Based on regex.dsp -!IF "$(CFG)" == "" -CFG=regex - Win32 Release -!MESSAGE No configuration specified. Defaulting to regex - Win32 Release. -!ENDIF - -!IF "$(CFG)" != "regex - Win32 Release" && "$(CFG)" != "regex - Win32 Debug" -!MESSAGE Invalid configuration "$(CFG)" specified. -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "regex.mak" CFG="regex - Win32 Release" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "regex - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "regex - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE -!ERROR An invalid configuration is specified. -!ENDIF - -!IF "$(OS)" == "Windows_NT" -NULL= -!ELSE -NULL=nul -!ENDIF - -CPP=cl.exe - -!IF "$(CFG)" == "regex - Win32 Release" - -OUTDIR=.\Release -INTDIR=.\Release -# Begin Custom Macros -OutDir=.\.\Release -# End Custom Macros - -!IF "$(RECURSE)" == "0" - -ALL : "$(OUTDIR)\regex.lib" - -!ELSE - -ALL : "$(OUTDIR)\regex.lib" - -!ENDIF - -CLEAN : - -@erase "$(INTDIR)\regcomp.obj" - -@erase "$(INTDIR)\regerror.obj" - -@erase "$(INTDIR)\regexec.obj" - -@erase "$(INTDIR)\regfree.obj" - -@erase "$(INTDIR)\vc50.idb" - -@erase "$(OUTDIR)\regex.lib" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS"\ - /Fp"$(INTDIR)\regex.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c -CPP_OBJS=.\Release/ -CPP_SBRS=. -BSC32=bscmake.exe -BSC32_FLAGS=/nologo /o"$(OUTDIR)\regex.bsc" -BSC32_SBRS= \ - -LIB32=link.exe -lib -LIB32_FLAGS=/nologo /out:"$(OUTDIR)\regex.lib" -LIB32_OBJS= \ - "$(INTDIR)\regcomp.obj" \ - "$(INTDIR)\regerror.obj" \ - "$(INTDIR)\regexec.obj" \ - "$(INTDIR)\regfree.obj" - -"$(OUTDIR)\regex.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) - $(LIB32) @<< - $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) -<< - -!ELSEIF "$(CFG)" == "regex - Win32 Debug" - -OUTDIR=.\Debug -INTDIR=.\Debug -# Begin Custom Macros -OutDir=.\.\Debug -# End Custom Macros - -!IF "$(RECURSE)" == "0" - -ALL : "$(OUTDIR)\regex.lib" "$(OUTDIR)\regex.bsc" - -!ELSE - -ALL : "$(OUTDIR)\regex.lib" "$(OUTDIR)\regex.bsc" - -!ENDIF - -CLEAN : - -@erase "$(INTDIR)\regcomp.obj" - -@erase "$(INTDIR)\regcomp.sbr" - -@erase "$(INTDIR)\regerror.obj" - -@erase "$(INTDIR)\regerror.sbr" - -@erase "$(INTDIR)\regexec.obj" - -@erase "$(INTDIR)\regexec.sbr" - -@erase "$(INTDIR)\regfree.obj" - -@erase "$(INTDIR)\regfree.sbr" - -@erase "$(INTDIR)\vc50.idb" - -@erase "$(OUTDIR)\regex.bsc" - -@erase "$(OUTDIR)\regex.lib" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -CPP_PROJ=/nologo /MDd /W3 /GX /Z7 /Od /I "." /D "WIN32" /D "_DEBUG" /D\ - "_WINDOWS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\regex.pch" /YX /Fo"$(INTDIR)\\"\ - /Fd"$(INTDIR)\\" /FD /c -CPP_OBJS=.\Debug/ -CPP_SBRS=.\Debug/ -BSC32=bscmake.exe -BSC32_FLAGS=/nologo /o"$(OUTDIR)\regex.bsc" -BSC32_SBRS= \ - "$(INTDIR)\regcomp.sbr" \ - "$(INTDIR)\regerror.sbr" \ - "$(INTDIR)\regexec.sbr" \ - "$(INTDIR)\regfree.sbr" - -"$(OUTDIR)\regex.bsc" : "$(OUTDIR)" $(BSC32_SBRS) - $(BSC32) @<< - $(BSC32_FLAGS) $(BSC32_SBRS) -<< - -LIB32=link.exe -lib -LIB32_FLAGS=/nologo /out:"$(OUTDIR)\regex.lib" -LIB32_OBJS= \ - "$(INTDIR)\regcomp.obj" \ - "$(INTDIR)\regerror.obj" \ - "$(INTDIR)\regexec.obj" \ - "$(INTDIR)\regfree.obj" - -"$(OUTDIR)\regex.lib" : "$(OUTDIR)" $(DEF_FILE) $(LIB32_OBJS) - $(LIB32) @<< - $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) -<< - -!ENDIF - -.c{$(CPP_OBJS)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cpp{$(CPP_OBJS)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cxx{$(CPP_OBJS)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.c{$(CPP_SBRS)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cpp{$(CPP_SBRS)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cxx{$(CPP_SBRS)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - - -!IF "$(CFG)" == "regex - Win32 Release" || "$(CFG)" == "regex - Win32 Debug" -SOURCE=.\regcomp.c - -!IF "$(CFG)" == "regex - Win32 Release" - -DEP_CPP_REGCO=\ - ".\cclass.h"\ - ".\cname.h"\ - ".\regcomp.ih"\ - ".\regex.h"\ - ".\regex2.h"\ - ".\utils.h"\ - - -"$(INTDIR)\regcomp.obj" : $(SOURCE) $(DEP_CPP_REGCO) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "regex - Win32 Debug" - -DEP_CPP_REGCO=\ - ".\cclass.h"\ - ".\cname.h"\ - ".\regcomp.ih"\ - ".\regex.h"\ - ".\regex2.h"\ - ".\utils.h"\ - {$(INCLUDE)}"sys\types.h"\ - - -"$(INTDIR)\regcomp.obj" "$(INTDIR)\regcomp.sbr" : $(SOURCE) $(DEP_CPP_REGCO)\ - "$(INTDIR)" - - -!ENDIF - -SOURCE=.\regerror.c - -!IF "$(CFG)" == "regex - Win32 Release" - -DEP_CPP_REGER=\ - ".\regerror.ih"\ - ".\regex.h"\ - ".\utils.h"\ - - -"$(INTDIR)\regerror.obj" : $(SOURCE) $(DEP_CPP_REGER) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "regex - Win32 Debug" - -DEP_CPP_REGER=\ - ".\regerror.ih"\ - ".\regex.h"\ - ".\utils.h"\ - {$(INCLUDE)}"sys\types.h"\ - - -"$(INTDIR)\regerror.obj" "$(INTDIR)\regerror.sbr" : $(SOURCE) $(DEP_CPP_REGER)\ - "$(INTDIR)" - - -!ENDIF - -SOURCE=.\regexec.c - -!IF "$(CFG)" == "regex - Win32 Release" - -DEP_CPP_REGEX=\ - ".\engine.c"\ - ".\engine.ih"\ - ".\regex.h"\ - ".\regex2.h"\ - ".\utils.h"\ - - -"$(INTDIR)\regexec.obj" : $(SOURCE) $(DEP_CPP_REGEX) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "regex - Win32 Debug" - -DEP_CPP_REGEX=\ - ".\engine.c"\ - ".\engine.ih"\ - ".\regex.h"\ - ".\regex2.h"\ - ".\utils.h"\ - {$(INCLUDE)}"sys\types.h"\ - - -"$(INTDIR)\regexec.obj" "$(INTDIR)\regexec.sbr" : $(SOURCE) $(DEP_CPP_REGEX)\ - "$(INTDIR)" - - -!ENDIF - -SOURCE=.\regfree.c - -!IF "$(CFG)" == "regex - Win32 Release" - -DEP_CPP_REGFR=\ - ".\regex.h"\ - ".\regex2.h"\ - ".\utils.h"\ - - -"$(INTDIR)\regfree.obj" : $(SOURCE) $(DEP_CPP_REGFR) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "regex - Win32 Debug" - -DEP_CPP_REGFR=\ - ".\regex.h"\ - ".\regex2.h"\ - ".\utils.h"\ - {$(INCLUDE)}"sys\types.h"\ - - -"$(INTDIR)\regfree.obj" "$(INTDIR)\regfree.sbr" : $(SOURCE) $(DEP_CPP_REGFR)\ - "$(INTDIR)" - - -!ENDIF - -SOURCE=.\engine.c - -!ENDIF - diff --git a/ext/ereg/regex/regex2.h b/ext/ereg/regex/regex2.h deleted file mode 100644 index 4996f96ecd354..0000000000000 --- a/ext/ereg/regex/regex2.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * First, the stuff that ends up in the outside-world include file - = #ifdef WIN32 - = #define API_EXPORT(type) __declspec(dllexport) type __stdcall - = #else - = #define API_EXPORT(type) type - = #endif - = - = typedef off_t regoff_t; - = typedef struct { - = int re_magic; - = size_t re_nsub; // number of parenthesized subexpressions - = const unsigned char *re_endp; // end pointer for REG_PEND - = struct re_guts *re_g; // none of your business :-) - = } regex_t; - = typedef struct { - = regoff_t rm_so; // start of match - = regoff_t rm_eo; // end of match - = } regmatch_t; - */ -/* - * internals of regex_t - */ -#define MAGIC1 ((('r'^0200)<<8) | 'e') - -/* - * The internal representation is a *strip*, a sequence of - * operators ending with an endmarker. (Some terminology etc. is a - * historical relic of earlier versions which used multiple strips.) - * Certain oddities in the representation are there to permit running - * the machinery backwards; in particular, any deviation from sequential - * flow must be marked at both its source and its destination. Some - * fine points: - * - * - OPLUS_ and O_PLUS are *inside* the loop they create. - * - OQUEST_ and O_QUEST are *outside* the bypass they create. - * - OCH_ and O_CH are *outside* the multi-way branch they create, while - * OOR1 and OOR2 are respectively the end and the beginning of one of - * the branches. Note that there is an implicit OOR2 following OCH_ - * and an implicit OOR1 preceding O_CH. - * - * In state representations, an operator's bit is on to signify a state - * immediately *preceding* "execution" of that operator. - */ -typedef long sop; /* strip operator */ -typedef long sopno; -#define OPRMASK 0x7c000000 -#define OPDMASK 0x03ffffff -#define OPSHIFT (26) -#define OP(n) ((n)&OPRMASK) -#define OPND(n) ((n)&OPDMASK) -#define SOP(op, opnd) ((op)|(opnd)) -/* operators meaning operand */ -/* (back, fwd are offsets) */ -#define OEND (1< uch [csetsize] */ - uch mask; /* bit within array */ - uch hash; /* hash code */ - size_t smultis; - unsigned char *multis; /* -> char[smulti] ab\0cd\0ef\0\0 */ -} cset; -/* note that CHadd and CHsub are unsafe, and CHIN doesn't yield 0/1 */ -#define CHadd(cs, c) ((cs)->ptr[(uch)(c)] |= (cs)->mask, (cs)->hash += (c)) -#define CHsub(cs, c) ((cs)->ptr[(uch)(c)] &= ~(cs)->mask, (cs)->hash -= (c)) -#define CHIN(cs, c) ((cs)->ptr[(uch)(c)] & (cs)->mask) -#define MCadd(p, cs, cp) mcadd(p, cs, cp) /* regcomp() internal fns */ -#define MCsub(p, cs, cp) mcsub(p, cs, cp) -#define MCin(p, cs, cp) mcin(p, cs, cp) - -/* stuff for character categories */ -typedef unsigned char cat_t; - -/* - * main compiled-expression structure - */ -struct re_guts { - int magic; -# define MAGIC2 ((('R'^0200)<<8)|'E') - sop *strip; /* malloced area for strip */ - int csetsize; /* number of bits in a cset vector */ - int ncsets; /* number of csets in use */ - cset *sets; /* -> cset [ncsets] */ - uch *setbits; /* -> uch[csetsize][ncsets/CHAR_BIT] */ - int cflags; /* copy of regcomp() cflags argument */ - sopno nstates; /* = number of sops */ - sopno firststate; /* the initial OEND (normally 0) */ - sopno laststate; /* the final OEND */ - int iflags; /* internal flags */ -# define USEBOL 01 /* used ^ */ -# define USEEOL 02 /* used $ */ -# define BAD 04 /* something wrong */ - int nbol; /* number of ^ used */ - int neol; /* number of $ used */ - int ncategories; /* how many character categories */ - cat_t *categories; /* ->catspace[-UCHAR_MIN] */ - unsigned char *must; /* match must contain this string */ - int mlen; /* length of must */ - size_t nsub; /* copy of re_nsub */ - int backrefs; /* does it use back references? */ - sopno nplus; /* how deep does it nest +s? */ - /* catspace must be last */ - cat_t catspace[1]; /* actually [NC] */ -}; - -/* misc utilities */ -#define OUT (UCHAR_MAX+1) /* a non-character value */ -#define ISWORD(c) (isalnum(c) || (c) == '_') diff --git a/ext/ereg/regex/regex_extra.h b/ext/ereg/regex/regex_extra.h deleted file mode 100644 index d668f7613f8d4..0000000000000 --- a/ext/ereg/regex/regex_extra.h +++ /dev/null @@ -1,23 +0,0 @@ -/* do not frame this - we must be able to include this file multiple times */ - -#undef regexec -#undef regerror -#undef regfree -#undef regcomp - -#if (defined(REGEX) && REGEX == 1) || (!defined(REGEX)) - -#ifndef PHP_WIN32 - -#ifndef PHP_NO_ALIASES - -#define regexec php_regexec -#define regerror php_regerror -#define regfree php_regfree -#define regcomp php_regcomp - -#endif - -#endif - -#endif diff --git a/ext/ereg/regex/regexec.c b/ext/ereg/regex/regexec.c deleted file mode 100644 index bbfe094c96ca2..0000000000000 --- a/ext/ereg/regex/regexec.c +++ /dev/null @@ -1,138 +0,0 @@ -/* - * the outer shell of regexec() - * - * This file includes engine.c *twice*, after muchos fiddling with the - * macros that code uses. This lets the same code operate on two different - * representations for state sets. - */ -#include -#include -#include -#include -#include -#include -#include - -#include "utils.h" -#include "regex2.h" - -#define PHP_REGEX_NOPE 0; /* for use in asserts; shuts lint up */ - -/* macros for manipulating states, small version */ -#define states unsigned -#define states1 unsigned /* for later use in regexec() decision */ -#define CLEAR(v) ((v) = 0) -#define SET0(v, n) ((v) &= ~((unsigned)1 << (n))) -#define SET1(v, n) ((v) |= (unsigned)1 << (n)) -#define ISSET(v, n) ((v) & ((unsigned)1 << (n))) -#define ASSIGN(d, s) ((d) = (s)) -#define EQ(a, b) ((a) == (b)) -#define STATEVARS int dummy /* dummy version */ -#define STATESETUP(m, n) /* nothing */ -#define STATETEARDOWN(m) /* nothing */ -#define SETUP(v) ((v) = 0) -#define onestate unsigned -#define INIT(o, n) ((o) = (unsigned)1 << (n)) -#define INC(o) ((o) <<= 1) -#define ISSTATEIN(v, o) ((v) & (o)) -/* some abbreviations; note that some of these know variable names! */ -/* do "if I'm here, I can also be there" etc without branches */ -#define FWD(dst, src, n) ((dst) |= ((unsigned)(src)&(here)) << (n)) -#define BACK(dst, src, n) ((dst) |= ((unsigned)(src)&(here)) >> (n)) -#define ISSETBACK(v, n) ((v) & ((unsigned)here >> (n))) -/* function names */ -#define SNAMES /* engine.c looks after details */ - -#include "engine.c" - -/* now undo things */ -#undef states -#undef CLEAR -#undef SET0 -#undef SET1 -#undef ISSET -#undef ASSIGN -#undef EQ -#undef STATEVARS -#undef STATESETUP -#undef STATETEARDOWN -#undef SETUP -#undef onestate -#undef INIT -#undef INC -#undef ISSTATEIN -#undef FWD -#undef BACK -#undef ISSETBACK -#undef SNAMES - -/* macros for manipulating states, large version */ -#define states unsigned char * -#define CLEAR(v) memset(v, 0, m->g->nstates) -#define SET0(v, n) ((v)[n] = 0) -#define SET1(v, n) ((v)[n] = 1) -#define ISSET(v, n) ((v)[n]) -#define ASSIGN(d, s) memcpy(d, s, m->g->nstates) -#define EQ(a, b) (memcmp(a, b, m->g->nstates) == 0) -#define STATEVARS int vn; unsigned char *space -#define STATESETUP(m, nv) { (m)->space = malloc((nv)*(m)->g->nstates); \ - if ((m)->space == NULL) return(REG_ESPACE); \ - (m)->vn = 0; } -#define STATETEARDOWN(m) { free((m)->space); } -#define SETUP(v) ((v) = &m->space[m->vn++ * m->g->nstates]) -#define onestate int -#define INIT(o, n) ((o) = (n)) -#define INC(o) ((o)++) -#define ISSTATEIN(v, o) ((v)[o]) -/* some abbreviations; note that some of these know variable names! */ -/* do "if I'm here, I can also be there" etc without branches */ -#define FWD(dst, src, n) ((dst)[here+(n)] |= (src)[here]) -#define BACK(dst, src, n) ((dst)[here-(n)] |= (src)[here]) -#define ISSETBACK(v, n) ((v)[here - (n)]) -/* function names */ -#define LNAMES /* flag */ - -#include "engine.c" - -/* - - regexec - interface for matching - = API_EXPORT(int) regexec(const regex_t *, const char *, size_t, \ - = regmatch_t [], int); - = #define REG_NOTBOL 00001 - = #define REG_NOTEOL 00002 - = #define REG_STARTEND 00004 - = #define REG_TRACE 00400 // tracing of execution - = #define REG_LARGE 01000 // force large representation - = #define REG_BACKR 02000 // force use of backref code - * - * We put this here so we can exploit knowledge of the state representation - * when choosing which matcher to call. Also, by this point the matchers - * have been prototyped. - */ -API_EXPORT(int) /* 0 success, REG_NOMATCH failure */ -regexec(preg, string, nmatch, pmatch, eflags) -const regex_t *preg; -const char *string; -size_t nmatch; -regmatch_t pmatch[]; -int eflags; -{ - register struct re_guts *g = preg->re_g; -#ifdef REDEBUG -# define GOODFLAGS(f) (f) -#else -# define GOODFLAGS(f) ((f)&(REG_NOTBOL|REG_NOTEOL|REG_STARTEND)) -#endif - - if (preg->re_magic != MAGIC1 || g->magic != MAGIC2) - return(REG_BADPAT); - assert(!(g->iflags&BAD)); - if (g->iflags&BAD) /* backstop for no-debug case */ - return(REG_BADPAT); - eflags = GOODFLAGS(eflags); - - if (g->nstates <= CHAR_BIT*sizeof(states1) && !(eflags®_LARGE)) - return(smatcher(g, (unsigned char *)string, nmatch, pmatch, eflags)); - else - return(lmatcher(g, (unsigned char *)string, nmatch, pmatch, eflags)); -} diff --git a/ext/ereg/regex/regfree.c b/ext/ereg/regex/regfree.c deleted file mode 100644 index 9fd618a13b83a..0000000000000 --- a/ext/ereg/regex/regfree.c +++ /dev/null @@ -1,37 +0,0 @@ -#include -#include -#include -#include - -#include "utils.h" -#include "regex2.h" - -/* - - regfree - free everything - = API_EXPORT(void) regfree(regex_t *); - */ -API_EXPORT(void) -regfree(preg) -regex_t *preg; -{ - register struct re_guts *g; - - if (preg->re_magic != MAGIC1) /* oops */ - return; /* nice to complain, but hard */ - - g = preg->re_g; - if (g == NULL || g->magic != MAGIC2) /* oops again */ - return; - preg->re_magic = 0; /* mark it invalid */ - g->magic = 0; /* mark it invalid */ - - if (g->strip != NULL) - free((char *)g->strip); - if (g->sets != NULL) - free((char *)g->sets); - if (g->setbits != NULL) - free((char *)g->setbits); - if (g->must != NULL) - free(g->must); - free((char *)g); -} diff --git a/ext/ereg/regex/split.c b/ext/ereg/regex/split.c deleted file mode 100644 index 188bdb775b9ff..0000000000000 --- a/ext/ereg/regex/split.c +++ /dev/null @@ -1,316 +0,0 @@ -#include -#include - -/* - - split - divide a string into fields, like awk split() - = int split(char *string, char *fields[], int nfields, char *sep); - */ -int /* number of fields, including overflow */ -split(string, fields, nfields, sep) -char *string; -char *fields[]; /* list is not NULL-terminated */ -int nfields; /* number of entries available in fields[] */ -char *sep; /* "" white, "c" single char, "ab" [ab]+ */ -{ - register char *p = string; - register char c; /* latest character */ - register char sepc = sep[0]; - register char sepc2; - register int fn; - register char **fp = fields; - register char *sepp; - register int trimtrail; - - /* white space */ - if (sepc == '\0') { - while ((c = *p++) == ' ' || c == '\t') - continue; - p--; - trimtrail = 1; - sep = " \t"; /* note, code below knows this is 2 long */ - sepc = ' '; - } else - trimtrail = 0; - sepc2 = sep[1]; /* now we can safely pick this up */ - - /* catch empties */ - if (*p == '\0') - return(0); - - /* single separator */ - if (sepc2 == '\0') { - fn = nfields; - for (;;) { - *fp++ = p; - fn--; - if (fn == 0) - break; - while ((c = *p++) != sepc) - if (c == '\0') - return(nfields - fn); - *(p-1) = '\0'; - } - /* we have overflowed the fields vector -- just count them */ - fn = nfields; - for (;;) { - while ((c = *p++) != sepc) - if (c == '\0') - return(fn); - fn++; - } - /* not reached */ - } - - /* two separators */ - if (sep[2] == '\0') { - fn = nfields; - for (;;) { - *fp++ = p; - fn--; - while ((c = *p++) != sepc && c != sepc2) - if (c == '\0') { - if (trimtrail && **(fp-1) == '\0') - fn++; - return(nfields - fn); - } - if (fn == 0) - break; - *(p-1) = '\0'; - while ((c = *p++) == sepc || c == sepc2) - continue; - p--; - } - /* we have overflowed the fields vector -- just count them */ - fn = nfields; - while (c != '\0') { - while ((c = *p++) == sepc || c == sepc2) - continue; - p--; - fn++; - while ((c = *p++) != '\0' && c != sepc && c != sepc2) - continue; - } - /* might have to trim trailing white space */ - if (trimtrail) { - p--; - while ((c = *--p) == sepc || c == sepc2) - continue; - p++; - if (*p != '\0') { - if (fn == nfields+1) - *p = '\0'; - fn--; - } - } - return(fn); - } - - /* n separators */ - fn = 0; - for (;;) { - if (fn < nfields) - *fp++ = p; - fn++; - for (;;) { - c = *p++; - if (c == '\0') - return(fn); - sepp = sep; - while ((sepc = *sepp++) != '\0' && sepc != c) - continue; - if (sepc != '\0') /* it was a separator */ - break; - } - if (fn < nfields) - *(p-1) = '\0'; - for (;;) { - c = *p++; - sepp = sep; - while ((sepc = *sepp++) != '\0' && sepc != c) - continue; - if (sepc == '\0') /* it wasn't a separator */ - break; - } - p--; - } - - /* not reached */ -} - -#ifdef TEST_SPLIT - - -/* - * test program - * pgm runs regression - * pgm sep splits stdin lines by sep - * pgm str sep splits str by sep - * pgm str sep n splits str by sep n times - */ -int -main(argc, argv) -int argc; -char *argv[]; -{ - char buf[512]; - register int n; -# define MNF 10 - char *fields[MNF]; - - if (argc > 4) - for (n = atoi(argv[3]); n > 0; n--) { - (void) strcpy(buf, argv[1]); - } - else if (argc > 3) - for (n = atoi(argv[3]); n > 0; n--) { - (void) strcpy(buf, argv[1]); - (void) split(buf, fields, MNF, argv[2]); - } - else if (argc > 2) - dosplit(argv[1], argv[2]); - else if (argc > 1) - while (fgets(buf, sizeof(buf), stdin) != NULL) { - buf[strlen(buf)-1] = '\0'; /* stomp newline */ - dosplit(buf, argv[1]); - } - else - regress(); - - exit(0); -} - -dosplit(string, seps) -char *string; -char *seps; -{ -# define NF 5 - char *fields[NF]; - register int nf; - - nf = split(string, fields, NF, seps); - print(nf, NF, fields); -} - -print(nf, nfp, fields) -int nf; -int nfp; -char *fields[]; -{ - register int fn; - register int bound; - - bound = (nf > nfp) ? nfp : nf; - printf("%d:\t", nf); - for (fn = 0; fn < bound; fn++) - printf("\"%s\"%s", fields[fn], (fn+1 < nf) ? ", " : "\n"); -} - -#define RNF 5 /* some table entries know this */ -struct { - char *str; - char *seps; - int nf; - char *fi[RNF]; -} tests[] = { - "", " ", 0, { "" }, - " ", " ", 2, { "", "" }, - "x", " ", 1, { "x" }, - "xy", " ", 1, { "xy" }, - "x y", " ", 2, { "x", "y" }, - "abc def g ", " ", 5, { "abc", "def", "", "g", "" }, - " a bcd", " ", 4, { "", "", "a", "bcd" }, - "a b c d e f", " ", 6, { "a", "b", "c", "d", "e f" }, - " a b c d ", " ", 6, { "", "a", "b", "c", "d " }, - - "", " _", 0, { "" }, - " ", " _", 2, { "", "" }, - "x", " _", 1, { "x" }, - "x y", " _", 2, { "x", "y" }, - "ab _ cd", " _", 2, { "ab", "cd" }, - " a_b c ", " _", 5, { "", "a", "b", "c", "" }, - "a b c_d e f", " _", 6, { "a", "b", "c", "d", "e f" }, - " a b c d ", " _", 6, { "", "a", "b", "c", "d " }, - - "", " _~", 0, { "" }, - " ", " _~", 2, { "", "" }, - "x", " _~", 1, { "x" }, - "x y", " _~", 2, { "x", "y" }, - "ab _~ cd", " _~", 2, { "ab", "cd" }, - " a_b c~", " _~", 5, { "", "a", "b", "c", "" }, - "a b_c d~e f", " _~", 6, { "a", "b", "c", "d", "e f" }, - "~a b c d ", " _~", 6, { "", "a", "b", "c", "d " }, - - "", " _~-", 0, { "" }, - " ", " _~-", 2, { "", "" }, - "x", " _~-", 1, { "x" }, - "x y", " _~-", 2, { "x", "y" }, - "ab _~- cd", " _~-", 2, { "ab", "cd" }, - " a_b c~", " _~-", 5, { "", "a", "b", "c", "" }, - "a b_c-d~e f", " _~-", 6, { "a", "b", "c", "d", "e f" }, - "~a-b c d ", " _~-", 6, { "", "a", "b", "c", "d " }, - - "", " ", 0, { "" }, - " ", " ", 2, { "", "" }, - "x", " ", 1, { "x" }, - "xy", " ", 1, { "xy" }, - "x y", " ", 2, { "x", "y" }, - "abc def g ", " ", 4, { "abc", "def", "g", "" }, - " a bcd", " ", 3, { "", "a", "bcd" }, - "a b c d e f", " ", 6, { "a", "b", "c", "d", "e f" }, - " a b c d ", " ", 6, { "", "a", "b", "c", "d " }, - - "", "", 0, { "" }, - " ", "", 0, { "" }, - "x", "", 1, { "x" }, - "xy", "", 1, { "xy" }, - "x y", "", 2, { "x", "y" }, - "abc def g ", "", 3, { "abc", "def", "g" }, - "\t a bcd", "", 2, { "a", "bcd" }, - " a \tb\t c ", "", 3, { "a", "b", "c" }, - "a b c d e ", "", 5, { "a", "b", "c", "d", "e" }, - "a b\tc d e f", "", 6, { "a", "b", "c", "d", "e f" }, - " a b c d e f ", "", 6, { "a", "b", "c", "d", "e f " }, - - NULL, NULL, 0, { NULL }, -}; - -regress() -{ - char buf[512]; - register int n; - char *fields[RNF+1]; - register int nf; - register int i; - register int printit; - register char *f; - - for (n = 0; tests[n].str != NULL; n++) { - (void) strcpy(buf, tests[n].str); - fields[RNF] = NULL; - nf = split(buf, fields, RNF, tests[n].seps); - printit = 0; - if (nf != tests[n].nf) { - printf("split `%s' by `%s' gave %d fields, not %d\n", - tests[n].str, tests[n].seps, nf, tests[n].nf); - printit = 1; - } else if (fields[RNF] != NULL) { - printf("split() went beyond array end\n"); - printit = 1; - } else { - for (i = 0; i < nf && i < RNF; i++) { - f = fields[i]; - if (f == NULL) - f = "(NULL)"; - if (strcmp(f, tests[n].fi[i]) != 0) { - printf("split `%s' by `%s', field %d is `%s', not `%s'\n", - tests[n].str, tests[n].seps, - i, fields[i], tests[n].fi[i]); - printit = 1; - } - } - } - if (printit) - print(nf, RNF, fields); - } -} -#endif diff --git a/ext/ereg/regex/tests b/ext/ereg/regex/tests deleted file mode 100644 index c05846177f594..0000000000000 --- a/ext/ereg/regex/tests +++ /dev/null @@ -1,475 +0,0 @@ -# regular expression test set -# Lines are at least three fields, separated by one or more tabs. "" stands -# for an empty field. First field is an RE. Second field is flags. If -# C flag given, regcomp() is expected to fail, and the third field is the -# error name (minus the leading REG_). -# -# Otherwise it is expected to succeed, and the third field is the string to -# try matching it against. If there is no fourth field, the match is -# expected to fail. If there is a fourth field, it is the substring that -# the RE is expected to match. If there is a fifth field, it is a comma- -# separated list of what the subexpressions should match, with - indicating -# no match for that one. In both the fourth and fifth fields, a (sub)field -# starting with @ indicates that the (sub)expression is expected to match -# a null string followed by the stuff after the @; this provides a way to -# test where null strings match. The character `N' in REs and strings -# is newline, `S' is space, `T' is tab, `Z' is NUL. -# -# The full list of flags: -# - placeholder, does nothing -# b RE is a BRE, not an ERE -# & try it as both an ERE and a BRE -# C regcomp() error expected, third field is error name -# i REG_ICASE -# m ("mundane") REG_NOSPEC -# s REG_NOSUB (not really testable) -# n REG_NEWLINE -# ^ REG_NOTBOL -# $ REG_NOTEOL -# # REG_STARTEND (see below) -# p REG_PEND -# -# For REG_STARTEND, the start/end offsets are those of the substring -# enclosed in (). - -# basics -a & a a -abc & abc abc -abc|de - abc abc -a|b|c - abc a - -# parentheses and perversions thereof -a(b)c - abc abc -a\(b\)c b abc abc -a( C EPAREN -a( b a( a( -a\( - a( a( -a\( bC EPAREN -a\(b bC EPAREN -a(b C EPAREN -a(b b a(b a(b -# gag me with a right parenthesis -- 1003.2 goofed here (my fault, partly) -a) - a) a) -) - ) ) -# end gagging (in a just world, those *should* give EPAREN) -a) b a) a) -a\) bC EPAREN -\) bC EPAREN -a()b - ab ab -a\(\)b b ab ab - -# anchoring and REG_NEWLINE -^abc$ & abc abc -a^b - a^b -a^b b a^b a^b -a$b - a$b -a$b b a$b a$b -^ & abc @abc -$ & abc @ -^$ & "" @ -$^ - "" @ -\($\)\(^\) b "" @ -# stop retching, those are legitimate (although disgusting) -^^ - "" @ -$$ - "" @ -b$ & abNc -b$ &n abNc b -^b$ & aNbNc -^b$ &n aNbNc b -^$ &n aNNb @Nb -^$ n abc -^$ n abcN @ -$^ n aNNb @Nb -\($\)\(^\) bn aNNb @Nb -^^ n^ aNNb @Nb -$$ n aNNb @NN -^a ^ a -a$ $ a -^a ^n aNb -^b ^n aNb b -a$ $n bNa -b$ $n bNa b -a*(^b$)c* - b b -a*\(^b$\)c* b b b - -# certain syntax errors and non-errors -| C EMPTY -| b | | -* C BADRPT -* b * * -+ C BADRPT -? C BADRPT -"" &C EMPTY -() - abc @abc -\(\) b abc @abc -a||b C EMPTY -|ab C EMPTY -ab| C EMPTY -(|a)b C EMPTY -(a|)b C EMPTY -(*a) C BADRPT -(+a) C BADRPT -(?a) C BADRPT -({1}a) C BADRPT -\(\{1\}a\) bC BADRPT -(a|*b) C BADRPT -(a|+b) C BADRPT -(a|?b) C BADRPT -(a|{1}b) C BADRPT -^* C BADRPT -^* b * * -^+ C BADRPT -^? C BADRPT -^{1} C BADRPT -^\{1\} bC BADRPT - -# metacharacters, backslashes -a.c & abc abc -a[bc]d & abd abd -a\*c & a*c a*c -a\\b & a\b a\b -a\\\*b & a\*b a\*b -a\bc & abc abc -a\ &C EESCAPE -a\\bc & a\bc a\bc -\{ bC BADRPT -a\[b & a[b a[b -a[b &C EBRACK -# trailing $ is a peculiar special case for the BRE code -a$ & a a -a$ & a$ -a\$ & a -a\$ & a$ a$ -a\\$ & a -a\\$ & a$ -a\\$ & a\$ -a\\$ & a\ a\ - -# back references, ugh -a\(b\)\2c bC ESUBREG -a\(b\1\)c bC ESUBREG -a\(b*\)c\1d b abbcbbd abbcbbd bb -a\(b*\)c\1d b abbcbd -a\(b*\)c\1d b abbcbbbd -^\(.\)\1 b abc -a\([bc]\)\1d b abcdabbd abbd b -a\(\([bc]\)\2\)*d b abbccd abbccd -a\(\([bc]\)\2\)*d b abbcbd -# actually, this next one probably ought to fail, but the spec is unclear -a\(\(b\)*\2\)*d b abbbd abbbd -# here is a case that no NFA implementation does right -\(ab*\)[ab]*\1 b ababaaa ababaaa a -# check out normal matching in the presence of back refs -\(a\)\1bcd b aabcd aabcd -\(a\)\1bc*d b aabcd aabcd -\(a\)\1bc*d b aabd aabd -\(a\)\1bc*d b aabcccd aabcccd -\(a\)\1bc*[ce]d b aabcccd aabcccd -^\(a\)\1b\(c\)*cd$ b aabcccd aabcccd - -# ordinary repetitions -ab*c & abc abc -ab+c - abc abc -ab?c - abc abc -a\(*\)b b a*b a*b -a\(**\)b b ab ab -a\(***\)b bC BADRPT -*a b *a *a -**a b a a -***a bC BADRPT - -# the dreaded bounded repetitions -{ & { { -{abc & {abc {abc -{1 C BADRPT -{1} C BADRPT -a{b & a{b a{b -a{1}b - ab ab -a\{1\}b b ab ab -a{1,}b - ab ab -a\{1,\}b b ab ab -a{1,2}b - aab aab -a\{1,2\}b b aab aab -a{1 C EBRACE -a\{1 bC EBRACE -a{1a C EBRACE -a\{1a bC EBRACE -a{1a} C BADBR -a\{1a\} bC BADBR -a{,2} - a{,2} a{,2} -a\{,2\} bC BADBR -a{,} - a{,} a{,} -a\{,\} bC BADBR -a{1,x} C BADBR -a\{1,x\} bC BADBR -a{1,x C EBRACE -a\{1,x bC EBRACE -a{300} C BADBR -a\{300\} bC BADBR -a{1,0} C BADBR -a\{1,0\} bC BADBR -ab{0,0}c - abcac ac -ab\{0,0\}c b abcac ac -ab{0,1}c - abcac abc -ab\{0,1\}c b abcac abc -ab{0,3}c - abbcac abbc -ab\{0,3\}c b abbcac abbc -ab{1,1}c - acabc abc -ab\{1,1\}c b acabc abc -ab{1,3}c - acabc abc -ab\{1,3\}c b acabc abc -ab{2,2}c - abcabbc abbc -ab\{2,2\}c b abcabbc abbc -ab{2,4}c - abcabbc abbc -ab\{2,4\}c b abcabbc abbc -((a{1,10}){1,10}){1,10} - a a a,a - -# multiple repetitions -a** &C BADRPT -a++ C BADRPT -a?? C BADRPT -a*+ C BADRPT -a*? C BADRPT -a+* C BADRPT -a+? C BADRPT -a?* C BADRPT -a?+ C BADRPT -a{1}{1} C BADRPT -a*{1} C BADRPT -a+{1} C BADRPT -a?{1} C BADRPT -a{1}* C BADRPT -a{1}+ C BADRPT -a{1}? C BADRPT -a*{b} - a{b} a{b} -a\{1\}\{1\} bC BADRPT -a*\{1\} bC BADRPT -a\{1\}* bC BADRPT - -# brackets, and numerous perversions thereof -a[b]c & abc abc -a[ab]c & abc abc -a[^ab]c & adc adc -a[]b]c & a]c a]c -a[[b]c & a[c a[c -a[-b]c & a-c a-c -a[^]b]c & adc adc -a[^-b]c & adc adc -a[b-]c & a-c a-c -a[b &C EBRACK -a[] &C EBRACK -a[1-3]c & a2c a2c -a[3-1]c &C ERANGE -a[1-3-5]c &C ERANGE -a[[.-.]--]c & a-c a-c -a[1- &C ERANGE -a[[. &C EBRACK -a[[.x &C EBRACK -a[[.x. &C EBRACK -a[[.x.] &C EBRACK -a[[.x.]] & ax ax -a[[.x,.]] &C ECOLLATE -a[[.one.]]b & a1b a1b -a[[.notdef.]]b &C ECOLLATE -a[[.].]]b & a]b a]b -a[[:alpha:]]c & abc abc -a[[:notdef:]]c &C ECTYPE -a[[: &C EBRACK -a[[:alpha &C EBRACK -a[[:alpha:] &C EBRACK -a[[:alpha,:] &C ECTYPE -a[[:]:]]b &C ECTYPE -a[[:-:]]b &C ECTYPE -a[[:alph:]] &C ECTYPE -a[[:alphabet:]] &C ECTYPE -[[:alnum:]]+ - -%@a0X- a0X -[[:alpha:]]+ - -%@aX0- aX -[[:blank:]]+ - aSSTb SST -[[:cntrl:]]+ - aNTb NT -[[:digit:]]+ - a019b 019 -[[:graph:]]+ - Sa%bS a%b -[[:lower:]]+ - AabC ab -[[:print:]]+ - NaSbN aSb -[[:punct:]]+ - S%-&T %-& -[[:space:]]+ - aSNTb SNT -[[:upper:]]+ - aBCd BC -[[:xdigit:]]+ - p0f3Cq 0f3C -a[[=b=]]c & abc abc -a[[= &C EBRACK -a[[=b &C EBRACK -a[[=b= &C EBRACK -a[[=b=] &C EBRACK -a[[=b,=]] &C ECOLLATE -a[[=one=]]b & a1b a1b - -# complexities -a(((b)))c - abc abc -a(b|(c))d - abd abd -a(b*|c)d - abbd abbd -# just gotta have one DFA-buster, of course -a[ab]{20} - aaaaabaaaabaaaabaaaab aaaaabaaaabaaaabaaaab -# and an inline expansion in case somebody gets tricky -a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab] - aaaaabaaaabaaaabaaaab aaaaabaaaabaaaabaaaab -# and in case somebody just slips in an NFA... -a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab](wee|week)(knights|night) - aaaaabaaaabaaaabaaaabweeknights aaaaabaaaabaaaabaaaabweeknights -# fish for anomalies as the number of states passes 32 -12345678901234567890123456789 - a12345678901234567890123456789b 12345678901234567890123456789 -123456789012345678901234567890 - a123456789012345678901234567890b 123456789012345678901234567890 -1234567890123456789012345678901 - a1234567890123456789012345678901b 1234567890123456789012345678901 -12345678901234567890123456789012 - a12345678901234567890123456789012b 12345678901234567890123456789012 -123456789012345678901234567890123 - a123456789012345678901234567890123b 123456789012345678901234567890123 -# and one really big one, beyond any plausible word width -1234567890123456789012345678901234567890123456789012345678901234567890 - a1234567890123456789012345678901234567890123456789012345678901234567890b 1234567890123456789012345678901234567890123456789012345678901234567890 -# fish for problems as brackets go past 8 -[ab][cd][ef][gh][ij][kl][mn] - xacegikmoq acegikm -[ab][cd][ef][gh][ij][kl][mn][op] - xacegikmoq acegikmo -[ab][cd][ef][gh][ij][kl][mn][op][qr] - xacegikmoqy acegikmoq -[ab][cd][ef][gh][ij][kl][mn][op][q] - xacegikmoqy acegikmoq - -# subtleties of matching -abc & xabcy abc -a\(b\)?c\1d b acd -aBc i Abc Abc -a[Bc]*d i abBCcd abBCcd -0[[:upper:]]1 &i 0a1 0a1 -0[[:lower:]]1 &i 0A1 0A1 -a[^b]c &i abc -a[^b]c &i aBc -a[^b]c &i adc adc -[a]b[c] - abc abc -[a]b[a] - aba aba -[abc]b[abc] - abc abc -[abc]b[abd] - abd abd -a(b?c)+d - accd accd -(wee|week)(knights|night) - weeknights weeknights -(we|wee|week|frob)(knights|night|day) - weeknights weeknights -a[bc]d - xyzaaabcaababdacd abd -a[ab]c - aaabc abc -abc s abc abc -a* & b @b - -# Let's have some fun -- try to match a C comment. -# first the obvious, which looks okay at first glance... -/\*.*\*/ - /*x*/ /*x*/ -# but... -/\*.*\*/ - /*x*/y/*z*/ /*x*/y/*z*/ -# okay, we must not match */ inside; try to do that... -/\*([^*]|\*[^/])*\*/ - /*x*/ /*x*/ -/\*([^*]|\*[^/])*\*/ - /*x*/y/*z*/ /*x*/ -# but... -/\*([^*]|\*[^/])*\*/ - /*x**/y/*z*/ /*x**/y/*z*/ -# and a still fancier version, which does it right (I think)... -/\*([^*]|\*+[^*/])*\*+/ - /*x*/ /*x*/ -/\*([^*]|\*+[^*/])*\*+/ - /*x*/y/*z*/ /*x*/ -/\*([^*]|\*+[^*/])*\*+/ - /*x**/y/*z*/ /*x**/ -/\*([^*]|\*+[^*/])*\*+/ - /*x****/y/*z*/ /*x****/ -/\*([^*]|\*+[^*/])*\*+/ - /*x**x*/y/*z*/ /*x**x*/ -/\*([^*]|\*+[^*/])*\*+/ - /*x***x/y/*z*/ /*x***x/y/*z*/ - -# subexpressions -a(b)(c)d - abcd abcd b,c -a(((b)))c - abc abc b,b,b -a(b|(c))d - abd abd b,- -a(b*|c|e)d - abbd abbd bb -a(b*|c|e)d - acd acd c -a(b*|c|e)d - ad ad @d -a(b?)c - abc abc b -a(b?)c - ac ac @c -a(b+)c - abc abc b -a(b+)c - abbbc abbbc bbb -a(b*)c - ac ac @c -(a|ab)(bc([de]+)f|cde) - abcdef abcdef a,bcdef,de -# the regression tester only asks for 9 subexpressions -a(b)(c)(d)(e)(f)(g)(h)(i)(j)k - abcdefghijk abcdefghijk b,c,d,e,f,g,h,i,j -a(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)l - abcdefghijkl abcdefghijkl b,c,d,e,f,g,h,i,j,k -a([bc]?)c - abc abc b -a([bc]?)c - ac ac @c -a([bc]+)c - abc abc b -a([bc]+)c - abcc abcc bc -a([bc]+)bc - abcbc abcbc bc -a(bb+|b)b - abb abb b -a(bbb+|bb+|b)b - abb abb b -a(bbb+|bb+|b)b - abbb abbb bb -a(bbb+|bb+|b)bb - abbb abbb b -(.*).* - abcdef abcdef abcdef -(a*)* - bc @b @b - -# do we get the right subexpression when it is used more than once? -a(b|c)*d - ad ad - -a(b|c)*d - abcd abcd c -a(b|c)+d - abd abd b -a(b|c)+d - abcd abcd c -a(b|c?)+d - ad ad @d -a(b|c?)+d - abcd abcd @d -a(b|c){0,0}d - ad ad - -a(b|c){0,1}d - ad ad - -a(b|c){0,1}d - abd abd b -a(b|c){0,2}d - ad ad - -a(b|c){0,2}d - abcd abcd c -a(b|c){0,}d - ad ad - -a(b|c){0,}d - abcd abcd c -a(b|c){1,1}d - abd abd b -a(b|c){1,1}d - acd acd c -a(b|c){1,2}d - abd abd b -a(b|c){1,2}d - abcd abcd c -a(b|c){1,}d - abd abd b -a(b|c){1,}d - abcd abcd c -a(b|c){2,2}d - acbd acbd b -a(b|c){2,2}d - abcd abcd c -a(b|c){2,4}d - abcd abcd c -a(b|c){2,4}d - abcbd abcbd b -a(b|c){2,4}d - abcbcd abcbcd c -a(b|c){2,}d - abcd abcd c -a(b|c){2,}d - abcbd abcbd b -a(b+|((c)*))+d - abd abd @d,@d,- -a(b+|((c)*))+d - abcd abcd @d,@d,- - -# check out the STARTEND option -[abc] &# a(b)c b -[abc] &# a(d)c -[abc] &# a(bc)d b -[abc] &# a(dc)d c -. &# a()c -b.*c &# b(bc)c bc -b.* &# b(bc)c bc -.*c &# b(bc)c bc - -# plain strings, with the NOSPEC flag -abc m abc abc -abc m xabcy abc -abc m xyz -a*b m aba*b a*b -a*b m ab -"" mC EMPTY - -# cases involving NULs -aZb & a a -aZb &p a -aZb &p# (aZb) aZb -aZ*b &p# (ab) ab -a.b &# (aZb) aZb -a.* &# (aZb)c aZb - -# word boundaries (ick) -[[:<:]]a & a a -[[:<:]]a & ba -[[:<:]]a & -a a -a[[:>:]] & a a -a[[:>:]] & ab -a[[:>:]] & a- a -[[:<:]]a.c[[:>:]] & axcd-dayc-dazce-abc abc -[[:<:]]a.c[[:>:]] & axcd-dayc-dazce-abc-q abc -[[:<:]]a.c[[:>:]] & axc-dayc-dazce-abc axc -[[:<:]]b.c[[:>:]] & a_bxc-byc_d-bzc-q bzc -[[:<:]].x..[[:>:]] & y_xa_-_xb_y-_xc_-axdc _xc_ -[[:<:]]a_b[[:>:]] & x_a_b - -# past problems, and suspected problems -(A[1])|(A[2])|(A[3])|(A[4])|(A[5])|(A[6])|(A[7])|(A[8])|(A[9])|(A[A]) - A1 A1 -abcdefghijklmnop i abcdefghijklmnop abcdefghijklmnop -abcdefghijklmnopqrstuv i abcdefghijklmnopqrstuv abcdefghijklmnopqrstuv -(ALAK)|(ALT[AB])|(CC[123]1)|(CM[123]1)|(GAMC)|(LC[23][EO ])|(SEM[1234])|(SL[ES][12])|(SLWW)|(SLF )|(SLDT)|(VWH[12])|(WH[34][EW])|(WP1[ESN]) - CC11 CC11 -CC[13]1|a{21}[23][EO][123][Es][12]a{15}aa[34][EW]aaaaaaa[X]a - CC11 CC11 -Char \([a-z0-9_]*\)\[.* b Char xyz[k Char xyz[k xyz -a?b - ab ab --\{0,1\}[0-9]*$ b -5 -5 diff --git a/ext/ereg/regex/utils.h b/ext/ereg/regex/utils.h deleted file mode 100644 index cd4a96025f24a..0000000000000 --- a/ext/ereg/regex/utils.h +++ /dev/null @@ -1,25 +0,0 @@ -/* utility definitions */ - -#include "regex_extra.h" - -#ifdef _POSIX2_RE_DUP_MAX -#define DUPMAX _POSIX2_RE_DUP_MAX -#else -#define DUPMAX 255 -#endif -#define INFINITY (DUPMAX + 1) -#define NC (CHAR_MAX - CHAR_MIN + 1) -typedef unsigned char uch; - -/* switch off assertions (if not already off) if no REDEBUG */ -#ifndef REDEBUG -#ifndef NDEBUG -#define NDEBUG /* no assertions please */ -#endif -#endif -#include - -/* for old systems with bcopy() but no memmove() */ -#ifdef USEBCOPY -#define memmove(d, s, c) bcopy(s, d, c) -#endif diff --git a/ext/ereg/tests/001.phpt b/ext/ereg/tests/001.phpt deleted file mode 100644 index 13c50d0d1e458..0000000000000 --- a/ext/ereg/tests/001.phpt +++ /dev/null @@ -1,7 +0,0 @@ ---TEST-- -RegReplace test 1 ---FILE-- - ---EXPECT-- -abcdef diff --git a/ext/ereg/tests/002.phpt b/ext/ereg/tests/002.phpt deleted file mode 100644 index abe9e063d8b76..0000000000000 --- a/ext/ereg/tests/002.phpt +++ /dev/null @@ -1,7 +0,0 @@ ---TEST-- -RegReplace test 2 ---FILE-- - ---EXPECT-- -abc diff --git a/ext/ereg/tests/003.phpt b/ext/ereg/tests/003.phpt deleted file mode 100644 index 4257f0d27e78d..0000000000000 --- a/ext/ereg/tests/003.phpt +++ /dev/null @@ -1,8 +0,0 @@ ---TEST-- -ereg_replace single-quote test ---FILE-- - ---EXPECT-- -'test diff --git a/ext/ereg/tests/004.phpt b/ext/ereg/tests/004.phpt deleted file mode 100644 index 3e535c6a9de40..0000000000000 --- a/ext/ereg/tests/004.phpt +++ /dev/null @@ -1,14 +0,0 @@ ---TEST-- -simple ereg test ---FILE-- - ---EXPECT-- -ok -ok diff --git a/ext/ereg/tests/005.phpt b/ext/ereg/tests/005.phpt deleted file mode 100644 index ee9ccc6da4afc..0000000000000 --- a/ext/ereg/tests/005.phpt +++ /dev/null @@ -1,18 +0,0 @@ ---TEST-- -Test Regular expression register support in ereg ---FILE-- - ---EXPECT-- -32 -This is a nice and simple string -is -is diff --git a/ext/ereg/tests/006.phpt b/ext/ereg/tests/006.phpt deleted file mode 100644 index cae349672ed76..0000000000000 --- a/ext/ereg/tests/006.phpt +++ /dev/null @@ -1,8 +0,0 @@ ---TEST-- -Test ereg_replace of start-of-line ---FILE-- - ---EXPECT-- -That is a nice and simple string diff --git a/ext/ereg/tests/007.phpt b/ext/ereg/tests/007.phpt deleted file mode 100644 index beb3cdc159176..0000000000000 --- a/ext/ereg/tests/007.phpt +++ /dev/null @@ -1,10 +0,0 @@ ---TEST-- -Test empty result buffer in reg_replace ---FILE-- - ---EXPECT-- -strlen($b)=0 diff --git a/ext/ereg/tests/008.phpt b/ext/ereg/tests/008.phpt deleted file mode 100644 index 9a0cedabc5338..0000000000000 --- a/ext/ereg/tests/008.phpt +++ /dev/null @@ -1,8 +0,0 @@ ---TEST-- -Test back-references in regular expressions ---FILE-- - ---EXPECT-- -123 abc +-|= diff --git a/ext/ereg/tests/009.phpt b/ext/ereg/tests/009.phpt deleted file mode 100644 index 528606f3c897d..0000000000000 --- a/ext/ereg/tests/009.phpt +++ /dev/null @@ -1,17 +0,0 @@ ---TEST-- -Test split() ---FILE-- - ---EXPECT-- -4 -this -is -a -test diff --git a/ext/ereg/tests/010.phpt b/ext/ereg/tests/010.phpt deleted file mode 100644 index f6f8909f73d7b..0000000000000 --- a/ext/ereg/tests/010.phpt +++ /dev/null @@ -1,7 +0,0 @@ ---TEST-- -Long back references ---FILE-- - ---EXPECT-- -abc2222222222def2222222222 diff --git a/ext/ereg/tests/011.phpt b/ext/ereg/tests/011.phpt deleted file mode 100644 index 65554b302fc6a..0000000000000 --- a/ext/ereg/tests/011.phpt +++ /dev/null @@ -1,7 +0,0 @@ ---TEST-- -\0 back reference ---FILE-- - ---EXPECT-- -abcdef123ghi diff --git a/ext/ereg/tests/012.phpt b/ext/ereg/tests/012.phpt deleted file mode 100644 index 88ad5992addf9..0000000000000 --- a/ext/ereg/tests/012.phpt +++ /dev/null @@ -1,7 +0,0 @@ ---TEST-- -nonexisting back reference ---FILE-- - ---EXPECT-- -abcdef\1ghi diff --git a/ext/ereg/tests/013.phpt b/ext/ereg/tests/013.phpt deleted file mode 100644 index a2d9ee009910e..0000000000000 --- a/ext/ereg/tests/013.phpt +++ /dev/null @@ -1,7 +0,0 @@ ---TEST-- -escapes in replace string ---FILE-- - ---EXPECT-- -abcdef\g\\hi\ diff --git a/ext/ereg/tests/014.phpt b/ext/ereg/tests/014.phpt deleted file mode 100644 index d2a32451a9d94..0000000000000 --- a/ext/ereg/tests/014.phpt +++ /dev/null @@ -1,7 +0,0 @@ ---TEST-- -backreferences not replaced recursively ---FILE-- - ---EXPECT-- -\2 diff --git a/ext/ereg/tests/015.phpt b/ext/ereg/tests/015.phpt deleted file mode 100644 index c255ddf05bb9f..0000000000000 --- a/ext/ereg/tests/015.phpt +++ /dev/null @@ -1,6 +0,0 @@ ---TEST-- -replace empty matches ---FILE-- - ---EXPECT-- -zabc123 diff --git a/ext/ereg/tests/016.phpt b/ext/ereg/tests/016.phpt deleted file mode 100644 index c354ab26fc5f2..0000000000000 --- a/ext/ereg/tests/016.phpt +++ /dev/null @@ -1,6 +0,0 @@ ---TEST-- -test backslash handling in regular expressions ---FILE-- - ---EXPECT-- -abc123abc diff --git a/ext/exif/CREDITS b/ext/exif/CREDITS deleted file mode 100644 index 94de97e5b09f1..0000000000000 --- a/ext/exif/CREDITS +++ /dev/null @@ -1,2 +0,0 @@ -EXIF -Rasmus Lerdorf, Marcus Boerger diff --git a/ext/exif/config.m4 b/ext/exif/config.m4 deleted file mode 100644 index a3ba9240df595..0000000000000 --- a/ext/exif/config.m4 +++ /dev/null @@ -1,11 +0,0 @@ -dnl -dnl $Id$ -dnl - -PHP_ARG_ENABLE(exif, whether to enable EXIF (metadata from images) support, -[ --enable-exif Enable EXIF (metadata from images) support]) - -if test "$PHP_EXIF" != "no"; then - AC_DEFINE(HAVE_EXIF, 1, [Whether you want EXIF (metadata from images) support]) - PHP_NEW_EXTENSION(exif, exif.c, $ext_shared) -fi diff --git a/ext/exif/config.w32 b/ext/exif/config.w32 deleted file mode 100644 index 3ac0108f2d006..0000000000000 --- a/ext/exif/config.w32 +++ /dev/null @@ -1,10 +0,0 @@ -// $Id$ -// vim:ft=javascript - -ARG_ENABLE("exif", "exif", "no"); - -if (PHP_EXIF == "yes") { - EXTENSION("exif", "exif.c"); - AC_DEFINE('HAVE_EXIF', 1, 'Have exif'); - ADD_EXTENSION_DEP('exif', 'mbstring'); -} diff --git a/ext/exif/example.php b/ext/exif/example.php deleted file mode 100644 index e34dc05f6d4cc..0000000000000 --- a/ext/exif/example.php +++ /dev/null @@ -1,23 +0,0 @@ - - - -exif_read_data example - - -\n" : "Image contains headers
"; -$exif = exif_read_data ('tests/test2.jpg',0,true); -foreach($exif as $key=>$section) { - foreach($section as $name=>$val) { - echo "$key.$name: $val
\n"; - } -} -?> - - \ No newline at end of file diff --git a/ext/exif/exif.c b/ext/exif/exif.c deleted file mode 100644 index 73fd0849ae661..0000000000000 --- a/ext/exif/exif.c +++ /dev/null @@ -1,4170 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Rasmus Lerdorf | - | Marcus Boerger | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -/* ToDos - * - * See if example images from http://www.exif.org have illegal - * thumbnail sizes or if code is corrupt. - * Create/Update exif headers. - * Create/Remove/Update image thumbnails. - */ - -/* Security - * - * At current time i do not see any security problems but a potential - * attacker could generate an image with recursive ifd pointers...(Marcus) - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "ext/standard/file.h" - -#if HAVE_EXIF - -/* When EXIF_DEBUG is defined the module generates a lot of debug messages - * that help understanding what is going on. This can and should be used - * while extending the module as it shows if you are at the right position. - * You are always considered to have a copy of TIFF6.0 and EXIF2.10 standard. - */ -#undef EXIF_DEBUG - -#ifdef EXIF_DEBUG -#define EXIFERR_DC , const char *_file, size_t _line TSRMLS_DC -#define EXIFERR_CC , __FILE__, __LINE__ TSRMLS_CC -#else -#define EXIFERR_DC TSRMLS_DC -#define EXIFERR_CC TSRMLS_CC -#endif - -#undef EXIF_JPEG2000 - -#include "php_exif.h" -#include -#include "php_ini.h" -#include "ext/standard/php_string.h" -#include "ext/standard/php_image.h" -#include "ext/standard/info.h" - -#if defined(PHP_WIN32) || (HAVE_MBSTRING && !defined(COMPILE_DL_MBSTRING)) -#define EXIF_USE_MBSTRING 1 -#else -#define EXIF_USE_MBSTRING 0 -#endif - -#if EXIF_USE_MBSTRING -#include "ext/mbstring/mbstring.h" -#endif - -/* needed for ssize_t definition */ -#include - -typedef unsigned char uchar; - -#ifndef safe_emalloc -# define safe_emalloc(a,b,c) emalloc((a)*(b)+(c)) -#endif -#ifndef safe_erealloc -# define safe_erealloc(p,a,b,c) erealloc(p, (a)*(b)+(c)) -#endif - -#ifndef TRUE -# define TRUE 1 -# define FALSE 0 -#endif - -#ifndef max -# define max(a,b) ((a)>(b) ? (a) : (b)) -#endif - -#define EFREE_IF(ptr) if (ptr) efree(ptr) - -#define MAX_IFD_NESTING_LEVEL 100 - -/* {{{ arginfo */ -static -ZEND_BEGIN_ARG_INFO(arginfo_exif_tagname, 0) - ZEND_ARG_INFO(0, index) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_exif_read_data, 0, 0, 1) - ZEND_ARG_INFO(0, filename) - ZEND_ARG_INFO(0, sections_needed) - ZEND_ARG_INFO(0, sub_arrays) - ZEND_ARG_INFO(0, read_thumbnail) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_exif_thumbnail, 0, 0, 1) - ZEND_ARG_INFO(0, filename) - ZEND_ARG_INFO(1, width) - ZEND_ARG_INFO(1, height) - ZEND_ARG_INFO(1, imagetype) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_exif_imagetype, 0) - ZEND_ARG_INFO(0, imagefile) -ZEND_END_ARG_INFO() - -/* }}} */ - -/* {{{ exif_functions[] - */ -zend_function_entry exif_functions[] = { - PHP_FE(exif_read_data, arginfo_exif_read_data) - PHP_FALIAS(read_exif_data, exif_read_data, arginfo_exif_read_data) - PHP_FE(exif_tagname, arginfo_exif_tagname) - PHP_FE(exif_thumbnail, arginfo_exif_thumbnail) - PHP_FE(exif_imagetype, arginfo_exif_imagetype) - {NULL, NULL, NULL} -}; -/* }}} */ - -#define EXIF_VERSION "1.4 $Id$" - -/* {{{ PHP_MINFO_FUNCTION - */ -PHP_MINFO_FUNCTION(exif) -{ - php_info_print_table_start(); - php_info_print_table_row(2, "EXIF Support", "enabled"); - php_info_print_table_row(2, "EXIF Version", EXIF_VERSION); - php_info_print_table_row(2, "Supported EXIF Version", "0220"); - php_info_print_table_row(2, "Supported filetypes", "JPEG,TIFF"); - php_info_print_table_end(); -} -/* }}} */ - -ZEND_BEGIN_MODULE_GLOBALS(exif) - char * encode_unicode; - char * decode_unicode_be; - char * decode_unicode_le; - char * encode_jis; - char * decode_jis_be; - char * decode_jis_le; -ZEND_END_MODULE_GLOBALS(exif) - -ZEND_DECLARE_MODULE_GLOBALS(exif) - -#ifdef ZTS -#define EXIF_G(v) TSRMG(exif_globals_id, zend_exif_globals *, v) -#else -#define EXIF_G(v) (exif_globals.v) -#endif - -/* {{{ PHP_INI - */ - -ZEND_INI_MH(OnUpdateEncode) -{ -#if EXIF_USE_MBSTRING - if (new_value && strlen(new_value) && !php_mb_check_encoding_list(new_value TSRMLS_CC)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal encoding ignored: '%s'", new_value); - return FAILURE; - } -#endif - return OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); -} - -ZEND_INI_MH(OnUpdateDecode) -{ -#if EXIF_USE_MBSTRING - if (!php_mb_check_encoding_list(new_value TSRMLS_CC)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal encoding ignored: '%s'", new_value); - return FAILURE; - } -#endif - return OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); -} - -PHP_INI_BEGIN() - STD_PHP_INI_ENTRY("exif.encode_unicode", "ISO-8859-15", PHP_INI_ALL, OnUpdateEncode, encode_unicode, zend_exif_globals, exif_globals) - STD_PHP_INI_ENTRY("exif.decode_unicode_motorola", "UCS-2BE", PHP_INI_ALL, OnUpdateDecode, decode_unicode_be, zend_exif_globals, exif_globals) - STD_PHP_INI_ENTRY("exif.decode_unicode_intel", "UCS-2LE", PHP_INI_ALL, OnUpdateDecode, decode_unicode_le, zend_exif_globals, exif_globals) - STD_PHP_INI_ENTRY("exif.encode_jis", "", PHP_INI_ALL, OnUpdateEncode, encode_jis, zend_exif_globals, exif_globals) - STD_PHP_INI_ENTRY("exif.decode_jis_motorola", "JIS", PHP_INI_ALL, OnUpdateDecode, decode_jis_be, zend_exif_globals, exif_globals) - STD_PHP_INI_ENTRY("exif.decode_jis_intel", "JIS", PHP_INI_ALL, OnUpdateDecode, decode_jis_le, zend_exif_globals, exif_globals) -PHP_INI_END() -/* }}} */ - -/* {{{ PHP_GINIT_FUNCTION - */ -static PHP_GINIT_FUNCTION(exif) -{ - exif_globals->encode_unicode = NULL; - exif_globals->decode_unicode_be = NULL; - exif_globals->decode_unicode_le = NULL; - exif_globals->encode_jis = NULL; - exif_globals->decode_jis_be = NULL; - exif_globals->decode_jis_le = NULL; -} -/* }}} */ - -/* {{{ PHP_MINIT_FUNCTION(exif) - Get the size of an image as 4-element array */ -PHP_MINIT_FUNCTION(exif) -{ - REGISTER_INI_ENTRIES(); - REGISTER_LONG_CONSTANT("EXIF_USE_MBSTRING", EXIF_USE_MBSTRING, CONST_CS | CONST_PERSISTENT); - return SUCCESS; -} -/* }}} */ - -/* {{{ PHP_MSHUTDOWN_FUNCTION - */ -PHP_MSHUTDOWN_FUNCTION(exif) -{ - UNREGISTER_INI_ENTRIES(); - return SUCCESS; -} -/* }}} */ - -/* {{{ exif_module_entry - */ -zend_module_entry exif_module_entry = { -#if ZEND_MODULE_API_NO >= 20010901 - STANDARD_MODULE_HEADER, -#endif - "exif", - exif_functions, - PHP_MINIT(exif), - PHP_MSHUTDOWN(exif), - NULL, NULL, - PHP_MINFO(exif), -#if ZEND_MODULE_API_NO >= 20010901 - EXIF_VERSION, -#endif -#if ZEND_MODULE_API_NO >= 20060613 - PHP_MODULE_GLOBALS(exif), - PHP_GINIT(exif), - NULL, - NULL, - STANDARD_MODULE_PROPERTIES_EX -#else - STANDARD_MODULE_PROPERTIES -#endif -}; -/* }}} */ - -#ifdef COMPILE_DL_EXIF -ZEND_GET_MODULE(exif) -#endif - -/* {{{ php_strnlen - * get length of string if buffer if less than buffer size or buffer size */ -static size_t php_strnlen(char* str, size_t maxlen) { - size_t len = 0; - - if (str && maxlen && *str) { - do { - len++; - } while (--maxlen && *(++str)); - } - return len; -} -/* }}} */ - -/* {{{ error messages -*/ -static const char * EXIF_ERROR_FILEEOF = "Unexpected end of file reached"; -static const char * EXIF_ERROR_CORRUPT = "File structure corrupted"; -static const char * EXIF_ERROR_THUMBEOF = "Thumbnail goes IFD boundary or end of file reached"; -static const char * EXIF_ERROR_FSREALLOC = "Illegal reallocating of undefined file section"; - -#define EXIF_ERRLOG_FILEEOF(ImageInfo) exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "%s", EXIF_ERROR_FILEEOF); -#define EXIF_ERRLOG_CORRUPT(ImageInfo) exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "%s", EXIF_ERROR_CORRUPT); -#define EXIF_ERRLOG_THUMBEOF(ImageInfo) exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "%s", EXIF_ERROR_THUMBEOF); -#define EXIF_ERRLOG_FSREALLOC(ImageInfo) exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "%s", EXIF_ERROR_FSREALLOC); -/* }}} */ - -/* {{{ format description defines - Describes format descriptor -*/ -static int php_tiff_bytes_per_format[] = {0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8, 1}; -#define NUM_FORMATS 13 - -#define TAG_FMT_BYTE 1 -#define TAG_FMT_STRING 2 -#define TAG_FMT_USHORT 3 -#define TAG_FMT_ULONG 4 -#define TAG_FMT_URATIONAL 5 -#define TAG_FMT_SBYTE 6 -#define TAG_FMT_UNDEFINED 7 -#define TAG_FMT_SSHORT 8 -#define TAG_FMT_SLONG 9 -#define TAG_FMT_SRATIONAL 10 -#define TAG_FMT_SINGLE 11 -#define TAG_FMT_DOUBLE 12 -#define TAG_FMT_IFD 13 - -#ifdef EXIF_DEBUG -static char *exif_get_tagformat(int format) -{ - switch(format) { - case TAG_FMT_BYTE: return "BYTE"; - case TAG_FMT_STRING: return "STRING"; - case TAG_FMT_USHORT: return "USHORT"; - case TAG_FMT_ULONG: return "ULONG"; - case TAG_FMT_URATIONAL: return "URATIONAL"; - case TAG_FMT_SBYTE: return "SBYTE"; - case TAG_FMT_UNDEFINED: return "UNDEFINED"; - case TAG_FMT_SSHORT: return "SSHORT"; - case TAG_FMT_SLONG: return "SLONG"; - case TAG_FMT_SRATIONAL: return "SRATIONAL"; - case TAG_FMT_SINGLE: return "SINGLE"; - case TAG_FMT_DOUBLE: return "DOUBLE"; - case TAG_FMT_IFD: return "IFD"; - } - return "*Illegal"; -} -#endif - -/* Describes tag values */ -#define TAG_GPS_VERSION_ID 0x0000 -#define TAG_GPS_LATITUDE_REF 0x0001 -#define TAG_GPS_LATITUDE 0x0002 -#define TAG_GPS_LONGITUDE_REF 0x0003 -#define TAG_GPS_LONGITUDE 0x0004 -#define TAG_GPS_ALTITUDE_REF 0x0005 -#define TAG_GPS_ALTITUDE 0x0006 -#define TAG_GPS_TIME_STAMP 0x0007 -#define TAG_GPS_SATELLITES 0x0008 -#define TAG_GPS_STATUS 0x0009 -#define TAG_GPS_MEASURE_MODE 0x000A -#define TAG_GPS_DOP 0x000B -#define TAG_GPS_SPEED_REF 0x000C -#define TAG_GPS_SPEED 0x000D -#define TAG_GPS_TRACK_REF 0x000E -#define TAG_GPS_TRACK 0x000F -#define TAG_GPS_IMG_DIRECTION_REF 0x0010 -#define TAG_GPS_IMG_DIRECTION 0x0011 -#define TAG_GPS_MAP_DATUM 0x0012 -#define TAG_GPS_DEST_LATITUDE_REF 0x0013 -#define TAG_GPS_DEST_LATITUDE 0x0014 -#define TAG_GPS_DEST_LONGITUDE_REF 0x0015 -#define TAG_GPS_DEST_LONGITUDE 0x0016 -#define TAG_GPS_DEST_BEARING_REF 0x0017 -#define TAG_GPS_DEST_BEARING 0x0018 -#define TAG_GPS_DEST_DISTANCE_REF 0x0019 -#define TAG_GPS_DEST_DISTANCE 0x001A -#define TAG_GPS_PROCESSING_METHOD 0x001B -#define TAG_GPS_AREA_INFORMATION 0x001C -#define TAG_GPS_DATE_STAMP 0x001D -#define TAG_GPS_DIFFERENTIAL 0x001E -#define TAG_TIFF_COMMENT 0x00FE /* SHOUDLNT HAPPEN */ -#define TAG_NEW_SUBFILE 0x00FE /* New version of subfile tag */ -#define TAG_SUBFILE_TYPE 0x00FF /* Old version of subfile tag */ -#define TAG_IMAGEWIDTH 0x0100 -#define TAG_IMAGEHEIGHT 0x0101 -#define TAG_BITS_PER_SAMPLE 0x0102 -#define TAG_COMPRESSION 0x0103 -#define TAG_PHOTOMETRIC_INTERPRETATION 0x0106 -#define TAG_TRESHHOLDING 0x0107 -#define TAG_CELL_WIDTH 0x0108 -#define TAG_CELL_HEIGHT 0x0109 -#define TAG_FILL_ORDER 0x010A -#define TAG_DOCUMENT_NAME 0x010D -#define TAG_IMAGE_DESCRIPTION 0x010E -#define TAG_MAKE 0x010F -#define TAG_MODEL 0x0110 -#define TAG_STRIP_OFFSETS 0x0111 -#define TAG_ORIENTATION 0x0112 -#define TAG_SAMPLES_PER_PIXEL 0x0115 -#define TAG_ROWS_PER_STRIP 0x0116 -#define TAG_STRIP_BYTE_COUNTS 0x0117 -#define TAG_MIN_SAMPPLE_VALUE 0x0118 -#define TAG_MAX_SAMPLE_VALUE 0x0119 -#define TAG_X_RESOLUTION 0x011A -#define TAG_Y_RESOLUTION 0x011B -#define TAG_PLANAR_CONFIGURATION 0x011C -#define TAG_PAGE_NAME 0x011D -#define TAG_X_POSITION 0x011E -#define TAG_Y_POSITION 0x011F -#define TAG_FREE_OFFSETS 0x0120 -#define TAG_FREE_BYTE_COUNTS 0x0121 -#define TAG_GRAY_RESPONSE_UNIT 0x0122 -#define TAG_GRAY_RESPONSE_CURVE 0x0123 -#define TAG_RESOLUTION_UNIT 0x0128 -#define TAG_PAGE_NUMBER 0x0129 -#define TAG_TRANSFER_FUNCTION 0x012D -#define TAG_SOFTWARE 0x0131 -#define TAG_DATETIME 0x0132 -#define TAG_ARTIST 0x013B -#define TAG_HOST_COMPUTER 0x013C -#define TAG_PREDICTOR 0x013D -#define TAG_WHITE_POINT 0x013E -#define TAG_PRIMARY_CHROMATICITIES 0x013F -#define TAG_COLOR_MAP 0x0140 -#define TAG_HALFTONE_HINTS 0x0141 -#define TAG_TILE_WIDTH 0x0142 -#define TAG_TILE_LENGTH 0x0143 -#define TAG_TILE_OFFSETS 0x0144 -#define TAG_TILE_BYTE_COUNTS 0x0145 -#define TAG_SUB_IFD 0x014A -#define TAG_INK_SETMPUTER 0x014C -#define TAG_INK_NAMES 0x014D -#define TAG_NUMBER_OF_INKS 0x014E -#define TAG_DOT_RANGE 0x0150 -#define TAG_TARGET_PRINTER 0x0151 -#define TAG_EXTRA_SAMPLE 0x0152 -#define TAG_SAMPLE_FORMAT 0x0153 -#define TAG_S_MIN_SAMPLE_VALUE 0x0154 -#define TAG_S_MAX_SAMPLE_VALUE 0x0155 -#define TAG_TRANSFER_RANGE 0x0156 -#define TAG_JPEG_TABLES 0x015B -#define TAG_JPEG_PROC 0x0200 -#define TAG_JPEG_INTERCHANGE_FORMAT 0x0201 -#define TAG_JPEG_INTERCHANGE_FORMAT_LEN 0x0202 -#define TAG_JPEG_RESTART_INTERVAL 0x0203 -#define TAG_JPEG_LOSSLESS_PREDICTOR 0x0205 -#define TAG_JPEG_POINT_TRANSFORMS 0x0206 -#define TAG_JPEG_Q_TABLES 0x0207 -#define TAG_JPEG_DC_TABLES 0x0208 -#define TAG_JPEG_AC_TABLES 0x0209 -#define TAG_YCC_COEFFICIENTS 0x0211 -#define TAG_YCC_SUB_SAMPLING 0x0212 -#define TAG_YCC_POSITIONING 0x0213 -#define TAG_REFERENCE_BLACK_WHITE 0x0214 -/* 0x0301 - 0x0302 */ -/* 0x0320 */ -/* 0x0343 */ -/* 0x5001 - 0x501B */ -/* 0x5021 - 0x503B */ -/* 0x5090 - 0x5091 */ -/* 0x5100 - 0x5101 */ -/* 0x5110 - 0x5113 */ -/* 0x80E3 - 0x80E6 */ -/* 0x828d - 0x828F */ -#define TAG_COPYRIGHT 0x8298 -#define TAG_EXPOSURETIME 0x829A -#define TAG_FNUMBER 0x829D -#define TAG_EXIF_IFD_POINTER 0x8769 -#define TAG_ICC_PROFILE 0x8773 -#define TAG_EXPOSURE_PROGRAM 0x8822 -#define TAG_SPECTRAL_SENSITY 0x8824 -#define TAG_GPS_IFD_POINTER 0x8825 -#define TAG_ISOSPEED 0x8827 -#define TAG_OPTOELECTRIC_CONVERSION_F 0x8828 -/* 0x8829 - 0x882b */ -#define TAG_EXIFVERSION 0x9000 -#define TAG_DATE_TIME_ORIGINAL 0x9003 -#define TAG_DATE_TIME_DIGITIZED 0x9004 -#define TAG_COMPONENT_CONFIG 0x9101 -#define TAG_COMPRESSED_BITS_PER_PIXEL 0x9102 -#define TAG_SHUTTERSPEED 0x9201 -#define TAG_APERTURE 0x9202 -#define TAG_BRIGHTNESS_VALUE 0x9203 -#define TAG_EXPOSURE_BIAS_VALUE 0x9204 -#define TAG_MAX_APERTURE 0x9205 -#define TAG_SUBJECT_DISTANCE 0x9206 -#define TAG_METRIC_MODULE 0x9207 -#define TAG_LIGHT_SOURCE 0x9208 -#define TAG_FLASH 0x9209 -#define TAG_FOCAL_LENGTH 0x920A -/* 0x920B - 0x920D */ -/* 0x9211 - 0x9216 */ -#define TAG_SUBJECT_AREA 0x9214 -#define TAG_MAKER_NOTE 0x927C -#define TAG_USERCOMMENT 0x9286 -#define TAG_SUB_SEC_TIME 0x9290 -#define TAG_SUB_SEC_TIME_ORIGINAL 0x9291 -#define TAG_SUB_SEC_TIME_DIGITIZED 0x9292 -/* 0x923F */ -/* 0x935C */ -#define TAG_XP_TITLE 0x9C9B -#define TAG_XP_COMMENTS 0x9C9C -#define TAG_XP_AUTHOR 0x9C9D -#define TAG_XP_KEYWORDS 0x9C9E -#define TAG_XP_SUBJECT 0x9C9F -#define TAG_FLASH_PIX_VERSION 0xA000 -#define TAG_COLOR_SPACE 0xA001 -#define TAG_COMP_IMAGE_WIDTH 0xA002 /* compressed images only */ -#define TAG_COMP_IMAGE_HEIGHT 0xA003 -#define TAG_RELATED_SOUND_FILE 0xA004 -#define TAG_INTEROP_IFD_POINTER 0xA005 /* IFD pointer */ -#define TAG_FLASH_ENERGY 0xA20B -#define TAG_SPATIAL_FREQUENCY_RESPONSE 0xA20C -#define TAG_FOCALPLANE_X_RES 0xA20E -#define TAG_FOCALPLANE_Y_RES 0xA20F -#define TAG_FOCALPLANE_RESOLUTION_UNIT 0xA210 -#define TAG_SUBJECT_LOCATION 0xA214 -#define TAG_EXPOSURE_INDEX 0xA215 -#define TAG_SENSING_METHOD 0xA217 -#define TAG_FILE_SOURCE 0xA300 -#define TAG_SCENE_TYPE 0xA301 -#define TAG_CFA_PATTERN 0xA302 -#define TAG_CUSTOM_RENDERED 0xA401 -#define TAG_EXPOSURE_MODE 0xA402 -#define TAG_WHITE_BALANCE 0xA403 -#define TAG_DIGITAL_ZOOM_RATIO 0xA404 -#define TAG_FOCAL_LENGTH_IN_35_MM_FILM 0xA405 -#define TAG_SCENE_CAPTURE_TYPE 0xA406 -#define TAG_GAIN_CONTROL 0xA407 -#define TAG_CONTRAST 0xA408 -#define TAG_SATURATION 0xA409 -#define TAG_SHARPNESS 0xA40A -#define TAG_DEVICE_SETTING_DESCRIPTION 0xA40B -#define TAG_SUBJECT_DISTANCE_RANGE 0xA40C -#define TAG_IMAGE_UNIQUE_ID 0xA420 - -/* Olympus specific tags */ -#define TAG_OLYMPUS_SPECIALMODE 0x0200 -#define TAG_OLYMPUS_JPEGQUAL 0x0201 -#define TAG_OLYMPUS_MACRO 0x0202 -#define TAG_OLYMPUS_DIGIZOOM 0x0204 -#define TAG_OLYMPUS_SOFTWARERELEASE 0x0207 -#define TAG_OLYMPUS_PICTINFO 0x0208 -#define TAG_OLYMPUS_CAMERAID 0x0209 -/* end Olympus specific tags */ - -/* Internal */ -#define TAG_NONE -1 /* note that -1 <> 0xFFFF */ -#define TAG_COMPUTED_VALUE -2 -#define TAG_END_OF_LIST 0xFFFD - -/* Values for TAG_PHOTOMETRIC_INTERPRETATION */ -#define PMI_BLACK_IS_ZERO 0 -#define PMI_WHITE_IS_ZERO 1 -#define PMI_RGB 2 -#define PMI_PALETTE_COLOR 3 -#define PMI_TRANSPARENCY_MASK 4 -#define PMI_SEPARATED 5 -#define PMI_YCBCR 6 -#define PMI_CIELAB 8 - -/* }}} */ - -/* {{{ TabTable[] - */ -typedef const struct { - unsigned short Tag; - char *Desc; -} tag_info_type; - -typedef tag_info_type tag_info_array[]; -typedef tag_info_type *tag_table_type; - -#define TAG_TABLE_END \ - {TAG_NONE, "No tag value"},\ - {TAG_COMPUTED_VALUE, "Computed value"},\ - {TAG_END_OF_LIST, ""} /* Important for exif_get_tagname() IF value != "" function result is != false */ - -static tag_info_array tag_table_IFD = { - { 0x000B, "ACDComment"}, - { 0x00FE, "NewSubFile"}, /* better name it 'ImageType' ? */ - { 0x00FF, "SubFile"}, - { 0x0100, "ImageWidth"}, - { 0x0101, "ImageLength"}, - { 0x0102, "BitsPerSample"}, - { 0x0103, "Compression"}, - { 0x0106, "PhotometricInterpretation"}, - { 0x010A, "FillOrder"}, - { 0x010D, "DocumentName"}, - { 0x010E, "ImageDescription"}, - { 0x010F, "Make"}, - { 0x0110, "Model"}, - { 0x0111, "StripOffsets"}, - { 0x0112, "Orientation"}, - { 0x0115, "SamplesPerPixel"}, - { 0x0116, "RowsPerStrip"}, - { 0x0117, "StripByteCounts"}, - { 0x0118, "MinSampleValue"}, - { 0x0119, "MaxSampleValue"}, - { 0x011A, "XResolution"}, - { 0x011B, "YResolution"}, - { 0x011C, "PlanarConfiguration"}, - { 0x011D, "PageName"}, - { 0x011E, "XPosition"}, - { 0x011F, "YPosition"}, - { 0x0120, "FreeOffsets"}, - { 0x0121, "FreeByteCounts"}, - { 0x0122, "GrayResponseUnit"}, - { 0x0123, "GrayResponseCurve"}, - { 0x0124, "T4Options"}, - { 0x0125, "T6Options"}, - { 0x0128, "ResolutionUnit"}, - { 0x0129, "PageNumber"}, - { 0x012D, "TransferFunction"}, - { 0x0131, "Software"}, - { 0x0132, "DateTime"}, - { 0x013B, "Artist"}, - { 0x013C, "HostComputer"}, - { 0x013D, "Predictor"}, - { 0x013E, "WhitePoint"}, - { 0x013F, "PrimaryChromaticities"}, - { 0x0140, "ColorMap"}, - { 0x0141, "HalfToneHints"}, - { 0x0142, "TileWidth"}, - { 0x0143, "TileLength"}, - { 0x0144, "TileOffsets"}, - { 0x0145, "TileByteCounts"}, - { 0x014A, "SubIFD"}, - { 0x014C, "InkSet"}, - { 0x014D, "InkNames"}, - { 0x014E, "NumberOfInks"}, - { 0x0150, "DotRange"}, - { 0x0151, "TargetPrinter"}, - { 0x0152, "ExtraSample"}, - { 0x0153, "SampleFormat"}, - { 0x0154, "SMinSampleValue"}, - { 0x0155, "SMaxSampleValue"}, - { 0x0156, "TransferRange"}, - { 0x0157, "ClipPath"}, - { 0x0158, "XClipPathUnits"}, - { 0x0159, "YClipPathUnits"}, - { 0x015A, "Indexed"}, - { 0x015B, "JPEGTables"}, - { 0x015F, "OPIProxy"}, - { 0x0200, "JPEGProc"}, - { 0x0201, "JPEGInterchangeFormat"}, - { 0x0202, "JPEGInterchangeFormatLength"}, - { 0x0203, "JPEGRestartInterval"}, - { 0x0205, "JPEGLosslessPredictors"}, - { 0x0206, "JPEGPointTransforms"}, - { 0x0207, "JPEGQTables"}, - { 0x0208, "JPEGDCTables"}, - { 0x0209, "JPEGACTables"}, - { 0x0211, "YCbCrCoefficients"}, - { 0x0212, "YCbCrSubSampling"}, - { 0x0213, "YCbCrPositioning"}, - { 0x0214, "ReferenceBlackWhite"}, - { 0x02BC, "ExtensibleMetadataPlatform"}, /* XAP: Extensible Authoring Publishing, obsoleted by XMP: Extensible Metadata Platform */ - { 0x0301, "Gamma"}, - { 0x0302, "ICCProfileDescriptor"}, - { 0x0303, "SRGBRenderingIntent"}, - { 0x0320, "ImageTitle"}, - { 0x5001, "ResolutionXUnit"}, - { 0x5002, "ResolutionYUnit"}, - { 0x5003, "ResolutionXLengthUnit"}, - { 0x5004, "ResolutionYLengthUnit"}, - { 0x5005, "PrintFlags"}, - { 0x5006, "PrintFlagsVersion"}, - { 0x5007, "PrintFlagsCrop"}, - { 0x5008, "PrintFlagsBleedWidth"}, - { 0x5009, "PrintFlagsBleedWidthScale"}, - { 0x500A, "HalftoneLPI"}, - { 0x500B, "HalftoneLPIUnit"}, - { 0x500C, "HalftoneDegree"}, - { 0x500D, "HalftoneShape"}, - { 0x500E, "HalftoneMisc"}, - { 0x500F, "HalftoneScreen"}, - { 0x5010, "JPEGQuality"}, - { 0x5011, "GridSize"}, - { 0x5012, "ThumbnailFormat"}, - { 0x5013, "ThumbnailWidth"}, - { 0x5014, "ThumbnailHeight"}, - { 0x5015, "ThumbnailColorDepth"}, - { 0x5016, "ThumbnailPlanes"}, - { 0x5017, "ThumbnailRawBytes"}, - { 0x5018, "ThumbnailSize"}, - { 0x5019, "ThumbnailCompressedSize"}, - { 0x501A, "ColorTransferFunction"}, - { 0x501B, "ThumbnailData"}, - { 0x5020, "ThumbnailImageWidth"}, - { 0x5021, "ThumbnailImageHeight"}, - { 0x5022, "ThumbnailBitsPerSample"}, - { 0x5023, "ThumbnailCompression"}, - { 0x5024, "ThumbnailPhotometricInterp"}, - { 0x5025, "ThumbnailImageDescription"}, - { 0x5026, "ThumbnailEquipMake"}, - { 0x5027, "ThumbnailEquipModel"}, - { 0x5028, "ThumbnailStripOffsets"}, - { 0x5029, "ThumbnailOrientation"}, - { 0x502A, "ThumbnailSamplesPerPixel"}, - { 0x502B, "ThumbnailRowsPerStrip"}, - { 0x502C, "ThumbnailStripBytesCount"}, - { 0x502D, "ThumbnailResolutionX"}, - { 0x502E, "ThumbnailResolutionY"}, - { 0x502F, "ThumbnailPlanarConfig"}, - { 0x5030, "ThumbnailResolutionUnit"}, - { 0x5031, "ThumbnailTransferFunction"}, - { 0x5032, "ThumbnailSoftwareUsed"}, - { 0x5033, "ThumbnailDateTime"}, - { 0x5034, "ThumbnailArtist"}, - { 0x5035, "ThumbnailWhitePoint"}, - { 0x5036, "ThumbnailPrimaryChromaticities"}, - { 0x5037, "ThumbnailYCbCrCoefficients"}, - { 0x5038, "ThumbnailYCbCrSubsampling"}, - { 0x5039, "ThumbnailYCbCrPositioning"}, - { 0x503A, "ThumbnailRefBlackWhite"}, - { 0x503B, "ThumbnailCopyRight"}, - { 0x5090, "LuminanceTable"}, - { 0x5091, "ChrominanceTable"}, - { 0x5100, "FrameDelay"}, - { 0x5101, "LoopCount"}, - { 0x5110, "PixelUnit"}, - { 0x5111, "PixelPerUnitX"}, - { 0x5112, "PixelPerUnitY"}, - { 0x5113, "PaletteHistogram"}, - { 0x1000, "RelatedImageFileFormat"}, - { 0x800D, "ImageID"}, - { 0x80E3, "Matteing"}, /* obsoleted by ExtraSamples */ - { 0x80E4, "DataType"}, /* obsoleted by SampleFormat */ - { 0x80E5, "ImageDepth"}, - { 0x80E6, "TileDepth"}, - { 0x828D, "CFARepeatPatternDim"}, - { 0x828E, "CFAPattern"}, - { 0x828F, "BatteryLevel"}, - { 0x8298, "Copyright"}, - { 0x829A, "ExposureTime"}, - { 0x829D, "FNumber"}, - { 0x83BB, "IPTC/NAA"}, - { 0x84E3, "IT8RasterPadding"}, - { 0x84E5, "IT8ColorTable"}, - { 0x8649, "ImageResourceInformation"}, /* PhotoShop */ - { 0x8769, "Exif_IFD_Pointer"}, - { 0x8773, "ICC_Profile"}, - { 0x8822, "ExposureProgram"}, - { 0x8824, "SpectralSensity"}, - { 0x8828, "OECF"}, - { 0x8825, "GPS_IFD_Pointer"}, - { 0x8827, "ISOSpeedRatings"}, - { 0x8828, "OECF"}, - { 0x9000, "ExifVersion"}, - { 0x9003, "DateTimeOriginal"}, - { 0x9004, "DateTimeDigitized"}, - { 0x9101, "ComponentsConfiguration"}, - { 0x9102, "CompressedBitsPerPixel"}, - { 0x9201, "ShutterSpeedValue"}, - { 0x9202, "ApertureValue"}, - { 0x9203, "BrightnessValue"}, - { 0x9204, "ExposureBiasValue"}, - { 0x9205, "MaxApertureValue"}, - { 0x9206, "SubjectDistance"}, - { 0x9207, "MeteringMode"}, - { 0x9208, "LightSource"}, - { 0x9209, "Flash"}, - { 0x920A, "FocalLength"}, - { 0x920B, "FlashEnergy"}, /* 0xA20B in JPEG */ - { 0x920C, "SpatialFrequencyResponse"}, /* 0xA20C - - */ - { 0x920D, "Noise"}, - { 0x920E, "FocalPlaneXResolution"}, /* 0xA20E - - */ - { 0x920F, "FocalPlaneYResolution"}, /* 0xA20F - - */ - { 0x9210, "FocalPlaneResolutionUnit"}, /* 0xA210 - - */ - { 0x9211, "ImageNumber"}, - { 0x9212, "SecurityClassification"}, - { 0x9213, "ImageHistory"}, - { 0x9214, "SubjectLocation"}, /* 0xA214 - - */ - { 0x9215, "ExposureIndex"}, /* 0xA215 - - */ - { 0x9216, "TIFF/EPStandardID"}, - { 0x9217, "SensingMethod"}, /* 0xA217 - - */ - { 0x923F, "StoNits"}, - { 0x927C, "MakerNote"}, - { 0x9286, "UserComment"}, - { 0x9290, "SubSecTime"}, - { 0x9291, "SubSecTimeOriginal"}, - { 0x9292, "SubSecTimeDigitized"}, - { 0x935C, "ImageSourceData"}, /* "Adobe Photoshop Document Data Block": 8BIM... */ - { 0x9c9b, "Title" }, /* Win XP specific, Unicode */ - { 0x9c9c, "Comments" }, /* Win XP specific, Unicode */ - { 0x9c9d, "Author" }, /* Win XP specific, Unicode */ - { 0x9c9e, "Keywords" }, /* Win XP specific, Unicode */ - { 0x9c9f, "Subject" }, /* Win XP specific, Unicode, not to be confused with SubjectDistance and SubjectLocation */ - { 0xA000, "FlashPixVersion"}, - { 0xA001, "ColorSpace"}, - { 0xA002, "ExifImageWidth"}, - { 0xA003, "ExifImageLength"}, - { 0xA004, "RelatedSoundFile"}, - { 0xA005, "InteroperabilityOffset"}, - { 0xA20B, "FlashEnergy"}, /* 0x920B in TIFF/EP */ - { 0xA20C, "SpatialFrequencyResponse"}, /* 0x920C - - */ - { 0xA20D, "Noise"}, - { 0xA20E, "FocalPlaneXResolution"}, /* 0x920E - - */ - { 0xA20F, "FocalPlaneYResolution"}, /* 0x920F - - */ - { 0xA210, "FocalPlaneResolutionUnit"}, /* 0x9210 - - */ - { 0xA211, "ImageNumber"}, - { 0xA212, "SecurityClassification"}, - { 0xA213, "ImageHistory"}, - { 0xA214, "SubjectLocation"}, /* 0x9214 - - */ - { 0xA215, "ExposureIndex"}, /* 0x9215 - - */ - { 0xA216, "TIFF/EPStandardID"}, - { 0xA217, "SensingMethod"}, /* 0x9217 - - */ - { 0xA300, "FileSource"}, - { 0xA301, "SceneType"}, - { 0xA302, "CFAPattern"}, - { 0xA401, "CustomRendered"}, - { 0xA402, "ExposureMode"}, - { 0xA403, "WhiteBalance"}, - { 0xA404, "DigitalZoomRatio"}, - { 0xA405, "FocalLengthIn35mmFilm"}, - { 0xA406, "SceneCaptureType"}, - { 0xA407, "GainControl"}, - { 0xA408, "Contrast"}, - { 0xA409, "Saturation"}, - { 0xA40A, "Sharpness"}, - { 0xA40B, "DeviceSettingDescription"}, - { 0xA40C, "SubjectDistanceRange"}, - { 0xA420, "ImageUniqueID"}, - TAG_TABLE_END -} ; - -static tag_info_array tag_table_GPS = { - { 0x0000, "GPSVersion"}, - { 0x0001, "GPSLatitudeRef"}, - { 0x0002, "GPSLatitude"}, - { 0x0003, "GPSLongitudeRef"}, - { 0x0004, "GPSLongitude"}, - { 0x0005, "GPSAltitudeRef"}, - { 0x0006, "GPSAltitude"}, - { 0x0007, "GPSTimeStamp"}, - { 0x0008, "GPSSatellites"}, - { 0x0009, "GPSStatus"}, - { 0x000A, "GPSMeasureMode"}, - { 0x000B, "GPSDOP"}, - { 0x000C, "GPSSpeedRef"}, - { 0x000D, "GPSSpeed"}, - { 0x000E, "GPSTrackRef"}, - { 0x000F, "GPSTrack"}, - { 0x0010, "GPSImgDirectionRef"}, - { 0x0011, "GPSImgDirection"}, - { 0x0012, "GPSMapDatum"}, - { 0x0013, "GPSDestLatitudeRef"}, - { 0x0014, "GPSDestLatitude"}, - { 0x0015, "GPSDestLongitudeRef"}, - { 0x0016, "GPSDestLongitude"}, - { 0x0017, "GPSDestBearingRef"}, - { 0x0018, "GPSDestBearing"}, - { 0x0019, "GPSDestDistanceRef"}, - { 0x001A, "GPSDestDistance"}, - { 0x001B, "GPSProcessingMode"}, - { 0x001C, "GPSAreaInformation"}, - { 0x001D, "GPSDateStamp"}, - { 0x001E, "GPSDifferential"}, - TAG_TABLE_END -}; - -static tag_info_array tag_table_IOP = { - { 0x0001, "InterOperabilityIndex"}, /* should be 'R98' or 'THM' */ - { 0x0002, "InterOperabilityVersion"}, - { 0x1000, "RelatedFileFormat"}, - { 0x1001, "RelatedImageWidth"}, - { 0x1002, "RelatedImageHeight"}, - TAG_TABLE_END -}; - -static tag_info_array tag_table_VND_CANON = { - { 0x0001, "ModeArray"}, /* guess */ - { 0x0004, "ImageInfo"}, /* guess */ - { 0x0006, "ImageType"}, - { 0x0007, "FirmwareVersion"}, - { 0x0008, "ImageNumber"}, - { 0x0009, "OwnerName"}, - { 0x000C, "Camera"}, - { 0x000F, "CustomFunctions"}, - TAG_TABLE_END -}; - -static tag_info_array tag_table_VND_CASIO = { - { 0x0001, "RecordingMode"}, - { 0x0002, "Quality"}, - { 0x0003, "FocusingMode"}, - { 0x0004, "FlashMode"}, - { 0x0005, "FlashIntensity"}, - { 0x0006, "ObjectDistance"}, - { 0x0007, "WhiteBalance"}, - { 0x000A, "DigitalZoom"}, - { 0x000B, "Sharpness"}, - { 0x000C, "Contrast"}, - { 0x000D, "Saturation"}, - { 0x0014, "CCDSensitivity"}, - TAG_TABLE_END -}; - -static tag_info_array tag_table_VND_FUJI = { - { 0x0000, "Version"}, - { 0x1000, "Quality"}, - { 0x1001, "Sharpness"}, - { 0x1002, "WhiteBalance"}, - { 0x1003, "Color"}, - { 0x1004, "Tone"}, - { 0x1010, "FlashMode"}, - { 0x1011, "FlashStrength"}, - { 0x1020, "Macro"}, - { 0x1021, "FocusMode"}, - { 0x1030, "SlowSync"}, - { 0x1031, "PictureMode"}, - { 0x1100, "ContTake"}, - { 0x1300, "BlurWarning"}, - { 0x1301, "FocusWarning"}, - { 0x1302, "AEWarning "}, - TAG_TABLE_END -}; - -static tag_info_array tag_table_VND_NIKON = { - { 0x0003, "Quality"}, - { 0x0004, "ColorMode"}, - { 0x0005, "ImageAdjustment"}, - { 0x0006, "CCDSensitivity"}, - { 0x0007, "WhiteBalance"}, - { 0x0008, "Focus"}, - { 0x000a, "DigitalZoom"}, - { 0x000b, "Converter"}, - TAG_TABLE_END -}; - -static tag_info_array tag_table_VND_NIKON_990 = { - { 0x0001, "Version"}, - { 0x0002, "ISOSetting"}, - { 0x0003, "ColorMode"}, - { 0x0004, "Quality"}, - { 0x0005, "WhiteBalance"}, - { 0x0006, "ImageSharpening"}, - { 0x0007, "FocusMode"}, - { 0x0008, "FlashSetting"}, - { 0x000F, "ISOSelection"}, - { 0x0080, "ImageAdjustment"}, - { 0x0082, "AuxiliaryLens"}, - { 0x0085, "ManualFocusDistance"}, - { 0x0086, "DigitalZoom"}, - { 0x0088, "AFFocusPosition"}, - { 0x0010, "DataDump"}, - TAG_TABLE_END -}; - -static tag_info_array tag_table_VND_OLYMPUS = { - { 0x0200, "SpecialMode"}, - { 0x0201, "JPEGQuality"}, - { 0x0202, "Macro"}, - { 0x0204, "DigitalZoom"}, - { 0x0207, "SoftwareRelease"}, - { 0x0208, "PictureInfo"}, - { 0x0209, "CameraId"}, - { 0x0F00, "DataDump"}, - TAG_TABLE_END -}; - -typedef enum mn_byte_order_t { - MN_ORDER_INTEL = 0, - MN_ORDER_MOTOROLA = 1, - MN_ORDER_NORMAL -} mn_byte_order_t; - -typedef enum mn_offset_mode_t { - MN_OFFSET_NORMAL, - MN_OFFSET_MAKER, - MN_OFFSET_GUESS -} mn_offset_mode_t; - -typedef struct { - tag_table_type tag_table; - char * make; - char * model; - char * id_string; - int id_string_len; - int offset; - mn_byte_order_t byte_order; - mn_offset_mode_t offset_mode; -} maker_note_type; - -static const maker_note_type maker_note_array[] = { - { tag_table_VND_CANON, "Canon", NULL, NULL, 0, 0, MN_ORDER_INTEL, MN_OFFSET_GUESS}, -/* { tag_table_VND_CANON, "Canon", NULL, NULL, 0, 0, MN_ORDER_NORMAL, MN_OFFSET_NORMAL},*/ - { tag_table_VND_CASIO, "CASIO", NULL, NULL, 0, 0, MN_ORDER_MOTOROLA, MN_OFFSET_NORMAL}, - { tag_table_VND_FUJI, "FUJIFILM", NULL, "FUJIFILM\x0C\x00\x00\x00", 12, 12, MN_ORDER_INTEL, MN_OFFSET_MAKER}, - { tag_table_VND_NIKON, "NIKON", NULL, "Nikon\x00\x01\x00", 8, 8, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, - { tag_table_VND_NIKON_990, "NIKON", NULL, NULL, 0, 0, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, - { tag_table_VND_OLYMPUS, "OLYMPUS OPTICAL CO.,LTD", NULL, "OLYMP\x00\x01\x00", 8, 8, MN_ORDER_NORMAL, MN_OFFSET_NORMAL}, -}; -/* }}} */ - -/* {{{ exif_get_tagname - Get headername for tag_num or NULL if not defined */ -static char * exif_get_tagname(int tag_num, char *ret, int len, tag_table_type tag_table TSRMLS_DC) -{ - int i, t; - char tmp[32]; - - for (i = 0; (t = tag_table[i].Tag) != TAG_END_OF_LIST; i++) { - if (t == tag_num) { - if (ret && len) { - strlcpy(ret, tag_table[i].Desc, abs(len)); - if (len < 0) { - memset(ret + strlen(ret), ' ', -len - strlen(ret) - 1); - ret[-len - 1] = '\0'; - } - return ret; - } - return tag_table[i].Desc; - } - } - - if (ret && len) { - snprintf(tmp, sizeof(tmp), "UndefinedTag:0x%04X", tag_num); - strlcpy(ret, tmp, abs(len)); - if (len < 0) { - memset(ret + strlen(ret), ' ', -len - strlen(ret) - 1); - ret[-len - 1] = '\0'; - } - return ret; - } - return ""; -} -/* }}} */ - -/* {{{ exif_char_dump - * Do not use! This is a debug function... */ -#ifdef EXIF_DEBUG -static unsigned char* exif_char_dump(unsigned char * addr, int len, int offset) -{ - static unsigned char buf[4096+1]; - static unsigned char tmp[20]; - int c, i, p=0, n = 5+31; - - p += snprintf(buf+p, sizeof(buf)-p, "\nDump Len: %08X (%d)", len, len); - if (len) { - for(i=0; i=32 ? c : '.'; - tmp[(i%16)+1] = '\0'; - } else { - p += snprintf(buf+p, sizeof(buf)-p, " "); - } - if (i%16==15) { - p += snprintf(buf+p, sizeof(buf)-p, " %s", tmp); - if (i>=len) { - break; - } - } - } - } - buf[sizeof(buf)-1] = '\0'; - return buf; -} -#endif -/* }}} */ - -/* {{{ php_jpg_get16 - Get 16 bits motorola order (always) for jpeg header stuff. -*/ -static int php_jpg_get16(void *value) -{ - return (((uchar *)value)[0] << 8) | ((uchar *)value)[1]; -} -/* }}} */ - -/* {{{ php_ifd_get16u - * Convert a 16 bit unsigned value from file's native byte order */ -static int php_ifd_get16u(void *value, int motorola_intel) -{ - if (motorola_intel) { - return (((uchar *)value)[0] << 8) | ((uchar *)value)[1]; - } else { - return (((uchar *)value)[1] << 8) | ((uchar *)value)[0]; - } -} -/* }}} */ - -/* {{{ php_ifd_get16s - * Convert a 16 bit signed value from file's native byte order */ -static signed short php_ifd_get16s(void *value, int motorola_intel) -{ - return (signed short)php_ifd_get16u(value, motorola_intel); -} -/* }}} */ - -/* {{{ php_ifd_get32s - * Convert a 32 bit signed value from file's native byte order */ -static int php_ifd_get32s(void *value, int motorola_intel) -{ - if (motorola_intel) { - return (((char *)value)[0] << 24) - | (((uchar *)value)[1] << 16) - | (((uchar *)value)[2] << 8 ) - | (((uchar *)value)[3] ); - } else { - return (((char *)value)[3] << 24) - | (((uchar *)value)[2] << 16) - | (((uchar *)value)[1] << 8 ) - | (((uchar *)value)[0] ); - } -} -/* }}} */ - -/* {{{ php_ifd_get32u - * Write 32 bit unsigned value to data */ -static unsigned php_ifd_get32u(void *value, int motorola_intel) -{ - return (unsigned)php_ifd_get32s(value, motorola_intel) & 0xffffffff; -} -/* }}} */ - -/* {{{ php_ifd_set16u - * Write 16 bit unsigned value to data */ -static void php_ifd_set16u(char *data, unsigned int value, int motorola_intel) -{ - if (motorola_intel) { - data[0] = (value & 0xFF00) >> 8; - data[1] = (value & 0x00FF); - } else { - data[1] = (value & 0xFF00) >> 8; - data[0] = (value & 0x00FF); - } -} -/* }}} */ - -/* {{{ php_ifd_set32u - * Convert a 32 bit unsigned value from file's native byte order */ -static void php_ifd_set32u(char *data, size_t value, int motorola_intel) -{ - if (motorola_intel) { - data[0] = (value & 0xFF000000) >> 24; - data[1] = (value & 0x00FF0000) >> 16; - data[2] = (value & 0x0000FF00) >> 8; - data[3] = (value & 0x000000FF); - } else { - data[3] = (value & 0xFF000000) >> 24; - data[2] = (value & 0x00FF0000) >> 16; - data[1] = (value & 0x0000FF00) >> 8; - data[0] = (value & 0x000000FF); - } -} -/* }}} */ - -#ifdef EXIF_DEBUG -char * exif_dump_data(int *dump_free, int format, int components, int length, int motorola_intel, char *value_ptr TSRMLS_DC) /* {{{ */ -{ - char *dump; - int len; - - *dump_free = 0; - if (format == TAG_FMT_STRING) { - return value_ptr ? value_ptr : ""; - } - if (format == TAG_FMT_UNDEFINED) { - return "\n"; - } - if (format == TAG_FMT_IFD) { - return ""; - } - if (format == TAG_FMT_SINGLE || format == TAG_FMT_DOUBLE) { - return ""; - } - *dump_free = 1; - if (components > 1) { - len = spprintf(&dump, 0, "(%d,%d) {", components, length); - } else { - len = spprintf(&dump, 0, "{"); - } - while(components > 0) { - switch(format) { - case TAG_FMT_BYTE: - case TAG_FMT_UNDEFINED: - case TAG_FMT_STRING: - case TAG_FMT_SBYTE: - dump = erealloc(dump, len + 4 + 1); - snprintf(dump + len, 4 + 1, "0x%02X", *value_ptr); - len += 4; - value_ptr++; - break; - case TAG_FMT_USHORT: - case TAG_FMT_SSHORT: - dump = erealloc(dump, len + 6 + 1); - snprintf(dump + len, 6 + 1, "0x%04X", php_ifd_get16s(value_ptr, motorola_intel)); - len += 6; - value_ptr += 2; - break; - case TAG_FMT_ULONG: - case TAG_FMT_SLONG: - dump = erealloc(dump, len + 6 + 1); - snprintf(dump + len, 6 + 1, "0x%04X", php_ifd_get32s(value_ptr, motorola_intel)); - len += 6; - value_ptr += 4; - break; - case TAG_FMT_URATIONAL: - case TAG_FMT_SRATIONAL: - dump = erealloc(dump, len + 13 + 1); - snprintf(dump + len, 13 + 1, "0x%04X/0x%04X", php_ifd_get32s(value_ptr, motorola_intel), php_ifd_get32s(value_ptr+4, motorola_intel)); - len += 13; - value_ptr += 8; - break; - } - if (components > 0) { - dump = erealloc(dump, len + 2 + 1); - snprintf(dump + len, 2 + 1, ", "); - len += 2; - components--; - } else{ - break; - } - } - dump = erealloc(dump, len + 1 + 1); - snprintf(dump + len, 1 + 1, "}"); - return dump; -} -/* }}} */ -#endif - -/* {{{ exif_convert_any_format - * Evaluate number, be it int, rational, or float from directory. */ -static double exif_convert_any_format(void *value, int format, int motorola_intel TSRMLS_DC) -{ - int s_den; - unsigned u_den; - - switch(format) { - case TAG_FMT_SBYTE: return *(signed char *)value; - case TAG_FMT_BYTE: return *(uchar *)value; - - case TAG_FMT_USHORT: return php_ifd_get16u(value, motorola_intel); - case TAG_FMT_ULONG: return php_ifd_get32u(value, motorola_intel); - - case TAG_FMT_URATIONAL: - u_den = php_ifd_get32u(4+(char *)value, motorola_intel); - if (u_den == 0) { - return 0; - } else { - return (double)php_ifd_get32u(value, motorola_intel) / u_den; - } - - case TAG_FMT_SRATIONAL: - s_den = php_ifd_get32s(4+(char *)value, motorola_intel); - if (s_den == 0) { - return 0; - } else { - return (double)php_ifd_get32s(value, motorola_intel) / s_den; - } - - case TAG_FMT_SSHORT: return (signed short)php_ifd_get16u(value, motorola_intel); - case TAG_FMT_SLONG: return php_ifd_get32s(value, motorola_intel); - - /* Not sure if this is correct (never seen float used in Exif format) */ - case TAG_FMT_SINGLE: -#ifdef EXIF_DEBUG - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Found value of type single"); -#endif - return (double)*(float *)value; - case TAG_FMT_DOUBLE: -#ifdef EXIF_DEBUG - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Found value of type double"); -#endif - return *(double *)value; - } - return 0; -} -/* }}} */ - -/* {{{ exif_convert_any_to_int - * Evaluate number, be it int, rational, or float from directory. */ -static size_t exif_convert_any_to_int(void *value, int format, int motorola_intel TSRMLS_DC) -{ - int s_den; - unsigned u_den; - - switch(format) { - case TAG_FMT_SBYTE: return *(signed char *)value; - case TAG_FMT_BYTE: return *(uchar *)value; - - case TAG_FMT_USHORT: return php_ifd_get16u(value, motorola_intel); - case TAG_FMT_ULONG: return php_ifd_get32u(value, motorola_intel); - - case TAG_FMT_URATIONAL: - u_den = php_ifd_get32u(4+(char *)value, motorola_intel); - if (u_den == 0) { - return 0; - } else { - return php_ifd_get32u(value, motorola_intel) / u_den; - } - - case TAG_FMT_SRATIONAL: - s_den = php_ifd_get32s(4+(char *)value, motorola_intel); - if (s_den == 0) { - return 0; - } else { - return php_ifd_get32s(value, motorola_intel) / s_den; - } - - case TAG_FMT_SSHORT: return php_ifd_get16u(value, motorola_intel); - case TAG_FMT_SLONG: return php_ifd_get32s(value, motorola_intel); - - /* Not sure if this is correct (never seen float used in Exif format) */ - case TAG_FMT_SINGLE: -#ifdef EXIF_DEBUG - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Found value of type single"); -#endif - return (size_t)*(float *)value; - case TAG_FMT_DOUBLE: -#ifdef EXIF_DEBUG - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Found value of type double"); -#endif - return (size_t)*(double *)value; - } - return 0; -} -/* }}} */ - -/* {{{ struct image_info_value, image_info_list -*/ -#ifndef WORD -#define WORD unsigned short -#endif -#ifndef DWORD -#define DWORD unsigned int -#endif - -typedef struct { - int num; - int den; -} signed_rational; - -typedef struct { - unsigned int num; - unsigned int den; -} unsigned_rational; - -typedef union _image_info_value { - char *s; - unsigned u; - int i; - float f; - double d; - signed_rational sr; - unsigned_rational ur; - union _image_info_value *list; -} image_info_value; - -typedef struct { - WORD tag; - WORD format; - DWORD length; - DWORD dummy; /* value ptr of tiff directory entry */ - char *name; - image_info_value value; -} image_info_data; - -typedef struct { - int count; - image_info_data *list; -} image_info_list; -/* }}} */ - -/* {{{ exif_get_sectionname - Returns the name of a section -*/ -#define SECTION_FILE 0 -#define SECTION_COMPUTED 1 -#define SECTION_ANY_TAG 2 -#define SECTION_IFD0 3 -#define SECTION_THUMBNAIL 4 -#define SECTION_COMMENT 5 -#define SECTION_APP0 6 -#define SECTION_EXIF 7 -#define SECTION_FPIX 8 -#define SECTION_GPS 9 -#define SECTION_INTEROP 10 -#define SECTION_APP12 11 -#define SECTION_WINXP 12 -#define SECTION_MAKERNOTE 13 -#define SECTION_COUNT 14 - -#define FOUND_FILE (1<2) - sections[len-2] = '\0'; - return sections; -} -/* }}} */ - -/* {{{ struct image_info_type - This structure stores Exif header image elements in a simple manner - Used to store camera data as extracted from the various ways that it can be - stored in a nexif header -*/ - -typedef struct { - int type; - size_t size; - uchar *data; -} file_section; - -typedef struct { - int count; - file_section *list; -} file_section_list; - -typedef struct { - image_filetype filetype; - size_t width, height; - size_t size; - size_t offset; - char *data; -} thumbnail_data; - -typedef struct { - char *value; - size_t size; - int tag; -} xp_field_type; - -typedef struct { - int count; - xp_field_type *list; -} xp_field_list; - -/* This structure is used to store a section of a Jpeg file. */ -typedef struct { - php_stream *infile; - char *FileName; - time_t FileDateTime; - size_t FileSize; - image_filetype FileType; - int Height, Width; - int IsColor; - - char *make; - char *model; - - float ApertureFNumber; - float ExposureTime; - double FocalplaneUnits; - float CCDWidth; - double FocalplaneXRes; - size_t ExifImageWidth; - float FocalLength; - float Distance; - - int motorola_intel; /* 1 Motorola; 0 Intel */ - - char *UserComment; - int UserCommentLength; - char *UserCommentEncoding; - char *encode_unicode; - char *decode_unicode_be; - char *decode_unicode_le; - char *encode_jis; - char *decode_jis_be; - char *decode_jis_le; - char *Copyright;/* EXIF standard defines Copyright as " [ '\0' ] ['\0']" */ - char *CopyrightPhotographer; - char *CopyrightEditor; - - xp_field_list xp_fields; - - thumbnail_data Thumbnail; - /* other */ - int sections_found; /* FOUND_ */ - image_info_list info_list[SECTION_COUNT]; - /* for parsing */ - int read_thumbnail; - int read_all; - int ifd_nesting_level; - /* internal */ - file_section_list file; -} image_info_type; -/* }}} */ - -/* {{{ exif_error_docref */ -static void exif_error_docref(const char *docref EXIFERR_DC, const image_info_type *ImageInfo, int type, const char *format, ...) -{ - va_list args; - - va_start(args, format); -#ifdef EXIF_DEBUG - { - char *buf; - - spprintf(&buf, 0, "%s(%d): %s", _file, _line, format); - php_verror(docref, ImageInfo->FileName?ImageInfo->FileName:"", type, buf, args TSRMLS_CC); - efree(buf); - } -#else - php_verror(docref, ImageInfo->FileName?ImageInfo->FileName:"", type, format, args TSRMLS_CC); -#endif - va_end(args); -} -/* }}} */ - -/* {{{ jpeg_sof_info - */ -typedef struct { - int bits_per_sample; - size_t width; - size_t height; - int num_components; -} jpeg_sof_info; -/* }}} */ - -/* {{{ exif_file_sections_add - Add a file_section to image_info - returns the used block or -1. if size>0 and data == NULL buffer of size is allocated -*/ -static int exif_file_sections_add(image_info_type *ImageInfo, int type, size_t size, uchar *data) -{ - file_section *tmp; - int count = ImageInfo->file.count; - - tmp = safe_erealloc(ImageInfo->file.list, (count+1), sizeof(file_section), 0); - ImageInfo->file.list = tmp; - ImageInfo->file.list[count].type = 0xFFFF; - ImageInfo->file.list[count].data = NULL; - ImageInfo->file.list[count].size = 0; - ImageInfo->file.count = count+1; - if (!size) { - data = NULL; - } else if (data == NULL) { - data = safe_emalloc(size, 1, 0); - } - ImageInfo->file.list[count].type = type; - ImageInfo->file.list[count].data = data; - ImageInfo->file.list[count].size = size; - return count; -} -/* }}} */ - -/* {{{ exif_file_sections_realloc - Reallocate a file section returns 0 on success and -1 on failure -*/ -static int exif_file_sections_realloc(image_info_type *ImageInfo, int section_index, size_t size TSRMLS_DC) -{ - void *tmp; - - /* This is not a malloc/realloc check. It is a plausibility check for the - * function parameters (requirements engineering). - */ - if (section_index >= ImageInfo->file.count) { - EXIF_ERRLOG_FSREALLOC(ImageInfo) - return -1; - } - tmp = safe_erealloc(ImageInfo->file.list[section_index].data, 1, size, 0); - ImageInfo->file.list[section_index].data = tmp; - ImageInfo->file.list[section_index].size = size; - return 0; -} -/* }}} */ - -/* {{{ exif_file_section_free - Discard all file_sections in ImageInfo -*/ -static int exif_file_sections_free(image_info_type *ImageInfo) -{ - int i; - - if (ImageInfo->file.count) { - for (i=0; ifile.count; i++) { - EFREE_IF(ImageInfo->file.list[i].data); - } - } - EFREE_IF(ImageInfo->file.list); - ImageInfo->file.count = 0; - return TRUE; -} -/* }}} */ - -/* {{{ exif_iif_add_value - Add a value to image_info -*/ -static void exif_iif_add_value(image_info_type *image_info, int section_index, char *name, int tag, int format, int length, void* value, int motorola_intel TSRMLS_DC) -{ - size_t idex; - void *vptr; - image_info_value *info_value; - image_info_data *info_data; - image_info_data *list; - - if (length < 0) { - return; - } - - list = safe_erealloc(image_info->info_list[section_index].list, (image_info->info_list[section_index].count+1), sizeof(image_info_data), 0); - image_info->info_list[section_index].list = list; - - info_data = &image_info->info_list[section_index].list[image_info->info_list[section_index].count]; - memset(info_data, 0, sizeof(image_info_data)); - info_data->tag = tag; - info_data->format = format; - info_data->length = length; - info_data->name = estrdup(name); - info_value = &info_data->value; - - switch (format) { - case TAG_FMT_STRING: - if (value) { - length = php_strnlen(value, length); - info_value->s = estrndup(value, length); - info_data->length = length; - } else { - info_data->length = 0; - info_value->s = estrdup(""); - } - break; - - default: - /* Standard says more types possible but skip them... - * but allow users to handle data if they know how to - * So not return but use type UNDEFINED - * return; - */ - info_data->tag = TAG_FMT_UNDEFINED;/* otherwise not freed from memory */ - case TAG_FMT_SBYTE: - case TAG_FMT_BYTE: - /* in contrast to strings bytes do not need to allocate buffer for NULL if length==0 */ - if (!length) - break; - case TAG_FMT_UNDEFINED: - if (value) { - info_value->s = estrndup(value, length); - info_data->length = length; - } else { - info_data->length = 0; - info_value->s = estrdup(""); - } - break; - - case TAG_FMT_USHORT: - case TAG_FMT_ULONG: - case TAG_FMT_URATIONAL: - case TAG_FMT_SSHORT: - case TAG_FMT_SLONG: - case TAG_FMT_SRATIONAL: - case TAG_FMT_SINGLE: - case TAG_FMT_DOUBLE: - if (length==0) { - break; - } else - if (length>1) { - info_value->list = safe_emalloc(length, sizeof(image_info_value), 0); - } else { - info_value = &info_data->value; - } - for (idex=0,vptr=value; idex<(size_t)length; idex++,vptr=(char *) vptr + php_tiff_bytes_per_format[format]) { - if (length>1) { - info_value = &info_data->value.list[idex]; - } - switch (format) { - case TAG_FMT_USHORT: - info_value->u = php_ifd_get16u(vptr, motorola_intel); - break; - - case TAG_FMT_ULONG: - info_value->u = php_ifd_get32u(vptr, motorola_intel); - break; - - case TAG_FMT_URATIONAL: - info_value->ur.num = php_ifd_get32u(vptr, motorola_intel); - info_value->ur.den = php_ifd_get32u(4+(char *)vptr, motorola_intel); - break; - - case TAG_FMT_SSHORT: - info_value->i = php_ifd_get16s(vptr, motorola_intel); - break; - - case TAG_FMT_SLONG: - info_value->i = php_ifd_get32s(vptr, motorola_intel); - break; - - case TAG_FMT_SRATIONAL: - info_value->sr.num = php_ifd_get32u(vptr, motorola_intel); - info_value->sr.den = php_ifd_get32u(4+(char *)vptr, motorola_intel); - break; - - case TAG_FMT_SINGLE: -#ifdef EXIF_DEBUG - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Found value of type single"); -#endif - info_value->f = *(float *)value; - - case TAG_FMT_DOUBLE: -#ifdef EXIF_DEBUG - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Found value of type double"); -#endif - info_value->d = *(double *)value; - break; - } - } - } - image_info->sections_found |= 1<info_list[section_index].count++; -} -/* }}} */ - -/* {{{ exif_iif_add_tag - Add a tag from IFD to image_info -*/ -static void exif_iif_add_tag(image_info_type *image_info, int section_index, char *name, int tag, int format, size_t length, void* value TSRMLS_DC) -{ - exif_iif_add_value(image_info, section_index, name, tag, format, (int)length, value, image_info->motorola_intel TSRMLS_CC); -} -/* }}} */ - -/* {{{ exif_iif_add_int - Add an int value to image_info -*/ -static void exif_iif_add_int(image_info_type *image_info, int section_index, char *name, int value TSRMLS_DC) -{ - image_info_data *info_data; - image_info_data *list; - - list = safe_erealloc(image_info->info_list[section_index].list, (image_info->info_list[section_index].count+1), sizeof(image_info_data), 0); - image_info->info_list[section_index].list = list; - - info_data = &image_info->info_list[section_index].list[image_info->info_list[section_index].count]; - info_data->tag = TAG_NONE; - info_data->format = TAG_FMT_SLONG; - info_data->length = 1; - info_data->name = estrdup(name); - info_data->value.i = value; - image_info->sections_found |= 1<info_list[section_index].count++; -} -/* }}} */ - -/* {{{ exif_iif_add_str - Add a string value to image_info MUST BE NUL TERMINATED -*/ -static void exif_iif_add_str(image_info_type *image_info, int section_index, char *name, char *value TSRMLS_DC) -{ - image_info_data *info_data; - image_info_data *list; - - if (value) { - list = safe_erealloc(image_info->info_list[section_index].list, (image_info->info_list[section_index].count+1), sizeof(image_info_data), 0); - image_info->info_list[section_index].list = list; - info_data = &image_info->info_list[section_index].list[image_info->info_list[section_index].count]; - info_data->tag = TAG_NONE; - info_data->format = TAG_FMT_STRING; - info_data->length = 1; - info_data->name = estrdup(name); - info_data->value.s = estrdup(value); - image_info->sections_found |= 1<info_list[section_index].count++; - } -} -/* }}} */ - -/* {{{ exif_iif_add_fmt - Add a format string value to image_info MUST BE NUL TERMINATED -*/ -static void exif_iif_add_fmt(image_info_type *image_info, int section_index, char *name TSRMLS_DC, char *value, ...) -{ - char *tmp; - va_list arglist; - - va_start(arglist, value); - if (value) { - vspprintf(&tmp, 0, value, arglist); - exif_iif_add_str(image_info, section_index, name, tmp TSRMLS_CC); - efree(tmp); - } - va_end(arglist); -} -/* }}} */ - -/* {{{ exif_iif_add_str - Add a string value to image_info MUST BE NUL TERMINATED -*/ -static void exif_iif_add_buffer(image_info_type *image_info, int section_index, char *name, int length, char *value TSRMLS_DC) -{ - image_info_data *info_data; - image_info_data *list; - - if (value) { - list = safe_erealloc(image_info->info_list[section_index].list, (image_info->info_list[section_index].count+1), sizeof(image_info_data), 0); - image_info->info_list[section_index].list = list; - info_data = &image_info->info_list[section_index].list[image_info->info_list[section_index].count]; - info_data->tag = TAG_NONE; - info_data->format = TAG_FMT_UNDEFINED; - info_data->length = length; - info_data->name = estrdup(name); - info_data->value.s = safe_emalloc(length, 1, 1); - memcpy(info_data->value.s, value, length); - info_data->value.s[length] = 0; - image_info->sections_found |= 1<info_list[section_index].count++; - } -} -/* }}} */ - -/* {{{ exif_iif_free - Free memory allocated for image_info -*/ -static void exif_iif_free(image_info_type *image_info, int section_index) { - int i; - void *f; /* faster */ - - if (image_info->info_list[section_index].count) { - for (i=0; i < image_info->info_list[section_index].count; i++) { - if ((f=image_info->info_list[section_index].list[i].name) != NULL) { - efree(f); - } - switch(image_info->info_list[section_index].list[i].format) { - case TAG_FMT_SBYTE: - case TAG_FMT_BYTE: - /* in contrast to strings bytes do not need to allocate buffer for NULL if length==0 */ - if (image_info->info_list[section_index].list[i].length<1) - break; - default: - case TAG_FMT_UNDEFINED: - case TAG_FMT_STRING: - if ((f=image_info->info_list[section_index].list[i].value.s) != NULL) { - efree(f); - } - break; - - case TAG_FMT_USHORT: - case TAG_FMT_ULONG: - case TAG_FMT_URATIONAL: - case TAG_FMT_SSHORT: - case TAG_FMT_SLONG: - case TAG_FMT_SRATIONAL: - case TAG_FMT_SINGLE: - case TAG_FMT_DOUBLE: - /* nothing to do here */ - if (image_info->info_list[section_index].list[i].length > 1) { - if ((f=image_info->info_list[section_index].list[i].value.list) != NULL) { - efree(f); - } - } - break; - } - } - } - EFREE_IF(image_info->info_list[section_index].list); -} -/* }}} */ - -/* {{{ add_assoc_image_info - * Add image_info to associative array value. */ -static void add_assoc_image_info(zval *value, int sub_array, image_info_type *image_info, int section_index TSRMLS_DC) -{ - char buffer[64], *val, *name, uname[64]; - int i, ap, l, b, idx=0, unknown=0; -#ifdef EXIF_DEBUG - int info_tag; -#endif - image_info_value *info_value; - image_info_data *info_data; - zval *tmpi, *array = NULL; - -#ifdef EXIF_DEBUG -/* php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Adding %d infos from section %s", image_info->info_list[section_index].count, exif_get_sectionname(section_index));*/ -#endif - if (image_info->info_list[section_index].count) { - if (sub_array) { - MAKE_STD_ZVAL(tmpi); - array_init(tmpi); - } else { - tmpi = value; - } - - for(i=0; iinfo_list[section_index].count; i++) { - info_data = &image_info->info_list[section_index].list[i]; -#ifdef EXIF_DEBUG - info_tag = info_data->tag; /* conversion */ -#endif - info_value = &info_data->value; - if (!(name = info_data->name)) { - snprintf(uname, sizeof(uname), "%d", unknown++); - name = uname; - } -#ifdef EXIF_DEBUG -/* php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Adding infos: tag(0x%04X,%12s,L=0x%04X): %s", info_tag, exif_get_tagname(info_tag, buffer, -12, exif_get_tag_table(section_index) TSRMLS_CC), info_data->length, info_data->format==TAG_FMT_STRING?(info_value&&info_value->s?info_value->s:""):exif_get_tagformat(info_data->format));*/ -#endif - if (info_data->length==0) { - add_assoc_null(tmpi, name); - } else { - switch (info_data->format) { - default: - /* Standard says more types possible but skip them... - * but allow users to handle data if they know how to - * So not return but use type UNDEFINED - * return; - */ - case TAG_FMT_BYTE: - case TAG_FMT_SBYTE: - case TAG_FMT_UNDEFINED: - if (!info_value->s) { - add_assoc_stringl(tmpi, name, "", 0, 1); - } else { - add_assoc_stringl(tmpi, name, info_value->s, info_data->length, 1); - } - break; - - case TAG_FMT_STRING: - if (!(val = info_value->s)) { - val = ""; - } - if (section_index==SECTION_COMMENT) { - add_index_string(tmpi, idx++, val, 1); - } else { - add_assoc_string(tmpi, name, val, 1); - } - break; - - case TAG_FMT_URATIONAL: - case TAG_FMT_SRATIONAL: - /*case TAG_FMT_BYTE: - case TAG_FMT_SBYTE:*/ - case TAG_FMT_USHORT: - case TAG_FMT_SSHORT: - case TAG_FMT_SINGLE: - case TAG_FMT_DOUBLE: - case TAG_FMT_ULONG: - case TAG_FMT_SLONG: - /* now the rest, first see if it becomes an array */ - if ((l = info_data->length) > 1) { - array = NULL; - MAKE_STD_ZVAL(array); - array_init(array); - } - for(ap=0; ap1) { - info_value = &info_data->value.list[ap]; - } - switch (info_data->format) { - case TAG_FMT_BYTE: - if (l>1) { - info_value = &info_data->value; - for (b=0;bs[b])); - } - break; - } - case TAG_FMT_USHORT: - case TAG_FMT_ULONG: - if (l==1) { - add_assoc_long(tmpi, name, (int)info_value->u); - } else { - add_index_long(array, ap, (int)info_value->u); - } - break; - - case TAG_FMT_URATIONAL: - snprintf(buffer, sizeof(buffer), "%i/%i", info_value->ur.num, info_value->ur.den); - if (l==1) { - add_assoc_string(tmpi, name, buffer, 1); - } else { - add_index_string(array, ap, buffer, 1); - } - break; - - case TAG_FMT_SBYTE: - if (l>1) { - info_value = &info_data->value; - for (b=0;bs[b]); - } - break; - } - case TAG_FMT_SSHORT: - case TAG_FMT_SLONG: - if (l==1) { - add_assoc_long(tmpi, name, info_value->i); - } else { - add_index_long(array, ap, info_value->i); - } - break; - - case TAG_FMT_SRATIONAL: - snprintf(buffer, sizeof(buffer), "%i/%i", info_value->sr.num, info_value->sr.den); - if (l==1) { - add_assoc_string(tmpi, name, buffer, 1); - } else { - add_index_string(array, ap, buffer, 1); - } - break; - - case TAG_FMT_SINGLE: - if (l==1) { - add_assoc_double(tmpi, name, info_value->f); - } else { - add_index_double(array, ap, info_value->f); - } - break; - - case TAG_FMT_DOUBLE: - if (l==1) { - add_assoc_double(tmpi, name, info_value->d); - } else { - add_index_double(array, ap, info_value->d); - } - break; - } - info_value = &info_data->value.list[ap]; - } - if (l>1) { - add_assoc_zval(tmpi, name, array); - } - break; - } - } - } - if (sub_array) { - add_assoc_zval(value, exif_get_sectionname(section_index), tmpi); - } - } -} -/* }}} */ - -/* {{{ Markers - JPEG markers consist of one or more 0xFF bytes, followed by a marker - code byte (which is not an FF). Here are the marker codes of interest - in this program. (See jdmarker.c for a more complete list.) -*/ - -#define M_TEM 0x01 /* temp for arithmetic coding */ -#define M_RES 0x02 /* reserved */ -#define M_SOF0 0xC0 /* Start Of Frame N */ -#define M_SOF1 0xC1 /* N indicates which compression process */ -#define M_SOF2 0xC2 /* Only SOF0-SOF2 are now in common use */ -#define M_SOF3 0xC3 -#define M_DHT 0xC4 -#define M_SOF5 0xC5 /* NB: codes C4 and CC are NOT SOF markers */ -#define M_SOF6 0xC6 -#define M_SOF7 0xC7 -#define M_JPEG 0x08 /* reserved for extensions */ -#define M_SOF9 0xC9 -#define M_SOF10 0xCA -#define M_SOF11 0xCB -#define M_DAC 0xCC /* arithmetic table */ -#define M_SOF13 0xCD -#define M_SOF14 0xCE -#define M_SOF15 0xCF -#define M_RST0 0xD0 /* restart segment */ -#define M_RST1 0xD1 -#define M_RST2 0xD2 -#define M_RST3 0xD3 -#define M_RST4 0xD4 -#define M_RST5 0xD5 -#define M_RST6 0xD6 -#define M_RST7 0xD7 -#define M_SOI 0xD8 /* Start Of Image (beginning of datastream) */ -#define M_EOI 0xD9 /* End Of Image (end of datastream) */ -#define M_SOS 0xDA /* Start Of Scan (begins compressed data) */ -#define M_DQT 0xDB -#define M_DNL 0xDC -#define M_DRI 0xDD -#define M_DHP 0xDE -#define M_EXP 0xDF -#define M_APP0 0xE0 /* JPEG: 'JFIFF' AND (additional 'JFXX') */ -#define M_EXIF 0xE1 /* Exif Attribute Information */ -#define M_APP2 0xE2 /* Flash Pix Extension Data? */ -#define M_APP3 0xE3 -#define M_APP4 0xE4 -#define M_APP5 0xE5 -#define M_APP6 0xE6 -#define M_APP7 0xE7 -#define M_APP8 0xE8 -#define M_APP9 0xE9 -#define M_APP10 0xEA -#define M_APP11 0xEB -#define M_APP12 0xEC -#define M_APP13 0xED /* IPTC International Press Telecommunications Council */ -#define M_APP14 0xEE /* Software, Copyright? */ -#define M_APP15 0xEF -#define M_JPG0 0xF0 -#define M_JPG1 0xF1 -#define M_JPG2 0xF2 -#define M_JPG3 0xF3 -#define M_JPG4 0xF4 -#define M_JPG5 0xF5 -#define M_JPG6 0xF6 -#define M_JPG7 0xF7 -#define M_JPG8 0xF8 -#define M_JPG9 0xF9 -#define M_JPG10 0xFA -#define M_JPG11 0xFB -#define M_JPG12 0xFC -#define M_JPG13 0xFD -#define M_COM 0xFE /* COMment */ - -#define M_PSEUDO 0x123 /* Extra value. */ - -/* }}} */ - -/* {{{ jpeg2000 markers - */ -/* Markers x30 - x3F do not have a segment */ -/* Markers x00, x01, xFE, xC0 - xDF ISO/IEC 10918-1 -> M_ */ -/* Markers xF0 - xF7 ISO/IEC 10918-3 */ -/* Markers xF7 - xF8 ISO/IEC 14495-1 */ -/* XY=Main/Tile-header:(R:required, N:not_allowed, O:optional, L:last_marker) */ -#define JC_SOC 0x4F /* NN, Start of codestream */ -#define JC_SIZ 0x51 /* RN, Image and tile size */ -#define JC_COD 0x52 /* RO, Codeing style defaulte */ -#define JC_COC 0x53 /* OO, Coding style component */ -#define JC_TLM 0x55 /* ON, Tile part length main header */ -#define JC_PLM 0x57 /* ON, Packet length main header */ -#define JC_PLT 0x58 /* NO, Packet length tile part header */ -#define JC_QCD 0x5C /* RO, Quantization default */ -#define JC_QCC 0x5D /* OO, Quantization component */ -#define JC_RGN 0x5E /* OO, Region of interest */ -#define JC_POD 0x5F /* OO, Progression order default */ -#define JC_PPM 0x60 /* ON, Packed packet headers main header */ -#define JC_PPT 0x61 /* NO, Packet packet headers tile part header */ -#define JC_CME 0x64 /* OO, Comment: "LL E " E=0:binary, E=1:ascii */ -#define JC_SOT 0x90 /* NR, Start of tile */ -#define JC_SOP 0x91 /* NO, Start of packeter default */ -#define JC_EPH 0x92 /* NO, End of packet header */ -#define JC_SOD 0x93 /* NL, Start of data */ -#define JC_EOC 0xD9 /* NN, End of codestream */ -/* }}} */ - -/* {{{ exif_process_COM - Process a COM marker. - We want to print out the marker contents as legible text; - we must guard against random junk and varying newline representations. -*/ -static void exif_process_COM (image_info_type *image_info, char *value, size_t length TSRMLS_DC) -{ - exif_iif_add_tag(image_info, SECTION_COMMENT, "Comment", TAG_COMPUTED_VALUE, TAG_FMT_STRING, length-2, value+2 TSRMLS_CC); -} -/* }}} */ - -/* {{{ exif_process_CME - Process a CME marker. - We want to print out the marker contents as legible text; - we must guard against random junk and varying newline representations. -*/ -#ifdef EXIF_JPEG2000 -static void exif_process_CME (image_info_type *image_info, char *value, size_t length TSRMLS_DC) -{ - if (length>3) { - switch(value[2]) { - case 0: - exif_iif_add_tag(image_info, SECTION_COMMENT, "Comment", TAG_COMPUTED_VALUE, TAG_FMT_UNDEFINED, length, value TSRMLS_CC); - break; - case 1: - exif_iif_add_tag(image_info, SECTION_COMMENT, "Comment", TAG_COMPUTED_VALUE, TAG_FMT_STRING, length, value); - break; - default: - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Undefined JPEG2000 comment encoding"); - break; - } - } else { - exif_iif_add_tag(image_info, SECTION_COMMENT, "Comment", TAG_COMPUTED_VALUE, TAG_FMT_UNDEFINED, 0, NULL); - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "JPEG2000 comment section too small"); - } -} -#endif -/* }}} */ - -/* {{{ exif_process_SOFn - * Process a SOFn marker. This is useful for the image dimensions */ -static void exif_process_SOFn (uchar *Data, int marker, jpeg_sof_info *result) -{ -/* 0xFF SOSn SectLen(2) Bits(1) Height(2) Width(2) Channels(1) 3*Channels (1) */ - result->bits_per_sample = Data[2]; - result->height = php_jpg_get16(Data+3); - result->width = php_jpg_get16(Data+5); - result->num_components = Data[7]; - -/* switch (marker) { - case M_SOF0: process = "Baseline"; break; - case M_SOF1: process = "Extended sequential"; break; - case M_SOF2: process = "Progressive"; break; - case M_SOF3: process = "Lossless"; break; - case M_SOF5: process = "Differential sequential"; break; - case M_SOF6: process = "Differential progressive"; break; - case M_SOF7: process = "Differential lossless"; break; - case M_SOF9: process = "Extended sequential, arithmetic coding"; break; - case M_SOF10: process = "Progressive, arithmetic coding"; break; - case M_SOF11: process = "Lossless, arithmetic coding"; break; - case M_SOF13: process = "Differential sequential, arithmetic coding"; break; - case M_SOF14: process = "Differential progressive, arithmetic coding"; break; - case M_SOF15: process = "Differential lossless, arithmetic coding"; break; - default: process = "Unknown"; break; - }*/ -} -/* }}} */ - -/* forward declarations */ -static int exif_process_IFD_in_JPEG(image_info_type *ImageInfo, char *dir_start, char *offset_base, size_t IFDlength, size_t displacement, int section_index TSRMLS_DC); -static int exif_process_IFD_TAG( image_info_type *ImageInfo, char *dir_entry, char *offset_base, size_t IFDlength, size_t displacement, int section_index, int ReadNextIFD, tag_table_type tag_table TSRMLS_DC); - -/* {{{ exif_get_markername - Get name of marker */ -#ifdef EXIF_DEBUG -static char * exif_get_markername(int marker) -{ - switch(marker) { - case 0xC0: return "SOF0"; - case 0xC1: return "SOF1"; - case 0xC2: return "SOF2"; - case 0xC3: return "SOF3"; - case 0xC4: return "DHT"; - case 0xC5: return "SOF5"; - case 0xC6: return "SOF6"; - case 0xC7: return "SOF7"; - case 0xC9: return "SOF9"; - case 0xCA: return "SOF10"; - case 0xCB: return "SOF11"; - case 0xCD: return "SOF13"; - case 0xCE: return "SOF14"; - case 0xCF: return "SOF15"; - case 0xD8: return "SOI"; - case 0xD9: return "EOI"; - case 0xDA: return "SOS"; - case 0xDB: return "DQT"; - case 0xDC: return "DNL"; - case 0xDD: return "DRI"; - case 0xDE: return "DHP"; - case 0xDF: return "EXP"; - case 0xE0: return "APP0"; - case 0xE1: return "EXIF"; - case 0xE2: return "FPIX"; - case 0xE3: return "APP3"; - case 0xE4: return "APP4"; - case 0xE5: return "APP5"; - case 0xE6: return "APP6"; - case 0xE7: return "APP7"; - case 0xE8: return "APP8"; - case 0xE9: return "APP9"; - case 0xEA: return "APP10"; - case 0xEB: return "APP11"; - case 0xEC: return "APP12"; - case 0xED: return "APP13"; - case 0xEE: return "APP14"; - case 0xEF: return "APP15"; - case 0xF0: return "JPG0"; - case 0xFD: return "JPG13"; - case 0xFE: return "COM"; - case 0x01: return "TEM"; - } - return "Unknown"; -} -#endif -/* }}} */ - -/* {{{ proto string exif_tagname(index) - Get headername for index or false if not defined */ -PHP_FUNCTION(exif_tagname) -{ - zval **p_num; - int tag, ac = ZEND_NUM_ARGS(); - char *szTemp; - - if ((ac < 1 || ac > 1) || zend_get_parameters_ex(ac, &p_num) == FAILURE) { - WRONG_PARAM_COUNT; - } - - convert_to_long_ex(p_num); - tag = Z_LVAL_PP(p_num); - szTemp = exif_get_tagname(tag, NULL, 0, tag_table_IFD TSRMLS_CC); - if (tag<0 || !szTemp || !szTemp[0]) { - RETURN_BOOL(FALSE); - } else { - RETURN_STRING(szTemp, 1) - } -} -/* }}} */ - -/* {{{ exif_ifd_make_value - * Create a value for an ifd from an info_data pointer */ -static void* exif_ifd_make_value(image_info_data *info_data, int motorola_intel TSRMLS_DC) { - size_t byte_count; - char *value_ptr, *data_ptr; - size_t i; - - image_info_value *info_value; - - byte_count = php_tiff_bytes_per_format[info_data->format] * info_data->length; - value_ptr = safe_emalloc(max(byte_count, 4), 1, 0); - memset(value_ptr, 0, 4); - if (!info_data->length) { - return value_ptr; - } - if (info_data->format == TAG_FMT_UNDEFINED || info_data->format == TAG_FMT_STRING - || (byte_count>1 && (info_data->format == TAG_FMT_BYTE || info_data->format == TAG_FMT_SBYTE)) - ) { - memmove(value_ptr, info_data->value.s, byte_count); - return value_ptr; - } else if (info_data->format == TAG_FMT_BYTE) { - *value_ptr = info_data->value.u; - return value_ptr; - } else if (info_data->format == TAG_FMT_SBYTE) { - *value_ptr = info_data->value.i; - return value_ptr; - } else { - data_ptr = value_ptr; - for(i=0; ilength; i++) { - if (info_data->length==1) { - info_value = &info_data->value; - } else { - info_value = &info_data->value.list[i]; - } - switch(info_data->format) { - case TAG_FMT_USHORT: - php_ifd_set16u(data_ptr, info_value->u, motorola_intel); - data_ptr += 2; - break; - case TAG_FMT_ULONG: - php_ifd_set32u(data_ptr, info_value->u, motorola_intel); - data_ptr += 4; - break; - case TAG_FMT_SSHORT: - php_ifd_set16u(data_ptr, info_value->i, motorola_intel); - data_ptr += 2; - break; - case TAG_FMT_SLONG: - php_ifd_set32u(data_ptr, info_value->i, motorola_intel); - data_ptr += 4; - break; - case TAG_FMT_URATIONAL: - php_ifd_set32u(data_ptr, info_value->sr.num, motorola_intel); - php_ifd_set32u(data_ptr+4, info_value->sr.den, motorola_intel); - data_ptr += 8; - break; - case TAG_FMT_SRATIONAL: - php_ifd_set32u(data_ptr, info_value->ur.num, motorola_intel); - php_ifd_set32u(data_ptr+4, info_value->ur.den, motorola_intel); - data_ptr += 8; - break; - case TAG_FMT_SINGLE: - memmove(data_ptr, &info_data->value.f, byte_count); - data_ptr += 4; - break; - case TAG_FMT_DOUBLE: - memmove(data_ptr, &info_data->value.d, byte_count); - data_ptr += 8; - break; - } - } - } - return value_ptr; -} -/* }}} */ - -/* {{{ exif_thumbnail_build - * Check and build thumbnail */ -static void exif_thumbnail_build(image_info_type *ImageInfo TSRMLS_DC) { - size_t new_size, new_move, new_value; - char *new_data; - void *value_ptr; - int i, byte_count; - image_info_list *info_list; - image_info_data *info_data; -#ifdef EXIF_DEBUG - char tagname[64]; -#endif - - if (!ImageInfo->read_thumbnail || !ImageInfo->Thumbnail.offset || !ImageInfo->Thumbnail.size) { - return; /* ignore this call */ - } -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Thumbnail: filetype = %d", ImageInfo->Thumbnail.filetype); -#endif - switch(ImageInfo->Thumbnail.filetype) { - default: - case IMAGE_FILETYPE_JPEG: - /* done */ - break; - case IMAGE_FILETYPE_TIFF_II: - case IMAGE_FILETYPE_TIFF_MM: - info_list = &ImageInfo->info_list[SECTION_THUMBNAIL]; - new_size = 8 + 2 + info_list->count * 12 + 4; -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Thumbnail: size of signature + directory(%d): 0x%02X", info_list->count, new_size); -#endif - new_value= new_size; /* offset for ifd values outside ifd directory */ - for (i=0; icount; i++) { - info_data = &info_list->list[i]; - byte_count = php_tiff_bytes_per_format[info_data->format] * info_data->length; - if (byte_count > 4) { - new_size += byte_count; - } - } - new_move = new_size; - new_data = safe_erealloc(ImageInfo->Thumbnail.data, 1, ImageInfo->Thumbnail.size, new_size); - ImageInfo->Thumbnail.data = new_data; - memmove(ImageInfo->Thumbnail.data + new_move, ImageInfo->Thumbnail.data, ImageInfo->Thumbnail.size); - ImageInfo->Thumbnail.size += new_size; - /* fill in data */ - if (ImageInfo->motorola_intel) { - memmove(new_data, "MM\x00\x2a\x00\x00\x00\x08", 8); - } else { - memmove(new_data, "II\x2a\x00\x08\x00\x00\x00", 8); - } - new_data += 8; - php_ifd_set16u(new_data, info_list->count, ImageInfo->motorola_intel); - new_data += 2; - for (i=0; icount; i++) { - info_data = &info_list->list[i]; - byte_count = php_tiff_bytes_per_format[info_data->format] * info_data->length; -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Thumbnail: process tag(x%04X=%s): %s%s (%d bytes)", info_data->tag, exif_get_tagname(info_data->tag, tagname, -12, tag_table_IFD TSRMLS_CC), (info_data->length>1)&&info_data->format!=TAG_FMT_UNDEFINED&&info_data->format!=TAG_FMT_STRING?"ARRAY OF ":"", exif_get_tagformat(info_data->format), byte_count); -#endif - if (info_data->tag==TAG_STRIP_OFFSETS || info_data->tag==TAG_JPEG_INTERCHANGE_FORMAT) { - php_ifd_set16u(new_data + 0, info_data->tag, ImageInfo->motorola_intel); - php_ifd_set16u(new_data + 2, TAG_FMT_ULONG, ImageInfo->motorola_intel); - php_ifd_set32u(new_data + 4, 1, ImageInfo->motorola_intel); - php_ifd_set32u(new_data + 8, new_move, ImageInfo->motorola_intel); - } else { - php_ifd_set16u(new_data + 0, info_data->tag, ImageInfo->motorola_intel); - php_ifd_set16u(new_data + 2, info_data->format, ImageInfo->motorola_intel); - php_ifd_set32u(new_data + 4, info_data->length, ImageInfo->motorola_intel); - value_ptr = exif_ifd_make_value(info_data, ImageInfo->motorola_intel TSRMLS_CC); - if (byte_count <= 4) { - memmove(new_data+8, value_ptr, 4); - } else { - php_ifd_set32u(new_data+8, new_value, ImageInfo->motorola_intel); -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Thumbnail: writing with value offset: 0x%04X + 0x%02X", new_value, byte_count); -#endif - memmove(ImageInfo->Thumbnail.data+new_value, value_ptr, byte_count); - new_value += byte_count; - } - efree(value_ptr); - } - new_data += 12; - } - memset(new_data, 0, 4); /* next ifd pointer */ -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Thumbnail: created"); -#endif - break; - } -} -/* }}} */ - -/* {{{ exif_thumbnail_extract - * Grab the thumbnail, corrected */ -static void exif_thumbnail_extract(image_info_type *ImageInfo, char *offset, size_t length TSRMLS_DC) { - if (ImageInfo->Thumbnail.data) { - exif_error_docref("exif_read_data#error_mult_thumb" EXIFERR_CC, ImageInfo, E_WARNING, "Multiple possible thumbnails"); - return; /* Should not happen */ - } - if (!ImageInfo->read_thumbnail) { - return; /* ignore this call */ - } - /* according to exif2.1, the thumbnail is not supposed to be greater than 64K */ - if (ImageInfo->Thumbnail.size >= 65536 - || ImageInfo->Thumbnail.size <= 0 - || ImageInfo->Thumbnail.offset <= 0 - ) { - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Illegal thumbnail size/offset"); - return; - } - /* Check to make sure we are not going to go past the ExifLength */ - if ((ImageInfo->Thumbnail.offset + ImageInfo->Thumbnail.size) > length) { - EXIF_ERRLOG_THUMBEOF(ImageInfo) - return; - } - ImageInfo->Thumbnail.data = estrndup(offset + ImageInfo->Thumbnail.offset, ImageInfo->Thumbnail.size); - exif_thumbnail_build(ImageInfo TSRMLS_CC); -} -/* }}} */ - -/* {{{ exif_process_undefined - * Copy a string/buffer in Exif header to a character string and return length of allocated buffer if any. */ -static int exif_process_undefined(char **result, char *value, size_t byte_count TSRMLS_DC) { - /* we cannot use strlcpy - here the problem is that we have to copy NUL - * chars up to byte_count, we also have to add a single NUL character to - * force end of string. - * estrndup does not return length - */ - if (byte_count) { - (*result) = estrndup(value, byte_count); /* NULL @ byte_count!!! */ - return byte_count+1; - } - return 0; -} -/* }}} */ - -/* {{{ exif_process_string_raw - * Copy a string in Exif header to a character string returns length of allocated buffer if any. */ -#if !EXIF_USE_MBSTRING -static int exif_process_string_raw(char **result, char *value, size_t byte_count) { - /* we cannot use strlcpy - here the problem is that we have to copy NUL - * chars up to byte_count, we also have to add a single NUL character to - * force end of string. - */ - if (byte_count) { - (*result) = safe_emalloc(byte_count, 1, 1); - memcpy(*result, value, byte_count); - (*result)[byte_count] = '\0'; - return byte_count+1; - } - return 0; -} -#endif -/* }}} */ - -/* {{{ exif_process_string - * Copy a string in Exif header to a character string and return length of allocated buffer if any. - * In contrast to exif_process_string this function does allways return a string buffer */ -static int exif_process_string(char **result, char *value, size_t byte_count TSRMLS_DC) { - /* we cannot use strlcpy - here the problem is that we cannot use strlen to - * determin length of string and we cannot use strlcpy with len=byte_count+1 - * because then we might get into an EXCEPTION if we exceed an allocated - * memory page...so we use php_strnlen in conjunction with memcpy and add the NUL - * char. - * estrdup would sometimes allocate more memory and does not return length - */ - if ((byte_count=php_strnlen(value, byte_count)) > 0) { - return exif_process_undefined(result, value, byte_count TSRMLS_CC); - } - (*result) = estrndup("", 1); /* force empty string */ - return byte_count+1; -} -/* }}} */ - -/* {{{ exif_process_user_comment - * Process UserComment in IFD. */ -static int exif_process_user_comment(image_info_type *ImageInfo, char **pszInfoPtr, char **pszEncoding, char *szValuePtr, int ByteCount TSRMLS_DC) -{ - int a; - -#if EXIF_USE_MBSTRING - char *decode; - size_t len;; -#endif - - *pszEncoding = NULL; - /* Copy the comment */ - if (ByteCount>=8) { - if (!memcmp(szValuePtr, "UNICODE\0", 8)) { - *pszEncoding = estrdup((const char*)szValuePtr); - szValuePtr = szValuePtr+8; - ByteCount -= 8; -#if EXIF_USE_MBSTRING - /* First try to detect BOM: ZERO WIDTH NOBREAK SPACE (FEFF 16) - * since we have no encoding support for the BOM yet we skip that. - */ - if (!memcmp(szValuePtr, "\xFE\xFF", 2)) { - decode = "UCS-2BE"; - szValuePtr = szValuePtr+2; - ByteCount -= 2; - } else if (!memcmp(szValuePtr, "\xFF\xFE", 2)) { - decode = "UCS-2LE"; - szValuePtr = szValuePtr+2; - ByteCount -= 2; - } else if (ImageInfo->motorola_intel) { - decode = ImageInfo->decode_unicode_be; - } else { - decode = ImageInfo->decode_unicode_le; - } - *pszInfoPtr = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_unicode, decode, &len TSRMLS_CC); - return len; -#else - return exif_process_string_raw(pszInfoPtr, szValuePtr, ByteCount); -#endif - } else - if (!memcmp(szValuePtr, "ASCII\0\0\0", 8)) { - *pszEncoding = estrdup((const char*)szValuePtr); - szValuePtr = szValuePtr+8; - ByteCount -= 8; - } else - if (!memcmp(szValuePtr, "JIS\0\0\0\0\0", 8)) { - /* JIS should be tanslated to MB or we leave it to the user - leave it to the user */ - *pszEncoding = estrdup((const char*)szValuePtr); - szValuePtr = szValuePtr+8; - ByteCount -= 8; -#if EXIF_USE_MBSTRING - if (ImageInfo->motorola_intel) { - *pszInfoPtr = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_jis, ImageInfo->decode_jis_be, &len TSRMLS_CC); - } else { - *pszInfoPtr = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_jis, ImageInfo->decode_jis_le, &len TSRMLS_CC); - } - return len; -#else - return exif_process_string_raw(pszInfoPtr, szValuePtr, ByteCount); -#endif - } else - if (!memcmp(szValuePtr, "\0\0\0\0\0\0\0\0", 8)) { - /* 8 NULL means undefined and should be ASCII... */ - *pszEncoding = estrdup("UNDEFINED"); - szValuePtr = szValuePtr+8; - ByteCount -= 8; - } - } - - /* Olympus has this padded with trailing spaces. Remove these first. */ - if (ByteCount>0) { - for (a=ByteCount-1;a && szValuePtr[a]==' ';a--) { - (szValuePtr)[a] = '\0'; - } - } - - /* normal text without encoding */ - exif_process_string(pszInfoPtr, szValuePtr, ByteCount TSRMLS_CC); - return strlen(*pszInfoPtr); -} -/* }}} */ - -/* {{{ exif_process_unicode - * Process unicode field in IFD. */ -static int exif_process_unicode(image_info_type *ImageInfo, xp_field_type *xp_field, int tag, char *szValuePtr, int ByteCount TSRMLS_DC) -{ - xp_field->tag = tag; - - /* Copy the comment */ -#if EXIF_USE_MBSTRING -/* What if MS supports big-endian with XP? */ -/* if (ImageInfo->motorola_intel) { - xp_field->value = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_unicode, ImageInfo->decode_unicode_be, &xp_field->size TSRMLS_CC); - } else { - xp_field->value = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_unicode, ImageInfo->decode_unicode_le, &xp_field->size TSRMLS_CC); - }*/ - xp_field->value = php_mb_convert_encoding(szValuePtr, ByteCount, ImageInfo->encode_unicode, ImageInfo->decode_unicode_le, &xp_field->size TSRMLS_CC); - return xp_field->size; -#else - xp_field->size = exif_process_string_raw(&xp_field->value, szValuePtr, ByteCount); - return xp_field->size; -#endif -} -/* }}} */ - -/* {{{ exif_process_IFD_in_MAKERNOTE - * Process nested IFDs directories in Maker Note. */ -static int exif_process_IFD_in_MAKERNOTE(image_info_type *ImageInfo, char * value_ptr, int value_len, char *offset_base, size_t IFDlength, size_t displacement TSRMLS_DC) -{ - int de, i=0, section_index = SECTION_MAKERNOTE; - int NumDirEntries, old_motorola_intel, offset_diff; - const maker_note_type *maker_note; - char *dir_start; - - for (i=0; i<=sizeof(maker_note_array)/sizeof(maker_note_type); i++) { - if (i==sizeof(maker_note_array)/sizeof(maker_note_type)) - return FALSE; - maker_note = maker_note_array+i; - - /*exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "check (%s,%s)", maker_note->make?maker_note->make:"", maker_note->model?maker_note->model:"");*/ - if (maker_note->make && (!ImageInfo->make || strcmp(maker_note->make, ImageInfo->make))) - continue; - if (maker_note->model && (!ImageInfo->model || strcmp(maker_note->model, ImageInfo->model))) - continue; - if (maker_note->id_string && strncmp(maker_note->id_string, value_ptr, maker_note->id_string_len)) - continue; - break; - } - - dir_start = value_ptr + maker_note->offset; - -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Process %s @x%04X + 0x%04X=%d: %s", exif_get_sectionname(section_index), (int)dir_start-(int)offset_base+maker_note->offset+displacement, value_len, value_len, exif_char_dump(value_ptr, value_len, (int)dir_start-(int)offset_base+maker_note->offset+displacement)); -#endif - - ImageInfo->sections_found |= FOUND_MAKERNOTE; - - old_motorola_intel = ImageInfo->motorola_intel; - switch (maker_note->byte_order) { - case MN_ORDER_INTEL: - ImageInfo->motorola_intel = 0; - break; - case MN_ORDER_MOTOROLA: - ImageInfo->motorola_intel = 1; - break; - default: - case MN_ORDER_NORMAL: - break; - } - - NumDirEntries = php_ifd_get16u(dir_start, ImageInfo->motorola_intel); - - switch (maker_note->offset_mode) { - case MN_OFFSET_MAKER: - offset_base = value_ptr; - break; - case MN_OFFSET_GUESS: - offset_diff = 2 + NumDirEntries*12 + 4 - php_ifd_get32u(dir_start+10, ImageInfo->motorola_intel); -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Using automatic offset correction: 0x%04X", ((int)dir_start-(int)offset_base+maker_note->offset+displacement) + offset_diff); -#endif - offset_base = value_ptr + offset_diff; - break; - default: - case MN_OFFSET_NORMAL: - break; - } - - if ((2+NumDirEntries*12) > value_len) { - exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Illegal IFD size: 2 + x%04X*12 = x%04X > x%04X", NumDirEntries, 2+NumDirEntries*12, value_len); - return FALSE; - } - - for (de=0;detag_table TSRMLS_CC)) { - return FALSE; - } - } - ImageInfo->motorola_intel = old_motorola_intel; -/* NextDirOffset (must be NULL) = php_ifd_get32u(dir_start+2+12*de, ImageInfo->motorola_intel);*/ -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Subsection %s done", exif_get_sectionname(SECTION_MAKERNOTE)); -#endif - return TRUE; -} -/* }}} */ - -/* {{{ exif_process_IFD_TAG - * Process one of the nested IFDs directories. */ -static int exif_process_IFD_TAG(image_info_type *ImageInfo, char *dir_entry, char *offset_base, size_t IFDlength, size_t displacement, int section_index, int ReadNextIFD, tag_table_type tag_table TSRMLS_DC) -{ - size_t length; - int tag, format, components; - char *value_ptr, tagname[64], cbuf[32], *outside=NULL; - size_t byte_count, offset_val, fpos, fgot; - xp_field_type *tmp_xp; -#ifdef EXIF_DEBUG - char *dump_data; - int dump_free; -#endif /* EXIF_DEBUG */ - - /* Protect against corrupt headers */ - if (ImageInfo->ifd_nesting_level > MAX_IFD_NESTING_LEVEL) { - exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "corrupt EXIF header: maximum directory nesting level reached"); - return FALSE; - } - ImageInfo->ifd_nesting_level++; - - tag = php_ifd_get16u(dir_entry, ImageInfo->motorola_intel); - format = php_ifd_get16u(dir_entry+2, ImageInfo->motorola_intel); - components = php_ifd_get32u(dir_entry+4, ImageInfo->motorola_intel); - - if (!format || format > NUM_FORMATS) { - /* (-1) catches illegal zero case as unsigned underflows to positive large. */ - exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Process tag(x%04X=%s): Illegal format code 0x%04X, suppose BYTE", tag, exif_get_tagname(tag, tagname, -12, tag_table TSRMLS_CC), format); - format = TAG_FMT_BYTE; - /*return TRUE;*/ - } - - byte_count = components * php_tiff_bytes_per_format[format]; - - if ((ssize_t)byte_count < 0) { - exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Process tag(x%04X=%s): Illegal byte_count(%ld)", tag, exif_get_tagname(tag, tagname, -12, tag_table TSRMLS_CC), byte_count); - return FALSE; - } - - if (byte_count > 4) { - offset_val = php_ifd_get32u(dir_entry+8, ImageInfo->motorola_intel); - /* If its bigger than 4 bytes, the dir entry contains an offset. */ - value_ptr = offset_base+offset_val; - if (offset_val+byte_count > IFDlength || value_ptr < dir_entry) { - /* - // It is important to check for IMAGE_FILETYPE_TIFF - // JPEG does not use absolute pointers instead its pointers are relative to the start - // of the TIFF header in APP1 section. - */ - if (offset_val+byte_count>ImageInfo->FileSize || (ImageInfo->FileType!=IMAGE_FILETYPE_TIFF_II && ImageInfo->FileType!=IMAGE_FILETYPE_TIFF_MM && ImageInfo->FileType!=IMAGE_FILETYPE_JPEG)) { - if (value_ptr < dir_entry) { - /* we can read this if offset_val > 0 */ - /* some files have their values in other parts of the file */ - exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Process tag(x%04X=%s): Illegal pointer offset(x%04X < x%04X)", tag, exif_get_tagname(tag, tagname, -12, tag_table TSRMLS_CC), offset_val, dir_entry); - } else { - /* this is for sure not allowed */ - /* exception are IFD pointers */ - exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Process tag(x%04X=%s): Illegal pointer offset(x%04X + x%04X = x%04X > x%04X)", tag, exif_get_tagname(tag, tagname, -12, tag_table TSRMLS_CC), offset_val, byte_count, offset_val+byte_count, IFDlength); - } - return TRUE; - } - if (byte_count>sizeof(cbuf)) { - /* mark as outside range and get buffer */ - value_ptr = safe_emalloc(byte_count, 1, 0); - outside = value_ptr; - } else { - /* - // in most cases we only access a small range so - // it is faster to use a static buffer there - // BUT it offers also the possibility to have - // pointers read without the need to free them - // explicitley before returning. - */ - memset(&cbuf, 0, sizeof(cbuf)); - value_ptr = cbuf; - } - - fpos = php_stream_tell(ImageInfo->infile); - php_stream_seek(ImageInfo->infile, offset_val, SEEK_SET); - fgot = php_stream_tell(ImageInfo->infile); - if (fgot!=offset_val) { - EFREE_IF(outside); - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Wrong file pointer: 0x%08X != 0x08X", fgot, offset_val); - return FALSE; - } - fgot = php_stream_read(ImageInfo->infile, value_ptr, byte_count); - php_stream_seek(ImageInfo->infile, fpos, SEEK_SET); - if (fgotsections_found |= FOUND_ANY_TAG; -#ifdef EXIF_DEBUG - dump_data = exif_dump_data(&dump_free, format, components, length, ImageInfo->motorola_intel, value_ptr TSRMLS_CC); - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Process tag(x%04X=%s,@x%04X + x%04X(=%d)): %s%s %s", tag, exif_get_tagname(tag, tagname, -12, tag_table TSRMLS_CC), offset_val+displacement, byte_count, byte_count, (components>1)&&format!=TAG_FMT_UNDEFINED&&format!=TAG_FMT_STRING?"ARRAY OF ":"", exif_get_tagformat(format), dump_data); - if (dump_free) { - efree(dump_data); - } -#endif - if (section_index==SECTION_THUMBNAIL) { - if (!ImageInfo->Thumbnail.data) { - switch(tag) { - case TAG_IMAGEWIDTH: - case TAG_COMP_IMAGE_WIDTH: - ImageInfo->Thumbnail.width = exif_convert_any_to_int(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC); - break; - - case TAG_IMAGEHEIGHT: - case TAG_COMP_IMAGE_HEIGHT: - ImageInfo->Thumbnail.height = exif_convert_any_to_int(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC); - break; - - case TAG_STRIP_OFFSETS: - case TAG_JPEG_INTERCHANGE_FORMAT: - /* accept both formats */ - ImageInfo->Thumbnail.offset = exif_convert_any_to_int(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC); - break; - - case TAG_STRIP_BYTE_COUNTS: - if (ImageInfo->FileType == IMAGE_FILETYPE_TIFF_II || ImageInfo->FileType == IMAGE_FILETYPE_TIFF_MM) { - ImageInfo->Thumbnail.filetype = ImageInfo->FileType; - } else { - /* motorola is easier to read */ - ImageInfo->Thumbnail.filetype = IMAGE_FILETYPE_TIFF_MM; - } - ImageInfo->Thumbnail.size = exif_convert_any_to_int(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC); - break; - - case TAG_JPEG_INTERCHANGE_FORMAT_LEN: - if (ImageInfo->Thumbnail.filetype == IMAGE_FILETYPE_UNKNOWN) { - ImageInfo->Thumbnail.filetype = IMAGE_FILETYPE_JPEG; - ImageInfo->Thumbnail.size = exif_convert_any_to_int(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC); - } - break; - } - } - } else { - if (section_index==SECTION_IFD0 || section_index==SECTION_EXIF) - switch(tag) { - case TAG_COPYRIGHT: - /* check for " NUL NUL" */ - if (byte_count>1 && (length=php_strnlen(value_ptr, byte_count)) > 0) { - if (lengthCopyrightPhotographer = estrdup(value_ptr); - ImageInfo->CopyrightEditor = estrdup(value_ptr+length+1); - spprintf(&ImageInfo->Copyright, 0, "%s, %s", value_ptr, value_ptr+length+1); - /* format = TAG_FMT_UNDEFINED; this musn't be ASCII */ - /* but we are not supposed to change this */ - /* keep in mind that image_info does not store editor value */ - } else { - ImageInfo->Copyright = estrdup(value_ptr); - } - } - break; - - case TAG_USERCOMMENT: - ImageInfo->UserCommentLength = exif_process_user_comment(ImageInfo, &(ImageInfo->UserComment), &(ImageInfo->UserCommentEncoding), value_ptr, byte_count TSRMLS_CC); - break; - - case TAG_XP_TITLE: - case TAG_XP_COMMENTS: - case TAG_XP_AUTHOR: - case TAG_XP_KEYWORDS: - case TAG_XP_SUBJECT: - tmp_xp = (xp_field_type*)safe_erealloc(ImageInfo->xp_fields.list, (ImageInfo->xp_fields.count+1), sizeof(xp_field_type), 0); - ImageInfo->sections_found |= FOUND_WINXP; - ImageInfo->xp_fields.list = tmp_xp; - ImageInfo->xp_fields.count++; - exif_process_unicode(ImageInfo, &(ImageInfo->xp_fields.list[ImageInfo->xp_fields.count-1]), tag, value_ptr, byte_count TSRMLS_CC); - break; - - case TAG_FNUMBER: - /* Simplest way of expressing aperture, so I trust it the most. - (overwrite previously computed value if there is one) */ - ImageInfo->ApertureFNumber = (float)exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC); - break; - - case TAG_APERTURE: - case TAG_MAX_APERTURE: - /* More relevant info always comes earlier, so only use this field if we don't - have appropriate aperture information yet. */ - if (ImageInfo->ApertureFNumber == 0) { - ImageInfo->ApertureFNumber - = (float)exp(exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC)*log(2)*0.5); - } - break; - - case TAG_SHUTTERSPEED: - /* More complicated way of expressing exposure time, so only use - this value if we don't already have it from somewhere else. - SHUTTERSPEED comes after EXPOSURE TIME - */ - if (ImageInfo->ExposureTime == 0) { - ImageInfo->ExposureTime - = (float)(1/exp(exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC)*log(2))); - } - break; - case TAG_EXPOSURETIME: - ImageInfo->ExposureTime = -1; - break; - - case TAG_COMP_IMAGE_WIDTH: - ImageInfo->ExifImageWidth = exif_convert_any_to_int(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC); - break; - - case TAG_FOCALPLANE_X_RES: - ImageInfo->FocalplaneXRes = exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC); - break; - - case TAG_SUBJECT_DISTANCE: - /* Inidcates the distacne the autofocus camera is focused to. - Tends to be less accurate as distance increases. */ - ImageInfo->Distance = (float)exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC); - break; - - case TAG_FOCALPLANE_RESOLUTION_UNIT: - switch((int)exif_convert_any_format(value_ptr, format, ImageInfo->motorola_intel TSRMLS_CC)) { - case 1: ImageInfo->FocalplaneUnits = 25.4; break; /* inch */ - case 2: - /* According to the information I was using, 2 measn meters. - But looking at the Cannon powershot's files, inches is the only - sensible value. */ - ImageInfo->FocalplaneUnits = 25.4; - break; - - case 3: ImageInfo->FocalplaneUnits = 10; break; /* centimeter */ - case 4: ImageInfo->FocalplaneUnits = 1; break; /* milimeter */ - case 5: ImageInfo->FocalplaneUnits = .001; break; /* micrometer */ - } - break; - - case TAG_SUB_IFD: - if (format==TAG_FMT_IFD) { - /* If this is called we are either in a TIFFs thumbnail or a JPEG where we cannot handle it */ - /* TIFF thumbnail: our data structure cannot store a thumbnail of a thumbnail */ - /* JPEG do we have the data area and what to do with it */ - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Skip SUB IFD"); - } - break; - - case TAG_MAKE: - ImageInfo->make = estrdup(value_ptr); - break; - case TAG_MODEL: - ImageInfo->model = estrdup(value_ptr); - break; - - case TAG_MAKER_NOTE: - exif_process_IFD_in_MAKERNOTE(ImageInfo, value_ptr, byte_count, offset_base, IFDlength, displacement TSRMLS_CC); - break; - - case TAG_EXIF_IFD_POINTER: - case TAG_GPS_IFD_POINTER: - case TAG_INTEROP_IFD_POINTER: - if (ReadNextIFD) { - char *Subdir_start; - int sub_section_index = 0; - switch(tag) { - case TAG_EXIF_IFD_POINTER: -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Found EXIF"); -#endif - ImageInfo->sections_found |= FOUND_EXIF; - sub_section_index = SECTION_EXIF; - break; - case TAG_GPS_IFD_POINTER: -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Found GPS"); -#endif - ImageInfo->sections_found |= FOUND_GPS; - sub_section_index = SECTION_GPS; - break; - case TAG_INTEROP_IFD_POINTER: -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Found INTEROPERABILITY"); -#endif - ImageInfo->sections_found |= FOUND_INTEROP; - sub_section_index = SECTION_INTEROP; - break; - } - Subdir_start = offset_base + php_ifd_get32u(value_ptr, ImageInfo->motorola_intel); - if (Subdir_start < offset_base || Subdir_start > offset_base+IFDlength) { - exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Illegal IFD Pointer"); - return FALSE; - } - if (!exif_process_IFD_in_JPEG(ImageInfo, Subdir_start, offset_base, IFDlength, displacement, sub_section_index TSRMLS_CC)) { - return FALSE; - } -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Subsection %s done", exif_get_sectionname(sub_section_index)); -#endif - } - } - } - exif_iif_add_tag(ImageInfo, section_index, exif_get_tagname(tag, tagname, sizeof(tagname), tag_table TSRMLS_CC), tag, format, components, value_ptr TSRMLS_CC); - EFREE_IF(outside); - return TRUE; -} -/* }}} */ - -/* {{{ exif_process_IFD_in_JPEG - * Process one of the nested IFDs directories. */ -static int exif_process_IFD_in_JPEG(image_info_type *ImageInfo, char *dir_start, char *offset_base, size_t IFDlength, size_t displacement, int section_index TSRMLS_DC) -{ - int de; - int NumDirEntries; - int NextDirOffset; - -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Process %s (x%04X(=%d))", exif_get_sectionname(section_index), IFDlength, IFDlength); -#endif - - ImageInfo->sections_found |= FOUND_IFD0; - - NumDirEntries = php_ifd_get16u(dir_start, ImageInfo->motorola_intel); - - if ((dir_start+2+NumDirEntries*12) > (offset_base+IFDlength)) { - exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Illegal IFD size: x%04X + 2 + x%04X*12 = x%04X > x%04X", (int)((size_t)dir_start+2-(size_t)offset_base), NumDirEntries, (int)((size_t)dir_start+2+NumDirEntries*12-(size_t)offset_base), IFDlength); - return FALSE; - } - - for (de=0;demotorola_intel); - if (NextDirOffset) { - /* the next line seems false but here IFDlength means length of all IFDs */ - if (offset_base + NextDirOffset < offset_base || offset_base + NextDirOffset > offset_base+IFDlength) { - exif_error_docref("exif_read_data#error_ifd" EXIFERR_CC, ImageInfo, E_WARNING, "Illegal IFD offset"); - return FALSE; - } - /* That is the IFD for the first thumbnail */ -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Expect next IFD to be thumbnail"); -#endif - if (exif_process_IFD_in_JPEG(ImageInfo, offset_base + NextDirOffset, offset_base, IFDlength, displacement, SECTION_THUMBNAIL TSRMLS_CC)) { -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Thumbnail size: 0x%04X", ImageInfo->Thumbnail.size); -#endif - if (ImageInfo->Thumbnail.filetype != IMAGE_FILETYPE_UNKNOWN - && ImageInfo->Thumbnail.size - && ImageInfo->Thumbnail.offset - && ImageInfo->read_thumbnail - ) { - exif_thumbnail_extract(ImageInfo, offset_base, IFDlength TSRMLS_CC); - } - return TRUE; - } else { - return FALSE; - } - } - return TRUE; -} -/* }}} */ - -/* {{{ exif_process_TIFF_in_JPEG - Process a TIFF header in a JPEG file -*/ -static void exif_process_TIFF_in_JPEG(image_info_type *ImageInfo, char *CharBuf, size_t length, size_t displacement TSRMLS_DC) -{ - unsigned exif_value_2a, offset_of_ifd; - - /* set the thumbnail stuff to nothing so we can test to see if they get set up */ - if (memcmp(CharBuf, "II", 2) == 0) { - ImageInfo->motorola_intel = 0; - } else if (memcmp(CharBuf, "MM", 2) == 0) { - ImageInfo->motorola_intel = 1; - } else { - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Invalid TIFF alignment marker"); - return; - } - - /* Check the next two values for correctness. */ - exif_value_2a = php_ifd_get16u(CharBuf+2, ImageInfo->motorola_intel); - offset_of_ifd = php_ifd_get32u(CharBuf+4, ImageInfo->motorola_intel); - if ( exif_value_2a != 0x2a || offset_of_ifd < 0x08) { - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Invalid TIFF start (1)"); - return; - } - - ImageInfo->sections_found |= FOUND_IFD0; - /* First directory starts at offset 8. Offsets starts at 0. */ - exif_process_IFD_in_JPEG(ImageInfo, CharBuf+offset_of_ifd, CharBuf, length/*-14*/, displacement, SECTION_IFD0 TSRMLS_CC); - -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Process TIFF in JPEG done"); -#endif - - /* Compute the CCD width, in milimeters. */ - if (ImageInfo->FocalplaneXRes != 0) { - ImageInfo->CCDWidth = (float)(ImageInfo->ExifImageWidth * ImageInfo->FocalplaneUnits / ImageInfo->FocalplaneXRes); - } -} -/* }}} */ - -/* {{{ exif_process_APP1 - Process an JPEG APP1 block marker - Describes all the drivel that most digital cameras include... -*/ -static void exif_process_APP1(image_info_type *ImageInfo, char *CharBuf, size_t length, size_t displacement TSRMLS_DC) -{ - /* Check the APP1 for Exif Identifier Code */ - static const uchar ExifHeader[] = {0x45, 0x78, 0x69, 0x66, 0x00, 0x00}; - if (memcmp(CharBuf+2, ExifHeader, 6)) { - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Incorrect APP1 Exif Identifier Code"); - return; - } - exif_process_TIFF_in_JPEG(ImageInfo, CharBuf + 8, length - 8, displacement+8 TSRMLS_CC); -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Process APP1/EXIF done"); -#endif -} -/* }}} */ - -/* {{{ exif_process_APP12 - Process an JPEG APP12 block marker used by OLYMPUS -*/ -static void exif_process_APP12(image_info_type *ImageInfo, char *buffer, size_t length TSRMLS_DC) -{ - size_t l1, l2=0; - - if ((l1 = php_strnlen(buffer+2, length-2)) > 0) { - exif_iif_add_tag(ImageInfo, SECTION_APP12, "Company", TAG_NONE, TAG_FMT_STRING, l1, buffer+2 TSRMLS_CC); - if (length > 2+l1+1) { - l2 = php_strnlen(buffer+2+l1+1, length-2-l1+1); - exif_iif_add_tag(ImageInfo, SECTION_APP12, "Info", TAG_NONE, TAG_FMT_STRING, l2, buffer+2+l1+1 TSRMLS_CC); - } - } -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Process section APP12 with l1=%d, l2=%d done", l1, l2); -#endif -} -/* }}} */ - -/* {{{ exif_scan_JPEG_header - * Parse the marker stream until SOS or EOI is seen; */ -static int exif_scan_JPEG_header(image_info_type *ImageInfo TSRMLS_DC) -{ - int section, sn; - int marker = 0, last_marker = M_PSEUDO, comment_correction=1; - unsigned int ll, lh; - uchar *Data; - size_t fpos, size, got, itemlen; - jpeg_sof_info sof_info; - - for(section=0;;section++) { -#ifdef EXIF_DEBUG - fpos = php_stream_tell(ImageInfo->infile); - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Needing section %d @ 0x%08X", ImageInfo->file.count, fpos); -#endif - - /* get marker byte, swallowing possible padding */ - /* some software does not count the length bytes of COM section */ - /* one company doing so is very much envolved in JPEG... so we accept too */ - if (last_marker==M_COM && comment_correction) { - comment_correction = 2; - } - do { - if ((marker = php_stream_getc(ImageInfo->infile)) == EOF) { - EXIF_ERRLOG_CORRUPT(ImageInfo) - return FALSE; - } - if (last_marker==M_COM && comment_correction>0) { - if (marker!=0xFF) { - marker = 0xff; - comment_correction--; - } else { - last_marker = M_PSEUDO; /* stop skipping 0 for M_COM */ - } - } - } while (marker == 0xff); - if (last_marker==M_COM && !comment_correction) { - exif_error_docref("exif_read_data#error_mcom" EXIFERR_CC, ImageInfo, E_NOTICE, "Image has corrupt COM section: some software set wrong length information"); - } - if (last_marker==M_COM && comment_correction) - return M_EOI; /* ah illegal: char after COM section not 0xFF */ - - fpos = php_stream_tell(ImageInfo->infile); - - if (marker == 0xff) { - /* 0xff is legal padding, but if we get that many, something's wrong. */ - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "To many padding bytes"); - return FALSE; - } - - /* Read the length of the section. */ - lh = php_stream_getc(ImageInfo->infile); - ll = php_stream_getc(ImageInfo->infile); - - itemlen = (lh << 8) | ll; - - if (itemlen < 2) { -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "%s, Section length: 0x%02X%02X", EXIF_ERROR_CORRUPT, lh, ll); -#else - EXIF_ERRLOG_CORRUPT(ImageInfo) -#endif - return FALSE; - } - - sn = exif_file_sections_add(ImageInfo, marker, itemlen+1, NULL); - Data = ImageInfo->file.list[sn].data; - - /* Store first two pre-read bytes. */ - Data[0] = (uchar)lh; - Data[1] = (uchar)ll; - - got = php_stream_read(ImageInfo->infile, (char*)(Data+2), itemlen-2); /* Read the whole section. */ - if (got != itemlen-2) { - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Error reading from file: got=x%04X(=%d) != itemlen-2=x%04X(=%d)", got, got, itemlen-2, itemlen-2); - return FALSE; - } - -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Process section(x%02X=%s) @ x%04X + x%04X(=%d)", marker, exif_get_markername(marker), fpos, itemlen, itemlen); -#endif - switch(marker) { - case M_SOS: /* stop before hitting compressed data */ - /* If reading entire image is requested, read the rest of the data. */ - if (ImageInfo->read_all) { - /* Determine how much file is left. */ - fpos = php_stream_tell(ImageInfo->infile); - size = ImageInfo->FileSize - fpos; - sn = exif_file_sections_add(ImageInfo, M_PSEUDO, size, NULL); - Data = ImageInfo->file.list[sn].data; - got = php_stream_read(ImageInfo->infile, (char*)Data, size); - if (got != size) { - EXIF_ERRLOG_FILEEOF(ImageInfo) - return FALSE; - } - } - return TRUE; - - case M_EOI: /* in case it's a tables-only JPEG stream */ - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "No image in jpeg!"); - return (ImageInfo->sections_found&(~FOUND_COMPUTED)) ? TRUE : FALSE; - - case M_COM: /* Comment section */ - exif_process_COM(ImageInfo, (char *)Data, itemlen TSRMLS_CC); - break; - - case M_EXIF: - if (!(ImageInfo->sections_found&FOUND_IFD0)) { - /*ImageInfo->sections_found |= FOUND_EXIF;*/ - /* Seen files from some 'U-lead' software with Vivitar scanner - that uses marker 31 later in the file (no clue what for!) */ - exif_process_APP1(ImageInfo, (char *)Data, itemlen, fpos TSRMLS_CC); - } - break; - - case M_APP12: - exif_process_APP12(ImageInfo, (char *)Data, itemlen TSRMLS_CC); - break; - - - case M_SOF0: - case M_SOF1: - case M_SOF2: - case M_SOF3: - case M_SOF5: - case M_SOF6: - case M_SOF7: - case M_SOF9: - case M_SOF10: - case M_SOF11: - case M_SOF13: - case M_SOF14: - case M_SOF15: - exif_process_SOFn(Data, marker, &sof_info); - ImageInfo->Width = sof_info.width; - ImageInfo->Height = sof_info.height; - if (sof_info.num_components == 3) { - ImageInfo->IsColor = 1; - } else { - ImageInfo->IsColor = 0; - } - break; - default: - /* skip any other marker silently. */ - break; - } - - /* keep track of last marker */ - last_marker = marker; - } -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Done"); -#endif - return TRUE; -} -/* }}} */ - -/* {{{ exif_scan_thumbnail - * scan JPEG in thumbnail (memory) */ -static int exif_scan_thumbnail(image_info_type *ImageInfo TSRMLS_DC) -{ - uchar c, *data = (uchar*)ImageInfo->Thumbnail.data; - int n, marker; - size_t length=2, pos=0; - jpeg_sof_info sof_info; - - if (!data) { - return FALSE; /* nothing to do here */ - } - if (memcmp(data, "\xFF\xD8\xFF", 3)) { - if (!ImageInfo->Thumbnail.width && !ImageInfo->Thumbnail.height) { - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Thumbnail is not a JPEG image"); - } - return FALSE; - } - for (;;) { - pos += length; - if (pos>=ImageInfo->Thumbnail.size) - return FALSE; - c = data[pos++]; - if (pos>=ImageInfo->Thumbnail.size) - return FALSE; - if (c != 0xFF) { - return FALSE; - } - n = 8; - while ((c = data[pos++]) == 0xFF && n--) { - if (pos+3>=ImageInfo->Thumbnail.size) - return FALSE; - /* +3 = pos++ of next check when reaching marker + 2 bytes for length */ - } - if (c == 0xFF) - return FALSE; - marker = c; - length = php_jpg_get16(data+pos); - if (pos+length>=ImageInfo->Thumbnail.size) { - return FALSE; - } -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Thumbnail: process section(x%02X=%s) @ x%04X + x%04X", marker, exif_get_markername(marker), pos, length); -#endif - switch (marker) { - case M_SOF0: - case M_SOF1: - case M_SOF2: - case M_SOF3: - case M_SOF5: - case M_SOF6: - case M_SOF7: - case M_SOF9: - case M_SOF10: - case M_SOF11: - case M_SOF13: - case M_SOF14: - case M_SOF15: - /* handle SOFn block */ - exif_process_SOFn(data+pos, marker, &sof_info); - ImageInfo->Thumbnail.height = sof_info.height; - ImageInfo->Thumbnail.width = sof_info.width; -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Thumbnail: size: %d * %d", sof_info.width, sof_info.height); -#endif - return TRUE; - - case M_SOS: - case M_EOI: - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Could not compute size of thumbnail"); - return FALSE; - break; - - default: - /* just skip */ - break; - } - } - - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Could not compute size of thumbnail"); - return FALSE; -} -/* }}} */ - -/* {{{ exif_process_IFD_in_TIFF - * Parse the TIFF header; */ -static int exif_process_IFD_in_TIFF(image_info_type *ImageInfo, size_t dir_offset, int section_index TSRMLS_DC) -{ - int i, sn, num_entries, sub_section_index = 0; - unsigned char *dir_entry; - char tagname[64]; - size_t ifd_size, dir_size, entry_offset, next_offset, entry_length, entry_value=0, fgot; - int entry_tag , entry_type; - tag_table_type tag_table = exif_get_tag_table(section_index); - - if (ImageInfo->FileSize >= dir_offset+2) { - sn = exif_file_sections_add(ImageInfo, M_PSEUDO, 2, NULL); -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Read from TIFF: filesize(x%04X), IFD dir(x%04X + x%04X)", ImageInfo->FileSize, dir_offset, 2); -#endif - php_stream_seek(ImageInfo->infile, dir_offset, SEEK_SET); /* we do not know the order of sections */ - php_stream_read(ImageInfo->infile, (char*)ImageInfo->file.list[sn].data, 2); - num_entries = php_ifd_get16u(ImageInfo->file.list[sn].data, ImageInfo->motorola_intel); - dir_size = 2/*num dir entries*/ +12/*length of entry*/*num_entries +4/* offset to next ifd (points to thumbnail or NULL)*/; - if (ImageInfo->FileSize >= dir_offset+dir_size) { -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Read from TIFF: filesize(x%04X), IFD dir(x%04X + x%04X), IFD entries(%d)", ImageInfo->FileSize, dir_offset+2, dir_size-2, num_entries); -#endif - if (exif_file_sections_realloc(ImageInfo, sn, dir_size TSRMLS_CC)) { - return FALSE; - } - php_stream_read(ImageInfo->infile, (char*)(ImageInfo->file.list[sn].data+2), dir_size-2); - /*exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Dump: %s", exif_char_dump(ImageInfo->file.list[sn].data, dir_size, 0));*/ - next_offset = php_ifd_get32u(ImageInfo->file.list[sn].data + dir_size - 4, ImageInfo->motorola_intel); -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Read from TIFF done, next offset x%04X", next_offset); -#endif - /* now we have the directory we can look how long it should be */ - ifd_size = dir_size; - for(i=0;ifile.list[sn].data+2+i*12; - entry_tag = php_ifd_get16u(dir_entry+0, ImageInfo->motorola_intel); - entry_type = php_ifd_get16u(dir_entry+2, ImageInfo->motorola_intel); - if (entry_type > NUM_FORMATS) { - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Read from TIFF: tag(0x%04X,%12s): Illegal format code 0x%04X, switching to BYTE", entry_tag, exif_get_tagname(entry_tag, tagname, -12, tag_table TSRMLS_CC), entry_type); - /* Since this is repeated in exif_process_IFD_TAG make it a notice here */ - /* and make it a warning in the exif_process_IFD_TAG which is called */ - /* elsewhere. */ - entry_type = TAG_FMT_BYTE; - /*The next line would break the image on writeback: */ - /* php_ifd_set16u(dir_entry+2, entry_type, ImageInfo->motorola_intel);*/ - } - entry_length = php_ifd_get32u(dir_entry+4, ImageInfo->motorola_intel) * php_tiff_bytes_per_format[entry_type]; - if (entry_length <= 4) { - switch(entry_type) { - case TAG_FMT_USHORT: - entry_value = php_ifd_get16u(dir_entry+8, ImageInfo->motorola_intel); - break; - case TAG_FMT_SSHORT: - entry_value = php_ifd_get16s(dir_entry+8, ImageInfo->motorola_intel); - break; - case TAG_FMT_ULONG: - entry_value = php_ifd_get32u(dir_entry+8, ImageInfo->motorola_intel); - break; - case TAG_FMT_SLONG: - entry_value = php_ifd_get32s(dir_entry+8, ImageInfo->motorola_intel); - break; - } - switch(entry_tag) { - case TAG_IMAGEWIDTH: - case TAG_COMP_IMAGE_WIDTH: - ImageInfo->Width = entry_value; - break; - case TAG_IMAGEHEIGHT: - case TAG_COMP_IMAGE_HEIGHT: - ImageInfo->Height = entry_value; - break; - case TAG_PHOTOMETRIC_INTERPRETATION: - switch (entry_value) { - case PMI_BLACK_IS_ZERO: - case PMI_WHITE_IS_ZERO: - case PMI_TRANSPARENCY_MASK: - ImageInfo->IsColor = 0; - break; - case PMI_RGB: - case PMI_PALETTE_COLOR: - case PMI_SEPARATED: - case PMI_YCBCR: - case PMI_CIELAB: - ImageInfo->IsColor = 1; - break; - } - break; - } - } else { - entry_offset = php_ifd_get32u(dir_entry+8, ImageInfo->motorola_intel); - /* if entry needs expading ifd cache and entry is at end of current ifd cache. */ - /* otherwise there may be huge holes between two entries */ - if (entry_offset + entry_length > dir_offset + ifd_size - && entry_offset == dir_offset + ifd_size) { - ifd_size = entry_offset + entry_length - dir_offset; -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Resize struct: x%04X + x%04X - x%04X = x%04X", entry_offset, entry_length, dir_offset, ifd_size); -#endif - } - } - } - if (ImageInfo->FileSize >= dir_offset + ImageInfo->file.list[sn].size) { - if (ifd_size > dir_size) { - if (dir_offset + ifd_size > ImageInfo->FileSize) { - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Error in TIFF: filesize(x%04X) less than size of IFD(x%04X + x%04X)", ImageInfo->FileSize, dir_offset, ifd_size); - return FALSE; - } - if (exif_file_sections_realloc(ImageInfo, sn, ifd_size TSRMLS_CC)) { - return FALSE; - } - /* read values not stored in directory itself */ -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Read from TIFF: filesize(x%04X), IFD(x%04X + x%04X)", ImageInfo->FileSize, dir_offset, ifd_size); -#endif - php_stream_read(ImageInfo->infile, (char*)(ImageInfo->file.list[sn].data+dir_size), ifd_size-dir_size); -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Read from TIFF, done"); -#endif - } - /* now process the tags */ - for(i=0;ifile.list[sn].data+2+i*12; - entry_tag = php_ifd_get16u(dir_entry+0, ImageInfo->motorola_intel); - entry_type = php_ifd_get16u(dir_entry+2, ImageInfo->motorola_intel); - /*entry_length = php_ifd_get32u(dir_entry+4, ImageInfo->motorola_intel);*/ - if (entry_tag == TAG_EXIF_IFD_POINTER || - entry_tag == TAG_INTEROP_IFD_POINTER || - entry_tag == TAG_GPS_IFD_POINTER || - entry_tag == TAG_SUB_IFD - ) { - switch(entry_tag) { - case TAG_EXIF_IFD_POINTER: - ImageInfo->sections_found |= FOUND_EXIF; - sub_section_index = SECTION_EXIF; - break; - case TAG_GPS_IFD_POINTER: - ImageInfo->sections_found |= FOUND_GPS; - sub_section_index = SECTION_GPS; - break; - case TAG_INTEROP_IFD_POINTER: - ImageInfo->sections_found |= FOUND_INTEROP; - sub_section_index = SECTION_INTEROP; - break; - case TAG_SUB_IFD: - ImageInfo->sections_found |= FOUND_THUMBNAIL; - sub_section_index = SECTION_THUMBNAIL; - break; - } - entry_offset = php_ifd_get32u(dir_entry+8, ImageInfo->motorola_intel); -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Next IFD: %s @x%04X", exif_get_sectionname(sub_section_index), entry_offset); -#endif - exif_process_IFD_in_TIFF(ImageInfo, entry_offset, sub_section_index TSRMLS_CC); - if (section_index!=SECTION_THUMBNAIL && entry_tag==TAG_SUB_IFD) { - if (ImageInfo->Thumbnail.filetype != IMAGE_FILETYPE_UNKNOWN - && ImageInfo->Thumbnail.size - && ImageInfo->Thumbnail.offset - && ImageInfo->read_thumbnail - ) { -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "%s THUMBNAIL @0x%04X + 0x%04X", ImageInfo->Thumbnail.data ? "Ignore" : "Read", ImageInfo->Thumbnail.offset, ImageInfo->Thumbnail.size); -#endif - if (!ImageInfo->Thumbnail.data) { - ImageInfo->Thumbnail.data = safe_emalloc(ImageInfo->Thumbnail.size, 1, 0); - php_stream_seek(ImageInfo->infile, ImageInfo->Thumbnail.offset, SEEK_SET); - fgot = php_stream_read(ImageInfo->infile, ImageInfo->Thumbnail.data, ImageInfo->Thumbnail.size); - if (fgot < ImageInfo->Thumbnail.size) { - EXIF_ERRLOG_THUMBEOF(ImageInfo) - } - exif_thumbnail_build(ImageInfo TSRMLS_CC); - } - } - } -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Next IFD: %s done", exif_get_sectionname(sub_section_index)); -#endif - } else { - if (!exif_process_IFD_TAG(ImageInfo, (char*)dir_entry, - (char*)(ImageInfo->file.list[sn].data-dir_offset), - ifd_size, 0, section_index, 0, tag_table TSRMLS_CC)) { - return FALSE; - } - } - } - /* If we had a thumbnail in a SUB_IFD we have ANOTHER image in NEXT IFD */ - if (next_offset && section_index != SECTION_THUMBNAIL) { - /* this should be a thumbnail IFD */ - /* the thumbnail itself is stored at Tag=StripOffsets */ -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Read next IFD (THUMBNAIL) at x%04X", next_offset); -#endif - exif_process_IFD_in_TIFF(ImageInfo, next_offset, SECTION_THUMBNAIL TSRMLS_CC); -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "%s THUMBNAIL @0x%04X + 0x%04X", ImageInfo->Thumbnail.data ? "Ignore" : "Read", ImageInfo->Thumbnail.offset, ImageInfo->Thumbnail.size); -#endif - if (!ImageInfo->Thumbnail.data && ImageInfo->Thumbnail.offset && ImageInfo->Thumbnail.size && ImageInfo->read_thumbnail) { - ImageInfo->Thumbnail.data = safe_emalloc(ImageInfo->Thumbnail.size, 1, 0); - php_stream_seek(ImageInfo->infile, ImageInfo->Thumbnail.offset, SEEK_SET); - fgot = php_stream_read(ImageInfo->infile, ImageInfo->Thumbnail.data, ImageInfo->Thumbnail.size); - if (fgot < ImageInfo->Thumbnail.size) { - EXIF_ERRLOG_THUMBEOF(ImageInfo) - } - exif_thumbnail_build(ImageInfo TSRMLS_CC); - } -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Read next IFD (THUMBNAIL) done"); -#endif - } - return TRUE; - } else { - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Error in TIFF: filesize(x%04X) less than size of IFD(x%04X)", ImageInfo->FileSize, dir_offset+ImageInfo->file.list[sn].size); - return FALSE; - } - } else { - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Error in TIFF: filesize(x%04X) less than size of IFD dir(x%04X)", ImageInfo->FileSize, dir_offset+dir_size); - return FALSE; - } - } else { - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Error in TIFF: filesize(x%04X) less than start of IFD dir(x%04X)", ImageInfo->FileSize, dir_offset+2); - return FALSE; - } -} -/* }}} */ - -/* {{{ exif_scan_FILE_header - * Parse the marker stream until SOS or EOI is seen; */ -static int exif_scan_FILE_header(image_info_type *ImageInfo TSRMLS_DC) -{ - unsigned char file_header[8]; - int ret = FALSE; - - ImageInfo->FileType = IMAGE_FILETYPE_UNKNOWN; - - if (ImageInfo->FileSize >= 2) { - php_stream_seek(ImageInfo->infile, 0, SEEK_SET); - php_stream_read(ImageInfo->infile, (char*)file_header, 2); - if ((file_header[0]==0xff) && (file_header[1]==M_SOI)) { - ImageInfo->FileType = IMAGE_FILETYPE_JPEG; - if (exif_scan_JPEG_header(ImageInfo TSRMLS_CC)) { - ret = TRUE; - } else { - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Invalid JPEG file"); - } - } else if (ImageInfo->FileSize >= 8) { - php_stream_read(ImageInfo->infile, (char*)(file_header+2), 6); - if (!memcmp(file_header, "II\x2A\x00", 4)) { - ImageInfo->FileType = IMAGE_FILETYPE_TIFF_II; - ImageInfo->motorola_intel = 0; -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "File has TIFF/II format"); -#endif - ImageInfo->sections_found |= FOUND_IFD0; - if (exif_process_IFD_in_TIFF(ImageInfo, - php_ifd_get32u(file_header + 4, ImageInfo->motorola_intel), - SECTION_IFD0 TSRMLS_CC)) { - ret = TRUE; - } else { - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Invalid TIFF file"); - } - } - else - if (!memcmp(file_header, "MM\x00\x2a", 4)) { - ImageInfo->FileType = IMAGE_FILETYPE_TIFF_MM; - ImageInfo->motorola_intel = 1; -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "File has TIFF/MM format"); -#endif - ImageInfo->sections_found |= FOUND_IFD0; - if (exif_process_IFD_in_TIFF(ImageInfo, - php_ifd_get32u(file_header + 4, ImageInfo->motorola_intel), - SECTION_IFD0 TSRMLS_CC)) { - ret = TRUE; - } else { - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Invalid TIFF file"); - } - } else { - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "File not supported"); - return FALSE; - } - } - } else { - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "File too small (%d)", ImageInfo->FileSize); - } - return ret; -} -/* }}} */ - -/* {{{ exif_discard_imageinfo - Discard data scanned by exif_read_file. -*/ -static int exif_discard_imageinfo(image_info_type *ImageInfo) -{ - int i; - - EFREE_IF(ImageInfo->FileName); - EFREE_IF(ImageInfo->UserComment); - EFREE_IF(ImageInfo->UserCommentEncoding); - EFREE_IF(ImageInfo->Copyright); - EFREE_IF(ImageInfo->CopyrightPhotographer); - EFREE_IF(ImageInfo->CopyrightEditor); - EFREE_IF(ImageInfo->Thumbnail.data); - EFREE_IF(ImageInfo->encode_unicode); - EFREE_IF(ImageInfo->decode_unicode_be); - EFREE_IF(ImageInfo->decode_unicode_le); - EFREE_IF(ImageInfo->encode_jis); - EFREE_IF(ImageInfo->decode_jis_be); - EFREE_IF(ImageInfo->decode_jis_le); - EFREE_IF(ImageInfo->make); - EFREE_IF(ImageInfo->model); - for (i=0; ixp_fields.count; i++) { - EFREE_IF(ImageInfo->xp_fields.list[i].value); - } - EFREE_IF(ImageInfo->xp_fields.list); - for (i=0; imotorola_intel = -1; /* flag as unknown */ - - ImageInfo->infile = php_stream_open_wrapper(FileName, "rb", STREAM_MUST_SEEK|IGNORE_PATH, NULL); - if (!ImageInfo->infile) { - exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_WARNING, "Unable to open file"); - return FALSE; - } - - php_basename(FileName, strlen(FileName), NULL, 0, &(ImageInfo->FileName), NULL TSRMLS_CC); - ImageInfo->read_thumbnail = read_thumbnail; - ImageInfo->read_all = read_all; - ImageInfo->Thumbnail.filetype = IMAGE_FILETYPE_UNKNOWN; - - ImageInfo->encode_unicode = safe_estrdup(EXIF_G(encode_unicode)); - ImageInfo->decode_unicode_be = safe_estrdup(EXIF_G(decode_unicode_be)); - ImageInfo->decode_unicode_le = safe_estrdup(EXIF_G(decode_unicode_le)); - ImageInfo->encode_jis = safe_estrdup(EXIF_G(encode_jis)); - ImageInfo->decode_jis_be = safe_estrdup(EXIF_G(decode_jis_be)); - ImageInfo->decode_jis_le = safe_estrdup(EXIF_G(decode_jis_le)); - - if (php_stream_is(ImageInfo->infile, PHP_STREAM_IS_STDIO)) { - if (VCWD_STAT(FileName, &st) >= 0) { - /* Store file date/time. */ -#ifdef NETWARE - ImageInfo->FileDateTime = st.st_mtime.tv_sec; -#else - ImageInfo->FileDateTime = st.st_mtime; -#endif - ImageInfo->FileSize = st.st_size; - /*exif_error_docref(NULL EXIFERR_CC, ImageInfo, E_NOTICE, "Opened stream is file: %d", ImageInfo->FileSize);*/ - } - } else { - if (!ImageInfo->FileSize) { - php_stream_seek(ImageInfo->infile, 0, SEEK_END); - ImageInfo->FileSize = php_stream_tell(ImageInfo->infile); - php_stream_seek(ImageInfo->infile, 0, SEEK_SET); - } - } - - ImageInfo->ifd_nesting_level = 0; - - /* Scan the JPEG headers. */ - ret = exif_scan_FILE_header(ImageInfo TSRMLS_CC); - - php_stream_close(ImageInfo->infile); - return ret; -} -/* }}} */ - -/* {{{ proto array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]]) - Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails */ -PHP_FUNCTION(exif_read_data) -{ - zval **p_name, **p_sections_needed, **p_sub_arrays, **p_read_thumbnail, **p_read_all; - int i, ac = ZEND_NUM_ARGS(), ret, sections_needed=0, sub_arrays=0, read_thumbnail=0, read_all=0; - image_info_type ImageInfo; - char tmp[64], *sections_str, *s; - - memset(&ImageInfo, 0, sizeof(ImageInfo)); - - if ((ac < 1 || ac > 4) || zend_get_parameters_ex(ac, &p_name, &p_sections_needed, &p_sub_arrays, &p_read_thumbnail, &p_read_all) == FAILURE) { - WRONG_PARAM_COUNT; - } - - convert_to_string_ex(p_name); - - if(ac >= 2) { - convert_to_string_ex(p_sections_needed); - spprintf(§ions_str, 0, ",%s,", Z_STRVAL_PP(p_sections_needed)); - /* sections_str DOES start with , and SPACES are NOT allowed in names */ - s = sections_str; - while(*++s) { - if(*s==' ') { - *s = ','; - } - } - for (i=0; i= 3) { - convert_to_long_ex(p_sub_arrays); - sub_arrays = Z_LVAL_PP(p_sub_arrays); - } - if(ac >= 4) { - convert_to_long_ex(p_read_thumbnail); - read_thumbnail = Z_LVAL_PP(p_read_thumbnail); - } - if(ac >= 5) { - convert_to_long_ex(p_read_all); - read_all = Z_LVAL_PP(p_read_all); - } - /* parameters 3,4 will be working in later versions.... */ - read_all = 0; /* just to make function work for 4.2 tree */ - - ret = exif_read_file(&ImageInfo, Z_STRVAL_PP(p_name), read_thumbnail, read_all TSRMLS_CC); - - sections_str = exif_get_sectionlist(ImageInfo.sections_found TSRMLS_CC); - -#ifdef EXIF_DEBUG - if (sections_str) - exif_error_docref(NULL EXIFERR_CC, &ImageInfo, E_NOTICE, "Sections found: %s", sections_str[0] ? sections_str : "None"); -#endif - - ImageInfo.sections_found |= FOUND_COMPUTED|FOUND_FILE;/* do not inform about in debug*/ - - if (ret==FALSE || (sections_needed && !(sections_needed&ImageInfo.sections_found))) { - /* array_init must be checked at last! otherwise the array must be freed if a later test fails. */ - exif_discard_imageinfo(&ImageInfo); - EFREE_IF(sections_str); - RETURN_FALSE; - } - - array_init(return_value); - -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, &ImageInfo, E_NOTICE, "Generate section FILE"); -#endif - - /* now we can add our information */ - exif_iif_add_str(&ImageInfo, SECTION_FILE, "FileName", ImageInfo.FileName TSRMLS_CC); - exif_iif_add_int(&ImageInfo, SECTION_FILE, "FileDateTime", ImageInfo.FileDateTime TSRMLS_CC); - exif_iif_add_int(&ImageInfo, SECTION_FILE, "FileSize", ImageInfo.FileSize TSRMLS_CC); - exif_iif_add_int(&ImageInfo, SECTION_FILE, "FileType", ImageInfo.FileType TSRMLS_CC); - exif_iif_add_str(&ImageInfo, SECTION_FILE, "MimeType", (char*)php_image_type_to_mime_type(ImageInfo.FileType) TSRMLS_CC); - exif_iif_add_str(&ImageInfo, SECTION_FILE, "SectionsFound", sections_str ? sections_str : "NONE" TSRMLS_CC); - -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, &ImageInfo, E_NOTICE, "Generate section COMPUTED"); -#endif - - if (ImageInfo.Width>0 && ImageInfo.Height>0) { - exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "html" TSRMLS_CC, "width=\"%d\" height=\"%d\"", ImageInfo.Width, ImageInfo.Height); - exif_iif_add_int(&ImageInfo, SECTION_COMPUTED, "Height", ImageInfo.Height TSRMLS_CC); - exif_iif_add_int(&ImageInfo, SECTION_COMPUTED, "Width", ImageInfo.Width TSRMLS_CC); - } - exif_iif_add_int(&ImageInfo, SECTION_COMPUTED, "IsColor", ImageInfo.IsColor TSRMLS_CC); - if (ImageInfo.motorola_intel != -1) { - exif_iif_add_int(&ImageInfo, SECTION_COMPUTED, "ByteOrderMotorola", ImageInfo.motorola_intel TSRMLS_CC); - } - if (ImageInfo.FocalLength) { - exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "FocalLength" TSRMLS_CC, "%4.1Fmm", ImageInfo.FocalLength); - if(ImageInfo.CCDWidth) { - exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "35mmFocalLength" TSRMLS_CC, "%dmm", (int)(ImageInfo.FocalLength/ImageInfo.CCDWidth*35+0.5)); - } - } - if(ImageInfo.CCDWidth) { - exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "CCDWidth" TSRMLS_CC, "%dmm", (int)ImageInfo.CCDWidth); - } - if(ImageInfo.ExposureTime>0) { - if(ImageInfo.ExposureTime <= 0.5) { - exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "ExposureTime" TSRMLS_CC, "%0.3F s (1/%d)", ImageInfo.ExposureTime, (int)(0.5 + 1/ImageInfo.ExposureTime)); - } else { - exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "ExposureTime" TSRMLS_CC, "%0.3F s", ImageInfo.ExposureTime); - } - } - if(ImageInfo.ApertureFNumber) { - exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "ApertureFNumber" TSRMLS_CC, "f/%.1F", ImageInfo.ApertureFNumber); - } - if(ImageInfo.Distance) { - if(ImageInfo.Distance<0) { - exif_iif_add_str(&ImageInfo, SECTION_COMPUTED, "FocusDistance", "Infinite" TSRMLS_CC); - } else { - exif_iif_add_fmt(&ImageInfo, SECTION_COMPUTED, "FocusDistance" TSRMLS_CC, "%0.2Fm", ImageInfo.Distance); - } - } - if (ImageInfo.UserComment) { - exif_iif_add_buffer(&ImageInfo, SECTION_COMPUTED, "UserComment", ImageInfo.UserCommentLength, ImageInfo.UserComment TSRMLS_CC); - if (ImageInfo.UserCommentEncoding && strlen(ImageInfo.UserCommentEncoding)) { - exif_iif_add_str(&ImageInfo, SECTION_COMPUTED, "UserCommentEncoding", ImageInfo.UserCommentEncoding TSRMLS_CC); - } - } - - exif_iif_add_str(&ImageInfo, SECTION_COMPUTED, "Copyright", ImageInfo.Copyright TSRMLS_CC); - exif_iif_add_str(&ImageInfo, SECTION_COMPUTED, "Copyright.Photographer", ImageInfo.CopyrightPhotographer TSRMLS_CC); - exif_iif_add_str(&ImageInfo, SECTION_COMPUTED, "Copyright.Editor", ImageInfo.CopyrightEditor TSRMLS_CC); - - for (i=0; i= 3) { - if (!ImageInfo.Thumbnail.width || !ImageInfo.Thumbnail.height) { - exif_scan_thumbnail(&ImageInfo TSRMLS_CC); - } - zval_dtor(p_width); - zval_dtor(p_height); - ZVAL_LONG(p_width, ImageInfo.Thumbnail.width); - ZVAL_LONG(p_height, ImageInfo.Thumbnail.height); - } - if (arg_c >= 4) { - zval_dtor(p_imagetype); - ZVAL_LONG(p_imagetype, ImageInfo.Thumbnail.filetype); - } - -#ifdef EXIF_DEBUG - exif_error_docref(NULL EXIFERR_CC, &ImageInfo, E_NOTICE, "Discarding info"); -#endif - - exif_discard_imageinfo(&ImageInfo); - -#ifdef EXIF_DEBUG - php_error_docref1(NULL TSRMLS_CC, p_name, E_NOTICE, "Done"); -#endif -} -/* }}} */ - -/* {{{ proto int exif_imagetype(string imagefile) - Get the type of an image */ -PHP_FUNCTION(exif_imagetype) -{ - zval **arg1; - php_stream * stream; - int itype = 0; - - if (ZEND_NUM_ARGS() != 1) - WRONG_PARAM_COUNT; - - if (zend_get_parameters_ex(1, &arg1) == FAILURE) - WRONG_PARAM_COUNT; - - convert_to_string_ex(arg1); - stream = php_stream_open_wrapper(Z_STRVAL_PP(arg1), "rb", IGNORE_PATH|REPORT_ERRORS, NULL); - - if (stream == NULL) { - RETURN_FALSE; - } - - itype = php_getimagetype(stream, NULL TSRMLS_CC); - - php_stream_close(stream); - - if (itype == IMAGE_FILETYPE_UNKNOWN) { - RETURN_FALSE; - } else { - ZVAL_LONG(return_value, itype); - } -} -/* }}} */ - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 tw=78 fdm=marker - * vim<600: sw=4 ts=4 tw=78 - */ diff --git a/ext/exif/exif.dsp b/ext/exif/exif.dsp deleted file mode 100644 index 4a827338b2bb3..0000000000000 --- a/ext/exif/exif.dsp +++ /dev/null @@ -1,113 +0,0 @@ -# Microsoft Developer Studio Project File - Name="exif" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=exif - Win32 Release_TS -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "exif.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "exif.mak" CFG="exif - Win32 Release_TS" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "exif - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "exif - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "exif - Win32 Release_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_TS" -# PROP BASE Intermediate_Dir "Release_TS" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_TS" -# PROP Intermediate_Dir "Release_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_EXIF" /D ZTS=1 /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXIF_EXPORTS" /D "COMPILE_DL_EXIF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_EXIF=1 /FR /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x406 /d "NDEBUG" -# ADD RSC /l 0x406 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_exif.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" - -!ELSEIF "$(CFG)" == "exif - Win32 Debug_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Debug_TS" -# PROP BASE Intermediate_Dir "Debug_TS" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Debug_TS" -# PROP Intermediate_Dir "Debug_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_EXIF" /D ZTS=1 /YX /FD /c -# ADD CPP /nologo /MDd /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXIF_EXPORTS" /D "COMPILE_DL_EXIF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_EXIF=1 /D "LIBZEND_EXPORTS" /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x406 /d "NDEBUG" -# ADD RSC /l 0x406 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib /nologo /dll /machine:I386 /out:"..\..\Debug_TS/php_exif.dll" /libpath:"..\..\Debug_TS" - -!ENDIF - -# Begin Target - -# Name "exif - Win32 Release_TS" -# Name "exif - Win32 Debug_TS" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\exif.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\php_exif.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/ext/exif/package.xml b/ext/exif/package.xml deleted file mode 100644 index 6bdb089612fb0..0000000000000 --- a/ext/exif/package.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - exif - Read header information from JPEG and DIFF headers - - - rasmus - Rasmus Lerdorf - helly@php.net - lead - - - helly - Markus Boerger - helly@php.net - lead - - - -The EXIF functions provide access to information stored in headers -of JPEG and TIFF images. This way you can read meta data generated -by digital cameras and certain image processing applications. - - PHP - - beta - 5.0.0rc1 - 2004-03-19 - -package.xml added to support installation using pear installer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ext/exif/php_exif.h b/ext/exif/php_exif.h deleted file mode 100644 index 8a498d751e3b9..0000000000000 --- a/ext/exif/php_exif.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Rasmus Lerdorf | - | Marcus Boerger | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#if HAVE_EXIF -extern zend_module_entry exif_module_entry; -#define phpext_exif_ptr &exif_module_entry - -PHP_FUNCTION(exif_read_data); -PHP_FUNCTION(exif_tagname); -PHP_FUNCTION(exif_thumbnail); -PHP_FUNCTION(exif_imagetype); -#endif diff --git a/ext/exif/test.php b/ext/exif/test.php deleted file mode 100644 index 907b9ea080aea..0000000000000 --- a/ext/exif/test.php +++ /dev/null @@ -1,3 +0,0 @@ - \ No newline at end of file diff --git a/ext/exif/test.txt b/ext/exif/test.txt deleted file mode 100644 index 1c12b509e6559..0000000000000 --- a/ext/exif/test.txt +++ /dev/null @@ -1,365 +0,0 @@ -\n"; - echo "Thumbnail could not be extracted.\n"; - echo "
"; - } - die(); -} - -if ( !defined('IMAGETYPE_GIF')) define('IMAGETYPE_GIF',1); -if ( !defined('IMAGETYPE_JPEG')) define('IMAGETYPE_JPEG',2); -if ( !defined('IMAGETYPE_TIFF_II')) define('IMAGETYPE_TIFF_II',7); -if ( !defined('IMAGETYPE_TIFF_MM')) define('IMAGETYPE_TIFF_MM',8); - -$possible = array(); - -/****************************************************************************/ -// message function is used for debugging purpose: just to se what happens -function message($msg) { - error_log($msg,0); - echo "$msg\n"; -} - -function error_msg() { - $ret = 'O.K.'; - if (array_key_exists('php_errormsg',$GLOBALS) && strlen($GLOBALS['php_errormsg'])) { - $ret = ''.$GLOBALS['php_errormsg'].''; - $GLOBALS['php_errormsg'] = ''; - } - return $ret; -} - -/****************************************************************************/ -// private to function search_file() -function _search_file($root,&$possible,$path='') { - $sub = array(); - $cnt = 0; - $type= false; - - //error_log("search_file($root,$path)",0); - if ($dir = @opendir($root.$path.'/')) { - while (($found = @readdir($dir)) !== false) { - $type = @filetype($root.$path.'/'.$found); - //error_log("search_file($root$path):$type=$found",0); - switch( $type) { - case 'file': - $pos = strrpos($found,'.'); - if ( function_exists('exif_imagetype')) { - $type = exif_imagetype($root.$path.'/'.$found); - } else { - if ( $pos!==false) { - $type = GetImageSize($root.$path.'/'.$found); - if ( is_array($type)) { - $type = $type[2]; - } else { - $type = false; - } - } else $type = false; - } - if ( $type!==false) - { - $possible[] = array('file'=>$root.$path.'/'.$found, 'type'=>$type); - //error_log("search_file($root$path) add:$path/$found",0); - if ( ($cnt=count($possible)) % 100 == 0) { - error_log("exif test page - counting files: $cnt",0); - } - } - break; - case 'dir': - if ( $found!='.' && $found!='..') { - $sub[count($sub)] = $found; - } - break; - } - } - @closedir($dir); - foreach( $sub as $idx => $found) { - _search_file($root,$possible,$path.'/'.$found); - } - } -} - -/****************************************************************************/ -// function: search_file($file,$ext) -// -// Searches for $file in document tree. The path is ignored. -// -function search_file() { - global $argc, $argv; - $possible = array(); - - if ( $argc > 1) { - $path = $argv[1]; - } else if ( array_key_exists('SCRIPT_FILENAME',$_SERVER)) { - $path = $_SERVER['SCRIPT_FILENAME']; - //error_log("SCRIPT_FILENAME($path)",0); - } else { - $path = $argv[0]; - //error_log("argv($path)",0); - } - if ( ($p=strpos($path,'?')) !== false) $path = substr($path,0,$p); - if ( ($p=strrpos($path,'/')) /*< strlen($path)-1*/) $path = substr($path,0,$p); - error_log("exif test page - counting files in $path"); - _search_file($path,$possible); - error_log("exif test page - counting files: ".count($possible)." done.",0); - return $possible; -} - -/****************************************************************************/ -// function: search_file($file,$ext) -// -// Searches for $file in document tree. The path is ignored. -// -function AddInfo($Name,$Value,$highlight=0) { - if (is_array($Value)) $Value = 'Array: ('.join(',',$Value).')'; - $Value = nl2br($Value); - if ( $highlight) { - $Name = "$Name"; - } else { - $Name = "$Name"; - } - return "$Name$Value \n"; -} - -$possible = search_file(); - -$title = "PHP module exif test page"; - -?> - - -<?=$title ?> - - - -

-

(c) Marcus Börger, 2002

-

-

-Images taken from www.exif.org, -marcus-boerger.de -all rights reserved by their authors and artists, see exif headers. -The files can be downloaded here. -To start the test you simple have to put all images into the same directory as this script. -The test will work with all files in that directory and all subdirectories. To test private -images just put them into that directory. -

-

-Youmay take a look at the test source here. -

-

-This test just prooves that some exif headers can be scanned. -If all files produce a header in output the module might be o.k. -

-

-What to look for in detail: -

-
    -
  • kodak-dc4800-plus-acdsee.jpg -
      -
    • should provide a long comment 'by marcus börger<%04i>'*n
    • -
    • this file returns an array but it also produces an errormessage because ACDSee destroys - the integrity of IFD directory (size of directory and offsets of entries following any - edited entry maybe wrong). -
    • -
    -
  • -
  • hp-photosmart.jpg -
      -
    • should provide a two line copyright notice
    • -
    -
  • -
  • olympus-d320l -
      -
    • should provide an APP12 infoset
    • -
    -
  • -
  • unknown.jpg -
      -
    • should provide an empty comment, this is a comment section and not an IFD0, EXIF or GPS section
    • -
    -
  • -
  • some images -
      -
    • have empty fields, that is the tag is present but no data is stored
    • -
    -
  • -
-

function exif_tagname

- - - - - - -\n"; -} -?> -
ImageWidth
JPEGProc
SceneType
false
function exif_tagname is not supported
-
-

function exif_read_data for images

- -\n"; - $tab2 = "";//"\n"; - $types = array('','GIF','JPEG','PNG','SWF','PSD','BMP','TIFF_II','TIFF_MM','JPC','JP2','JPX','JB2'); - foreach($possible as $idx => $file) { - $type = $file['type']; - $file = $file['file']; - if ( !((++$num)%100)) error_log("exif test page - checking files: $num",0); - $error = ''; - $len = 2; - $rows = 1 - + ($check_getimagesize ? 1 : 0) - + ($check_exif_thumbnail ? 1 : 0) - + ($check_exif_read_data ? 1 : 0); - if ( !$fast_output) echo "\n"; - if ($check_getimagesize) { - $len++; - $size = GetImageSize($file); - $error = error_msg();// clear message - if ( $size === false) { - $error = 'GetImageSize returned false
'.$error; - $res_getimagesize = $error; - } else { - $res_getimagesize = '('.join($size,',').')'; - } - if ( !$fast_output) echo AddInfo("GetImageSize",$error,1); - } - if ( $check_exif_thumbnail) { - $len++; - if ($type!=IMAGETYPE_JPEG) {// && $type!=IMAGETYPE_TIFF_II && $type!=IMAGETYPE_TIFF_MM) { - $error = "filetype not supported: $types[$type]"; - $res_exif_thumbnail = $error; - } else { - $t_width = 0; - $t_height = 0; - $result = exif_thumbnail($file, $t_width, $t_height); - $error = error_msg();// clear message - if ( $result === false) { - $error = 'exif_thumbnail returned false
'.$error; - if ( $t_width && $t_height) { - $error = "$t_width x $t_height
$error"; - } - $res_exif_thumbnail = $error; - } else { - $res_exif_thumbnail = $t_width . " x " . $t_height; - } - } - if ( !$fast_output) echo AddInfo("exif_thumbnail",$error,1); - } - if ($check_exif_read_data) { - $len++; - if ($type!=IMAGETYPE_JPEG && $type!=IMAGETYPE_TIFF_II && $type!=IMAGETYPE_TIFF_MM) { - $res_exif_read_data = "filetype not supported: $types[$type]"; - if ( !$fast_output) echo AddInfo("exif_read_data",$res_exif_read_data); - $res = ''; - } else { - $image = exif_read_data($file,'COMMENT,IFD0,EXIF,APP12',true); - $error = error_msg();// clear message - if ( !$fast_output) echo AddInfo("exif_read_data",$error,1); - $res = ''; - if ( $image === false) { - $res_exif_read_data = "exif_read_data returned false
$error"; - } else { - $res_exif_read_data = $error; - // ah no!$error = error_msg(); // force o.k. - foreach($image as $Name => $Value) { - if ( $Name!='Thumbnail') { - if ( is_array($Value)) { - $len++; - $res .= AddInfo($Name,'Array('.count($Value).')'); - foreach( $Value as $idx => $Entry) { - if ($idx==='Thumbnail') $Entry = '<data>'; - $len++; - $res .= AddInfo($Name.':'.$idx,$Entry); - } - } else { - $len++; - $res .= AddInfo($Name,$Value); - } - } - } - } - } - } - $tab2 .= "\n"; - $tab2 .= "\n"; - if ($check_getimagesize) { - $tab2 .= "\n"; - } - if ($check_exif_thumbnail) { - $tab2 .= "\n"; - } - if ($check_exif_read_data) { - $tab2 .= "\n"; - $tab2 .= $res; - } - if ( $fast_output) { - echo $tab2; - $tab2 = ''; - } - } - error_log("exif test page - checking files: ".count($possible)." done.",0); - echo $tab2; - echo "
$num$file
$num
$file
GetImageSize$res_getimagesize
exif_thumbnail$res_exif_thumbnail
exif_read_data$res_exif_read_data
\n"; -} else { - echo "

function exif_read_data is not supported

\n"; -} -?> - - \ No newline at end of file diff --git a/ext/exif/tests/bug34704.jpg b/ext/exif/tests/bug34704.jpg deleted file mode 100755 index 42b14c1908fc30fa8b7f45827487a760826c8416..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9976 zcmeHtWl$VlyX~L@1b4T=U4sOeK!VHQE(sFcGQdEv00DwC5FijN0W#P?2=0*J8r*g8 z0Kr`j?|a_w-0#n=y665oRcCc|_w($vd)KpeSM{#yz3!*)mjT3TN~%f#G&D58i-!Yn zzrxz3=+qmyQ`|?l}*25(IHBbKl4ISg5I3Nx#-XmfFIvNHBIwl4d7AEFH z&%g%`fJuTy$|5X}O{Vh_$m&Th5(58>15&7Hr_dcaU=y`|9g2%bNkvUV%g({c#myro z{#Zg%O8VJzMI~hwRW&_*14AQY6H^;oyI1xOj!sZ7Zy%Vi-9!Ng(_#wL~50lxGkV-*R( zAy zth}@Pz=1kC>5(zADR=BI-Zt{#=MJ~mY&=ZLW8MUATbdO5mj5`L5}liKs*N}Nvxh52 z8Dy(6=hJFP7xEi!X^P;u9ryQjy71LoFL7QfZdF`gIvukqsXo+Pn_^@zBynkc>UPll zNZ6n|x96*g^VL9dKYftqKvJjIFXiT*piz?_YupUg?%gv54wod{_4mv~?p+xOy<&-!06a+Q z67)E@c<;;gp2f}^#0`kM(99WcS3sAq6t4_}7_T8a79q>iJy$-}@h0V6LslM33)eqlaZblNsduZ!ZW|fA2F!`rzp$TfHBBrL`o_o~f};eM z)F$_lW$whdeD-fSGbmJ+vzwrAp_(JvXCl6(;sp%SbC82M#6^Q3+<#@VJg_7%*J43- zUKLZz*7pZ_O5{Kuz}5yRp5j@wv)M75NjYWYPOdi)$2ibUZmGjkYZFR`5TD)(Vyr#5 zR+YApirMWY|J3&A-4K0_xzUG(0MmoBtfHM>d;7vg`Ct~o$7}LqG>S4P#=4?7+(Cy> z-(4|Y{Y>l9iKNox=S-Z%Uvb} z=jRrc9U@fGc{U)k@_y1sleSdJA)!QbtOx;;&teOvjlc z76@*)jxzRz4s+6@DUQz1K-rpRlj53c)YTIbaRfhQzbMUptDrP*krf?u_8nFom62G9 zI^`XKK`C+r``9dw#RiDivPFl2@rDk#N19yiIX=@`bf5Vb<|WZZ8u8i4f2+a9VM$mw zxu!W<`rLXJPn5x%=IXPw2su(5Cfw0o`du?HDyk^=G1+Cv$oEC5=kLr(@x9DN4L)&S z7I2gKZP8rN7@IxkIF-hAH0sZd-kZ;uFbjX=~76l40u%+V`OL+Rn__MkqLY`AN=eG3J-6Zg0UF)SkO%bxt&m zk_bPdFBqDHs~zs5QMf->3Z`F@Eo^e79%!3T}!Ni~3L&a|bmnwQ=19=C* z_H&J97^^1bZY;HL9~p=YtQfHkh9p~5S>(=2Znk_K-Iid)yHH%^+Gwe6l(2noIiJCQ7(ct80L?kdbyYBZhj9~Vhhyt0W+L7swX_!PMxIEHh<>nGcbq| ziK)~SFS`(|cKi_)^YiK~JlIhTdil7fHpx$m&L!t)L`#~Hi1D<^JEm1v`cn=qiZnni z$_$H^*Q4zOBq<()YL@F)xX4evBfoqu(l*jfmr62Z9FTjwL?2wG=zIg!fgWOkLekD_ z4tQ#OHzmPZPKfqKXI}RxXM3bsL{q|G{G8t^?*~pPh9L|aS)5a`vnYx2bNBZzTURg- zxndKSW~L-TQ~gc{OyP2rVO`RK(Oxszk{lc(sCr?b!@-aW{rUD}OZZ{&p97zU>>4VJ zdjLzduhs57pk#W>)A!3gz@W~|SrS#V1VVq>Uq=ss=ou^R5O#v2%)2k@R|GGf1+cF) zb6HkzOVlRg;`?a*)uX@i$vtJ^Qo!MSIDA?R_iwVhe2g^Y)Xt zJ7))Nb{goV+g`^O(K$-y9)Ln#8Ak4@`&ynWjHP_*$3M=o?$oxwy96UWYZ|(e^KY!i zstK@v4~-6dQyS&@jxVN89)?MHDV~ua&Vg*6aWgE;IzxlyZ{GuGs->Eq!)wwQ)_t3?X4yEC2s&A3NGeEtQ0{9M!NyswYqnRZo|2PV+@^|S zoilgR?bu+YXxWw_CGxb)I*frt53lfdma@khhRzVz_x@-o9A41@$1{OcB>LrM)0ePa z__{+}%JZsf%_c>kpQ8)0y;!F<&SV9xh7Uo(J!$FID_yazNnPcYu?YFN8h7CmaNv#IvoJT1v#=<+muPV*Qt3&Gj{zY#4Ybkv!j@UR_xXdpI14RvPYz`8PC&dKu zm7QgyohWI2E1CpBm@g1q`XR}&-^xut>89ce%3R9p6Rd}j{Dvo#TOEg~Vt)oruNUa2 zN*S=j#{d{hjLoeWx)X{;>M2{kIk8Pl{;Ptd+b~P!iIeq+zDH(shh%EQ_29|9OX1Ys z_TnJ%3!}V#cV~&PYKmHmKlB@y>n`8$jNFK`MWAy9{s9?r)3Nn+)kgyw2IKUU^kieX zHdoQ?<1_Mlo+Lk|_@v*h5el~hX>JrDe<(^Va?h3HOnnUxTLg@Mr_qK-@k1E~3S+om z$!RZy)zW9eGd(ApfvW_ezG>~XS9Zv8;pQJ*{cIsMZ@=?G-$D-HW@!@1b86c#K3tHJ z+6^KsWLPVmpnJ4(Uz|6^MSPw&Q;0?DF}&OD5-9%Z-P+i$sYl!t6u1J5+&Gwu`1-BB zp|&3S`e^^Hq&AJd%?4mIy0y?6Otz&9KQBn)yVWfl^p-9X^ri-2U)M8JcFXuPjg3~` zD9niykX*U8U}QIi@@9Mq*nt#{VAs=YUk35{`f%IEAx}9tnZLKuf#Y|~te7sWH~FY^ z^}6vh;n~w}=@jd<>u+PU>s4qK;bdw6Dt)r-$LzNwGq7g*#6X}_fRNH=xX#^3>3 z>z`O_E&8uzPh?9_A0+A)5ISE@cL_mVAA4i0N<@%ykdzfLWB!?;P5yE9;yJGe~DK|4Z1j-4l)Q~A4E=udA_7fD{PA+`@yv9>(LoSO`qNQ2KHNXtVz|? z&(RZho95Br-O$PB_HtIk^Q*eBjE8)e^!}bXuT1gsMqx8U3;UhL^DSpL_qLJxi~bcu zcWHG7lQq{KeJo6`-mW`o!ocFXi`Erur3H}Dyw#c|w%<_DdAZwZOu>$kp?3Kfu3UM3t8mAh4K z=IBR^SKR}cZUDw!S9jR&?g1oT1rVO4XX6wzTJ2}=Vo}udBL3ckhU0Sl+d`&kpH!OU zo>D7kp?P*aSxKms6}9AFmDT-iFiz=+G;w9CPxYM`8hl%WBf0Xl4fFa{?zrHIuOW>q zTk6)2$3MyIt=JWM=V^*%2StqRV%8_^;W9t~ zg!u{U8J~j>E0t=J`@?=FLo$VLj|64T+E2k*ejGVS6ZJR2RU|gYBw;c_e*p1*4DENX zicGDh0~-umH7n{ZzW)r>_6E8Kd+^K~nMLWt_Y7O9`2}ov?*TZK9nsBAYgf8S(W?9UPMX`$s!u2uQZ&X$C(w}0Pf;7D^Fhne z8~fl@e#;-cSt4|1UUl(0JblJV5DZLwTly(7n*y_+LU2$2*QFGnea|>lX}arrevdV~ zIV6!E(xdN8^*537ro+!!G=Bn!OjnJI^>X;APPc{%XrnAO=3BGYCImn&LQT=o4as)Y z*I{)bxn+~bfeZa?whx~~f-zouIbIo~7mjS=SZ$JEpX~jMC8Y1i^lQi}7$DMTBV2=|;|q*LZcD)}#a$YZEDtO567? zIUm6sZ#v~N>0`@qV2D^%g_+sG)w`EBT_#!+KBsn;tx@7BJlaWBMT%zMt=1f+4QDlu z_JAD?5qTx%#-&qf%n`5Rg{WTuD4up>W~sNum0KL_G#F@=FVA4xiMGE;}Sm%BAqpp20x&9;t4 zvpf?w3ZvOesp-r9tAj(Q?tU2TjlbD;O)~YKA%#hP(gs8LcOaUQy8QvYPOfi|tM2~h zZq3n>DJ7j7>$_cRvrMwLI7})2M$vpXQZGGaMm6)d&qu#rO0<2~=%*f1@Lnd;n#fui zrkq*&XyaVB9%^*-B2#%i!t;hbI8wIxjnSusfkR^_H+@G7nET;(tDFG?npyHW}2G z^H^CapSo;E>PTbxka~A!$`J0U?3=078_i#Ly(MPO%vG~4oy@*e>$vUR%de+pqd?7m zlK89C^*jaw*>~j?Q&B%Gik@jjvO9{XGo^0Tq*nH^W%40>sC?#yuk&E^S9$^R1xs5J zo;x~Ls(h08_AWra^=BN5@{+w*7@5}PrrTsD7x8Sh4P?})V}W0!Eyj0$T;j7@rN=Y+ zXk0Wuz$0p`DJXhfY`%*Af|Y;$@p3aZO`N0NtNG?0P@cY_)hxqj?!*bJj`HfUHe7ls zmfQjm*d-V6vk93`f~*3a>fL=xdY-g!8nZfG+E_ZbxPS zVys*oP893)%u^OQxK)!ugYTA{$2|YUtzBwQea@!OTDB&P+gaFkSZ9y2I)_VVGpKCIuL(V@F3-7Ne=ReTFpSpoE!!ED zJ??fYluqMoMH%e2u$x-+SVvIj!-K=^cpzmWO;hQ<Le!BkGr1;&2MQ* zppBD^L|V&l$(LkP9dt&NJgh^?GAKRv4i~0JWJQ-sPu6U}rXV#PqYq`UVqd>bweFJO zAI9e-#WT|t>6QI`k2$}p(10Tg{1!`!eG!&**W#0T{E3EhvR~6lF!7f+wCd=y^Fn!_ zv+_1$47?TC3vVYl-QKQ5yhNZp{LN%rXhCJl0aMH5(#C1{Jz zM=%VjYHPMwMsnNaJ$J{6(X6+|jM@})Q|Hz#HLtCZv97A>3^T2*(;pKY(Zyig2Fj5ncL~;6!b*Mthyz~shC2INXQLTy8vWLzv2BnBF-(&s~o+i-s-q&Fl!LP zTS-mRC3+%;P!d0FS+q6yY#5%U=$vvoX!+__ORrm6(vm9e4?8?o8W}3~1bW-UWOLc7 zD`aZuFK1$l&Vtz<0anqMu|3qp2!;?qe3o;tMdLNr;HS!puX6v1Dm6YjXLq4OCCRc6K~QV6mH(@y8Ko65j~-QolmH$+E9I@Hlynp2t#u$@wEhEqQi#Zpm9*ec%%rOq^yA>Rg|H zyTQ2rgT;NH2Obh@X!&`CSKT?!+Xf0H7g{c;WB&41+V)7;zLs6=XOaH+ZjD-vB}?byga|TK4WK6T@S{c)9>4Jx?KltFIPE~xl@ih zZC3mezAuIpQg@+to89%GJD7(|*7HkGUh9sOm7i)Vt?r;3S677;EL9!J-(fSzW5kPg zQ!Hr-tLuXu4f*>>Jx`=!X!c^0{OY34Y^7@kmgDcL>&8Cu4$Me=c;~JeNxcV8Kwx?s#@{-u$C&{nn z$7ok*=Hp~8!lKZsP|sbcp}@#M0i5PTNT}3a!gfwqQ>~N$VoIhKS1N$A;Y7l4hUHSoAB7J-Ra3 z>6(?Lkt-k@NDxCd+$gfth+ri3&Asl3was)rV>?4Wnae|{!$2k$TvZ>H@yK5ttB2L4 zTISj=$G44n?Ya3P2iUt_+OVReD>Z#XbuJXa1g>0v-m{m}e3 zR3^O<)#`#{srQo-S-C!xc7ub#dOYSUVvKC_LRn?;R0`O*&;GKgOO;nSM+Y#&dZG`2$-~uPx@u#e>FsW;=5#i1=hoCph;bC7ka8 zW>ihWhuC9!EoQO`GcI=U8bwyshR3oW*3c2Ph|vZlgvtIRX%LENw8_1TMD4pdgfBw< zw_k?@nd|H;Bdol{kQ*yrZrKBZH=GftpppxP(H&ilE{^zTJN+q~hi%|E=|olN^UlZl zE1=-6BaWQ%EG6FzXH}3t@5NNke1)WYp?H5yOvy86X-Dbi;w`AX_j0;{0!gS9SjaUG z6Kz;l)S~Qrzg(W*M&XO0KK&CAn{~Ze4yMC#kEuj`ZSPh*b&v*uBb|6rapp>pg`3}E zvkWYwb0GC|Q)=R+S>zJ{fb0U`tp3y0oiUH0dLmy!NK1ht3B-~BKaQ6NcuUI4rOeIw z0#!|7hCN|ioKIdCgXJxh(h<{+4!S=UCDC@Y0|rlRdXW!bV^FqOfq&&tfZElo6fd}{ zJ4?J`-@Hj5gXnOdA><>Y=y?Mz@^R%#6uVKVtL{uz(2K(FY_@AQj^G4(sAb(YdGWL2 zZ?Z4|)cC4Ayvp@COMPV=9;v}+Mw87chG6C?Vz>9tJP%Y*?XUwwHKm~?~yphEhnPaoriv#g_N@KLJ<9RG}b)TL5 zHq|nWk7UP@uGY8GBQ+5xBHUqe8mlHASx}l2$mO)%f(+oeJwulQCi&Ck8#2Nr zCNqu_sxtWJL2o|JiWGLLp;DO>fz^-eQxo(gwZwKz^WADI?G;z(9Xpq!?SmV z0-TzA)kvQTHoxU9t34=7N|x=MsDkO$UEVCEi|!Ix6%~!*4I4Tdme+jx0J57tZYA$= zb#WuzTfO!^Ih06B%8%f(CJ0@})gBo9#TeQEiOhHhdP@7!(ClN%hRYGPXwW;)PFKkC zFk#Q#i!oi%%vC7{qaz^2D+cLdNO<12P%iRQJSni=__&s*XGJ7m{bl;-&T|2Tck)~I zAe?)E!vxe9zORc|@0DBT2LFmqHc3e~Xw*rPnY{Ck@hnu|9IS;nV%l|WWIc5g?s{X( zcvn?#W=cEQ5`kJMuBS5#mEUYpxywNsS7-LJ7BXn7W}YoXZ!T%ObZpGdyG@tjqqvM~ zmLVGP5R|HWi5ksEQ~3|BxiKMQY~?|9o8;qc3LnZ#Bwmd_{*lDzXS5VsBexA+xf)fzV1Ao5eSWZBpL)r@PjwTJv#CaZoL0IgvTuS6=(UN`_~?G@|P>O3xB^o+oQ33+^?Ji!io@=AI z39$R=Uuxt>(9n}?`IXy^dksooK}61e%=!hl9HK8}@gtGd#k*Ct(P-PWSa$|rGNQjL zQRo*BXKU0nf*8%!N@x#?^8iEz;=?baU#UovPf4Afmb#d|*o$wvO;rfS3r}Eh zGNl-d^Xr)`Z|lC=U_#nv$@Qt?C(VJLP+E5!C%x7RM!UpoUghAlXuSuNA)|j>i^X{z zdFc5(s|f+Y1a>5`-t$1F@Rd<&%oTXwE{TiN zdNl3<#MIl_b)|57fzg7AC~cv^c9y5Zr#C!aRmlSirlJ*<$(gN#jX7h76s?t!$28F4 zO9B>m1Q(Wd2$;_XadON38#|lDeZlnoul0zL@Sg4?@sADAk{_nVLxar~iPROSoi1c` zrHqk7X>=uVA5~oIW7T_r?2-SteAGa~+D_$lu8Eg+=@6^0e483a#}ly;otyW9i3Cj8!d7&I`M z8}g_iD52k-ucDIoSQo*&E4ZH?_79)Dv8P8J40>^k^c17=UcBYacE#wosthbpH{hd;gPn_uJJjo?tA`vOvy8o?t(?$?DfH+*03sQWzl;65Izc(SfAj79yITee1M|VP@!;9O#KL;8rr_f|IA4H7 zj~?OTlMs=Tk`R%QkWtc8k&)91JyHO4&JJj%_fdiK1LA`NJFvwdR7?$SrIygkZh+?jhb3DX_Kee zEbxWlFPf@6MSb(sHNHqzY))Yb^<9{w)`*)wq23P+5nslrSRXcM7ki^biQFfw ---INI-- -output_handler= -zlib.output_compression=0 ---FILE-- - -===DONE=== ---EXPECTF-- -array(7) { - ["FileName"]=> - string(12) "bug34704.jpg" - ["FileDateTime"]=> - int(%d) - ["FileSize"]=> - int(9976) - ["FileType"]=> - int(2) - ["MimeType"]=> - string(10) "image/jpeg" - ["SectionsFound"]=> - string(4) "IFD0" - ["COMPUTED"]=> - array(5) { - ["html"]=> - string(24) "width="386" height="488"" - ["Height"]=> - int(488) - ["Width"]=> - int(386) - ["IsColor"]=> - int(1) - ["ByteOrderMotorola"]=> - int(0) - } -} -===DONE=== ---UEXPECTF-- -array(7) { - [u"FileName"]=> - string(12) "bug34704.jpg" - [u"FileDateTime"]=> - int(1128867104) - [u"FileSize"]=> - int(9976) - [u"FileType"]=> - int(2) - [u"MimeType"]=> - string(10) "image/jpeg" - [u"SectionsFound"]=> - string(4) "IFD0" - [u"COMPUTED"]=> - array(5) { - [u"html"]=> - string(24) "width="386" height="488"" - [u"Height"]=> - int(488) - [u"Width"]=> - int(386) - [u"IsColor"]=> - int(1) - [u"ByteOrderMotorola"]=> - int(0) - } -} -===DONE=== diff --git a/ext/exif/tests/exif000.phpt b/ext/exif/tests/exif000.phpt deleted file mode 100644 index eea16438cf136..0000000000000 --- a/ext/exif/tests/exif000.phpt +++ /dev/null @@ -1,57 +0,0 @@ ---TEST-- -Check for exif_read_data default behaviour ---SKIPIF-- - ---INI-- -output_handler= -zlib.output_compression=0 ---FILE-- - ---EXPECTF-- -Array -( - [FileName] => test2.jpg - [FileDateTime] => %d - [FileSize] => 1240 - [FileType] => 2 - [MimeType] => image/jpeg - [SectionsFound] => ANY_TAG, IFD0, THUMBNAIL, COMMENT - [COMPUTED] => Array - ( - [html] => width="1" height="1" - [Height] => 1 - [Width] => 1 - [IsColor] => 1 - [ByteOrderMotorola] => 1 - [UserComment] => Exif test image. - [UserCommentEncoding] => ASCII - [Copyright] => Photo (c) M.Boerger, Edited by M.Boerger. - [Copyright.Photographer] => Photo (c) M.Boerger - [Copyright.Editor] => Edited by M.Boerger. - [Thumbnail.FileType] => 2 - [Thumbnail.MimeType] => image/jpeg - ) - - [Copyright] => Photo (c) M.Boerger - [UserComment] => ASCII - [THUMBNAIL] => Array - ( - [JPEGInterchangeFormat] => 134 - [JPEGInterchangeFormatLength] => 523 - ) - - [COMMENT] => Array - ( - [0] => Comment #1. - [1] => Comment #2. - [2] => Comment #3end - ) - -) diff --git a/ext/exif/tests/exif001.phpt b/ext/exif/tests/exif001.phpt deleted file mode 100644 index 15588306d4f50..0000000000000 --- a/ext/exif/tests/exif001.phpt +++ /dev/null @@ -1,152 +0,0 @@ ---TEST-- -Check for exif_read_data ---SKIPIF-- - ---INI-- -output_handler= -zlib.output_compression=0 ---FILE-- - ---EXPECTF-- -array(5) { - ["FILE"]=> - array(6) { - ["FileName"]=> - string(9) "test2.jpg" - ["FileDateTime"]=> - int(%d) - ["FileSize"]=> - int(1240) - ["FileType"]=> - int(2) - ["MimeType"]=> - string(10) "image/jpeg" - ["SectionsFound"]=> - string(33) "ANY_TAG, IFD0, THUMBNAIL, COMMENT" - } - ["COMPUTED"]=> - array(12) { - ["html"]=> - string(20) "width="1" height="1"" - ["Height"]=> - int(1) - ["Width"]=> - int(1) - ["IsColor"]=> - int(1) - ["ByteOrderMotorola"]=> - int(1) - ["UserComment"]=> - string(16) "Exif test image." - ["UserCommentEncoding"]=> - string(5) "ASCII" - ["Copyright"]=> - string(41) "Photo (c) M.Boerger, Edited by M.Boerger." - ["Copyright.Photographer"]=> - string(19) "Photo (c) M.Boerger" - ["Copyright.Editor"]=> - string(20) "Edited by M.Boerger." - ["Thumbnail.FileType"]=> - int(2) - ["Thumbnail.MimeType"]=> - string(10) "image/jpeg" - } - ["IFD0"]=> - array(2) { - ["Copyright"]=> - string(19) "Photo (c) M.Boerger" - ["UserComment"]=> - string(5) "ASCII" - } - ["THUMBNAIL"]=> - array(2) { - ["JPEGInterchangeFormat"]=> - int(134) - ["JPEGInterchangeFormatLength"]=> - int(523) - } - ["COMMENT"]=> - array(3) { - [0]=> - string(11) "Comment #1." - [1]=> - string(11) "Comment #2." - [2]=> - string(13) "Comment #3end" - } -} ---UEXPECTF-- -array(5) { - [u"FILE"]=> - array(6) { - [u"FileName"]=> - string(9) "test2.jpg" - [u"FileDateTime"]=> - int(%d) - [u"FileSize"]=> - int(1240) - [u"FileType"]=> - int(2) - [u"MimeType"]=> - string(10) "image/jpeg" - [u"SectionsFound"]=> - string(33) "ANY_TAG, IFD0, THUMBNAIL, COMMENT" - } - [u"COMPUTED"]=> - array(12) { - [u"html"]=> - string(20) "width="1" height="1"" - [u"Height"]=> - int(1) - [u"Width"]=> - int(1) - [u"IsColor"]=> - int(1) - [u"ByteOrderMotorola"]=> - int(1) - [u"UserComment"]=> - string(16) "Exif test image." - [u"UserCommentEncoding"]=> - string(5) "ASCII" - [u"Copyright"]=> - string(41) "Photo (c) M.Boerger, Edited by M.Boerger." - [u"Copyright.Photographer"]=> - string(19) "Photo (c) M.Boerger" - [u"Copyright.Editor"]=> - string(20) "Edited by M.Boerger." - [u"Thumbnail.FileType"]=> - int(2) - [u"Thumbnail.MimeType"]=> - string(10) "image/jpeg" - } - [u"IFD0"]=> - array(2) { - [u"Copyright"]=> - string(19) "Photo (c) M.Boerger" - [u"UserComment"]=> - string(5) "ASCII" - } - [u"THUMBNAIL"]=> - array(2) { - [u"JPEGInterchangeFormat"]=> - int(134) - [u"JPEGInterchangeFormatLength"]=> - int(523) - } - [u"COMMENT"]=> - array(3) { - [0]=> - string(11) "Comment #1." - [1]=> - string(11) "Comment #2." - [2]=> - string(13) "Comment #3end" - } -} diff --git a/ext/exif/tests/exif002.phpt b/ext/exif/tests/exif002.phpt deleted file mode 100644 index 2a70f2920c9a5..0000000000000 --- a/ext/exif/tests/exif002.phpt +++ /dev/null @@ -1,23 +0,0 @@ ---TEST-- -Check for exif_thumbnail ---SKIPIF-- - ---INI-- -output_handler= -zlib.output_compression=0 ---FILE-- - ---EXPECT-- -27bbfd9fc10e1e663d749f5225447905_523 == 27bbfd9fc10e1e663d749f5225447905_523 diff --git a/ext/exif/tests/exif003.phpt b/ext/exif/tests/exif003.phpt deleted file mode 100644 index 20cb61ee17183..0000000000000 --- a/ext/exif/tests/exif003.phpt +++ /dev/null @@ -1,91 +0,0 @@ ---TEST-- -Check for exif_read_data, Unicode user comment ---SKIPIF-- - ---INI-- -output_handler= -zlib.output_compression=0 -exif.decode_unicode_motorola=UCS-2BE -exif.encode_unicode=ISO-8859-15 ---FILE-- - ---EXPECTF-- -array(5) { - ["FILE"]=> - array(6) { - ["FileName"]=> - string(9) "test3.jpg" - ["FileDateTime"]=> - int(%s) - ["FileSize"]=> - int(1240) - ["FileType"]=> - int(2) - ["MimeType"]=> - string(10) "image/jpeg" - ["SectionsFound"]=> - string(33) "ANY_TAG, IFD0, THUMBNAIL, COMMENT" - } - ["COMPUTED"]=> - array(12) { - ["html"]=> - string(20) "width="1" height="1"" - ["Height"]=> - int(1) - ["Width"]=> - int(1) - ["IsColor"]=> - int(1) - ["ByteOrderMotorola"]=> - int(1) - ["UserComment"]=> - string(7) "ÄÖÜßäöü" - ["UserCommentEncoding"]=> - string(7) "UNICODE" - ["Copyright"]=> - string(41) "Photo (c) M.Boerger, Edited by M.Boerger." - ["Copyright.Photographer"]=> - string(19) "Photo (c) M.Boerger" - ["Copyright.Editor"]=> - string(20) "Edited by M.Boerger." - ["Thumbnail.FileType"]=> - int(2) - ["Thumbnail.MimeType"]=> - string(10) "image/jpeg" - } - ["IFD0"]=> - array(2) { - ["Copyright"]=> - string(19) "Photo (c) M.Boerger" - ["UserComment"]=> - string(7) "UNICODE" - } - ["THUMBNAIL"]=> - array(2) { - ["JPEGInterchangeFormat"]=> - int(134) - ["JPEGInterchangeFormatLength"]=> - int(523) - } - ["COMMENT"]=> - array(3) { - [0]=> - string(11) "Comment #1." - [1]=> - string(11) "Comment #2." - [2]=> - string(13) "Comment #3end" - } -} \ No newline at end of file diff --git a/ext/exif/tests/exif004.phpt b/ext/exif/tests/exif004.phpt deleted file mode 100644 index 229f49e1459b8..0000000000000 --- a/ext/exif/tests/exif004.phpt +++ /dev/null @@ -1,38 +0,0 @@ ---TEST-- -Check for exif_read_data, Unicode WinXP tags ---SKIPIF-- - ---INI-- -output_handler= -zlib.output_compression=0 -exif.decode_unicode_intel=UCS-2LE -exif.decode_unicode_motorola=UCS-2BE -exif.encode_unicode=ISO-8859-1 ---FILE-- - ---EXPECT-- -array(5) { - ["Subject"]=> - string(10) "Subject..." - ["Keywords"]=> - string(11) "Keywords..." - ["Author"]=> - string(9) "Rui Carmo" - ["Comments"]=> - string(29) "Comments -Line2 -Line3 -Line4" - ["Title"]=> - string(8) "Title..." -} diff --git a/ext/exif/tests/exif005.phpt b/ext/exif/tests/exif005.phpt deleted file mode 100644 index 9edba0a618c8f..0000000000000 --- a/ext/exif/tests/exif005.phpt +++ /dev/null @@ -1,29 +0,0 @@ ---TEST-- -Check for exif_read_data, unusual IFD start ---SKIPIF-- - ---INI-- -output_handler= -zlib.output_compression=0 ---FILE-- - ---EXPECT-- -array(2) { - ["ImageDescription"]=> - string(11) "Ifd00000009" - ["DateTime"]=> - string(19) "2002:10:18 20:06:00" -} ---UEXPECTF-- -array(2) { - [u"ImageDescription"]=> - string(11) "Ifd00000009" - [u"DateTime"]=> - string(19) "2002:10:18 20:06:00" -} diff --git a/ext/exif/tests/exif006.phpt b/ext/exif/tests/exif006.phpt deleted file mode 100644 index fb932fac4227f..0000000000000 --- a/ext/exif/tests/exif006.phpt +++ /dev/null @@ -1,87 +0,0 @@ ---TEST-- -Check for exif_read_data, magic_quotes_runtime ---SKIPIF-- - ---INI-- -output_handler= -zlib.output_compression=0 ---FILE-- - ---EXPECTF-- -array(5) { - ["FILE"]=> - array(6) { - ["FileName"]=> - string(9) "test6.jpg" - ["FileDateTime"]=> - int(%d) - ["FileSize"]=> - int(1240) - ["FileType"]=> - int(2) - ["MimeType"]=> - string(10) "image/jpeg" - ["SectionsFound"]=> - string(33) "ANY_TAG, IFD0, THUMBNAIL, COMMENT" - } - ["COMPUTED"]=> - array(12) { - ["html"]=> - string(24) "width=\"1\" height=\"1\"" - ["Height"]=> - int(1) - ["Width"]=> - int(1) - ["IsColor"]=> - int(1) - ["ByteOrderMotorola"]=> - int(1) - ["UserComment"]=> - string(16) "Hallo \'Du\'+da!" - ["UserCommentEncoding"]=> - string(5) "ASCII" - ["Copyright"]=> - string(45) "Photo \"M. Boerger\"., Edited \'M. Boerger\'." - ["Copyright.Photographer"]=> - string(21) "Photo \"M. Boerger\"." - ["Copyright.Editor"]=> - string(22) "Edited \'M. Boerger\'." - ["Thumbnail.FileType"]=> - int(2) - ["Thumbnail.MimeType"]=> - string(10) "image/jpeg" - } - ["IFD0"]=> - array(2) { - ["Copyright"]=> - string(21) "Photo \"M. Boerger\"." - ["UserComment"]=> - string(5) "ASCII" - } - ["THUMBNAIL"]=> - array(2) { - ["JPEGInterchangeFormat"]=> - int(134) - ["JPEGInterchangeFormatLength"]=> - int(523) - } - ["COMMENT"]=> - array(3) { - [0]=> - string(13) "Comment \"1\"" - [1]=> - string(13) "Comment \'2\'" - [2]=> - string(13) "Comment #3end" - } -} diff --git a/ext/exif/tests/test1.jpg b/ext/exif/tests/test1.jpg deleted file mode 100644 index 121decb65ad30078dc0a09bd23c62fb49d8a44ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 523 zcmex=?U?LR#UJO6b*$~fG#Lh5@t1O zoG1cv!NH)5ABQ&u|Uz`(%4z|=H@feFac0AjUCZD6(}knIn|837sjCHV>($(jnjdQSPN zMd_(U46Z4eC8;S2NtFmOJqE{MXHQR{4v^srC8@8W}Q3`{`RvH)cmfw+x{ z3C3pP2J#vHWAoK*h86}M4h{}Z4jxWU9zkv{Zb4Cg9v*&C31MMTVPOeD9x#AX5Dq%Y z$ji;m%f~Cg$0s1d$HylEBKSlgS_FwP;Qs*zK@Om!8JQWC7?=bZnFSgD-vv6J@&6G< zd!TPv8NmSL2_RqwMhXin8#@Ol7dKE3sw5)=6EjRwfPs;Pk(r5wiIts=gO!=b7$_;o z%%Uh{$m$rFD6CZ2Xv8Kmap6WMWfjq&gGt6FMNJo-*;OY6e|Y#Yx!6=}(WYiKm&qY1 zu7?(vn2BEseU$oXbIak&rH?G-Fo!u)30G^Wo^@zZ98`D**A0d z@bvQb>C3ktzyAEYASg2QSfR-?v=A|MwW47&KiSS9IU zQPU*nVA14alaH!wAP2CknI5_Xbi`uu6xUF*lGI0VC*XF0I>HJ6Z!z#NgY6V#uxI!h TGX2y_mF53${vVC@kr?d&kaR;W diff --git a/ext/exif/tests/test3.jpg b/ext/exif/tests/test3.jpg deleted file mode 100644 index 7547a16630f6b7c2f1b4ecfa0b4bc2f53dcd8204..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1240 zcmex=&u|Uz`(%4z|=H@feFac0AjUCZD6(-knIn|837sjCHV>($(jnjdQSPN zMd_(U46Z4eC8;S2NtFmOJ%&&}PiKD@R|bY74A&U$Fx+Q&!tjmZ56}n(CZKCsfHWfz zw=prn*i76Y$^Y1Vb(^7ufro>GgOh`Ylaoh~n~Pgel%I!(UsOU^SX5Y8LXZaxpcI6I zPBQXxbMx}?3h?m>i16|8iGT<`5r`H+Vhs3yfI*N0=x9b}MkNL&K}Kdl#{YMLj%WOT zgwY=88&*az0C@rkn1PYP!pg?Z!O6u9)PpL?$iT!5lN4ZJWMO1xVqs!sXX9XH<}n6J z3No`O3K_CG1||wC6*d~NiA-F$(MefFH0WTGu}M+WMQ3)^Nx>f;eoQVl6P; z+&w(KynXue?Z>Y_|1JoM5+)WFu$$P~SWUrBP&5=`0lJ`2Nto5BaiR#w1qXvJelS)^ zdRWvn$vIdwx!B~RDjUcF>}sZmE&&~}SUklw)T|`+5!?y5U7(I|!v9+gJj`G_1sUua VzJ^RcwNhpI|C|3uqkSYsI{@YCL^c2b diff --git a/ext/exif/tests/test4.jpg b/ext/exif/tests/test4.jpg deleted file mode 100644 index 8a23a7b658ddc7ebf78fd17be50a39b0fffee3a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 713 zcma)2OH5Ni6g~5%?@Zt z)QzYC)IIoF3!-rge&Q!4wkm6=pY3?tS`99YcXH>PGxyxNnGtWqM>O|Eq7g8O;RG#+ zB1++jp+O)TJpwBL8MhZ0oW%MlZxMG9o}s)+TqB&ITp)go@CxM(;&#I4l$A(e9BG`z z05T}xXmtT6NngYTj3S3D^1sjH6*=E(<+-ytF@^AbAfma)d~j2nGQ*1TxH?|EMQ`T9RfJ3N97C2Cvl6cG+6gF?yncB zSgZaiHbasaC*7cMu1G9Eoho%lFfR=PzHs z_vqQ{?H?+Qgv=C$p2B6W_`p=j&AWQ+vDDb)tlr|^SzNKKZ5DTf@wRkMn=__Do~2bY r(VNMyZ%xlHCrf47(XKeXfo!v&21X`Eh6EsF_ zkeiEJP?VpChhJ1eSXfk8SVE8o44@Q*gHAH?a&z}sZmE&&~} qSUklw)T|`+5!?y5U7(I|!v9+gJj`G_1sUuazJ^RcwNhpI|C<0o6qVxu diff --git a/ext/exif/tests/test6.jpg b/ext/exif/tests/test6.jpg deleted file mode 100644 index 073cefdfe0221f6f2d283139df9f590ad46c47a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1240 zcmex=W>z~q&UQ}a?7 z{y$`z=~|JQ#=zj~%b>-;z`()4)HH*E3CPj_Vzo(aV73^L?GMBm0U7xv`3g$DdJ0bY zsYU6jMM`=Mt|^%%sVNHT2tjo{2FGA$Pfwr@kHnmudn!!If!EG#N4EFs7P22cvZ zK_?k`xw(1ycm??Q1Vs4w_(VVip9n;YATb8~KfoZ!0dzDYGoum%lOQ9rAmjhLK*uxw zKf-7a^bIQ`7=Szh1kAulVPR!s=iubx2I@hTWMp7shDi!AFtRW*GqEtSva@lpGV>S% zB?XyT6om{~9Rm}El?oe;*hD5S+~}mNA{uls$=IZ*>7p~c>ZITg4?iXsn~E*k)U4(* zIV8pP(Bcv^@k^nPQa^2OIefYF@n<*nDN9HZQ8PJ$F4p5 zX6_!IUfw=^`S#=2pMMtwMF|rN3)oHUY^Uu>f6As3gp4)HqQD+%8Z@IN|>-1|DXxoq`PZ W3|~X0pIWK1{Qu4WqtQMRqa6S<2|%_0 diff --git a/ext/ext_skel b/ext/ext_skel deleted file mode 100755 index 58cc89f80f2d0..0000000000000 --- a/ext/ext_skel +++ /dev/null @@ -1,300 +0,0 @@ -#!/bin/sh - -givup() { - echo $* - exit 1 -} - -usage() { -echo "$0 --extname=module [--proto=file] [--stubs=file] [--xml[=file]]" -echo " [--skel=dir] [--full-xml] [--no-help]" -echo "" -echo " --extname=module module is the name of your extension" -echo " --proto=file file contains prototypes of functions to create" -echo " --stubs=file generate only function stubs in file" -echo " --xml generate xml documentation to be added to phpdoc-cvs" -echo " --skel=dir path to the skeleton directory" -echo " --full-xml generate xml documentation for a self-contained extension" -echo " (not yet implemented)" -echo " --no-help don't try to be nice and create comments in the code" -echo " and helper functions to test if the module compiled" -exit 1 -} - -if test $# = 0; then - usage -fi - -while test $# -gt 0; do - case "$1" in - -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) optarg= ;; - esac - - case $1 in - --extname=?*) - extname=$optarg - EXTNAME=`echo $extname | tr "[:lower:]" "[:upper:]"` - ;; - --proto=?*) - proto=$optarg - ;; - --stubs=*) - stubs=yes - stubfile=$optarg - ;; - --xml) - xml="yes" - ;; - --xml=?*) - xml=$optarg - ;; - --full-xml) - full_xml="yes" - ;; - --no-help) - no_help="yes" - ;; - --skel=?*) - skel_dir=$optarg - ;; - *) - usage - ;; - esac - shift -done - -if test -d "$extname" ; then - givup "Directory $extname already exists." -fi - -if test -z "$skel_dir"; then - skel_dir="skeleton" -fi - -## convert skel_dir to full path -skel_dir=`cd $skel_dir && pwd` - -test -d $skel_dir || givup "directory $skel_dir does not exist or is not directory" - -if echo '\c' | grep -s c >/dev/null 2>&1 -then - ECHO_N="echo -n" - ECHO_C="" -else - ECHO_N="echo" - ECHO_C='\c' -fi - -if test -z "$stubs"; then - echo "Creating directory $extname" - stubfile=$extname"/function_stubs" - mkdir $extname || givup "Cannot create directory $extname" -fi - -if test -n "$proto"; then - cat $proto | awk -v extname=$extname -v stubs=$stubs -v stubfile=$stubfile -v xml=$xml -v full_xml=$full_xml -v i_know_what_to_do_shut_up_i_dont_need_your_help_mode=$no_help -f $skel_dir/create_stubs -fi - -if test -z "$stubs"; then - cd $extname - chmod 755 . - -$ECHO_N "Creating basic files:$ECHO_C" - -$ECHO_N " config.m4$ECHO_C" -cat >config.m4 < check with-path - dnl SEARCH_PATH="/usr/local /usr" # you might want to change this - dnl SEARCH_FOR="/include/$extname.h" # you most likely want to change this - dnl if test -r \$PHP_$EXTNAME/\$SEARCH_FOR; then # path given as parameter - dnl ${EXTNAME}_DIR=\$PHP_$EXTNAME - dnl else # search default path list - dnl AC_MSG_CHECKING([for $extname files in default path]) - dnl for i in \$SEARCH_PATH ; do - dnl if test -r \$i/\$SEARCH_FOR; then - dnl ${EXTNAME}_DIR=\$i - dnl AC_MSG_RESULT(found in \$i) - dnl fi - dnl done - dnl fi - dnl - dnl if test -z "\$${EXTNAME}_DIR"; then - dnl AC_MSG_RESULT([not found]) - dnl AC_MSG_ERROR([Please reinstall the $extname distribution]) - dnl fi - - dnl # --with-$extname -> add include path - dnl PHP_ADD_INCLUDE(\$${EXTNAME}_DIR/include) - - dnl # --with-$extname -> check for lib and symbol presence - dnl LIBNAME=$extname # you may want to change this - dnl LIBSYMBOL=$extname # you most likely want to change this - - dnl PHP_CHECK_LIBRARY(\$LIBNAME,\$LIBSYMBOL, - dnl [ - dnl PHP_ADD_LIBRARY_WITH_PATH(\$LIBNAME, \$${EXTNAME}_DIR/lib, ${EXTNAME}_SHARED_LIBADD) - dnl AC_DEFINE(HAVE_${EXTNAME}LIB,1,[ ]) - dnl ],[ - dnl AC_MSG_ERROR([wrong $extname lib version or lib not found]) - dnl ],[ - dnl -L\$${EXTNAME}_DIR/lib -lm -ldl - dnl ]) - dnl - dnl PHP_SUBST(${EXTNAME}_SHARED_LIBADD) - - PHP_NEW_EXTENSION($extname, $extname.c, \$ext_shared) -fi -eof - -$ECHO_N " config.w32$ECHO_C" -cat >config.w32 <.cvsignore < sedscript -echo "s/EXTNAME/$EXTNAME/g" >> sedscript -echo '/__function_entries_here__/r function_entries' >> sedscript -echo '/__function_stubs_here__/r function_stubs' >> sedscript -echo '/__header_here__/r ../../header' >> sedscript -echo '/__footer_here__/r ../../footer' >> sedscript -echo '/__function_entries_here__/D' >> sedscript -echo '/__function_stubs_here__/D' >> sedscript -echo '/__header_here__/D' >> sedscript -echo '/__footer_here__/D' >> sedscript -if [ ! -z "$no_help" ]; then - echo "/confirm_$extname_compiled/D" >> sedscript - echo '/Remove the following/,/^\*\//D' >> sedscript - echo 's/[[:space:]]\/\*.\+\*\///' >> sedscript - echo 's/^\/\*.*\*\/$//' >> sedscript - echo '/^[[:space:]]*\/\*/,/^[[:space:]]*\*\//D' >> sedscript -fi - -sed -f sedscript < $skel_dir/skeleton.c > $extname.c - - -$ECHO_N " php_$extname.h$ECHO_C" -echo "s/extname/$extname/g" > sedscript -echo "s/EXTNAME/$EXTNAME/g" >> sedscript -echo '/__function_declarations_here__/r function_declarations' >> sedscript -echo '/__header_here__/r ../../header' >> sedscript -echo '/__footer_here__/r ../../footer' >> sedscript -echo '/__function_declarations_here__/D' >> sedscript -echo '/__header_here__/D' >> sedscript -echo '/__footer_here__/D' >> sedscript -if [ ! -z "$no_help" ]; then - echo "/confirm_$extname_compiled/D" >> sedscript - echo 's/[[:space:]]\/\*.\+\*\///' >> sedscript - echo 's/^\/\*.*\*\/$//' >> sedscript - echo '/^[[:space:]]*\/\*/,/^[[:space:]]*\*\//D' >> sedscript -fi -sed -f sedscript <$skel_dir/php_skeleton.h > php_$extname.h - -$ECHO_N " CREDITS$ECHO_C" -echo "s/extname/$extname/g" > sedscript -sed -f sedscript <$skel_dir/CREDITS > CREDITS - -$ECHO_N " EXPERIMENTAL$ECHO_C" -echo "s/extname/$extname/g" > sedscript -sed -f sedscript <$skel_dir/EXPERIMENTAL > EXPERIMENTAL - -$ECHO_N " tests/001.phpt$ECHO_C" -mkdir tests || givup "Cannot create tests directory" -chmod 755 tests -sed -f sedscript <$skel_dir/tests/001.phpt > tests/001.phpt - -if test -z "$stubs" && test -z "$no_help"; then - $ECHO_N " $extname.php$ECHO_C" - sed \ - -e "s/extname/$extname/g" \ - <$skel_dir/skeleton.php \ - > $extname.php -fi - -rm sedscript - -if test -n "$proto"; then - if test -z "$stubs"; then - rm function_entries - rm function_declarations - rm function_stubs - fi - if test -f function_warning; then - rm function_warning - warning=" -NOTE! Because some arguments to functions were resources, the code generated -cannot yet be compiled without editing. Please consider this to be step 4.5 -in the instructions above. -" - fi -fi - -find . -type f | xargs chmod 644 -find . -type d | xargs chmod 755 -fi - -echo " [done]." - -if test -z "$no_help" && test -z "$stubs"; then - cat < \ No newline at end of file diff --git a/ext/fbsql/CREDITS b/ext/fbsql/CREDITS deleted file mode 100644 index 3500fdc89e084..0000000000000 --- a/ext/fbsql/CREDITS +++ /dev/null @@ -1,2 +0,0 @@ -FBSQL -Frank M. Kromann diff --git a/ext/fbsql/Readme_w32.txt b/ext/fbsql/Readme_w32.txt deleted file mode 100644 index af8bfdc1e9676..0000000000000 --- a/ext/fbsql/Readme_w32.txt +++ /dev/null @@ -1,22 +0,0 @@ -Rules for building FBSQL ------------------------- - -The fbsql project contains 2 configurations. - -To build this extension you must first download and -install FrontBase. The default instalation path would -be c:\usr\FrontBase. If you install it in another location -you need to change the include path in the project before -compiling. - -Start Visual Studio, load php_modules.dsw, select the fbsql projects, -configuration and build it. - -Finaly copy php_fbsql.dll to your extension directory and enable it -by adding the following line tp php.ini - -extension=php_fbsql.dll - -or by calling dl() in each script - -dl("php_fbsql.dll"); \ No newline at end of file diff --git a/ext/fbsql/config.m4 b/ext/fbsql/config.m4 deleted file mode 100644 index 384c4cd3808d5..0000000000000 --- a/ext/fbsql/config.m4 +++ /dev/null @@ -1,43 +0,0 @@ -dnl -dnl $Id$ -dnl - -PHP_ARG_WITH(fbsql, for FrontBase SQL92 (fbsql) support, -[ --with-fbsql[=DIR] Include FrontBase support. DIR is the FrontBase base directory]) - -if test "$PHP_FBSQL" != "no"; then - - AC_DEFINE(HAVE_FBSQL, 1, [Whether you have FrontBase]) - PHP_NEW_EXTENSION(fbsql, php_fbsql.c, $ext_shared) - - FBSQL_INSTALLATION_DIR="" - if test "$PHP_FBSQL" = "yes"; then - - for i in /Local/Library /usr/local /usr /opt /Library /usr/lib; do - if test -f $i/FrontBase/include/FBCAccess/FBCAccess.h; then - FBSQL_INSTALLATION_DIR=$i/FrontBase - break - fi - done - - if test -z "$FBSQL_INSTALLATION_DIR"; then - AC_MSG_ERROR(Cannot find FrontBase in known installation directories) - fi - - elif test "$PHP_FBSQL" != "no"; then - - if test -f $PHP_FBSQL/include/FBCAccess/FBCAccess.h; then - FBSQL_INSTALLATION_DIR=$PHP_FBSQL - else - AC_MSG_ERROR(Directory $PHP_FBSQL is not a FrontBase installation directory) - fi - fi - - if test ! -r "$FBSQL_INSTALLATION_DIR/lib/libFBCAccess.a"; then - AC_MSG_ERROR(Could not find $FBSQL_INSTALLATION_DIR/lib/libFBCAccess.a) - fi - - PHP_ADD_LIBRARY_WITH_PATH(FBCAccess, $FBSQL_INSTALLATION_DIR/lib, FBSQL_SHARED_LIBADD) - PHP_ADD_INCLUDE($FBSQL_INSTALLATION_DIR/include) - PHP_SUBST(FBSQL_SHARED_LIBADD) -fi diff --git a/ext/fbsql/config.w32 b/ext/fbsql/config.w32 deleted file mode 100644 index 0c6909ab52948..0000000000000 --- a/ext/fbsql/config.w32 +++ /dev/null @@ -1,19 +0,0 @@ -// $Id$ -// vim:ft=javascript - -ARG_WITH("fbsql", "FrontBase support", "no"); - -if (PHP_FBSQL == "yes") { - if (CHECK_LIB("FBCAccess.lib", "fbsql", - "\\usr\\FrontBase\\lib;" + PHP_PHP_BUILD + "\\FrontBase\\lib;" - + PHP_FBSQL + "\\lib;" + PHP_FBSQL) && - CHECK_HEADER_ADD_INCLUDE("FBCAccess\\FBCAccess.h", "CFLAGS_FBSQL", - "\\usr\\FrontBase\\include;" + PHP_PHP_BUILD + "\\FrontBase\\include;" - + PHP_FBSQL + "\\include;" + PHP_FBSQL)) { - EXTENSION("fbsql", "php_fbsql.c"); - ADD_FLAG('CFLAGS_FBSQL', '/DWinNT=1'); - AC_DEFINE('HAVE_FBSQL', 1, 'Have FrontBase support'); - } else { - WARNING("fbsql not enabled; libraries and headers not found"); - } -} diff --git a/ext/fbsql/fbsql.dsp b/ext/fbsql/fbsql.dsp deleted file mode 100644 index a71186361617a..0000000000000 --- a/ext/fbsql/fbsql.dsp +++ /dev/null @@ -1,171 +0,0 @@ -# Microsoft Developer Studio Project File - Name="fbsql" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=fbsql - Win32 Debug_TS -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "fbsql.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "fbsql.mak" CFG="fbsql - Win32 Debug_TS" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "fbsql - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "fbsql - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "fbsql - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "fbsql - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "fbsql - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FBSQL_EXPORTS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "\usr\FrontBase\Include" /D "NDEBUG" /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL_FBSQL" /D HAVE_FBSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WinNT" /D ZEND_DEBUG=0 /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x40d /d "NDEBUG" -# ADD RSC /l 0x40d /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5nts.lib /nologo /dll /machine:I386 /out:"Release/php_fbsql.dll" /libpath:"..\..\Release" - -!ELSEIF "$(CFG)" == "fbsql - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FBSQL_EXPORTS" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "\usr\FrontBase\Include" /D "_DEBUG" /D ZEND_DEBUG=1 /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL_FBSQL" /D HAVE_FBSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WinNT" /FR /YX /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x40d /d "_DEBUG" -# ADD RSC /l 0x40d /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5nts_debug.lib /nologo /dll /debug /machine:I386 /out:"Debug/php_fbsql.dll" /pdbtype:sept /libpath:"..\..\Debug" - -!ELSEIF "$(CFG)" == "fbsql - Win32 Debug_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_TS" -# PROP BASE Intermediate_Dir "Debug_TS" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug_TS" -# PROP Intermediate_Dir "Debug_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL" /D HAVE_FBSQL=1 /FR /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "\usr\FrontBase\Include" /D "_DEBUG" /D ZEND_DEBUG=1 /D "ZTS" /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL" /D HAVE_FBSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WinNT" /FR /YX /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x40d /d "_DEBUG" -# ADD RSC /l 0x40d /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib php5ts_debug.lib FBCAccess.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"LIBC" /out:"..\..\Debug_TS/php_fbsql.dll" /pdbtype:sept /libpath:"..\..\Debug_TS" /libpath:"\usr\FrontBase\lib" - -!ELSEIF "$(CFG)" == "fbsql - Win32 Release_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_TS" -# PROP BASE Intermediate_Dir "Release_TS" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_TS" -# PROP Intermediate_Dir "Release_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL" /D HAVE_FBSQL=1 /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "\usr\FrontBase\Include" /D "NDEBUG" /D ZTS=1 /D ZEND_DEBUG=0 /D "FBSQL_EXPORTS" /D "COMPILE_DL_FBSQL" /D HAVE_FBSQL=1 /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WinNT" /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x40d /d "NDEBUG" -# ADD RSC /l 0x40d /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib FBCAccess.lib ws2_32.lib /nologo /dll /machine:I386 /nodefaultlib:"LIBC" /out:"..\..\Release_TS/php_fbsql.dll" /libpath:"..\..\Release_TS" /libpath:"\usr\FrontBase\lib" /libpath:"..\..\Release_TS_inline" - -!ENDIF - -# Begin Target - -# Name "fbsql - Win32 Release" -# Name "fbsql - Win32 Debug" -# Name "fbsql - Win32 Debug_TS" -# Name "fbsql - Win32 Release_TS" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\php_fbsql.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\php_fbsql.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=.\Readme_w32.txt -# End Source File -# End Target -# End Project diff --git a/ext/fbsql/php_fbsql.c b/ext/fbsql/php_fbsql.c deleted file mode 100644 index b4902311ad7e2..0000000000000 --- a/ext/fbsql/php_fbsql.c +++ /dev/null @@ -1,4150 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http:/*www.php.net/license/3_0.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Frank M. Kromann | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -/* TODO: - * - * ? Safe mode implementation - */ - -/* SB's list: - - API for a more natural FB connect semantic - - Connect & set session - - Autoreconnect when disconnected - - Comments and cleanup - - BUGS - - Select db with no arguments - - Query with everything defaulted -*/ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_globals.h" -#include "ext/standard/info.h" -#include "ext/standard/php_string.h" - -#ifdef PHP_WIN32 -#include -#else -#include - -#if HAVE_SYS_TYPES_H -#include -#endif -#include -#include -#endif - -#include "php_ini.h" - -#define HAVE_FBSQL 1 - -#ifndef min -# define min(a,b) ((a)<(b)?(a):(b)) -#endif - -#if HAVE_FBSQL -#include "php_fbsql.h" -#include - -static int le_result, le_link, le_plink; - -struct PHPFBResult; -typedef struct PHPFBResult PHPFBResult; - -struct PHPFBLink; -typedef struct PHPFBLink PHPFBLink; - -/* The PHPFBLink structure represents a fbsql link. The lion is used for - a connection to a machine, it may be persistent and is reference counted. - The reason for refcounting is mostly to avoid to think, it work independent of - any wierd and unforseen allocation deallocation order. - - The PHPFBDatabse structure implements to actual connection to a FrontBase server - ot may be persistent is the link it is connected to is persistent, and refcounted - for the same reasons as above. - - The PHPFBResult structure implements a result from the FrontBase server, and does all - required buffereing from of results. - - In the PHP code the 3 above a data structures are referenced by means of integers in the - range from 1 to som configurable maximum. You can put a limit to the number of links, databases - and results. The integer identifications is implemented by insertion in the list, which is passed - as an argument to all the functions, please note the list is polymorph. - - Database objects and link objects are all reused, base on the host name user name, host name database name - user name. So connecting twice to the same database as the same user will return the same database id. - We use the same coding for that as fbsql does, explioiting the underlying implementation of the lists. - - Persistent objects are put in the persistent list as well, but only by name, if you connect to a persistent object - and it is not in the list it is simply added and get a new index, and refcounted. Tricky, tricky ... -*/ - -/* Some functions which should be exported from FBCAccess */ - -void* fbaObjectAtIndex(); -void fbaRelease(); -unsigned int fbaCount(); - -struct FBCAutoStartInfo { - FBArray* infoLines; -}; - -struct PHPFBResult -{ - PHPFBLink* link; /* The link for the result, may be NULL if no link */ - char* fetchHandle; /* The fetch handle, the id used by the server. */ - FBCMetaData* metaData; /* The metadata describing the result */ - FBCMetaData* ResultmetaData; /* The metadata describing the result */ - FBCRowHandler* rowHandler; /* The row handler, the Frontbase structure used for accessing rows in the result */ - unsigned int batchSize; /* The number of row to fetch when expanding the number of rows in the row handler */ - unsigned int rowCount; /* The number of rows in the results set. The number of row is not in */ - /* general known when the select is done, one typically needs to fetch all the row - to figure out how many row you got. When the rowCount is unknown the value is - 0x7ffffffff */ - int columnCount; /* Number of columns in the row set. */ - unsigned int rowIndex; /* The current row index. */ - int columnIndex; /* The current column index */ - void** row; /* The last row accessed */ - FBArray* array; /* The link may return a result set, the database list, we implement that by the */ - /* FBArray, just a list of strings. */ - FBCPList* list; /* The same special kind result just for property list from extract, schema info. */ - unsigned int selectResults; /* number of results in select */ - unsigned int currentResult; /* current result number */ - int lobMode; /* 0=Fetch data (default); 1=Fetch handle */ -}; - -struct PHPFBLink -{ - int persistent; /* persistent ? */ - char* hostName; /* Host name */ - char* userName; /* User name */ - char* userPassword; /* User password */ - char* databasePassword; /* Database password */ - char* databaseName; /* The name of the database */ - FBCExecHandler* execHandler; /* The exechandler, can be used for database operations */ - FBCDatabaseConnection* connection; /* The connection to the database */ - unsigned int affectedRows; /* Number of rows affected by the last SQL statement */ - long autoCommit; /* Enable or disable autoCommit */ - unsigned int errorNo; /* The latest error on the connection, 0 is ok. */ - char* errorText; /* The error text */ - unsigned int insert_id; /* The row index of the latest row inserted into the database */ -}; - -#define FBSQL_ASSOC 1<<0 -#define FBSQL_NUM 1<<1 -#define FBSQL_BOTH (FBSQL_ASSOC|FBSQL_NUM) - -#define FBSQL_LOCK_DEFERRED 0 -#define FBSQL_LOCK_OPTIMISTIC 1 -#define FBSQL_LOCK_PESSIMISTIC 2 /* default */ - -#define FBSQL_ISO_READ_UNCOMMITTED 0 -#define FBSQL_ISO_READ_COMMITTED 1 -#define FBSQL_ISO_REPEATABLE_READ 2 -#define FBSQL_ISO_SERIALIZABLE 3 /* default */ -#define FBSQL_ISO_VERSIONED 4 - -#define FBSQL_LOB_DIRECT 0 /* default */ -#define FBSQL_LOB_HANDLE 1 /* default */ - -#define DIGEST_BUFFER_SIZE 17 /* fbcDigestPassword() expects a preallocated buffer for 16 bytes plus termination */ - -ZEND_DECLARE_MODULE_GLOBALS(fbsql) -static PHP_GINIT_FUNCTION(fbsql); - -int mdOk(PHPFBLink* link, FBCMetaData* md, char* sql); -char *DigestPassword(char *user, char *password) -{ - char *digest = NULL; - - if (user && strlen(user) && password && strlen(password)) { - char *user_upper = estrdup(user); - digest = emalloc(DIGEST_BUFFER_SIZE); - digest[0] = '\0'; - (void)fbcDigestPassword(php_strtoupper(user_upper, strlen(user_upper)), password, digest); - efree(user_upper); - } - - return digest; -} - -/* {{{ arginfo */ -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_connect, 0, 0, 0) - ZEND_ARG_INFO(0, hostname) - ZEND_ARG_INFO(0, username) - ZEND_ARG_INFO(0, password) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_pconnect, 0, 0, 0) - ZEND_ARG_INFO(0, username) - ZEND_ARG_INFO(0, hostname) - ZEND_ARG_INFO(0, password) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_close, 0, 0, 0) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fbsql_set_transaction, 0) - ZEND_ARG_INFO(0, link_identifier) - ZEND_ARG_INFO(0, locking) - ZEND_ARG_INFO(0, isolation) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_autocommit, 0, 0, 1) - ZEND_ARG_INFO(0, link_identifier) - ZEND_ARG_INFO(0, OnOff) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_commit, 0, 0, 0) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_rollback, 0, 0, 0) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_create_blob, 0, 0, 1) - ZEND_ARG_INFO(0, blob_data) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_create_clob, 0, 0, 1) - ZEND_ARG_INFO(0, clob_data) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fbsql_set_lob_mode, 0) - ZEND_ARG_INFO(0, result) - ZEND_ARG_INFO(0, lob_mode) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_read_blob, 0, 0, 1) - ZEND_ARG_INFO(0, blob_handle) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_read_clob, 0, 0, 1) - ZEND_ARG_INFO(0, clob_handle) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_blob_size, 0, 0, 1) - ZEND_ARG_INFO(0, blob_handle) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_clob_size, 0, 0, 1) - ZEND_ARG_INFO(0, clob_handle) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_hostname, 0, 0, 1) - ZEND_ARG_INFO(0, link_identifier) - ZEND_ARG_INFO(0, host_name) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_database, 0, 0, 1) - ZEND_ARG_INFO(0, link_identifier) - ZEND_ARG_INFO(0, database) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_database_password, 0, 0, 1) - ZEND_ARG_INFO(0, link_identifier) - ZEND_ARG_INFO(0, database_password) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_username, 0, 0, 1) - ZEND_ARG_INFO(0, link_identifier) - ZEND_ARG_INFO(0, username) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_password, 0, 0, 1) - ZEND_ARG_INFO(0, link_identifier) - ZEND_ARG_INFO(0, password) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fbsql_set_password, 0) - ZEND_ARG_INFO(0, link_identifier) - ZEND_ARG_INFO(0, user) - ZEND_ARG_INFO(0, password) - ZEND_ARG_INFO(0, old_password) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_select_db, 0, 0, 0) - ZEND_ARG_INFO(0, database_name) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_set_characterset, 0, 0, 2) - ZEND_ARG_INFO(0, link_identifier) - ZEND_ARG_INFO(0, charcterset) - ZEND_ARG_INFO(0, in_out_both) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_change_user, 0, 0, 2) - ZEND_ARG_INFO(0, user) - ZEND_ARG_INFO(0, password) - ZEND_ARG_INFO(0, database) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_create_db, 0, 0, 1) - ZEND_ARG_INFO(0, database_name) - ZEND_ARG_INFO(0, link_identifier) - ZEND_ARG_INFO(0, database_options) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_drop_db, 0, 0, 1) - ZEND_ARG_INFO(0, database_name) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_start_db, 0, 0, 1) - ZEND_ARG_INFO(0, database_name) - ZEND_ARG_INFO(0, link_identifier) - ZEND_ARG_INFO(0, database_options) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_stop_db, 0, 0, 1) - ZEND_ARG_INFO(0, database_name) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_db_status, 0, 0, 1) - ZEND_ARG_INFO(0, database_name) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_query, 0, 0, 1) - ZEND_ARG_INFO(0, query) - ZEND_ARG_INFO(0, link_identifier) - ZEND_ARG_INFO(0, batch_size) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_db_query, 0, 0, 2) - ZEND_ARG_INFO(0, database_name) - ZEND_ARG_INFO(0, query) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_list_dbs, 0, 0, 0) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_list_tables, 0, 0, 1) - ZEND_ARG_INFO(0, database) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_list_fields, 0, 0, 2) - ZEND_ARG_INFO(0, database_name) - ZEND_ARG_INFO(0, table_name) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_error, 0, 0, 0) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_errno, 0, 0, 0) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_warnings, 0, 0, 0) - ZEND_ARG_INFO(0, flag) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_affected_rows, 0, 0, 0) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fbsql_rows_fetched, 0) - ZEND_ARG_INFO(0, result) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_insert_id, 0, 0, 0) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_result, 0, 0, 1) - ZEND_ARG_INFO(0, result) - ZEND_ARG_INFO(0, row) - ZEND_ARG_INFO(0, field) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fbsql_next_result, 0) - ZEND_ARG_INFO(0, result) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fbsql_num_rows, 0) - ZEND_ARG_INFO(0, result) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fbsql_num_fields, 0) - ZEND_ARG_INFO(0, result) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fbsql_fetch_row, 0) - ZEND_ARG_INFO(0, result) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fbsql_fetch_assoc, 0) - ZEND_ARG_INFO(0, result) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_fetch_object, 0, 0, 1) - ZEND_ARG_INFO(0, result) - ZEND_ARG_INFO(0, result_type) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_fetch_array, 0, 0, 1) - ZEND_ARG_INFO(0, result) - ZEND_ARG_INFO(0, result_type) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fbsql_data_seek, 0) - ZEND_ARG_INFO(0, result) - ZEND_ARG_INFO(0, row_number) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fbsql_fetch_lengths, 0) - ZEND_ARG_INFO(0, result) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_fetch_field, 0, 0, 1) - ZEND_ARG_INFO(0, result) - ZEND_ARG_INFO(0, field_index) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_field_seek, 0, 0, 1) - ZEND_ARG_INFO(0, result) - ZEND_ARG_INFO(0, field_index) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_field_name, 0, 0, 1) - ZEND_ARG_INFO(0, result) - ZEND_ARG_INFO(0, field_index) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_field_table, 0, 0, 1) - ZEND_ARG_INFO(0, result) - ZEND_ARG_INFO(0, field_index) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_field_len, 0, 0, 1) - ZEND_ARG_INFO(0, result) - ZEND_ARG_INFO(0, field_index) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_field_type, 0, 0, 1) - ZEND_ARG_INFO(0, result) - ZEND_ARG_INFO(0, field_index) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_field_flags, 0, 0, 1) - ZEND_ARG_INFO(0, result) - ZEND_ARG_INFO(0, field_index) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fbsql_table_name, 0) - ZEND_ARG_INFO(0, result) - ZEND_ARG_INFO(0, index) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fbsql_free_result, 0) - ZEND_ARG_INFO(0, result) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fbsql_get_autostart_info, 0, 0, 0) - ZEND_ARG_INFO(0, link_identifier) -ZEND_END_ARG_INFO() - -/* }}} */ - -/* {{{ fbsql_functions[] - */ -zend_function_entry fbsql_functions[] = { - PHP_FE(fbsql_connect, arginfo_fbsql_connect) - PHP_FE(fbsql_pconnect, arginfo_fbsql_pconnect) - PHP_FE(fbsql_close, arginfo_fbsql_close) - PHP_FE(fbsql_select_db, arginfo_fbsql_select_db) - PHP_FE(fbsql_set_characterset, arginfo_fbsql_set_characterset) - PHP_FE(fbsql_create_db, arginfo_fbsql_create_db) - PHP_FE(fbsql_drop_db, arginfo_fbsql_drop_db) - PHP_FE(fbsql_start_db, arginfo_fbsql_start_db) - PHP_FE(fbsql_stop_db, arginfo_fbsql_stop_db) - PHP_FE(fbsql_db_status, arginfo_fbsql_db_status) - PHP_FE(fbsql_query, arginfo_fbsql_query) - PHP_FE(fbsql_db_query, arginfo_fbsql_db_query) - PHP_FE(fbsql_list_dbs, arginfo_fbsql_list_dbs) - PHP_FE(fbsql_list_tables, arginfo_fbsql_list_tables) - PHP_FE(fbsql_list_fields, arginfo_fbsql_list_fields) - PHP_FE(fbsql_error, arginfo_fbsql_error) - PHP_FE(fbsql_errno, arginfo_fbsql_errno) - PHP_FE(fbsql_affected_rows, arginfo_fbsql_affected_rows) - PHP_FE(fbsql_rows_fetched, arginfo_fbsql_rows_fetched) - PHP_FE(fbsql_insert_id, arginfo_fbsql_insert_id) - PHP_FE(fbsql_result, arginfo_fbsql_result) - PHP_FE(fbsql_next_result, arginfo_fbsql_next_result) - PHP_FE(fbsql_num_rows, arginfo_fbsql_num_rows) - PHP_FE(fbsql_num_fields, arginfo_fbsql_num_fields) - PHP_FE(fbsql_fetch_row, arginfo_fbsql_fetch_row) - PHP_FE(fbsql_fetch_array, arginfo_fbsql_fetch_array) - PHP_FE(fbsql_fetch_assoc, arginfo_fbsql_fetch_assoc) - PHP_FE(fbsql_fetch_object, arginfo_fbsql_fetch_object) - PHP_FE(fbsql_data_seek, arginfo_fbsql_data_seek) - PHP_FE(fbsql_fetch_lengths, arginfo_fbsql_fetch_lengths) - PHP_FE(fbsql_fetch_field, arginfo_fbsql_fetch_field) - PHP_FE(fbsql_field_seek, arginfo_fbsql_field_seek) - PHP_FE(fbsql_free_result, arginfo_fbsql_free_result) - PHP_FE(fbsql_field_name, arginfo_fbsql_field_name) - PHP_FE(fbsql_field_table, arginfo_fbsql_field_table) - PHP_FE(fbsql_field_len, arginfo_fbsql_field_len) - PHP_FE(fbsql_field_type, arginfo_fbsql_field_type) - PHP_FE(fbsql_field_flags, arginfo_fbsql_field_flags) - PHP_FE(fbsql_table_name, arginfo_fbsql_table_name) - -/* Fontbase additions: */ - PHP_FE(fbsql_set_transaction, arginfo_fbsql_set_transaction) - PHP_FE(fbsql_autocommit, arginfo_fbsql_autocommit) - PHP_FE(fbsql_commit, arginfo_fbsql_commit) - PHP_FE(fbsql_rollback, arginfo_fbsql_rollback) - - PHP_FE(fbsql_create_blob, arginfo_fbsql_create_blob) - PHP_FE(fbsql_create_clob, arginfo_fbsql_create_clob) - PHP_FE(fbsql_set_lob_mode, arginfo_fbsql_set_lob_mode) - PHP_FE(fbsql_read_blob, arginfo_fbsql_read_blob) - PHP_FE(fbsql_read_clob, arginfo_fbsql_read_clob) - PHP_FE(fbsql_blob_size, arginfo_fbsql_blob_size) - PHP_FE(fbsql_clob_size, arginfo_fbsql_clob_size) - - PHP_FE(fbsql_hostname, arginfo_fbsql_hostname) - PHP_FE(fbsql_database, arginfo_fbsql_database) - PHP_FE(fbsql_database_password, arginfo_fbsql_database_password) - PHP_FE(fbsql_username, arginfo_fbsql_username) - PHP_FE(fbsql_password, arginfo_fbsql_password) - PHP_FE(fbsql_warnings, arginfo_fbsql_warnings) - PHP_FE(fbsql_set_password, arginfo_fbsql_set_password) - - PHP_FE(fbsql_get_autostart_info, arginfo_fbsql_get_autostart_info) -/* PHP_FE(fbsql_set_autostart_info, NULL) */ - -/* Aliases: */ - PHP_FALIAS(fbsql, fbsql_db_query, arginfo_fbsql_db_query) - PHP_FALIAS(fbsql_tablename, fbsql_table_name, arginfo_fbsql_table_name) - - {NULL, NULL, NULL} -}; -/* }}} */ - -zend_module_entry fbsql_module_entry = { - STANDARD_MODULE_HEADER, - "fbsql", - fbsql_functions, - PHP_MINIT(fbsql), - PHP_MSHUTDOWN(fbsql), - PHP_RINIT(fbsql), - PHP_RSHUTDOWN(fbsql), - PHP_MINFO(fbsql), - NO_VERSION_YET, - PHP_MODULE_GLOBALS(fbsql), - PHP_GINIT(fbsql), - NULL, - NULL, - STANDARD_MODULE_PROPERTIES_EX -}; - -#ifdef COMPILE_DL_FBSQL -ZEND_GET_MODULE(fbsql) -#endif - -#define CHECK_LINK(link) { \ - if (link==-1) { \ - if (FB_SQL_G(generateWarnings)) \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "A link to the server could not be established"); \ - RETURN_FALSE; \ - } \ -} - -static void phpfbReleaseResult(zend_rsrc_list_entry *rsrc TSRMLS_DC); -static void phpfbReleaseLink(zend_rsrc_list_entry *rsrc TSRMLS_DC); -static void phpfbReleasePLink(zend_rsrc_list_entry *rsrc TSRMLS_DC); - -static void phpfbReleaseResult(zend_rsrc_list_entry *rsrc TSRMLS_DC) -{ - PHPFBResult* result = (PHPFBResult *)rsrc->ptr; - - if (result) - { - if (result->fetchHandle) { - FBCMetaData *md = fbcdcCancelFetch(result->link->connection, result->fetchHandle); - fbcmdRelease(md); - } - if (result->rowHandler) fbcrhRelease(result->rowHandler); - if (result->list) fbcplRelease(result->list); - if (result->array) fbaRelease(result->array); - if (result->ResultmetaData) fbcmdRelease(result->ResultmetaData); - efree(result); - } -} - - -static void phpfbReleaseLink(zend_rsrc_list_entry *rsrc TSRMLS_DC) -{ - PHPFBLink* link = (PHPFBLink *)rsrc->ptr; - - if (link) - { - if (link->hostName) free(link->hostName); - if (link->userName) free(link->userName); - if (link->userPassword) free(link->userPassword); - if (link->databasePassword) free(link->databasePassword); - if (link->databaseName) free(link->databaseName); - if (link->errorText) free(link->errorText); - if (link->connection) { - fbcdcClose(link->connection); - fbcdcRelease(link->connection); - } - if (link->execHandler) fbcehRelease(link->execHandler); - efree(link); - FB_SQL_G(linkCount)--; - } -} - -static void phpfbReleasePLink(zend_rsrc_list_entry *rsrc TSRMLS_DC) -{ - PHPFBLink* link = (PHPFBLink *)rsrc->ptr; - - if (link) - { - if (link->hostName) free(link->hostName); - if (link->userName) free(link->userName); - if (link->userPassword) free(link->userPassword); - if (link->databasePassword) free(link->databasePassword); - if (link->databaseName) free(link->databaseName); - if (link->errorText) free(link->errorText); - if (link->connection) { - fbcdcClose(link->connection); - fbcdcRelease(link->connection); - } - if (link->execHandler) fbcehRelease(link->execHandler); - free(link); - FB_SQL_G(linkCount)--; - FB_SQL_G(persistentCount)--; - } -} - -static void php_fbsql_set_default_link(int id TSRMLS_DC) -{ - if (FB_SQL_G(linkIndex)!=-1) { - zend_list_delete(FB_SQL_G(linkIndex)); - } - FB_SQL_G(linkIndex) = id; - zend_list_addref(id); -} - -static int php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAMETERS) -{ - if (FB_SQL_G(linkIndex)==-1) { /* no link opened yet, implicitly open one */ - ht = 0; - php_fbsql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); - } - return FB_SQL_G(linkIndex); -} - - -static void phpfbQuery(INTERNAL_FUNCTION_PARAMETERS, char* sql, PHPFBLink* link, long batch_size); - -/* {{{ PHP_INI - */ -PHP_INI_BEGIN() - STD_PHP_INI_BOOLEAN ("fbsql.allow_persistent", "1", PHP_INI_SYSTEM, OnUpdateBool, allowPersistent, zend_fbsql_globals, fbsql_globals) - STD_PHP_INI_BOOLEAN ("fbsql.generate_warnings", "0", PHP_INI_SYSTEM, OnUpdateBool, generateWarnings, zend_fbsql_globals, fbsql_globals) - STD_PHP_INI_BOOLEAN ("fbsql.autocommit", "1", PHP_INI_SYSTEM, OnUpdateBool, autoCommit, zend_fbsql_globals, fbsql_globals) - STD_PHP_INI_BOOLEAN ("fbsql.show_timestamp_decimals", "0", PHP_INI_SYSTEM, OnUpdateBool, showTimestampDecimals, zend_fbsql_globals, fbsql_globals) - STD_PHP_INI_ENTRY_EX ("fbsql.max_persistent", "-1", PHP_INI_SYSTEM, OnUpdateLong, maxPersistent, zend_fbsql_globals, fbsql_globals, display_link_numbers) - STD_PHP_INI_ENTRY_EX ("fbsql.max_links", "128", PHP_INI_SYSTEM, OnUpdateLong, maxLinks, zend_fbsql_globals, fbsql_globals, display_link_numbers) - STD_PHP_INI_ENTRY_EX ("fbsql.max_connections", "128", PHP_INI_SYSTEM, OnUpdateLong, maxConnections, zend_fbsql_globals, fbsql_globals, display_link_numbers) - STD_PHP_INI_ENTRY_EX ("fbsql.max_results", "128", PHP_INI_SYSTEM, OnUpdateLong, maxResults, zend_fbsql_globals, fbsql_globals, display_link_numbers) - STD_PHP_INI_ENTRY_EX ("fbsql.batchsize", "1000", PHP_INI_ALL, OnUpdateLong, batchSize, zend_fbsql_globals, fbsql_globals, display_link_numbers) - STD_PHP_INI_ENTRY ("fbsql.default_host", NULL, PHP_INI_SYSTEM, OnUpdateString, hostName, zend_fbsql_globals, fbsql_globals) - STD_PHP_INI_ENTRY ("fbsql.default_user", "_SYSTEM", PHP_INI_SYSTEM, OnUpdateString, userName, zend_fbsql_globals, fbsql_globals) - STD_PHP_INI_ENTRY ("fbsql.default_password", "", PHP_INI_SYSTEM, OnUpdateString, userPassword, zend_fbsql_globals, fbsql_globals) - STD_PHP_INI_ENTRY ("fbsql.default_database", "", PHP_INI_SYSTEM, OnUpdateString, databaseName, zend_fbsql_globals, fbsql_globals) - STD_PHP_INI_ENTRY ("fbsql.default_database_password", "", PHP_INI_SYSTEM, OnUpdateString, databasePassword, zend_fbsql_globals, fbsql_globals) -PHP_INI_END() -/* }}} */ - -static PHP_GINIT_FUNCTION(fbsql) -{ - fbsql_globals->persistentCount = 0; - - if (fbsql_globals->hostName==NULL) - { - char name[256]; - gethostname(name, sizeof(name)); - name[sizeof(name)-1] = 0; - fbsql_globals->hostName = strdup(name); - } - - fbsql_globals->persistentCount = 0; - fbsql_globals->linkCount = 0; -} - -PHP_MINIT_FUNCTION(fbsql) -{ - REGISTER_INI_ENTRIES(); - - fbcInitialize(); - fbcehSetMultiThreaded(True); - le_result = zend_register_list_destructors_ex(phpfbReleaseResult, NULL, "fbsql result", module_number); - le_link = zend_register_list_destructors_ex(phpfbReleaseLink, NULL, "fbsql link", module_number); - le_plink = zend_register_list_destructors_ex(NULL, phpfbReleasePLink, "fbsql plink", module_number); - Z_TYPE(fbsql_module_entry) = type; - - REGISTER_LONG_CONSTANT("FBSQL_ASSOC", FBSQL_ASSOC, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FBSQL_NUM", FBSQL_NUM, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FBSQL_BOTH", FBSQL_BOTH, CONST_CS | CONST_PERSISTENT); - - /* Register Transaction constants */ - REGISTER_LONG_CONSTANT("FBSQL_LOCK_DEFERRED", FBSQL_LOCK_DEFERRED, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FBSQL_LOCK_OPTIMISTIC", FBSQL_LOCK_OPTIMISTIC, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FBSQL_LOCK_PESSIMISTIC", FBSQL_LOCK_PESSIMISTIC, CONST_CS | CONST_PERSISTENT); - - REGISTER_LONG_CONSTANT("FBSQL_ISO_READ_UNCOMMITTED", FBSQL_ISO_READ_UNCOMMITTED, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FBSQL_ISO_READ_COMMITTED", FBSQL_ISO_READ_COMMITTED, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FBSQL_ISO_REPEATABLE_READ", FBSQL_ISO_REPEATABLE_READ, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FBSQL_ISO_SERIALIZABLE", FBSQL_ISO_SERIALIZABLE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FBSQL_ISO_VERSIONED", FBSQL_ISO_VERSIONED, CONST_CS | CONST_PERSISTENT); - - REGISTER_LONG_CONSTANT("FBSQL_UTF8", 0, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FBSQL_ISO8859_1", FBC_ISO8859_1, CONST_CS | CONST_PERSISTENT); - - /* Register Status constants */ - REGISTER_LONG_CONSTANT("FBSQL_UNKNOWN", FBUnknownStatus, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FBSQL_STOPPED", FBStopped, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FBSQL_STARTING", FBStarting, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FBSQL_RUNNING", FBRunning, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FBSQL_STOPPING", FBStopping, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FBSQL_NOEXEC", FBNoExec, CONST_CS | CONST_PERSISTENT); - - REGISTER_LONG_CONSTANT("FBSQL_LOB_DIRECT", FBSQL_LOB_DIRECT, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FBSQL_LOB_HANDLE", FBSQL_LOB_HANDLE, CONST_CS | CONST_PERSISTENT); - - return SUCCESS; -} - -PHP_MSHUTDOWN_FUNCTION(fbsql) -{ - UNREGISTER_INI_ENTRIES(); - return SUCCESS; -} - -PHP_RINIT_FUNCTION(fbsql) -{ - FB_SQL_G(linkIndex) = -1; - FB_SQL_G(linkCount) = FB_SQL_G(persistentCount); - return SUCCESS; -} - -PHP_RSHUTDOWN_FUNCTION(fbsql) -{ - return SUCCESS; -} - -PHP_MINFO_FUNCTION(fbsql) -{ - char buf[32]; - - php_info_print_table_start(); - php_info_print_table_header(2, "FrontBase support", "enabled"); - - php_info_print_table_row(2, "Client API version", "2.24"); - - if (FB_SQL_G(allowPersistent)) - { - snprintf(buf, sizeof(buf), "%ld", FB_SQL_G(persistentCount)); - php_info_print_table_row(2, "Active Persistent Links", buf); - } - - snprintf(buf, sizeof(buf), "%ld", FB_SQL_G(linkCount)); - php_info_print_table_row(2, "Active Links", buf); - -/* - snprintf(buf, sizeof(buf), "%ld", FB_SQL_G(resultCount)); - php_info_print_table_row(2, "Active Results", buf); -*/ - - php_info_print_table_end(); - - DISPLAY_INI_ENTRIES(); -} - -static void php_fbsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) -{ - PHPFBLink* phpLink; - zend_rsrc_list_entry *lep; - char name[1024]; - char *hostName = NULL, *userName = NULL, *userPassword = NULL; - int argc = ZEND_NUM_ARGS(), create_new = 0; - zval **argv[3]; - - if ((argc < 0) || (argc > 3)) WRONG_PARAM_COUNT; - if (zend_get_parameters_ex(argc, &argv[0], &argv[1], &argv[2])==FAILURE) RETURN_FALSE; - if (argc >= 1) - { - convert_to_string_ex(argv[0]); - hostName = Z_STRVAL_PP(argv[0]); - } - if (argc >= 2) - { - convert_to_string_ex(argv[1]); - userName = Z_STRVAL_PP(argv[1]); - } - if (argc == 3) - { - convert_to_string_ex(argv[2]); - userPassword = Z_STRVAL_PP(argv[2]); - } - - if (hostName == NULL) hostName = FB_SQL_G(hostName); - if (userName == NULL) userName = FB_SQL_G(userName); - if (userPassword == NULL) userPassword = FB_SQL_G(userPassword); - - if (snprintf(name, sizeof(name), "fbsql_%s_%s_%s", hostName, userName, userPassword) < 0) { - RETURN_FALSE; - } - - if (!FB_SQL_G(allowPersistent)) { - persistent=0; - } - if (persistent) { - if (zend_hash_find(&EG(persistent_list), name, strlen(name) + 1, (void **)&lep) == SUCCESS) - { - FBCMetaData *md; - phpLink = (PHPFBLink*)lep->ptr; - // Check if connection still there. - md = fbcdcRollback(phpLink->connection); - if ( !mdOk(phpLink, md, "Rollback;") ) { - if (FB_SQL_G(generateWarnings)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "FrontBase link is not connected, ty to reconnect"); - } - // Make sure select_db will reconnect. - fbcmdRelease(md); - fbcdcClose(phpLink->connection); - fbcdcRelease(phpLink->connection); - free(phpLink->connection); - phpLink->connection = NULL; - if (phpLink->databaseName) free(phpLink->databaseName); - phpLink->databaseName = NULL; - } - else { - fbcmdRelease(md); - } - } - else { - zend_rsrc_list_entry le; - - if ((FB_SQL_G(maxLinks) != -1 && FB_SQL_G(linkCount) == FB_SQL_G(maxLinks))) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "FrontBase link limit %d exceeded", FB_SQL_G(maxLinks)); - RETURN_FALSE; - } - - if ((FB_SQL_G(maxPersistent) != -1 && FB_SQL_G(persistentCount) == FB_SQL_G(maxPersistent))) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "FrontBase persistent link limit %d exceeded", FB_SQL_G(maxPersistent)); - RETURN_FALSE; - } - - phpLink = malloc(sizeof(PHPFBLink)); - phpLink->persistent = persistent; - phpLink->hostName = strdup(hostName); - phpLink->userName = strdup(userName); - phpLink->userPassword = strdup(userPassword); - phpLink->databasePassword = strdup(FB_SQL_G(databasePassword)); - phpLink->databaseName = NULL; - phpLink->execHandler = NULL; - phpLink->affectedRows = 0; - phpLink->autoCommit = FB_SQL_G(autoCommit); - phpLink->errorNo = 0; - phpLink->errorText = NULL; - phpLink->connection = NULL; - - - le.ptr = phpLink; - Z_TYPE(le) = le_plink; - if (zend_hash_update(&EG(persistent_list), name, strlen(name) + 1, &le, sizeof(le), NULL)==FAILURE) - { - free(phpLink->hostName); - free(phpLink->userName); - free(phpLink->userPassword); - free(phpLink->databasePassword); - free(phpLink); - RETURN_FALSE; - } - FB_SQL_G(linkCount)++; - FB_SQL_G(persistentCount)++; - } - ZEND_REGISTER_RESOURCE(return_value, phpLink, le_plink); - } - else - { - zend_rsrc_list_entry le; - - if ((FB_SQL_G(maxLinks) != -1 && FB_SQL_G(linkCount) == FB_SQL_G(maxLinks))) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "FrontBase link limit %d exceeded", FB_SQL_G(maxLinks)); - RETURN_FALSE; - } - - if (zend_hash_find(&EG(regular_list), name, strlen(name) + 1, (void **)&lep) == SUCCESS) - { - int type, link; - void *ptr; - - link = (int) lep->ptr; - ptr = zend_list_find(link, &type); /* check if the link is still there */ - if (ptr && (type==le_link || type==le_plink)) { - zend_list_addref(link); - Z_LVAL_P(return_value) = link; - php_fbsql_set_default_link(link TSRMLS_CC); - Z_TYPE_P(return_value) = IS_RESOURCE; - return; - } else { - zend_hash_del(&EG(regular_list), name, strlen(name) + 1); - } - phpLink = (PHPFBLink*)lep->ptr; - } - - phpLink = emalloc(sizeof(PHPFBLink)); - phpLink->persistent = persistent; - phpLink->hostName = strdup(hostName); - phpLink->userName = strdup(userName); - phpLink->userPassword = strdup(userPassword); - phpLink->databasePassword = strdup(FB_SQL_G(databasePassword)); - phpLink->databaseName = NULL; - phpLink->execHandler = NULL; - phpLink->affectedRows = 0; - phpLink->autoCommit = FB_SQL_G(autoCommit); - phpLink->errorNo = 0; - phpLink->errorText = NULL; - phpLink->connection = NULL; - - ZEND_REGISTER_RESOURCE(return_value, phpLink, le_link); - - le.ptr = (void *)Z_LVAL_P(return_value); - Z_TYPE(le) = le_index_ptr; - if (zend_hash_update(&EG(regular_list), name, strlen(name) + 1, &le, sizeof(le), NULL)==FAILURE) - { - free(phpLink->hostName); - free(phpLink->userName); - free(phpLink->userPassword); - free(phpLink->databasePassword); - efree(phpLink); - RETURN_FALSE; - } - FB_SQL_G(linkCount)++; - } - php_fbsql_set_default_link(Z_LVAL_P(return_value) TSRMLS_CC); -} - -int phpfbFetchRow(PHPFBResult* result, unsigned int row) -{ - if (result->rowHandler == NULL) - { - void *rawData = fbcdcFetch(result->link->connection, result->batchSize, result->fetchHandle); - if (rawData == NULL) { - result->rowCount = 0; - } - else - result->rowHandler = fbcrhInitWith(rawData, result->metaData); - } - for (;;) - { - void *rawData; - if (row >= result->rowCount && result->rowCount != 0x7fffffff) return 0; - if (fbcrhRowCount(result->rowHandler) > (unsigned int)row) return 1; - rawData = fbcdcFetch(result->link->connection, result->batchSize, result->fetchHandle); - if (!fbcrhAddBatch(result->rowHandler, rawData)) result->rowCount = fbcrhRowCount(result->rowHandler); - } -} - - -/* {{{ proto resource fbsql_connect([string hostname [, string username [, string password]]]) - Create a connection to a database server */ -PHP_FUNCTION(fbsql_connect) -{ - php_fbsql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); -} -/* }}} */ - -/* {{{ proto resource fbsql_pconnect([string hostname [, string username [, string password]]]) - Create a persistant connection to a database server */ -PHP_FUNCTION(fbsql_pconnect) -{ - php_fbsql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); -} -/* }}} */ - -/* {{{ proto bool fbsql_close([resource link_identifier]) - Close a connection to a database server */ -PHP_FUNCTION(fbsql_close) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL; - int id, i, nument, type; - void *ptr; - - switch (ZEND_NUM_ARGS()) { - case 0: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - break; - case 1: - if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - nument = zend_hash_next_free_element(&EG(regular_list)); - for (i = 1; i < nument; i++) { - ptr = zend_list_find(i, &type); - if (ptr && (type == le_result)) { - PHPFBResult *result; - - result = (PHPFBResult *)ptr; - if (result->link == phpLink) { - zend_list_delete(i); - } - } - } - - if (id==-1) { /* explicit resource number */ - zend_list_delete(Z_RESVAL_PP(fbsql_link_index)); - } - - if (id!=-1 - || (fbsql_link_index && Z_RESVAL_PP(fbsql_link_index)==FB_SQL_G(linkIndex))) { - zend_list_delete(FB_SQL_G(linkIndex)); - FB_SQL_G(linkIndex) = -1; - } - - RETURN_TRUE; -} -/* }}} */ - -static int php_fbsql_select_db(char *databaseName, PHPFBLink *link TSRMLS_DC) -{ - unsigned port; - FBCDatabaseConnection* c; - FBCMetaData* md; - - if (!link->databaseName || strcmp(link->databaseName, databaseName)) - { - port = atoi(databaseName); - if (port>0 && port<65535) - c = fbcdcConnectToDatabaseUsingPort(link->hostName, port, link->databasePassword); - else - c = fbcdcConnectToDatabase(databaseName, link->hostName, link->databasePassword); - if (c == NULL) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", fbcdcClassErrorMessage()); - return 0; - } - md = fbcdcCreateSession(c, "PHP", link->userName, link->userPassword, link->userName); - if (fbcmdErrorsFound(md)) - { - FBCErrorMetaData* emd = fbcdcErrorMetaData(c, md); - char* emg = fbcemdAllErrorMessages(emd); - if (FB_SQL_G(generateWarnings)) - { - if (emg) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", emg); - else - php_error_docref(NULL TSRMLS_CC, E_WARNING, "No message"); - } - link->errorText = strdup(emg); - link->errorNo = fbcemdErrorCodeAtIndex(emd, 0); - free(emg); - fbcemdRelease(emd); - fbcmdRelease(md); - fbcdcClose(c); - fbcdcRelease(c); - return 0; - } - fbcmdRelease(md); - - if (c) - { - if (link->autoCommit) - md = fbcdcExecuteDirectSQL(c, "SET COMMIT TRUE;"); - else - md = fbcdcExecuteDirectSQL(c, "SET COMMIT FALSE;"); - fbcmdRelease(md); - } - fbcdcSetOutputCharacterSet(c, FBC_ISO8859_1); - fbcdcSetInputCharacterSet(c, FBC_ISO8859_1); - - if (link->connection) - { - fbcdcClose(link->connection); - fbcdcRelease(link->connection); - } - link->connection = c; - if (link->databaseName) free(link->databaseName); - link->databaseName = strdup(databaseName); - } - return 1; -} - -void phpfbestrdup(const char * s, int* length, char** value) -{ - int l = s?strlen(s):0; - if (value) - { - char* r = emalloc(l+1); - if (s) - strcpy(r, s); - else - r[0] = 0; - *value = r; - } - *length = l; -} - -/* {{{ proto void fbsql_set_transaction(resource link_identifier, int locking, int isolation) - Sets the transaction locking and isolation */ -PHP_FUNCTION(fbsql_set_transaction) -{ - PHPFBLink* phpLink = NULL; - FBCMetaData* md; - zval **fbsql_link_index = NULL, **Locking = NULL, **Isolation = NULL; - char strSQL[1024]; - char *strLocking[] = {"DEFERRED", "OPTIMISTIC", "PESSIMISTIC"}; - char *strIsolation[] = {"READ UNCOMMITTED", "READ NCOMMITTED", "REPEATABLE READ", "SERIALIZABLE", "VERSIONED"}; - - switch (ZEND_NUM_ARGS()) { - case 3: - if (zend_get_parameters_ex(3, &fbsql_link_index, &Locking, &Isolation)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - - if (Z_LVAL_PP(Locking) < 0 || Z_LVAL_PP(Locking) > 2) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid locking type"); - RETURN_FALSE; - } - if (Z_LVAL_PP(Isolation) < 0 || Z_LVAL_PP(Isolation) > 4) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid isolation type"); - RETURN_FALSE; - } - - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink); - - if (snprintf(strSQL, sizeof(strSQL) , "SET TRANSACTION LOCKING %s, ISOLATION %s;", strLocking[Z_LVAL_PP(Locking)], strIsolation[Z_LVAL_PP(Isolation)]) < 0) { - RETURN_FALSE; - } - - md = fbcdcExecuteDirectSQL(phpLink->connection, strSQL); - fbcmdRelease(md); -} -/* }}} */ - -/* {{{ proto bool fbsql_autocommit(resource link_identifier [, bool OnOff]) - Turns on auto-commit */ -PHP_FUNCTION(fbsql_autocommit) -{ - PHPFBLink* phpLink = NULL; - FBCMetaData* md; - zval **fbsql_link_index = NULL, **onoff = NULL; - zend_bool OnOff; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &fbsql_link_index, &onoff)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink); - - if (onoff) - { - convert_to_boolean_ex(onoff); - OnOff = Z_BVAL_PP(onoff); - phpLink->autoCommit = OnOff; - if (OnOff) - md = fbcdcExecuteDirectSQL(phpLink->connection, "SET COMMIT TRUE;"); - else - md = fbcdcExecuteDirectSQL(phpLink->connection, "SET COMMIT FALSE;"); - fbcmdRelease(md); - } - RETURN_BOOL(phpLink->autoCommit); -} -/* }}} */ - -/* {{{ proto bool fbsql_commit([resource link_identifier]) - Commit the transaction */ -PHP_FUNCTION(fbsql_commit) -{ - PHPFBLink* phpLink = NULL; - FBCMetaData* md; - zval **fbsql_link_index = NULL; - int id; - - switch (ZEND_NUM_ARGS()) { - case 0: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - break; - case 1: - if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - md = fbcdcCommit(phpLink->connection); - - if (md) { - fbcmdRelease(md); - RETURN_TRUE; - } - else - RETURN_FALSE; -} -/* }}} */ - -/* {{{ proto bool fbsql_rollback([resource link_identifier]) - Rollback all statments since last commit */ -PHP_FUNCTION(fbsql_rollback) -{ - PHPFBLink* phpLink = NULL; - FBCMetaData* md; - zval **fbsql_link_index = NULL; - int id; - - switch (ZEND_NUM_ARGS()) { - case 0: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - break; - case 1: - if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - md = fbcdcRollback(phpLink->connection); - - if (md) { - fbcmdRelease(md); - RETURN_TRUE; - } - else - RETURN_FALSE; -} -/* }}} */ - - -static void php_fbsql_create_lob(INTERNAL_FUNCTION_PARAMETERS, int lob_type) -{ - PHPFBLink* phpLink = NULL; - FBCBlobHandle *lobHandle; - zval **lob_data, **fbsql_link_index = NULL; - int id; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &lob_data)==FAILURE) { - RETURN_FALSE; - } - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - break; - case 2: - if (zend_get_parameters_ex(2, &lob_data, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - convert_to_string_ex(lob_data); - switch (lob_type) { - case 0 : /* BLOB */ - lobHandle = fbcdcWriteBLOB(phpLink->connection, Z_STRVAL_PP(lob_data), Z_STRLEN_PP(lob_data)); - break; - case 1 : /* CLOB */ - lobHandle = fbcdcWriteCLOB(phpLink->connection, Z_STRVAL_PP(lob_data)); - break; - } - if (lobHandle) { - RETURN_STRING(fbcbhDescription(lobHandle), 1); - fbcbhRelease(lobHandle); - } - else - RETURN_FALSE; -} - -/* {{{ proto string fbsql_create_blob(string blob_data [, resource link_identifier]) - Create a BLOB in the database for use with an insert or update statement */ -PHP_FUNCTION(fbsql_create_blob) -{ - php_fbsql_create_lob(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); -} -/* }}} */ - -/* {{{ proto string fbsql_create_clob(string clob_data [, resource link_identifier]) - Create a CLOB in the database for use with an insert or update statement */ -PHP_FUNCTION(fbsql_create_clob) -{ - php_fbsql_create_lob(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); -} -/* }}} */ - -/* {{{ proto bool fbsql_set_lob_mode(resource result, int lob_mode) - Sets the mode for how LOB data re retreived (actual data or a handle) */ -PHP_FUNCTION(fbsql_set_lob_mode) -{ - - PHPFBResult* result = NULL; - zval **fbsql_result_index = NULL, **lob_mode = NULL; - - switch (ZEND_NUM_ARGS()) { - case 2: - if (zend_get_parameters_ex(2, &fbsql_result_index, &lob_mode)==FAILURE) { - RETURN_FALSE; - } - convert_to_long_ex(lob_mode); - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); - - result->lobMode = Z_LVAL_PP(lob_mode); - - RETURN_TRUE; -} -/* }}} */ - -static void php_fbsql_read_lob(INTERNAL_FUNCTION_PARAMETERS, int lob_type) -{ - PHPFBLink* phpLink = NULL; - zval **lob_handle, **fbsql_link_index = NULL; - int id; - long length = 0; - char* value = NULL; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &lob_handle)==FAILURE) { - RETURN_FALSE; - } - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - break; - case 2: - if (zend_get_parameters_ex(2, &lob_handle, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - convert_to_string_ex(lob_handle); - - if (Z_STRLEN_PP(lob_handle) != 27 || Z_STRVAL_PP(lob_handle)[0] != '@') { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "The handle is invalid"); - RETURN_FALSE; - } - - length = fbcbhBlobSize((FBCBlobHandle *)Z_STRVAL_PP(lob_handle)); - if (lob_type == 0) - value = estrndup((char *)fbcdcReadBLOB(phpLink->connection, (FBCBlobHandle *)Z_STRVAL_PP(lob_handle)), length); - else - value = estrndup((char *)fbcdcReadCLOB(phpLink->connection, (FBCBlobHandle *)Z_STRVAL_PP(lob_handle)), length); - if (value) { - RETURN_STRINGL(value, length, 0); - } - else { - RETURN_FALSE; - } -} - -/* {{{ proto string fbsql_read_blob(string blob_handle [, resource link_identifier]) - Read the BLOB data identified by blob_handle */ -PHP_FUNCTION(fbsql_read_blob) -{ - php_fbsql_read_lob(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); -} -/* }}} */ - -/* {{{ proto string fbsql_read_clob(string clob_handle [, resource link_identifier]) - Read the CLOB data identified by clob_handle */ -PHP_FUNCTION(fbsql_read_clob) -{ - php_fbsql_read_lob(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); -} -/* }}} */ - -static void php_fbsql_lob_size(INTERNAL_FUNCTION_PARAMETERS, int lob_type) -{ - PHPFBLink* phpLink = NULL; - zval **lob_handle, **fbsql_link_index = NULL; - int id; - char* value = NULL; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &lob_handle)==FAILURE) { - RETURN_FALSE; - } - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - break; - case 2: - if (zend_get_parameters_ex(2, &lob_handle, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - convert_to_string_ex(lob_handle); - - if (Z_STRLEN_PP(lob_handle) != 27 || Z_STRVAL_PP(lob_handle)[0] != '@') { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "The handle is invalid"); - RETURN_FALSE; - } - - RETURN_LONG(fbcbhBlobSize((FBCBlobHandle *)Z_STRVAL_PP(lob_handle))); -} - -/* {{{ proto int fbsql_blob_size(string blob_handle [, resource link_identifier]) - Get the size of a BLOB identified by blob_handle */ -PHP_FUNCTION(fbsql_blob_size) -{ - php_fbsql_lob_size(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); -} -/* }}} */ - -/* {{{ proto int fbsql_clob_size(string clob_handle [, resource link_identifier]) - Get the size of a CLOB identified by clob_handle */ -PHP_FUNCTION(fbsql_clob_size) -{ - php_fbsql_lob_size(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); -} -/* }}} */ - -/* {{{ proto string fbsql_hostname(resource link_identifier [, string host_name]) - Get or set the host name used with a connection */ -PHP_FUNCTION(fbsql_hostname) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **host_name = NULL; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &fbsql_link_index, &host_name)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink); - - if (host_name) - { - convert_to_string_ex(host_name); - if (phpLink->hostName) free(phpLink->hostName); - phpLink->hostName = strdup(Z_STRVAL_PP(host_name)); - } - RETURN_STRING(phpLink->hostName, 1); -} -/* }}} */ - -/* {{{ proto string fbsql_database(resource link_identifier [, string database]) - Get or set the database name used with a connection */ -PHP_FUNCTION(fbsql_database) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **dbname = NULL; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &fbsql_link_index, &dbname)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink); - - if (dbname) - { - convert_to_string_ex(dbname); - if (phpLink->databaseName) free(phpLink->databaseName); - phpLink->databaseName = strdup(Z_STRVAL_PP(dbname)); - } - if (phpLink->databaseName) { - RETURN_STRING(phpLink->databaseName, 1); - } - else { - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto string fbsql_database_password(resource link_identifier [, string database_password]) - Get or set the databsae password used with a connection */ -PHP_FUNCTION(fbsql_database_password) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **db_password = NULL; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &fbsql_link_index, &db_password)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink); - - if (db_password) - { - convert_to_string_ex(db_password); - if (phpLink->databasePassword) free(phpLink->databasePassword); - phpLink->databasePassword = strdup(Z_STRVAL_PP(db_password)); - } - RETURN_STRING(phpLink->databasePassword, 1); -} -/* }}} */ - -/* {{{ proto string fbsql_username(resource link_identifier [, string username]) - Get or set the host user used with a connection */ -PHP_FUNCTION(fbsql_username) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **username = NULL; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &fbsql_link_index, &username)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink); - - if (username) - { - convert_to_string_ex(username); - if (phpLink->userName) free(phpLink->userName); - phpLink->userName = strdup(Z_STRVAL_PP(username)); - } - RETURN_STRING(phpLink->userName, 1); -} -/* }}} */ - -/* {{{ proto string fbsql_password(resource link_identifier [, string password]) - Get or set the user password used with a connection */ -PHP_FUNCTION(fbsql_password) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **password = NULL; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &fbsql_link_index, &password)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink); - - if (password) - { - convert_to_string_ex(password); - if (phpLink->userPassword) free(phpLink->userPassword); - phpLink->userPassword = strdup(Z_STRVAL_PP(password)); - } - RETURN_STRING(phpLink->userPassword, 1); -} -/* }}} */ - -/* {{{ proto bool fbsql_set_password(resource link_identifier, string user, string password, string old_password) - Change the password for a given user */ -PHP_FUNCTION(fbsql_set_password) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **user, **password, **old_password; - char *digest_password, *digest_old_password; - FBCMetaData *md; - - switch (ZEND_NUM_ARGS()) { - case 4: - if (zend_get_parameters_ex(4, &fbsql_link_index, &user, &password, &old_password)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link", le_link, le_plink); - - convert_to_string_ex(user); - convert_to_string_ex(password); - convert_to_string_ex(old_password); - - digest_password = DigestPassword(Z_STRVAL_PP(user), Z_STRVAL_PP(password)); - digest_old_password = DigestPassword(Z_STRVAL_PP(user), Z_STRVAL_PP(old_password)); - - md = fbcdcSetPasswordForUser(phpLink->connection, Z_STRVAL_PP(user), digest_password, digest_old_password); - if (mdOk(phpLink, md, "Change password")) { - ZVAL_BOOL(return_value, 1); - } - else { - ZVAL_BOOL(return_value, 0); - } - fbcmdRelease(md); - if (digest_old_password) efree(digest_old_password); - if (digest_password) efree(digest_password); -} -/* }}} */ - - -/* {{{ proto bool fbsql_select_db([string database_name [, resource link_identifier]]) - Select the database to open */ -PHP_FUNCTION(fbsql_select_db) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **dbname; - int id; - char* name = NULL; - - switch (ZEND_NUM_ARGS()) { - case 0: - name = FB_SQL_G(databaseName); - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - break; - case 1: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - if (zend_get_parameters_ex(1, &dbname)==FAILURE) { - RETURN_FALSE; - } - convert_to_string_ex(dbname); - name = Z_STRVAL_PP(dbname); - break; - case 2: - if (zend_get_parameters_ex(2, &dbname, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - convert_to_string_ex(dbname); - name = Z_STRVAL_PP(dbname); - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - if (!php_fbsql_select_db(name, phpLink TSRMLS_CC)) { - RETURN_FALSE; - } - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto void fbsql_set_characterset(resource link_identifier, long charcterset [, long in_out_both]]) - Change input/output character set */ -PHP_FUNCTION(fbsql_set_characterset) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index, **zcharset, **zin_out; - int id = -1; - int charset = -1, in_out_both = 3; - - switch (ZEND_NUM_ARGS()) { - case 2: - if (zend_get_parameters_ex(2, &fbsql_link_index, &zcharset)==FAILURE) { - RETURN_FALSE; - } - break; - case 3: - if (zend_get_parameters_ex(3, &fbsql_link_index, &zcharset, &zin_out)==FAILURE) { - RETURN_FALSE; - } - in_out_both = Z_LVAL_PP(zin_out); - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - charset = Z_LVAL_PP(zcharset); - - if (in_out_both & 1) { - fbcdcSetInputCharacterSet(phpLink->connection, charset); - } - if (in_out_both & 2) { - fbcdcSetOutputCharacterSet(phpLink->connection, charset); - } -} -/* }}} */ - -/* {{{ proto int fbsql_change_user(string user, string password [, string database [, resource link_identifier]]) - Change the user for a session */ -PHP_FUNCTION(fbsql_change_user) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **user, **password, **database; - int id; - char *name = NULL, *userName, *userPassword; - char buffer[1024]; - - switch (ZEND_NUM_ARGS()) { - case 2: - name = FB_SQL_G(databaseName); - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - if (zend_get_parameters_ex(2, &user, &password)==FAILURE) { - RETURN_FALSE; - } - break; - case 3: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - if (zend_get_parameters_ex(3, &user, &password, &database)==FAILURE) { - RETURN_FALSE; - } - convert_to_string_ex(database); - name = Z_STRVAL_PP(database); - break; - case 4: - if (zend_get_parameters_ex(4, &user, &password, &database, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - convert_to_string_ex(database); - name = Z_STRVAL_PP(database); - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - convert_to_string_ex(user); - userName = Z_STRVAL_PP(user); - - convert_to_string_ex(password); - userPassword = Z_STRVAL_PP(password); - - if (snprintf(buffer, sizeof(buffer), "SET AUTHORIZATION %s;", userName) < 0) { - RETURN_FALSE; - } - - phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, buffer, phpLink, 0); - if (Z_LVAL_P(return_value)) - { - free(phpLink->userName); - phpLink->userName = strdup(userName); - } -} -/* }}} */ - -/* {{{ proto bool fbsql_create_db(string database_name [, resource link_identifier [, string database_options]]) - Create a new database on the server */ -PHP_FUNCTION(fbsql_create_db) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **database_name, **database_options = NULL; - int id; - int i, status; - char *databaseName, *databaseOptions = NULL; - - switch (ZEND_NUM_ARGS()) { - case 1: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - if (zend_get_parameters_ex(1, &database_name)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - case 3: - if (zend_get_parameters_ex(3, &database_name, &fbsql_link_index, &database_options)==FAILURE) { - RETURN_FALSE; - } - id = -1; - convert_to_string_ex(database_options); - databaseOptions = Z_STRVAL_PP(database_options); - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - convert_to_string_ex(database_name); - databaseName = Z_STRVAL_PP(database_name); - - if (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128); - status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); - if (status != FBUnknownStatus) - { - char* txt = "Unknown status"; - if (status == FBStopped ) txt = "stopped"; - else if (status == FBStarting) txt = "starting"; - else if (status == FBRunning ) txt = "running"; - else if (status == FBStopping) txt = "stopping"; - else if (status == FBNoExec ) txt = "no exec"; - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not create %s@%s, database is %s", databaseName, phpLink->hostName, txt); - RETURN_FALSE; - } - if (!fbcehCreateDatabaseNamedWithOptions(phpLink->execHandler, databaseName, databaseOptions)) - { - char* error = fbechErrorMessage(phpLink->execHandler); - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not create %s@%s. %s", databaseName, phpLink->hostName, error); - RETURN_FALSE; - } - for (i=0; i < 20; i++) - { -#ifdef PHP_WIN32 - Sleep(1000); -#else - sleep(1); -#endif - status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); - if (status == FBRunning) break; - } - if (status != FBRunning) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Database %s@%s created -- status unknown", databaseName, phpLink->hostName); - RETURN_FALSE; - } - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto int fbsql_drop_db(string database_name [, resource link_identifier]) - Drop a database on the server */ -PHP_FUNCTION(fbsql_drop_db) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **database_name; - int id; - int i, status; - char *databaseName; - - switch (ZEND_NUM_ARGS()) { - case 1: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - if (zend_get_parameters_ex(1, &database_name)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - convert_to_string_ex(database_name); - databaseName = Z_STRVAL_PP(database_name); - - if (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128); - status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); - if (status != FBStopped) - { - char* txt = "Unknown status"; - if (status == FBStopped ) txt = "stopped"; - else if (status == FBUnknownStatus) txt = "nonexisting"; - else if (status == FBStarting ) txt = "starting"; - else if (status == FBRunning ) txt = "running"; - else if (status == FBStopping ) txt = "stopping"; - else if (status == FBNoExec ) txt = "no exec"; - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not drop %s@%s, database is %s", databaseName, phpLink->hostName, txt); - RETURN_FALSE; - } - - if (!fbcehDeleteDatabaseNamed(phpLink->execHandler, databaseName)) - { - char* error = fbechErrorMessage(phpLink->execHandler); - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not drop %s@%s. %s", databaseName, phpLink->hostName, error); - RETURN_FALSE; - } - for (i=0; i < 20; i++) - { -#ifdef PHP_WIN32 - Sleep(1000); -#else - sleep(1); -#endif - status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); - if (status == FBUnknownStatus) break; - } - if (status != FBUnknownStatus) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Database %s@%s dropped -- status unknown", databaseName, phpLink->hostName); - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto bool fbsql_start_db(string database_name [, resource link_identifier [, string database_options]]) - Start a database on the server */ -PHP_FUNCTION(fbsql_start_db) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **database_name, **database_options; - int id; - int i, status; - char *databaseName, *databaseOptions = NULL; - - switch (ZEND_NUM_ARGS()) { - case 1: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - if (zend_get_parameters_ex(1, &database_name)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - case 3: - if (zend_get_parameters_ex(3, &database_name, &fbsql_link_index, &database_options)==FAILURE) { - RETURN_FALSE; - } - id = -1; - convert_to_string_ex(database_options); - databaseOptions = Z_STRVAL_PP(database_options); - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - convert_to_string_ex(database_name); - databaseName = Z_STRVAL_PP(database_name); - - if (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128); - status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); - if ((status != FBStopped) && (status != FBRunning) && (status != FBStarting)) - { - char* txt = "Unknown status"; - if (status == FBStopped ) txt = "stopped"; - else if (status == FBStarting) txt = "starting"; - else if (status == FBRunning ) txt = "running"; - else if (status == FBStopping) txt = "stopping"; - else if (status == FBNoExec ) txt = "no exec"; - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not start %s@%s, as database is %s", databaseName, phpLink->hostName, txt); - RETURN_FALSE; - } - - if (status == FBStopped) - { - int dbstarted; - if (databaseOptions != NULL) - { - dbstarted = fbcehStartDatabaseNamedWithOptions(phpLink->execHandler, databaseName, databaseOptions); - } - else - { - dbstarted = fbcehStartDatabaseNamed(phpLink->execHandler, databaseName); - } - if (!dbstarted) - { - char* error = fbechErrorMessage(phpLink->execHandler); - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not start %s@%s. %s", databaseName, phpLink->hostName, error); - RETURN_FALSE; - } - } - - for (i=0; i < 20; i++) - { -#ifdef PHP_WIN32 - Sleep(1000); -#else - sleep(1); -#endif - status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); - if (status == FBRunning) break; - } - if (status != FBRunning) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Database %s@%s started -- status unknown", databaseName, phpLink->hostName); - RETURN_FALSE; - } - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto bool fbsql_stop_db(string database_name [, resource link_identifier]) - Stop a database on the server */ -PHP_FUNCTION(fbsql_stop_db) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **database_name; - int id; - int i, status; - char *databaseName; - - switch (ZEND_NUM_ARGS()) { - case 1: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - if (zend_get_parameters_ex(1, &database_name)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - convert_to_string_ex(database_name); - databaseName = Z_STRVAL_PP(database_name); - - if (!php_fbsql_select_db(databaseName, phpLink TSRMLS_CC)) { - RETURN_FALSE; - } - -/* printf("Stop db %x\n", phpDatabase->connection); */ - if (!fbcdcStopDatabase(phpLink->connection)) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot stop database %s@%s", databaseName, phpLink->hostName); - RETURN_FALSE; - } - - for (i=0; i < 20; i++) - { - status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName); - if (status == FBStopped) break; -#ifdef PHP_WIN32 - Sleep(1000); -#else - sleep(1); -#endif - } - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto int fbsql_db_status(string database_name [, resource link_identifier]) - Gets the status (Stopped, Starting, Running, Stopping) for a given database */ -PHP_FUNCTION(fbsql_db_status) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **database_name; - int id; - char *databaseName; - - switch (ZEND_NUM_ARGS()) { - case 1: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - if (zend_get_parameters_ex(1, &database_name)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - convert_to_string_ex(database_name); - databaseName = Z_STRVAL_PP(database_name); - - if (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128); - if (phpLink->execHandler) { - RETURN_LONG(fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName)); - } - else { - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ mdOk - */ -int mdOk(PHPFBLink* link, FBCMetaData* md, char* sql) -{ - FBCDatabaseConnection* c = link->connection; - int result = 1; - TSRMLS_FETCH(); - - link->errorNo = 0; - if (link->errorText) - { - free(link->errorText); - link->errorText = NULL; - } - if (md == NULL) - { - link->errorNo = 1; - link->errorText = strdup("Connection to database server was lost"); - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", link->errorText); - result = 0; - } - else if (fbcmdErrorsFound(md)) - { - FBCErrorMetaData* emd = fbcdcErrorMetaData(c, md); - char* emg = fbcemdAllErrorMessages(emd); - if (FB_SQL_G(generateWarnings)) - { - if (emg) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error in statement: '%s' %s", sql, emg); - else - php_error_docref(NULL TSRMLS_CC, E_WARNING, "No message"); - } - link->errorText = strdup(emg); - link->errorNo = fbcemdErrorCodeAtIndex(emd, 0); - free(emg); - fbcemdRelease(emd); - result = 0; - } - else if (fbcmdWarningsFound(md)) - { - FBCErrorMetaData* emd = fbcdcErrorMetaData(c, md); - char* emg = fbcemdAllErrorMessages(emd); - if (FB_SQL_G(generateWarnings)) - { - if (emg) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Warning in statement: '%s' %s", sql, emg); - else - php_error_docref(NULL TSRMLS_CC, E_WARNING, "No message"); - } - link->errorText = strdup(emg); - link->errorNo = fbcemdErrorCodeAtIndex(emd, 0); - free(emg); - fbcemdRelease(emd); - result = 1; - } - return result; -} -/* }}} */ - -static void phpfbQuery(INTERNAL_FUNCTION_PARAMETERS, char* sql, PHPFBLink* link, long batch_size) -{ - PHPFBResult* result = NULL; - FBCMetaData* md, *meta; - char* tp; - char* fh = NULL; - unsigned int sR = 1, cR = 0; - - meta = fbcdcExecuteDirectSQL(link->connection, sql); - if (!mdOk(link, meta, sql)) - { - fbcmdRelease(meta); - ZVAL_BOOL(return_value, 0) - } - else { - if (fbcmdHasMetaDataArray(meta)) { - sR = fbcmdMetaDataArrayCount(meta); - md = (FBCMetaData*)fbcmdMetaDataAtIndex(meta, cR); - } - else - md = meta; - - tp = fbcmdStatementType(md); - if (tp == NULL) { - fbcmdRelease(meta); - ZVAL_BOOL(return_value, 1) - } - else if ((tp[0] == 'C') || (tp[0] == 'R')) - { - if (sR == 1 && md) fbcmdRelease(md); - ZVAL_BOOL(return_value, 1) - } - else if ((fh = fbcmdFetchHandle(md)) || tp[0] == 'E' || (tp[0] == 'U' && fh)) - { - result = (PHPFBResult *)emalloc(sizeof(PHPFBResult)); - result->link = link; - result->rowHandler = NULL; - result->fetchHandle = NULL; - result->ResultmetaData = meta; - result->metaData = md; - result->batchSize = batch_size > 0 ? batch_size : FB_SQL_G(batchSize); - result->rowCount = 0x7fffffff; - result->columnCount = 0; - result->rowIndex = 0; - result->columnIndex = 0; - result->row = NULL; - result->array = NULL; - result->list = NULL; - result->selectResults = sR; - result->currentResult = cR; - result->lobMode = FBSQL_LOB_DIRECT; - - if (tp[0] != 'E') - { - result->columnCount = fbcmdColumnCount(md); - result->fetchHandle = fh; - } - else - { - char* r = fbcmdMessage(result->metaData); - fbcrhConvertToOutputCharSet(fbcdcOutputCharacterSet(link->connection), (unsigned char *)r); - if ((result->list = fbcplParse(r))) - { - result->rowCount = fbcplCount(result->list); - result->columnCount = 7; - } - } - ZEND_REGISTER_RESOURCE(return_value, result, le_result); - } - else if (tp[0] == 'I' || tp[0] == 'U') - { - if (tp[0] == 'I') link->insert_id = fbcmdRowIndex(md); - if (sR == 1 && md) fbcmdRelease(md); - ZVAL_BOOL(return_value, 1) - } - else if(tp[0] == 'A' || tp[0] == 'D') - { - if (sR == 1 && md) fbcmdRelease(md); - ZVAL_BOOL(return_value, 1) - } - if (link) link->affectedRows = fbcmdRowCount(md); - } -} - -/* {{{ proto resource fbsql_query(string query [, resource link_identifier [, long batch_size]]) - Send one or more SQL statements to the server and execute them */ -PHP_FUNCTION(fbsql_query) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **query, **batch_size; - int id, bs = 0; - - switch (ZEND_NUM_ARGS()) { - case 1: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - if (zend_get_parameters_ex(1, &query)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &query, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - case 3: - if (zend_get_parameters_ex(3, &query, &fbsql_link_index, &batch_size)==FAILURE) { - RETURN_FALSE; - } - id = -1; - convert_to_long_ex(batch_size); - bs = Z_LVAL_PP(batch_size); - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - convert_to_string_ex(query); - phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, Z_STRVAL_PP(query), phpLink, bs); -} -/* }}} */ - -/* {{{ proto resource fbsql_db_query(string database_name, string query [, resource link_identifier]) - Send one or more SQL statements to a specified database on the server */ -PHP_FUNCTION(fbsql_db_query) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **dbname, **query; - int id; - - switch (ZEND_NUM_ARGS()) { - case 2: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - if (zend_get_parameters_ex(2, &dbname, &query)==FAILURE) { - RETURN_FALSE; - } - break; - case 3: - if (zend_get_parameters_ex(3, &dbname, &query, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - convert_to_string_ex(query); - convert_to_string_ex(dbname); - - if (php_fbsql_select_db(Z_STRVAL_PP(dbname), phpLink TSRMLS_CC)) { - phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, Z_STRVAL_PP(query), phpLink, 0); - } else { - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto resource fbsql_list_dbs([resource link_identifier]) - Retreive a list of all databases on the server */ -PHP_FUNCTION(fbsql_list_dbs) -{ - PHPFBResult* phpResult; - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL; - int id; - - switch (ZEND_NUM_ARGS()) { - case 0: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - break; - case 1: - if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - if (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128); - phpResult = emalloc(sizeof(PHPFBResult)); - phpResult->link = phpLink; - phpResult->fetchHandle = NULL; - phpResult->rowHandler = NULL; - phpResult->ResultmetaData = NULL; - phpResult->metaData = NULL; - phpResult->batchSize = FB_SQL_G(batchSize); - phpResult->columnCount = 1; - phpResult->rowIndex = 0; - phpResult->columnIndex = 0; - phpResult->row = NULL; - phpResult->array = fbcehAvailableDatabases(phpLink->execHandler); - phpResult->rowCount = fbaCount(phpResult->array); - phpResult->list = NULL; - - ZEND_REGISTER_RESOURCE(return_value, phpResult, le_result); -} -/* }}} */ - -/* {{{ proto resource fbsql_list_tables(string database [, int link_identifier]) - Retreive a list of all tables from the specifoied database */ -PHP_FUNCTION(fbsql_list_tables) -{ - char* sql = "select t0.\"table_name\"from information_schema.tables t0, information_schema.SCHEMATA t1 where t0.schema_pk = t1.schema_pk and t1.\"schema_name\" = current_schema order by \"table_name\";"; - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **database_name; - int id; - char *databaseName; - - switch (ZEND_NUM_ARGS()) { - case 1: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - if (zend_get_parameters_ex(1, &database_name)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - convert_to_string_ex(database_name); - databaseName = Z_STRVAL_PP(database_name); - - if (databaseName == NULL) { - php_fbsql_select_db(FB_SQL_G(databaseName), phpLink TSRMLS_CC); - } else { - php_fbsql_select_db(databaseName, phpLink TSRMLS_CC); - } - - phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, sql, phpLink, 0); -} -/* }}} */ - -/* {{{ proto resource fbsql_list_fields(string database_name, string table_name [, resource link_identifier]) - Retrieve a list of all fields for the specified database.table */ -PHP_FUNCTION(fbsql_list_fields) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL, **database_name, **table_name; - int id; - char *databaseName, *tableName; - char sql[1024]; - - switch (ZEND_NUM_ARGS()) { - case 2: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - if (zend_get_parameters_ex(2, &database_name, &table_name)==FAILURE) { - RETURN_FALSE; - } - break; - case 3: - if (zend_get_parameters_ex(3, &database_name, &table_name, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - convert_to_string_ex(database_name); - databaseName = Z_STRVAL_PP(database_name); - convert_to_string_ex(table_name); - tableName = Z_STRVAL_PP(table_name); - - if (!php_fbsql_select_db(databaseName, phpLink TSRMLS_CC)) { - RETURN_FALSE; - } - - if (snprintf(sql, sizeof(sql), "SELECT * FROM %s WHERE 1=0;", tableName) < 0) { - RETURN_FALSE; - } - - phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, sql, phpLink, 0); -} -/* }}} */ - -/* {{{ proto string fbsql_error([resource link_identifier]) - Returns the last error string */ -PHP_FUNCTION(fbsql_error) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL; - int id; - - switch (ZEND_NUM_ARGS()) { - case 0: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - break; - case 1: - if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - if (phpLink->errorText == NULL) { - RETURN_FALSE; - } - else { - RETURN_STRING(phpLink->errorText, 1); - } -} -/* }}} */ - -/* {{{ proto int fbsql_errno([resource link_identifier]) - Returns the last error code */ -PHP_FUNCTION(fbsql_errno) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL; - int id; - - switch (ZEND_NUM_ARGS()) { - case 0: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - break; - case 1: - if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - RETURN_LONG(phpLink->errorNo); -} -/* }}} */ - -/* {{{ proto bool fbsql_warnings([int flag]) - Enable or disable FrontBase warnings */ -PHP_FUNCTION(fbsql_warnings) -{ - int argc = ZEND_NUM_ARGS(); - zval **argv[1]; - - if ((argc < 0) || (argc > 1)) WRONG_PARAM_COUNT; - if (zend_get_parameters_ex(argc, &argv[0])==FAILURE) RETURN_FALSE; - if (argc >= 1) - { - convert_to_long_ex(argv[0]); - FB_SQL_G(generateWarnings) = Z_LVAL_PP(argv[0]) != 0; - } - RETURN_BOOL(FB_SQL_G(generateWarnings)); -} -/* }}} */ - -/* {{{ proto int fbsql_affected_rows([resource link_identifier]) - Get the number of rows affected by the last statement */ -PHP_FUNCTION(fbsql_affected_rows) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL; - int id; - - switch (ZEND_NUM_ARGS()) { - case 0: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - break; - case 1: - if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - RETURN_LONG(phpLink->affectedRows); -} -/* }}} */ - -/* {{{ proto int fbsql_rows_fetched(resource result) - Get the number of rows affected by the last statement */ -PHP_FUNCTION(fbsql_rows_fetched) -{ - PHPFBResult* phpResult = NULL; - zval **result = NULL; - int id; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &result)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE(phpResult, PHPFBResult *, result, id, "FrontBase-Result", le_result); - - if (!phpResult->rowHandler) { - RETURN_FALSE; - } - else { - RETURN_LONG(fbcrhRowCount(phpResult->rowHandler)); - } -} -/* }}} */ - -/* {{{ proto int fbsql_insert_id([resource link_identifier]) - Get the internal index for the last insert statement */ -PHP_FUNCTION(fbsql_insert_id) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL; - int id; - - switch (ZEND_NUM_ARGS()) { - case 0: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - break; - case 1: - if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - RETURN_LONG(phpLink->insert_id); -} -/* }}} */ - -/* {{{ phpSizeOfInt - */ -int phpSizeOfInt (int i) -{ - int s = 1; - if (i < 0) - { - s++; - i = -i; - } - while ((i = i / 10)) s++; - return s; -} -/* }}} */ - -void phpfbColumnAsString(PHPFBResult* result, int column, void* data , int* length, char** value TSRMLS_DC) -{ - FBCMetaData* md = result->metaData; - const FBCDatatypeMetaData* dtmd = fbcmdDatatypeMetaDataAtIndex(md, column); - unsigned dtc = fbcdmdDatatypeCode(dtmd); - switch (dtc) - { - case FB_Boolean: - { - unsigned char v = *((unsigned char*)(data)); - if (v == 255) - phpfbestrdup("Unknown", length, value); - else if (v == 0) - phpfbestrdup("False", length, value); - else - phpfbestrdup("True", length, value); - } - break; - - case FB_PrimaryKey: - case FB_Integer: - { - int v = *((int*)data); - char b[128]; - snprintf(b, sizeof(b), "%d", v); - phpfbestrdup(b, length, value); - } - break; -#ifdef FB_TinyInteger - case FB_TinyInteger: - { - short int v = *((FBTinyInteger*)data); - char b[128]; - snprintf(b, sizeof(b), "%d", v); - phpfbestrdup(b, length, value); - } - break; -#endif -#ifdef FB_LongInteger - case FB_LongInteger: - { - FBLongInteger v = *((FBLongInteger*)data); - char b[128]; -#ifdef PHP_WIN32 - snprintf(b, sizeof(b), "%I64i", v); -#else - snprintf(b, sizeof(b), "%ll", v); -#endif - phpfbestrdup(b, length, value); - } - break; -#endif - case FB_SmallInteger: - { - short v = *((short*)data); - char b[128]; - snprintf(b, sizeof(b), "%d", v); - phpfbestrdup(b, length, value); - } - break; - - case FB_Float: - case FB_Real: - case FB_Double: - { - double v = *((double*)data); - char b[128]; - snprintf(b, sizeof(b), "%f", v); - phpfbestrdup(b, length, value); - } - break; - - case FB_Numeric: - case FB_Decimal: - { - unsigned precision = fbcdmdPrecision(dtmd); - unsigned scale = fbcdmdScale(dtmd); - double v = *((double*)data); - char b[128]; - snprintf(b, sizeof(b), "%.*f", scale, v); - phpfbestrdup(b, length, value); - } - break; - - case FB_Character: - case FB_VCharacter: - { - char* v = (char*)data; - phpfbestrdup(v, length, value); - } - break; - - case FB_Bit: - case FB_VBit: - { - const FBCColumnMetaData* clmd = fbcmdColumnMetaDataAtIndex(md, column); - struct bitValue - { - unsigned int nBytes; - unsigned char* bytes; - }; - struct bitValue* ptr = data; - unsigned nBits = ptr->nBytes * 8; - - if (dtc == FB_Bit) nBits = fbcdmdLength(fbccmdDatatype(clmd)); - if (nBits %8 == 0) - { - unsigned i; - unsigned int l = nBits / 8; - *length = l*2+3+1; - if (value) - { - char* r = safe_emalloc(l, 2, 4); - r[0] = 'X'; - r[1] = '\''; - for (i = 0; i < nBits / 8; i++) - { - char c[4]; - snprintf(c, sizeof(c), "%02x", ptr->bytes[i]); - r[i*2+2] = c[0]; - r[i*2+3] = c[1]; - } - r[i*2+2] = '\''; - r[i*2+3] = 0; - *value = r; - } - } - else - { - unsigned i; - unsigned int l = nBits; - *length = l*2+3+1; - if (value) - { - char* r = safe_emalloc(l, 2, 4); - r[0] = 'B'; - r[1] = '\''; - for (i = 0; i < nBits; i++) - { - int bit = 0; - if (i/8 < ptr->nBytes) bit = ptr->bytes[i/8] & (1<<(7-(i%8))); - r[i*2+2] = bit?'1':'0'; - } - r[i*2+2] = '\''; - r[i*2+3] = 0; - *value = r; - } - } - } - break; - - case FB_Date: - case FB_Time: - case FB_TimeTZ: - case FB_TimestampTZ: - { - char* v = (char*)data; - phpfbestrdup(v, length, value); - } - break; - - case FB_Timestamp: - { - char* v = (char*)data; - if (FB_SQL_G(showTimestampDecimals)) { - phpfbestrdup(v, length, value); - } - // Copy only YYYY-MM-DD HH:MM:SS - else { - int stringLength = strlen(v); - stringLength = min(stringLength, 19); - if (value) { - char* r = emalloc(stringLength+1); - memcpy(r, v, stringLength); - r[stringLength] = 0; - *value = r; - } - *length = stringLength; - } - } - break; - - case FB_YearMonth: - { - char b[128]; - int v = *((unsigned int*)data); - snprintf(b, sizeof(b), "%d", v); - phpfbestrdup(b, length, value); - } - break; - - case FB_DayTime: - { - char b[128]; - double seconds = *((double*)data); - snprintf(b, sizeof(b), "%f", seconds); - phpfbestrdup(b, length, value); - } - break; - - case FB_CLOB: - case FB_BLOB: - { - if (*((unsigned char*) data) == '\1') - { /* Direct */ - *length = ((FBCBlobDirect *)data)->blobSize; - *value = estrndup((char *)((FBCBlobDirect *)data)->blobData, *length); - } - else - { - FBCBlobHandle *lobHandle; - unsigned char *bytes = (unsigned char *)data; - char *handle = (char *)(&bytes[1]); - lobHandle = fbcbhInitWithHandle(handle); - *length = fbcbhBlobSize(lobHandle); - - if (result->lobMode == FBSQL_LOB_HANDLE) { - phpfbestrdup(fbcbhDescription(lobHandle), length, value); - } - else { - if (dtc == FB_BLOB) - *value = estrndup((char *)fbcdcReadBLOB(result->link->connection, lobHandle), *length); - else - *value = estrndup((char *)fbcdcReadCLOB(result->link->connection, lobHandle), *length); - } - fbcbhRelease(lobHandle); - } - } - break; - - default: - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unimplemented type (%d)", dtc); - break; - } -} - -/* {{{ phpfbSqlResult - */ -void phpfbSqlResult(INTERNAL_FUNCTION_PARAMETERS, PHPFBResult* result, int rowIndex, int columnIndex) -{ - void** row; - if (result->list) - { - FBCPList* columns = (FBCPList*)fbcplValueForKey(result->list, "COLUMNS"); - FBCPList* column = (FBCPList*)fbcplValueAtIndex(columns, result->rowIndex); - if (columnIndex == 0) - { /* Name */ - FBCPList* name = (FBCPList*)fbcplValueForKey(column, "NAME"); - RETURN_STRING((char *)fbcplString((FBCPList*)name), 1); - } - else if (columnIndex == 2) - { /* Length */ - FBCPList* name = (FBCPList*)fbcplValueForKey(column, "WIDTH"); - RETURN_STRING((char *)fbcplString((FBCPList*)name), 1); - } - else if (columnIndex == 1) - { /* Type */ - FBCPList* name = (FBCPList*)fbcplValueForKey(column, "DATATYPE"); - RETURN_STRING((char *)fbcplString((FBCPList*)name), 1); - } - else if (columnIndex == 3) - { /* Flags */ - RETURN_STRING("", 1); - } - else - { - RETURN_STRING("", 1); - } - } - else if (result->array) - { /* Special case for get dbs */ - RETURN_STRING(fbaObjectAtIndex(result->array, rowIndex), 1); - } - else if (!phpfbFetchRow(result, rowIndex)) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "No such row %d in result set %d", rowIndex, rowIndex); - RETURN_FALSE; - } - else if (columnIndex >= result->columnCount) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "No such column %d in result set %d", columnIndex, rowIndex); - RETURN_FALSE; - } - else - { - row = fbcrhRowAtIndex(result->rowHandler, rowIndex); - if (row == NULL) - { - RETURN_FALSE; - } - else if (row[columnIndex]) - { - phpfbColumnAsString(result, columnIndex, row[columnIndex], &Z_STRLEN_P(return_value), &Z_STRVAL_P(return_value) TSRMLS_CC); - Z_TYPE_P(return_value) = IS_STRING; - } - else - { - RETURN_NULL(); - } - } -} -/* }}} */ - -/* {{{ proto mixed fbsql_result(int result [, int row [, mixed field]]) - ??? */ -PHP_FUNCTION(fbsql_result) -{ - PHPFBResult* result = NULL; - zval **fbsql_result_index = NULL, **row = NULL, **field = NULL; - int rowIndex; - int columnIndex; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &fbsql_result_index, &row)==FAILURE) { - RETURN_FALSE; - } - break; - case 3: - if (zend_get_parameters_ex(3, &fbsql_result_index, &row, &field)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); - - rowIndex = result->rowIndex; - if (row) - { - convert_to_long_ex(row); - rowIndex = Z_LVAL_PP(row); - } - - columnIndex = result->columnIndex; - if (field) - { - if ((Z_TYPE_PP(field) == IS_STRING) && (result->metaData)) - { - for (columnIndex =0; columnIndex < result->columnCount; columnIndex ++) - { - const FBCColumnMetaData* cmd = fbcmdColumnMetaDataAtIndex(result->metaData, columnIndex); - const char* lbl = fbccmdLabelName(cmd); - if (strcmp((char*)lbl, Z_STRVAL_PP(field)) == 0) break; - } - if (columnIndex == result->columnCount) RETURN_FALSE; - } - else - { - convert_to_long_ex(field); - columnIndex = Z_LVAL_PP(field); - if (columnIndex < 0) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal column index - %d", columnIndex); - RETURN_FALSE; - } - } - } - - phpfbSqlResult(INTERNAL_FUNCTION_PARAM_PASSTHRU, result, rowIndex, columnIndex); - - result->columnIndex++; - if (result->columnIndex == result->columnCount) - { - result->rowIndex++; - result->columnIndex = 0; - } -} -/* }}} */ - -/* {{{ proto bool fbsql_next_result(int result) - Switch to the next result if multiple results are available */ -PHP_FUNCTION(fbsql_next_result) -{ - PHPFBResult* result = NULL; - zval **fbsql_result_index = NULL; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); - - result->currentResult++; - if (result->currentResult < result->selectResults) { - if (result->fetchHandle) { - FBCMetaData *md = fbcdcCancelFetch(result->link->connection, result->fetchHandle); - fbcmdRelease(md); - } - if (result->rowHandler) fbcrhRelease(result->rowHandler); - result->metaData = (FBCMetaData*)fbcmdMetaDataAtIndex(result->ResultmetaData, result->currentResult); - result->fetchHandle = fbcmdFetchHandle(result->metaData); - result->rowHandler = NULL; - result->batchSize = FB_SQL_G(batchSize); - result->rowCount = 0x7fffffff; - result->columnCount = fbcmdColumnCount(result->metaData);; - result->rowIndex = 0; - result->columnIndex = 0; - result->row = NULL; - result->array = NULL; - result->list = NULL; - if (result->link) - result->link->affectedRows = fbcmdRowCount(result->metaData); - - RETURN_TRUE; - } - else { - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto int fbsql_num_rows(int result) - Get number of rows */ -PHP_FUNCTION(fbsql_num_rows) -{ - PHPFBResult* result = NULL; - zval **fbsql_result_index = NULL; - int rowCount; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); - - if (result->array) - rowCount = result->rowCount; - else { - rowCount = fbcmdRowCount(result->metaData); - if (rowCount == -1) - { - phpfbFetchRow(result, 0x7fffffff); - rowCount = result->rowCount; - } - } - RETURN_LONG(rowCount); -} -/* }}} */ - -/* {{{ proto int fbsql_num_fields(int result) - Get number of fields in the result set */ -PHP_FUNCTION(fbsql_num_fields) -{ - PHPFBResult* result = NULL; - zval **fbsql_result_index = NULL; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); - - RETURN_LONG(result->columnCount); -} -/* }}} */ - -/* {{{ proto array fbsql_fetch_row(resource result) - Fetch a row of data. Returns an indexed array */ -PHP_FUNCTION(fbsql_fetch_row) -{ - php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FBSQL_NUM, 1); -} -/* }}} */ - -/* {{{ proto object fbsql_fetch_assoc(resource result) - Detch a row of data. Returns an assoc array */ -PHP_FUNCTION(fbsql_fetch_assoc) -{ - php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FBSQL_ASSOC, 1); -} -/* }}} */ - -/* {{{ proto object fbsql_fetch_object(resource result [, int result_type]) - Fetch a row of data. Returns an object */ -PHP_FUNCTION(fbsql_fetch_object) -{ - php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FBSQL_ASSOC, 2); - if (Z_TYPE_P(return_value)==IS_ARRAY) { - object_and_properties_init(return_value, ZEND_STANDARD_CLASS_DEF_PTR, Z_ARRVAL_P(return_value)); - } -} -/* }}} */ - -/* {{{ proto array fbsql_fetch_array(resource result [, int result_type]) - Fetches a result row as an array (associative, numeric or both)*/ -PHP_FUNCTION(fbsql_fetch_array) -{ - php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, FBSQL_BOTH, 2); -} -/* }}} */ - -static void _parse_list(zval** return_value, FBCPList* list) -{ - int count = fbcplCount(list); - int i,j; - - for (i=0; i expected_args) { - WRONG_PARAM_COUNT; - } - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &fbsql_result_index, &zresult_type)==FAILURE) { - RETURN_FALSE; - } - convert_to_long_ex(zresult_type); - result_type = Z_LVAL_PP(zresult_type); - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); - - rowIndex = result->rowIndex; - if (((result_type & FBSQL_NUM) != FBSQL_NUM) && ((result_type & FBSQL_ASSOC) != FBSQL_ASSOC)) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal result type use FBSQL_NUM, FBSQL_ASSOC, or FBSQL_BOTH"); - RETURN_FALSE; - } - array_init(return_value); - if (result->fetchHandle == NULL) - { - if (result->array == NULL && result->list == NULL) - { - RETURN_FALSE; - } - if (result->rowIndex >= result->rowCount) - { - RETURN_FALSE; - } - if (result->list) { - char* key; - FBCPList* value; - - value = (FBCPList*)fbcplValueAtIndex(result->list, result->rowIndex); - key = (char*)fbcplKeyAtIndex(result->list, result->rowIndex); - - if (key && key[0] == 2) - key = NULL; - - if (fbcplIsDictionary(value)) { - zval *value_array; - - MAKE_STD_ZVAL(value_array); - array_init(value_array); - - _parse_list(&value_array, value); - if (result_type & FBSQL_NUM || key == NULL) - { - add_index_zval(return_value, 0, value_array); - } - if (result_type & FBSQL_ASSOC && key != NULL) - { - add_assoc_zval(return_value, key, value_array); - } - } - else if (fbcplIsArray(value)) { - zval *value_array; - int valcount = fbcplCount(value); - int j; - - MAKE_STD_ZVAL(value_array); - array_init(value_array); - - for (j=0; jarray, result->rowIndex)), 0); - } - if (result_type & FBSQL_ASSOC) - { - add_assoc_string(return_value, "Database", estrdup(fbaObjectAtIndex(result->array, result->rowIndex)), 0); - } - } - } - else { - if (result->rowCount == 0) { - RETURN_FALSE; - } - if (result->rowCount == 0x7fffffff) - { - if (!phpfbFetchRow(result, result->rowIndex)) { - RETURN_FALSE; - } - } - row = fbcrhRowAtIndex(result->rowHandler, rowIndex); - if (row == NULL) - { - RETURN_FALSE; - } - for (i=0; i < result->columnCount; i++) - { - if (row[i]) - { - char* value; - unsigned int length; - unsigned int c = 0; - phpfbColumnAsString(result, i, row[i], &length, &value TSRMLS_CC); - if (result_type & FBSQL_NUM) - { - add_index_stringl(return_value, i, value, length, c); - c = 1; - } - if (result_type & FBSQL_ASSOC) - { - char* key = (char*)fbccmdLabelName(fbcmdColumnMetaDataAtIndex(result->metaData, i)); - add_assoc_stringl(return_value, key, value, length, c); - } - } - else - { - if (result_type & FBSQL_NUM) - { - add_index_unset(return_value, i); - } - if (result_type & FBSQL_ASSOC) - { - char* key = (char*)fbccmdLabelName(fbcmdColumnMetaDataAtIndex(result->metaData, i)); - add_assoc_unset(return_value, key); - } - } - } - } - result->rowIndex++; - result->columnIndex = 0; -} - -/* {{{ proto bool fbsql_data_seek(int result, int row_number) - Move the internal row counter to the specified row_number */ -PHP_FUNCTION(fbsql_data_seek) -{ - PHPFBResult* result = NULL; - zval **fbsql_result_index = NULL, **row_number = NULL; - unsigned int rowIndex; - - switch (ZEND_NUM_ARGS()) { - case 2: - if (zend_get_parameters_ex(2, &fbsql_result_index, &row_number)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); - - convert_to_long_ex(row_number); - rowIndex = Z_LVAL_PP(row_number); - - if (rowIndex < 0) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal row_index (%d)", rowIndex); - RETURN_FALSE; - } - - if (result->rowCount == 0x7fffffff) phpfbFetchRow(result, rowIndex); - if (rowIndex > result->rowCount) RETURN_FALSE; - result->rowIndex = rowIndex; - result->columnIndex = 0; - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto array fbsql_fetch_lengths(int result) - Returns an array of the lengths of each column in the result set */ -PHP_FUNCTION(fbsql_fetch_lengths) -{ - PHPFBResult* result = NULL; - zval **fbsql_result_index = NULL; - int i; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); - - if (result->row == NULL) RETURN_FALSE; - array_init(return_value); - for (i=0; i < result->columnCount; i++) - { - unsigned length = 0; - if (result->row[i]) phpfbColumnAsString(result, i, result->row[i], &length, NULL TSRMLS_CC); - add_index_long(return_value, i, length); - } -} -/* }}} */ - -/* {{{ proto object fbsql_fetch_field(int result [, int field_index]) - Get the field properties for a specified field_index */ -PHP_FUNCTION(fbsql_fetch_field) -{ - PHPFBResult* result = NULL; - zval **fbsql_result_index = NULL, **field_index = NULL; - int column = -1; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); - - column = result->columnIndex; - if (field_index) - { - convert_to_long_ex(field_index); - column = Z_LVAL_PP(field_index); - if (column < 0 || column >= result->columnCount) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d no such column in result", column); - RETURN_FALSE; - } - } - object_init(return_value); - - add_property_string(return_value, "name", (char*)fbccmdLabelName(fbcmdColumnMetaDataAtIndex(result->metaData, column)), 1); - add_property_string(return_value, "table", (char*)fbccmdTableName(fbcmdColumnMetaDataAtIndex(result->metaData, column)), 1); - add_property_long(return_value, "max_length", fbcdmdLength(fbccmdDatatype(fbcmdColumnMetaDataAtIndex(result->metaData, column)))); - add_property_string(return_value, "type", (char*)fbcdmdDatatypeString(fbcmdDatatypeMetaDataAtIndex(result->metaData, column)), 1); - add_property_long(return_value, "not_null", !fbccmdIsNullable(fbcmdColumnMetaDataAtIndex(result->metaData, column))); -/* Remember to add the rest */ -/* add_property_long(return_value, "primary_key", IS_PRI_KEY(fbsql_field->flags)?1:0); */ -/* add_property_long(return_value, "multiple_key", (fbsql_field->flags&MULTIPLE_KEY_FLAG?1:0)); */ -/* add_property_long(return_value, "unique_key", (fbsql_field->flags&UNIQUE_KEY_FLAG?1:0)); */ -/* add_property_long(return_value, "numeric", IS_NUM(Z_TYPE_P(fbsql_field))?1:0); */ -/* add_property_long(return_value, "blob", IS_BLOB(fbsql_field->flags)?1:0); */ -/* add_property_long(return_value, "unsigned", (fbsql_field->flags&UNSIGNED_FLAG?1:0)); */ -/* add_property_long(return_value, "zerofill", (fbsql_field->flags&ZEROFILL_FLAG?1:0)); */ -} -/* }}} */ - -/* {{{ proto bool fbsql_field_seek(int result [, int field_index]) - ??? */ -PHP_FUNCTION(fbsql_field_seek) -{ - PHPFBResult* result = NULL; - zval **fbsql_result_index = NULL, **field_index = NULL; - int column = -1; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); - - column = result->columnIndex; - if (field_index) - { - convert_to_long_ex(field_index); - column = Z_LVAL_PP(field_index); - if (column < 0 || column >= result->columnCount) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d no such column in result", column); - RETURN_FALSE; - } - } - - result->columnIndex = column; - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto string fbsql_field_name(int result [, int field_index]) - Get the column name for a specified field_index */ -PHP_FUNCTION(fbsql_field_name) -{ - PHPFBResult* result = NULL; - zval **fbsql_result_index = NULL, **field_index = NULL; - int column = -1; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); - - column = result->columnIndex; - if (field_index) - { - convert_to_long_ex(field_index); - column = Z_LVAL_PP(field_index); - if (column < 0 || column >= result->columnCount) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d no such column in result", column); - RETURN_FALSE; - } - } - if (result->list) - { - phpfbSqlResult(INTERNAL_FUNCTION_PARAM_PASSTHRU, result, result->rowIndex, 0); - } - else if (result->metaData) - { - RETURN_STRING((char *)fbccmdLabelName(fbcmdColumnMetaDataAtIndex(result->metaData, column)), 1); - result->columnIndex = column; - } -} -/* }}} */ - -/* {{{ proto string fbsql_field_table(int result [, int field_index]) - Get the table name for a specified field_index */ -PHP_FUNCTION(fbsql_field_table) -{ - PHPFBResult* result = NULL; - zval **fbsql_result_index = NULL, **field_index = NULL; - int column = -1; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); - - column = result->columnIndex; - if (field_index) - { - convert_to_long_ex(field_index); - column = Z_LVAL_PP(field_index); - if (column < 0 || column >= result->columnCount) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d no such column in result", column); - RETURN_FALSE; - } - } - RETURN_STRING((char *)fbccmdTableName(fbcmdColumnMetaDataAtIndex(result->metaData, column)), 1); -} -/* }}} */ - -/* {{{ proto mixed fbsql_field_len(int result [, int field_index]) - Get the column length for a specified field_index */ -PHP_FUNCTION(fbsql_field_len) -{ - PHPFBResult* result = NULL; - zval **fbsql_result_index = NULL, **field_index = NULL; - int column = -1; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); - - column = result->columnIndex; - if (field_index) - { - convert_to_long_ex(field_index); - column = Z_LVAL_PP(field_index); - if (column < 0 || column >= result->columnCount) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d no such column in result", column); - RETURN_FALSE; - } - } - if (result->list) - { - phpfbSqlResult(INTERNAL_FUNCTION_PARAM_PASSTHRU, result, result->rowIndex, 2); - } - else if (result->metaData) - { - RETURN_LONG(fbcdmdLength(fbccmdDatatype(fbcmdColumnMetaDataAtIndex(result->metaData, column)))); - } - else - { - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto string fbsql_field_type(int result [, int field_index]) - Get the field type for a specified field_index */ -PHP_FUNCTION(fbsql_field_type) -{ - PHPFBResult* result = NULL; - zval **fbsql_result_index = NULL, **field_index = NULL; - int column = -1; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); - - column = result->columnIndex; - if (field_index) - { - convert_to_long_ex(field_index); - column = Z_LVAL_PP(field_index); - if (column < 0 || column >= result->columnCount) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d no such column in result", column); - RETURN_FALSE; - } - } - if (result->list) - { - phpfbSqlResult(INTERNAL_FUNCTION_PARAM_PASSTHRU, result, result->rowIndex, 1); - } - else if (result->metaData) - { - RETURN_STRING((char *)fbcdmdDatatypeString (fbcmdDatatypeMetaDataAtIndex(result->metaData, column)), 1); - } - else - { - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto string fbsql_field_flags(int result [, int field_index]) - ??? */ -PHP_FUNCTION(fbsql_field_flags) -{ - PHPFBResult* result = NULL; - zval **fbsql_result_index = NULL, **field_index = NULL; - int column = -1; - char buf[512]; - int len; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { - RETURN_FALSE; - } - break; - case 2: - if (zend_get_parameters_ex(2, &fbsql_result_index, &field_index)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); - - column = result->columnIndex; - if (field_index) - { - convert_to_long_ex(field_index); - column = Z_LVAL_PP(field_index); - if (column < 0 || column >= result->columnCount) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d no such column in result", column); - RETURN_FALSE; - } - } - strcpy(buf, ""); - if (!fbccmdIsNullable(fbcmdColumnMetaDataAtIndex(result->metaData, column))) { - strcat(buf, "not_null "); - } -#if 0 - if (IS_PRI_KEY(fbsql_field->flags)) { - strcat(buf, "primary_key "); - } - if (fbsql_field->flags&UNIQUE_KEY_FLAG) { - strcat(buf, "unique_key "); - } - if (fbsql_field->flags&MULTIPLE_KEY_FLAG) { - strcat(buf, "multiple_key "); - } - if (IS_BLOB(fbsql_field->flags)) { - strcat(buf, "blob "); - } - if (fbsql_field->flags&UNSIGNED_FLAG) { - strcat(buf, "unsigned "); - } - if (fbsql_field->flags&ZEROFILL_FLAG) { - strcat(buf, "zerofill "); - } - if (fbsql_field->flags&BINARY_FLAG) { - strcat(buf, "binary "); - } - if (fbsql_field->flags&ENUM_FLAG) { - strcat(buf, "enum "); - } - if (fbsql_field->flags&AUTO_INCREMENT_FLAG) { - strcat(buf, "auto_increment "); - } - if (fbsql_field->flags&TIMESTAMP_FLAG) { - strcat(buf, "timestamp "); - } -#endif - len = strlen(buf); - /* remove trailing space, if present */ - if (len && buf[len-1] == ' ') { - buf[len-1] = 0; - len--; - } - RETURN_STRING(buf, 1); -} -/* }}} */ - -/* {{{ proto string fbsql_table_name(resource result, int index) - Retreive the table name for index after a call to fbsql_list_tables() */ -PHP_FUNCTION(fbsql_table_name) -{ - PHPFBResult* result = NULL; - zval **fbsql_result_index = NULL, **table_index; - unsigned index; - char* value; - unsigned int length; - void** row; - - switch (ZEND_NUM_ARGS()) { - case 2: - if (zend_get_parameters_ex(2, &fbsql_result_index, &table_index)==FAILURE) { - RETURN_FALSE; - } - convert_to_long_ex(table_index); - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); - - index = Z_LVAL_PP(table_index); - if (index < 0) - { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal index (%i)", index); - RETURN_FALSE; - } - - if (result->rowCount == 0x7fffffff) phpfbFetchRow(result, index); - if (index > result->rowCount) RETURN_FALSE; - result->rowIndex = index; - result->columnIndex = 0; - - row = fbcrhRowAtIndex(result->rowHandler, index); - phpfbColumnAsString(result, 0, row[0], &length, &value TSRMLS_CC); - RETURN_STRINGL(value, length, 1); -} -/* }}} */ - -/* {{{ proto bool fbsql_free_result(resource result) - free the memory used to store a result */ -PHP_FUNCTION(fbsql_free_result) -{ - PHPFBResult* result = NULL; - zval **fbsql_result_index = NULL; - - switch (ZEND_NUM_ARGS()) { - case 1: - if (zend_get_parameters_ex(1, &fbsql_result_index)==FAILURE) { - RETURN_FALSE; - } - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE(result, PHPFBResult *, fbsql_result_index, -1, "FrontBase-Result", le_result); - - zend_list_delete(Z_LVAL_PP(fbsql_result_index)); - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto array fbsql_get_autostart_info([resource link_identifier]) - ??? */ -PHP_FUNCTION(fbsql_get_autostart_info) -{ - PHPFBLink* phpLink = NULL; - zval **fbsql_link_index = NULL; - int id; - FBCAutoStartInfo* asInfo; - - switch (ZEND_NUM_ARGS()) { - case 0: - id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU); - CHECK_LINK(id); - break; - case 1: - if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) { - RETURN_FALSE; - } - id = -1; - break; - default: - WRONG_PARAM_COUNT; - break; - } - ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink); - - if (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128); - if (phpLink->execHandler == NULL) { - if (FB_SQL_G(generateWarnings)) - php_error_docref(NULL TSRMLS_CC, E_WARNING, "No valid Exec handler available for this connection"); - RETURN_FALSE; - } - else { - array_init(return_value); - asInfo = fbcehGetAutoStartInfo(phpLink->execHandler); - if (asInfo != NULL) { - unsigned i; - - for (i=0; iinfoLines); i++) { - FBArray* infoLine = fbaObjectAtIndex(asInfo->infoLines, i); -/* - if (fbaCount(infoLine) == 2) { - fbaObjectAtIndex(infoLine, 0); - fbaObjectAtIndex(infoLine, 1); - } - else { -*/ - add_index_string(return_value, i, fbaObjectAtIndex(infoLine, 0), 1); -/* } - */ - - } - } - } -} -/* }}} */ - - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/fbsql/php_fbsql.h b/ext/fbsql/php_fbsql.h deleted file mode 100644 index 3990264a109e9..0000000000000 --- a/ext/fbsql/php_fbsql.h +++ /dev/null @@ -1,148 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Frank M. Kromann | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#define HAVE_FBSQL 1 - -#ifndef _PHP_FBSQL_H -#define _PHP_FBSQL_H - -#if COMPILE_DL_FBSQL -#undef HAVE_FBSQL -#define HAVE_FBSQL 1 -#endif -#if HAVE_FBSQL - -extern zend_module_entry fbsql_module_entry; -#define fbsql_module_ptr &fbsql_module_entry - -#include - -PHP_MINIT_FUNCTION(fbsql); -PHP_MSHUTDOWN_FUNCTION(fbsql); -PHP_RINIT_FUNCTION(fbsql); -PHP_RSHUTDOWN_FUNCTION(fbsql); -PHP_MINFO_FUNCTION(fbsql); -PHP_FUNCTION(fbsql_connect); -PHP_FUNCTION(fbsql_pconnect); -PHP_FUNCTION(fbsql_close); -PHP_FUNCTION(fbsql_select_db); -PHP_FUNCTION(fbsql_set_characterset); -PHP_FUNCTION(fbsql_change_user); -PHP_FUNCTION(fbsql_create_db); -PHP_FUNCTION(fbsql_drop_db); -PHP_FUNCTION(fbsql_start_db); -PHP_FUNCTION(fbsql_stop_db); -PHP_FUNCTION(fbsql_db_status); -PHP_FUNCTION(fbsql_query); -PHP_FUNCTION(fbsql_db_query); -PHP_FUNCTION(fbsql_list_dbs); -PHP_FUNCTION(fbsql_list_tables); -PHP_FUNCTION(fbsql_list_fields); -PHP_FUNCTION(fbsql_error); -PHP_FUNCTION(fbsql_errno); -PHP_FUNCTION(fbsql_affected_rows); -PHP_FUNCTION(fbsql_rows_fetched); -PHP_FUNCTION(fbsql_insert_id); -PHP_FUNCTION(fbsql_result); -PHP_FUNCTION(fbsql_next_result); -PHP_FUNCTION(fbsql_num_rows); -PHP_FUNCTION(fbsql_num_fields); -PHP_FUNCTION(fbsql_fetch_row); -PHP_FUNCTION(fbsql_fetch_array); -PHP_FUNCTION(fbsql_fetch_assoc); -PHP_FUNCTION(fbsql_fetch_object); -PHP_FUNCTION(fbsql_data_seek); -PHP_FUNCTION(fbsql_fetch_lengths); -PHP_FUNCTION(fbsql_fetch_field); -PHP_FUNCTION(fbsql_field_seek); -PHP_FUNCTION(fbsql_free_result); -PHP_FUNCTION(fbsql_field_name); -PHP_FUNCTION(fbsql_field_table); -PHP_FUNCTION(fbsql_field_len); -PHP_FUNCTION(fbsql_field_type); -PHP_FUNCTION(fbsql_field_flags); -PHP_FUNCTION(fbsql_table_name); - -PHP_FUNCTION(fbsql_set_transaction); -PHP_FUNCTION(fbsql_autocommit); -PHP_FUNCTION(fbsql_commit); -PHP_FUNCTION(fbsql_rollback); - -PHP_FUNCTION(fbsql_create_blob); -PHP_FUNCTION(fbsql_create_clob); -PHP_FUNCTION(fbsql_set_lob_mode); -PHP_FUNCTION(fbsql_read_blob); -PHP_FUNCTION(fbsql_read_clob); -PHP_FUNCTION(fbsql_blob_size); -PHP_FUNCTION(fbsql_clob_size); - -PHP_FUNCTION(fbsql_hostname); -PHP_FUNCTION(fbsql_database); -PHP_FUNCTION(fbsql_database_password); -PHP_FUNCTION(fbsql_username); -PHP_FUNCTION(fbsql_password); -PHP_FUNCTION(fbsql_warnings); -PHP_FUNCTION(fbsql_set_password); - -PHP_FUNCTION(fbsql_get_autostart_info); -/* PHP_FUNCTION(fbsql_set_autostart_info); */ - -static void php_fbsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type, int expected_args); -static void php_fbsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent); - -ZEND_BEGIN_MODULE_GLOBALS(fbsql) - zend_bool allowPersistent; - zend_bool generateWarnings; - zend_bool autoCommit; - zend_bool showTimestampDecimals; - long maxPersistent; - long maxLinks; - long maxConnections; - long maxResults; - long batchSize; - char *hostName; - char *databaseName; - char *databasePassword; - char *userName; - char *userPassword; - long persistentCount; - long linkCount; - long linkIndex; -ZEND_END_MODULE_GLOBALS(fbsql) - -#ifdef ZTS -# define FB_SQL_G(v) TSRMG(fbsql_globals_id, zend_fbsql_globals *, v) -#else -# define FB_SQL_G(v) (fbsql_globals.v) -#endif - -/*#ifndef ZTS /* No need for external definitions */ -/*extern fbsql_module* phpfbModule; */ -/*#endif */ - -#else /* HAVE_FBSQL */ - -#define fbsql_module_ptr NULL -#error not ok -#endif /* HAVE_FBSQL */ - -#define phpext_fbsql_ptr fbsql_module_ptr - -#endif /* _PHP_FBSQL_H */ diff --git a/ext/fdf/CREDITS b/ext/fdf/CREDITS deleted file mode 100644 index 57c33cc4b3d8c..0000000000000 --- a/ext/fdf/CREDITS +++ /dev/null @@ -1,2 +0,0 @@ -FDF -Uwe Steinmann diff --git a/ext/fdf/config.m4 b/ext/fdf/config.m4 deleted file mode 100644 index 14fc261ec3450..0000000000000 --- a/ext/fdf/config.m4 +++ /dev/null @@ -1,73 +0,0 @@ -dnl -dnl $Id$ -dnl - -PHP_ARG_WITH(fdftk, for FDF support, -[ --with-fdftk[=DIR] Include FDF support]) - -if test "$PHP_FDFTK" != "no"; then - - case $host_os in - aix*[)] - libtype=aix - ;; - solaris*[)] - libtype=solaris - ;; - linux*[)] - libtype=linux - ;; - *[)] - AC_MSG_ERROR([The fdf toolkit is not available for $host_os.]) - ;; - esac - - if test "$PHP_FDFTK" = "yes"; then - PHP_FDFTK="/usr/local /usr ../FDFToolkitForUNIX ext/fdf/FDFToolkitForUNIX ../fdftk ext/fdf/fdftk" - fi - - for dir in $PHP_FDFTK; do - for subdir in include HeadersAndLibraries/headers; do - if test -r $dir/$subdir/FdfTk.h; then - FDFTK_DIR=$dir - FDFTK_H_DIR=$dir/$subdir - break 2 - elif test -r $dir/$subdir/fdftk.h; then - AC_DEFINE(HAVE_FDFTK_H_LOWER,1,[ ]) - FDFTK_DIR=$dir - FDFTK_H_DIR=$dir/$subdir - break 2 - fi - done - done - - if test -z "$FDFTK_DIR"; then - AC_MSG_ERROR([FdfTk.h or fdftk.h not found. Please reinstall the fdf toolkit.]) - fi - - PHP_ADD_INCLUDE($FDFTK_H_DIR) - - FDFLIBRARY="" - for file in fdftk FdfTk; do - for dir in $FDFTK_DIR/lib $FDFTK_DIR/HeadersAndLibraries/$libtype/C; do - if test -r $dir/lib$file.so; then - PHP_CHECK_LIBRARY($file, FDFOpen, [FDFLIBRARY=$file], [], [-L$dir -lm]) - if test "$FDFLIBRARY"; then - PHP_CHECK_LIBRARY($file, FDFGetFDFVersion, [AC_DEFINE(HAVE_FDFTK_5,1,[ ])], [], [-L$dir -lm]) - FDFTK_LIB_DIR=$dir - break 2 - fi - fi - done - done - - if test -z "$FDFLIBRARY"; then - AC_MSG_ERROR(no usable fdf library found) - fi - - PHP_ADD_LIBRARY_WITH_PATH($FDFLIBRARY, $FDFTK_LIB_DIR, FDF_SHARED_LIBADD) - - PHP_NEW_EXTENSION(fdf, fdf.c, $ext_shared) - PHP_SUBST(FDF_SHARED_LIBADD) - AC_DEFINE(HAVE_FDFLIB,1,[ ]) -fi diff --git a/ext/fdf/config.w32 b/ext/fdf/config.w32 deleted file mode 100644 index befad2b816aa2..0000000000000 --- a/ext/fdf/config.w32 +++ /dev/null @@ -1,15 +0,0 @@ -// $Id$ -// vim:ft=javascript - -ARG_WITH("fdf", "Include FDF support.", "no"); - -if (PHP_FDF != "no") { - if (CHECK_LIB("fdftk.lib", "fdf", PHP_FDF) && - CHECK_HEADER_ADD_INCLUDE("FdfTk.h", "CFLAGS_FDF")) { - EXTENSION("fdf", "fdf.c"); - AC_DEFINE('HAVE_FDFLIB', 1, 'FDF support'); - ADD_FLAG("CFLAGS_FDF", "/D HAVE_FDFTK_5"); - } else { - WARNING("fdf not enabled; libraries and headers not found"); - } -} diff --git a/ext/fdf/fdf.c b/ext/fdf/fdf.c deleted file mode 100644 index 115ca9c3d2790..0000000000000 --- a/ext/fdf/fdf.c +++ /dev/null @@ -1,1865 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Uwe Steinmann | - | Hartmut Holzgraefe | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -/* FdfTk lib 2.0 is a Complete C/C++ FDF Toolkit available from - http://beta1.adobe.com/ada/acrosdk/forms.html. */ - -/* Note that there is no code from the FdfTk lib in this file */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_open_temporary_file.h" - -#if HAVE_FDFLIB - -#include "SAPI.h" -#include "ext/standard/info.h" -#include "php_open_temporary_file.h" -#include "php_variables.h" -#include "php_fdf.h" - -#ifndef S_ISDIR -#define S_ISDIR(m) (((m) & _S_IFDIR) == _S_IFDIR) -#endif - -static int le_fdf; - -SAPI_POST_HANDLER_FUNC(fdf_post_handler); - -/* {{{ arginfo */ -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_open, 0) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_open_string, 0) - ZEND_ARG_INFO(0, fdf_data) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_create, 0) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_close, 0) - ZEND_ARG_INFO(0, fdfdoc) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fdf_get_value, 0, 0, 2) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, fieldname) - ZEND_ARG_INFO(0, which) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fdf_set_value, 0, 0, 3) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, fieldname) - ZEND_ARG_INFO(0, value) - ZEND_ARG_INFO(0, isname) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fdf_next_field_name, 0, 0, 1) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, fieldname) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_set_ap, 0) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, fieldname) - ZEND_ARG_INFO(0, face) - ZEND_ARG_INFO(0, filename) - ZEND_ARG_INFO(0, pagenr) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_get_ap, 0) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, fieldname) - ZEND_ARG_INFO(0, face) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_get_encoding, 0) - ZEND_ARG_INFO(0, fdfdoc) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_set_status, 0) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, status) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_get_status, 0) - ZEND_ARG_INFO(0, fdfdoc) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fdf_set_file, 0, 0, 2) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, filename) - ZEND_ARG_INFO(0, target_frame) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_get_file, 0) - ZEND_ARG_INFO(0, fdfdoc) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fdf_save, 0, 0, 1) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_save_string, 0) - ZEND_ARG_INFO(0, fdfdoc) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_add_template, 0) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, newpage) - ZEND_ARG_INFO(0, filename) - ZEND_ARG_INFO(0, template) - ZEND_ARG_INFO(0, rename) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_set_flags, 0) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, fieldname) - ZEND_ARG_INFO(0, whichflags) - ZEND_ARG_INFO(0, newflags) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_get_flags, 0) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, fieldname) - ZEND_ARG_INFO(0, whichflags) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_set_opt, 0) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, fieldname) - ZEND_ARG_INFO(0, element) - ZEND_ARG_INFO(0, value) - ZEND_ARG_INFO(0, name) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fdf_get_opt, 0, 0, 2) - ZEND_ARG_INFO(0, fdfdof) - ZEND_ARG_INFO(0, fieldname) - ZEND_ARG_INFO(0, element) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_set_submit_form_action, 0) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, fieldname) - ZEND_ARG_INFO(0, whichtrigger) - ZEND_ARG_INFO(0, url) - ZEND_ARG_INFO(0, flags) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_set_javascript_action, 0) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, fieldname) - ZEND_ARG_INFO(0, whichtrigger) - ZEND_ARG_INFO(0, script) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_set_encoding, 0) - ZEND_ARG_INFO(0, fdf_document) - ZEND_ARG_INFO(0, encoding) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_errno, 0) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_error, 0) - ZEND_ARG_INFO(0, errno) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fdf_get_version, 0, 0, 0) - ZEND_ARG_INFO(0, fdfdoc) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_set_version, 0) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, version) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_add_doc_javascript, 0) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, scriptname) - ZEND_ARG_INFO(0, script) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_set_on_import_javascript, 0) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, script) - ZEND_ARG_INFO(0, before_data_import) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_set_target_frame, 0) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, target) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_remove_item, 0) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, fieldname) - ZEND_ARG_INFO(0, item) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_get_attachment, 0) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, fieldname) - ZEND_ARG_INFO(0, savepath) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO_EX(arginfo_fdf_enum_values, 0, 0, 2) - ZEND_ARG_INFO(0, fdfdoc) - ZEND_ARG_INFO(0, function) - ZEND_ARG_INFO(0, userdata) -ZEND_END_ARG_INFO() - -static -ZEND_BEGIN_ARG_INFO(arginfo_fdf_header, 0) -ZEND_END_ARG_INFO() - -/* }}} */ - -/* {{{ fdf_functions[] - */ -zend_function_entry fdf_functions[] = { - PHP_FE(fdf_add_template, arginfo_fdf_add_template) - PHP_FE(fdf_close, arginfo_fdf_close) - PHP_FE(fdf_create, arginfo_fdf_create) - PHP_FE(fdf_enum_values, arginfo_fdf_enum_values) - PHP_FE(fdf_errno, arginfo_fdf_errno) - PHP_FE(fdf_error, arginfo_fdf_error) - PHP_FE(fdf_get_ap, arginfo_fdf_get_ap) - PHP_FE(fdf_get_encoding, arginfo_fdf_get_encoding) - PHP_FE(fdf_get_file, arginfo_fdf_get_file) - PHP_FE(fdf_get_flags, arginfo_fdf_get_flags) - PHP_FE(fdf_get_opt, arginfo_fdf_get_opt) - PHP_FE(fdf_get_status, arginfo_fdf_get_status) - PHP_FE(fdf_get_value, arginfo_fdf_get_value) - PHP_FE(fdf_get_version, arginfo_fdf_get_version) - PHP_FE(fdf_next_field_name, arginfo_fdf_next_field_name) - PHP_FE(fdf_open, arginfo_fdf_open) - PHP_FE(fdf_open_string, arginfo_fdf_open_string) - PHP_FE(fdf_remove_item, arginfo_fdf_remove_item) - PHP_FE(fdf_save, arginfo_fdf_save) - PHP_FE(fdf_save_string, arginfo_fdf_save_string) - PHP_FE(fdf_set_ap, arginfo_fdf_set_ap) - PHP_FE(fdf_set_encoding, arginfo_fdf_set_encoding) - PHP_FE(fdf_set_file, arginfo_fdf_set_file) - PHP_FE(fdf_set_flags, arginfo_fdf_set_flags) - PHP_FE(fdf_set_javascript_action, arginfo_fdf_set_javascript_action) - PHP_FE(fdf_set_opt, arginfo_fdf_set_opt) - PHP_FE(fdf_set_status, arginfo_fdf_set_status) - PHP_FE(fdf_set_submit_form_action, arginfo_fdf_set_submit_form_action) - PHP_FE(fdf_set_value, arginfo_fdf_set_value) - PHP_FE(fdf_header, arginfo_fdf_header) -#ifdef HAVE_FDFTK_5 - PHP_FE(fdf_add_doc_javascript, arginfo_fdf_add_doc_javascript) - PHP_FE(fdf_get_attachment, arginfo_fdf_get_attachment) - PHP_FE(fdf_set_on_import_javascript, arginfo_fdf_set_on_import_javascript) - PHP_FE(fdf_set_target_frame, arginfo_fdf_set_target_frame) - PHP_FE(fdf_set_version, arginfo_fdf_set_version) -#endif - {NULL, NULL, NULL} -}; -/* }}} */ - -ZEND_DECLARE_MODULE_GLOBALS(fdf) -static PHP_GINIT_FUNCTION(fdf); - -zend_module_entry fdf_module_entry = { - STANDARD_MODULE_HEADER, - "fdf", - fdf_functions, - PHP_MINIT(fdf), - PHP_MSHUTDOWN(fdf), - PHP_RINIT(fdf), - NULL, - PHP_MINFO(fdf), - NO_VERSION_YET, - PHP_MODULE_GLOBALS(fdf), - PHP_GINIT(fdf), - NULL, - NULL, - STANDARD_MODULE_PROPERTIES_EX -}; - -#ifdef COMPILE_DL_FDF -ZEND_GET_MODULE(fdf) -#endif - -#define FDF_SUCCESS do { FDF_G(error)=FDFErcOK; RETURN_TRUE;} while(0) -#define FDF_FAILURE(err) do { FDF_G(error)=err; RETURN_FALSE;} while(0) - -static void phpi_FDFClose(zend_rsrc_list_entry *rsrc TSRMLS_DC) -{ - FDFDoc fdf = (FDFDoc)rsrc->ptr; - - (void) FDFClose(fdf); -} - -#define FDF_POST_CONTENT_TYPE "application/vnd.fdf" - -static sapi_post_entry php_fdf_post_entry = { - FDF_POST_CONTENT_TYPE, - sizeof(FDF_POST_CONTENT_TYPE)-1, - sapi_read_standard_form_data, - fdf_post_handler -}; - -static PHP_GINIT_FUNCTION(fdf) -{ - memset(fdf_globals, 0, sizeof(*fdf_globals)); -} - - - -/* {{{ PHP_MINIT_FUNCTION - */ -PHP_MINIT_FUNCTION(fdf) -{ - le_fdf = zend_register_list_destructors_ex(phpi_FDFClose, NULL, "fdf", module_number); - - /* add handler for Acrobat FDF form post requests */ - sapi_register_post_entry(&php_fdf_post_entry TSRMLS_CC); - - - /* Constants used by fdf_set_opt() */ - REGISTER_LONG_CONSTANT("FDFValue", FDFValue, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFStatus", FDFStatus, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFFile", FDFFile, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFID", FDFID, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFFf", FDFFf, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFSetFf", FDFSetFf, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFClearFf", FDFClearFf, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFFlags", FDFFlags, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFSetF", FDFSetF, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFClrF", FDFClrF, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFAP", FDFAP, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFAS", FDFAS, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFAction", FDFAction, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFAA", FDFAA, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFAPRef", FDFAPRef, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFIF", FDFIF, CONST_CS | CONST_PERSISTENT); - - /* Constants used by fdf_set_javascript_action() */ - REGISTER_LONG_CONSTANT("FDFEnter", FDFEnter, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFExit", FDFExit, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFDown", FDFDown, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFUp", FDFUp, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFFormat", FDFFormat, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFValidate", FDFValidate, CONST_CS | CONST_PERSISTENT); - - REGISTER_LONG_CONSTANT("FDFKeystroke", FDFKeystroke, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFCalculate", FDFCalculate, CONST_CS | CONST_PERSISTENT); - - /* Constants used by fdf_(set|get)_ap */ - REGISTER_LONG_CONSTANT("FDFNormalAP", 1, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFRolloverAP", 2, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("FDFDownAP", 3, CONST_CS | CONST_PERSISTENT); - -#ifdef PHP_WIN32 - return SUCCESS; -#else - return (FDFInitialize() == FDFErcOK) ? SUCCESS : FAILURE; -#endif -} -/* }}} */ - -/* {{{ RINIT */ -PHP_RINIT_FUNCTION(fdf) -{ - FDF_G(error) = FDFErcOK; - return SUCCESS; -} -/* }}} */ - -/* {{{ PHP_MINFO_FUNCTION - */ -PHP_MINFO_FUNCTION(fdf) -{ - /* need to use a PHPAPI function here because it is external module in windows */ - php_info_print_table_start(); - php_info_print_table_row(2, "FDF Support", "enabled"); - php_info_print_table_row(2, "FdfTk Version", FDFGetVersion() ); - php_info_print_table_end(); -} -/* }}} */ - -/* {{{ PHP_MSHUTDOWN_FUNCTION - */ -PHP_MSHUTDOWN_FUNCTION(fdf) -{ - /* remove handler for Acrobat FDF form post requests */ - sapi_unregister_post_entry(&php_fdf_post_entry TSRMLS_CC); - -#ifdef PHP_WIN32 - return SUCCESS; -#else - return (FDFFinalize() == FDFErcOK) ? SUCCESS : FAILURE; -#endif -} -/* }}} */ - -/* {{{ proto resource fdf_open(string filename) - Opens a new FDF document */ -PHP_FUNCTION(fdf_open) -{ - zval **file; - FDFDoc fdf; - FDFErc err; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &file) == FAILURE) { - WRONG_PARAM_COUNT; - } - - convert_to_string_ex(file); - - if (php_check_open_basedir(Z_STRVAL_PP(file) TSRMLS_CC)) { - RETURN_FALSE; - } - - err = FDFOpen(Z_STRVAL_PP(file), 0, &fdf); - - if(err != FDFErcOK || !fdf) { - if(err == FDFErcOK) err= FDFErcInternalError; - FDF_FAILURE(err); - } - - ZEND_REGISTER_RESOURCE(return_value, fdf, le_fdf); -} -/* }}} */ - -/* {{{ proto resource fdf_open_string(string fdf_data) - Opens a new FDF document from string */ -PHP_FUNCTION(fdf_open_string) -{ - char *fdf_data; - int fdf_data_len; - FDFDoc fdf; - FDFErc err; - char *temp_filename; - FILE *fp; - - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", - &fdf_data, &fdf_data_len) - == FAILURE) { - return; - } - - fp = php_open_temporary_file(PG(upload_tmp_dir), "php", &temp_filename TSRMLS_CC); - if(!fp) { - RETURN_FALSE; - } - fwrite(fdf_data, fdf_data_len, 1, fp); - fclose(fp); - - err = FDFOpen(temp_filename, 0, &fdf); - unlink(temp_filename); - efree(temp_filename); - - if(err != FDFErcOK || !fdf) { - if(err == FDFErcOK) err= FDFErcInternalError; - FDF_FAILURE(err); - } - - ZEND_REGISTER_RESOURCE(return_value, fdf, le_fdf); -} -/* }}} */ - -/* {{{ proto resource fdf_create(void) - Creates a new FDF document */ -PHP_FUNCTION(fdf_create) -{ - FDFDoc fdf; - FDFErc err; - - if (ZEND_NUM_ARGS() != 0) { - WRONG_PARAM_COUNT; - } - - err = FDFCreate(&fdf); - - if(err != FDFErcOK || !fdf) { - if(err == FDFErcOK) err= FDFErcInternalError; - FDF_FAILURE(err); - } - - ZEND_REGISTER_RESOURCE(return_value, fdf, le_fdf); -} -/* }}} */ - -/* {{{ proto void fdf_close(resource fdfdoc) - Closes the FDF document */ -PHP_FUNCTION(fdf_close) -{ - zval **fdfp; - FDFDoc fdf; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fdfp) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); - zend_list_delete(Z_RESVAL_PP(fdfp)); -} -/* }}} */ - -/* {{{ proto string fdf_get_value(resource fdfdoc, string fieldname [, int which]) - Gets the value of a field as string */ -PHP_FUNCTION(fdf_get_value) -{ - zval *r_fdf; - char *fieldname; - int fieldname_len; - long which = -1; - FDFDoc fdf; - FDFErc err; - ASInt32 nr, size = 256; - char *buffer; - - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l", - &r_fdf, &fieldname, &fieldname_len, - &which) - == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); - - buffer = emalloc(size); - if(which >= 0) { -#if HAVE_FDFTK_5 - err = FDFGetNthValue(fdf, fieldname, which, buffer, size-2, &nr); -#else - php_error_docref(NULL TSRMLS_CC, E_WARNING, "the optional 'which' parameter requires FDF toolkit 5.0 or above, it will be ignored for now"); - which = -1; -#endif - } else { - err = FDFGetValue(fdf, fieldname, buffer, size-2, &nr); - } - if(err == FDFErcBufTooShort && nr > 0 ) { - buffer = erealloc(buffer, nr+2); - if(which >= 0) { -#if HAVE_FDFTK_5 - err = FDFGetNthValue(fdf, fieldname, which, buffer, nr, &nr); -#endif - } else { - err = FDFGetValue(fdf, fieldname, buffer, nr, &nr); - } -#if HAVE_FDFTK_5 - } else if((err == FDFErcValueIsArray) && (which == -1)) { - array_init(return_value); - which = 0; - do { - err = FDFGetNthValue(fdf, fieldname, which, buffer, size-2, &nr); - if(err == FDFErcBufTooShort && nr > 0 ) { - buffer = erealloc(buffer, nr+2); - err = FDFGetNthValue(fdf, fieldname, which, buffer, nr, &nr); - } - if (err == FDFErcOK) { - add_next_index_string(return_value, buffer, 1); - } - which++; - } while (err == FDFErcOK); - efree(buffer); - buffer = NULL; -#endif - } - - if((err != FDFErcOK) && (err != FDFErcNoValue)) { - if(buffer) efree(buffer); - FDF_FAILURE(err); - } - - if(buffer) { - RETVAL_STRING(buffer, 1); - efree(buffer); - } - - return; -} -/* }}} */ - -/* {{{ proto bool fdf_set_value(resource fdfdoc, string fieldname, mixed value [, int isname]) - Sets the value of a field */ -PHP_FUNCTION(fdf_set_value) -{ - zval **fdfp, **fieldname, **value, **dummy; - FDFDoc fdf; - FDFErc err; - - switch(ZEND_NUM_ARGS()) { - case 3: - if (zend_get_parameters_ex(3, &fdfp, &fieldname, &value) == FAILURE) { - WRONG_PARAM_COUNT; - } - break; - case 4: - if (zend_get_parameters_ex(4, &fdfp, &fieldname, &value, &dummy) == FAILURE) { - WRONG_PARAM_COUNT; - } - break; - default: - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); - - convert_to_string_ex(fieldname); - - if (Z_TYPE_PP(value) == IS_ARRAY) { -#ifdef HAVE_FDFTK_5 - ASInt32 nValues = zend_hash_num_elements(Z_ARRVAL_PP(value)); - char **newValues = ecalloc(nValues, sizeof(char *)), **next; - HashPosition pos; - zval **tmp; - - next = newValues; - zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(value), &pos); - while (zend_hash_get_current_data_ex(Z_ARRVAL_PP(value), - (void **) &tmp, - &pos) == SUCCESS) { - convert_to_string_ex(tmp); - *next++ = estrdup(Z_STRVAL_PP(tmp)); - zend_hash_move_forward_ex(Z_ARRVAL_PP(value), &pos); - } - - err = FDFSetValues(fdf, Z_STRVAL_PP(fieldname), nValues, (const char **)newValues); - - for(next = newValues; nValues; nValues--) { - efree(*next++); - } - efree(newValues); -#else - php_error_docref(NULL TSRMLS_CC, E_WARNING, "setting array values is only possible with FDF toolkit 5.0 and above"); - RETURN_FALSE; -#endif - } else { - convert_to_string_ex(value); - - err = FDFSetValue(fdf, Z_STRVAL_PP(fieldname), Z_STRVAL_PP(value), (ASBool)0 /*dummy*/); - } - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - FDF_SUCCESS; -} -/* }}} */ - -/* {{{ proto string fdf_next_field_name(resource fdfdoc [, string fieldname]) - Gets the name of the next field name or the first field name */ -PHP_FUNCTION(fdf_next_field_name) -{ - zval **fdfp, **field; - int argc=ZEND_NUM_ARGS(); - ASInt32 length=256, nr; - char *buffer=NULL, *fieldname=NULL; - FDFDoc fdf; - FDFErc err; - - if (argc > 2 || argc < 1 || zend_get_parameters_ex(argc, &fdfp, &field) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); - - if(argc == 2) { - convert_to_string_ex(field); - fieldname = Z_STRVAL_PP(field); - } - - buffer = emalloc(length); - err = FDFNextFieldName(fdf, fieldname, buffer, length-1, &nr); - - if(err == FDFErcBufTooShort && nr > 0 ) { - buffer = erealloc(buffer, nr+1); - err = FDFNextFieldName(fdf, fieldname, buffer, length-1, &nr); - } - - if(err != FDFErcOK) { - efree(buffer); - FDF_FAILURE(err); - } - - RETVAL_STRING(buffer, 1); - efree(buffer); -} -/* }}} */ - -/* {{{ proto bool fdf_set_ap(resource fdfdoc, string fieldname, int face, string filename, int pagenr) - Sets the appearence of a field */ -PHP_FUNCTION(fdf_set_ap) -{ - zval **fdfp, **fieldname, **face, **filename, **pagenr; - FDFDoc fdf; - FDFErc err; - FDFAppFace facenr; - - if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &fieldname, &face, &filename, &pagenr) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); - - convert_to_string_ex(fieldname); - convert_to_long_ex(face); - convert_to_string_ex(filename); - - if (php_check_open_basedir(Z_STRVAL_PP(filename) TSRMLS_CC)) { - RETURN_FALSE; - } - - convert_to_long_ex(pagenr); - - switch(Z_LVAL_PP(face)) { - case 1: - facenr = FDFNormalAP; - break; - case 2: - facenr = FDFRolloverAP; - break; - case 3: - facenr = FDFDownAP; - break; - default: - facenr = FDFNormalAP; - break; - } - - err = FDFSetAP(fdf, Z_STRVAL_PP(fieldname), facenr, NULL, Z_STRVAL_PP(filename), (ASInt32) Z_LVAL_PP(pagenr)); - - /* This should be made more intelligent, ie. use switch() with the - possible errors this function can return. Or create global error handler function. - */ - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - - FDF_SUCCESS; - -} -/* }}} */ - -/* {{{ proto bool fdf_get_ap(resource fdfdoc, string fieldname, int face, string filename) - Gets the appearance of a field and creates a PDF document out of it. */ -PHP_FUNCTION(fdf_get_ap) { - zval *r_fdf; - char *fieldname, *filename; - int fieldname_len, filename_len; - long face; - FDFDoc fdf; - FDFErc err; - FDFAppFace facenr; - - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsls", - &r_fdf, &fieldname, &fieldname_len, - &face, &filename, &filename_len) - == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); - - if (php_check_open_basedir(filename TSRMLS_CC)) { - RETURN_FALSE; - } - - switch(face) { - case 1: - facenr = FDFNormalAP; - break; - case 2: - facenr = FDFRolloverAP; - break; - case 3: - facenr = FDFDownAP; - break; - default: - facenr = FDFNormalAP; - break; - } - - err = FDFGetAP(fdf, fieldname, facenr, filename); - - /* This should be made more intelligent, ie. use switch() with the - possible errors this function can return. Or create global error handler function. - */ - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - - FDF_SUCCESS; - - -} -/* }}} */ - -/* {{{ proto string fdf_get_encoding(resource fdf) - Gets FDF file encoding scheme */ -PHP_FUNCTION(fdf_get_encoding) { - zval *r_fdf; - FDFDoc fdf; - FDFErc err; - char buffer[32]; - ASInt32 len; - - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", - &r_fdf) == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); - - err = FDFGetEncoding(fdf, buffer, 32, &len); - - /* This should be made more intelligent, ie. use switch() with the - possible errors this function can return. Or create global error handler function. - */ - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - - FDF_G(error) = FDFErcOK; - RETURN_STRINGL(buffer, (size_t)len, 1); -} -/* }}} */ - -/* {{{ proto bool fdf_set_status(resource fdfdoc, string status) - Sets the value of /Status key */ -PHP_FUNCTION(fdf_set_status) -{ - zval **fdfp, **status; - FDFDoc fdf; - FDFErc err; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fdfp, &status) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); - - convert_to_string_ex(status); - - err = FDFSetStatus(fdf, Z_STRVAL_PP(status)); - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - - FDF_SUCCESS; -} -/* }}} */ - -/* {{{ proto string fdf_get_status(resource fdfdoc) - Gets the value of /Status key */ -PHP_FUNCTION(fdf_get_status) -{ - zval **fdfp; - ASInt32 nr, size = 256; - char *buf; - FDFDoc fdf; - FDFErc err; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fdfp) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); - - buf = emalloc(size); - err = FDFGetStatus(fdf, buf, size-1, &nr); - - if(err == FDFErcBufTooShort && nr > 0 ) { - buf = erealloc(buf, nr+1); - err = FDFGetStatus(fdf, buf, size-1, &nr); - } - - if(err != FDFErcOK) { - efree(buf); - FDF_FAILURE(err); - } - - RETVAL_STRING(buf, 1); - efree(buf); -} -/* }}} */ - -/* {{{ proto bool fdf_set_file(resource fdfdoc, string filename [, string target_frame]) - Sets the value of /F key */ -PHP_FUNCTION(fdf_set_file) -{ - zval *r_fdf; - char *filename, *target_frame= NULL; - int filename_len, target_frame_len; - FDFDoc fdf; - FDFErc err; - - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|s", &r_fdf, - &filename, &filename_len, - &target_frame, &target_frame_len) - == FAILURE) { - return; - } - - if (php_check_open_basedir(filename TSRMLS_CC)) { - RETURN_FALSE; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); - - err = FDFSetFile(fdf, filename); - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - if(target_frame) { -#ifdef HAVE_FDFTK_5 - err = FDFSetTargetFrame(fdf, target_frame); - if(err != FDFErcOK) { - FDF_FAILURE(err); - } -#else - php_error_docref(NULL TSRMLS_CC, E_WARNING, "setting the target frame is only possible with FDF toolkit 5.0 and above, ignoring it for now"); -#endif - } - - FDF_SUCCESS; -} -/* }}} */ - -/* {{{ proto string fdf_get_file(resource fdfdoc) - Gets the value of /F key */ -PHP_FUNCTION(fdf_get_file) -{ - zval **fdfp; - ASInt32 nr, size = 256; - char *buf; - FDFDoc fdf; - FDFErc err; - - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &fdfp) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); - - buf = emalloc(size); - err = FDFGetFile(fdf, buf, size-1, &nr); - - if(err == FDFErcBufTooShort && nr > 0 ) { - buf = erealloc(buf, nr+1); - err = FDFGetFile(fdf, buf, size-1, &nr); - } - - if(err != FDFErcOK) { - efree(buf); - FDF_FAILURE(err); - } - - RETVAL_STRING(buf, 1); - efree(buf); -} -/* }}} */ - -/* {{{ proto bool fdf_save(resource fdfdoc [, string filename]) - Writes out the FDF file */ -PHP_FUNCTION(fdf_save) -{ - zval *r_fdf; - char *filename = NULL; - int filename_len; - FDFDoc fdf; - FDFErc err; - - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|s", &r_fdf, &filename, &filename_len) - == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); - - if(filename) { - if (php_check_open_basedir(filename TSRMLS_CC)) { - RETURN_FALSE; - } - err = FDFSave(fdf, filename); - } else { - FILE *fp; - char *temp_filename; - - fp = php_open_temporary_file(PG(upload_tmp_dir), "php", &temp_filename TSRMLS_CC); - if(!fp) { - err = FDFErcFileSysErr; - } else { - fclose(fp); - err = FDFSave(fdf, temp_filename); - - if(err == FDFErcOK) { - php_stream *stream = php_stream_open_wrapper(temp_filename, "rb", 0, NULL); - if (stream) { - php_stream_passthru(stream); - php_stream_close(stream); - } else { - err = FDFErcFileSysErr; - } - } - } - if(temp_filename) { - unlink(temp_filename); - efree(temp_filename); - } - } - - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - - FDF_SUCCESS; -} -/* }}} */ - -/* {{{ proto string fdf_save_string(resource fdfdoc) - Returns the FDF file as a string */ -PHP_FUNCTION(fdf_save_string) -{ - zval *r_fdf; - FDFDoc fdf; - FDFErc err; - FILE *fp; - char *temp_filename = NULL; - - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &r_fdf) - == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); - - fp = php_open_temporary_file(PG(upload_tmp_dir), "php", &temp_filename TSRMLS_CC); - if(!fp) { - err = FDFErcFileSysErr; - } else { - fclose(fp); - err = FDFSave(fdf, temp_filename); - - if(err == FDFErcOK) { - fp = fopen(temp_filename, "rb"); - if (fp) { - struct stat stat; - char *buf; - - if (fstat(fileno(fp), &stat) == -1) { - RETVAL_FALSE; - goto err; - } - buf = emalloc(stat.st_size +1); - fread(buf, stat.st_size, 1, fp); - buf[stat.st_size] = '\0'; - fclose(fp); - - unlink(temp_filename); - efree(temp_filename); - RETURN_STRINGL(buf, stat.st_size, 0); - } else { - err = FDFErcFileSysErr; - } - } - } - - if(err != FDFErcOK) { - FDF_FAILURE(err); - } -err: - if(temp_filename) { - unlink(temp_filename); - efree(temp_filename); - } - - return; -} -/* }}} */ - -/* {{{ proto bool fdf_add_template(resource fdfdoc, int newpage, string filename, string template, int rename) - Adds a template into the FDF document */ -PHP_FUNCTION(fdf_add_template) -{ - zval **fdfp, **newpage, **filename, **template, **rename; - FDFDoc fdf; - FDFErc err; - pdfFileSpecRec filespec; - - if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &newpage, &filename, &template, &rename) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); - - convert_to_long_ex(newpage); - convert_to_string_ex(filename); - convert_to_string_ex(template); - convert_to_long_ex(rename); - - if (php_check_open_basedir(Z_STRVAL_PP(filename) TSRMLS_CC)) { - RETURN_FALSE; - } - - filespec.FS = NULL; - filespec.F = Z_STRVAL_PP(filename); - filespec.Mac = NULL; - filespec.DOS = NULL; - filespec.Unix = NULL; - filespec.ID[0] = NULL; - filespec.ID[1] = NULL; - filespec.bVolatile = false; - - err = FDFAddTemplate(fdf, (unsigned short)(Z_LVAL_PP(newpage)), &filespec, Z_STRVAL_PP(template), (unsigned short)(Z_LVAL_PP(rename))); - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - - FDF_SUCCESS; -} -/* }}} */ - -/* {{{ proto bool fdf_set_flags(resource fdfdoc, string fieldname, int whichflags, int newflags) - Sets flags for a field in the FDF document */ -PHP_FUNCTION(fdf_set_flags) -{ - zval **fdfp, **fieldname, **flags, **newflags; - FDFDoc fdf; - FDFErc err; - - if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &fdfp, &fieldname, &flags, &newflags) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); - - convert_to_string_ex(fieldname); - convert_to_long_ex(flags); - convert_to_long_ex(newflags); - - err=FDFSetFlags(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(flags), Z_LVAL_PP(newflags)); - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - - FDF_SUCCESS; -} -/* }}} */ - -/* {{{ proto int fdf_get_flags(resorce fdfdoc, string fieldname, int whichflags) - Gets the flags of a field */ -PHP_FUNCTION(fdf_get_flags) { - zval *r_fdf; - char *fieldname; - int fieldname_len; - long whichflags; - FDFDoc fdf; - FDFErc err; - ASUns32 flags; - - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsl", - &r_fdf, &fieldname, &fieldname_len, - &whichflags) - == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); - - err = FDFGetFlags(fdf, fieldname, (FDFItem)whichflags, &flags); - - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - - RETURN_LONG((long)flags); -} -/* }}} */ - -/* {{{ proto bool fdf_set_opt(resource fdfdoc, string fieldname, int element, string value, string name) - Sets a value in the opt array for a field */ -PHP_FUNCTION(fdf_set_opt) -{ - zval **fdfp, **fieldname, **element, **value, **name; - FDFDoc fdf; - FDFErc err; - - if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &fieldname, &element, &value, &name) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); - - convert_to_string_ex(fieldname); - convert_to_long_ex(element); - convert_to_string_ex(value); - convert_to_string_ex(name); - - err = FDFSetOpt(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(element), Z_STRVAL_PP(value), Z_STRVAL_PP(name)); - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - FDF_SUCCESS; -} -/* }}} */ - -/* {{{ proto mixed fdf_get_opt(resource fdfdof, string fieldname [, int element]) - Gets a value from the opt array of a field */ -PHP_FUNCTION(fdf_get_opt) { - zval *r_fdf; - char *fieldname; - int fieldname_len; - long element = -1; - FDFDoc fdf; - FDFErc err; - - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l", - &r_fdf, &fieldname, &fieldname_len, - &element) - == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); - - if(element == -1) { - ASInt32 elements; - err = FDFGetOpt(fdf, fieldname, (ASInt32)-1, NULL, NULL, 0, &elements); - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - RETURN_LONG((long)elements); - } else { - ASInt32 bufSize, nRet; - char *buf1, *buf2; - - bufSize = 1024; - buf1 = emalloc(bufSize); - buf2 = emalloc(bufSize); - - err = FDFGetOpt(fdf, fieldname, (ASInt32)element, buf1, buf2, bufSize, &nRet); - if(err == FDFErcBufTooShort) { - efree(buf1); - efree(buf2); - buf1 = emalloc(nRet); - buf2 = emalloc(nRet); - bufSize = nRet; - err = FDFGetOpt(fdf, fieldname, (ASInt32)element, buf1, buf2, bufSize, &nRet); - } - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - array_init(return_value); - add_next_index_stringl(return_value, buf1, strlen(buf1), 1); - add_next_index_stringl(return_value, buf2, strlen(buf2), 1); - efree(buf1); - efree(buf2); - } -} -/* }}} */ - -/* {{{ proto bool fdf_set_submit_form_action(resource fdfdoc, string fieldname, int whichtrigger, string url, int flags) - Sets the submit form action for a field */ -PHP_FUNCTION(fdf_set_submit_form_action) -{ - zval **fdfp, **fieldname, **trigger, **url, **flags; - FDFDoc fdf; - FDFErc err; - - if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &fdfp, &fieldname, &trigger, &url, &flags) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); - - convert_to_string_ex(fieldname); - convert_to_long_ex(trigger); - convert_to_string_ex(url); - convert_to_long_ex(flags); - - err = FDFSetSubmitFormAction(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(trigger), Z_STRVAL_PP(url), Z_LVAL_PP(flags)); - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - FDF_SUCCESS; -} -/* }}} */ - -/* {{{ proto bool fdf_set_javascript_action(resource fdfdoc, string fieldname, int whichtrigger, string script) - Sets the javascript action for a field */ -PHP_FUNCTION(fdf_set_javascript_action) -{ - zval **fdfp, **fieldname, **trigger, **script; - FDFDoc fdf; - FDFErc err; - - if (ZEND_NUM_ARGS() != 4 || zend_get_parameters_ex(4, &fdfp, &fieldname, &trigger, &script) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); - - convert_to_string_ex(fieldname); - convert_to_long_ex(trigger); - convert_to_string_ex(script); - - err = FDFSetJavaScriptAction(fdf, Z_STRVAL_PP(fieldname), Z_LVAL_PP(trigger), Z_STRVAL_PP(script)); - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - FDF_SUCCESS; -} -/* }}} */ - -/* {{{ proto bool fdf_set_encoding(resource fdf_document, string encoding) - Sets FDF encoding (either "Shift-JIS" or "Unicode") */ -PHP_FUNCTION(fdf_set_encoding) -{ - zval **fdfp, **enc; - FDFDoc fdf; - FDFErc err; - - if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &fdfp, &enc) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, fdfp, -1, "fdf", le_fdf); - - convert_to_string_ex(enc); - - err = FDFSetEncoding(fdf, Z_STRVAL_PP(enc)); - - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - FDF_SUCCESS; -} -/* }}} */ - -/* {{{ SAPI_POST_HANDLER_FUNC - * SAPI post handler for FDF forms */ -SAPI_POST_HANDLER_FUNC(fdf_post_handler) -{ - FILE *fp; - FDFDoc theFDF; - char *name=NULL, *value=NULL, *p, *data; - int name_len=0, value_len=0; - char *lastfieldname =NULL; - char *filename = NULL; - FDFErc err; - ASInt32 nBytes; - zval *array_ptr = (zval *) arg; - - fp=php_open_temporary_file(NULL, "fdfdata.", &filename TSRMLS_CC); - if(!fp) { - if(filename) efree(filename); - return; - } - fwrite(SG(request_info).post_data, SG(request_info).post_data_length, 1, fp); - fclose(fp); - - /* Set HTTP_FDF_DATA variable */ - data = estrndup(SG(request_info).post_data, SG(request_info).post_data_length); - SET_VAR_STRINGL("HTTP_FDF_DATA", data, SG(request_info).post_data_length); - - err = FDFOpen(filename, 0, &theFDF); - - if(err==FDFErcOK){ - name = emalloc(name_len=256); - value= emalloc(value_len=256); - while (1) { - err = FDFNextFieldName(theFDF, lastfieldname, name, name_len-1, &nBytes); - if(err == FDFErcBufTooShort && nBytes >0 ) { - name = erealloc(name, name_len=(nBytes+1)); - err = FDFNextFieldName(theFDF, lastfieldname, name, name_len-1, &nBytes); - } - - if(err != FDFErcOK || nBytes == 0) break; - - if(lastfieldname) efree(lastfieldname); - lastfieldname = estrdup(name); - - err = FDFGetValue(theFDF, name, NULL, 0, &nBytes); - if(err != FDFErcOK && err != FDFErcNoValue ) break; - - if(value_len0) { - err = FDFGetValue(theFDF, name, value, value_len-1, &nBytes); - if(err == FDFErcOK && nBytes != 0) { - unsigned int new_val_len; - - for(p=value;*p;p++) if(*p=='\r') *p='\n'; - if(lastfieldname) efree(lastfieldname); - lastfieldname = estrdup(name); - - if (sapi_module.input_filter(PARSE_POST, name, &value, nBytes, &new_val_len TSRMLS_CC)) { - php_register_variable_safe(name, value, new_val_len, array_ptr TSRMLS_CC); - } - } - } - } - FDFClose(theFDF); - - if(name) efree(name); - if(value) efree(value); - if(lastfieldname) efree(lastfieldname); - } - VCWD_UNLINK((const char *)filename); - efree(filename); -} -/* }}} */ - -/* {{{ proto int fdf_errno(void) - Gets error code for last operation */ -PHP_FUNCTION(fdf_errno) { - RETURN_LONG((long)FDF_G(error)); -} -/* }}} */ - -/* {{{ proto string fdf_error([int errno]) - Gets error description for error code */ -PHP_FUNCTION(fdf_error) { - FDFErc err; - long p_err = -1; - - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &p_err) - == FAILURE) { - return; - } - - err = (p_err >= 0) ? (FDFErc)p_err : FDF_G(error); - - switch(err) { - case FDFErcOK: - RETURN_STRING("no error", 1); - case FDFErcInternalError: - RETURN_STRING("An internal FDF Library error occurred", 1); - case FDFErcBadParameter: - RETURN_STRING("One or more of the parameters passed were invalid. ", 1); - case FDFErcFileSysErr: - RETURN_STRING("A file system error occurred or the file was not found", 1); - case FDFErcBadFDF: - RETURN_STRING("The FDF file being opened or parsed was invalid", 1); - case FDFErcFieldNotFound: - RETURN_STRING("The field whose name was passed in the parameter fieldName does not exist in the FDF file", 1); - case FDFErcNoValue: - RETURN_STRING("The field whose value was requested has no value", 1); - case FDFErcEnumStopped: - RETURN_STRING("Enumeration was stopped by FDFEnumValues by returning FALSE", 1); - case FDFErcCantInsertField: - RETURN_STRING("The field whose name was passed in the parameter fieldName cannot be inserted into the FDF file", 1); - case FDFErcNoOption: - RETURN_STRING("The requested element in a fields /Opt key does not exist, or the field has no /Opt key. ", 1); - case FDFErcNoFlags: - RETURN_STRING("The field has no /F or /Ff keys", 1); - case FDFErcBadPDF: - RETURN_STRING("The PDF file passed as the parameter to FDFSetAP was invalid, or did not contain the requested page ", 1); - case FDFErcBufTooShort: - RETURN_STRING("The buffer passed as a parameter was too short", 1); - case FDFErcNoAP: - RETURN_STRING("The field has no /AP key", 1); - case FDFErcIncompatibleFDF: - RETURN_STRING("An attempt to mix classic and template-based FDF files was made", 1); -#ifdef HAVE_FDFTK_5 - case FDFErcNoAppendSaves: - RETURN_STRING("The FDF does not include a /Difference key", 1); - case FDFErcValueIsArray: - RETURN_STRING("The value of this field is an array. Use FDFGetNthValue. ", 1); - case FDFErcEmbeddedFDFs: - RETURN_STRING("The FDF you passed as a parameter is a container for one or more FDFs embedded within it. Use FDFOpenFromEmbedded to gain access to each embedded FDF", 1); - case FDFErcNoMoreFDFs: - RETURN_STRING("Returned by FDFOpenFromEmbedded when parameter iWhich >= the number of embedded FDFs (including the case when the passed FDF does not contain any embedded FDFs)", 1); - case FDFErcInvalidPassword: - RETURN_STRING("Returned by FDFOpenFromEmbedded when the embedded FDF is encrypted, and you did not provide the correct password", 1); -#endif - case FDFErcLast: - RETURN_STRING("Reserved for future use", 1); - default: - RETURN_STRING("unknown error", 1); - } -} -/* }}} */ - -/* {{{ proto string fdf_get_version([resource fdfdoc]) - Gets version number for FDF api or file */ -PHP_FUNCTION(fdf_get_version) { - zval *r_fdf = NULL; - - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &r_fdf) - == FAILURE) { - return; - } - - if(r_fdf) { -#if HAVE_FDFTK_5 - const char *fdf_version; - FDFDoc fdf; - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); - fdf_version = FDFGetFDFVersion(fdf); - RETURN_STRING((char *)fdf_version, 1); -#else - RETURN_STRING("1.2",1); -#endif - } else { - const char *api_version = FDFGetVersion(); - RETURN_STRING((char *)api_version, 1); - } -} -/* }}} */ - -#ifdef HAVE_FDFTK_5 -/* {{{ proto bool fdf_set_version(resourece fdfdoc, string version) - Sets FDF version for a file*/ -PHP_FUNCTION(fdf_set_version) { - zval *r_fdf; - char *version; - int version_len; - FDFDoc fdf; - FDFErc err; - - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &r_fdf, &version, &version_len) - == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); - - err = FDFSetFDFVersion(fdf, version); - - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - FDF_SUCCESS; -} -/* }}} */ - -/* {{{ proto bool fdf_add_doc_javascript(resource fdfdoc, string scriptname, string script) - Add javascript code to the fdf file */ -PHP_FUNCTION(fdf_add_doc_javascript) { - zval *r_fdf; - char *name, *script; - int name_len, script_len; - FDFDoc fdf; - FDFErc err; - - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &r_fdf, - &name, &name_len, - &script, &script_len - ) - == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); - - err = FDFAddDocJavaScript(fdf, name, script); - - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - FDF_SUCCESS; -} -/* }}} */ - -/* {{{ proto bool fdf_set_on_import_javascript(resource fdfdoc, string script, bool before_data_import) - Adds javascript code to be executed when Acrobat opens the FDF */ -PHP_FUNCTION(fdf_set_on_import_javascript) { - zval *r_fdf; - char *script; - int script_len; - zend_bool before; - FDFDoc fdf; - FDFErc err; - - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsb", &r_fdf, - &script, &script_len, &before - ) - == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); - - err = FDFSetOnImportJavaScript(fdf, script, before); - - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - FDF_SUCCESS; -} -/* }}} */ - -/* {{{ proto bool fdf_set_target_frame(resource fdfdoc, string target) - Sets target frame for form */ -PHP_FUNCTION(fdf_set_target_frame) { - zval *r_fdf; - char *target; - int target_len; - FDFDoc fdf; - FDFErc err; - - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &r_fdf, - &target, &target_len - ) - == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); - - err = FDFSetTargetFrame(fdf, target); - - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - FDF_SUCCESS; -} -/* }}} */ -#endif - -/* {{{ proto bool fdf_remove_item(resource fdfdoc, string fieldname, int item) - Sets target frame for form */ -PHP_FUNCTION(fdf_remove_item) { - zval *r_fdf; - char *fieldname; - int fieldname_len; - long item; - FDFDoc fdf; - FDFErc err; - - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsl", &r_fdf, - &fieldname, &fieldname_len, - &item - ) - == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); - - err = FDFRemoveItem(fdf, *fieldname ? fieldname : NULL, item); - - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - FDF_SUCCESS; -} -/* }}} */ - -#ifdef HAVE_FDFTK_5 -/* {{{ proto array fdf_get_attachment(resource fdfdoc, string fieldname, string savepath) - Get attached uploaded file */ -PHP_FUNCTION(fdf_get_attachment) { - zval *r_fdf; - char *fieldname, *savepath; - int fieldname_len, savepath_len; - int is_dir=0; - FDFDoc fdf; - FDFErc err; - char pathbuf[MAXPATHLEN], mimebuf[1024]; - struct stat statBuf; - - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &r_fdf, - &fieldname, &fieldname_len, - &savepath, &savepath_len - ) - == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); - - if (php_check_open_basedir(savepath TSRMLS_CC)) { - RETURN_FALSE; - } - - strlcpy(pathbuf, savepath, sizeof(pathbuf)); - - if(0 == stat(pathbuf, &statBuf)) { - is_dir = S_ISDIR(statBuf.st_mode); - } - - err = FDFExtractAttachment(fdf, fieldname, pathbuf, sizeof(pathbuf), is_dir, mimebuf, sizeof(mimebuf)); - - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - - array_init(return_value); - add_assoc_string(return_value, "path", pathbuf, 1); - add_assoc_string(return_value, "type", mimebuf, 1); - stat(pathbuf, &statBuf); - add_assoc_long(return_value, "size", statBuf.st_size); -} -/* }}} */ -#endif - -/* {{{ enum_values_callback */ -static ASBool enum_values_callback(char *name, char *value, void *userdata) -{ - zval *retval_ptr, *z_name, *z_value, **args[3]; - long retval = 0; - int numargs = 2; - TSRMLS_FETCH(); - - MAKE_STD_ZVAL(z_name); - ZVAL_STRING(z_name, name, 1); - args[0] = &z_name; - - if (*value) { /* simple value */ - MAKE_STD_ZVAL(z_value); - ZVAL_STRING(z_value, value, 1); - args[1] = &z_value; - } else { /* empty value *might* be an array */ - /* TODO: do it like fdf_get_value (or re-implement yourself?) */ - } - - if (userdata) { - args[2] = (zval **) userdata; - numargs++; - } - - if (call_user_function_ex(EG(function_table), - NULL, - FDF_G(enum_callback), - &retval_ptr, - numargs, args, - 0, NULL TSRMLS_CC) == SUCCESS - && retval_ptr) { - - convert_to_long_ex(&retval_ptr); - retval = Z_LVAL_P(retval_ptr); - zval_ptr_dtor(&retval_ptr); - } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "callback failed"); - } - - zval_ptr_dtor(&z_name); - zval_ptr_dtor(&z_value); - - return (ASBool)retval; -} -/* }}} */ - -/* {{{ proto bool fdf_enum_values(resource fdfdoc, callback function [, mixed userdata]) - Call a user defined function for each document value */ -PHP_FUNCTION(fdf_enum_values) { - zval *r_fdf; - zval *callback; - zval *userdata = NULL; - FDFDoc fdf; - FDFErc err; - zval name; - char namebuf[1024], valbuf[1024]; - - if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz|z", &r_fdf, - &callback, &userdata - ) - == FAILURE) { - return; - } - - ZEND_FETCH_RESOURCE(fdf, FDFDoc *, &r_fdf, -1, "fdf", le_fdf); - - if (!zend_is_callable(callback, 0, &name)) { - convert_to_string(&name); - php_error_docref1(NULL TSRMLS_CC, Z_STRVAL(name), E_WARNING, "Second argument is expected to be a valid callback"); - zval_dtor(&name); - RETURN_FALSE; - } - zval_dtor(&name); - FDF_G(enum_callback) = callback; - FDF_G(enum_fdf) = fdf; - - err = FDFEnumValues(fdf, enum_values_callback, - namebuf, sizeof(namebuf), - valbuf, sizeof(valbuf), - userdata ? &userdata : NULL, 0); - - if(err != FDFErcOK) { - FDF_FAILURE(err); - } - FDF_SUCCESS; -} -/* }}} */ - -/* {{{ proto void fdf_header(void) - Set FDF specific HTTP headers */ -PHP_FUNCTION(fdf_header) { - sapi_header_line ctr = {0}; - - ctr.line = "Content-type: application/vnd.fdf"; - ctr.line_len = strlen(ctr.line); - ctr.response_code = 200; - - sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC); -} -/* }}} */ - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 fdm=marker - * vim<600: sw=4 ts=4 - */ diff --git a/ext/fdf/fdf.dsp b/ext/fdf/fdf.dsp deleted file mode 100644 index 85b91ceac92df..0000000000000 --- a/ext/fdf/fdf.dsp +++ /dev/null @@ -1,114 +0,0 @@ -# Microsoft Developer Studio Project File - Name="fdf" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=fdf - Win32 Release_TS -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "fdf.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "fdf.mak" CFG="fdf - Win32 Release_TS" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "fdf - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "fdf - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "fdf - Win32 Release_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_TS" -# PROP BASE Intermediate_Dir "Release_TS" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_TS" -# PROP Intermediate_Dir "Release_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\..\TSRM" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FDF" /D ZTS=1 /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=0 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FDF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_FDFLIB=1 /D "HAVE_FDFTK_5" /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x406 /d "NDEBUG" -# ADD RSC /l 0x406 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386 -# ADD LINK32 php5ts.lib fdftk.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_fdf.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "fdf - Win32 Debug_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Debug_TS" -# PROP BASE Intermediate_Dir "Debug_TS" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Debug_TS" -# PROP Intermediate_Dir "Debug_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "mssql-70" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FDF" /D ZTS=1 /YX /FD /c -# ADD CPP /nologo /MDd /W3 /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "..\..\..\bindlib_w32" /I "..\..\TSRM" /I "..\..\main" /D ZEND_DEBUG=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL_FDF" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_FDFLIB=1 /D "HAVE_FDFTK_5" /FR /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x406 /d "NDEBUG" -# ADD RSC /l 0x406 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib /nologo /dll /machine:I386 -# ADD LINK32 php5ts_debug.lib fdftk.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /debug /machine:I386 /out:"..\..\Debug_TS/php_fdf.dll" /libpath:"..\..\Debug_TS" - -!ENDIF - -# Begin Target - -# Name "fdf - Win32 Release_TS" -# Name "fdf - Win32 Debug_TS" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\fdf.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\php_fdf.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/ext/fdf/package.xml b/ext/fdf/package.xml deleted file mode 100644 index b1f56f41a8d23..0000000000000 --- a/ext/fdf/package.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - fdf - PDF Form Data Format functions - - - steinm - Uwe Steinmann - steinm@php.net - lead - - - hholzgra - Hartmut Holzgraefe - hartmut@php.net - developer - - - -Forms Data Format (FDF) is a format for handling forms -within PDF documents. You should read the documentation -at http://partners.adobe.com/asn/acrobat/forms.jsp for -more information on what FDF is and how it is used in -general. - - PHP - - beta - 5.0rc1 - 2004-03-19 - -package.xml added to support installation using pear installer - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ext/fdf/php_fdf.h b/ext/fdf/php_fdf.h deleted file mode 100644 index 532ded3d191d7..0000000000000 --- a/ext/fdf/php_fdf.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Uwe Steinmann | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef PHP_FDF_H -#define PHP_FDF_H - -#if HAVE_FDFLIB -#ifdef PHP_WIN32 -#else -#define UNIX_DEV -#endif - -#if HAVE_FDFTK_H_LOWER -# include -#else -# include -#endif - -ZEND_BEGIN_MODULE_GLOBALS(fdf) - FDFErc error; - zval *enum_callback; - FDFDoc enum_fdf; -ZEND_END_MODULE_GLOBALS(fdf) - -#ifdef ZTS -#define FDF_G(v) TSRMG(fdf_globals_id, zend_fdf_globals *, v) -#else -#define FDF_G(v) (fdf_globals.v) -#endif - - -extern zend_module_entry fdf_module_entry; -#define fdf_module_ptr &fdf_module_entry - -PHP_MINIT_FUNCTION(fdf); -PHP_MSHUTDOWN_FUNCTION(fdf); -PHP_RINIT_FUNCTION(fdf); -PHP_MINFO_FUNCTION(fdf); - -PHP_FUNCTION(fdf_open); -PHP_FUNCTION(fdf_open_string); -PHP_FUNCTION(fdf_close); -PHP_FUNCTION(fdf_create); -PHP_FUNCTION(fdf_save); -PHP_FUNCTION(fdf_save_string); -PHP_FUNCTION(fdf_get_value); -PHP_FUNCTION(fdf_set_value); -PHP_FUNCTION(fdf_next_field_name); -PHP_FUNCTION(fdf_set_ap); -PHP_FUNCTION(fdf_get_ap); -PHP_FUNCTION(fdf_get_status); -PHP_FUNCTION(fdf_set_status); -PHP_FUNCTION(fdf_set_file); -PHP_FUNCTION(fdf_get_file); -PHP_FUNCTION(fdf_add_template); -PHP_FUNCTION(fdf_set_flags); -PHP_FUNCTION(fdf_get_flags); -PHP_FUNCTION(fdf_set_opt); -PHP_FUNCTION(fdf_get_opt); -PHP_FUNCTION(fdf_set_submit_form_action); -PHP_FUNCTION(fdf_set_javascript_action); -PHP_FUNCTION(fdf_add_doc_javascript); -PHP_FUNCTION(fdf_set_on_import_javascript); -PHP_FUNCTION(fdf_set_encoding); -PHP_FUNCTION(fdf_get_encoding); -PHP_FUNCTION(fdf_set_version); -PHP_FUNCTION(fdf_get_version); -PHP_FUNCTION(fdf_set_target_frame); -PHP_FUNCTION(fdf_errno); -PHP_FUNCTION(fdf_error); -PHP_FUNCTION(fdf_remove_item); -PHP_FUNCTION(fdf_get_attachment); -PHP_FUNCTION(fdf_enum_values); -PHP_FUNCTION(fdf_header); -#else -#define fdf_module_ptr NULL -#endif -#define phpext_fdf_ptr fdf_module_ptr -#endif /* PHP_FDF_H */ diff --git a/ext/fdf/tests/01-general.phpt b/ext/fdf/tests/01-general.phpt deleted file mode 100644 index 998da3d7297cd..0000000000000 --- a/ext/fdf/tests/01-general.phpt +++ /dev/null @@ -1,10 +0,0 @@ ---TEST-- -Adobe Form Data Format functions ---SKIPIF-- - ---FILE-- - ---EXPECT-- -OK \ No newline at end of file diff --git a/ext/fdf/tests/02-values.phpt b/ext/fdf/tests/02-values.phpt deleted file mode 100644 index 40c7df4a0ebcd..0000000000000 --- a/ext/fdf/tests/02-values.phpt +++ /dev/null @@ -1,19 +0,0 @@ ---TEST-- -FDF open/save and set/get values ---SKIPIF-- - ---FILE-- - ---EXPECT-- -foo: bar -bar: foo diff --git a/ext/fdf/tests/03-read-file.phpt b/ext/fdf/tests/03-read-file.phpt deleted file mode 100644 index a611142b3f123..0000000000000 --- a/ext/fdf/tests/03-read-file.phpt +++ /dev/null @@ -1,15 +0,0 @@ ---TEST-- -FDF read file ---SKIPIF-- - ---FILE-- - ---EXPECT-- -foo: bar -bar: foo diff --git a/ext/fdf/tests/04-POST.phpt b/ext/fdf/tests/04-POST.phpt deleted file mode 100644 index 1d8c9de48f1d5..0000000000000 --- a/ext/fdf/tests/04-POST.phpt +++ /dev/null @@ -1,40 +0,0 @@ ---TEST-- -FDF POST data parsing ---SKIPIF-- - ---HEADERS-- -return <<> ] /ID [ <3c0e51bf6427b09f7faa482297af6957><5f9787a1646a3bfe44b7725c9c1284df> -] >> ->> -endobj -trailer -<< -/Root 1 0 R - ->> -%%EOF ---FILE-- - $value) { - echo "$key => $value\n"; -} -?> ---EXPECT-- -209 -status: Thanks George \ No newline at end of file diff --git a/ext/fdf/tests/simple.fdf b/ext/fdf/tests/simple.fdf deleted file mode 100644 index 21d3fbd55af30..0000000000000 --- a/ext/fdf/tests/simple.fdf +++ /dev/null @@ -1,18 +0,0 @@ -%FDF-1.2 -%âãÏÓ -1 0 obj -<< -/FDF << /Fields 2 0 R >> ->> -endobj -2 0 obj -[ -<< /T (foo)/V (bar)>> << /T (bar)/V (foo)>> -] -endobj -trailer -<< -/Root 1 0 R - ->> -%%EOF diff --git a/ext/fileinfo/config.m4 b/ext/fileinfo/config.m4 index 686f6e2780251..f1c15c006bd07 100644 --- a/ext/fileinfo/config.m4 +++ b/ext/fileinfo/config.m4 @@ -47,18 +47,13 @@ if test "$PHP_FILEINFO" != "no"; then -L$FILEINFO_DIR/lib ]) - MAGIC_MIME_DIRS="/usr/local/share/file /usr/share/file /usr/share/misc/file /etc /usr/share/misc" - MAGIC_MIME_FILENAMES="magic magic.mime" - - for i in $MAGIC_MIME_DIRS; do - for j in $MAGIC_MIME_FILENAMES; do - if test -f "$i/$j"; then - PHP_DEFAULT_MAGIC_FILE="$i/$j" - break - fi - done + MAGIC_MIME_LOCATIONS="/usr/local/share/file/magic /usr/share/file/magic /usr/share/misc/file/magic /etc/magic /usr/share/misc" + for i in $MAGIC_MIME_LOCATIONS; do + if test -f $i; then + PHP_DEFAULT_MAGIC_FILE=$i + break + fi done - AC_DEFINE_UNQUOTED(PHP_DEFAULT_MAGIC_FILE,"$PHP_DEFAULT_MAGIC_FILE",[magic file path]) PHP_SUBST(FILEINFO_SHARED_LIBADD) diff --git a/ext/fileinfo/fileinfo.c b/ext/fileinfo/fileinfo.c index 975b9c5349aa2..4d3b754a46063 100644 --- a/ext/fileinfo/fileinfo.c +++ b/ext/fileinfo/fileinfo.c @@ -103,12 +103,7 @@ PHP_FILEINFO_API zend_object_value finfo_objects_new(zend_class_entry *class_typ intern = ecalloc(1, sizeof(struct finfo_object)); intern->zo.ce = class_type; intern->zo.properties = NULL; -#if ZEND_MODULE_API_NO >= 20050922 - intern->zo.guards = NULL; -#else - intern->zo.in_get = 0; - intern->zo.in_set = 0; -#endif + intern->std.guards = NULL; intern->ptr = NULL; retval.handle = zend_objects_store_put(intern, finfo_objects_dtor, NULL, NULL TSRMLS_CC); @@ -121,17 +116,10 @@ PHP_FILEINFO_API zend_object_value finfo_objects_new(zend_class_entry *class_typ /* {{{ finfo_class_functions */ function_entry finfo_class_functions[] = { -#if PHP_VERSION_ID >= 50200 - ZEND_ME_MAPPING(finfo, finfo_open, NULL, ZEND_ACC_PUBLIC) - ZEND_ME_MAPPING(set_flags, finfo_set_flags,NULL, ZEND_ACC_PUBLIC) - ZEND_ME_MAPPING(file, finfo_file, NULL, ZEND_ACC_PUBLIC) - ZEND_ME_MAPPING(buffer, finfo_buffer, NULL, ZEND_ACC_PUBLIC) -#else - ZEND_ME_MAPPING(finfo, finfo_open, NULL) - ZEND_ME_MAPPING(set_flags, finfo_set_flags,NULL) - ZEND_ME_MAPPING(file, finfo_file, NULL) - ZEND_ME_MAPPING(buffer, finfo_buffer, NULL) -#endif + ZEND_ME_MAPPING(finfo, finfo_open, NULL) + ZEND_ME_MAPPING(set_flags, finfo_set_flags,NULL) + ZEND_ME_MAPPING(file, finfo_file, NULL) + ZEND_ME_MAPPING(buffer, finfo_buffer, NULL) {NULL, NULL, NULL} }; /* }}} */ @@ -200,12 +188,8 @@ PHP_MINIT_FUNCTION(finfo) REGISTER_LONG_CONSTANT("FILEINFO_COMPRESS", MAGIC_COMPRESS, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FILEINFO_DEVICES", MAGIC_DEVICES, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FILEINFO_CONTINUE", MAGIC_CONTINUE, CONST_CS|CONST_PERSISTENT); -#ifdef MAGIC_PRESERVE_ATIME REGISTER_LONG_CONSTANT("FILEINFO_PRESERVE_ATIME", MAGIC_PRESERVE_ATIME, CONST_CS|CONST_PERSISTENT); -#endif -#ifdef MAGIC_RAW REGISTER_LONG_CONSTANT("FILEINFO_RAW", MAGIC_RAW, CONST_CS|CONST_PERSISTENT); -#endif return SUCCESS; } diff --git a/ext/fileinfo/package.xml b/ext/fileinfo/package.xml index a274e47161a53..48711ed4f9bd9 100644 --- a/ext/fileinfo/package.xml +++ b/ext/fileinfo/package.xml @@ -21,11 +21,10 @@ file and for text files proper language encoding. PHP stable - 1.0.4 - 2006-11-07 + 1.0.1 + 2005-11-24 - 1) Fixed detection of magic files - 2) Fixed build problems with older version of libmagic + 1) PHP 5.1.0 Compatibility diff --git a/ext/filter/CREDITS b/ext/filter/CREDITS deleted file mode 100644 index 8d75401f779b5..0000000000000 --- a/ext/filter/CREDITS +++ /dev/null @@ -1,2 +0,0 @@ -Input Filter -Rasmus Lerdorf, Derick Rethans, Pierre-Alain Joye, Ilia Alshanetsky diff --git a/ext/filter/callback_filter.c b/ext/filter/callback_filter.c deleted file mode 100644 index d2031d18534c7..0000000000000 --- a/ext/filter/callback_filter.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Derick Rethans | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#include "php_filter.h" - -void php_filter_callback(PHP_INPUT_FILTER_PARAM_DECL) -{ - zval *retval_ptr; - zval ***args; - int status; - - if (!option_array || !zend_is_callable(option_array, IS_CALLABLE_CHECK_NO_ACCESS, NULL)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "First argument is expected to be a valid callback"); - zval_dtor(value); - Z_TYPE_P(value) = IS_NULL; - return; - } - - args = safe_emalloc(sizeof(zval **), 1, 0); - args[0] = &value; - - status = call_user_function_ex(EG(function_table), NULL, option_array, &retval_ptr, 1, args, 0, NULL TSRMLS_CC); - - if (status == SUCCESS && retval_ptr != NULL) { - if (retval_ptr != value) { - zval_dtor(value); - COPY_PZVAL_TO_ZVAL(*value, retval_ptr); - } else { - zval_ptr_dtor(&retval_ptr); - } - } else { - zval_dtor(value); - Z_TYPE_P(value) = IS_NULL; - } - - efree(args); -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: noet sw=4 ts=4 fdm=marker - * vim<600: noet sw=4 ts=4 - */ diff --git a/ext/filter/config.m4 b/ext/filter/config.m4 deleted file mode 100644 index b4e32a21a474a..0000000000000 --- a/ext/filter/config.m4 +++ /dev/null @@ -1,47 +0,0 @@ -dnl $Id$ -dnl config.m4 for input filtering extension - -PHP_ARG_ENABLE(filter, whether to enable input filter support, -[ --disable-filter Disable input filter support], yes) - -PHP_ARG_WITH(pcre-dir, pcre install prefix, -[ --with-pcre-dir FILTER: pcre install prefix], no, no) - -if test "$PHP_FILTER" != "no"; then - - dnl Check if configure is the PHP core configure - if test -n "$PHP_VERSION"; then - dnl This extension can not be build as shared when in PHP core - ext_shared=no - else - dnl This is PECL build, check if bundled PCRE library is used - old_CPPFLAGS=$CPPFLAGS - CPPFLAGS=$INCLUDES - AC_EGREP_CPP(yes,[ -#include
-#if defined(HAVE_BUNDLED_PCRE) && !defined(COMPILE_DL_PCRE) -yes -#endif - ],[ - PHP_PCRE_REGEX=yes - ],[ - AC_EGREP_CPP(yes,[ -#include
-#if defined(HAVE_PCRE) && !defined(COMPILE_DL_PCRE) -yes -#endif - ],[ - PHP_PCRE_REGEX=pecl - ],[ - PHP_PCRE_REGEX=no - ]) - ]) - CPPFLAGS=$old_CPPFLAGS - fi - - PHP_NEW_EXTENSION(filter, filter.c sanitizing_filters.c logical_filters.c callback_filter.c, $ext_shared) - PHP_SUBST(FILTER_SHARED_LIBADD) - - PHP_INSTALL_HEADERS([ext/filter/php_filter.h]) - PHP_ADD_EXTENSION_DEP(filter, pcre) -fi diff --git a/ext/filter/config.w32 b/ext/filter/config.w32 deleted file mode 100644 index 083555a4c77a7..0000000000000 --- a/ext/filter/config.w32 +++ /dev/null @@ -1,8 +0,0 @@ -// $Id$ -// vim:ft=javascript - -ARG_ENABLE("filter", "Filter Support", "yes"); - -if (PHP_FILTER == "yes") { - EXTENSION("filter", "filter.c sanitizing_filters.c logical_filters.c callback_filter.c"); -} diff --git a/ext/filter/docs/filter.txt b/ext/filter/docs/filter.txt deleted file mode 100644 index 48aae0c8d5b0b..0000000000000 --- a/ext/filter/docs/filter.txt +++ /dev/null @@ -1,331 +0,0 @@ -Input Filter Extension -~~~~~~~~~~~~~~~~~~~~~~ - -Introduction -============ -We all know that you should always check input variables, but PHP does not -offer really good functionality for doing this in a safe way. The Input Filter -extension is meant to address this issue by implementing a set of filters and -mechanisms that users can use to safely access their input data. - - -Change Log -========== -2005-10-27 - * Updated filter_data prototype - * Added filter constants - * Fixed minor problems - * Changes by David Tulloh - -2005-10-05 - * Changed "input_filter.paranoid_admin_default_filter" to - "filter.default". - * Updated API prototypes to reflect implementation. - * Added 'on' and 'off' to the boolean filter. - * Removed min_range and max_range flags from the float filter. - * Added validate_url, validate_email and validate_ip filters. - * Updated allows flags for all filters. - -2005-08-15 - * Unmade *source* a bitmask, it doesn't make sense to do. - * Changed return value of filters which got invalid data from 'false' to - 'null. - * Failed filters do not throw an E_NOTICE any longer. - * Added a magic_quotes sanitizing filter. - - -General Considerations -====================== -* If the filter's expected input data mask does not match the provided data - for logical filters the filter function returns "false". If the data was - not found, "null" is returned. -* Character filters always return a string. -* With the input filter extension enabled, and the - input_filter.paranoid_admin_default_filter is set to something != 'raw', - then all entries in the affected super globals will be passed through the - configured filter. The 'callback' filter can not be used here, as that - requieres a PHP script to be running already. -* As the input filter acts on input data before the magic quotes function - mangles data, all access through the filter() function will not have any - quotes or slashes added - it will be the pure data as send by the browser. -* All flags mentioned here should be prepended with `FILTER_FLAG_` when used - with PHP. - - -API -=== -mixed *input_get* (int *source*, string *name*, [, int *filter* [, mixed *filter_options*, [ string *characterset* ] ]); - Returns the filtered variable *$name* from source *$source*. It uses the - filter as specified in *$filter* with a constant, and additional options - to the filter through *$filter_options*. - -mixed *input_get_args* (array *definitions*, int *source*, [, array *data*]); - Returns an array with all filtered variables defined in 'definition'. - The keys are used as the name of the argument. The value can be either - an integer (flags) or an array of options. This array can contain - the 'filter' type, the 'flags', the 'otptions' or the 'charset' - -bool *input_has_variable (int *source*, string *name*); - Returns *true* if the variable with the name *name* exists in *source*, or - *false* otherwise. - -array *input_filters_list* (); - Returns a list with all supported filter names. - -mixed *filter_data* (mixed *variable*, int *filter* [, mixed *filter_options*, [ string *characterset* ] ]); - Filters the user supplied variable *$variable* in the same manner as - *input_get*. - -*$source*: - -* INPUT_POST 0 -* INPUT_GET 1 -* INPUT_COOKIE 2 -* INPUT_ENV 4 -* INPUT_SERVER 5 (not implemented yet) -* INPUT_SESSION 6 (not implemented yet) - - -General flags -============= - -* FILTER_FLAG_SCALAR -* FILTER_FLAG_ARRAY - -These two constants define whether to allow arrays in the source values. The -default value is SCALAR for input_get_args and ARRAY for the other functions -(< 0.9.5). These constants also insure that the function returns the correct -type, if you ask for an array, you will get an array even if the source is -only one value. However, if you ask for a scalar and the source is an array, -the result will be FALSE (invalid). - - -Logical Filters -=============== - -These filters check whether passed data was valid, and do never mangle input -variables, but ofcourse they can deny the whole input variable getting to the -application by returning false. - -The constants should be prepended by `FILTER_VALIDATE_` when used with php. - -================ ========== =========== ================================================== -Name Constant Return Type Description -================ ========== =========== ================================================== -int INT integer Returns the input variable as an integer - - $filter_options - an array with the optional - elements: - - * min_range: Minimal number that is allowed - (inclusive) - * max_range: Maximum number that is allowed - (inclusive) - * flags: A bitmask supporting the following flags: - - - ALLOW_OCTAL: allow octal numbers with the format - 0nn as input too. - - ALLOW_HEX: allow hexadecimal numbers with the - format 0xnn or 0Xnn too. - -boolean BOOLEAN boolean Returns *true* for '1', 'on' and 'true' and *false* - for '0', 'off' and 'false' - -float FLOAT float Returns the input variable as a floating point value - -validate_regexp REGEXP string Matches the input value as a string against the - regular expression. If there is a match then the - string is returned, otherwise the filter returns - *null*. - Remarks: Only available if pcre has been compiled - into PHP. - -validate_url URL string Validates an URL's format. - - $filter_options - an bitmask that supports the - following flags: - - * SCHEME_REQUIRED: The 'schema' part of the URL - needs to in the passed URL. - * HOST_REQUIRED: The 'host' part of the URL - needs to in the passed URL. - * PATH_REQUIRED: The 'path' part of the URL - needs to in the passed URL. - * QUERY_REQUIRED: The 'query' part of the URL - needs to in the passed URL. - -validate_email EMAIL string Validates the passed string against a reasonably - good regular expression for validating an email - address. - -validate_ip IP string Validates a string representing an IP address. - - $filter_options - an bitmask that supports the - following flags: - - * IPV4: Allows IPv4 addresses. - * IPV6: Allows IPv6 addresses. - * NO_RES_RANGE: Disallows addresses in reversed - ranges (IPv4 only) - * NO_PRIV_RANGE: Disallows addresses in private - ranges (IPv4 only) -================ ========== =========== ================================================== - - -Sanitizing Filters -================== - -These filters remove data, or change data depending on the filter, and the -set rules for this specific filter. Instead of taking an *options* array, they -use this parameter for flags for the specific filter. - -The constants should be prepended by `FILTER_SANITIZE_` when used with php. - -============= ================ =========== ===================================================== -Name Constant Return Type Description -============= ================ =========== ===================================================== -string STRING string Returns the input variable as a string after it has - been stripped of XML/HTML tags and other evil things - that can cause XSS problems. - - $filter_options - an bitmask that supports the - following flags: - - * NO_ENCODE_QUOTES: Prevents single and double - quotes from being encoded as numerical HTML - entities. - * STRIP_LOW: excludes all characters < 0x20 from the - allowed character list - * STRIP_HIGH: excludes all characters >= 0x80 from - the allowed character list - * ENCODE_LOW: allows characters < 0x20 but encodes - them as numerical HTML entities - * ENCODE_HIGH: allows characters >= 0x80 but encodes - them as numerical HTML entities - * ENCODE_AMP: encodes & as & - - The flags STRIP_LOW and ENCODE_LOW are mutual - exclusive, and so are STRIP_HIGH and ENCODE_HIGH. In - the case they clash, the characters will be - stripped. - -stripped STRIPPED string Alias for 'string'. - -encoded ENCODED string Encodes all characters outside the range - "a-zA-Z0-9-._" as URL encoded values. - - $filter_options - an bitmask that supports the - following flags: - - * STRIP_LOW: excludes all characters < 0x20 from the - allowed character list - * STRIP_HIGH: excludes all characters >= 0x80 from - the allowed character list - * ENCODE_LOW: allows characters < 0x20 but encodes - them as numerical HTML entities - * ENCODE_HIGH: allows characters >= 0x80 but encodes - them as numerical HTML entities - -special_chars SPECIAL_CHARS string Encodes the 'special' characters ' " < > &, \0 and - everything below 0x20 as numerical HTML entities. - - $filter_options - an bitmask that supports the - following flags: - - * STRIP_LOW: excludes all characters < 0x20 from the - allowed character list. If this is not set, then - those characters are encoded as numerical HTML - entities - * STRIP_HIGH: excludes all characters >= 0x80 from - the allowed character list - * ENCODE_HIGH: allows characters >= 0x80 but encodes - them as numerical HTML entities - -unsafe_raw UNSAFE_RAW string Returns the input variable as a string without - XML/HTML being stripped from the input value. - - $filter_options - an bitmask that supports the - following flags: - - * STRIP_LOW: excludes all characters < 0x20 from the - allowed character list - * STRIP_HIGH: excludes all characters >= 0x80 from - the allowed character list - * ENCODE_LOW: allows characters < 0x20 but encodes - them as numerical HTML entities - * ENCODE_HIGH: allows characters >= 0x80 but encodes - them as numerical HTML entities - * ENCODE_AMP: encodes & as & - - The flags STRIP_LOW and ENCODE_LOW are mutual - exclusive, and so are STRIP_HIGH and ENCODE_HIGH. In - the case they clash, the characters will be - stripped. - -email EMAIL string Removes all characters that can not be part of a - correctly formed e-mail address (exception are - comments in the email address) (a-z A-Z 0-9 " ! # $ - % & ' * + - / = ? ^ _ ` { | } ~ @ . [ ]). This - filter does `not` validate if the e-mail address has - the correct format, use the validate_email filter - for that. - -url URL string Removes all characters that can not be part of a - correctly formed URI. (a-z A-Z 0-9 $ - _ . + ! * ' ( - ) , { } | \ ^ ~ [ ] ` < > # % " ; / ? : @ & =) This - filter does `not` validate if a URI has the correct - format, use the validate_url filter for that. - -number_int NUMBER_INT int Removes all characters that are [^0-9+-]. - -number_float NUMBER_FLOAT float Removes all characters that are [^0-9+-]. - - $filter_options - an bitmask that supports the - following flags: - - * ALLOW_FRACTION: adds "." to the characters that - are not stripped. - * ALLOW_THOUSAND: adds "," to the characters that - are not stripped. - * ALLOW_SCIENTIFIC: adds "eE" to the characters that - are not stripped. - -magic_quotes MAGIC_QUOTES string BC filter for people who like magic quotes. -============= ================ =========== ===================================================== - - -Callback Filter -=============== - -This filter will callback to the specified callback function as specified with -the *filter_options* parameter. All variants of callback functions are -supported: - -* function with *'functionname'* -* static method with *array('classname', 'methodname')* -* dynamic method with *array(&$this, 'methodname')* - -The constants should be prepended by `FILTER_` when used with php. - -============= =========== =========== ===================================================== -Name Constant Return Type Description -============= =========== =========== ===================================================== -callback CALLBACK mixed Calls the callback function/method with the input - variable's value by reference which can do filtering - and modifying of the input value. If the callback - function returns "false" then the input value is - supposed to be incorrect and the returned value will - be 'false' (and an E_NOTICE will be raised). -============= =========== =========== ===================================================== - -The callback function's prototype is: - -boolean callback(&$value, $characterset); - With *$value* being a reference to the input variable and *$characterset* - containing the same value as this parameter's value in the call to - *input_get()* or *input_get_array()*. If the *$characterset* parameter was - not passed, it defaults to *'null'*. - -Version: $Id$ -.. vim: et syn=rst tw=78 - diff --git a/ext/filter/docs/input_get_args.php b/ext/filter/docs/input_get_args.php deleted file mode 100644 index b580524489ee8..0000000000000 --- a/ext/filter/docs/input_get_args.php +++ /dev/null @@ -1,41 +0,0 @@ - 'product idqqq", - "asdasdblah", - "some another text <> hoho " - ); - -foreach ($array as $str) { - file_put_contents($filename, $str); - $fp = fopen($filename, "r"); - var_dump(fgetss($fp)); - var_dump(fgetss($fp)); -} - -foreach ($array as $str) { - file_put_contents($filename, $str); - $fp = fopen($filename, "r"); - var_dump(fgetss($fp, 10)); - var_dump(fgetss($fp, 10)); -} - -var_dump(fgetss($fp, -10)); -var_dump(fgetss($fp, 0)); -fclose($fp); -var_dump(fgetss($fp, 0)); - -@unlink($filename); - -echo "Done\n"; -?> ---EXPECTF-- -string(18) "askasdfasdfaaaaaa -" -string(6) "dddddd" -string(6) "asdqw -" -string(8) "aaaaqqqq" -string(23) "aaafunction foo() {}qqq" -bool(false) -string(6) "asdasd" -string(0) "" -bool(false) -bool(false) -string(11) "some text -" -string(4) "blah" -string(24) "some another text hoho " -bool(false) -string(9) "askasdfas" -string(6) "dfaaaa" -string(5) "asdqw" -string(0) "" -string(3) "aaa" -string(7) "functio" -string(6) "asdasd" -string(0) "" -bool(false) -bool(false) -string(9) "some text" -string(2) " -" -string(9) "some anot" -string(9) "her text " - -Warning: fgetss(): Length parameter must be greater than 0 in %s on line %d -bool(false) - -Warning: fgetss(): Length parameter must be greater than 0 in %s on line %d -bool(false) - -Warning: fgetss(): %d is not a valid stream resource in %s on line %d -bool(false) -Done diff --git a/ext/standard/tests/file/fgetss1.phpt b/ext/standard/tests/file/fgetss1.phpt deleted file mode 100644 index 96b8b6f5328e5..0000000000000 --- a/ext/standard/tests/file/fgetss1.phpt +++ /dev/null @@ -1,69 +0,0 @@ ---TEST-- -more fgetss() tests ---FILE-- -aaaaaa\ndddddd", - "asdqw\naaaa<>qqqq", - "aaaqqq", - "asdasdblah", - "some another text <> hoho " - ); - -foreach ($array as $str) { - file_put_contents($filename, $str); - $fp = fopen($filename, "r"); - var_dump(fgetss($fp, 1000, ",,")); - var_dump(fgetss($fp)); -} - -foreach ($array as $str) { - file_put_contents($filename, $str); - $fp = fopen($filename, "r"); - var_dump(fgetss($fp, 10)); - var_dump(fgetss($fp, 10, " - - - - Save and double-click on the file. If you receive a little window - saying "Hello World!" you're done. - - Note: ActiveScript doesn't use the default php.ini file. Instead, - it will look only in the same directory as the .exe that caused it - to load. You should create php-activescript.ini and place it in - that folder, if you wish to load extensions, etc. - _________________________________________________________________ - -Microsoft IIS / PWS - - This section contains notes and hints specific to IIS (Microsoft - Internet Information Server). - - Warning - - By using the CGI setup, your server is open to several possible - attacks. Please read our CGI security section to learn how to defend - yourself from those attacks. - _________________________________________________________________ - -General considerations for all installations of PHP with IIS - - * First, read the Manual Installation Instructions. Do not skip this - step as it provides crucial information for installing PHP on - Windows. - * CGI users must set the cgi.force_redirect PHP directive to 0 - inside php.ini. Read the faq on cgi.force_redirect for important - details. Also, CGI users should set the cgi.redirect_status_env - directive to ENV_VAR_NAME. Be sure these directives aren't - commented out inside php.ini. - * The PHP 4 CGI is named php.exe while in PHP 5 it's php-cgi.exe. In - PHP 5, php.exe is the CLI, and not the CGI. - * Modify the Windows PATH environment variable to include the PHP - directory. This way the PHP DLL files, PHP executables, and - php.ini can all remain in the PHP directory without cluttering up - the Windows system directory. For more details, see the FAQ on - Setting the PATH. - * Be sure the extension_dir and doc_root PHP directives are - appropriately set in php.ini. These directives depend on the - system that PHP is being installed on. In PHP 4, the extension_dir - is extensions while with PHP 5 it's ext. So, an example PHP 5 - extensions_dir value is "c:\php\ext" and an example IIS doc_root - value is "c:\Inetpub\wwwroot". - * PHP extension DLL files, such as php_mysql.dll and php_curl.dll, - are found in the zip package of the PHP download (not the PHP - installer). In PHP 5, many extensions are part of PECL and can be - downloaded in the "Collection of PECL modules" package. Files such - as php_zip.dll and php_ssh2.dll. Download PHP files here. - * When defining the executable, the 'check that file exists' box may - also be checked. For a small performance penalty, the IIS (or PWS) - will check that the script file exists and sort out authentication - before firing up PHP. This means that the web server will provide - sensible 404 style error messages instead of CGI errors - complaining that PHP did not output any data. - _________________________________________________________________ - -Windows NT/200x/XP and IIS 4 or newer - - PHP may be installed as a CGI binary, or with the ISAPI module. In - either case, you need to start the Microsoft Management Console (may - appear as 'Internet Services Manager', either in your Windows NT 4.0 - Option Pack branch or the Control Panel=>Administrative Tools under - Windows 2000/XP). Then right click on your Web server node (this will - most probably appear as 'Default Web Server'), and select - 'Properties'. - - If you want to use the CGI binary, do the following: - - * Under 'Home Directory', 'Virtual Directory', or 'Directory', do - the following: - * Change the Execute Permissions to 'Scripts only' - * Click on the 'Configuration' button, and choose the Application - Mappings tab. Click Add and set the Executable path to the - appropriate CGI file. An example PHP 5 value is: - C:\php\php-cgi.exe Supply .php as the extension. Leave 'Method - exclusions' blank, and check the 'Script engine' checkbox. Now, - click OK a few times. - * Set up the appropriate security. (This is done in Internet Service - Manager), and if your NT Server uses NTFS file system, add execute - rights for I_USR_ to the directory that contains php.exe / - php-cgi.exe. - - To use the ISAPI module, do the following: - - * If you don't want to perform HTTP Authentication using PHP, you - can (and should) skip this step. Under ISAPI Filters, add a new - ISAPI filter. Use PHP as the filter name, and supply a path to the - php4isapi.dll / php5isapi.dll. - * Under 'Home Directory', 'Virtual Directory', or 'Directory', do - the following: - * Change the Execute Permissions to 'Scripts only' - * Click on the 'Configuration' button, and choose the Application - Mappings tab. Click Add and set the Executable path to the - appropriate ISAPI DLL. An example PHP 5 value is: - C:\php\php5isapi.dll Supply .php as the extension. Leave 'Method - exclusions' blank, and check the 'Script engine' checkbox. Now, - click OK a few times. - * Stop IIS completely (NET STOP iisadmin) - * Start IIS again (NET START w3svc) - - With IIS 6 (2003 Server), open up the IIS Manager, go to Web Service - Extensions, choose "Add a new Web service extension", enter in a name - such as PHP, choose the Add button and for the value browse to either - the ISAPI file (php4isapi.dll or php5isapi.dll) or CGI (php.exe or - php-cgi.exe) then check "Set extension status to Allowed" and click - OK. - - In order to use index.php as a default content page, do the following: - From within the Documents tab, choose Add. Type in index.php and click - OK. Adjust the order by choosing Move Up or Move Down. This is similar - to setting DirectoryIndex with Apache. - - The steps above must be repeated for each extension that is to be - associated with PHP scripts. .php is the most common although .php3 - may be required for legacy applications. - - If you experience 100% CPU usage after some time, turn off the IIS - setting Cache ISAPI Application. - _________________________________________________________________ - -Windows and PWS 4 - - PWS 4 does not support ISAPI, only PHP CGI should be used. - - * Edit the enclosed pws-php4cgi.reg / pws-php5cgi.reg file (look - into the SAPI folder for PHP 4, or in the main folder for PHP 5) - to reflect the location of your php.exe / php-cgi.exe. Backslashes - should be escaped, for example: - [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parame - ters\Script Map] ".php"="C:\\php\\php.exe" (change to - C:\\php\\php-cgi.exe if you are using PHP 5) Now merge this - registery file into your system; you may do this by - double-clicking it. - * In the PWS Manager, right click on a given directory you want to - add PHP support to, and select Properties. Check the 'Execute' - checkbox, and confirm. - _________________________________________________________________ - -Windows and PWS/IIS 3 - - The recommended method for configuring these servers is to use the REG - file included with the distribution (pws-php4cgi.reg in the SAPI - folder for PHP 4, or pws-php5cgi.reg in the main folder for PHP 5). - You may want to edit this file and make sure the extensions and PHP - install directories match your configuration. Or you can follow the - steps below to do it manually. - - Warning - - These steps involve working directly with the Windows registry. One - error here can leave your system in an unstable state. We highly - recommend that you back up your registry first. The PHP Development - team will not be held responsible if you damage your registry. - - * Run Regedit. - * Navigate to: HKEY_LOCAL_MACHINE /System /CurrentControlSet - /Services /W3Svc /Parameters /ScriptMap. - * On the edit menu select: New->String Value. - * Type in the extension you wish to use for your php scripts. For - example .php - * Double click on the new string value and enter the path to php.exe - in the value data field. ex: C:\php\php.exe for PHP 4, or - C:\php\php-cgi.exe for PHP 5. - * Repeat these steps for each extension you wish to associate with - PHP scripts. - - The following steps do not affect the web server installation and only - apply if you want your PHP scripts to be executed when they are run - from the command line (ex. run C:\myscripts\test.php) or by double - clicking on them in a directory viewer window. You may wish to skip - these steps as you might prefer the PHP files to load into a text - editor when you double click on them. - - * Navigate to: HKEY_CLASSES_ROOT - * On the edit menu select: New->Key. - * Name the key to the extension you setup in the previous section. - ex: .php - * Highlight the new key and in the right side pane, double click the - "default value" and enter phpfile. - * Repeat the last step for each extension you set up in the previous - section. - * Now create another New->Key under HKEY_CLASSES_ROOT and name it - phpfile. - * Highlight the new key phpfile and in the right side pane, double - click the "default value" and enter PHP Script. - * Right click on the phpfile key and select New->Key, name it Shell. - * Right click on the Shell key and select New->Key, name it open. - * Right click on the open key and select New->Key, name it command. - * Highlight the new key command and in the right side pane, double - click the "default value" and enter the path to php.exe. ex: - c:\php\php.exe -q %1. (don't forget the %1). - * Exit Regedit. - * If using PWS on Windows, reboot to reload the registry. - - PWS and IIS 3 users now have a fully operational system. IIS 3 users - can use a nifty tool from Steven Genusa to configure their script - maps. - _________________________________________________________________ - -Apache 1.3.x on Microsoft Windows - - This section contains notes and hints specific to Apache 1.3.x - installs of PHP on Microsoft Windows systems. There are also - instructions and notes for Apache 2 on a separate page. - - Note: Please read the manual installation steps first! - - There are two ways to set up PHP to work with Apache 1.3.x on Windows. - One is to use the CGI binary (php.exe for PHP 4 and php-cgi.exe for - PHP 5), the other is to use the Apache Module DLL. In either case you - need to edit your httpd.conf to configure Apache to work with PHP, and - then restart the server. - - It is worth noting here that now the SAPI module has been made more - stable under Windows, we recommend it's use above the CGI binary, - since it is more transparent and secure. - - Although there can be a few variations of configuring PHP under - Apache, these are simple enough to be used by the newcomer. Please - consult the Apache Documentation for further configuration directives. - - After changing the configuration file, remember to restart the server, - for example, NET STOP APACHE followed by NET START APACHE, if you run - Apache as a Windows Service, or use your regular shortcuts. - - Note: Remember that when adding path values in the Apache - configuration files on Windows, all backslashes such as - c:\directory\file.ext must be converted to forward slashes, as - c:/directory/file.ext. - _________________________________________________________________ - -Installing as an Apache module - - You should add the following lines to your Apache httpd.conf file: - - Example 2-3. PHP as an Apache 1.3.x module - - This assumes PHP is installed to c:\php. Adjust the path if this is - not the case. - - For PHP 4: -# Add to the end of the LoadModule section -LoadModule php4_module "c:/php/php4apache.dll" - -# Add to the end of the AddModule section -AddModule mod_php4.c - - For PHP 5: -# Add to the end of the LoadModule section -LoadModule php5_module "c:/php/php5apache.dll" - -# Add to the end of the AddModule section -AddModule mod_php5.c - - For both: -# Add this line inside the conditional brace -AddType application/x-httpd-php .php - -# For syntax highlighted .phps files, also add -AddType application/x-httpd-php-source .phps - _________________________________________________________________ - -Installing as a CGI binary - - If you unzipped the PHP package to C:\php\ as described in the Manual - Installation Steps section, you need to insert these lines to your - Apache configuration file to set up the CGI binary: - - Example 2-4. PHP and Apache 1.3.x as CGI -ScriptAlias /php/ "c:/php/" -AddType application/x-httpd-php .php - -# For PHP 4 -Action application/x-httpd-php "/php/php.exe" - -# For PHP 5 -Action application/x-httpd-php "/php/php-cgi.exe" - -# specify the directory where php.ini is -SetEnv PHPRC C:/php - - Note that the second line in the list above can be found in the actual - versions of httpd.conf, but it is commented out. Remember also to - substitute the c:/php/ for your actual path to PHP. - - Warning - - By using the CGI setup, your server is open to several possible - attacks. Please read our CGI security section to learn how to defend - yourself from those attacks. - - If you would like to present PHP source files syntax highlighted, - there is no such convenient option as with the module version of PHP. - If you chose to configure Apache to use PHP as a CGI binary, you will - need to use the highlight_file() function. To do this simply create a - PHP script file and add this code: . - _________________________________________________________________ - -Apache 2.0.x on Microsoft Windows - - This section contains notes and hints specific to Apache 2.0.x - installs of PHP on Microsoft Windows systems. We also have - instructions and notes for Apache 1.3.x users on a separate page. - - Note: You should read the manual installation steps first! - - Warning - - We do not recommend using a threaded MPM in production with Apache2. - Use the prefork MPM instead, or use Apache1. For information on why, - read the following FAQ entry - - You are highly encouraged to take a look at the Apache Documentation - to get a basic understanding of the Apache 2.0.x Server. Also consider - to read the Windows specific notes for Apache 2.0.x before reading on - here. - - PHP and Apache 2.0.x compatibility notes: The following versions of - PHP are known to work with the most recent version of Apache 2.0.x: - - * PHP 4.3.0 or later available at http://www.php.net/downloads.php. - * the latest stable development version. Get the source code - http://snaps.php.net/php4-latest.tar.gz or download binaries for - Windows http://snaps.php.net/win32/php4-win32-latest.zip. - * a prerelease version downloadable from http://qa.php.net/. - * you have always the option to obtain PHP through anonymous CVS. - - These versions of PHP are compatible to Apache 2.0.40 and later. - - Apache 2.0 SAPI-support started with PHP 4.2.0. PHP 4.2.3 works - with Apache 2.0.39, don't use any other version of Apache with PHP - 4.2.3. However, the recommended setup is to use PHP 4.3.0 or later - with the most recent version of Apache2. - - All mentioned versions of PHP will work still with Apache 1.3.x. - - Warning - - Apache 2.0.x is designed to run on Windows NT 4.0, Windows 2000 or - Windows XP. At this time, support for Windows 9x is incomplete. Apache - 2.0.x is not expected to work on those platforms at this time. - - Download the most recent version of Apache 2.0.x and a fitting PHP - version. Follow the Manual Installation Steps and come back to go on - with the integration of PHP and Apache. - - There are two ways to set up PHP to work with Apache 2.0.x on Windows. - One is to use the CGI binary the other is to use the Apache module - DLL. In either case you need to edit your httpd.conf to configure - Apache to work with PHP and then restart the server. - - Note: Remember that when adding path values in the Apache - configuration files on Windows, all backslashes such as - c:\directory\file.ext must be converted to forward slashes, as - c:/directory/file.ext. - _________________________________________________________________ - -Installing as a CGI binary - - You need to insert these three lines to your Apache httpd.conf - configuration file to set up the CGI binary: - - Example 2-5. PHP and Apache 2.0 as CGI -ScriptAlias /php/ "c:/php/" -AddType application/x-httpd-php .php - -# For PHP 4 -Action application/x-httpd-php "/php/php.exe" - -# For PHP 5 -Action application/x-httpd-php "/php/php-cgi.exe" - - Warning - - By using the CGI setup, your server is open to several possible - attacks. Please read our CGI security section to learn how to defend - yourself from those attacks. - _________________________________________________________________ - -Installing as an Apache module - - You need to insert these two lines to your Apache httpd.conf - configuration file to set up the PHP module for Apache 2.0: - - Example 2-6. PHP and Apache 2.0 as Module -# For PHP 4 do something like this: -LoadModule php4_module "c:/php/php4apache2.dll" -AddType application/x-httpd-php .php - -# For PHP 5 do something like this: -LoadModule php5_module "c:/php/php5apache2.dll" -AddType application/x-httpd-php .php - -# configure the path to php.ini -PHPIniDir "C:/php" - - Note: Remember to substitute the c:/php/ for your actual path to - PHP in the above examples. Take care to use either php4apache2.dll - or php5apache2.dll in your LoadModule directive and not - php4apache.dll or php5apache.dll as the latter ones are designed to - run with Apache 1.3.x. - - Note: If you want to use content negotiation, read related FAQ. - - Warning - - Don't mix up your installation with DLL files from different PHP - versions. You have the only choice to use the DLL's and extensions - that ship with your downloaded PHP version. - _________________________________________________________________ - -Sun, iPlanet and Netscape servers on Microsoft Windows - - This section contains notes and hints specific to Sun Java System Web - Server, Sun ONE Web Server, iPlanet and Netscape server installs of - PHP on Windows. - - From PHP 4.3.3 on you can use PHP scripts with the NSAPI module to - generate custom directory listings and error pages. Additional - functions for Apache compatibility are also available. For support in - current webservers read the note about subrequests. - _________________________________________________________________ - -CGI setup on Sun, iPlanet and Netscape servers - - To install PHP as a CGI handler, do the following: - - * Copy php4ts.dll to your systemroot (the directory where you - installed Windows) - * Make a file association from the command line. Type the following - two lines: - -assoc .php=PHPScript -ftype PHPScript=c:\php\php.exe %1 %* - - * In the Netscape Enterprise Administration Server create a dummy - shellcgi directory and remove it just after (this step creates 5 - important lines in obj.conf and allow the web server to handle - shellcgi scripts). - * In the Netscape Enterprise Administration Server create a new mime - type (Category: type, Content-Type: magnus-internal/shellcgi, File - Suffix:php). - * Do it for each web server instance you want PHP to run - - More details about setting up PHP as a CGI executable can be found - here: http://benoit.noss.free.fr/php/install-php.html - _________________________________________________________________ - -NSAPI setup on Sun, iPlanet and Netscape servers - - To install PHP with NSAPI, do the following: - - * Copy php4ts.dll to your systemroot (the directory where you - installed Windows) - * Make a file association from the command line. Type the following - two lines: - -assoc .php=PHPScript -ftype PHPScript=c:\php\php.exe %1 %* - - * In the Netscape Enterprise Administration Server create a new mime - type (Category: type, Content-Type: magnus-internal/x-httpd-php, - File Suffix: php). - * Edit magnus.conf (for servers >= 6) or obj.conf (for servers < 6) - and add the following: You should place the lines after mime types - init. - -Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="c: -/php/sapi/php4nsapi.dll" -Init fn="php4_init" LateInit="yes" errorString="Failed to initialise PHP!" [php -_ini="c:/path/to/php.ini"] - - (PHP >= 4.3.3) The php_ini parameter is optional but with it you - can place your php.ini in your webserver config directory. - * Configure the default object in obj.conf (for virtual server - classes [Sun Web Server 6.0+] in their vserver.obj.conf): In the - section, place this line necessarily after - all 'ObjectType' and before all 'AddLog' lines: - -Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inik -ey=value ...] - - (PHP >= 4.3.3) As additional parameters you can add some special - php.ini-values, for example you can set a - docroot="/path/to/docroot" specific to the context php4_execute is - called. For boolean ini-keys please use 0/1 as value, not - "On","Off",... (this will not work correctly), e.g. - zlib.output_compression=1 instead of zlib.output_compression="On" - * This is only needed if you want to configure a directory that only - consists of PHP scripts (same like a cgi-bin directory): - - -ObjectType fn="force-type" type="magnus-internal/x-httpd-php" -Service fn=php4_execute [inikey=value inikey=value ...] - - - After that you can configure a directory in the Administration - server and assign it the style x-httpd-php. All files in it will - get executed as PHP. This is nice to hide PHP usage by renaming - files to .html. - * Restart your web service and apply changes - * Do it for each web server instance you want PHP to run - - Note: More details about setting up PHP as an NSAPI filter can be - found here: http://benoit.noss.free.fr/php/install-php4.html - - Note: The stacksize that PHP uses depends on the configuration of - the webserver. If you get crashes with very large PHP scripts, it - is recommended to raise it with the Admin Server (in the section - "MAGNUS EDITOR"). - _________________________________________________________________ - -CGI environment and recommended modifications in php.ini - - Important when writing PHP scripts is the fact that Sun JSWS/Sun ONE - WS/iPlanet/Netscape is a multithreaded web server. Because of that all - requests are running in the same process space (the space of the - webserver itself) and this space has only one environment. If you want - to get CGI variables like PATH_INFO, HTTP_HOST etc. it is not the - correct way to try this in the old PHP 3.x way with getenv() or a - similar way (register globals to environment, $_ENV). You would only - get the environment of the running webserver without any valid CGI - variables! - - Note: Why are there (invalid) CGI variables in the environment? - - Answer: This is because you started the webserver process from the - admin server which runs the startup script of the webserver, you - wanted to start, as a CGI script (a CGI script inside of the admin - server!). This is why the environment of the started webserver has - some CGI environment variables in it. You can test this by starting - the webserver not from the administration server. Use the command - line as root user and start it manually - you will see there are no - CGI-like environment variables. - - Simply change your scripts to get CGI variables in the correct way for - PHP 4.x by using the superglobal $_SERVER. If you have older scripts - which use $HTTP_HOST, etc., you should turn on register_globals in - php.ini and change the variable order too (important: remove "E" from - it, because you do not need the environment here): -variables_order = "GPCS" -register_globals = On - _________________________________________________________________ - -Special use for error pages or self-made directory listings (PHP >= 4.3.3) - - You can use PHP to generate the error pages for "404 Not Found" or - similar. Add the following line to the object in obj.conf for every - error page you want to overwrite: -Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value ini -key=value...] - - where XXX is the HTTP error code. Please delete any other Error - directives which could interfere with yours. If you want to place a - page for all errors that could exist, leave the code parameter out. - Your script can get the HTTP status code with $_SERVER['ERROR_TYPE']. - - Another possibility is to generate self-made directory listings. Just - create a PHP script which displays a directory listing and replace the - corresponding default Service line for - type="magnus-internal/directory" in obj.conf with the following: -Service fn="php4_execute" type="magnus-internal/directory" script="/path/to/scr -ipt.php" [inikey=value inikey=value...] - - For both error and directory listing pages the original URI and - translated URI are in the variables $_SERVER['PATH_INFO'] and - $_SERVER['PATH_TRANSLATED']. - _________________________________________________________________ - -Note about nsapi_virtual() and subrequests (PHP >= 4.3.3) - - The NSAPI module now supports the nsapi_virtual() function (alias: - virtual()) to make subrequests on the webserver and insert the result - in the webpage. The problem is, that this function uses some - undocumented features from the NSAPI library. - - Under Unix this is not a problem, because the module automatically - looks for the needed functions and uses them if available. If not, - nsapi_virtual() is disabled. - - Under Windows limitations in the DLL handling need the use of a - automatic detection of the most recent ns-httpdXX.dll file. This is - tested for servers till version 6.1. If a newer version of the Sun - server is used, the detection fails and nsapi_virtual() is disabled. - - If this is the case, try the following: Add the following parameter to - php4_init in magnus.conf/obj.conf: - Init fn=php4_init ... server_lib="ns-httpdXX.dll" - - where XX is the correct DLL version number. To get it, look in the - server-root for the correct DLL name. The DLL with the biggest - filesize is the right one. - - You can check the status by using the phpinfo() function. - - Note: But be warned: Support for nsapi_virtual() is EXPERIMENTAL!!! - _________________________________________________________________ - -OmniHTTPd Server - - This section contains notes and hints specific to OmniHTTPd on - Windows. - - Note: You should read the manual installation steps first! - - Warning - - By using the CGI setup, your server is open to several possible - attacks. Please read our CGI security section to learn how to defend - yourself from those attacks. - - You need to complete the following steps to make PHP work with - OmniHTTPd. This is a CGI executable setup. SAPI is supported by - OmniHTTPd, but some tests have shown that it is not so stable to use - PHP as an ISAPI module. - - Important for CGI users: Read the faq on cgi.force_redirect for - important details. This directive needs to be set to 0. - - 1. Install OmniHTTPd server. - 2. Right click on the blue OmniHTTPd icon in the system tray and - select Properties - 3. Click on Web Server Global Settings - 4. On the 'External' tab, enter: virtual = .php | actual = - c:\php\php.exe (use php-cgi.exe if installing PHP 5), and use the - Add button. - 5. On the Mime tab, enter: virtual = wwwserver/stdcgi | actual = - .php, and use the Add button. - 6. Click OK - - Repeat steps 2 - 6 for each extension you want to associate with PHP. - - Note: Some OmniHTTPd packages come with built in PHP support. You - can choose at setup time to do a custom setup, and uncheck the PHP - component. We recommend you to use the latest PHP binaries. Some - OmniHTTPd servers come with PHP 4 beta distributions, so you should - choose not to set up the built in support, but install your own. If - the server is already on your machine, use the Replace button in - Step 4 and 5 to set the new, correct information. - _________________________________________________________________ - -Sambar Server on Microsoft Windows - - This section contains notes and hints specific to the Sambar Server - for Windows. - - Note: You should read the manual installation steps first! - - This list describes how to set up the ISAPI module to work with the - Sambar server on Windows. - - * Find the file called mappings.ini (in the config directory) in the - Sambar install directory. - * Open mappings.ini and add the following line under [ISAPI]: - - Example 2-7. ISAPI configuration of Sambar -#for PHP 4 -*.php = c:\php\php4isapi.dll - -#for PHP 5 -*.php = c:\php\php5isapi.dll - - (This line assumes that PHP was installed in c:\php.) - * Now restart the Sambar server for the changes to take effect. - _________________________________________________________________ - -Xitami on Microsoft Windows - - This section contains notes and hints specific to Xitami on Windows. - - Note: You should read the manual installation steps first! - - This list describes how to set up the PHP CGI binary to work with - Xitami on Windows. - - Important for CGI users: Read the faq on cgi.force_redirect for - important details. This directive needs to be set to 0. If you want - to use $_SERVER['PHP_SELF'] you have to enable the cgi.fix_pathinfo - directive. - - Warning - - By using the CGI setup, your server is open to several possible - attacks. Please read our CGI security section to learn how to defend - yourself from those attacks. - - * Make sure the webserver is running, and point your browser to - xitamis admin console (usually http://127.0.0.1/admin), and click - on Configuration. - * Navigate to the Filters, and put the extension which PHP should - parse (i.e. .php) into the field File extensions (.xxx). - * In Filter command or script put the path and name of your PHP CGI - executable i.e. C:\php\php.exe for PHP 4, or C:\php\php-cgi.exe - for PHP 5. - * Press the 'Save' icon. - * Restart the server to reflect changes. - _________________________________________________________________ - -Installation of extensions on Windows - - After installing PHP and a webserver on Windows, you will probably - want to install some extensions for added functionality. You can - choose which extensions you would like to load when PHP starts by - modifying your php.ini. You can also load a module dynamically in your - script using dl(). - - The DLLs for PHP extensions are prefixed with php_. - - Note: In PHP 4.3.1 BCMath, Calendar, COM, Ctype, FTP, MySQL, ODBC, - Overload, PCRE, Session, Tokenizer, WDDX, XML and Zlib support is - built in. You don't need to load any additional extensions in order - to use these functions. See your distributions README.txt or - install.txt or this table for a list of built in modules. - - The default location PHP searches for extensions is c:\php4\extensions - in PHP 4 and c:\php5 in PHP 5. To change this setting to reflect your - setup of PHP edit your php.ini file: - - * You will need to change the extension_dir setting to point to the - directory where your extensions lives, or where you have placed - your php_*.dll files. Please do not forget the last backslash. For - example: - -extension_dir = c:/php/extensions/ - - * Enable the extension(s) in php.ini you want to use by uncommenting - the extension=php_*.dll lines in php.ini. This is done by deleting - the leading ; from the extension you want to load. - - Example 2-8. Enable Bzip2 extension for PHP-Windows -// change the following line from ... -;extension=php_bz2.dll - -// ... to -extension=php_bz2.dll - - * Some of the extensions need extra DLLs to work. Couple of them can - be found in the distribution package, in the C:\php\dlls\ folder - in PHP 4 or in the main folder in PHP 5, but some, for example - Oracle (php_oci8.dll) require DLLs which are not bundled with the - distribution package. If you are installing PHP 4, copy the - bundled DLLs from C:\php\dlls folder to the main C:\php folder. - Don't forget to include C:\php in the system PATH (this process is - explained in a separate FAQ entry). - * Some of these DLLs are not bundled with the PHP distribution. See - each extensions documentation page for details. Also, read the - manual section titled Installation of PECL extensions for details - on PECL. An increasingly large number of PHP extensions are found - in PECL, and these extensions require a separate download. - - Note: If you are running a server module version of PHP remember to - restart your webserver to reflect your changes to php.ini. - - The following table describes some of the extensions available and - required additional dlls. - - Table 2-1. PHP Extensions - Extension Description Notes - php_bz2.dll bzip2 compression functions None - php_calendar.dll Calendar conversion functions Built in since PHP - 4.0.3 - php_cpdf.dll ClibPDF functions None - php_crack.dll Crack functions None - php_ctype.dll ctype family functions Built in since PHP 4.3.0 - php_curl.dll CURL, Client URL library functions Requires: - libeay32.dll, ssleay32.dll (bundled) - php_cybercash.dll Cybercash payment functions PHP <= 4.2.0 - php_db.dll DBM functions Deprecated. Use DBA instead (php_dba.dll) - php_dba.dll DBA: DataBase (dbm-style) Abstraction layer functions None - php_dbase.dll dBase functions None - php_dbx.dll dbx functions - php_domxml.dll DOM XML functions PHP <= 4.2.0 requires: libxml2.dll - (bundled) PHP >= 4.3.0 requires: iconv.dll (bundled) - php_dotnet.dll .NET functions PHP <= 4.1.1 - php_exif.dll EXIF functions php_mbstring.dll. And, php_exif.dll must - be loaded after php_mbstring.dll in php.ini. - php_fbsql.dll FrontBase functions PHP <= 4.2.0 - php_fdf.dll FDF: Forms Data Format functions. Requires: fdftk.dll - (bundled) - php_filepro.dll filePro functions Read-only access - php_ftp.dll FTP functions Built-in since PHP 4.0.3 - php_gd.dll GD library image functions Removed in PHP 4.3.2. Also note - that truecolor functions are not available in GD1, instead, use - php_gd2.dll. - php_gd2.dll GD library image functions GD2 - php_gettext.dll Gettext functions PHP <= 4.2.0 requires - gnu_gettext.dll (bundled), PHP >= 4.2.3 requires libintl-1.dll, - iconv.dll (bundled). - php_hyperwave.dll HyperWave functions None - php_iconv.dll ICONV characterset conversion Requires: iconv-1.3.dll - (bundled), PHP >=4.2.1 iconv.dll - php_ifx.dll Informix functions Requires: Informix libraries - php_iisfunc.dll IIS management functions None - php_imap.dll IMAP POP3 and NNTP functions None - php_ingres.dll Ingres II functions Requires: Ingres II libraries - php_interbase.dll InterBase functions Requires: gds32.dll (bundled) - php_java.dll Java functions PHP <= 4.0.6 requires: jvm.dll (bundled) - php_ldap.dll LDAP functions PHP <= 4.2.0 requires libsasl.dll - (bundled), PHP >= 4.3.0 requires libeay32.dll, ssleay32.dll (bundled) - php_mbstring.dll Multi-Byte String functions None - php_mcrypt.dll Mcrypt Encryption functions Requires: libmcrypt.dll - php_mhash.dll Mhash functions PHP >= 4.3.0 requires: libmhash.dll - (bundled) - php_mime_magic.dll Mimetype functions Requires: magic.mime (bundled) - php_ming.dll Ming functions for Flash None - php_msql.dll mSQL functions Requires: msql.dll (bundled) - php_mssql.dll MSSQL functions Requires: ntwdblib.dll (bundled) - php_mysql.dll MySQL functions PHP >= 5.0.0, requires libmysql.dll - (bundled) - php_mysqli.dll MySQLi functions PHP >= 5.0.0, requires libmysql.dll - (libmysqli.dll in PHP <= 5.0.2) (bundled) - php_oci8.dll Oracle 8 functions Requires: Oracle 8.1+ client libraries - php_openssl.dll OpenSSL functions Requires: libeay32.dll (bundled) - php_oracle.dll Oracle functions Requires: Oracle 7 client libraries - php_overload.dll Object overloading functions Built in since PHP 4.3.0 - php_pdf.dll PDF functions None - php_pgsql.dll PostgreSQL functions None - php_printer.dll Printer functions None - php_shmop.dll Shared Memory functions None - php_snmp.dll SNMP get and walk functions NT only! - php_soap.dll SOAP functions PHP >= 5.0.0 - php_sockets.dll Socket functions None - php_sybase_ct.dll Sybase functions Requires: Sybase client libraries - php_tidy.dll Tidy functions PHP >= 5.0.0 - php_tokenizer.dll Tokenizer functions Built in since PHP 4.3.0 - php_w32api.dll W32api functions None - php_xmlrpc.dll XML-RPC functions PHP >= 4.2.1 requires: iconv.dll - (bundled) - php_xslt.dll XSLT functions PHP <= 4.2.0 requires sablot.dll, - expat.dll (bundled). PHP >= 4.2.1 requires sablot.dll, expat.dll, - iconv.dll (bundled). - php_yaz.dll YAZ functions Requires: yaz.dll (bundled) - php_zip.dll Zip File functions Read only access - php_zlib.dll ZLib compression functions Built in since PHP 4.3.0 - _________________________________________________________________ - -Chapter 3. Installation of PECL extensions - -Introduction to PECL Installations - - PHP extensions may be installed in a variety of ways. PECL is a - repository of PHP extensions living within the PEAR structure, and the - following demonstrates how to install these extensions. - - These instructions assume /your/phpsrcdir/ is the path to the PHP - source, and extname is the name of the PECL extension. Adjust - accordingly. These instructions also assume a familiarity with the - pear command. - - Shared extensions may be installed by including them inside of php.ini - using the extension PHP directive. See also the extensions_dir - directive, and dl(). The installation methods described below do not - automatically configure PHP to include these extensions, this step - must be done manually. - - When building PHP modules, it's important to have the appropriate - versions of the required tools (autoconf, automake, libtool, etc.) See - the Anonymous CVS Instructions for details on the required tools, and - required versions. - _________________________________________________________________ - -Downloading PECL extensions - - There are several options for downloading PECL extensions, such as: - - * http://pecl.php.net - Listed here is information like the ChangeLog, release - information, requirements, revisions, etc. Although not every PECL - extension has a webpage, most do. - * pear download extname - The pear command may also be used to download source files. - Specific revisions may also be specified. - * CVS - All PECL files reside in CVS. A web-based view may be seen at - http://cvs.php.net/pecl/. To download straight from CVS, consider - the following where phpfi is the password for user cvsread: - -$ cvs -d:pserver:cvsread@cvs.php.net:/repository login -$ cvs -d:pserver:cvsread@cvs.php.net:/repository co pecl/extname - - * Windows downloads - Windows users may find compiled PECL binaries by downloading the - Collection of PECL modules from the PHP Downloads page, and by - retrieving a PECL Snapshot. To compile PHP under Windows, read the - Win32 Build README. - _________________________________________________________________ - -PECL for Windows users - - Like with any other PHP extension DLL, to install move the PECL - extension DLLs into the extension_dir folder and include them within - php.ini. For example: - - extension=php_extname.dll - - After doing this, restart the web server. - _________________________________________________________________ - -Compiling shared PECL extensions with PEAR - - PEAR makes it easy to create shared PHP extensions. Using the pear - command, do the following: - - $ pear install extname - - That will download the source for extname, and compile it on the - system. This results in an extname.so file that may then be included - in php.ini - - In case the systems preferred_state is set higher than an available - extname version, like it's set to stable and the extension is still in - beta, either alter the preferred_state via pear config-set or specify - a specific version of the PECL extension. For example: - - $ pear install extname-0.1.1 - - Regardless, pear will copy this extname.so into the extensions - directory. Adjust php.ini accordingly. - _________________________________________________________________ - -Compiling shared PECL extensions with phpize - - If using pear is not an option, like for building shared PECL - extensions from CVS, or for unreleased PECL packages, then creating a - shared extension may also be done by manually using the phpize - command. The pear command essentially does this but it may also be - done manually. Assuming the source file is named extname.tgz, and that - it was downloaded into the current directory, consider the following: - -$ pear download extname -$ gzip -d < extname.tgz | tar -xvf - -$ cd extname -$ phpize -$ ./configure && make - - Upon success, this will create extname.so and put it into the modules/ - and/or .libs/ directory within the extname/ source. Move this shared - extension (extname.so) into the PHP extensions directory, and adjust - php.ini accordingly. - _________________________________________________________________ - -Compiling PECL extensions statically into PHP - - To statically include the extension within the PHP build, put the - extensions source into the ext/ directory found in the PHP source. For - example: - -$ cd /your/phpsrcdir/ext -$ pear download extname -$ gzip -d < extname.tgz | tar -xvf - -$ mv extname-x.x.x extname -$ rm package.xml - - This will result in the following directory: - - /your/phpsrcdir/ext/extname - - From here, build PHP as normal: - -$ cd /your/phpsrcdir -$ ./buildconf -$ ./configure --help -$ ./configure --with-extname --enable-someotherext --with-foobar -$ make -$ make install - - Whether --enable-extname or --with-extname is used depends on the - extension. Typically an extension that does not require external - libraries uses --enable. To be sure, run the following after - buildconf: - - $ ./configure --help | grep extname - _________________________________________________________________ - -Chapter 4. Problems? - -Read the FAQ - - Some problems are more common than others. The most common ones are - listed in the PHP FAQ, part of this manual. - _________________________________________________________________ - -Other problems - - If you are still stuck, someone on the PHP installation mailing list - may be able to help you. You should check out the archive first, in - case someone already answered someone else who had the same problem as - you. The archives are available from the support page on - http://www.php.net/support.php. To subscribe to the PHP installation - mailing list, send an empty mail to - php-install-subscribe@lists.php.net. The mailing list address is - php-install@lists.php.net. - - If you want to get help on the mailing list, please try to be precise - and give the necessary details about your environment (which operating - system, what PHP version, what web server, if you are running PHP as - CGI or a server module, safe mode, etc...), and preferably enough code - to make others able to reproduce and test your problem. - _________________________________________________________________ - -Bug reports - - If you think you have found a bug in PHP, please report it. The PHP - developers probably don't know about it, and unless you report it, - chances are it won't be fixed. You can report bugs using the - bug-tracking system at http://bugs.php.net/. Please do not send bug - reports in mailing list or personal letters. The bug system is also - suitable to submit feature requests. - - Read the How to report a bug document before submitting any bug - reports! - _________________________________________________________________ - -Chapter 5. Runtime Configuration - -The configuration file - - The configuration file (called php3.ini in PHP 3, and simply php.ini - as of PHP 4) is read when PHP starts up. For the server module - versions of PHP, this happens only once when the web server is - started. For the CGI and CLI version, it happens on every invocation. - - The default location of php.ini is a compile time option (see the FAQ - entry), but can be changed for the CGI and CLI version with the -c - command line switch, see the chapter about using PHP from the command - line. You can also use the environment variable PHPRC for an - additional path to search for a php.ini file. - - If php-SAPI.ini exists (where SAPI is used SAPI, so the filename is - e.g. php-cli.ini or php-apache.ini), it's used instead of php.ini. - - Note: The Apache web server changes the directory to root at - startup causing PHP to attempt to read php.ini from the root - filesystem if it exists. - - The php.ini directives handled by extensions are documented - respectively on the pages of the extensions themselves. The list of - the core directives is available in the appendix. Probably not all the - PHP directives are documented in the manual though. For a completel - list of directives available in your PHP version, please read your - well commented php.ini file. Alternatively, you may find the the - latest php.ini from CVS helpful too. - - Example 5-1. php.ini example -; any text on a line after an unquoted semicolon (;) is ignored -[php] ; section markers (text within square brackets) are also ignored -; Boolean values can be set to either: -; true, on, yes -; or false, off, no, none -register_globals = off -track_errors = yes - -; you can enclose strings in double-quotes -include_path = ".:/usr/local/lib/php" - -; backslashes are treated the same as any other character -include_path = ".;c:\php\lib" - _________________________________________________________________ - -How to change configuration settings - -Running PHP as an Apache module - - When using PHP as an Apache module, you can also change the - configuration settings using directives in Apache configuration files - (e.g. httpd.conf) and .htaccess files. You will need "AllowOverride - Options" or "AllowOverride All" privileges to do so. - - With PHP 4 and PHP 5, there are several Apache directives that allow - you to change the PHP configuration from within the Apache - configuration files. For a listing of which directives are - PHP_INI_ALL, PHP_INI_PERDIR, or PHP_INI_SYSTEM, have a look at the - List of php.ini directives appendix. - - Note: With PHP 3, there are Apache directives that correspond to - each configuration setting in the php3.ini name, except the name is - prefixed by "php3_". - - php_value name value - Sets the value of the specified directive. Can be used only - with PHP_INI_ALL and PHP_INI_PERDIR type directives. To clear a - previously set value use none as the value. - - Note: Don't use php_value to set boolean values. php_flag (see - below) should be used instead. - - php_flag name on|off - Used to set a boolean configuration directive. Can be used only - with PHP_INI_ALL and PHP_INI_PERDIR type directives. - - php_admin_value name value - Sets the value of the specified directive. This can not be used - in .htaccess files. Any directive type set with php_admin_value - can not be overridden by .htaccess or virtualhost directives. - To clear a previously set value use none as the value. - - php_admin_flag name on|off - Used to set a boolean configuration directive. This can not be - used in .htaccess files. Any directive type set with - php_admin_flag can not be overridden by .htaccess or - virtualhost directives. - - Example 5-2. Apache configuration example - - php_value include_path ".:/usr/local/lib/php" - - - php_value include_path ".:/usr/local/lib/php" - - - php3_include_path ".:/usr/local/lib/php" - - - Caution - - PHP constants do not exist outside of PHP. For example, in httpd.conf - you can not use PHP constants such as E_ALL or E_NOTICE to set the - error_reporting directive as they will have no meaning and will - evaluate to 0. Use the associated bitmask values instead. These - constants can be used in php.ini - _________________________________________________________________ - -Changing PHP configuration via the Windows registry - - When running PHP on Windows, the configuration values can be modified - on a per-directory basis using the Windows registry. The configuration - values are stored in the registry key HKLM\SOFTWARE\PHP\Per Directory - Values, in the sub-keys corresponding to the path names. For example, - configuration values for the directory c:\inetpub\wwwroot would be - stored in the key HKLM\SOFTWARE\PHP\Per Directory - Values\c\inetpub\wwwroot. The settings for the directory would be - active for any script running from this directory or any subdirectory - of it. The values under the key should have the name of the PHP - configuration directive and the string value. PHP constants in the - values are not parsed. However, only configuration values changeable - in PHP_INI_USER can be set this way, PHP_INI_PERDIR values can not. - _________________________________________________________________ - -Other interfaces to PHP - - Regardless of how you run PHP, you can change certain values at - runtime of your scripts through ini_set(). See the documentation on - the ini_set() page for more information. - - If you are interested in a complete list of configuration settings on - your system with their current values, you can execute the phpinfo() - function, and review the resulting page. You can also access the - values of individual configuration directives at runtime using - ini_get() or get_cfg_var(). diff --git a/win32/md5crypt.c b/win32/md5crypt.c deleted file mode 100644 index ba8d46afe00d2..0000000000000 --- a/win32/md5crypt.c +++ /dev/null @@ -1,163 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Edin Kadribasic | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -/* - * ---------------------------------------------------------------------------- - * "THE BEER-WARE LICENSE" (Revision 42): - * wrote this file. As long as you retain this notice you - * can do whatever you want with this stuff. If we meet some day, and you think - * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp - * ---------------------------------------------------------------------------- - * - * from FreeBSD: crypt.c,v 1.5 1996/10/14 08:34:02 phk Exp - * via OpenBSD: md5crypt.c,v 1.9 1997/07/23 20:58:27 kstailey Exp - * via NetBSD: md5crypt.c,v 1.4.2.1 2002/01/22 19:31:59 he Exp - * - */ - -#include "php.h" -#include "ext/standard/md5.h" -#include "md5crypt.h" - -static unsigned char itoa64[] = /* 0 ... 63 => ascii - 64 */ - "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - -static void to64(char *, php_uint32, int); - -static void -to64(char *s, php_uint32 v, int n) -{ - - while (--n >= 0) { - *s++ = itoa64[v & 0x3f]; - v >>= 6; - } -} - -/* - * MD5 password encryption. - */ -char * -md5_crypt(const char *pw, const char *salt) -{ - static char passwd[120], *p; - const char *sp, *ep; - unsigned char final[16]; - unsigned int i, sl, pwl; - PHP_MD5_CTX ctx, ctx1; - php_uint32 l; - int pl; - - pwl = strlen(pw); - - /* Refine the salt first */ - sp = salt; - - /* If it starts with the magic string, then skip that */ - if (strncmp(sp, MD5_MAGIC, MD5_MAGIC_LEN) == 0) - sp += MD5_MAGIC_LEN; - - /* It stops at the first '$', max 8 chars */ - for (ep = sp; *ep != '\0' && *ep != '$' && ep < (sp + 8); ep++) - continue; - - /* get the length of the true salt */ - sl = ep - sp; - - PHP_MD5Init(&ctx); - - /* The password first, since that is what is most unknown */ - PHP_MD5Update(&ctx, (const unsigned char *)pw, pwl); - - /* Then our magic string */ - PHP_MD5Update(&ctx, (const unsigned char *)MD5_MAGIC, MD5_MAGIC_LEN); - - /* Then the raw salt */ - PHP_MD5Update(&ctx, (const unsigned char *)sp, sl); - - /* Then just as many characters of the MD5(pw,salt,pw) */ - PHP_MD5Init(&ctx1); - PHP_MD5Update(&ctx1, (const unsigned char *)pw, pwl); - PHP_MD5Update(&ctx1, (const unsigned char *)sp, sl); - PHP_MD5Update(&ctx1, (const unsigned char *)pw, pwl); - PHP_MD5Final(final, &ctx1); - - for (pl = pwl; pl > 0; pl -= 16) - PHP_MD5Update(&ctx, final, (unsigned int)(pl > 16 ? 16 : pl)); - - /* Don't leave anything around in vm they could use. */ - memset(final, 0, sizeof(final)); - - /* Then something really weird... */ - for (i = pwl; i != 0; i >>= 1) - if ((i & 1) != 0) - PHP_MD5Update(&ctx, final, 1); - else - PHP_MD5Update(&ctx, (const unsigned char *)pw, 1); - - /* Now make the output string */ - memcpy(passwd, MD5_MAGIC, MD5_MAGIC_LEN); - strlcpy(passwd + MD5_MAGIC_LEN, sp, sl + 1); - strcat(passwd, "$"); - - PHP_MD5Final(final, &ctx); - - /* - * And now, just to make sure things don't run too fast. On a 60 MHz - * Pentium this takes 34 msec, so you would need 30 seconds to build - * a 1000 entry dictionary... - */ - for (i = 0; i < 1000; i++) { - PHP_MD5Init(&ctx1); - - if ((i & 1) != 0) - PHP_MD5Update(&ctx1, (const unsigned char *)pw, pwl); - else - PHP_MD5Update(&ctx1, final, 16); - - if ((i % 3) != 0) - PHP_MD5Update(&ctx1, (const unsigned char *)sp, sl); - - if ((i % 7) != 0) - PHP_MD5Update(&ctx1, (const unsigned char *)pw, pwl); - - if ((i & 1) != 0) - PHP_MD5Update(&ctx1, final, 16); - else - PHP_MD5Update(&ctx1, (const unsigned char *)pw, pwl); - - PHP_MD5Final(final, &ctx1); - } - - p = passwd + sl + MD5_MAGIC_LEN + 1; - - l = (final[ 0]<<16) | (final[ 6]<<8) | final[12]; to64(p,l,4); p += 4; - l = (final[ 1]<<16) | (final[ 7]<<8) | final[13]; to64(p,l,4); p += 4; - l = (final[ 2]<<16) | (final[ 8]<<8) | final[14]; to64(p,l,4); p += 4; - l = (final[ 3]<<16) | (final[ 9]<<8) | final[15]; to64(p,l,4); p += 4; - l = (final[ 4]<<16) | (final[10]<<8) | final[ 5]; to64(p,l,4); p += 4; - l = final[11] ; to64(p,l,2); p += 2; - *p = '\0'; - - /* Don't leave anything around in vm they could use. */ - memset(final, 0, sizeof(final)); - return (passwd); -} - diff --git a/win32/md5crypt.h b/win32/md5crypt.h deleted file mode 100644 index 9829644b33595..0000000000000 --- a/win32/md5crypt.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Edin Kadribasic | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ -#ifndef _MD5CRYPT_H_ -#define _MD5CRYPT_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define MD5_MAGIC "$1$" -#define MD5_MAGIC_LEN 3 - -char *md5_crypt(const char *pw, const char *salt); - -#ifdef __cplusplus -} -#endif - -#endif /* _MD5CRYPT_H_ */ \ No newline at end of file diff --git a/win32/param.h b/win32/param.h deleted file mode 100644 index 3d0da1e8d3bc8..0000000000000 --- a/win32/param.h +++ /dev/null @@ -1,16 +0,0 @@ - -/***************************************************************************** - * * - * sys/param.c * - * * - * Freely redistributable and modifiable. Use at your own risk. * - * * - * Copyright 1994 The Downhill Project * - * * - *****************************************************************************/ -#ifndef MAXPATHLEN -#define MAXPATHLEN _MAX_PATH -#endif -#define MAXHOSTNAMELEN 64 -#define howmany(x,y) (((x)+((y)-1))/(y)) -#define roundup(x,y) ((((x)+((y)-1))/(y))*(y)) diff --git a/win32/php5.dsp b/win32/php5.dsp deleted file mode 100644 index 0b5b9a6d6b0d1..0000000000000 --- a/win32/php5.dsp +++ /dev/null @@ -1,134 +0,0 @@ -# Microsoft Developer Studio Project File - Name="php5" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=php5 - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "php5.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "php5.mak" CFG="php5 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "php5 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "php5 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "php5 - Win32 Release_inline" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "php5 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\Release" -# PROP Intermediate_Dir "..\Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\Zend" /I "..\regex\\" /I "..\..\bindlib_w32" /I "..\TSRM" /D "NDEBUG" /D "_CONSOLE" /D ZEND_DEBUG=0 /D "MSVC5" /D "WIN32" /D "_MBCS" /D "ZEND_WIN32" /D "PHP_WIN32" /Fr /FD /c -# SUBTRACT CPP /YX /Yc /Yu -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 php5nts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:3.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release\php.exe" /libpath:"..\Release" - -!ELSEIF "$(CFG)" == "php5 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "c:\php-fcgi" -# PROP Intermediate_Dir "..\Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I ".." /I "..\main" /I "..\Zend" /I "..\regex\\" /I "..\..\bindlib_w32" /I "..\TSRM" /D "DEBUG" /D "_DEBUG" /D "_CONSOLE" /D "MSVC5" /D "PHP_WIN32" /D ZEND_DEBUG=1 /D "ZEND_WIN32" /D "WIN32" /D "_MBCS" /FR /FD /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /i "c:\include" /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5nts_debug.lib /nologo /version:4.0 /subsystem:console /debug /machine:I386 /nodefaultlib:"libcd" /nodefaultlib:"libcmt" /out:"c:\php-fcgi\php.exe" /pdbtype:sept /libpath:"..\Debug" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "php5 - Win32 Release_inline" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "php5___Win32_Release_inline" -# PROP BASE Intermediate_Dir "php5___Win32_Release_inline" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\Release_inline" -# PROP Intermediate_Dir "..\Release_inline" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "Zend" /I "." /I "regex\\" /I "..\bindlib_w32" /D "NDEBUG" /D "MSVC5" /D "_CONSOLE" /D "WIN32" /D "_MBCS" /D ZEND_DEBUG=0 /Fr /FD /c -# SUBTRACT BASE CPP /YX /Yc /Yu -# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\Zend" /I "..\regex\\" /I "..\..\bindlib_w32" /I "..\TSRM" /D "NDEBUG" /D "_CONSOLE" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D "MSVC5" /D "WIN32" /D "_MBCS" /D "ZEND_WIN32" /D "PHP_WIN32" /Fr /FD /c -# SUBTRACT CPP /YX /Yc /Yu -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 php5nts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:3.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"Release\php.exe" /libpath:"Release" -# ADD LINK32 php5nts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:3.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release\php.exe" /libpath:"..\Release_inline" - -!ENDIF - -# Begin Target - -# Name "php5 - Win32 Release" -# Name "php5 - Win32 Debug" -# Name "php5 - Win32 Release_inline" -# Begin Group "Source Files" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=..\sapi\cgi\cgi_main.c -# End Source File -# Begin Source File - -SOURCE=..\sapi\cgi\getopt.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter ".h" -# End Group -# End Target -# End Project diff --git a/win32/php5.dsw b/win32/php5.dsw deleted file mode 100644 index d6efc98ee2398..0000000000000 --- a/win32/php5.dsw +++ /dev/null @@ -1,107 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "TSRM"=..\TSRM\TSRM.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "Zend"=..\Zend\Zend.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name TSRM - End Project Dependency -}}} - -############################################################################### - -Project: "fastcgi"=..\sapi\fastcgi\fastcgi.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name php5dll - End Project Dependency - Begin Project Dependency - Project_Dep_Name TSRM - End Project Dependency - Begin Project Dependency - Project_Dep_Name Zend - End Project Dependency -}}} - -############################################################################### - -Project: "php5"=.\php5.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name php5dll - End Project Dependency - Begin Project Dependency - Project_Dep_Name Zend - End Project Dependency - Begin Project Dependency - Project_Dep_Name TSRM - End Project Dependency -}}} - -############################################################################### - -Project: "php5dll"=.\php5dll.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name Zend - End Project Dependency - Begin Project Dependency - Project_Dep_Name libmysql - End Project Dependency - Begin Project Dependency - Project_Dep_Name TSRM - End Project Dependency -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/win32/php5dll.dsp b/win32/php5dll.dsp deleted file mode 100644 index 9a3bfd57d5cbc..0000000000000 --- a/win32/php5dll.dsp +++ /dev/null @@ -1,1659 +0,0 @@ -# Microsoft Developer Studio Project File - Name="php5dll" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=php5dll - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "php5dll.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "php5dll.mak" CFG="php5dll - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "php5dll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "php5dll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "php5dll - Win32 Release_inline" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "c:\php-fcgi\" -# PROP Intermediate_Dir "..\Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /D "PHP_EXPORTS" /D "LIBZEND_EXPORTS" /D "SAPI_EXPORTS" /D "TSRM_EXPORTS" /D "MSVC5" /D "PHP_WIN32" /D ZEND_DEBUG=1 /D "ZEND_WIN32" /D "WIN32" /D "_MBCS" /FR /YX /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x40d /d "_DEBUG" -# ADD RSC /l 0x40d /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Zend.lib resolv.lib TSRM.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"libcmt" /nodefaultlib:"libc" /nodefaultlib:"libcmtd" /out:"c:\php-fcgi\php5nts_debug.dll" /pdbtype:sept /libpath:"..\TSRM\Debug" /libpath:"..\Zend\Debug" /libpath:"..\..\bindlib_w32\Debug" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\Release" -# PROP Intermediate_Dir "..\Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\Zend" /I "..\regex" /I "..\..\bindlib_w32" /I "..\TSRM" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLL_EXPORTS" /D "PHP_EXPORTS" /D "SAPI_EXPORTS" /D "LIBZEND_EXPORTS" /D ZEND_DEBUG=0 /D "MSVC5" /D "WIN32" /D "_MBCS" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x40d /d "NDEBUG" -# ADD RSC /l 0x40d /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Zend.lib resolv.lib tsrm.lib /nologo /dll /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release\php5nts.dll" /libpath:"..\Zend\Release" /libpath:"..\TSRM\Release_TS" /libpath:"..\..\bindlib_w32\Release" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "php5dll___Win32_Release_inline" -# PROP BASE Intermediate_Dir "php5dll___Win32_Release_inline" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\Release_inline" -# PROP Intermediate_Dir "..\Release_inline" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "Zend" /I "." /I "regex" /I "..\bindlib_w32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /D "MSVC5" /D "PHP_EXPORTS" /D "LIBZEND_EXPORTS" /D "SAPI_EXPORTS" /D ZEND_DEBUG=0 /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /D "PHP_EXPORTS" /D "LIBZEND_EXPORTS" /D "SAPI_EXPORTS" /D "TSRM_EXPORTS" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D "MSVC5" /D "WIN32" /D "_MBCS" /D "ZEND_WIN32" /D "PHP_WIN32" /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x40d /d "NDEBUG" -# ADD RSC /l 0x40d /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Zend.lib resolv.lib /nologo /dll /machine:I386 /nodefaultlib:"libc.lib" /out:"Release/php5nts.dll" /libpath:"TSRM\Release" /libpath:"Zend\Release" /libpath:"..\bindlib_w32\Release" -# ADD LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Zend.lib tsrm.lib resolv.lib /nologo /dll /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release\php5nts.dll" /libpath:"..\Zend\Release_inline" /libpath:"..\TSRM\Release_TS_inline" /libpath:"..\..\bindlib_w32\Release" - -!ENDIF - -# Begin Target - -# Name "php5dll - Win32 Debug" -# Name "php5dll - Win32 Release" -# Name "php5dll - Win32 Release_inline" -# Begin Group "Core" - -# PROP Default_Filter "" -# Begin Group "Source Files" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\ext\standard\css.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\cyr_convert.c -# End Source File -# Begin Source File - -SOURCE="..\main\fopen_wrappers.c" -# End Source File -# Begin Source File - -SOURCE=..\main\internal_functions_win32.c -# End Source File -# Begin Source File - -SOURCE=..\main\main.c -# End Source File -# Begin Source File - -SOURCE=..\main\mergesort.c -# End Source File -# Begin Source File - -SOURCE=..\main\network.c -# End Source File -# Begin Source File - -SOURCE=..\main\output.c -# End Source File -# Begin Source File - -SOURCE=..\main\php_content_types.c -# End Source File -# Begin Source File - -SOURCE=..\main\php_ini.c -# End Source File -# Begin Source File - -SOURCE=..\main\php_logos.c -# End Source File -# Begin Source File - -SOURCE=..\main\php_open_temporary_file.c -# End Source File -# Begin Source File - -SOURCE=..\main\php_ticks.c -# End Source File -# Begin Source File - -SOURCE=..\main\php_variables.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\proc_open.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\quot_print.c -# End Source File -# Begin Source File - -SOURCE=..\main\reentrancy.c -# End Source File -# Begin Source File - -SOURCE=..\main\rfc1867.c -# End Source File -# Begin Source File - -SOURCE=..\main\SAPI.c -# End Source File -# Begin Source File - -SOURCE=..\main\snprintf.c -# End Source File -# Begin Source File - -SOURCE=..\main\spprintf.c -# End Source File -# Begin Source File - -SOURCE=..\main\streams.c -# End Source File -# Begin Source File - -SOURCE=..\main\memory_streams.c -# End Source File -# Begin Source File - -SOURCE=..\main\user_streams.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\filters.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\user_filters.c -# End Source File -# Begin Source File - -SOURCE=..\main\strlcat.c -# End Source File -# Begin Source File - -SOURCE=..\main\strlcpy.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\ext\standard\config.w32.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\css.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\cyr_convert.h -# End Source File -# Begin Source File - -SOURCE=..\main\getopt.h -# End Source File -# Begin Source File - -SOURCE=..\main\logos.h -# End Source File -# Begin Source File - -SOURCE=..\main\main.h -# End Source File -# Begin Source File - -SOURCE=..\main\output.h -# End Source File -# Begin Source File - -SOURCE=..\main\php.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_content_types.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_globals.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_ini.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_logos.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_open_temporary_file.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_realpath.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_ticks.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_variables.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\quot_print.h -# End Source File -# Begin Source File - -SOURCE=..\main\rfc1867.h -# End Source File -# Begin Source File - -SOURCE=..\main\SAPI.h -# End Source File -# Begin Source File - -SOURCE=..\main\snprintf.h -# End Source File -# Begin Source File - -SOURCE=..\main\spprintf.h -# End Source File -# Begin Source File - -SOURCE=..\main\win95nt.h -# End Source File -# End Group -# End Group -# Begin Group "Function Modules" - -# PROP Default_Filter "" -# Begin Group "Source Files No. 1" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\ext\standard\array.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\assert.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\base64.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\basic_functions.c -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\bcmath.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\browscap.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\crc32.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\credits.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\datetime.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\dir.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\dl.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\dns.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\exec.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\file.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\filestat.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\flock_compat.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\formatted_print.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\fsock.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\ftp_fopen_wrapper.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\head.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\html.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\http_fopen_wrapper.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\image.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\incomplete_class.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\info.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\iptc.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\lcg.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\levenshtein.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\link.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\mail.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\math.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\md5.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\metaphone.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\microtime.c -# End Source File -# Begin Source File - -SOURCE=..\ext\session\mod_files.c -# End Source File -# Begin Source File - -SOURCE=..\ext\session\mod_user.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\pack.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\pageinfo.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_fopen_wrapper.c -# End Source File -# Begin Source File - -SOURCE=..\ext\odbc\php_odbc.c -# End Source File -# Begin Source File - -SOURCE=..\ext\pcre\php_pcre.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# ADD CPP /D "STATIC" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\rand.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\reg.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\scanf.c -# End Source File -# Begin Source File - -SOURCE=..\ext\session\session.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\soundex.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\string.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\strnatcmp.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\syslog.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\type.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\uniqid.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\url.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\url_scanner.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\url_scanner_ex.c -# ADD CPP /W2 -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\var.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\var_unserializer.c -# ADD CPP /W2 -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\versioning.c -# End Source File -# End Group -# Begin Group "Header Files No. 1" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\ext\standard\base64.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\basic_functions.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\datetime.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\dl.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\dns.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\exec.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\file.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\flock_compat.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\fsock.h -# End Source File -# Begin Source File - -SOURCE=..\functions\global.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\head.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\html.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\md5.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\mime.h -# End Source File -# Begin Source File - -SOURCE=..\ext\session\mod_user.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\pageinfo.h -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\php_bcmath.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_dir.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_filestat.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_fopen_wrappers.h -# End Source File -# Begin Source File - -SOURCE=..\ext\ldap\php_ldap.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_mail.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_metaphone.h -# End Source File -# Begin Source File - -SOURCE=..\ext\odbc\php_odbc.h -# End Source File -# Begin Source File - -SOURCE=..\ext\pcre\php_pcre.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_string.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_syslog.h -# End Source File -# Begin Source File - -SOURCE=..\functions\phpdir.h -# End Source File -# Begin Source File - -SOURCE=..\functions\phpmath.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\reg.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\scanf.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\type.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\uniqid.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\url.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\url_scanner.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\url_scanner_ex.h -# End Source File -# End Group -# Begin Group "Regular Expressions" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\regex\regcomp.c -# End Source File -# Begin Source File - -SOURCE=..\regex\regerror.c -# End Source File -# Begin Source File - -SOURCE=..\regex\regexec.c -# End Source File -# Begin Source File - -SOURCE=..\regex\regfree.c -# End Source File -# End Group -# Begin Group "PCRE" - -# PROP Default_Filter "" -# Begin Group "Source Files No. 3" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=..\ext\pcre\pcrelib\chartables.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# ADD CPP /D "STATIC" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\pcre\pcrelib\get.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# ADD CPP /D "STATIC" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\pcre\pcrelib\maketables.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# ADD CPP /D "STATIC" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\pcre\pcrelib\pcre.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# ADD CPP /D "STATIC" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\pcre\pcrelib\study.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# ADD CPP /D "STATIC" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -!ENDIF - -# End Source File -# End Group -# Begin Group "Header Files No. 3" - -# PROP Default_Filter ".h" -# Begin Source File - -SOURCE=..\ext\pcre\pcrelib\internal.h -# End Source File -# Begin Source File - -SOURCE=..\ext\pcre\pcrelib\pcre.h -# End Source File -# End Group -# End Group -# Begin Group "XML" - -# PROP Default_Filter "" -# Begin Group "Source Files No. 4" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=..\ext\ctype\ctype.c -# End Source File -# Begin Source File - -SOURCE=..\ext\overload\overload.c -# End Source File -# Begin Source File - -SOURCE=..\ext\tokenizer\tokenizer.c -# End Source File -# Begin Source File - -SOURCE=..\ext\wddx\wddx.c -# End Source File -# Begin Source File - -SOURCE=..\ext\xml\compat.c - -# End Source File -# Begin Source File - -SOURCE=..\ext\xml\xml.c -# End Source File -# End Group -# Begin Group "Header Files No. 4" - -# PROP Default_Filter ".h" -# Begin Source File - -SOURCE=..\ext\xml\php_xml.h -# End Source File -# End Group -# End Group -# Begin Group "FTP" - -# PROP Default_Filter "" -# Begin Group "Source Files No. 6" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=..\ext\ftp\ftp.c -# End Source File -# Begin Source File - -SOURCE=..\ext\ftp\php_ftp.c -# End Source File -# End Group -# Begin Group "Header Files No. 6" - -# PROP Default_Filter ".h" -# Begin Source File - -SOURCE=..\ext\ftp\ftp.h -# End Source File -# Begin Source File - -SOURCE=..\ext\ftp\php_ftp.h -# End Source File -# End Group -# End Group -# Begin Group "Calendar" - -# PROP Default_Filter "" -# Begin Group "Source Files No. 7" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=..\ext\calendar\cal_unix.c -# End Source File -# Begin Source File - -SOURCE=..\ext\calendar\calendar.c -# End Source File -# Begin Source File - -SOURCE=..\ext\calendar\dow.c -# End Source File -# Begin Source File - -SOURCE=..\ext\calendar\easter.c -# End Source File -# Begin Source File - -SOURCE=..\ext\calendar\french.c -# End Source File -# Begin Source File - -SOURCE=..\ext\calendar\gregor.c -# End Source File -# Begin Source File - -SOURCE=..\ext\calendar\jewish.c -# End Source File -# Begin Source File - -SOURCE=..\ext\calendar\julian.c -# End Source File -# End Group -# Begin Group "Header Files No. 7" - -# PROP Default_Filter ".h" -# Begin Source File - -SOURCE=..\ext\calendar\php_calendar.h -# End Source File -# Begin Source File - -SOURCE=..\ext\calendar\sdncal.h -# End Source File -# End Group -# End Group -# Begin Group "bcmath" - -# PROP Default_Filter "" -# Begin Group "Source Files No. 8" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\add.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\compare.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\debug.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\div.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\divmod.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\doaddsub.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\init.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\int2num.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\nearzero.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\neg.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\num2long.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\num2str.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\outofmem.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\output.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\raise.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\raisemod.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\recmul.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\rmzero.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\rt.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\sqrt.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\str2num.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\sub.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\zero.c - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# End Group -# Begin Group "Header Files No. 8" - -# PROP Default_Filter ".h" -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\bcmath.h - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\config.h - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\private.h - -!IF "$(CFG)" == "php5dll - Win32 Debug" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release" - -!ELSEIF "$(CFG)" == "php5dll - Win32 Release_inline" - -# PROP Intermediate_Dir "..\Release_inline_bcmath" - -!ENDIF - -# End Source File -# End Group -# End Group -# End Group -# Begin Group "Win32" - -# PROP Default_Filter "" -# Begin Group "Source Files No. 2" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\ext\com\COM.c -# End Source File -# Begin Source File - -SOURCE=..\ext\com\conversion.c -# End Source File -# Begin Source File - -SOURCE=..\win32\readdir.c -# End Source File -# Begin Source File - -SOURCE=..\win32\registry.c -# End Source File -# Begin Source File - -SOURCE=..\win32\sendmail.c -# End Source File -# Begin Source File - -SOURCE=..\win32\time.c -# End Source File -# Begin Source File - -SOURCE=..\ext\com\VARIANT.c -# End Source File -# Begin Source File - -SOURCE=..\win32\wfile.c -# End Source File -# Begin Source File - -SOURCE=..\ext\snmp\winsnmp.c -# End Source File -# Begin Source File - -SOURCE=..\win32\winutil.c -# End Source File -# Begin Source File - -SOURCE=..\win32\wsyslog.c -# End Source File -# End Group -# Begin Group "Header Files No. 2" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\ext\com\com.h -# End Source File -# Begin Source File - -SOURCE=..\ext\com\conversion.h -# End Source File -# Begin Source File - -SOURCE=..\win32\grp.h -# End Source File -# Begin Source File - -SOURCE=..\win32\param.h -# End Source File -# Begin Source File - -SOURCE=..\ext\com\php_COM.h -# End Source File -# Begin Source File - -SOURCE=..\win32\php_registry.h -# End Source File -# Begin Source File - -SOURCE=..\ext\com\php_VARIANT.h -# End Source File -# Begin Source File - -SOURCE=..\ext\com\php_versioning.h -# End Source File -# Begin Source File - -SOURCE=..\win32\readdir.h -# End Source File -# Begin Source File - -SOURCE=..\win32\sendmail.h -# End Source File -# Begin Source File - -SOURCE=..\win32\syslog.h -# End Source File -# Begin Source File - -SOURCE=..\win32\time.h -# End Source File -# Begin Source File - -SOURCE=..\win32\unistd.h -# End Source File -# Begin Source File - -SOURCE=..\ext\com\variant.h -# End Source File -# Begin Source File - -SOURCE=..\win32\wfile.h -# End Source File -# End Group -# End Group -# Begin Group "Text Files" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\ChangeLog -# End Source File -# Begin Source File - -SOURCE=..\LICENSE -# End Source File -# End Group -# Begin Group "Support" - -# PROP Default_Filter "" -# End Target -# End Project diff --git a/win32/php5dllts.dsp b/win32/php5dllts.dsp deleted file mode 100644 index 620ba54bbd6aa..0000000000000 --- a/win32/php5dllts.dsp +++ /dev/null @@ -1,2371 +0,0 @@ -# Microsoft Developer Studio Project File - Name="php5dllts" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=php5dllts - Win32 Debug_TS -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "php5dllts.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "php5dllts.mak" CFG="php5dllts - Win32 Debug_TS" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "php5dllts - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "php5dllts - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "php5dllts - Win32 Release_TS_inline" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "php5dllts - Win32 Release_TSDbg" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_TS" -# PROP BASE Intermediate_Dir "Debug_TS" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\Debug_TS" -# PROP Intermediate_Dir "Debug_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\..\zlib" /I "..\Zend" /I "..\TSRM" /I "..\..\libxml\include" /I "..\ext\sqlite\libsqlite\src" /D "_DEBUG" /D ZEND_DEBUG=1 /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /D "PHP_EXPORTS" /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D "SAPI_EXPORTS" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /D "LIBXML_THREAD_ENABLED" /D "LIBXML_STATIC" /FR /YX /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x40d /d "_DEBUG" -# ADD RSC /l 0x40d /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib ws2_32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib zlib.lib libxml2_a.lib Urlmon.lib libsqlite.lib iconv_a.lib /nologo /version:4.0 /dll /debug /machine:I386 /nodefaultlib:"libcmt" /nodefaultlib:"msvcrt" /out:"..\Debug_TS\php5ts_debug.dll" /pdbtype:sept /libpath:"..\TSRM\Debug_TS" /libpath:"..\Zend\Debug_TS" /libpath:"..\..\bindlib_w32\Debug" /libpath:"Debug_TS" /libpath:"..\..\zlib\Debug" /libpath:"..\..\libxml\lib\Debug" /libpath:"..\ext\sqlite\Debug_TS" /libpath:"..\..\libiconv\lib" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_TS" -# PROP BASE Intermediate_Dir "Release_TS" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\Release_TS" -# PROP Intermediate_Dir "Release_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\..\zlib" /I "..\Zend" /I "..\TSRM" /I "..\..\libxml\include" /I "..\ext\sqlite\libsqlite\src" /D "NDEBUG" /D ZEND_DEBUG=0 /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /D "PHP_EXPORTS" /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D "SAPI_EXPORTS" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /D "LIBXML_STATIC" /FR /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x40d /d "NDEBUG" -# ADD RSC /l 0x40d /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib ws2_32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib zlib.lib libxml2_a.lib Urlmon.lib libsqlite.lib iconv_a.lib /nologo /version:4.0 /dll /machine:I386 /nodefaultlib:"libcmt" /out:"..\Release_TS\php5ts.dll" /libpath:"..\TSRM\Release_TS" /libpath:"..\Zend\Release_TS" /libpath:"Release_TS" /libpath:"..\ext\sqlite\Release_TS" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\..\zlib\Release" /libpath:"..\..\libxml\lib\Release" /libpath:"..\..\libiconv\lib" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "php5dllts___Win32_Release_TS_inline" -# PROP BASE Intermediate_Dir "php5dllts___Win32_Release_TS_inline" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\Release_TS_inline" -# PROP Intermediate_Dir "Release_TS_inline" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "regex" /I "..\bindlib_w32" /I "Zend" /I "tsrm" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /D "MSVC5" /D "PHP_EXPORTS" /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D "SAPI_EXPORTS" /D "ZTS" /D "WIN32" /D "_MBCS" /D ZEND_DEBUG=0 /FR /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\..\zlib" /I "..\Zend" /I "..\TSRM" /I "..\..\libxml\include" /I "..\ext\sqlite\libsqlite\src" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /D "PHP_EXPORTS" /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D "SAPI_EXPORTS" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /D "LIBXML_THREAD_ENABLED" /D "LIBXML_STATIC" /FR /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x40d /d "NDEBUG" -# ADD RSC /l 0x40d /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib /nologo /dll /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libcmt.lib" /out:"Release_TS/php5ts.dll" /libpath:"TSRM\Release_TS" /libpath:"Zend\Release_TS" /libpath:"..\bindlib_w32\Release" -# ADD LINK32 kernel32.lib user32.lib gdi32.lib ws2_32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib zlib.lib libxml2_a.lib Urlmon.lib libsqlite.lib iconv_a.lib /nologo /version:4.0 /dll /machine:I386 /nodefaultlib:"libcmt" /out:"..\Release_TS_inline\php5ts.dll" /libpath:"..\TSRM\Release_TS_inline" /libpath:"..\Zend\Release_TS_inline" /libpath:"Release_TS_Inline" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\..\zlib\Release" /libpath:"..\..\libxml\lib\Release" /libpath:"..\..\libiconv\lib" /libpath:"..\ext\sqlite\Release_TS" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "php5dllts___Win32_Release_TSDbg" -# PROP BASE Intermediate_Dir "php5dllts___Win32_Release_TSDbg" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\Release_TSDbg" -# PROP Intermediate_Dir "Release_TSDbg" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /D "PHP_EXPORTS" /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D "SAPI_EXPORTS" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /FR /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /Zi /Od /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\..\zlib" /I "..\Zend" /I "..\TSRM" /I "..\..\libxml\include" /I "..\ext\sqlite\libsqlite\src" /D "NDEBUG" /D ZEND_DEBUG=0 /D "_WINDOWS" /D "_USRDLL" /D "PHP5DLLTS_EXPORTS" /D "PHP_EXPORTS" /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D "SAPI_EXPORTS" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /D "LIBXML_THREAD_ENABLED" /D "LIBXML_STATIC" /FR /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x40d /d "NDEBUG" -# ADD RSC /l 0x40d /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib /nologo /version:4.0 /dll /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libcmt.lib" /out:"..\Release_TS\php5ts.dll" /libpath:"..\TSRM\Release_TS" /libpath:"..\Zend\Release_TS" /libpath:"..\..\bindlib_w32\Release" /libpath:"Release_TS" -# ADD LINK32 kernel32.lib user32.lib gdi32.lib ws2_32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ZendTS.lib TSRM.lib resolv.lib zlib.lib libxml2_a.lib Urlmon.lib libsqlite.lib iconv_a.lib /nologo /version:4.0 /dll /debug /machine:I386 /nodefaultlib:"libcmt" /out:"..\Release_TSDbg\php5ts.dll" /libpath:"..\TSRM\Release_TSDbg" /libpath:"..\Zend\Release_TSDbg" /libpath:"Release_TSDbg" /libpath:"..\ext\sqlite\Release_TSDbg" /libpath:"..\..\bindlib_w32\Release" /libpath:"..\..\zlib\Release" /libpath:"..\..\libxml\lib\Release" /libpath:"..\..\libiconv\lib" - -!ENDIF - -# Begin Target - -# Name "php5dllts - Win32 Debug_TS" -# Name "php5dllts - Win32 Release_TS" -# Name "php5dllts - Win32 Release_TS_inline" -# Name "php5dllts - Win32 Release_TSDbg" -# Begin Group "Core" - -# PROP Default_Filter "" -# Begin Group "Source Files" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\ext\standard\css.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\cyr_convert.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\filters.c -# End Source File -# Begin Source File - -SOURCE="..\main\fopen_wrappers.c" -# End Source File -# Begin Source File - -SOURCE=.\globals.c -# End Source File -# Begin Source File - -SOURCE=..\main\internal_functions_win32.c -# End Source File -# Begin Source File - -SOURCE=..\main\main.c -# End Source File -# Begin Source File - -SOURCE=..\main\mergesort.c -# End Source File -# Begin Source File - -SOURCE=..\main\network.c -# End Source File -# Begin Source File - -SOURCE=..\main\output.c -# End Source File -# Begin Source File - -SOURCE=..\main\php_content_types.c -# End Source File -# Begin Source File - -SOURCE=..\main\php_ini.c -# End Source File -# Begin Source File - -SOURCE=..\main\php_logos.c -# End Source File -# Begin Source File - -SOURCE=..\main\php_open_temporary_file.c -# End Source File -# Begin Source File - -SOURCE=..\main\php_scandir.c -# End Source File -# Begin Source File - -SOURCE=..\main\php_ticks.c -# End Source File -# Begin Source File - -SOURCE=..\main\php_variables.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\proc_open.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\quot_print.c -# End Source File -# Begin Source File - -SOURCE=..\main\reentrancy.c -# End Source File -# Begin Source File - -SOURCE=..\main\rfc1867.c -# End Source File -# Begin Source File - -SOURCE=..\main\SAPI.c -# End Source File -# Begin Source File - -SOURCE=..\main\snprintf.c -# End Source File -# Begin Source File - -SOURCE=..\main\spprintf.c -# End Source File -# Begin Source File - -SOURCE=..\main\strlcat.c -# End Source File -# Begin Source File - -SOURCE=..\main\strlcpy.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\main\config.w32.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\css.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\cyr_convert.h -# End Source File -# Begin Source File - -SOURCE="..\main\fopen_wrappers.h" -# End Source File -# Begin Source File - -SOURCE=..\main\getopt.h -# End Source File -# Begin Source File - -SOURCE=..\main\logos.h -# End Source File -# Begin Source File - -SOURCE=..\main\output.h -# End Source File -# Begin Source File - -SOURCE=..\main\php.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_compat.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_content_types.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_globals.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_ini.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_logos.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_main.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_open_temporary_file.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_output.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_regex.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_scandir.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_streams.h -# End Source File -# Begin Source File - -SOURCE=..\main\php_variables.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\quot_print.h -# End Source File -# Begin Source File - -SOURCE=..\main\rfc1867.h -# End Source File -# Begin Source File - -SOURCE=..\main\SAPI.h -# End Source File -# Begin Source File - -SOURCE=..\main\snprintf.h -# End Source File -# Begin Source File - -SOURCE=..\main\spprintf.h -# End Source File -# Begin Source File - -SOURCE=..\main\win95nt.h -# End Source File -# End Group -# End Group -# Begin Group "Function Modules" - -# PROP Default_Filter "" -# Begin Group "PCRE" - -# PROP Default_Filter "" -# Begin Group "Source Files No. 3" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=..\ext\pcre\pcrelib\chartables.c -# ADD CPP /D "STATIC" /D "SUPPORT_UTF8" -# End Source File -# Begin Source File - -SOURCE=..\ext\pcre\pcrelib\get.c -# ADD CPP /D "STATIC" /D "SUPPORT_UTF8" /D LINK_SIZE=2 -# End Source File -# Begin Source File - -SOURCE=..\ext\pcre\pcrelib\maketables.c -# ADD CPP /D "STATIC" /D "SUPPORT_UTF8" /D LINK_SIZE=2 -# End Source File -# Begin Source File - -SOURCE=..\ext\pcre\pcrelib\pcre.c -# ADD CPP /D "STATIC" /D "SUPPORT_UTF8" /D LINK_SIZE=2 -# End Source File -# Begin Source File - -SOURCE=..\ext\pcre\pcrelib\study.c -# ADD CPP /D "STATIC" /D "SUPPORT_UTF8" /D LINK_SIZE=2 -# End Source File -# End Group -# Begin Group "Header Files No. 3" - -# PROP Default_Filter ".h" -# Begin Source File - -SOURCE=..\ext\pcre\pcrelib\internal.h -# End Source File -# Begin Source File - -SOURCE=..\ext\pcre\pcrelib\pcre.h -# End Source File -# End Group -# End Group -# Begin Group "DOM" - -# PROP Default_Filter "" -# Begin Group "DOM Source Files" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=..\ext\dom\attr.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\cdatasection.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\characterdata.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\comment.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\document.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\documentfragment.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\documenttype.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\dom_iterators.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\domconfiguration.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\domerror.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\domerrorhandler.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\domexception.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\domimplementation.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\domimplementationlist.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\domimplementationsource.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\domlocator.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\domstringlist.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\element.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\entity.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\entityreference.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\namednodemap.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\namelist.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\node.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\nodelist.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\notation.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\php_dom.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\processinginstruction.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\string_extend.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\text.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\typeinfo.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\userdatahandler.c -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\xpath.c -# End Source File -# End Group -# Begin Group "DOM Header Files" - -# PROP Default_Filter ".h" -# Begin Source File - -SOURCE=..\ext\dom\dom_ce.h -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\dom_fe.h -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\dom_properties.h -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\php_dom.h -# End Source File -# Begin Source File - -SOURCE=..\ext\dom\xml_common.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Group -# Begin Group "SimpleXML" - -# PROP Default_Filter "" -# Begin Group "SimpleXML Source Files" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=..\ext\simplexml\simplexml.c -# End Source File -# End Group -# Begin Group "SimpleXML Header Files" - -# PROP Default_Filter ".h" -# Begin Source File - -SOURCE=..\ext\simplexml\php_simplexml.h -# End Source File -# End Group -# Begin Group "Resource Files No. 1" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Group -# Begin Group "Regular Expressions" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\regex\regcomp.c -# End Source File -# Begin Source File - -SOURCE=..\regex\regerror.c -# End Source File -# Begin Source File - -SOURCE=..\regex\regexec.c -# End Source File -# Begin Source File - -SOURCE=..\regex\regfree.c -# End Source File -# End Group -# Begin Group "XML" - -# PROP Default_Filter "" -# Begin Group "Source Files No. 4" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=..\ext\xml\compat.c -# End Source File -# Begin Source File - -SOURCE=..\ext\ctype\ctype.c -# End Source File -# Begin Source File - -SOURCE=..\ext\tokenizer\tokenizer.c -# End Source File -# Begin Source File - -SOURCE=..\ext\wddx\wddx.c -# End Source File -# Begin Source File - -SOURCE=..\ext\xml\xml.c -# End Source File -# End Group -# Begin Group "Header Files No. 4" - -# PROP Default_Filter ".h" -# Begin Source File - -SOURCE=..\ext\wddx\php_wddx.h -# End Source File -# Begin Source File - -SOURCE=..\ext\wddx\php_wddx_api.h -# End Source File -# Begin Source File - -SOURCE=..\ext\xml\php_xml.h -# End Source File -# End Group -# End Group -# Begin Group "FTP" - -# PROP Default_Filter "" -# Begin Group "Source Files No. 6" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=..\ext\ftp\ftp.c -# End Source File -# Begin Source File - -SOURCE=..\ext\ftp\php_ftp.c -# End Source File -# End Group -# Begin Group "Header Files No. 6" - -# PROP Default_Filter ".h" -# Begin Source File - -SOURCE=..\ext\ftp\ftp.h -# End Source File -# Begin Source File - -SOURCE=..\ext\ftp\php_ftp.h -# End Source File -# End Group -# End Group -# Begin Group "Calendar" - -# PROP Default_Filter "" -# Begin Group "Source Files No. 7" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=..\ext\calendar\cal_unix.c -# End Source File -# Begin Source File - -SOURCE=..\ext\calendar\calendar.c -# End Source File -# Begin Source File - -SOURCE=..\ext\calendar\dow.c -# End Source File -# Begin Source File - -SOURCE=..\ext\calendar\easter.c -# End Source File -# Begin Source File - -SOURCE=..\ext\calendar\french.c -# End Source File -# Begin Source File - -SOURCE=..\ext\calendar\gregor.c -# End Source File -# Begin Source File - -SOURCE=..\ext\calendar\jewish.c -# End Source File -# Begin Source File - -SOURCE=..\ext\calendar\julian.c -# End Source File -# End Group -# Begin Group "Header Files No. 7" - -# PROP Default_Filter ".h" -# Begin Source File - -SOURCE=..\ext\calendar\php_calendar.h -# End Source File -# Begin Source File - -SOURCE=..\ext\calendar\sdncal.h -# End Source File -# End Group -# End Group -# Begin Group "bcmath" - -# PROP Default_Filter "" -# Begin Group "Source Files No. 8" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\add.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\compare.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\debug.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\div.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\divmod.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\doaddsub.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\init.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\int2num.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\nearzero.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\neg.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\num2long.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\num2str.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\outofmem.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\output.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\raise.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\raisemod.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\recmul.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\rmzero.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\rt.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\sqrt.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\str2num.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\sub.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\zero.c - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# ADD BASE CPP /I "..\ext\bcmath\libbcmath\src" -# ADD CPP /I "..\ext\bcmath\libbcmath\src" - -!ENDIF - -# End Source File -# End Group -# Begin Group "Header Files No. 8" - -# PROP Default_Filter ".h" -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\bcmath.h - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\config.h - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\libbcmath\src\private.h - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Debug_TS" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS_inline" - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -# PROP BASE Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" -# PROP Intermediate_Dir "ext\bcmath\libbcmath\Release_TS" - -!ENDIF - -# End Source File -# End Group -# End Group -# Begin Group "zlib" - -# PROP Default_Filter "" -# Begin Group "Source Files No. 10 Nr. 1" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\ext\zlib\zlib.c -# End Source File -# Begin Source File - -SOURCE=..\ext\zlib\zlib_filter.c -# End Source File -# Begin Source File - -SOURCE=..\ext\zlib\zlib_fopen_wrapper.c -# End Source File -# End Group -# Begin Group "Header Files No. 10 Nr. 1" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\ext\zlib\php_zlib.h -# End Source File -# End Group -# End Group -# Begin Group "Standard" - -# PROP Default_Filter "" -# Begin Group "Source Files No. 1" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\ext\standard\array.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\assert.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\base64.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\basic_functions.c -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\bcmath.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\browscap.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\crc32.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\credits.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\crypt.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\datetime.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\dir.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\dl.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\dns.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\exec.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\file.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\filestat.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\flock_compat.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\formatted_print.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\fsock.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\ftp_fopen_wrapper.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\head.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\html.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\http.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\http_fopen_wrapper.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\image.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\incomplete_class.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\info.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\iptc.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\lcg.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\levenshtein.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\link.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\mail.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\math.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\md5.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\metaphone.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\microtime.c -# End Source File -# Begin Source File - -SOURCE=..\ext\session\mod_files.c -# End Source File -# Begin Source File - -SOURCE=..\ext\session\mod_user.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\pack.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\pageinfo.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_fopen_wrapper.c -# End Source File -# Begin Source File - -SOURCE=..\ext\odbc\php_odbc.c -# End Source File -# Begin Source File - -SOURCE=..\ext\pcre\php_pcre.c -# ADD CPP /D "STATIC" -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\rand.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\reg.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\scanf.c -# End Source File -# Begin Source File - -SOURCE=..\ext\session\session.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\sha1.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\soundex.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\streamsfuncs.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\string.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\strnatcmp.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\sunfuncs.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\syslog.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\type.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\uniqid.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\url.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\url_scanner.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\url_scanner_ex.c -# ADD CPP /W2 -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\uuencode.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\var.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\var_unserializer.c -# ADD CPP /W2 -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\versioning.c -# End Source File -# End Group -# Begin Group "Header Files No. 1" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\ext\standard\base64.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\basic_functions.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\datetime.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\dl.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\dns.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\exec.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\file.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\flock_compat.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\fsock.h -# End Source File -# Begin Source File - -SOURCE=..\functions\global.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\head.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\html.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\info.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\md5.h -# End Source File -# Begin Source File - -SOURCE=..\ext\session\mod_user.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\pageinfo.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_array.h -# End Source File -# Begin Source File - -SOURCE=..\ext\bcmath\php_bcmath.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_crypt.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_dir.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_filestat.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_fopen_wrappers.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_http.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_lcg.h -# End Source File -# Begin Source File - -SOURCE=..\ext\ldap\php_ldap.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_mail.h -# End Source File -# Begin Source File - -SOURCE=..\ext\odbc\php_odbc.h -# End Source File -# Begin Source File - -SOURCE=..\ext\odbc\php_odbc_includes.h -# End Source File -# Begin Source File - -SOURCE=..\ext\pcre\php_pcre.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_rand.h -# End Source File -# Begin Source File - -SOURCE=..\ext\session\php_session.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_string.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_sunfuncs.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\php_syslog.h -# End Source File -# Begin Source File - -SOURCE=..\functions\phpdir.h -# End Source File -# Begin Source File - -SOURCE=..\functions\phpmath.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\reg.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\scanf.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\sha1.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\type.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\uniqid.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\url.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\url_scanner.h -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\url_scanner_ex.h -# End Source File -# End Group -# End Group -# Begin Group "SQLite" - -# PROP Default_Filter "" -# Begin Group "Header Files No. 5" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\ext\sqlite\php_sqlite.h -# End Source File -# End Group -# Begin Group "Source Files No. 5" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\ext\sqlite\sess_sqlite.c -# End Source File -# Begin Source File - -SOURCE=..\ext\sqlite\sqlite.c -# End Source File -# End Group -# End Group -# Begin Group "LIBXML" - -# PROP Default_Filter "" -# Begin Group "Header Files No. 10" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\ext\libxml\php_libxml.h -# End Source File -# End Group -# Begin Group "Source Files No. 9" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\ext\libxml\libxml.c -# End Source File -# End Group -# End Group -# End Group -# Begin Group "Win32" - -# PROP Default_Filter "" -# Begin Group "Source Files No. 2" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\crypt_win32.c -# End Source File -# Begin Source File - -SOURCE=.\glob.c -# End Source File -# Begin Source File - -SOURCE=.\md5crypt.c -# End Source File -# Begin Source File - -SOURCE=..\win32\readdir.c -# End Source File -# Begin Source File - -SOURCE=..\win32\registry.c -# End Source File -# Begin Source File - -SOURCE=.\select.c -# End Source File -# Begin Source File - -SOURCE=..\win32\sendmail.c -# End Source File -# Begin Source File - -SOURCE=..\win32\time.c -# End Source File -# Begin Source File - -SOURCE=..\win32\wfile.c -# End Source File -# Begin Source File - -SOURCE=..\ext\snmp\winsnmp.c -# End Source File -# Begin Source File - -SOURCE=..\win32\winutil.c -# End Source File -# Begin Source File - -SOURCE=..\win32\wsyslog.c -# End Source File -# End Group -# Begin Group "Header Files No. 2" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=.\crypt_win32.h -# End Source File -# Begin Source File - -SOURCE=.\glob.h -# End Source File -# Begin Source File - -SOURCE=..\win32\grp.h -# End Source File -# Begin Source File - -SOURCE=..\win32\param.h -# End Source File -# Begin Source File - -SOURCE=..\win32\php_registry.h -# End Source File -# Begin Source File - -SOURCE=..\win32\readdir.h -# End Source File -# Begin Source File - -SOURCE=.\select.h -# End Source File -# Begin Source File - -SOURCE=..\win32\sendmail.h -# End Source File -# Begin Source File - -SOURCE=..\win32\syslog.h -# End Source File -# Begin Source File - -SOURCE=..\win32\time.h -# End Source File -# Begin Source File - -SOURCE=..\win32\unistd.h -# End Source File -# Begin Source File - -SOURCE=..\win32\wfile.h -# End Source File -# Begin Source File - -SOURCE=.\winutil.h -# End Source File -# End Group -# End Group -# Begin Group "Text Files" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\ChangeLog -# End Source File -# Begin Source File - -SOURCE=..\LICENSE -# End Source File -# Begin Source File - -SOURCE=..\NEWS -# End Source File -# Begin Source File - -SOURCE="..\php.ini-dist" -# End Source File -# Begin Source File - -SOURCE="..\php.ini-recommended" -# End Source File -# Begin Source File - -SOURCE="..\README.CVS-RULES" -# End Source File -# Begin Source File - -SOURCE=..\TODO -# End Source File -# End Group -# Begin Group "Support" - -# PROP Default_Filter "" -# End Group -# Begin Group "Streams" - -# PROP Default_Filter "" -# Begin Group "streams headers" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\main\streams\php_stream_context.h -# End Source File -# Begin Source File - -SOURCE=..\main\streams\php_stream_filter_api.h -# End Source File -# Begin Source File - -SOURCE=..\main\streams\php_stream_glob_wrapper.h -# End Source File -# Begin Source File - -SOURCE=..\main\streams\php_stream_mmap.h -# End Source File -# Begin Source File - -SOURCE=..\main\streams\php_stream_plain_wrapper.h -# End Source File -# Begin Source File - -SOURCE=..\main\streams\php_stream_transport.h -# End Source File -# Begin Source File - -SOURCE=..\main\streams\php_stream_userspace.h -# End Source File -# Begin Source File - -SOURCE=..\main\streams\php_streams_int.h -# End Source File -# End Group -# Begin Source File - -SOURCE=..\main\streams\cast.c -# End Source File -# Begin Source File - -SOURCE=..\main\streams\filter.c -# End Source File -# Begin Source File - -SOURCE=..\main\streams\glob_wrapper.c -# End Source File -# Begin Source File - -SOURCE=..\main\streams\memory.c -# End Source File -# Begin Source File - -SOURCE=..\main\streams\mmap.c -# End Source File -# Begin Source File - -SOURCE=..\main\streams\plain_wrapper.c -# End Source File -# Begin Source File - -SOURCE=..\main\streams\streams.c -# End Source File -# Begin Source File - -SOURCE=..\main\streams\transports.c -# End Source File -# Begin Source File - -SOURCE=..\ext\standard\user_filters.c -# End Source File -# Begin Source File - -SOURCE=..\main\streams\userspace.c -# End Source File -# Begin Source File - -SOURCE=..\main\streams\xp_socket.c -# End Source File -# End Group -# Begin Group "COM and DotNet" - -# PROP Default_Filter "" -# Begin Group "Header Files No. 9" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\ext\com_dotnet\com_saproxy.c -# End Source File -# Begin Source File - -SOURCE=..\ext\com_dotnet\com_wrapper.c -# End Source File -# Begin Source File - -SOURCE=..\ext\com_dotnet\php_com_dotnet.h -# End Source File -# Begin Source File - -SOURCE=..\ext\com_dotnet\php_com_dotnet_internal.h -# End Source File -# End Group -# Begin Source File - -SOURCE=..\ext\com_dotnet\com_com.c -# End Source File -# Begin Source File - -SOURCE=..\ext\com_dotnet\com_dotnet.c -# End Source File -# Begin Source File - -SOURCE=..\ext\com_dotnet\com_extension.c -# End Source File -# Begin Source File - -SOURCE=..\ext\com_dotnet\com_handlers.c -# End Source File -# Begin Source File - -SOURCE=..\ext\com_dotnet\com_iterator.c -# End Source File -# Begin Source File - -SOURCE=..\ext\com_dotnet\com_misc.c -# End Source File -# Begin Source File - -SOURCE=..\ext\com_dotnet\com_olechar.c -# End Source File -# Begin Source File - -SOURCE=..\ext\com_dotnet\com_persist.c -# End Source File -# Begin Source File - -SOURCE=..\ext\com_dotnet\com_typeinfo.c -# End Source File -# Begin Source File - -SOURCE=..\ext\com_dotnet\com_variant.c -# End Source File -# End Group -# Begin Source File - -SOURCE=.\php5dllts.rc -# End Source File -# Begin Source File - -SOURCE=.\php5dllts.rc2 -# End Source File -# Begin Source File - -SOURCE=.\phpts.def - -!IF "$(CFG)" == "php5dllts - Win32 Debug_TS" - -USERDEP__PHPTS="..\ext\sqlite\php_sqlite.def" -# Begin Custom Build - Generating $(InputPath) -InputPath=.\phpts.def - -"phpts.def" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - builddef.bat > phpts.def - -# End Custom Build - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS" - -USERDEP__PHPTS="..\ext\sqlite\php_sqlite.def" -# Begin Custom Build - Generating $(InputPath) -InputPath=.\phpts.def - -"phpts.def" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - builddef.bat > phpts.def - -# End Custom Build - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TS_inline" - -USERDEP__PHPTS="..\ext\sqlite\php_sqlite.def" -# Begin Custom Build - Generating $(InputPath) -InputPath=.\phpts.def - -"phpts.def" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - builddef.bat > phpts.def - -# End Custom Build - -!ELSEIF "$(CFG)" == "php5dllts - Win32 Release_TSDbg" - -USERDEP__PHPTS="..\ext\sqlite\php_sqlite.def" -# Begin Custom Build - Generating $(InputPath) -InputPath=.\phpts.def - -"phpts.def" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - builddef.bat > phpts.def - -# End Custom Build - -!ENDIF - -# End Source File -# End Target -# End Project diff --git a/win32/php5dllts.rc b/win32/php5dllts.rc deleted file mode 100644 index 2e01037eee342..0000000000000 --- a/win32/php5dllts.rc +++ /dev/null @@ -1,126 +0,0 @@ -//Microsoft Developer Studio generated resource script. - -// - -#include "resource.h" - - - -#define APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// - -// - -// Generated from the TEXTINCLUDE 2 resource. - -// - -#include "winres.h" - - - -///////////////////////////////////////////////////////////////////////////// - -#undef APSTUDIO_READONLY_SYMBOLS - - - -///////////////////////////////////////////////////////////////////////////// - -// English (U.S.) resources - - - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) - -#ifdef _WIN32 - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US - -#pragma code_page(1252) - -#endif //_WIN32 - - - -#ifdef APSTUDIO_INVOKED - -///////////////////////////////////////////////////////////////////////////// - -// - -// TEXTINCLUDE - -// - - - -1 TEXTINCLUDE DISCARDABLE - -BEGIN - - "resource.h\0" - -END - - - -2 TEXTINCLUDE DISCARDABLE - -BEGIN - - "#include ""php5dllts.rc2""\r\n" - - "\0" - -END - - - -3 TEXTINCLUDE DISCARDABLE - -BEGIN - - "\r\n" - - "\0" - -END - - - -#endif // APSTUDIO_INVOKED - - - -#endif // English (U.S.) resources - -///////////////////////////////////////////////////////////////////////////// - - - - - - - -#ifndef APSTUDIO_INVOKED - -///////////////////////////////////////////////////////////////////////////// - -// - -// Generated from the TEXTINCLUDE 3 resource. - -// - -#include "php5dllts.rc2" - - - -///////////////////////////////////////////////////////////////////////////// - -#endif // not APSTUDIO_INVOKED - - - diff --git a/win32/php5dllts.rc2 b/win32/php5dllts.rc2 deleted file mode 100644 index f86c9f784e26e..0000000000000 --- a/win32/php5dllts.rc2 +++ /dev/null @@ -1,61 +0,0 @@ -// -// php5dllts.RC2 - resources Microsoft Visual C++ does not edit directly -// - -#ifdef APSTUDIO_INVOKED - #error this file is not editable by Microsoft Visual C++ -#endif //APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// Add manually edited resources here... -#include "../main/php_version.h" - -#define XSTRVER4(maj, min, rel, build) #maj "." #min "." #rel "." #build -#define XSTRVER3(maj, min, rel) #maj "." #min "." #rel -#define STRVER4(maj, min, rel, build) XSTRVER4(maj, min, rel, build) -#define STRVER3(maj, min, rel) XSTRVER3(maj, min, rel) - -#ifndef _MAC -//Version -VS_VERSION_INFO VERSIONINFO - FILEVERSION PHP_MAJOR_VERSION,PHP_MINOR_VERSION,PHP_RELEASE_VERSION,PHP_RELEASE_VERSION - PRODUCTVERSION PHP_MAJOR_VERSION,PHP_MINOR_VERSION,PHP_RELEASE_VERSION,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG -#else - FILEFLAGS 0x0L -#endif - FILEOS VOS__WINDOWS32 - FILETYPE VFT_DLL - FILESUBTYPE VFT2_UNKNOWN -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "Comments", "\0" - VALUE "CompanyName", "The PHP Group\0" - VALUE "FileDescription", "PHP Script Interpreter\0" - VALUE "FileVersion", STRVER4(PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION, PHP_RELEASE_VERSION) - VALUE "InternalName", "php\0" - VALUE "LegalCopyright", "Copyright © 1997-2006 The PHP Group\0" - VALUE "LegalTrademarks", "php\0" - VALUE "OriginalFilename", "php5ts.dll\0" - VALUE "PrivateBuild", "\0" - VALUE "ProductName", "PHP Thread Safe\0" - VALUE "ProductVersion", STRVER3(PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION) - VALUE "SpecialBuild", PHP_EXTRA_VERSION "\0" - VALUE "URL", "http://www.php.net" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - -#endif // !_MAC - -///////////////////////////////////////////////////////////////////////////// diff --git a/win32/php5ts.dsp b/win32/php5ts.dsp deleted file mode 100644 index 3922904e6d91b..0000000000000 --- a/win32/php5ts.dsp +++ /dev/null @@ -1,187 +0,0 @@ -# Microsoft Developer Studio Project File - Name="php5ts" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=php5ts - Win32 Debug_TS -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "php5ts.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "php5ts.mak" CFG="php5ts - Win32 Debug_TS" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "php5ts - Win32 Release_TS" (based on "Win32 (x86) Console Application") -!MESSAGE "php5ts - Win32 Debug_TS" (based on "Win32 (x86) Console Application") -!MESSAGE "php5ts - Win32 Release_TS_inline" (based on "Win32 (x86) Console Application") -!MESSAGE "php5ts - Win32 Release_TSDbg" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "php5ts - Win32 Release_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_TS" -# PROP BASE Intermediate_Dir "Release_TS" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\Release_TS" -# PROP Intermediate_Dir "Release_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /I "..\sapi\cgi\libfcgi\include" /D FCGI_STATIC=1 /D PHP_FASTCGI=1 /D "NDEBUG" /D ZEND_DEBUG=0 /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /Fr /FD /c -# SUBTRACT CPP /YX /Yc /Yu -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 php5ts.lib winmm.lib ws2_32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release_TS\php.exe" /libpath:"..\Release_TS" - -!ELSEIF "$(CFG)" == "php5ts - Win32 Debug_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_TS" -# PROP BASE Intermediate_Dir "Debug_TS" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug_TS" -# PROP Intermediate_Dir "Debug_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /I "..\sapi\cgi\libfcgi\include" /D FCGI_STATIC=1 /D PHP_FASTCGI=1 /D "DEBUG" /D "_DEBUG" /D ZEND_DEBUG=1 /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /FR /FD /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /i "c:\include" /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 winmm.lib netapi32.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib /nologo /version:4.0 /subsystem:console /debug /machine:I386 /nodefaultlib:"libcd" /nodefaultlib:"libcmt" /out:"..\Debug_TS/php.exe" /pdbtype:sept /libpath:"..\Debug_TS" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "php5ts - Win32 Release_TS_inline" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "php5ts___Win32_Release_TS_inline" -# PROP BASE Intermediate_Dir "php5ts___Win32_Release_TS_inline" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\Release_TS_inline" -# PROP Intermediate_Dir "Release_TS_inline" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "regex" /I "..\bindlib_w32" /I "Zend" /I "tsrm" /D "NDEBUG" /D "MSVC5" /D "_CONSOLE" /D "ZTS" /D "WIN32" /D "_MBCS" /D ZEND_DEBUG=0 /Fr /FD /c -# SUBTRACT BASE CPP /YX /Yc /Yu -# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /I "..\sapi\cgi\libfcgi\include" /D FCGI_STATIC=1 /D PHP_FASTCGI=1 /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /Fr /FD /c -# SUBTRACT CPP /YX /Yc /Yu -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 php5ts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:3.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"Release_TS\php.exe" /libpath:"Release_TS" -# ADD LINK32 php5ts.lib winmm.lib ws2_32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release_TS_inline\php.exe" /libpath:"..\Release_TS_inline" - -!ELSEIF "$(CFG)" == "php5ts - Win32 Release_TSDbg" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "php5ts___Win32_Release_TSDbg" -# PROP BASE Intermediate_Dir "php5ts___Win32_Release_TSDbg" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\Release_TSDbg" -# PROP Intermediate_Dir "Release_TSDbg" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /Fr /FD /c -# SUBTRACT BASE CPP /YX /Yc /Yu -# ADD CPP /nologo /MD /W3 /GX /Zi /Od /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /I "..\sapi\cgi\libfcgi\include" /D FCGI_STATIC=1 /D PHP_FASTCGI=1 /D "NDEBUG" /D ZEND_DEBUG=0 /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /Fr /FD /c -# SUBTRACT CPP /YX /Yc /Yu -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 php5ts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release_TS\php.exe" /libpath:"..\Release_TS" -# ADD LINK32 php5ts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Ws2_32.lib /nologo /version:4.0 /subsystem:console /debug /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release_TSDbg\php.exe" /libpath:"..\Release_TSDbg" - -!ENDIF - -# Begin Target - -# Name "php5ts - Win32 Release_TS" -# Name "php5ts - Win32 Debug_TS" -# Name "php5ts - Win32 Release_TS_inline" -# Name "php5ts - Win32 Release_TSDbg" -# Begin Group "Source Files" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=..\sapi\cgi\cgi_main.c -# End Source File -# Begin Source File - -SOURCE=..\sapi\cgi\getopt.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter ".h" -# Begin Source File - -SOURCE=..\sapi\cgi\php_getopt.h -# End Source File -# End Group -# Begin Group "libfcgi" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\sapi\cgi\libfcgi\fcgiapp.c -# End Source File -# Begin Source File - -SOURCE=..\sapi\cgi\libfcgi\os_win32.c -# End Source File -# End Group -# Begin Source File - -SOURCE=.\php5ts.rc -# End Source File -# Begin Source File - -SOURCE=.\php5ts.rc2 -# End Source File -# End Target -# End Project diff --git a/win32/php5ts.dsw b/win32/php5ts.dsw deleted file mode 100644 index 61ccd1c24bccf..0000000000000 --- a/win32/php5ts.dsw +++ /dev/null @@ -1,227 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "EngineSelect"=.\EngineSelect.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "TSRM"=..\TSRM\TSRM.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "ZendTS"=..\Zend\ZendTS.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name TSRM - End Project Dependency - Begin Project Dependency - Project_Dep_Name EngineSelect - End Project Dependency -}}} - -############################################################################### - -Project: "libsqlite"=..\ext\sqlite\libsqlite\src\libsqlite.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "php5aolserver"=..\sapi\aolserver\php5aolserver.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name php5dllts - End Project Dependency -}}} - -############################################################################### - -Project: "php5apache"=..\sapi\apache\php5apache.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name php5dllts - End Project Dependency -}}} - -############################################################################### - -Project: "php5apache2"=..\SAPI\APACHE2HANDLER\php5apache2.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name php5dllts - End Project Dependency -}}} - -############################################################################### - -Project: "php5dllts"=.\php5dllts.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name ZendTS - End Project Dependency - Begin Project Dependency - Project_Dep_Name TSRM - End Project Dependency - Begin Project Dependency - Project_Dep_Name libsqlite - End Project Dependency -}}} - -############################################################################### - -Project: "php5isapi"=..\sapi\isapi\php5isapi.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name php5dllts - End Project Dependency -}}} - -############################################################################### - -Project: "php5nsapi"=..\sapi\nsapi\php5nsapi.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name php5dllts - End Project Dependency -}}} - -############################################################################### - -Project: "php5pi3web"=..\sapi\pi3web\php5pi3web.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name php5dllts - End Project Dependency -}}} - -############################################################################### - -Project: "php5ts"=.\php5ts.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name php5dllts - End Project Dependency -}}} - -############################################################################### - -Project: "php5ts_cli"=.\php5ts_cli.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name php5dllts - End Project Dependency -}}} - -############################################################################### - -Project: "testsuite"=.\testsuite.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name php5ts - End Project Dependency -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/win32/php5ts.rc b/win32/php5ts.rc deleted file mode 100644 index d9a4aa541b1e5..0000000000000 --- a/win32/php5ts.rc +++ /dev/null @@ -1,126 +0,0 @@ -//Microsoft Developer Studio generated resource script. - -// - -#include "resource.h" - - - -#define APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// - -// - -// Generated from the TEXTINCLUDE 2 resource. - -// - -#include "winres.h" - - - -///////////////////////////////////////////////////////////////////////////// - -#undef APSTUDIO_READONLY_SYMBOLS - - - -///////////////////////////////////////////////////////////////////////////// - -// English (U.S.) resources - - - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) - -#ifdef _WIN32 - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US - -#pragma code_page(1252) - -#endif //_WIN32 - - - -#ifdef APSTUDIO_INVOKED - -///////////////////////////////////////////////////////////////////////////// - -// - -// TEXTINCLUDE - -// - - - -1 TEXTINCLUDE DISCARDABLE - -BEGIN - - "resource.h\0" - -END - - - -2 TEXTINCLUDE DISCARDABLE - -BEGIN - - "#include ""php5ts.rc2""\r\n" - - "\0" - -END - - - -3 TEXTINCLUDE DISCARDABLE - -BEGIN - - "\r\n" - - "\0" - -END - - - -#endif // APSTUDIO_INVOKED - - - -#endif // English (U.S.) resources - -///////////////////////////////////////////////////////////////////////////// - - - - - - - -#ifndef APSTUDIO_INVOKED - -///////////////////////////////////////////////////////////////////////////// - -// - -// Generated from the TEXTINCLUDE 3 resource. - -// - -#include "php5ts.rc2" - - - -///////////////////////////////////////////////////////////////////////////// - -#endif // not APSTUDIO_INVOKED - - - diff --git a/win32/php5ts.rc2 b/win32/php5ts.rc2 deleted file mode 100644 index 2013b9775fa23..0000000000000 --- a/win32/php5ts.rc2 +++ /dev/null @@ -1,61 +0,0 @@ -// -// php5dllts.RC2 - resources Microsoft Visual C++ does not edit directly -// - -#ifdef APSTUDIO_INVOKED - #error this file is not editable by Microsoft Visual C++ -#endif //APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// Add manually edited resources here... -#include "../main/php_version.h" - -#define XSTRVER4(maj, min, rel, build) #maj "." #min "." #rel "." #build -#define XSTRVER3(maj, min, rel) #maj "." #min "." #rel -#define STRVER4(maj, min, rel, build) XSTRVER4(maj, min, rel, build) -#define STRVER3(maj, min, rel) XSTRVER3(maj, min, rel) - -#ifndef _MAC -//Version -VS_VERSION_INFO VERSIONINFO - FILEVERSION PHP_MAJOR_VERSION,PHP_MINOR_VERSION,PHP_RELEASE_VERSION,PHP_RELEASE_VERSION - PRODUCTVERSION PHP_MAJOR_VERSION,PHP_MINOR_VERSION,PHP_RELEASE_VERSION,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG -#else - FILEFLAGS 0x0L -#endif - FILEOS VOS__WINDOWS32 - FILETYPE VFT_APP - FILESUBTYPE VFT2_UNKNOWN -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "Comments", "\0" - VALUE "CompanyName", "The PHP Group\0" - VALUE "FileDescription", "PHP Script Interpreter\0" - VALUE "FileVersion", STRVER4(PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION, PHP_RELEASE_VERSION) - VALUE "InternalName", "php-cgi\0" - VALUE "LegalCopyright", "Copyright © 1997-2006 The PHP Group\0" - VALUE "LegalTrademarks", "php\0" - VALUE "OriginalFilename", "php.exe\0" - VALUE "PrivateBuild", "\0" - VALUE "ProductName", "PHP Thread Safe CGI\0" - VALUE "ProductVersion", STRVER3(PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION) - VALUE "SpecialBuild", PHP_EXTRA_VERSION "\0" - VALUE "URL", "http://www.php.net" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - -#endif // !_MAC - -///////////////////////////////////////////////////////////////////////////// diff --git a/win32/php5ts_cli.dsp b/win32/php5ts_cli.dsp deleted file mode 100644 index 37a4113ad4ec5..0000000000000 --- a/win32/php5ts_cli.dsp +++ /dev/null @@ -1,175 +0,0 @@ -# Microsoft Developer Studio Project File - Name="php5ts_cli" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=php5ts_cli - Win32 Debug_TS -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "php5ts_cli.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "php5ts_cli.mak" CFG="php5ts_cli - Win32 Debug_TS" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "php5ts_cli - Win32 Release_TS" (based on "Win32 (x86) Console Application") -!MESSAGE "php5ts_cli - Win32 Debug_TS" (based on "Win32 (x86) Console Application") -!MESSAGE "php5ts_cli - Win32 Release_TS_inline" (based on "Win32 (x86) Console Application") -!MESSAGE "php5ts_cli - Win32 Release_TSDbg" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "php5ts_cli - Win32 Release_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_TS" -# PROP BASE Intermediate_Dir "Release_TS" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\Release_TS" -# PROP Intermediate_Dir "Release_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /Fr /FD /c -# SUBTRACT CPP /YX /Yc /Yu -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 php5ts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release_TS\cli\php.exe" /libpath:"..\Release_TS" - -!ELSEIF "$(CFG)" == "php5ts_cli - Win32 Debug_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_TS" -# PROP BASE Intermediate_Dir "Debug_TS" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\Debug_TS" -# PROP Intermediate_Dir "Debug_TS" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /D "DEBUG" /D "_DEBUG" /D ZEND_DEBUG=1 /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /FR /FD /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /i "c:\include" /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 winmm.lib netapi32.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts_debug.lib /nologo /version:4.0 /subsystem:console /debug /machine:I386 /nodefaultlib:"libcd" /nodefaultlib:"libcmt" /out:"..\Debug_TS\cli\php.exe" /pdbtype:sept /libpath:"..\Debug_TS" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "php5ts_cli - Win32 Release_TS_inline" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "php5ts___Win32_Release_TS_inline" -# PROP BASE Intermediate_Dir "php5ts___Win32_Release_TS_inline" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\Release_TS_inline" -# PROP Intermediate_Dir "Release_TS_inline" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "regex" /I "..\bindlib_w32" /I "Zend" /I "tsrm" /D "NDEBUG" /D "MSVC5" /D "_CONSOLE" /D "ZTS" /D "WIN32" /D "_MBCS" /D ZEND_DEBUG=0 /Fr /FD /c -# SUBTRACT BASE CPP /YX /Yc /Yu -# ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /Fr /FD /c -# SUBTRACT CPP /YX /Yc /Yu -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 php5ts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:3.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"Release_TS\php.exe" /libpath:"Release_TS" -# ADD LINK32 php5ts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release_TS_inline\cli\php.exe" /libpath:"..\Release_TS_inline" - -!ELSEIF "$(CFG)" == "php5ts_cli - Win32 Release_TSDbg" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "php5ts___Win32_Release_TSDbg" -# PROP BASE Intermediate_Dir "php5ts___Win32_Release_TSDbg" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\Release_TSDbg" -# PROP Intermediate_Dir "Release_TSDbg" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /Fr /FD /c -# SUBTRACT BASE CPP /YX /Yc /Yu -# ADD CPP /nologo /MD /W3 /GX /Zi /Od /I ".." /I "..\main" /I "..\regex" /I "..\..\bindlib_w32" /I "..\Zend" /I "..\TSRM" /D "NDEBUG" /D ZEND_DEBUG=0 /D "_CONSOLE" /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /Fr /FD /c -# SUBTRACT CPP /YX /Yc /Yu -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 php5ts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release_TS\php.exe" /libpath:"..\Release_TS" -# ADD LINK32 php5ts.lib winmm.lib wsock32.lib netapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /version:4.0 /subsystem:console /debug /machine:I386 /nodefaultlib:"libc.lib" /out:"..\Release_TSDbg\php.exe" /libpath:"..\Release_TSDbg" - -!ENDIF - -# Begin Target - -# Name "php5ts_cli - Win32 Release_TS" -# Name "php5ts_cli - Win32 Debug_TS" -# Name "php5ts_cli - Win32 Release_TS_inline" -# Name "php5ts_cli - Win32 Release_TSDbg" -# Begin Group "Source Files" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=..\sapi\cli\getopt.c -# End Source File -# Begin Source File - -SOURCE=..\sapi\cli\php_cli.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter ".h" -# Begin Source File - -SOURCE=..\sapi\cli\php_getopt.h -# End Source File -# End Group -# Begin Source File - -SOURCE=.\php5ts_cli.rc -# End Source File -# Begin Source File - -SOURCE=.\php5ts_cli.rc2 -# End Source File -# End Target -# End Project diff --git a/win32/php5ts_cli.rc b/win32/php5ts_cli.rc deleted file mode 100644 index 0053e0c7f2b21..0000000000000 --- a/win32/php5ts_cli.rc +++ /dev/null @@ -1,126 +0,0 @@ -//Microsoft Developer Studio generated resource script. - -// - -#include "resource.h" - - - -#define APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// - -// - -// Generated from the TEXTINCLUDE 2 resource. - -// - -#include "winres.h" - - - -///////////////////////////////////////////////////////////////////////////// - -#undef APSTUDIO_READONLY_SYMBOLS - - - -///////////////////////////////////////////////////////////////////////////// - -// English (U.S.) resources - - - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) - -#ifdef _WIN32 - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US - -#pragma code_page(1252) - -#endif //_WIN32 - - - -#ifdef APSTUDIO_INVOKED - -///////////////////////////////////////////////////////////////////////////// - -// - -// TEXTINCLUDE - -// - - - -1 TEXTINCLUDE DISCARDABLE - -BEGIN - - "resource.h\0" - -END - - - -2 TEXTINCLUDE DISCARDABLE - -BEGIN - - "#include ""php5ts_cli.rc2""\r\n" - - "\0" - -END - - - -3 TEXTINCLUDE DISCARDABLE - -BEGIN - - "\r\n" - - "\0" - -END - - - -#endif // APSTUDIO_INVOKED - - - -#endif // English (U.S.) resources - -///////////////////////////////////////////////////////////////////////////// - - - - - - - -#ifndef APSTUDIO_INVOKED - -///////////////////////////////////////////////////////////////////////////// - -// - -// Generated from the TEXTINCLUDE 3 resource. - -// - -#include "php5ts_cli.rc2" - - - -///////////////////////////////////////////////////////////////////////////// - -#endif // not APSTUDIO_INVOKED - - - diff --git a/win32/php5ts_cli.rc2 b/win32/php5ts_cli.rc2 deleted file mode 100644 index 517bd4ab349b4..0000000000000 --- a/win32/php5ts_cli.rc2 +++ /dev/null @@ -1,61 +0,0 @@ -// -// php5dllts.RC2 - resources Microsoft Visual C++ does not edit directly -// - -#ifdef APSTUDIO_INVOKED - #error this file is not editable by Microsoft Visual C++ -#endif //APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// Add manually edited resources here... -#include "../main/php_version.h" - -#define XSTRVER4(maj, min, rel, build) #maj "." #min "." #rel "." #build -#define XSTRVER3(maj, min, rel) #maj "." #min "." #rel -#define STRVER4(maj, min, rel, build) XSTRVER4(maj, min, rel, build) -#define STRVER3(maj, min, rel) XSTRVER3(maj, min, rel) - -#ifndef _MAC -//Version -VS_VERSION_INFO VERSIONINFO - FILEVERSION PHP_MAJOR_VERSION,PHP_MINOR_VERSION,PHP_RELEASE_VERSION,PHP_RELEASE_VERSION - PRODUCTVERSION PHP_MAJOR_VERSION,PHP_MINOR_VERSION,PHP_RELEASE_VERSION,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG -#else - FILEFLAGS 0x0L -#endif - FILEOS VOS__WINDOWS32 - FILETYPE VFT_APP - FILESUBTYPE VFT2_UNKNOWN -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "Comments", "\0" - VALUE "CompanyName", "The PHP Group\0" - VALUE "FileDescription", "PHP Script Interpreter\0" - VALUE "FileVersion", STRVER4(PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION, PHP_RELEASE_VERSION) - VALUE "InternalName", "php-cli\0" - VALUE "LegalCopyright", "Copyright © 1997-2006 The PHP Group\0" - VALUE "LegalTrademarks", "php\0" - VALUE "OriginalFilename", "php.exe\0" - VALUE "PrivateBuild", "\0" - VALUE "ProductName", "PHP Thread Safe Command Line Interface\0" - VALUE "ProductVersion", STRVER3(PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION) - VALUE "SpecialBuild", PHP_EXTRA_VERSION "\0" - VALUE "URL", "http://www.php.net" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - -#endif // !_MAC - -///////////////////////////////////////////////////////////////////////////// diff --git a/win32/php_modules.dsw b/win32/php_modules.dsw deleted file mode 100644 index 81f22fa44f2fb..0000000000000 --- a/win32/php_modules.dsw +++ /dev/null @@ -1,473 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "bz2"=..\ext\bz2\bz2.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "ctype"=..\ext\ctype\ctype.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "curl"=..\ext\curl\curl.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "dba"=..\ext\dba\dba.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "dbase"=..\ext\dbase\dbase.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "dbx"=..\ext\dbx\dbx.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "exif"=..\ext\exif\exif.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "fbsql"=..\ext\fbsql\fbsql.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "fdf"=..\ext\fdf\fdf.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "filepro"=..\ext\filepro\filepro.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "gd"=..\ext\gd\gd.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "gettext"=..\ext\gettext\gettext.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "iconv"=..\ext\iconv\iconv.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "ifx"=..\ext\informix\ifx.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "imap"=..\ext\imap\imap.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "ingres"=..\ext\ingres_ii\ingres.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "interbase"=..\ext\interbase\interbase.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "ldap"=..\ext\ldap\ldap.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "mbstring"=..\ext\mbstring\mbstring.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "mcrypt"=..\ext\mcrypt\mcrypt.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "mcve"=..\ext\mcve\mcve.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "mhash"=..\ext\mhash\mhash.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "mime_magic"=..\ext\mime_magic\mime_magic.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "ming"=..\ext\ming\ming.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "msql"=..\ext\msql\msql.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "mssql"=..\ext\mssql\mssql.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "mysql"=..\ext\mysql\mysql.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "oci8"=..\ext\oci8\oci8.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "openssl"=..\ext\openssl\openssl.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "oracle"=..\ext\oracle\oracle.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "pgsql"=..\ext\pgsql\pgsql.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "shmop"=..\ext\shmop\shmop.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "snmp"=..\ext\snmp\snmp.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "sockets"=..\ext\sockets\sockets.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "sybase_ct"=..\ext\sybase_ct\sybase_ct.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "tokenizer"=..\ext\tokenizer\tokenizer.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "xmlrpc"=..\ext\xmlrpc\xmlrpc.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "xsl"=..\ext\xsl\xsl.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/win32/php_registry.h b/win32/php_registry.h deleted file mode 100644 index 2b111dbb8b25c..0000000000000 --- a/win32/php_registry.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef PHP_REGISTRY_H -#define PHP_REGISTRY_H - - -void UpdateIniFromRegistry(char *path TSRMLS_DC); -char *GetIniPathFromRegistry(); - -#endif /* PHP_REGISTRY_H */ diff --git a/win32/php_win32_globals.h b/win32/php_win32_globals.h deleted file mode 100755 index bb83fe17a39ad..0000000000000 --- a/win32/php_win32_globals.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef PHP_WIN32_GLOBALS_H -#define PHP_WIN32_GLOBALS_H - -/* misc globals for thread-safety under win32 */ - -typedef struct _php_win32_core_globals php_win32_core_globals; - -#ifdef ZTS -# define PW32G(v) TSRMG(php_win32_core_globals_id, php_win32_core_globals*, v) -extern PHPAPI int php_win32_core_globals_id; -#else -# define PW32G(v) (the_php_win32_core_globals.v) -extern PHPAPI struct _php_win32_core_globals the_php_win32_core_globals; -#endif - -struct _php_win32_core_globals { - /* syslog */ - char *log_header; - HANDLE log_source; - - /* time */ - struct timeval starttime; - __int64 lasttime, freq; - - HKEY registry_key; - HANDLE registry_event; - HashTable *registry_directories; -}; - -void php_win32_core_globals_ctor(void *vg TSRMLS_DC); -void php_win32_core_globals_dtor(void *vg TSRMLS_DC); -PHP_RSHUTDOWN_FUNCTION(win32_core_globals); - -#endif - diff --git a/win32/pws-php5cgi.reg b/win32/pws-php5cgi.reg deleted file mode 100644 index 46edc77386496..0000000000000 --- a/win32/pws-php5cgi.reg +++ /dev/null @@ -1,6 +0,0 @@ -REGEDIT4 - -[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parameters\Script Map] -".php"="[PUT PATH HERE]\\php.exe" - - diff --git a/win32/pws-php5isapi.reg b/win32/pws-php5isapi.reg deleted file mode 100644 index 393604d28deed..0000000000000 --- a/win32/pws-php5isapi.reg +++ /dev/null @@ -1,5 +0,0 @@ -REGEDIT4 - -[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parameters\Script Map] -".php"="[PUT PATH HERE]\\php5isapi.dll" - diff --git a/win32/readdir.c b/win32/readdir.c deleted file mode 100644 index 67bb8ee739e80..0000000000000 --- a/win32/readdir.c +++ /dev/null @@ -1,148 +0,0 @@ -#include -#include -#include - -#include "php.h" -#include "readdir.h" - -/********************************************************************** - * Implement dirent-style opendir/readdir/rewinddir/closedir on Win32 - * - * Functions defined are opendir(), readdir(), rewinddir() and - * closedir() with the same prototypes as the normal dirent.h - * implementation. - * - * Does not implement telldir(), seekdir(), or scandir(). The dirent - * struct is compatible with Unix, except that d_ino is always 1 and - * d_off is made up as we go along. - * - * The DIR typedef is not compatible with Unix. - **********************************************************************/ - -DIR *opendir(const char *dir) -{ - DIR *dp; - char *filespec; - HANDLE handle; - int index; - - filespec = (char *)malloc(strlen(dir) + 2 + 1); - strcpy(filespec, dir); - index = strlen(filespec) - 1; - if (index >= 0 && (filespec[index] == '/' || - (filespec[index] == '\\' && (index == 0 || !IsDBCSLeadByte(filespec[index-1]))))) - filespec[index] = '\0'; - strcat(filespec, "/*"); - - dp = (DIR *) malloc(sizeof(DIR)); - dp->offset = 0; - dp->finished = 0; - - if ((handle = FindFirstFile(filespec, &(dp->fileinfo))) == INVALID_HANDLE_VALUE) { - DWORD err = GetLastError(); - if (err == ERROR_NO_MORE_FILES) { - dp->finished = 1; - } else { - free(dp); - free(filespec); - return NULL; - } - } - dp->dir = strdup(dir); - dp->handle = handle; - free(filespec); - - return dp; -} - -struct dirent *readdir(DIR *dp) -{ - if (!dp || dp->finished) - return NULL; - - if (dp->offset != 0) { - if (FindNextFile(dp->handle, &(dp->fileinfo)) == 0) { - dp->finished = 1; - return NULL; - } - } - dp->offset++; - - strlcpy(dp->dent.d_name, dp->fileinfo.cFileName, _MAX_FNAME+1); - dp->dent.d_ino = 1; - dp->dent.d_reclen = strlen(dp->dent.d_name); - dp->dent.d_off = dp->offset; - - return &(dp->dent); -} - -int readdir_r(DIR *dp, struct dirent *entry, struct dirent **result) -{ - if (!dp || dp->finished) { - *result = NULL; - return 0; - } - - if (dp->offset != 0) { - if (FindNextFile(dp->handle, &(dp->fileinfo)) == 0) { - dp->finished = 1; - *result = NULL; - return 0; - } - } - dp->offset++; - - strlcpy(dp->dent.d_name, dp->fileinfo.cFileName, _MAX_FNAME+1); - dp->dent.d_ino = 1; - dp->dent.d_reclen = strlen(dp->dent.d_name); - dp->dent.d_off = dp->offset; - - memcpy(entry, &dp->dent, sizeof(*entry)); - - *result = &dp->dent; - - return 0; -} - -int closedir(DIR *dp) -{ - if (!dp) - return 0; - FindClose(dp->handle); - if (dp->dir) - free(dp->dir); - if (dp) - free(dp); - - return 0; -} - -int rewinddir(DIR *dp) -{ - /* Re-set to the beginning */ - char *filespec; - HANDLE handle; - int index; - - FindClose(dp->handle); - - dp->offset = 0; - dp->finished = 0; - - filespec = (char *)malloc(strlen(dp->dir) + 2 + 1); - strcpy(filespec, dp->dir); - index = strlen(filespec) - 1; - if (index >= 0 && (filespec[index] == '/' || - (filespec[index] == '\\' && (index == 0 || !IsDBCSLeadByte(filespec[index-1]))))) - filespec[index] = '\0'; - strcat(filespec, "/*"); - - if ((handle = FindFirstFile(filespec, &(dp->fileinfo))) == INVALID_HANDLE_VALUE) { - dp->finished = 1; - } - - dp->handle = handle; - free(filespec); - - return 0; -} diff --git a/win32/readdir.h b/win32/readdir.h deleted file mode 100644 index f2a0191b756a8..0000000000000 --- a/win32/readdir.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef READDIR_H -#define READDIR_H - - -/* - * Structures and types used to implement opendir/readdir/closedir - * on Windows 95/NT. - */ - -#define _WIN32_WINNT 0x0400 - -#include - -#include -#include -#include -#include -#include - -#define php_readdir_r readdir_r - -/* struct dirent - same as Unix */ - -struct dirent { - long d_ino; /* inode (always 1 in WIN32) */ - off_t d_off; /* offset to this dirent */ - unsigned short d_reclen; /* length of d_name */ - char d_name[_MAX_FNAME + 1]; /* filename (null terminated) */ -}; - - -/* typedef DIR - not the same as Unix */ -typedef struct { - HANDLE handle; /* _findfirst/_findnext handle */ - short offset; /* offset into directory */ - short finished; /* 1 if there are not more files */ - WIN32_FIND_DATA fileinfo; /* from _findfirst/_findnext */ - char *dir; /* the dir we are reading */ - struct dirent dent; /* the dirent to return */ -} DIR; - -/* Function prototypes */ -DIR *opendir(const char *); -struct dirent *readdir(DIR *); -int readdir_r(DIR *, struct dirent *, struct dirent **); -int closedir(DIR *); -int rewinddir(DIR *); - -#endif /* READDIR_H */ diff --git a/win32/registry.c b/win32/registry.c deleted file mode 100644 index 752bc381281ee..0000000000000 --- a/win32/registry.c +++ /dev/null @@ -1,280 +0,0 @@ -#include "php.h" -#include "php_ini.h" -#include "php_win32_globals.h" - -#define PHP_REGISTRY_KEY "SOFTWARE\\PHP" - -#define PHP_VER1(V1) #V1 -#define PHP_VER2(V1,V2) #V1"."#V2 -#define PHP_VER3(V1,V2,V3) #V1"."#V2"."#V3 - -#define PHP_REGISTRY_KEYV(VER) PHP_REGISTRY_KEY"\\"VER -#define PHP_REGISTRY_KEY1(V1) PHP_REGISTRY_KEY"\\"PHP_VER1(V1) -#define PHP_REGISTRY_KEY2(V1,V2) PHP_REGISTRY_KEY"\\"PHP_VER2(V1,V2) -#define PHP_REGISTRY_KEY3(V1,V2,V3) PHP_REGISTRY_KEY"\\"PHP_VER3(V1,V2,V3) - -static const char* registry_keys[] = { - PHP_REGISTRY_KEYV(PHP_VERSION), - PHP_REGISTRY_KEY3(PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION), - PHP_REGISTRY_KEY2(PHP_MAJOR_VERSION, PHP_MINOR_VERSION), - PHP_REGISTRY_KEY1(PHP_MAJOR_VERSION), - PHP_REGISTRY_KEY, - NULL -}; - -static int OpenPhpRegistryKey(char* sub_key, HKEY *hKey) -{ - const char **key_name = registry_keys; - - if (sub_key) { - int main_key_len; - int sub_key_len = strlen(sub_key); - char *reg_key; - - while (*key_name) { - LONG ret; - - main_key_len = strlen(*key_name); - reg_key = emalloc(main_key_len + sub_key_len + 1); - memcpy(reg_key, *key_name, main_key_len); - memcpy(reg_key + main_key_len, sub_key, sub_key_len + 1); - ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, reg_key, 0, KEY_READ, hKey); - efree(reg_key); - - if (ret == ERROR_SUCCESS) { - return 1; - } - ++key_name; - } - } else { - while (*key_name) { - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, *key_name, 0, KEY_READ, hKey) == ERROR_SUCCESS) { - return 1; - } - ++key_name; - } - } - return 0; -} - -static int LoadDirectory(HashTable *directories, HKEY key, char *path, int path_len, HashTable *parent_ht) -{ - DWORD keys, values, max_key, max_name, max_value; - int ret = 0; - HashTable *ht = NULL; - - if (RegQueryInfoKey(key, NULL, NULL, NULL, &keys, &max_key, NULL, &values, &max_name, &max_value, NULL, NULL) == ERROR_SUCCESS) { - - if (values) { - DWORD i; - char *name = (char*)emalloc(max_name+1); - char *value = (char*)emalloc(max_value+1); - DWORD name_len, type, value_len; - zval *data; - - for (i = 0; i < values; i++) { - name_len = max_name+1; - value_len = max_value+1; - if (RegEnumValue(key, i, name, &name_len, NULL, &type, value, &value_len) == ERROR_SUCCESS) { - if ((type == REG_SZ) || (type == REG_EXPAND_SZ)) { - if (!ht) { - ht = (HashTable*)malloc(sizeof(HashTable)); - zend_hash_init(ht, 0, NULL, ZVAL_INTERNAL_PTR_DTOR, 1); - } - data = (zval*)malloc(sizeof(zval)); - INIT_PZVAL(data); - Z_STRVAL_P(data) = zend_strndup(value, value_len-1); - Z_STRLEN_P(data) = value_len-1; - zend_hash_update(ht, name, name_len+1, &data, sizeof(zval*), NULL); - } - } - } - if (ht) { - if (parent_ht) { - HashPosition pos; - char *index; - uint index_len; - ulong num; - zval **data; - - for (zend_hash_internal_pointer_reset_ex(parent_ht, &pos); - zend_hash_get_current_data_ex(parent_ht, (void**)&data, &pos) == SUCCESS && - zend_hash_get_current_key_ex(parent_ht, &index, &index_len, &num, 0, &pos) == HASH_KEY_IS_STRING; - zend_hash_move_forward_ex(parent_ht, &pos)) { - if (zend_hash_add(ht, index, index_len, data, sizeof(zval*), NULL) == SUCCESS) { - (*data)->refcount++; - } - } - } - zend_hash_update(directories, path, path_len+1, &ht, sizeof(HashTable*), NULL); - ret = 1; - } - - efree(name); - efree(value); - } - - if (ht == NULL) { - ht = parent_ht; - } - - if (keys) { - DWORD i; - char *name = (char*)emalloc(max_key+1); - char *new_path = (char*)emalloc(path_len+max_key+2); - DWORD name_len; - FILETIME t; - HKEY subkey; - - for (i = 0; i < keys; i++) { - name_len = max_key+1; - if (RegEnumKeyEx(key, i, name, &name_len, NULL, NULL, NULL, &t) == ERROR_SUCCESS) { - if (RegOpenKeyEx(key, name, 0, KEY_READ, &subkey) == ERROR_SUCCESS) { - if (path_len) { - memcpy(new_path, path, path_len); - new_path[path_len] = '/'; - path_len++; - } - memcpy(new_path+path_len, name, name_len+1); - zend_str_tolower(new_path, path_len+name_len); - if (LoadDirectory(directories, subkey, new_path, path_len+name_len, ht)) { - ret = 1; - } - RegCloseKey(subkey); - } - } - } - efree(new_path); - efree(name); - } - } - return ret; -} - -static void delete_internal_hashtable(void *data) -{ - zend_hash_destroy(*(HashTable**)data); - free(*(HashTable**)data); -} - -#define RegNotifyFlags (REG_NOTIFY_CHANGE_NAME | REG_NOTIFY_CHANGE_ATTRIBUTES | REG_NOTIFY_CHANGE_LAST_SET) - -void UpdateIniFromRegistry(char *path TSRMLS_DC) -{ - char *p, *orig_path; - int path_len; - HashTable **pht; - - if (!PW32G(registry_directories)) { - PW32G(registry_directories) = (HashTable*)malloc(sizeof(HashTable)); - zend_hash_init(PW32G(registry_directories), 0, NULL, delete_internal_hashtable, 1); - if (!OpenPhpRegistryKey("\\Per Directory Values", &PW32G(registry_key))) { - PW32G(registry_key) = NULL; - return; - } - PW32G(registry_event) = CreateEvent(NULL, TRUE, FALSE, NULL); - if (PW32G(registry_event)) { - RegNotifyChangeKeyValue(PW32G(registry_key), TRUE, RegNotifyFlags, PW32G(registry_event), TRUE); - } - if (!LoadDirectory(PW32G(registry_directories), PW32G(registry_key), "", 0, NULL)) { - return; - } - } else if (PW32G(registry_event) && WaitForSingleObject(PW32G(registry_event), 0) == WAIT_OBJECT_0) { - RegNotifyChangeKeyValue(PW32G(registry_key), TRUE, RegNotifyFlags, PW32G(registry_event), TRUE); - zend_hash_clean(PW32G(registry_directories)); - if (!LoadDirectory(PW32G(registry_directories), PW32G(registry_key), "", 0, NULL)) { - return; - } - } else if (zend_hash_num_elements(PW32G(registry_directories)) == 0) { - return; - } - - orig_path = path = estrdup(path); - - /* Get rid of C:, if exists */ - p = strchr(path, ':'); - if (p) { - *p = path[0]; /* replace the colon with the drive letter */ - path = p; /* make path point to the drive letter */ - } else { - if (path[0] != '\\' && path[0] != '/') { - char tmp_buf[MAXPATHLEN], *cwd; - char drive_letter; - - /* get current working directory and prepend it to the path */ - if (!VCWD_GETCWD(tmp_buf, MAXPATHLEN)) { - efree(orig_path); - return; - } - cwd = strchr(tmp_buf, ':'); - if (!cwd) { - drive_letter = 'C'; - cwd = tmp_buf; - } else { - drive_letter = tmp_buf[0]; - cwd++; - } - while (*cwd == '\\' || *cwd == '/') { - cwd++; - } - spprintf(&path, 0, "%c\\%s\\%s", drive_letter, cwd, orig_path); - efree(orig_path); - orig_path = path; - } - } - - path_len = 0; - while (path[path_len] != 0) { - if (path[path_len] == '\\') { - path[path_len] = '/'; - } - path_len++; - } - zend_str_tolower(path, path_len); - while (path_len >= 0) { - if (zend_hash_find(PW32G(registry_directories), path, path_len+1, (void**)&pht) == SUCCESS) { - HashTable *ht = *pht; - HashPosition pos; - char *index; - uint index_len; - ulong num; - zval **data; - - for (zend_hash_internal_pointer_reset_ex(ht, &pos); - zend_hash_get_current_data_ex(ht, (void**)&data, &pos) == SUCCESS && - zend_hash_get_current_key_ex(ht, &index, &index_len, &num, 0, &pos) == HASH_KEY_IS_STRING; - zend_hash_move_forward_ex(ht, &pos)) { - zend_alter_ini_entry(index, index_len, Z_STRVAL_PP(data), Z_STRLEN_PP(data), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE); - } - break; - } - if (--path_len > 0) { - while (path_len > 0 && path[path_len] != '/') { - path_len--; - } - } - path[path_len] = 0; - } - - efree(orig_path); -} - -#define PHPRC_REGISTRY_NAME "IniFilePath" - -char *GetIniPathFromRegistry() -{ - char *reg_location = NULL; - HKEY hKey; - - if (OpenPhpRegistryKey(NULL, &hKey)) { - DWORD buflen = MAXPATHLEN; - reg_location = emalloc(MAXPATHLEN+1); - if(RegQueryValueEx(hKey, PHPRC_REGISTRY_NAME, 0, NULL, reg_location, &buflen) != ERROR_SUCCESS) { - efree(reg_location); - reg_location = NULL; - return reg_location; - } - RegCloseKey(hKey); - } - return reg_location; -} diff --git a/win32/resource.h b/win32/resource.h deleted file mode 100644 index 3e7e4c0ed1eec..0000000000000 --- a/win32/resource.h +++ /dev/null @@ -1,15 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Developer Studio generated include file. -// Used by php5dllts.rc -// - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 101 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1000 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/win32/select.c b/win32/select.c deleted file mode 100644 index 276535af85331..0000000000000 --- a/win32/select.c +++ /dev/null @@ -1,176 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - +----------------------------------------------------------------------+ -*/ - -#include "php.h" -#include "php_network.h" - -#ifdef PHP_WIN32 - -/* $Id$ */ - -/* Win32 select() will only work with sockets, so we roll our own implementation here. - * - If you supply only sockets, this simply passes through to winsock select(). - * - If you supply file handles, there is no way to distinguish between - * ready for read/write or OOB, so any set in which the handle is found will - * be marked as ready. - * - If you supply a mixture of handles and sockets, the system will interleave - * calls between select() and WaitForMultipleObjects(). The time slicing may - * cause this function call to take up to 100 ms longer than you specified. - * - Calling this with NULL sets as a portable way to sleep with sub-second - * accuracy is not supported. - * */ -PHPAPI int php_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv) -{ - DWORD ms_total, limit; - HANDLE handles[MAXIMUM_WAIT_OBJECTS]; - int handle_slot_to_fd[MAXIMUM_WAIT_OBJECTS]; - int n_handles = 0, i; - fd_set sock_read, sock_write, sock_except; - fd_set aread, awrite, aexcept; - int sock_max_fd = -1; - struct timeval tvslice; - int retcode; - -#define SAFE_FD_ISSET(fd, set) (set != NULL && FD_ISSET(fd, set)) - - /* calculate how long we need to wait in milliseconds */ - if (tv == NULL) { - ms_total = INFINITE; - } else { - ms_total = tv->tv_sec * 1000; - ms_total += tv->tv_usec / 1000; - } - - FD_ZERO(&sock_read); - FD_ZERO(&sock_write); - FD_ZERO(&sock_except); - - /* build an array of handles for non-sockets */ - for (i = 0; i < max_fd; i++) { - if (SAFE_FD_ISSET(i, rfds) || SAFE_FD_ISSET(i, wfds) || SAFE_FD_ISSET(i, efds)) { - handles[n_handles] = (HANDLE)_get_osfhandle(i); - if ((DWORD)handles[n_handles] == 0xffffffff) { - /* socket */ - if (SAFE_FD_ISSET(i, rfds)) { - FD_SET(i, &sock_read); - } - if (SAFE_FD_ISSET(i, wfds)) { - FD_SET(i, &sock_write); - } - if (SAFE_FD_ISSET(i, efds)) { - FD_SET(i, &sock_except); - } - if (i > sock_max_fd) { - sock_max_fd = i; - } - } else { - handle_slot_to_fd[n_handles] = i; - n_handles++; - } - } - } - - if (n_handles == 0) { - /* plain sockets only - let winsock handle the whole thing */ - return select(max_fd, rfds, wfds, efds, tv); - } - - /* mixture of handles and sockets; lets multiplex between - * winsock and waiting on the handles */ - - FD_ZERO(&aread); - FD_ZERO(&awrite); - FD_ZERO(&aexcept); - - limit = GetTickCount() + ms_total; - do { - retcode = 0; - - if (sock_max_fd >= 0) { - /* overwrite the zero'd sets here; the select call - * will clear those that are not active */ - aread = sock_read; - awrite = sock_write; - aexcept = sock_except; - - tvslice.tv_sec = 0; - tvslice.tv_usec = 100000; - - retcode = select(sock_max_fd+1, &aread, &awrite, &aexcept, &tvslice); - } - if (n_handles > 0) { - /* check handles */ - DWORD wret; - - wret = MsgWaitForMultipleObjects(n_handles, handles, FALSE, retcode > 0 ? 0 : 100, QS_ALLEVENTS); - - if (wret == WAIT_TIMEOUT) { - /* set retcode to 0; this is the default. - * select() may have set it to something else, - * in which case we leave it alone, so this branch - * does nothing */ - ; - } else if (wret == WAIT_FAILED) { - if (retcode == 0) { - retcode = -1; - } - } else { - if (retcode < 0) { - retcode = 0; - } - for (i = 0; i < n_handles; i++) { - if (WAIT_OBJECT_0 == WaitForSingleObject(handles[i], 0)) { - if (SAFE_FD_ISSET(handle_slot_to_fd[i], rfds)) { - FD_SET(handle_slot_to_fd[i], &aread); - } - if (SAFE_FD_ISSET(handle_slot_to_fd[i], wfds)) { - FD_SET(handle_slot_to_fd[i], &awrite); - } - if (SAFE_FD_ISSET(handle_slot_to_fd[i], efds)) { - FD_SET(handle_slot_to_fd[i], &aexcept); - } - retcode++; - } - } - } - } - } while (retcode == 0 && (ms_total == INFINITE || GetTickCount() < limit)); - - if (rfds) { - *rfds = aread; - } - if (wfds) { - *wfds = awrite; - } - if (efds) { - *efds = aexcept; - } - - return retcode; -} - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: noet sw=4 ts=4 fdm=marker - * vim<600: noet sw=4 ts=4 - */ diff --git a/win32/select.h b/win32/select.h deleted file mode 100644 index b818f538d2148..0000000000000 --- a/win32/select.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -PHPAPI int php_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv); - diff --git a/win32/sendmail.c b/win32/sendmail.c deleted file mode 100644 index 60ef962d2bf39..0000000000000 --- a/win32/sendmail.c +++ /dev/null @@ -1,924 +0,0 @@ -/* - * PHP Sendmail for Windows. - * - * This file is rewriten specificly for PHPFI. Some functionality - * has been removed (MIME and file attachments). This code was - * modified from code based on code writen by Jarle Aase. - * - * This class is based on the original code by Jarle Aase, see bellow: - * wSendmail.cpp It has been striped of some functionality to match - * the requirements of phpfi. - * - * Very simple SMTP Send-mail program for sending command-line level - * emails and CGI-BIN form response for the Windows platform. - * - * The complete wSendmail package with source code can be located - * from http://www.jgaa.com - * - */ - -/* $Id$ */ - -#include "php.h" /*php specific */ -#include -#include -#ifndef NETWARE -#include -#include "time.h" -#else /* NETWARE */ -#include -#endif /* NETWARE */ -#include -#include -#ifndef NETWARE -#include -#include -#include -#endif /* NETWARE */ -#include "sendmail.h" -#include "php_ini.h" - -#if HAVE_PCRE || HAVE_BUNDLED_PCRE -#include "ext/pcre/php_pcre.h" -#endif - -#include "ext/standard/php_string.h" -#include "ext/date/php_date.h" - -/*enum - { - DO_CONNECT = WM_USER +1 - }; - */ - -/* '*error_message' has to be passed around from php_mail() */ -#define SMTP_ERROR_RESPONSE_SPEC "SMTP server response: %s" -/* Convinient way to handle error messages from the SMTP server. - response is ecalloc()d in Ack() itself and efree()d here - because the content is in *error_message now */ -#define SMTP_ERROR_RESPONSE(response) { \ - if (response && error_message) { \ - if (NULL != (*error_message = ecalloc(1, sizeof(SMTP_ERROR_RESPONSE_SPEC) + strlen(response)))) { \ - snprintf(*error_message, sizeof(SMTP_ERROR_RESPONSE_SPEC) + strlen(response), SMTP_ERROR_RESPONSE_SPEC, response); \ - } \ - efree(response); \ - } \ - } -#define SMTP_SKIP_SPACE(str) { while (isspace(*str)) { str++; } } - - -#ifndef THREAD_SAFE -char Buffer[MAIL_BUFFER_SIZE]; - -/* socket related data */ -SOCKET sc; -#ifndef NETWARE -WSADATA Data; -struct hostent *adr; -int WinsockStarted; -/* values set by the constructor */ -char *AppName; -#endif /* NETWARE */ -SOCKADDR_IN sock_in; -char MailHost[HOST_NAME_LEN]; -char LocalHost[HOST_NAME_LEN]; -#endif -char seps[] = " ,\t\n"; -#ifndef NETWARE -char *php_mailer = "PHP 6 WIN32"; -#else -char *php_mailer = "PHP 6 NetWare"; -#endif /* NETWARE */ - -/* Error messages */ -static char *ErrorMessages[] = -{ - {"Success"}, /* 0 */ - {"Bad arguments from form"}, /* 1 */ - {"Unable to open temporary mailfile for read"}, - {"Failed to Start Sockets"}, - {"Failed to Resolve Host"}, - {"Failed to obtain socket handle"}, /* 5 */ - {"Failed to connect to mailserver, verify your \"SMTP\" setting in php.ini"}, - {"Failed to Send"}, - {"Failed to Receive"}, - {"Server Error"}, - {"Failed to resolve the host IP name"}, /* 10 */ - {"Out of memory"}, - {"Unknown error"}, - {"Bad Message Contents"}, - {"Bad Message Subject"}, - {"Bad Message destination"}, /* 15 */ - {"Bad Message Return Path"}, - {"Bad Mail Host"}, - {"Bad Message File"}, - {"\"sendmail_from\" not set in php.ini or custom \"From:\" header missing"}, - {"Mailserver rejected our \"sendmail_from\" setting"}, /* 20 */ - {"Error while trimming mail header with PCRE, please file a bug report at http://bugs.php.net/"} /* 21 */ -}; - -/* This pattern converts all single occurences of \n (Unix) - * withour a leading \r to \r\n and all occurences of \r (Mac) - * without a trailing \n to \r\n - * Thx to Nibbler from ircnet/#linuxger - */ -#define PHP_WIN32_MAIL_UNIFY_PATTERN "/(\r\n?)|\n/" -#define PHP_WIN32_MAIL_UNIFY_REPLACE "\r\n" - -/* This pattern removes \r\n from the start of the string, - * \r\n from the end of the string and also makes sure every line - * is only wrapped with a single \r\n (thus reduces multiple - * occurences of \r\n between lines to a single \r\n) */ -#define PHP_WIN32_MAIL_RMVDBL_PATTERN "/^\r\n|(\r\n)+$/m" -#define PHP_WIN32_MAIL_RMVDBL_REPLACE "" - -/* This pattern escapes \n. inside the message body. It prevents - * premature end of message if \n.\n or \r\n.\r\n is encountered - * and ensures that \n. sequences are properly displayed in the - * message body. */ -#define PHP_WIN32_MAIL_DOT_PATTERN "\n." -#define PHP_WIN32_MAIL_DOT_REPLACE "\n.." - -/* This function is meant to unify the headers passed to to mail() - * This means, use PCRE to transform single occurences of \n or \r in \r\n - * As a second step we also eleminate all \r\n occurences which are: - * 1) At the start of the header - * 2) At the end of the header - * 3) Two or more occurences in the header are removed so only one is left - * - * Returns NULL on error, or the new char* buffer on success. - * You have to take care and efree() the buffer on your own. - */ -static char *php_win32_mail_trim_header(char *header TSRMLS_DC) -{ - -#if HAVE_PCRE || HAVE_BUNDLED_PCRE - - char *result, *result2; - int result_len; - zval *replace; - - if (!header) { - return NULL; - } - - MAKE_STD_ZVAL(replace); - ZVAL_STRING(replace, PHP_WIN32_MAIL_UNIFY_REPLACE, 0); - - result = php_pcre_replace(PHP_WIN32_MAIL_UNIFY_PATTERN, sizeof(PHP_WIN32_MAIL_UNIFY_PATTERN)-1, - header, strlen(header), - replace, - 0, - &result_len, - -1, - NULL TSRMLS_CC); - if (NULL == result) { - FREE_ZVAL(replace); - return NULL; - } - - ZVAL_STRING(replace, PHP_WIN32_MAIL_RMVDBL_REPLACE, 0); - - result2 = php_pcre_replace(PHP_WIN32_MAIL_RMVDBL_PATTERN, sizeof(PHP_WIN32_MAIL_RMVDBL_PATTERN)-1, - result, result_len, - replace, - 0, - &result_len, - -1, - NULL TSRMLS_CC); - efree(result); - FREE_ZVAL(replace); - return result2; -#else - /* In case we don't have PCRE support (for whatever reason...) simply do nothing and return the unmodified header */ - return estrdup(header); -#endif -} - -/********************************************************************* -// Name: TSendMail -// Input: 1) host: Name of the mail host where the SMTP server resides -// max accepted length of name = 256 -// 2) appname: Name of the application to use in the X-mailer -// field of the message. if NULL is given the application -// name is used as given by the GetCommandLine() function -// max accespted length of name = 100 -// Output: 1) error: Returns the error code if something went wrong or -// SUCCESS otherwise. -// -// See SendText() for additional args! -//********************************************************************/ -PHPAPI int TSendMail(char *host, int *error, char **error_message, - char *headers, char *Subject, char *mailTo, char *data, - char *mailCc, char *mailBcc, char *mailRPath TSRMLS_DC) -{ - int ret; - char *RPath = NULL; - char *headers_lc = NULL; /* headers_lc is only created if we've a header at all */ - char *pos1 = NULL, *pos2 = NULL; - -#ifndef NETWARE - WinsockStarted = FALSE; -#endif - - if (host == NULL) { - *error = BAD_MAIL_HOST; - return FAILURE; - } else if (strlen(host) >= HOST_NAME_LEN) { - *error = BAD_MAIL_HOST; - return FAILURE; - } else { - strcpy(MailHost, host); - } - - if (headers) { - char *pos = NULL; - size_t i; - - /* Use PCRE to trim the header into the right format */ - if (NULL == (headers = php_win32_mail_trim_header(headers TSRMLS_CC))) { - *error = W32_SM_PCRE_ERROR; - return FAILURE; - } - - /* Create a lowercased header for all the searches so we're finally case - * insensitive when searching for a pattern. */ - if (NULL == (headers_lc = estrdup(headers))) { - efree(headers); - *error = OUT_OF_MEMORY; - return FAILURE; - } - for (i = 0; i < strlen(headers_lc); i++) { - headers_lc[i] = tolower(headers_lc[i]); - } - } - - /* Fall back to sendmail_from php.ini setting */ - if (mailRPath && *mailRPath) { - RPath = estrdup(mailRPath); - } else if (INI_STR("sendmail_from")) { - RPath = estrdup(INI_STR("sendmail_from")); - } else if ( headers_lc && - (pos1 = strstr(headers_lc, "from:")) && - ((pos1 == headers_lc) || (*(pos1-1) == '\n')) - ) { - /* Real offset is memaddress from the original headers + difference of - * string found in the lowercase headrs + 5 characters to jump over - * the from: */ - pos1 = headers + (pos1 - headers_lc) + 5; - if (NULL == (pos2 = strstr(pos1, "\r\n"))) { - RPath = estrndup(pos1, strlen(pos1)); - } else { - RPath = estrndup(pos1, pos2 - pos1); - } - } else { - if (headers) { - efree(headers); - efree(headers_lc); - } - *error = W32_SM_SENDMAIL_FROM_NOT_SET; - return FAILURE; - } - - /* attempt to connect with mail host */ - *error = MailConnect(); - if (*error != 0) { - if (RPath) { - efree(RPath); - } - if (headers) { - efree(headers); - efree(headers_lc); - } - /* 128 is safe here, the specifier in snprintf isn't longer than that */ - if (NULL == (*error_message = ecalloc(1, HOST_NAME_LEN + 128))) { - return FAILURE; - } - snprintf(*error_message, HOST_NAME_LEN + 128, - "Failed to connect to mailserver at \"%s\" port %d, verify your \"SMTP\" " - "and \"smtp_port\" setting in php.ini or use ini_set()", - MailHost, !INI_INT("smtp_port") ? 25 : INI_INT("smtp_port")); - return FAILURE; - } else { - ret = SendText(RPath, Subject, mailTo, mailCc, mailBcc, data, headers, headers_lc, error_message TSRMLS_CC); - TSMClose(); - if (RPath) { - efree(RPath); - } - if (headers) { - efree(headers); - efree(headers_lc); - } - if (ret != SUCCESS) { - *error = ret; - return FAILURE; - } - return SUCCESS; - } -} - -//******************************************************************** -// Name: TSendMail::~TSendMail -// Input: -// Output: -// Description: DESTRUCTOR -// Author/Date: jcar 20/9/96 -// History: -//********************************************************************/ -PHPAPI void TSMClose() -{ - Post("QUIT\r\n"); - Ack(NULL); - /* to guarantee that the cleanup is not made twice and - compomise the rest of the application if sockets are used - elesewhere - */ - - shutdown(sc, 0); - closesocket(sc); -} - - -/********************************************************************* -// Name: char *GetSMErrorText -// Input: Error index returned by the menber functions -// Output: pointer to a string containing the error description -// Description: -// Author/Date: jcar 20/9/96 -// History: -//*******************************************************************/ -PHPAPI char *GetSMErrorText(int index) -{ - if (MIN_ERROR_INDEX <= index && index < MAX_ERROR_INDEX) { - return (ErrorMessages[index]); - - } else { - return (ErrorMessages[UNKNOWN_ERROR]); - - } -} - - -/********************************************************************* -// Name: SendText -// Input: 1) RPath: return path of the message -// Is used to fill the "Return-Path" and the -// "X-Sender" fields of the message. -// 2) Subject: Subject field of the message. If NULL is given -// the subject is set to "No Subject" -// 3) mailTo: Destination address -// 4) data: Null terminated string containing the data to be send. -// 5,6) headers of the message. Note that the second -// parameter, headers_lc, is actually a lowercased version of -// headers. The should match exactly (in terms of length), -// only differ in case -// Output: Error code or SUCCESS -// Description: -// Author/Date: jcar 20/9/96 -// History: -//*******************************************************************/ -static int SendText(char *RPath, char *Subject, char *mailTo, char *mailCc, char *mailBcc, char *data, - char *headers, char *headers_lc, char **error_message TSRMLS_DC) -{ - int res; - char *p; - char *tempMailTo, *token, *pos1, *pos2; - char *server_response = NULL; - char *stripped_header = NULL; - char *data_cln; - int data_cln_len; - - /* check for NULL parameters */ - if (data == NULL) - return (BAD_MSG_CONTENTS); - if (mailTo == NULL) - return (BAD_MSG_DESTINATION); - if (RPath == NULL) - return (BAD_MSG_RPATH); - - /* simple checks for the mailto address */ - /* have ampersand ? */ - /* mfischer, 20020514: I commented this out because it really - seems bogus. Only a username for example may still be a - valid address at the destination system. - if (strchr(mailTo, '@') == NULL) - return (BAD_MSG_DESTINATION); - */ - - snprintf(Buffer, sizeof(Buffer), "HELO %s\r\n", LocalHost); - - /* in the beggining of the dialog */ - /* attempt reconnect if the first Post fail */ - if ((res = Post(Buffer)) != SUCCESS) { - MailConnect(); - if ((res = Post(Buffer)) != SUCCESS) { - return (res); - } - } - if ((res = Ack(&server_response)) != SUCCESS) { - SMTP_ERROR_RESPONSE(server_response); - return (res); - } - - SMTP_SKIP_SPACE(RPath); - snprintf(Buffer, MAIL_BUFFER_SIZE, "MAIL FROM:<%s>\r\n", RPath); - if ((res = Post(Buffer)) != SUCCESS) { - return (res); - } - if ((res = Ack(&server_response)) != SUCCESS) { - SMTP_ERROR_RESPONSE(server_response); - return W32_SM_SENDMAIL_FROM_MALFORMED; - } - - tempMailTo = estrdup(mailTo); - /* Send mail to all rcpt's */ - token = strtok(tempMailTo, ","); - while (token != NULL) - { - SMTP_SKIP_SPACE(token); - snprintf(Buffer, MAIL_BUFFER_SIZE, "RCPT TO:<%s>\r\n", token); - if ((res = Post(Buffer)) != SUCCESS) { - efree(tempMailTo); - return (res); - } - if ((res = Ack(&server_response)) != SUCCESS) { - SMTP_ERROR_RESPONSE(server_response); - efree(tempMailTo); - return (res); - } - token = strtok(NULL, ","); - } - efree(tempMailTo); - - if (mailCc && *mailCc) { - tempMailTo = estrdup(mailCc); - /* Send mail to all rcpt's */ - token = strtok(tempMailTo, ","); - while (token != NULL) - { - SMTP_SKIP_SPACE(token); - snprintf(Buffer, MAIL_BUFFER_SIZE, "RCPT TO:<%s>\r\n", token); - if ((res = Post(Buffer)) != SUCCESS) { - efree(tempMailTo); - return (res); - } - if ((res = Ack(&server_response)) != SUCCESS) { - SMTP_ERROR_RESPONSE(server_response); - efree(tempMailTo); - return (res); - } - token = strtok(NULL, ","); - } - efree(tempMailTo); - } - /* Send mail to all Cc rcpt's */ - else if (headers && (pos1 = strstr(headers_lc, "cc:")) && ((pos1 == headers_lc) || (*(pos1-1) == '\n'))) { - /* Real offset is memaddress from the original headers + difference of - * string found in the lowercase headrs + 3 characters to jump over - * the cc: */ - pos1 = headers + (pos1 - headers_lc) + 3; - if (NULL == (pos2 = strstr(pos1, "\r\n"))) { - tempMailTo = estrndup(pos1, strlen(pos1)); - } else { - tempMailTo = estrndup(pos1, pos2 - pos1); - } - - token = strtok(tempMailTo, ","); - while (token != NULL) - { - SMTP_SKIP_SPACE(token); - snprintf(Buffer, MAIL_BUFFER_SIZE, "RCPT TO:<%s>\r\n", token); - if ((res = Post(Buffer)) != SUCCESS) { - efree(tempMailTo); - return (res); - } - if ((res = Ack(&server_response)) != SUCCESS) { - SMTP_ERROR_RESPONSE(server_response); - efree(tempMailTo); - return (res); - } - token = strtok(NULL, ","); - } - efree(tempMailTo); - } - - /* Send mail to all Bcc rcpt's - This is basically a rip of the Cc code above. - Just don't forget to remove the Bcc: from the header afterwards. */ - if (mailBcc && *mailBcc) { - tempMailTo = estrdup(mailBcc); - /* Send mail to all rcpt's */ - token = strtok(tempMailTo, ","); - while (token != NULL) - { - SMTP_SKIP_SPACE(token); - snprintf(Buffer, MAIL_BUFFER_SIZE, "RCPT TO:<%s>\r\n", token); - if ((res = Post(Buffer)) != SUCCESS) { - efree(tempMailTo); - return (res); - } - if ((res = Ack(&server_response)) != SUCCESS) { - SMTP_ERROR_RESPONSE(server_response); - efree(tempMailTo); - return (res); - } - token = strtok(NULL, ","); - } - efree(tempMailTo); - } - else if (headers) { - if (pos1 = strstr(headers_lc, "bcc:")) { - /* Real offset is memaddress from the original headers + difference of - * string found in the lowercase headrs + 4 characters to jump over - * the bcc: */ - pos1 = headers + (pos1 - headers_lc) + 4; - if (NULL == (pos2 = strstr(pos1, "\r\n"))) { - tempMailTo = estrndup(pos1, strlen(pos1)); - /* Later, when we remove the Bcc: out of the - header we know it was the last thing. */ - pos2 = pos1; - } else { - tempMailTo = estrndup(pos1, pos2 - pos1); - } - - token = strtok(tempMailTo, ","); - while (token != NULL) - { - SMTP_SKIP_SPACE(token); - snprintf(Buffer, MAIL_BUFFER_SIZE, "RCPT TO:<%s>\r\n", token); - if ((res = Post(Buffer)) != SUCCESS) { - efree(tempMailTo); - return (res); - } - if ((res = Ack(&server_response)) != SUCCESS) { - SMTP_ERROR_RESPONSE(server_response); - efree(tempMailTo); - return (res); - } - token = strtok(NULL, ","); - } - efree(tempMailTo); - - /* Now that we've identified that we've a Bcc list, - remove it from the current header. */ - if (NULL == (stripped_header = ecalloc(1, strlen(headers)))) { - return OUT_OF_MEMORY; - } - /* headers = point to string start of header - pos1 = pointer IN headers where the Bcc starts - '4' = Length of the characters 'bcc:' - Because we've added +4 above for parsing the Emails - we've to substract them here. */ - memcpy(stripped_header, headers, pos1 - headers - 4); - if (pos1 != pos2) { - /* if pos1 != pos2 , pos2 points to the rest of the headers. - Since pos1 != pos2 if "\r\n" was found, we know those characters - are there and so we jump over them (else we would generate a new header - which would look like "\r\n\r\n". */ - memcpy(stripped_header + (pos1 - headers - 4), pos2 + 2, strlen(pos2) - 2); - } - } - } - - /* Simplify the code that we create a copy of stripped_header no matter if - we actually strip something or not. So we've a single efree() later. */ - if (headers && !stripped_header) { - if (NULL == (stripped_header = estrndup(headers, strlen(headers)))) { - return OUT_OF_MEMORY; - } - } - - if ((res = Post("DATA\r\n")) != SUCCESS) { - if (stripped_header) { - efree(stripped_header); - } - return (res); - } - if ((res = Ack(&server_response)) != SUCCESS) { - SMTP_ERROR_RESPONSE(server_response); - if (stripped_header) { - efree(stripped_header); - } - return (res); - } - - /* send message header */ - if (Subject == NULL) { - res = PostHeader(RPath, "No Subject", mailTo, stripped_header TSRMLS_CC); - } else { - res = PostHeader(RPath, Subject, mailTo, stripped_header TSRMLS_CC); - } - if (stripped_header) { - efree(stripped_header); - } - if (res != SUCCESS) { - return (res); - } - - /* Escape \n. sequences - * We use php_str_to_str() and not php_str_replace_in_subject(), since the latter - * uses ZVAL as it's parameters */ - data_cln = php_str_to_str(data, strlen(data), PHP_WIN32_MAIL_DOT_PATTERN, sizeof(PHP_WIN32_MAIL_DOT_PATTERN) - 1, - PHP_WIN32_MAIL_DOT_REPLACE, sizeof(PHP_WIN32_MAIL_DOT_REPLACE) - 1, &data_cln_len); - if (!data_cln) { - data_cln = estrdup(""); - data_cln_len = 1; - } - - /* send message contents in 1024 chunks */ - { - char c, *e2, *e = data_cln + data_cln_len; - p = data_cln; - - while (e - p > 1024) { - e2 = p + 1024; - c = *e2; - *e2 = '\0'; - if ((res = Post(p)) != SUCCESS) { - efree(data_cln); - return(res); - } - *e2 = c; - p = e2; - } - if ((res = Post(p)) != SUCCESS) { - efree(data_cln); - return(res); - } - } - - efree(data_cln); - - /*send termination dot */ - if ((res = Post("\r\n.\r\n")) != SUCCESS) - return (res); - if ((res = Ack(&server_response)) != SUCCESS) { - SMTP_ERROR_RESPONSE(server_response); - return (res); - } - - return (SUCCESS); -} - -static int addToHeader(char **header_buffer, const char *specifier, char *string) -{ - if (NULL == (*header_buffer = erealloc(*header_buffer, strlen(*header_buffer) + strlen(specifier) + strlen(string) + 1))) { - return 0; - } - sprintf(*header_buffer + strlen(*header_buffer), specifier, string); - return 1; -} - -/********************************************************************* -// Name: PostHeader -// Input: 1) return path -// 2) Subject -// 3) destination address -// 4) headers -// Output: Error code or Success -// Description: -// Author/Date: jcar 20/9/96 -// History: -//********************************************************************/ -static int PostHeader(char *RPath, char *Subject, char *mailTo, char *xheaders TSRMLS_DC) -{ - /* Print message header according to RFC 822 */ - /* Return-path, Received, Date, From, Subject, Sender, To, cc */ - - int res; - char *header_buffer; - char *headers_lc = NULL; - size_t i; - - if (xheaders) { - if (NULL == (headers_lc = estrdup(xheaders))) { - return OUT_OF_MEMORY; - } - for (i = 0; i < strlen(headers_lc); i++) { - headers_lc[i] = tolower(headers_lc[i]); - } - } - - header_buffer = ecalloc(1, MAIL_BUFFER_SIZE); - - if (!xheaders || !strstr(headers_lc, "date:")) { - time_t tNow = time(NULL); - char *dt = php_format_date("r", 1, tNow, 1 TSRMLS_CC); - - snprintf(header_buffer, MAIL_BUFFER_SIZE, "Date: %s\r\n", dt); - efree(dt); - } - - if (!headers_lc || !strstr(headers_lc, "from:")) { - if (!addToHeader(&header_buffer, "From: %s\r\n", RPath)) { - goto PostHeader_outofmem; - } - } - if (!addToHeader(&header_buffer, "Subject: %s\r\n", Subject)) { - goto PostHeader_outofmem; - } - - /* Only add the To: field from the $to parameter if isn't in the custom headers */ - if ((headers_lc && (!strstr(headers_lc, "\r\nto:") && (strncmp(headers_lc, "to:", 3) != 0))) || !headers_lc) { - if (!addToHeader(&header_buffer, "To: %s\r\n", mailTo)) { - goto PostHeader_outofmem; - } - } - if (xheaders) { - if (!addToHeader(&header_buffer, "%s\r\n", xheaders)) { - goto PostHeader_outofmem; - } - } - - if (headers_lc) { - efree(headers_lc); - } - if ((res = Post(header_buffer)) != SUCCESS) { - efree(header_buffer); - return (res); - } - efree(header_buffer); - - if ((res = Post("\r\n")) != SUCCESS) { - return (res); - } - - return (SUCCESS); - -PostHeader_outofmem: - if (headers_lc) { - efree(headers_lc); - } - return OUT_OF_MEMORY; -} - - - -/********************************************************************* -// Name: MailConnect -// Input: None -// Output: None -// Description: Connect to the mail host and receive the welcome message. -// Author/Date: jcar 20/9/96 -// History: -//********************************************************************/ -static int MailConnect() -{ - - int res; - short portnum; - - /* Create Socket */ - if ((sc = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) - return (FAILED_TO_OBTAIN_SOCKET_HANDLE); - - /* Get our own host name */ - if (gethostname(LocalHost, HOST_NAME_LEN)) - return (FAILED_TO_GET_HOSTNAME); - - /* Resolve the servers IP */ - /* - if (!isdigit(MailHost[0])||!gethostbyname(MailHost)) - { - return (FAILED_TO_RESOLVE_HOST); - } - */ - - portnum = (short) INI_INT("smtp_port"); - if (!portnum) { - portnum = 25; - } - - /* Connect to server */ - sock_in.sin_family = AF_INET; - sock_in.sin_port = htons(portnum); - sock_in.sin_addr.S_un.S_addr = GetAddr(MailHost); - - if (connect(sc, (LPSOCKADDR) & sock_in, sizeof(sock_in))) - return (FAILED_TO_CONNECT); - - /* receive Server welcome message */ - res = Ack(NULL); - return (res); -} - - -/********************************************************************* -// Name: Post -// Input: -// Output: -// Description: -// Author/Date: jcar 20/9/96 -// History: -//********************************************************************/ -static int Post(LPCSTR msg) -{ - int len = strlen(msg); - int slen; - int index = 0; - - while (len > 0) { - if ((slen = send(sc, msg + index, len, 0)) < 1) - return (FAILED_TO_SEND); - len -= slen; - index += slen; - } - return (SUCCESS); -} - - - -/********************************************************************* -// Name: Ack -// Input: -// Output: -// Description: -// Get the response from the server. We only want to know if the -// last command was successful. -// Author/Date: jcar 20/9/96 -// History: -//********************************************************************/ -static int Ack(char **server_response) -{ - static char buf[MAIL_BUFFER_SIZE]; - int rlen; - int Index = 0; - int Received = 0; - -again: - - if ((rlen = recv(sc, buf + Index, ((MAIL_BUFFER_SIZE) - 1) - Received, 0)) < 1) { - return (FAILED_TO_RECEIVE); - } - Received += rlen; - buf[Received] = 0; - /*err_msg fprintf(stderr,"Received: (%d bytes) %s", rlen, buf + Index); */ - - /* Check for newline */ - Index += rlen; - - /* SMPT RFC says \r\n is the only valid line ending, who are we to argue ;) - * The response code must contain at least 5 characters ex. 220\r\n */ - if (Received < 5 || buf[Received - 1] != '\n' || buf[Received - 2] != '\r') { - goto again; - } - - if (buf[0] > '3') { - /* If we've a valid pointer, return the SMTP server response so the error message contains more information */ - if (server_response) { - int dec = 0; - /* See if we have something like \r, \n, \r\n or \n\r at the end of the message and chop it off */ - if (Received > 2) { - if (buf[Received-1] == '\n' || buf[Received-1] == '\r') { - dec++; - if (buf[Received-2] == '\r' || buf[Received-2] == '\n') { - dec++; - } - } - - } - *server_response = estrndup(buf, Received - dec); - } - return (SMTP_SERVER_ERROR); - } - - return (SUCCESS); -} - - -/********************************************************************* -// Name: unsigned long GetAddr (LPSTR szHost) -// Input: -// Output: -// Description: Given a string, it will return an IP address. -// - first it tries to convert the string directly -// - if that fails, it tries o resolve it as a hostname -// -// WARNING: gethostbyname() is a blocking function -// Author/Date: jcar 20/9/96 -// History: -//********************************************************************/ -static unsigned long GetAddr(LPSTR szHost) -{ - LPHOSTENT lpstHost; - u_long lAddr = INADDR_ANY; - - /* check that we have a string */ - if (*szHost) { - - /* check for a dotted-IP address string */ - lAddr = inet_addr(szHost); - - /* If not an address, then try to resolve it as a hostname */ - if ((lAddr == INADDR_NONE) && (strcmp(szHost, "255.255.255.255"))) { - - lpstHost = gethostbyname(szHost); - if (lpstHost) { /* success */ - lAddr = *((u_long FAR *) (lpstHost->h_addr)); - } else { - lAddr = INADDR_ANY; /* failure */ - } - } - } - return (lAddr); -} /* end GetAddr() */ diff --git a/win32/sendmail.h b/win32/sendmail.h deleted file mode 100644 index 0ec916d6c8fc7..0000000000000 --- a/win32/sendmail.h +++ /dev/null @@ -1,50 +0,0 @@ -#if !defined(sendmail_h) /* Sentry, use file only if it's not already included. */ -#define sendmail_h -#ifndef NETWARE -#include -#endif - -#define HOST_NAME_LEN 256 -#define MAX_APPNAME_LENGHT 100 -#define MAIL_BUFFER_SIZE (1024*4) /* 4k buffer */ -/* Return values */ -#define MIN_ERROR_INDEX 0 /* Always 0 like SUCCESS */ -#define SUCCESS 0 -#define FAILED_TO_PARSE_ARGUMENTS 1 -#define FAILED_TO_OPEN_MAILFILE 2 -#define FAILED_TO_START_SOCKETS 3 -#define FAILED_TO_RESOLVE_HOST 4 -#define FAILED_TO_OBTAIN_SOCKET_HANDLE 5 -#define FAILED_TO_CONNECT 6 -#define FAILED_TO_SEND 7 -#define FAILED_TO_RECEIVE 8 -#define SMTP_SERVER_ERROR 9 -#define FAILED_TO_GET_HOSTNAME 10 -#define OUT_OF_MEMORY 11 -#define UNKNOWN_ERROR 12 -#define BAD_MSG_CONTENTS 13 -#define BAD_MSG_SUBJECT 14 -#define BAD_MSG_DESTINATION 15 -#define BAD_MSG_RPATH 16 -#define BAD_MAIL_HOST 17 -#define BAD_MSG_FILE 18 -#define W32_SM_SENDMAIL_FROM_NOT_SET 19 -#define W32_SM_SENDMAIL_FROM_MALFORMED 20 -#define W32_SM_PCRE_ERROR 21 -#define MAX_ERROR_INDEX 22 /* Always last error message + 1 */ - - -PHPAPI int TSendMail(char *smtpaddr, int *returnerror, char **error_message, - char *RPath, char *Subject, char *mailTo, char *data, - char *mailCc, char *mailBcc, char *mailRPath TSRMLS_DC); -PHPAPI void TSMClose(void); -static int SendText(char *RPath, char *Subject, char *mailTo, char *mailCc, char *mailBcc, char *data, - char *headers, char *headers_lc, char **error_message TSRMLS_DC); -PHPAPI char *GetSMErrorText(int index); - -static int MailConnect(); -static int PostHeader(char *RPath, char *Subject, char *mailTo, char *xheaders TSRMLS_DC); -static int Post(LPCSTR msg); -static int Ack(char **server_response); -static unsigned long GetAddr(LPSTR szHost); -#endif /* sendmail_h */ diff --git a/win32/signal.h b/win32/signal.h deleted file mode 100644 index de43f98e8075b..0000000000000 --- a/win32/signal.h +++ /dev/null @@ -1,16 +0,0 @@ -/* -** Change here: if you plan to use your own version of -** the original "#include " produces an infinite reinclusion -** of this file, instead of including the standard include-file. -** Under MS Visual Studio, there are occurences in the source where -** gets included throughout the PHP sources, and this should -** include THIS file, not the standard one which does not have the -** additional signals defined below. -** One way to remove the infinite reinclusion of this file (which is located -** in ../win32), is to specify the parent directory in which the standard -** include file is located. -*/ -#include <../include/signal.h> -#define SIGALRM 13 -#define SIGVTALRM 26 /* virtual time alarm */ -#define SIGPROF 27 /* profiling time alarm */ diff --git a/win32/syslog.h b/win32/syslog.h deleted file mode 100644 index 281c69d9e31c9..0000000000000 --- a/win32/syslog.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Sterling Hughes | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef SYSLOG_H -#define SYSLOG_H -#define WIN32_LEAN_AND_MEAN -#include - -#define LOG_EMERG 1 -#define LOG_ALERT 1 -#define LOG_CRIT 1 -#define LOG_ERR 4 -#define LOG_WARNING 5 -#define LOG_NOTICE 6 -#define LOG_INFO 6 -#define LOG_DEBUG 6 - -#define LOG_PRIMASK 0x07 - -#define LOG_PRI(p) ((p) & LOG_PRIMASK) -#define LOG_MAKEPRI(fac, pri) (((fac) << 3) | (pri)) - -#define LOG_KERN (0<<3) -#define LOG_USER (1<<3) -#define LOG_MAIL (2<<3) -#define LOG_DAEMON (3<<3) -#define LOG_AUTH (4<<3) -#define LOG_SYSLOG (5<<3) -#define LOG_LPR (6<<3) -#define LOG_NEWS (7<<3) -#define LOG_UUCP (8<<3) -#define LOG_CRON (9<<3) -#define LOG_AUTHPRIV (10<<3) - -#define LOG_NFACILITIES 10 -#define LOG_FACMASK 0x03f8 -#define LOG_FAC(p) (((p) & LOG_FACMASK) >> 3) - -#define LOG_MASK(pri) (1 << (pri)) -#define LOG_UPTO(pri) ((1 << ((pri)+1)) - 1) - -/* - * Option flags for openlog. - * - * LOG_ODELAY no longer does anything. - * LOG_NDELAY is the inverse of what it used to be. - */ -#define LOG_PID 0x01 /* log the pid with each message */ -#define LOG_CONS 0x02 /* log on the console if errors in sending */ -#define LOG_ODELAY 0x04 /* delay open until first syslog() (default) */ -#define LOG_NDELAY 0x08 /* don't delay open */ -#define LOG_NOWAIT 0x10 /* don't wait for console forks: DEPRECATED */ -#define LOG_PERROR 0x20 /* log to stderr as well */ - - -extern void closelog(void); -extern void openlog(const char *, int, int); -extern void syslog(int, const char *, ...); - - -#endif /* SYSLOG_H */ diff --git a/win32/syslog.reg b/win32/syslog.reg deleted file mode 100644 index 2baa88e36661f..0000000000000 --- a/win32/syslog.reg +++ /dev/null @@ -1,5 +0,0 @@ -REGEDIT4 - -[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\PHP-5.1.0-dev] -"TypesSupported"=dword:00000007 -"EventMessageFile"="C:\\php5\\php5ts.dll" diff --git a/win32/testsuite.dsp b/win32/testsuite.dsp deleted file mode 100644 index 5cd65622f5d66..0000000000000 --- a/win32/testsuite.dsp +++ /dev/null @@ -1,150 +0,0 @@ -# Microsoft Developer Studio Project File - Name="testsuite" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Generic Project" 0x010a - -CFG=testsuite - Win32 Debug_TS -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "testsuite.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "testsuite.mak" CFG="testsuite - Win32 Debug_TS" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "testsuite - Win32 Release_TS_Inline" (based on "Win32 (x86) Generic Project") -!MESSAGE "testsuite - Win32 Release_TS" (based on "Win32 (x86) Generic Project") -!MESSAGE "testsuite - Win32 Release_TSDbg" (based on "Win32 (x86) Generic Project") -!MESSAGE "testsuite - Win32 Debug_TS" (based on "Win32 (x86) Generic Project") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -MTL=midl.exe - -!IF "$(CFG)" == "testsuite - Win32 Release_TS_Inline" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_TS_Inline" -# PROP BASE Intermediate_Dir "Release_TS_Inline" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\Release_TS_Inline" -# PROP Intermediate_Dir "..\..\" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "testsuite - Win32 Release_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_TS" -# PROP BASE Intermediate_Dir "Release_TS" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\Release_TS" -# PROP Intermediate_Dir "..\..\" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "testsuite - Win32 Release_TSDbg" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_TSDbg" -# PROP BASE Intermediate_Dir "Release_TSDbg" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\Release_TSDbg" -# PROP Intermediate_Dir "..\..\" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "testsuite - Win32 Debug_TS" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_TS" -# PROP BASE Intermediate_Dir "Debug_TS" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\Debug_TS" -# PROP Intermediate_Dir "..\..\" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "testsuite - Win32 Release_TS_Inline" -# Name "testsuite - Win32 Release_TS" -# Name "testsuite - Win32 Release_TSDbg" -# Name "testsuite - Win32 Debug_TS" -# Begin Source File - -SOURCE=..\results.txt - -!IF "$(CFG)" == "testsuite - Win32 Release_TS_Inline" - -# PROP Intermediate_Dir "..\Release_TS_Inline" -# PROP Ignore_Default_Tool 1 -# Begin Custom Build - Running Testsuite, please wait... -IntDir=.\..\Release_TS_Inline -InputPath=..\results.txt - -"..\..\results.txt" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - set TOP_BUILDDIR=Release_TS_inline - set TEST_DIR=tests - $(IntDir)\php.exe -q ..\run-tests.php > ..\results.txt - -# End Custom Build - -!ELSEIF "$(CFG)" == "testsuite - Win32 Release_TS" - -# PROP Intermediate_Dir "..\Release_TS" -# PROP Ignore_Default_Tool 1 -# Begin Custom Build - Running Testsuite, please wait... -IntDir=.\..\Release_TS -InputPath=..\results.txt - -"..\..\results.txt" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - set TOP_BUILDDIR=Release_TS - set TEST_DIR=tests - $(IntDir)\php.exe -q ..\run-tests.php > ..\results.txt - -# End Custom Build - -!ELSEIF "$(CFG)" == "testsuite - Win32 Release_TSDbg" - -# PROP Intermediate_Dir "..\Release_TSDbg" -# PROP Ignore_Default_Tool 1 -# Begin Custom Build - Running Testsuite, please wait... -IntDir=.\..\Release_TSDbg -InputPath=..\results.txt - -"..\..\results.txt" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - set TOP_BUILDDIR=Release_TSDbg - set TEST_DIR=tests - $(IntDir)\php.exe -q ..\run-tests.php > ..\results.txt - -# End Custom Build - -!ELSEIF "$(CFG)" == "testsuite - Win32 Debug_TS" - -# PROP Intermediate_Dir "..\Debug_TS" -# PROP Exclude_From_Build 1 - -!ENDIF - -# End Source File -# End Target -# End Project diff --git a/win32/time.c b/win32/time.c deleted file mode 100644 index 693f07418536e..0000000000000 --- a/win32/time.c +++ /dev/null @@ -1,228 +0,0 @@ - -/***************************************************************************** - * * - * DH_TIME.C * - * * - * Freely redistributable and modifiable. Use at your own risk. * - * * - * Copyright 1994 The Downhill Project * - * - * Modified by Shane Caraveo for use with PHP - * - *****************************************************************************/ - -/* $Id$ */ - - /** - * - * 04-Feb-2001 - * - Added patch by "Vanhanen, Reijo" - * Improves accuracy of msec - */ - -/* Include stuff ************************************************************ */ - -/* this allows the use of the WaitableTimer functions. - * For win98 and later */ -#define _WIN32_WINNT 0x400 - -#include "time.h" -#include "unistd.h" -#include "signal.h" -#include -#include -#include -#include -#include "php_win32_globals.h" - -int getfilesystemtime(struct timeval *time_Info) -{ -FILETIME ft; -__int64 ff; - - GetSystemTimeAsFileTime(&ft); /* 100 ns blocks since 01-Jan-1641 */ - /* resolution seems to be 0.01 sec */ - ff = *(__int64*)(&ft); - time_Info->tv_sec = (int)(ff/(__int64)10000000-(__int64)11644473600); - time_Info->tv_usec = (int)(ff % 10000000)/10; - return 0; -} - - - -PHPAPI int gettimeofday(struct timeval *time_Info, struct timezone *timezone_Info) -{ - __int64 timer; - LARGE_INTEGER li; - BOOL b; - double dt; - TSRMLS_FETCH(); - - /* Get the time, if they want it */ - if (time_Info != NULL) { - if (PW32G(starttime).tv_sec == 0) { - b = QueryPerformanceFrequency(&li); - if (!b) { - PW32G(starttime).tv_sec = -1; - } - else { - PW32G(freq) = li.QuadPart; - b = QueryPerformanceCounter(&li); - if (!b) { - PW32G(starttime).tv_sec = -1; - } - else { - getfilesystemtime(&PW32G(starttime)); - timer = li.QuadPart; - dt = (double)timer/PW32G(freq); - PW32G(starttime).tv_usec -= (int)((dt-(int)dt)*1000000); - if (PW32G(starttime).tv_usec < 0) { - PW32G(starttime).tv_usec += 1000000; - --PW32G(starttime).tv_sec; - } - PW32G(starttime).tv_sec -= (int)dt; - } - } - } - if (PW32G(starttime).tv_sec > 0) { - b = QueryPerformanceCounter(&li); - if (!b) { - PW32G(starttime).tv_sec = -1; - } - else { - timer = li.QuadPart; - if (timer < PW32G(lasttime)) { - getfilesystemtime(time_Info); - dt = (double)timer/PW32G(freq); - PW32G(starttime) = *time_Info; - PW32G(starttime).tv_usec -= (int)((dt-(int)dt)*1000000); - if (PW32G(starttime).tv_usec < 0) { - PW32G(starttime).tv_usec += 1000000; - --PW32G(starttime).tv_sec; - } - PW32G(starttime).tv_sec -= (int)dt; - } - else { - PW32G(lasttime) = timer; - dt = (double)timer/PW32G(freq); - time_Info->tv_sec = PW32G(starttime).tv_sec + (int)dt; - time_Info->tv_usec = PW32G(starttime).tv_usec + (int)((dt-(int)dt)*1000000); - if (time_Info->tv_usec > 1000000) { - time_Info->tv_usec -= 1000000; - ++time_Info->tv_sec; - } - } - } - } - if (PW32G(starttime).tv_sec < 0) { - getfilesystemtime(time_Info); - } - - } - /* Get the timezone, if they want it */ - if (timezone_Info != NULL) { - _tzset(); - timezone_Info->tz_minuteswest = _timezone; - timezone_Info->tz_dsttime = _daylight; - } - /* And return */ - return 0; -} - -void usleep(unsigned int useconds) -{ - HANDLE timer; - LARGE_INTEGER due; - - due.QuadPart = -(10 * (__int64)useconds); - - timer = CreateWaitableTimer(NULL, TRUE, NULL); - SetWaitableTimer(timer, &due, 0, NULL, NULL, 0); - WaitForSingleObject(timer, INFINITE); - CloseHandle(timer); -} - -#if 0 /* looks pretty ropey in here */ -#ifdef HAVE_SETITIMER - - -#ifndef THREAD_SAFE -unsigned int proftimer, virttimer, realtimer; -extern LPMSG phpmsg; -#endif - -struct timer_msg { - int signal; - unsigned int threadid; -}; - - -LPTIMECALLBACK setitimer_timeout(UINT uTimerID, UINT info, DWORD dwUser, DWORD dw1, DWORD dw2) -{ - struct timer_msg *msg = (struct timer_msg *) info; - - if (msg) { - raise((int) msg->signal); - PostThreadMessage(msg->threadid, - WM_NOTIFY, msg->signal, 0); - free(msg); - } - return 0; -} - -PHPAPI int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue) -{ - int timeout = value->it_value.tv_sec * 1000 + value->it_value.tv_usec; - int repeat = TIME_ONESHOT; - - /*make sure the message queue is initialized */ - PeekMessage(phpmsg, NULL, WM_USER, WM_USER, PM_NOREMOVE); - if (timeout > 0) { - struct timer_msg *msg = malloc(sizeof(struct timer_msg)); - msg->threadid = GetCurrentThreadId(); - if (!ovalue) { - repeat = TIME_PERIODIC; - } - switch (which) { - case ITIMER_REAL: - msg->signal = SIGALRM; - realtimer = timeSetEvent(timeout, 100, (LPTIMECALLBACK) setitimer_timeout, (UINT) msg, repeat); - break; - case ITIMER_VIRT: - msg->signal = SIGVTALRM; - virttimer = timeSetEvent(timeout, 100, (LPTIMECALLBACK) setitimer_timeout, (UINT) msg, repeat); - break; - case ITIMER_PROF: - msg->signal = SIGPROF; - proftimer = timeSetEvent(timeout, 100, (LPTIMECALLBACK) setitimer_timeout, (UINT) msg, repeat); - break; - default: - errno = EINVAL; - return -1; - break; - } - } else { - switch (which) { - case ITIMER_REAL: - timeKillEvent(realtimer); - break; - case ITIMER_VIRT: - timeKillEvent(virttimer); - break; - case ITIMER_PROF: - timeKillEvent(proftimer); - break; - default: - errno = EINVAL; - return -1; - break; - } - } - - - return 0; -} - -#endif -#endif - diff --git a/win32/time.h b/win32/time.h deleted file mode 100644 index 5c52e7837e166..0000000000000 --- a/win32/time.h +++ /dev/null @@ -1,43 +0,0 @@ -/***************************************************************************** - * * - * sys/time.h * - * * - * Freely redistributable and modifiable. Use at your own risk. * - * * - * Copyright 1994 The Downhill Project * - * - * Modified by Shane Caraveo for PHP - * - *****************************************************************************/ -#ifndef TIME_H -#define TIME_H - -/* Include stuff ************************************************************ */ -#include -#include "php.h" - -/* Struct stuff ************************************************************* */ -struct timezone { - int tz_minuteswest; - int tz_dsttime; -}; - - -struct itimerval { - struct timeval it_interval; /* next value */ - struct timeval it_value; /* current value */ -}; - -#define ITIMER_REAL 0 /*generates sigalrm */ -#define ITIMER_VIRTUAL 1 /*generates sigvtalrm */ -#define ITIMER_VIRT 1 /*generates sigvtalrm */ -#define ITIMER_PROF 2 /*generates sigprof */ - -/* Prototype stuff ********************************************************** */ -PHPAPI extern int gettimeofday(struct timeval *time_Info, struct timezone *timezone_Info); - -/* setitimer operates at 100 millisecond resolution */ -PHPAPI extern int setitimer(int which, const struct itimerval *value, - struct itimerval *ovalue); - -#endif diff --git a/win32/unistd.h b/win32/unistd.h deleted file mode 100644 index 96e0aedc13475..0000000000000 --- a/win32/unistd.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef _PHP_WIN32_UNISTD_H -#define _PHP_WIN32_UNISTD_H -void usleep(unsigned int useconds); -#endif diff --git a/win32/wfile.c b/win32/wfile.c deleted file mode 100644 index 1407d6a32b26c..0000000000000 --- a/win32/wfile.c +++ /dev/null @@ -1,17 +0,0 @@ - -/* Function borrowed from the Downhill Project */ -#include "wfile.h" -#include "direct.h" - -int readlink(char *file_Name, char *buf_Mem, int buf_Size) -{ - /* See if the file exists */ - if (access(file_Name, X_OK) == -1) { - errno = ENOENT; - } else { - errno = EINVAL; - } - - /* Either way, it's not a link */ - return -1; -} diff --git a/win32/wfile.h b/win32/wfile.h deleted file mode 100644 index 2e79406478c75..0000000000000 --- a/win32/wfile.h +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include -#include -#include - -#define access _access -#define X_OK 0 -#ifndef ENOENT -#define ENOENT 136 -#endif -#ifndef EINVAL -#define EINVAL 131 -#endif - -int readlink(char *, char *, int); -int checkroot(char *path); diff --git a/win32/winutil.c b/win32/winutil.c deleted file mode 100644 index 4a2fbb87bf867..0000000000000 --- a/win32/winutil.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#include "php.h" - -PHPAPI char *php_win_err(int error) -{ - char *buf = NULL; - - FormatMessage( - FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&buf, 0, NULL - ); - - return (buf ? (char *) buf : ""); -} diff --git a/win32/winutil.h b/win32/winutil.h deleted file mode 100644 index 4915a15ec1006..0000000000000 --- a/win32/winutil.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2007 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 | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: | - +----------------------------------------------------------------------+ - */ - -PHPAPI char *php_win_err(int error); - -#define php_win_err() php_win_err(GetLastError()) diff --git a/win32/wsyslog.c b/win32/wsyslog.c deleted file mode 100644 index 4266079e13496..0000000000000 --- a/win32/wsyslog.c +++ /dev/null @@ -1,136 +0,0 @@ -/* - * This file modified from sources for imap4 for use - * in PHP 3 - */ -/* - * Program: Unix compatibility routines - * - * Author: Mark Crispin - * Networks and Distributed Computing - * Computing & Communications - * University of Washington - * Administration Building, AG-44 - * Seattle, WA 98195 - * Internet: MRC@CAC.Washington.EDU - * - * Date: 14 September 1996 - * Last Edited: 22 October 1996 - * - * Copyright 1996 by the University of Washington - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, provided - * that the above copyright notice appears in all copies and that both the - * above copyright notice and this permission notice appear in supporting - * documentation, and that the name of the University of Washington not be - * used in advertising or publicity pertaining to distribution of the software - * without specific, written prior permission. This software is made available - * "as is", and - * THE UNIVERSITY OF WASHINGTON DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, - * WITH REGARD TO THIS SOFTWARE, INCLUDING WITHOUT LIMITATION ALL IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, AND IN - * NO EVENT SHALL THE UNIVERSITY OF WASHINGTON BE LIABLE FOR ANY SPECIAL, - * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, TORT - * (INCLUDING NEGLIGENCE) OR STRICT LIABILITY, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - */ - - -/* DEDICATION - - * This file is dedicated to my dog, Unix, also known as Yun-chan and - * Unix J. Terwilliker Jehosophat Aloysius Monstrosity Animal Beast. Unix - * passed away at the age of 11 1/2 on September 14, 1996, 12:18 PM PDT, after - * a two-month bout with cirrhosis of the liver. - * - * He was a dear friend, and I miss him terribly. - * - * Lift a leg, Yunie. Luv ya forever!!!! - */ - -#include "php.h" /*php specific */ -#include "syslog.h" -#include -#include -#include - -#include "php_win32_globals.h" -#include "wsyslog.h" - -void closelog(void) -{ - TSRMLS_FETCH(); - if (PW32G(log_source)) { - DeregisterEventSource(PW32G(log_source)); - PW32G(log_source) = NULL; - } - if (PW32G(log_header)) { - STR_FREE(PW32G(log_header)); - PW32G(log_header) = NULL; - } -} - -/* Emulator for BSD syslog() routine - * Accepts: priority - * message - * parameters - */ - -void syslog(int priority, const char *message, ...) -{ - va_list args; - LPTSTR strs[2]; - unsigned short etype; - char *tmp = NULL; - DWORD evid; - TSRMLS_FETCH(); - - /* default event source */ - if (!PW32G(log_source)) - openlog("php", LOG_PID, LOG_SYSLOG); - - switch (priority) { /* translate UNIX type into NT type */ - case LOG_ALERT: - etype = EVENTLOG_ERROR_TYPE; - evid = PHP_SYSLOG_ERROR_TYPE; - break; - case LOG_INFO: - etype = EVENTLOG_INFORMATION_TYPE; - evid = PHP_SYSLOG_INFO_TYPE; - break; - default: - etype = EVENTLOG_WARNING_TYPE; - evid = PHP_SYSLOG_WARNING_TYPE; - } - va_start(args, message); /* initialize vararg mechanism */ - vspprintf(&tmp, 0, message, args); /* build message */ - strs[0] = PW32G(log_header); /* write header */ - strs[1] = tmp; /* then the message */ - /* report the event */ - ReportEvent(PW32G(log_source), etype, (unsigned short) priority, evid, NULL, 2, 0, strs, NULL); - va_end(args); - efree(tmp); -} - - -/* Emulator for BSD openlog() routine - * Accepts: identity - * options - * facility - */ - -void openlog(const char *ident, int logopt, int facility) -{ - TSRMLS_FETCH(); - - if (PW32G(log_source)) { - closelog(); - } - - STR_FREE(PW32G(log_header)); - - PW32G(log_source) = RegisterEventSource(NULL, "PHP-" PHP_VERSION); - spprintf(&PW32G(log_header), 0, (logopt & LOG_PID) ? "%s[%d]" : "%s", ident, getpid()); -}